File manager - Edit - /home/u982231449/domains/huntora.site/public_html/static/img/logo/fonts.tar
Back
class-wp-font-face.php 0000644 00000024016 15025641213 0010650 0 ustar 00 <?php /** * WP_Font_Face class. * * @package WordPress * @subpackage Fonts * @since 6.4.0 */ /** * Font Face generates and prints `@font-face` styles for given fonts. * * @since 6.4.0 */ class WP_Font_Face { /** * The font-face property defaults. * * @since 6.4.0 * * @var string[] */ private $font_face_property_defaults = array( 'font-family' => '', 'font-style' => 'normal', 'font-weight' => '400', 'font-display' => 'fallback', ); /** * Valid font-face property names. * * @since 6.4.0 * * @var string[] */ private $valid_font_face_properties = array( 'ascent-override', 'descent-override', 'font-display', 'font-family', 'font-stretch', 'font-style', 'font-weight', 'font-variant', 'font-feature-settings', 'font-variation-settings', 'line-gap-override', 'size-adjust', 'src', 'unicode-range', ); /** * Valid font-display values. * * @since 6.4.0 * * @var string[] */ private $valid_font_display = array( 'auto', 'block', 'fallback', 'swap', 'optional' ); /** * Array of font-face style tag's attribute(s) * where the key is the attribute name and the * value is its value. * * @since 6.4.0 * * @var string[] */ private $style_tag_attrs = array(); /** * Creates and initializes an instance of WP_Font_Face. * * @since 6.4.0 */ public function __construct() { if ( function_exists( 'is_admin' ) && ! is_admin() && function_exists( 'current_theme_supports' ) && ! current_theme_supports( 'html5', 'style' ) ) { $this->style_tag_attrs = array( 'type' => 'text/css' ); } } /** * Generates and prints the `@font-face` styles for the given fonts. * * @since 6.4.0 * * @param array[][] $fonts Optional. The font-families and their font variations. * See {@see wp_print_font_faces()} for the supported fields. * Default empty array. */ public function generate_and_print( array $fonts ) { $fonts = $this->validate_fonts( $fonts ); // Bail out if there are no fonts are given to process. if ( empty( $fonts ) ) { return; } $css = $this->get_css( $fonts ); /* * The font-face CSS is contained within <style> tags and can only be interpreted * as CSS in the browser. Using wp_strip_all_tags() is sufficient escaping * to avoid malicious attempts to close </style> and open a <script>. */ $css = wp_strip_all_tags( $css ); // Bail out if there is no CSS to print. if ( empty( $css ) ) { return; } printf( $this->get_style_element(), $css ); } /** * Validates each of the font-face properties. * * @since 6.4.0 * * @param array $fonts The fonts to valid. * @return array Prepared font-faces organized by provider and font-family. */ private function validate_fonts( array $fonts ) { $validated_fonts = array(); foreach ( $fonts as $font_faces ) { foreach ( $font_faces as $font_face ) { $font_face = $this->validate_font_face_declarations( $font_face ); // Skip if failed validation. if ( false === $font_face ) { continue; } $validated_fonts[] = $font_face; } } return $validated_fonts; } /** * Validates each font-face declaration (property and value pairing). * * @since 6.4.0 * * @param array $font_face Font face property and value pairings to validate. * @return array|false Validated font-face on success, or false on failure. */ private function validate_font_face_declarations( array $font_face ) { $font_face = wp_parse_args( $font_face, $this->font_face_property_defaults ); // Check the font-family. if ( empty( $font_face['font-family'] ) || ! is_string( $font_face['font-family'] ) ) { // @todo replace with `wp_trigger_error()`. _doing_it_wrong( __METHOD__, __( 'Font font-family must be a non-empty string.' ), '6.4.0' ); return false; } // Make sure that local fonts have 'src' defined. if ( empty( $font_face['src'] ) || ( ! is_string( $font_face['src'] ) && ! is_array( $font_face['src'] ) ) ) { // @todo replace with `wp_trigger_error()`. _doing_it_wrong( __METHOD__, __( 'Font src must be a non-empty string or an array of strings.' ), '6.4.0' ); return false; } // Validate the 'src' property. foreach ( (array) $font_face['src'] as $src ) { if ( empty( $src ) || ! is_string( $src ) ) { // @todo replace with `wp_trigger_error()`. _doing_it_wrong( __METHOD__, __( 'Each font src must be a non-empty string.' ), '6.4.0' ); return false; } } // Check the font-weight. if ( ! is_string( $font_face['font-weight'] ) && ! is_int( $font_face['font-weight'] ) ) { // @todo replace with `wp_trigger_error()`. _doing_it_wrong( __METHOD__, __( 'Font font-weight must be a properly formatted string or integer.' ), '6.4.0' ); return false; } // Check the font-display. if ( ! in_array( $font_face['font-display'], $this->valid_font_display, true ) ) { $font_face['font-display'] = $this->font_face_property_defaults['font-display']; } // Remove invalid properties. foreach ( $font_face as $property => $value ) { if ( ! in_array( $property, $this->valid_font_face_properties, true ) ) { unset( $font_face[ $property ] ); } } return $font_face; } /** * Gets the style element for wrapping the `@font-face` CSS. * * @since 6.4.0 * * @return string The style element. */ private function get_style_element() { $attributes = $this->generate_style_element_attributes(); return "<style class='wp-fonts-local'{$attributes}>\n%s\n</style>\n"; } /** * Gets the defined <style> element's attributes. * * @since 6.4.0 * * @return string A string of attribute=value when defined, else, empty string. */ private function generate_style_element_attributes() { $attributes = ''; foreach ( $this->style_tag_attrs as $name => $value ) { $attributes .= " {$name}='{$value}'"; } return $attributes; } /** * Gets the `@font-face` CSS styles for locally-hosted font files. * * This method does the following processing tasks: * 1. Orchestrates an optimized `src` (with format) for browser support. * 2. Generates the `@font-face` for all its fonts. * * @since 6.4.0 * * @param array[] $font_faces The font-faces to generate @font-face CSS styles. * @return string The `@font-face` CSS styles. */ private function get_css( $font_faces ) { $css = ''; foreach ( $font_faces as $font_face ) { // Order the font's `src` items to optimize for browser support. $font_face = $this->order_src( $font_face ); // Build the @font-face CSS for this font. $css .= '@font-face{' . $this->build_font_face_css( $font_face ) . '}' . "\n"; } // Don't print the last newline character. return rtrim( $css, "\n" ); } /** * Orders `src` items to optimize for browser support. * * @since 6.4.0 * * @param array $font_face Font face to process. * @return array Font-face with ordered src items. */ private function order_src( array $font_face ) { if ( ! is_array( $font_face['src'] ) ) { $font_face['src'] = (array) $font_face['src']; } $src = array(); $src_ordered = array(); foreach ( $font_face['src'] as $url ) { // Add data URIs first. if ( str_starts_with( trim( $url ), 'data:' ) ) { $src_ordered[] = array( 'url' => $url, 'format' => 'data', ); continue; } $format = pathinfo( $url, PATHINFO_EXTENSION ); $src[ $format ] = $url; } // Add woff2. if ( ! empty( $src['woff2'] ) ) { $src_ordered[] = array( 'url' => $src['woff2'], 'format' => 'woff2', ); } // Add woff. if ( ! empty( $src['woff'] ) ) { $src_ordered[] = array( 'url' => $src['woff'], 'format' => 'woff', ); } // Add ttf. if ( ! empty( $src['ttf'] ) ) { $src_ordered[] = array( 'url' => $src['ttf'], 'format' => 'truetype', ); } // Add eot. if ( ! empty( $src['eot'] ) ) { $src_ordered[] = array( 'url' => $src['eot'], 'format' => 'embedded-opentype', ); } // Add otf. if ( ! empty( $src['otf'] ) ) { $src_ordered[] = array( 'url' => $src['otf'], 'format' => 'opentype', ); } $font_face['src'] = $src_ordered; return $font_face; } /** * Builds the font-family's CSS. * * @since 6.4.0 * * @param array $font_face Font face to process. * @return string This font-family's CSS. */ private function build_font_face_css( array $font_face ) { $css = ''; /* * Wrap font-family in quotes if it contains spaces * and is not already wrapped in quotes. */ if ( str_contains( $font_face['font-family'], ' ' ) && ! str_contains( $font_face['font-family'], '"' ) && ! str_contains( $font_face['font-family'], "'" ) ) { $font_face['font-family'] = '"' . $font_face['font-family'] . '"'; } foreach ( $font_face as $key => $value ) { // Compile the "src" parameter. if ( 'src' === $key ) { $value = $this->compile_src( $value ); } // If font-variation-settings is an array, convert it to a string. if ( 'font-variation-settings' === $key && is_array( $value ) ) { $value = $this->compile_variations( $value ); } if ( ! empty( $value ) ) { $css .= "$key:$value;"; } } return $css; } /** * Compiles the `src` into valid CSS. * * @since 6.4.0 * * @param array $value Value to process. * @return string The CSS. */ private function compile_src( array $value ) { $src = ''; foreach ( $value as $item ) { $src .= ( 'data' === $item['format'] ) ? ", url({$item['url']})" : ", url('{$item['url']}') format('{$item['format']}')"; } $src = ltrim( $src, ', ' ); return $src; } /** * Compiles the font variation settings. * * @since 6.4.0 * * @param array $font_variation_settings Array of font variation settings. * @return string The CSS. */ private function compile_variations( array $font_variation_settings ) { $variations = ''; foreach ( $font_variation_settings as $key => $value ) { $variations .= "$key $value"; } return $variations; } } class-wp-font-collection.php 0000644 00000021274 15025641213 0012110 0 ustar 00 <?php /** * Font Collection class. * * This file contains the Font Collection class definition. * * @package WordPress * @subpackage Fonts * @since 6.5.0 */ /** * Font Collection class. * * @since 6.5.0 * * @see wp_register_font_collection() */ final class WP_Font_Collection { /** * The unique slug for the font collection. * * @since 6.5.0 * @var string */ public $slug; /** * Font collection data. * * @since 6.5.0 * @var array|WP_Error|null */ private $data; /** * Font collection JSON file path or URL. * * @since 6.5.0 * @var string|null */ private $src; /** * WP_Font_Collection constructor. * * @since 6.5.0 * * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes, * and underscores. See sanitize_title(). * @param array $args Font collection data. See wp_register_font_collection() for information on accepted arguments. */ public function __construct( string $slug, array $args ) { $this->slug = sanitize_title( $slug ); if ( $this->slug !== $slug ) { _doing_it_wrong( __METHOD__, /* translators: %s: Font collection slug. */ sprintf( __( 'Font collection slug "%s" is not valid. Slugs must use only alphanumeric characters, dashes, and underscores.' ), $slug ), '6.5.0' ); } $required_properties = array( 'name', 'font_families' ); if ( isset( $args['font_families'] ) && is_string( $args['font_families'] ) ) { // JSON data is lazy loaded by ::get_data(). $this->src = $args['font_families']; unset( $args['font_families'] ); $required_properties = array( 'name' ); } $this->data = $this->sanitize_and_validate_data( $args, $required_properties ); } /** * Retrieves the font collection data. * * @since 6.5.0 * * @return array|WP_Error An array containing the font collection data, or a WP_Error on failure. */ public function get_data() { if ( is_wp_error( $this->data ) ) { return $this->data; } // If the collection uses JSON data, load it and cache the data/error. if ( isset( $this->src ) ) { $this->data = $this->load_from_json( $this->src ); } if ( is_wp_error( $this->data ) ) { return $this->data; } // Set defaults for optional properties. $defaults = array( 'description' => '', 'categories' => array(), ); return wp_parse_args( $this->data, $defaults ); } /** * Loads font collection data from a JSON file or URL. * * @since 6.5.0 * * @param string $file_or_url File path or URL to a JSON file containing the font collection data. * @return array|WP_Error An array containing the font collection data on success, * else an instance of WP_Error on failure. */ private function load_from_json( $file_or_url ) { $url = wp_http_validate_url( $file_or_url ); $file = file_exists( $file_or_url ) ? wp_normalize_path( realpath( $file_or_url ) ) : false; if ( ! $url && ! $file ) { // translators: %s: File path or URL to font collection JSON file. $message = __( 'Font collection JSON file is invalid or does not exist.' ); _doing_it_wrong( __METHOD__, $message, '6.5.0' ); return new WP_Error( 'font_collection_json_missing', $message ); } $data = $url ? $this->load_from_url( $url ) : $this->load_from_file( $file ); if ( is_wp_error( $data ) ) { return $data; } $data = array( 'name' => $this->data['name'], 'font_families' => $data['font_families'], ); if ( isset( $this->data['description'] ) ) { $data['description'] = $this->data['description']; } if ( isset( $this->data['categories'] ) ) { $data['categories'] = $this->data['categories']; } return $data; } /** * Loads the font collection data from a JSON file path. * * @since 6.5.0 * * @param string $file File path to a JSON file containing the font collection data. * @return array|WP_Error An array containing the font collection data on success, * else an instance of WP_Error on failure. */ private function load_from_file( $file ) { $data = wp_json_file_decode( $file, array( 'associative' => true ) ); if ( empty( $data ) ) { return new WP_Error( 'font_collection_decode_error', __( 'Error decoding the font collection JSON file contents.' ) ); } return $this->sanitize_and_validate_data( $data, array( 'font_families' ) ); } /** * Loads the font collection data from a JSON file URL. * * @since 6.5.0 * * @param string $url URL to a JSON file containing the font collection data. * @return array|WP_Error An array containing the font collection data on success, * else an instance of WP_Error on failure. */ private function load_from_url( $url ) { // Limit key to 167 characters to avoid failure in the case of a long URL. $transient_key = substr( 'wp_font_collection_url_' . $url, 0, 167 ); $data = get_site_transient( $transient_key ); if ( false === $data ) { $response = wp_safe_remote_get( $url ); if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { return new WP_Error( 'font_collection_request_error', sprintf( // translators: %s: Font collection URL. __( 'Error fetching the font collection data from "%s".' ), $url ) ); } $data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( empty( $data ) ) { return new WP_Error( 'font_collection_decode_error', __( 'Error decoding the font collection data from the HTTP response JSON.' ) ); } // Make sure the data is valid before storing it in a transient. $data = $this->sanitize_and_validate_data( $data, array( 'font_families' ) ); if ( is_wp_error( $data ) ) { return $data; } set_site_transient( $transient_key, $data, DAY_IN_SECONDS ); } return $data; } /** * Sanitizes and validates the font collection data. * * @since 6.5.0 * * @param array $data Font collection data to sanitize and validate. * @param array $required_properties Required properties that must exist in the passed data. * @return array|WP_Error Sanitized data if valid, otherwise a WP_Error instance. */ private function sanitize_and_validate_data( $data, $required_properties = array() ) { $schema = self::get_sanitization_schema(); $data = WP_Font_Utils::sanitize_from_schema( $data, $schema ); foreach ( $required_properties as $property ) { if ( empty( $data[ $property ] ) ) { $message = sprintf( // translators: 1: Font collection slug, 2: Missing property name, e.g. "font_families". __( 'Font collection "%1$s" has missing or empty property: "%2$s".' ), $this->slug, $property ); _doing_it_wrong( __METHOD__, $message, '6.5.0' ); return new WP_Error( 'font_collection_missing_property', $message ); } } return $data; } /** * Retrieves the font collection sanitization schema. * * @since 6.5.0 * * @return array Font collection sanitization schema. */ private static function get_sanitization_schema() { return array( 'name' => 'sanitize_text_field', 'description' => 'sanitize_text_field', 'font_families' => array( array( 'font_family_settings' => array( 'name' => 'sanitize_text_field', 'slug' => static function ( $value ) { return _wp_to_kebab_case( sanitize_title( $value ) ); }, 'fontFamily' => 'WP_Font_Utils::sanitize_font_family', 'preview' => 'sanitize_url', 'fontFace' => array( array( 'fontFamily' => 'sanitize_text_field', 'fontStyle' => 'sanitize_text_field', 'fontWeight' => 'sanitize_text_field', 'src' => static function ( $value ) { return is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : sanitize_text_field( $value ); }, 'preview' => 'sanitize_url', 'fontDisplay' => 'sanitize_text_field', 'fontStretch' => 'sanitize_text_field', 'ascentOverride' => 'sanitize_text_field', 'descentOverride' => 'sanitize_text_field', 'fontVariant' => 'sanitize_text_field', 'fontFeatureSettings' => 'sanitize_text_field', 'fontVariationSettings' => 'sanitize_text_field', 'lineGapOverride' => 'sanitize_text_field', 'sizeAdjust' => 'sanitize_text_field', 'unicodeRange' => 'sanitize_text_field', ), ), ), 'categories' => array( 'sanitize_title' ), ), ), 'categories' => array( array( 'name' => 'sanitize_text_field', 'slug' => 'sanitize_title', ), ), ); } } dashicons.woff2 0000644 00000063024 15025641213 0007470 0 ustar 00 wOF2 f �H e� BV �v ��@��@6$�P�* �"�S�'�ݗPn |�M�1�F"�� ��tV �59���3�Ș�T.i�un"��hU���k�T��J��;O�p��c��� 7��ݧ`��������yZ��5Q �W8�exh������2q��$�}~�fð��$l�%����j淴��B,���w~��K|{�ս?�t���`�95y��!9j��/�2z0�ىU�^<�K�>���<[��e�Y_��:Chg�,��O��/���Zwa�L�̅�%���cd�Lw���cW���:Q�C�v9k v�+�Z�Q�N��@@km�^LB1�x�$��C"Z�f� R���`�1�� ��i$���0�T��y��+�J�T]��z�X�7���r�+\�J�]T�Ja�ap� �$����0N�sF40]�E�,EVu��u�8���X �s@��r/�m}��f#`{:@@�����������I�����<�m��Ό0�J \��b :�% �U.�Li�2�MKlX0����^�c[�Ϸ�[�mI�90,0=�r�����姕�ŀ_����\�������wA���P����|{'�3��܁��9wr�sO;w2���=��;yD#�օ��EM� 35-U���Wf����_K+9��A?D0N�@cض�7�!�j����H�vZ�S��Uֵ/v�/��} �A�D�H5��B���E�H�g"1M)��MN�()$�H{�R$�ɩrJm��v9Y�����l��*=���_{4u�ݾ/���T���4*\�_� ajMB� 'Qf+�Jk�ǔO?���9@�D��F�1]��.� $��/��aLU0����x�C�<�nØZEMnjE��1�6KM@A��"�"P]���.&T����:�@bW�P�K��- ����K�эRAփh������(TPj�<�'S�HE ��+��h0����𬉭XR�}P�����AC��Q���ZmX�x���d���?FU����o��F������q����g��� �ԟFD�F�r�����u����m,�/����S,��,}%#6om[���[6��d -ƈ�s�ou���\|iRH����)7L��]�x�c���c��162��5�j�ґY�)).� ��Ti�f��Mъ�FX�/���.�C8S����C��?8O���Bc�q�u]��5'�t�1��R�r�*)���a��23�5ۈQc�M���J4��턓N9�W�Sx�w�D>B!�"e��j�I���(������s[�o1�� ~�o�ܭ�3���9�b���XBL���('�i�oȏ��{�OFu�6i_�?�*�}qZ���̐�dB/����)H#\����x��&� $K��PZA�����-[g}�����_�%��t/��J]�b���36�z�|CV�c�<�}��ET���d����JY����ծC�~]:�y 7�k�G�2oOM���n)ڟ`ⷌ.�\0*e�W&��BA � aP�b@�"���2@�b�&qP�xXM�K��$�$C%R�0� %�42M:T#�L'��Er�&���\J�!�R e�B(G���PB����`?�R��cT���050�Zb�:Skh��h��4���(-0�V�_ɦ�����t�T��=Ђ^�AL�f3 s���&��#ДQh��f63#��-L�"�� 0[����e����1��2[!*�Dm ��Nl�@��E�m��x�]��G��I�$�A�r*s���(����q�� ���p��6N�M��88�9� ��ø3��B�\%t��0����0�[$�����u�sp� ����p<!O��3��s����KX�+��k8�8�[8�;8�{��x�����7�3��� ���o��w����I��" ����/��G��O &��8(�(��P�@ � %a*��APBea��PFBa.T�qPfC�Ua2T�iP�C 5a"Ԃ�PFA� uaԃ�PVCx �4���nA8 M�4C@sd �@AK�"������ �� �!�;`��7�RTF� �a��Ѱ����-��o� H*�`l��p�@���i�����0�f!�2i �������!��,��+x ��2`1T,A*��kX�T,�/�pV�!X `5\�5P� � }� J և"� �(`C���6�� ����������|� � �_���/A=�2�|j���| ��a'|cBm` |÷a!|�w���φ�� ��>���?DZ~C��0~��P�3�-��H+�/ /�â� ��'�w� ~ �C:~��������'x�����+������ ��?��¿��>�=����TA�2�4��"X��,��V�#��!�B�.�"T�РB���#L聰�3N� �?����"@z"큈`?"�S��"2d"�Y�V!ʉ�*�������t��&���b Cp Fڱp � ���o�s��pJ"���XA |b��p��f����7@9ߣ �p-)?�%�c3@���+��Y��3V`z�#�|<�Rd�&Qx�N�7���BSA@N�,��b[10��I�&e�e�H�D��$�y��|��dI^��w�<��¼=�M %,�˙��ZYb+ �e%L��,��KP� �k� :x��_��IM�T��I� S�L�*ɫMJ�,�x4���L��2�ǻlv��ؙ*Db�)�e*K̳�9��=q6��䔽oK��݆���5�ӄ� ����n����łT�n��W�oU�|����`����yo�_�#��=��?���ܧ���s�'d��M|v#&K#�P;�f�/G��LU��W�j���']�[�x��3 �d�����`E��#�3�cO#��z?���7| q+�`ꩅf�Pu�ծ�2n�!��ͧ�3n#k|Qn.�Ӵ�E�%���6)y�E�3� E&��`�..cm]t����h��G��ފ��`�ec��j��� ���}�T~}x���F�yT���n}�ݾ�-�[yh�b �ގ�"�����e(�X��օRqb0w��1����%M��m���l��w�=ɷŘ�:�z�$��������$�{�d���,��c��A��f ���$k-F���)���g ��)@8�U��z*� \�a{�c���U>fp��]K�yK�Ʋ� �|ɀD���L�=���'�r���hU��{J7Ly��}�#�+\�� �E�բ唽�9�6M.�m�wB���>����@Ȗ;�F+������V�4>�W��Q&�K��o^V̱��BIt�=�/J�L*Ò�ј�#��Y�HNE����� (5�� C���P*��eD���c��A/hJ�>��ǽ� ��2�]���_HF��!��z�l���i�N�2 <�5�gz"B>���Y2�)3s�nK��\��ޅ�T�tZ0dQp�H�<�Z#?� c��E{�3���ٜ���Pك�o��|�y;)46.�6F�o�ה�.���y�;�/;W���8cH�:�=�:K9�ʅi����*�7�d�b�4H�A7-[��,]1��Jf����6�+��eaƋ.�a5)ǐV��8u�5-r�,ꮰFz�����t(�r� E鈈���4]�>�����А+gד�`�"%�c0c�R`&��W�����f�C-,[��XD�eɨ� ��aoOR��I��W̏����+��������[��x�(E}BV�׃a3N�lg�����CT��eTH��ub6�,�kC*���=� f�JE� Kb��%�l�0�M��Z���N��u���XW>W���q=:���GL{@=�Ҁ.5R|�Hc� �l��<��;!�Q��P�O ��qt�:i�yzi�������?�۠T���t�:����O�uq��c�T@��HAW]���_��`�����K�,n�h�f�u�c�L�Lq�Z�t�/�Vt3m��teOuV������y�i�s�z�{�ſQ�Z��7n��(���f�7b�1�͆ ���ڿ��:3d=���.��/~����a� tZP��w#���c�<m}�����Ŵg!#��+e�O�·/��@�Nʳݎ{[]�B��Uj�!,o�����¢I����d�6!$Aݤ�t�L��20�~9]�����e�-?��be;/��\K�^��.�uz8�a?��.Rg<5 ��|�T��ڣ�^��E�0W@!d�(�4�z��F������i�6i~��,s���4�a��yQ }U:�T�_M�� |�P#\��������tE2%�M_�o����7����3�]=�D�t�fo��'�~s�y�7ޚe���h�w�U�.�����;�G�-5�PT��N^��+',<a� h~���S5�3܂�:+�q[80�^ӛ7Sc?W艵)mY�+ �n?r�lG����mB��M֙�0��,*�&�X�_�M�!:x��<Ղ�r��q<,� *A�� �AE`<�6���~�{�Q��|�E��� �J�ypi�q�JJr<%ʩ��H`\..���W�9�+��0���x %��ԝ�:N�<g��@��"J�ᰂ�d���0����y�����l�_�~���DF��s('�J%ӡ.^��`��w� nS7��c����r���vaܡ�*����F�� S���ߙ]=GBn�͐1��d����(�#�1��a���݄m��WF��R������.u|�7M �$�w �3S�r��� s��r�Ǽ|�oT�p���k%�% �JiE�'D(�>E�� ����O ���φ%���ڼ��(�^��l S<����<�����Z���{2�N� ��f��5W�T���`c�)�n��Q��g�s�"�,e�)1�F����,~ "Y�O�U�ĕZ�y�\�]&�a��L�\��� �c�ȯՋ7(e ��O����Ls�#Li��2��F��{E8��K�𬥎t�9���c��Vѻ�vDMx�O��ǎ�|�~,?�)����2~p��j�bӱ.���)��/�ǁ�2������ ��{T�m���n�D^�x�s�z��DG\M�����hq���~"���Q����#y�)�^#Q�����d0 e��V�a y�����j�K�糂}�A�U���#>��.�Ԇ`��>�>-Ν����D�T�C�����6�F&��t:��͕�g@��� @�3O\/:���wZ��a�G.a}�ƛ��|��,$�)i��ଽ�/\��������:ԕ�W0 �n~�u%��P z>>ӯ�V:j襌�� ���~�n�,^I��~��X_��Xny��h�_��8qѧ\)�����E�۵��v�m/2��9�K���ƣStԖo��5�˾�|�B��[� u�����s �%]6z���9�::]�Y�2&�=�ma��vy=�'$L�)�2�b��\S�3�TT$���������$C"�y��%<�*�bt��9.p�7~�9`]a�� 8��z`:�h��6g�{��K�@�+Mь�a$S���:���Y=��Hg��2<� �^8k�BJޭg�Ka�a5�?=�eկ$7�@�77t��HR�#�"�?J�Ѓ˺ ]"�á�a,v�䉉�ߝ�5�n��B!�0����Uk����Mݘ��Le.=���01Y���,-�qI��cV��T����%�R����Q%r�_� 4�rP�`�QQ|1Q*f���X���n7�B��|��+:W�1lp��#�b�gNͿNY'�g��\aPFnX�e�}6/�D'�� ��E�>��'�ьݖ�i8��1���4����8�l��:�M�䷯����C����%$�s\��� ��j~�`�~�f� k��}H�y���� �C(�OFr0&�>�)TT�p�X4�T�p���5��t�J��ӻbv[ƃ���l�p�Q����[��o�^�eY�ۺ�U�5��|G�e���T{�s���y?_)�%]����#��e�[����X�4m�X��(�k�,���HͲ��j�`��H��0 ɵ��2%�MS �vl1x�*i�� Ώ ΌËYo��i��5g�꠆'���i�� ư��vݦ M]�&1N�>��{n�Z{#��&�B.g�J�����1��xZН\&�Z�B�㷃�K�[���X�0~G�$���:p���ؙf��[�0�s�Q)x�ؔ��Kd7$|���ʃ�X�x�1����^��?OC�l���A���]�x�e`͂��e� �4c��m�| yb�� )0Q1��ZX�~0 RA���g"��#K�������@������h�K r�Ա�Z�'J�!��$Ox�ښ�{�E<���"E�.�D��궥l8�O:��f�$��� cJ��2z���GRU�B�[XM�(2��B��^��o��{�w͝���'b��%�W���3J�]��bc-��R�x��s��2� ߊ ��Q�LU����[#2�p�bD�6MU�I�ۙ�aU�9t� - �<�?��r��-ܓ���뺋��双��|�� �X �TJ�y�6�d����@�4�?^D>mr�~���NH�����Pm�)C=�e��n��I�v��ц58t�+��XӀ����PI�p��T�C�m�:�|����No����+��uY��D��sf��m�Na)m2�6ҩ�L�'/_y-�_t��"�(���IE�P]���fcȺ��W��b�qv�l���S<�`���yR�jH^�mOf��j�qLɮ��;<�'I���jz�s�)�����.�$[�l�����,����K�gd#�� �s��85���"߉^QΦ- z���`��e/w2n{ Ux�Qϑ��A��']�m(�=X��J�~Tz�iw�ݗ��lr �H4:����ע�{��K{�{z�H��d�}�� ��y���FU�W����)(+P@�%���gԪ�"�� L��"+���g_:��Ă��|�'���>#e��#�>�A>5����8�&UhO��эBF%۠�TXtR�E^��7oS��m��d�_?0X�}h��鍊c�u �m9�m%��ga�����JeQ�c}���2���[ �H� W�;+HV�Y�.�`���b��e�50.r�xY�"��O�Ŷ�ȗ�w6�����/�"����U�D)�^��+��� MR�3�>6�%࣠�������=A�BBֆ��^�X���cGP/��{M�]��^#�_��1}�.��z=S1�|�Vj�Ց?;lS9��boL(���t}5E���3�M��W�ޏIR����_�w�_��b��oҙ�^�/sJ?�3'?�Cx9�BE�} �/�5���o���<� ����X�H~@�4 �צ��"��8��'n����=��5�0�7��wܼܤ��tC ���]�@�,�G����V�&�Ѝ��]���v����lw<�k�*O�c!���:>�l�b�)���[�!��<�k+7�|��T|BØϦ(S��J�����R]����� ��k��|^j��bK�4@�v���.u��������ބ�g�0p�4�B��b���߃C�M��j?�S�* �|�S�hR�t�tH��_l�Tu�R$0O�s$>�9Swz;$)Pq\�r������ίZ�t��R��:J)�H��b|�A� ���m*g"#YOA���i \�{W�́yx;ԇ�)f�[� ���ox��0}xs����^��]��N,<�_W�U�u!�ѕB�<� �qI�E2�@I�Oj��uw ���g��qv� q��; ���[|�� ���d�7`y�j@(QEN)��/m8���J�V}+=p&��4!��.��$�HCVL�U��@cRewz���W��������h��D�$��e����M�"z�>��N% )�PUy�5���M�9&BL�=Jw�̱7o �WH��#�=4n��=c�:� W*�'�^x��: jZk��l<Ty��b����!r<![i��ݘ%_�\�Y�i������Z؋M�áU��I�L��B<�����~%q����>�$��L2&AAm�-�Uh�����Q�ցH�O-��19a����0�����ءԓ D�~�b�u�4Ydz�D��c���Ȓ�/<:��t � �6��Oa�Y���D����f��}���HkqSn#���o6��$�m� Z��#D��H��Rh<?̮���� Ƌ�)�=dI����� �o�Z^��� B�b�Ы4i�: i�[=�ƃ̙CP��O�mRj�e�V�����ab��(�IbE}�l��N78$�Ꮷ��/�g�Ũ Y$X��`�d{���8� ��*�&�n��+LԺd��Z�NjS�Ϫ��_z�ئxrj�`P>�̶r����/sU|���UO ����2�:YM����x�ҹ���I�.C��� Q���H���P���E��q9:�J���G}�L��M+�W ��� #�g�62����3ձ�˧B��o���{P.��*;�pp��(�`���0KD1��~]���Tr�L�J�-�r�HWuD��>G��&'=��tB�TȗY�n�N���4%Ug�ߓ�a��!*�k���P���-gb�_j�Tc�ؒ�� F�s�4��q�}���HPː0bK��,!�ZTM�.f ��Y(SA��)�)���O��?�I�{_��ې�|:�B+��^�YK�s���!��<lb0W%rgS��p3�bnb���ƛd�6�և�4�iH�y�Rv�N�eAe�a%�0q�)�y�æ�и���b}����5�K�F�N�����®�� �C|� ��7�*����LBm����.�[7�����C9��F X�7(F_���<r�-�U�jR�u�0�ŀ�����r�+T��t(wx�p7���E}���e%C��5]� �-�q�y[nbN����q��n<�v>�v��'1ֱ:�YAS�x��(q1�2�ƇXd���`_Z�����n��y�M����q��6;�y��c�V��=d���X�PE��˩�P)�#��1p:�fɛCx#�9f�j+��]QT�S̢��$�\ �L(�Md�*�%'���{��6��\RU�a�����B??kh��v�<���[W�������C!��Zu4qԕ,�I�+U���$�<l��L��'hD����t�,]��;�o���v�J�<��1����3�z'���ST��-N&&� �˿��l�p*�jnX}A��"^�n��<r; ��Ԉh�����<:��aP�����uT*A>�nN�Ӥy�&[�$��R����mV���K�8�v����AL$��o�}����Xx7�t�K�����i�j�!��7LN.����܇O3�fm~$ڝ_�kɬ��i�TE�X� *�Th��K����B��g�f�TgDk;$W�18��&bC=��xY�K�h,����/<2��㏾�h�m�Z�_����.|�cO�X���m�G���G��ָ�W����Et+9����I����v�O��pd N���3:�M����zO]��&�D3B@��D i�����M�kP�iz�e���^�HYD�T0��,�� z�� N�7����b�[���0�#s&�sG��di�,����m3���$���8�̉�nD���a�K��^#ö`Y��q���yy��������1���m�m��Ϭ/�\O=�+�P��ں�dP�1��e��!�N O0�"�'ww��;H�w�.I9����Au�$��e�&����q�2� B�d�����8ݩc��S�w�+���\�ʄ���GG��N�Y��o�H,�+��uojT8D�da��e��F��5�r)�Y /`P�D2}�A�����4�Kh����:�$�_7��l)⽄���?�N(w~L��i�nт�W����*�< �ZS�YF�3�G����,<�p�N�A��/�ÔiQ��|gpE{�gJ:����j�T�L��r"���@L�7�J��p;�ƞ�G��`�q��C_���̋ �Ⱥ���?����,� �ъ�9Q�d7[�^�?�Z�t���Ҍ:�f�G�W�Seq�)���D�*�Z�^�aL�[�}5�!�ؗ�U�q���"ř�WQ-כ�T�)IOkNk��scV�YaKj˲Ļ�Z�>y��I��)j�i��ٜ�F���W����qرu����,�_��s���t?�7��Iװ �^���sX��Q����Z���U�fY�����yS�z�kmW+�3mY��֭c���Dƣ�+��-�֩a˥(� �fn��\16����&�}-���_Q��=����B����1uBV��*ޒ�&E�6>yQa���/���ñ-�2Mj^r�lI��=����S�lS7���f,�J�aDž��@� AlcSTf�vZdxBH۽�>n����Z��{�����푛����Z��q;K!z!9Do�LY{�m����$��/R_wb�-�����0�*#^%�/��ATQik��CC��U�.����!�#����m�C���1{�G�Q2��=_|�2B�:�v��Y_W=�\�yhs����/�v��xL4$�v��l���Wj]t�F�~*?s�:Զ�^=�}�h�њ��������]/{, ���[�0�FGig��x<~gs'�ߘ��WN\���d��nMGލʄ�-r�Ѷ �&.K|�Պ�I-�G.W����6?~l&�OΚ�2�V�܊�n�tM���)��u�O]8k��T�t�Ɓҗ�0/�H9��bl|�1�� ~8c�4� �yL�g�+�+ukLZ�_�[�dhet�-�;C�����$�f���ם�������48s�/��d��ZQ定x���z���O{�&��Ǎ3ӢK0��_��y!�нȔ��,f���$ �8�ax��l.*�UYj��;1��%�Lπ�T>�iDs�.T���>��z�o��M�Q���Ʋ��i]�;}�J~&��ƦR�y ���z��3���b�Д���DS���`t�i"�6�� ��(�@4~D�i� �hd�qϴY�����ky9����q�_�]�������.��������sݽ��qO�����;"V��stt���}�s �My�z�sۼX����K�rL��?����@��G��t�̴+��?�����j�?����۟����oݯ/ v�]m�W��)�XiF{�b�x}�5Y ���.���H�j�깞�ɇ]1�+���7?*�U-�]]��L�����e*uCf �Km6��:3����jT�����jZ2���E�2a!OE�Jx�TQ�s�����ȿ��#];�~75��|���78���y�E?��Of�T-!�o�=������ħp����*��1v5,��:?/�`[ͻ�ʿ�>j�[ |{2Y���+�q��u�0�<#�innvΰ�_w��5�k �R��_����(���h(3"�f��s�)3*�?D����P�o�fg���W��~�B:�E�[�hg������� 2��߷�͎�#�eX��a��n#�2l��uew2� �'t�b����� �q�p��]nx�Ģ���r����4��{���y!텹�cL�o���հ�a���sa���X:�y�ލ(���%�ǂ%eAD�O��Y�6��-TS}�8�&�TYv�d$sY�U�-t����l�H�XԬ�h�}t�6e���R�7+s��W��Q��&!��1�5�K��}y?q���U b���1j\���$�J D�&��q(�oZ�0�J��{��ou/�� ���/��ʥYB��z� q�x�3D?�� ��c ?H�|lK� �P��љ;�*(�C�j��\˫ ��Դn�hBdd*l�ػ [�~�{na&���lu2�2�\�ἁ# �L=`������p4rj��˻ޝ3�13w������}���2J�>�o��:؊�-۳<��Νi�>��Ѵws�o��V�e�H�p�H��ÝO���g|7�(X�����x�4��o���:q�=>�ܴ�~z�Of�f�OqD�tM��~�"���fW�L����>����%Ăǹ8�t:���B�M~Q�K�i��xޢʄ�#�� �G�Q�{��`jL}�y�[���TV����w�x��RVq�L�zVFss�d���8�'�����d5�+a�b9s璴��?v�z�z5�R?Z�Gf�T�S��>b[�%�%+w�)�J^B4��_� >�kD�B�%�%��dE�1/R��m<9U�A�@F� �k�|�<)`B��^hB6�a��,��S��֊8��+�8;�X�sE���P�`�k|������{E �>Z�$^��,Ώn}g�}�@��7[�𛈰�Z��v���硊� !Y���>�����r�)���ƈXVu_���Η�CMcZBi��e���;n�f4�O@Tv�����W�Ă�p�R���'�� �u�xT^�\fO��q��m����L�o4��N.�n#�$MnLJj�H.��bS�(|�N�\�*���fW��W�^���erCޣ��J��q�q&gI��/C�F�:�%�]�u�"�p��K��/��)bS%4%z�pg�кY9���i\B^���[&'�i�� �[4�jE�&q��\�q�-]��'p����.��7��_w�W��@%6�-�|s��W�"P������j(1P��UR���#��_��'܀=s���?�����\�!���>_�ڞc�]E6l�eL1Ph�1 MA(c�d,� ���C��>��" �'